@airtable/blocks 1.8.0 → 1.10.0-experimental-48096ae-20211116
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/CHANGELOG.md +20 -1
- package/dist/cjs/color_utils.js +2 -1
- package/dist/cjs/colors.js +2 -1
- package/dist/cjs/error_utils.js +19 -1
- package/dist/cjs/event_tracker.js +2 -1
- package/dist/cjs/global_config.js +2 -1
- package/dist/cjs/index.js +2 -1
- package/dist/cjs/injected/airtable_interface.js +2 -1
- package/dist/cjs/models/abstract_model.js +2 -1
- package/dist/cjs/models/abstract_model_with_async_data.js +2 -1
- package/dist/cjs/models/base.js +18 -6
- package/dist/cjs/models/create_aggregators.js +2 -1
- package/dist/cjs/models/cursor.js +4 -1
- package/dist/cjs/models/field.js +148 -28
- package/dist/cjs/models/grouped_record_query_result.js +7 -15
- package/dist/cjs/models/linked_records_query_result.js +77 -28
- package/dist/cjs/models/models.js +2 -1
- package/dist/cjs/models/mutation_constants.js +5 -2
- package/dist/cjs/models/mutations.js +69 -177
- package/dist/cjs/models/object_pool.js +2 -1
- package/dist/cjs/models/query_manager.js +328 -0
- package/dist/cjs/models/record.js +310 -56
- package/dist/cjs/models/record_coloring.js +2 -1
- package/dist/cjs/models/record_query_result.js +6 -2
- package/dist/cjs/models/record_store.js +556 -766
- package/dist/cjs/models/session.js +2 -1
- package/dist/cjs/models/table.js +24 -14
- package/dist/cjs/models/table_or_view_query_result.js +482 -415
- package/dist/cjs/models/view.js +2 -1
- package/dist/cjs/models/view_data_store.js +245 -296
- package/dist/cjs/models/view_metadata_query_result.js +2 -1
- package/dist/cjs/perform_record_action.js +2 -1
- package/dist/cjs/private_utils.js +52 -1
- package/dist/cjs/sdk.js +13 -2
- package/dist/cjs/settings_button.js +2 -1
- package/dist/cjs/stats/block_stats.js +2 -1
- package/dist/cjs/testing/abstract_mock_airtable_interface.js +367 -0
- package/dist/cjs/types/aggregators.js +2 -1
- package/dist/cjs/types/airtable_interface.js +2 -1
- package/dist/cjs/types/attachment.js +2 -1
- package/dist/cjs/types/backend_fetch_types.js +2 -1
- package/dist/cjs/types/base.js +2 -1
- package/dist/cjs/types/block.js +2 -1
- package/dist/cjs/types/block_query_spec.js +86 -0
- package/dist/cjs/types/collaborator.js +2 -1
- package/dist/cjs/types/cursor.js +2 -1
- package/dist/cjs/types/field.js +2 -1
- package/dist/cjs/types/global_config.js +2 -1
- package/dist/cjs/types/mutations.js +3 -1
- package/dist/cjs/types/permission_levels.js +2 -1
- package/dist/cjs/types/record.js +2 -1
- package/dist/cjs/types/record_action_data.js +2 -1
- package/dist/cjs/types/stat.js +2 -1
- package/dist/cjs/types/table.js +2 -1
- package/dist/cjs/types/undo_redo.js +2 -1
- package/dist/cjs/types/view.js +2 -1
- package/dist/cjs/types/viewport.js +2 -1
- package/dist/cjs/ui/base_provider.js +2 -1
- package/dist/cjs/ui/baymax_utils.js +2 -1
- package/dist/cjs/ui/block_wrapper.js +2 -1
- package/dist/cjs/ui/box.js +2 -1
- package/dist/cjs/ui/button.js +2 -1
- package/dist/cjs/ui/cell_renderer.js +2 -1
- package/dist/cjs/ui/choice_token.js +2 -1
- package/dist/cjs/ui/collaborator_token.js +2 -1
- package/dist/cjs/ui/color_palette.js +2 -1
- package/dist/cjs/ui/color_palette_synced.js +2 -1
- package/dist/cjs/ui/confirmation_dialog.js +2 -1
- package/dist/cjs/ui/control_sizes.js +2 -1
- package/dist/cjs/ui/create_detect_element_resize.js +2 -1
- package/dist/cjs/ui/css_helpers.js +2 -1
- package/dist/cjs/ui/dialog.js +2 -1
- package/dist/cjs/ui/dialog_close_button.js +2 -1
- package/dist/cjs/ui/expand_record.js +2 -1
- package/dist/cjs/ui/expand_record_list.js +2 -1
- package/dist/cjs/ui/expand_record_picker_async.js +2 -1
- package/dist/cjs/ui/field_icon.js +2 -1
- package/dist/cjs/ui/field_picker.js +2 -1
- package/dist/cjs/ui/field_picker_synced.js +2 -1
- package/dist/cjs/ui/form_field.js +2 -1
- package/dist/cjs/ui/geometry/geometry.js +2 -1
- package/dist/cjs/ui/geometry/point.js +2 -1
- package/dist/cjs/ui/geometry/rect.js +2 -1
- package/dist/cjs/ui/geometry/size.js +2 -1
- package/dist/cjs/ui/global_alert.js +2 -1
- package/dist/cjs/ui/global_config_synced_component_helpers.js +2 -1
- package/dist/cjs/ui/heading.js +2 -1
- package/dist/cjs/ui/icon.js +2 -1
- package/dist/cjs/ui/icon_config.js +6 -3
- package/dist/cjs/ui/initialize_block.js +2 -1
- package/dist/cjs/ui/input.js +2 -1
- package/dist/cjs/ui/input_synced.js +2 -1
- package/dist/cjs/ui/key_codes.js +2 -1
- package/dist/cjs/ui/label.js +2 -1
- package/dist/cjs/ui/link.js +2 -1
- package/dist/cjs/ui/loader.js +2 -1
- package/dist/cjs/ui/modal.js +2 -1
- package/dist/cjs/ui/model_picker_select.js +2 -1
- package/dist/cjs/ui/popover.js +2 -1
- package/dist/cjs/ui/progress_bar.js +2 -1
- package/dist/cjs/ui/record_card.js +2 -1
- package/dist/cjs/ui/record_card_list.js +2 -1
- package/dist/cjs/ui/remote_utils.js +2 -1
- package/dist/cjs/ui/sdk_context.js +2 -1
- package/dist/cjs/ui/select.js +2 -1
- package/dist/cjs/ui/select_and_select_buttons_helpers.js +2 -1
- package/dist/cjs/ui/select_buttons.js +2 -1
- package/dist/cjs/ui/select_buttons_synced.js +2 -1
- package/dist/cjs/ui/select_synced.js +2 -1
- package/dist/cjs/ui/switch.js +2 -1
- package/dist/cjs/ui/switch_synced.js +2 -1
- package/dist/cjs/ui/synced.js +2 -1
- package/dist/cjs/ui/system/all_styles_set.js +2 -1
- package/dist/cjs/ui/system/appearance/appearance_set.js +2 -1
- package/dist/cjs/ui/system/appearance/background_color.js +2 -1
- package/dist/cjs/ui/system/appearance/border.js +2 -1
- package/dist/cjs/ui/system/appearance/border_radius.js +2 -1
- package/dist/cjs/ui/system/appearance/box_shadow.js +2 -1
- package/dist/cjs/ui/system/appearance/opacity.js +2 -1
- package/dist/cjs/ui/system/dimensions/dimensions_set.js +2 -1
- package/dist/cjs/ui/system/dimensions/height.js +2 -1
- package/dist/cjs/ui/system/dimensions/max_height.js +2 -1
- package/dist/cjs/ui/system/dimensions/max_width.js +2 -1
- package/dist/cjs/ui/system/dimensions/min_height.js +2 -1
- package/dist/cjs/ui/system/dimensions/min_width.js +2 -1
- package/dist/cjs/ui/system/dimensions/width.js +2 -1
- package/dist/cjs/ui/system/display.js +2 -1
- package/dist/cjs/ui/system/flex_container/align_content.js +2 -1
- package/dist/cjs/ui/system/flex_container/align_items.js +2 -1
- package/dist/cjs/ui/system/flex_container/flex_container_set.js +2 -1
- package/dist/cjs/ui/system/flex_container/flex_direction.js +2 -1
- package/dist/cjs/ui/system/flex_container/flex_wrap.js +2 -1
- package/dist/cjs/ui/system/flex_container/justify_content.js +2 -1
- package/dist/cjs/ui/system/flex_container/justify_items.js +2 -1
- package/dist/cjs/ui/system/flex_item/align_self.js +2 -1
- package/dist/cjs/ui/system/flex_item/flex.js +2 -1
- package/dist/cjs/ui/system/flex_item/flex_basis.js +2 -1
- package/dist/cjs/ui/system/flex_item/flex_grow.js +2 -1
- package/dist/cjs/ui/system/flex_item/flex_item_set.js +2 -1
- package/dist/cjs/ui/system/flex_item/flex_shrink.js +2 -1
- package/dist/cjs/ui/system/flex_item/justify_self.js +2 -1
- package/dist/cjs/ui/system/flex_item/order.js +2 -1
- package/dist/cjs/ui/system/index.js +2 -1
- package/dist/cjs/ui/system/overflow.js +2 -1
- package/dist/cjs/ui/system/position/bottom.js +2 -1
- package/dist/cjs/ui/system/position/left.js +2 -1
- package/dist/cjs/ui/system/position/position.js +2 -1
- package/dist/cjs/ui/system/position/position_set.js +2 -1
- package/dist/cjs/ui/system/position/right.js +2 -1
- package/dist/cjs/ui/system/position/top.js +2 -1
- package/dist/cjs/ui/system/position/z_index.js +2 -1
- package/dist/cjs/ui/system/spacing/margin.js +2 -1
- package/dist/cjs/ui/system/spacing/padding.js +2 -1
- package/dist/cjs/ui/system/spacing/spacing_set.js +2 -1
- package/dist/cjs/ui/system/typography/font_family.js +2 -1
- package/dist/cjs/ui/system/typography/font_size.js +2 -1
- package/dist/cjs/ui/system/typography/font_style.js +2 -1
- package/dist/cjs/ui/system/typography/font_weight.js +2 -1
- package/dist/cjs/ui/system/typography/letter_spacing.js +2 -1
- package/dist/cjs/ui/system/typography/line_height.js +2 -1
- package/dist/cjs/ui/system/typography/text_align.js +2 -1
- package/dist/cjs/ui/system/typography/text_color.js +2 -1
- package/dist/cjs/ui/system/typography/text_decoration.js +2 -1
- package/dist/cjs/ui/system/typography/text_transform.js +2 -1
- package/dist/cjs/ui/system/typography/typography_set.js +2 -1
- package/dist/cjs/ui/system/utils/create_responsive_prop_type.js +2 -1
- package/dist/cjs/ui/system/utils/create_style_prop_types.js +2 -1
- package/dist/cjs/ui/system/utils/csstype.js +2 -1
- package/dist/cjs/ui/system/utils/ensure_numbers_are_within_scale.js +2 -1
- package/dist/cjs/ui/system/utils/get_style_props_for_responsive_prop.js +2 -1
- package/dist/cjs/ui/system/utils/types.js +2 -1
- package/dist/cjs/ui/table_picker.js +2 -1
- package/dist/cjs/ui/table_picker_synced.js +2 -1
- package/dist/cjs/ui/text.js +2 -1
- package/dist/cjs/ui/text_button.js +2 -1
- package/dist/cjs/ui/theme/default_theme/button_variants.js +2 -1
- package/dist/cjs/ui/theme/default_theme/control_sizes.js +2 -1
- package/dist/cjs/ui/theme/default_theme/heading_styles.js +2 -1
- package/dist/cjs/ui/theme/default_theme/index.js +2 -1
- package/dist/cjs/ui/theme/default_theme/input_variants.js +2 -1
- package/dist/cjs/ui/theme/default_theme/link_variants.js +2 -1
- package/dist/cjs/ui/theme/default_theme/select_buttons_variants.js +2 -1
- package/dist/cjs/ui/theme/default_theme/select_variants.js +2 -1
- package/dist/cjs/ui/theme/default_theme/switch_variants.js +2 -1
- package/dist/cjs/ui/theme/default_theme/text_button_variants.js +2 -1
- package/dist/cjs/ui/theme/default_theme/text_styles.js +2 -1
- package/dist/cjs/ui/theme/default_theme/tokens.js +2 -1
- package/dist/cjs/ui/theme/theme_context.js +2 -1
- package/dist/cjs/ui/theme/use_theme.js +2 -1
- package/dist/cjs/ui/tooltip.js +2 -1
- package/dist/cjs/ui/types/aria_props.js +2 -1
- package/dist/cjs/ui/types/data_attributes_prop.js +2 -1
- package/dist/cjs/ui/types/tooltip_anchor_props.js +2 -1
- package/dist/cjs/ui/ui.js +2 -1
- package/dist/cjs/ui/unstable_standalone_ui.js +2 -1
- package/dist/cjs/ui/use_array_identity.js +2 -1
- package/dist/cjs/ui/use_base.js +2 -1
- package/dist/cjs/ui/use_cursor.js +2 -1
- package/dist/cjs/ui/use_form_field.js +2 -1
- package/dist/cjs/ui/use_global_config.js +3 -2
- package/dist/cjs/ui/use_loadable.js +2 -1
- package/dist/cjs/ui/use_record_action_data.js +2 -1
- package/dist/cjs/ui/use_records.js +7 -2
- package/dist/cjs/ui/use_session.js +2 -1
- package/dist/cjs/ui/use_settings_button.js +2 -1
- package/dist/cjs/ui/use_styled_system.js +2 -1
- package/dist/cjs/ui/use_synced.js +2 -1
- package/dist/cjs/ui/use_text_color_for_background_color.js +2 -1
- package/dist/cjs/ui/use_view_metadata.js +2 -1
- package/dist/cjs/ui/use_viewport.js +2 -1
- package/dist/cjs/ui/use_watchable.js +2 -1
- package/dist/cjs/ui/view_picker.js +2 -1
- package/dist/cjs/ui/view_picker_synced.js +2 -1
- package/dist/cjs/ui/viewport_constraint.js +2 -1
- package/dist/cjs/ui/with_hooks.js +2 -1
- package/dist/cjs/ui/with_styled_system.js +2 -1
- package/dist/cjs/undo_redo.js +2 -1
- package/dist/cjs/unstable_private_utils.js +2 -1
- package/dist/cjs/unstable_testing_utils.js +3 -2
- package/dist/cjs/viewport.js +2 -1
- package/dist/cjs/warning.js +2 -1
- package/dist/cjs/watchable.js +125 -72
- package/dist/types/src/models/base.d.ts +10 -3
- package/dist/types/src/models/base.d.ts.map +1 -1
- package/dist/types/src/models/cursor.d.ts +2 -0
- package/dist/types/src/models/cursor.d.ts.map +1 -1
- package/dist/types/src/models/field.d.ts +65 -1
- package/dist/types/src/models/field.d.ts.map +1 -1
- package/dist/types/src/models/grouped_record_query_result.d.ts +3 -3
- package/dist/types/src/models/grouped_record_query_result.d.ts.map +1 -1
- package/dist/types/src/models/linked_records_query_result.d.ts.map +1 -1
- package/dist/types/src/models/mutation_constants.d.ts +1 -0
- package/dist/types/src/models/mutation_constants.d.ts.map +1 -1
- package/dist/types/src/models/mutations.d.ts.map +1 -1
- package/dist/types/src/models/query_manager.d.ts +2 -0
- package/dist/types/src/models/query_manager.d.ts.map +1 -0
- package/dist/types/src/models/record.d.ts +12 -3
- package/dist/types/src/models/record.d.ts.map +1 -1
- package/dist/types/src/models/record_query_result.d.ts +3 -2
- package/dist/types/src/models/record_query_result.d.ts.map +1 -1
- package/dist/types/src/models/record_store.d.ts.map +1 -1
- package/dist/types/src/models/table.d.ts +8 -4
- package/dist/types/src/models/table.d.ts.map +1 -1
- package/dist/types/src/models/table_or_view_query_result.d.ts +3 -5
- package/dist/types/src/models/table_or_view_query_result.d.ts.map +1 -1
- package/dist/types/src/models/view_data_store.d.ts +0 -1
- package/dist/types/src/models/view_data_store.d.ts.map +1 -1
- package/dist/types/src/models/view_metadata_query_result.d.ts +1 -1
- package/dist/types/src/models/view_metadata_query_result.d.ts.map +1 -1
- package/dist/types/src/private_utils.d.ts +30 -1
- package/dist/types/src/private_utils.d.ts.map +1 -1
- package/dist/types/src/sdk.d.ts.map +1 -1
- package/dist/types/src/testing/{mock_airtable_interface.d.ts → abstract_mock_airtable_interface.d.ts} +20 -15
- package/dist/types/src/testing/abstract_mock_airtable_interface.d.ts.map +1 -0
- package/dist/types/src/types/airtable_interface.d.ts +48 -20
- package/dist/types/src/types/airtable_interface.d.ts.map +1 -1
- package/dist/types/src/types/block_query_spec.d.ts +139 -0
- package/dist/types/src/types/block_query_spec.d.ts.map +1 -0
- package/dist/types/src/types/field.d.ts +80 -44
- package/dist/types/src/types/field.d.ts.map +1 -1
- package/dist/types/src/types/mutations.d.ts +31 -3
- package/dist/types/src/types/mutations.d.ts.map +1 -1
- package/dist/types/src/types/table.d.ts +0 -2
- package/dist/types/src/types/table.d.ts.map +1 -1
- package/dist/types/src/types/view.d.ts +3 -8
- package/dist/types/src/types/view.d.ts.map +1 -1
- package/dist/types/src/ui/cell_renderer.d.ts +1 -1
- package/dist/types/src/ui/color_palette.d.ts +1 -1
- package/dist/types/src/ui/control_sizes.d.ts +1 -1
- package/dist/types/src/ui/field_icon.d.ts +1 -1
- package/dist/types/src/ui/heading.d.ts +1 -1
- package/dist/types/src/ui/icon.d.ts +1 -1
- package/dist/types/src/ui/icon_config.d.ts +33 -31
- package/dist/types/src/ui/icon_config.d.ts.map +1 -1
- package/dist/types/src/ui/input.d.ts +10 -10
- package/dist/types/src/ui/link.d.ts +1 -1
- package/dist/types/src/ui/link.d.ts.map +1 -1
- package/dist/types/src/ui/record_card.d.ts +1 -1
- package/dist/types/src/ui/system/utils/create_style_prop_types.d.ts +1 -1
- package/dist/types/src/ui/system/utils/create_style_prop_types.d.ts.map +1 -1
- package/dist/types/src/ui/text.d.ts +1 -1
- package/dist/types/src/ui/theme/default_theme/index.d.ts +1 -1
- package/dist/types/src/ui/theme/theme_context.d.ts +1 -1
- package/dist/types/src/ui/theme/use_theme.d.ts +1 -1
- package/dist/types/src/ui/use_global_config.d.ts +1 -1
- package/dist/types/src/unstable_testing_utils.d.ts +1 -1
- package/dist/types/src/unstable_testing_utils.d.ts.map +1 -1
- package/dist/types/src/watchable.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts +121 -0
- package/dist/types/test/airtable_interface_mocks/fixture_data.d.ts.map +1 -0
- package/dist/types/test/airtable_interface_mocks/linked_records.d.ts +2 -2
- package/dist/types/test/airtable_interface_mocks/linked_records.d.ts.map +1 -1
- package/dist/types/test/airtable_interface_mocks/{mock_airtable_interface_internal.d.ts → mock_airtable_interface.d.ts} +26 -18
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface.d.ts.map +1 -0
- package/dist/types/test/airtable_interface_mocks/mock_base_data_stores.d.ts +51 -0
- package/dist/types/test/airtable_interface_mocks/mock_base_data_stores.d.ts.map +1 -0
- package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts +2 -2
- package/dist/types/test/airtable_interface_mocks/project_tracker.d.ts.map +1 -1
- package/dist/types/test/test_helpers.d.ts +2 -0
- package/dist/types/test/test_helpers.d.ts.map +1 -1
- package/package.json +2 -1
- package/dist/cjs/testing/mock_airtable_interface.js +0 -317
- package/dist/types/src/testing/mock_airtable_interface.d.ts.map +0 -1
- package/dist/types/test/airtable_interface_mocks/mock_airtable_interface_internal.d.ts.map +0 -1
|
@@ -29,6 +29,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
29
29
|
});
|
|
30
30
|
exports.default = exports.getLinkedTableId = void 0;
|
|
31
31
|
|
|
32
|
+
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
|
|
33
|
+
|
|
32
34
|
var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
|
|
33
35
|
|
|
34
36
|
require("regenerator-runtime/runtime");
|
|
@@ -53,8 +55,12 @@ var _field = require("../types/field");
|
|
|
53
55
|
|
|
54
56
|
var _error_utils = require("../error_utils");
|
|
55
57
|
|
|
58
|
+
var _block_query_spec = require("../types/block_query_spec");
|
|
59
|
+
|
|
56
60
|
var _record_query_result = _interopRequireDefault(require("./record_query_result"));
|
|
57
61
|
|
|
62
|
+
var _record_store = require("./record_store");
|
|
63
|
+
|
|
58
64
|
/** @module @airtable/blocks/models: RecordQueryResult */
|
|
59
65
|
|
|
60
66
|
/** */
|
|
@@ -118,6 +124,8 @@ function (_RecordQueryResult) {
|
|
|
118
124
|
|
|
119
125
|
/** @internal */
|
|
120
126
|
|
|
127
|
+
/** @internal */
|
|
128
|
+
|
|
121
129
|
/** @internal */
|
|
122
130
|
function LinkedRecordsQueryResult(record, field, normalizedOpts, sdk) {
|
|
123
131
|
var _this;
|
|
@@ -134,6 +142,7 @@ function (_RecordQueryResult) {
|
|
|
134
142
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_computedRecordIdsSet", null);
|
|
135
143
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_computedFilteredSortedRecordIds", null);
|
|
136
144
|
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_cellValueChangeHandlerByFieldId", {});
|
|
145
|
+
(0, _defineProperty2.default)((0, _assertThisInitialized2.default)(_this), "_recordStoreQueryId", null);
|
|
137
146
|
(0, _error_utils.invariant)(record.parentTable === field.parentTable, 'record and field must belong to the same table');
|
|
138
147
|
_this._record = record;
|
|
139
148
|
_this._field = field;
|
|
@@ -279,7 +288,7 @@ function (_RecordQueryResult) {
|
|
|
279
288
|
}, {
|
|
280
289
|
key: "_loadDataAsync",
|
|
281
290
|
value: function _loadDataAsync() {
|
|
282
|
-
var initiallyLoaded, changedKeys, fieldIds, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, fieldId;
|
|
291
|
+
var initiallyLoaded, _ref, _ref2, recordStoreQueryId, changedKeys, fieldIds, _iteratorNormalCompletion3, _didIteratorError3, _iteratorError3, _iterator3, _step3, fieldId;
|
|
283
292
|
|
|
284
293
|
return _regenerator.default.async(function _loadDataAsync$(_context2) {
|
|
285
294
|
while (1) {
|
|
@@ -291,11 +300,21 @@ function (_RecordQueryResult) {
|
|
|
291
300
|
|
|
292
301
|
this._watchLinkedQueryResult();
|
|
293
302
|
|
|
294
|
-
initiallyLoaded = this._linkedQueryResult.isDataLoaded;
|
|
303
|
+
initiallyLoaded = this._linkedQueryResult.isDataLoaded; // https://airtable.com/appahuJQw7qfQTBBU/tblSbpimM8Spp9txp/viweAFIus3MhU9Gxa/recNjFYJpeV23LPhH?blocks=hide
|
|
304
|
+
// TODO: (#proj-blocks-sdk-record-limits) Currently queries all cell values in a table
|
|
305
|
+
// when loading linked record data. Must add a LinkedRecord query type in the future.
|
|
306
|
+
// Since _loadDataAsync can only be called once, this recordStoreQueryId is only set once,
|
|
307
|
+
// although it is guaranteed to be stable if needed (so long as this._field.id is stable)
|
|
308
|
+
|
|
295
309
|
_context2.next = 6;
|
|
296
|
-
return _regenerator.default.awrap(Promise.all([this._sdk.base.__getRecordStore(this._record.parentTable.id).
|
|
310
|
+
return _regenerator.default.awrap(Promise.all([this._sdk.base.__getRecordStore(this._record.parentTable.id).loadAllCellValuesInFieldIdsAsync([this._field.id]), this._linkedQueryResult.loadDataAsync(), this._loadRecordColorsAsync()]));
|
|
297
311
|
|
|
298
312
|
case 6:
|
|
313
|
+
_ref = _context2.sent;
|
|
314
|
+
_ref2 = (0, _slicedToArray2.default)(_ref, 1);
|
|
315
|
+
recordStoreQueryId = _ref2[0];
|
|
316
|
+
this._recordStoreQueryId = recordStoreQueryId;
|
|
317
|
+
|
|
299
318
|
this._invalidateComputedData();
|
|
300
319
|
|
|
301
320
|
changedKeys = ['records', 'recordIds', 'recordColors']; // If the linked query result was not initially loaded, then the
|
|
@@ -311,55 +330,55 @@ function (_RecordQueryResult) {
|
|
|
311
330
|
_iteratorNormalCompletion3 = true;
|
|
312
331
|
_didIteratorError3 = false;
|
|
313
332
|
_iteratorError3 = undefined;
|
|
314
|
-
_context2.prev =
|
|
333
|
+
_context2.prev = 17;
|
|
315
334
|
|
|
316
335
|
for (_iterator3 = fieldIds[Symbol.iterator](); !(_iteratorNormalCompletion3 = (_step3 = _iterator3.next()).done); _iteratorNormalCompletion3 = true) {
|
|
317
336
|
fieldId = _step3.value;
|
|
318
337
|
changedKeys.push(_record_query_result.default.WatchableCellValuesInFieldKeyPrefix + fieldId);
|
|
319
338
|
}
|
|
320
339
|
|
|
321
|
-
_context2.next =
|
|
340
|
+
_context2.next = 25;
|
|
322
341
|
break;
|
|
323
342
|
|
|
324
|
-
case
|
|
325
|
-
_context2.prev =
|
|
326
|
-
_context2.t0 = _context2["catch"](
|
|
343
|
+
case 21:
|
|
344
|
+
_context2.prev = 21;
|
|
345
|
+
_context2.t0 = _context2["catch"](17);
|
|
327
346
|
_didIteratorError3 = true;
|
|
328
347
|
_iteratorError3 = _context2.t0;
|
|
329
348
|
|
|
330
|
-
case
|
|
331
|
-
_context2.prev =
|
|
332
|
-
_context2.prev =
|
|
349
|
+
case 25:
|
|
350
|
+
_context2.prev = 25;
|
|
351
|
+
_context2.prev = 26;
|
|
333
352
|
|
|
334
353
|
if (!_iteratorNormalCompletion3 && _iterator3.return != null) {
|
|
335
354
|
_iterator3.return();
|
|
336
355
|
}
|
|
337
356
|
|
|
338
|
-
case
|
|
339
|
-
_context2.prev =
|
|
357
|
+
case 28:
|
|
358
|
+
_context2.prev = 28;
|
|
340
359
|
|
|
341
360
|
if (!_didIteratorError3) {
|
|
342
|
-
_context2.next =
|
|
361
|
+
_context2.next = 31;
|
|
343
362
|
break;
|
|
344
363
|
}
|
|
345
364
|
|
|
346
365
|
throw _iteratorError3;
|
|
347
366
|
|
|
348
|
-
case
|
|
349
|
-
return _context2.finish(
|
|
367
|
+
case 31:
|
|
368
|
+
return _context2.finish(28);
|
|
350
369
|
|
|
351
|
-
case
|
|
352
|
-
return _context2.finish(
|
|
370
|
+
case 32:
|
|
371
|
+
return _context2.finish(25);
|
|
353
372
|
|
|
354
|
-
case
|
|
373
|
+
case 33:
|
|
355
374
|
return _context2.abrupt("return", changedKeys);
|
|
356
375
|
|
|
357
|
-
case
|
|
376
|
+
case 34:
|
|
358
377
|
case "end":
|
|
359
378
|
return _context2.stop();
|
|
360
379
|
}
|
|
361
380
|
}
|
|
362
|
-
}, null, this, [[
|
|
381
|
+
}, null, this, [[17, 21, 25, 33], [26,, 28, 32]]);
|
|
363
382
|
}
|
|
364
383
|
/** @internal */
|
|
365
384
|
|
|
@@ -376,7 +395,9 @@ function (_RecordQueryResult) {
|
|
|
376
395
|
|
|
377
396
|
this._unwatchLinkedQueryResult();
|
|
378
397
|
|
|
379
|
-
|
|
398
|
+
(0, _error_utils.invariant)(this._recordStoreQueryId, 'Unsubscribing from linked record record store without queryId');
|
|
399
|
+
|
|
400
|
+
this._originRecordStore.unloadCellValuesForQueryIdsThatAreSubscribedToAllCells([this._recordStoreQueryId]);
|
|
380
401
|
|
|
381
402
|
this._linkedQueryResult.unloadData();
|
|
382
403
|
|
|
@@ -448,7 +469,12 @@ function (_RecordQueryResult) {
|
|
|
448
469
|
// result
|
|
449
470
|
|
|
450
471
|
|
|
451
|
-
this._originRecordStore.
|
|
472
|
+
this._originRecordStore.watchWithRecordQueryResult({
|
|
473
|
+
recordQueryResult: this,
|
|
474
|
+
keys: _record_store.WatchableRecordStoreKeys.recordIds,
|
|
475
|
+
callbackForRegistration: this._onOriginRecordsChange,
|
|
476
|
+
context: this
|
|
477
|
+
}); // if the linked field in the origin table is deleted, we need to
|
|
452
478
|
// invalidate this result
|
|
453
479
|
|
|
454
480
|
|
|
@@ -592,11 +618,12 @@ function (_RecordQueryResult) {
|
|
|
592
618
|
if (Array.isArray(recordIds)) {
|
|
593
619
|
var recordIdsSet = this._getOrGenerateRecordIdsSet();
|
|
594
620
|
|
|
595
|
-
var filteredRecordIds = recordIds.filter(id => typeof id === 'string' && recordIdsSet[id] === true);
|
|
621
|
+
var filteredRecordIds = recordIds.filter(id => typeof id === 'string' && recordIdsSet[id] === true); // There should always be a filteredRecordIds found for this query
|
|
622
|
+
// type - not finding any is a fundamental mistake in our query engine
|
|
596
623
|
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
624
|
+
(0, _error_utils.invariant)(filteredRecordIds.length, 'Filtered record change on incorrect record, query engine issue');
|
|
625
|
+
|
|
626
|
+
this._onChange(_record_query_result.default.WatchableCellValuesInFieldKeyPrefix + fieldId, filteredRecordIds);
|
|
600
627
|
} else {
|
|
601
628
|
this._onChange(_record_query_result.default.WatchableCellValuesInFieldKeyPrefix + fieldId);
|
|
602
629
|
}
|
|
@@ -776,6 +803,27 @@ function (_RecordQueryResult) {
|
|
|
776
803
|
(0, _error_utils.invariant)(recordIdsSet, 'recordIdsSet must exist');
|
|
777
804
|
return recordIdsSet;
|
|
778
805
|
}
|
|
806
|
+
/**
|
|
807
|
+
* This allows a record query result to specify the source of the query
|
|
808
|
+
* eg: View, Table, Linked record when watching fields.
|
|
809
|
+
* This scopes the watch to those fields + rows in the query.
|
|
810
|
+
*
|
|
811
|
+
* @internal
|
|
812
|
+
*/
|
|
813
|
+
|
|
814
|
+
}, {
|
|
815
|
+
key: "__constructQuerySpecForBlockFieldSelectionSpec",
|
|
816
|
+
value: function __constructQuerySpecForBlockFieldSelectionSpec(fieldSelection) {
|
|
817
|
+
// The origin tableId is always the one referred to here as we must watch the origin record for deletion
|
|
818
|
+
var originTableId = this._record.parentTable.id;
|
|
819
|
+
return {
|
|
820
|
+
sourceType: _block_query_spec.BlockQuerySourceType.TABLE,
|
|
821
|
+
sourceTableId: originTableId,
|
|
822
|
+
recordSelection: {
|
|
823
|
+
fieldSelection
|
|
824
|
+
}
|
|
825
|
+
};
|
|
826
|
+
}
|
|
779
827
|
}, {
|
|
780
828
|
key: "isValid",
|
|
781
829
|
get: function get() {
|
|
@@ -894,4 +942,5 @@ function (_RecordQueryResult) {
|
|
|
894
942
|
|
|
895
943
|
(0, _defineProperty2.default)(LinkedRecordsQueryResult, "_className", 'LinkedRecordsQueryResult');
|
|
896
944
|
var _default = LinkedRecordsQueryResult;
|
|
897
|
-
exports.default = _default;
|
|
945
|
+
exports.default = _default;
|
|
946
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbHMvbGlua2VkX3JlY29yZHNfcXVlcnlfcmVzdWx0LnRzIl0sIm5hbWVzIjpbImdldExpbmtlZFRhYmxlSWQiLCJmaWVsZCIsIm9wdGlvbnMiLCJsaW5rZWRUYWJsZUlkIiwiTGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0IiwicmVjb3JkIiwibm9ybWFsaXplZE9wdHMiLCJzZGsiLCJwYXJlbnRUYWJsZSIsIl9yZWNvcmQiLCJfZmllbGQiLCJfbGlua2VkVGFibGUiLCJ0YWJsZSIsIl9vcmlnaW5SZWNvcmRTdG9yZSIsIl9zZGsiLCJiYXNlIiwiX19nZXRSZWNvcmRTdG9yZSIsImlkIiwiX2xpbmtlZFJlY29yZFN0b3JlIiwicmVjb3JkU3RvcmUiLCJfbGlua2VkUXVlcnlSZXN1bHQiLCJfX3RhYmxlT3JWaWV3UXVlcnlSZXN1bHRQb29sIiwiZ2V0T2JqZWN0Rm9yUmV1c2UiLCJrZXlzIiwiY2FsbGJhY2siLCJjb250ZXh0IiwiaXNWYWxpZCIsInZhbGlkS2V5cyIsImtleSIsIlJlY29yZFF1ZXJ5UmVzdWx0IiwiV2F0Y2hhYmxlS2V5cyIsImNlbGxWYWx1ZXMiLCJfd2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXNJZk5lZWRlZEFmdGVyV2F0Y2giLCJzdGFydHNXaXRoIiwiV2F0Y2hhYmxlQ2VsbFZhbHVlc0luRmllbGRLZXlQcmVmaXgiLCJmaWVsZElkIiwic3Vic3RyaW5nIiwibGVuZ3RoIiwiX3dhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSW5GaWVsZElmTmVlZGVkQWZ0ZXJXYXRjaCIsImFycmF5S2V5cyIsIkFycmF5IiwiaXNBcnJheSIsIl91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSWZQb3NzaWJsZUJlZm9yZVVud2F0Y2giLCJfdW53YXRjaExpbmtlZFF1ZXJ5Q2VsbFZhbHVlc0luRmllbGRJZlBvc3NpYmxlQmVmb3JlVW53YXRjaCIsImlzRGF0YUxvYWRlZCIsImxvYWREYXRhQXN5bmMiLCJ1bmxvYWREYXRhIiwiX19saW5rZWRSZWNvcmRzUXVlcnlSZXN1bHRQb29sIiwicmVnaXN0ZXJPYmplY3RGb3JSZXVzZVN0cm9uZyIsIl93YXRjaE9yaWdpbiIsIl93YXRjaExpbmtlZFF1ZXJ5UmVzdWx0IiwiaW5pdGlhbGx5TG9hZGVkIiwiUHJvbWlzZSIsImFsbCIsImxvYWRBbGxDZWxsVmFsdWVzSW5GaWVsZElkc0FzeW5jIiwiX2xvYWRSZWNvcmRDb2xvcnNBc3luYyIsInJlY29yZFN0b3JlUXVlcnlJZCIsIl9yZWNvcmRTdG9yZVF1ZXJ5SWQiLCJfaW52YWxpZGF0ZUNvbXB1dGVkRGF0YSIsImNoYW5nZWRLZXlzIiwicHVzaCIsImZpZWxkSWRzIiwiX25vcm1hbGl6ZWRPcHRzIiwiZmllbGRJZHNPck51bGxJZkFsbEZpZWxkcyIsImZpZWxkcyIsIm1hcCIsInVucmVnaXN0ZXJPYmplY3RGb3JSZXVzZVN0cm9uZyIsIl91bndhdGNoT3JpZ2luIiwiX3Vud2F0Y2hMaW5rZWRRdWVyeVJlc3VsdCIsInVubG9hZENlbGxWYWx1ZXNGb3JRdWVyeUlkc1RoYXRBcmVTdWJzY3JpYmVkVG9BbGxDZWxscyIsIl91bmxvYWRSZWNvcmRDb2xvcnMiLCJfY2VsbFZhbHVlc1dhdGNoQ291bnQiLCJfd2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXMiLCJfdW53YXRjaExpbmtlZFF1ZXJ5Q2VsbFZhbHVlcyIsIl9jZWxsVmFsdWVXYXRjaENvdW50QnlGaWVsZElkIiwiX3dhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSW5GaWVsZCIsIl91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSW5GaWVsZCIsIndhdGNoIiwiX29uT3JpZ2luQ2VsbFZhbHVlQ2hhbmdlIiwiX29uT3JpZ2luRmllbGRDb25maWdDaGFuZ2UiLCJ3YXRjaFdpdGhSZWNvcmRRdWVyeVJlc3VsdCIsInJlY29yZFF1ZXJ5UmVzdWx0IiwiV2F0Y2hhYmxlUmVjb3JkU3RvcmVLZXlzIiwicmVjb3JkSWRzIiwiY2FsbGJhY2tGb3JSZWdpc3RyYXRpb24iLCJfb25PcmlnaW5SZWNvcmRzQ2hhbmdlIiwiX29uT3JpZ2luRmllbGRzQ2hhbmdlIiwidW53YXRjaCIsIl9vbkxpbmtlZFJlY29yZElkc0NoYW5nZSIsIl9vbkxpbmtlZENlbGxWYWx1ZXNDaGFuZ2UiLCJfZ2V0T25MaW5rZWRDZWxsVmFsdWVzSW5GaWVsZENoYW5nZSIsIl9vbkNoYW5nZSIsInF1ZXJ5UmVzdWx0IiwiY2hhbmdlcyIsInJlY29yZElkc1NldCIsIl9nZXRPckdlbmVyYXRlUmVjb3JkSWRzU2V0IiwiZmlsdGVyIiwiX2NlbGxWYWx1ZUNoYW5nZUhhbmRsZXJCeUZpZWxkSWQiLCJmaWx0ZXJlZFJlY29yZElkcyIsImlzRGVsZXRlZCIsIl9pc1ZhbGlkIiwidHlwZSIsIkZpZWxkVHlwZSIsIk1VTFRJUExFX1JFQ09SRF9MSU5LUyIsIl9pbnZhbGlkYXRlUXVlcnlSZXN1bHQiLCJfdW5sb2FkRGF0YSIsIk9iamVjdCIsIl9jb21wdXRlZFJlY29yZElkc1NldCIsIl9jb21wdXRlZEZpbHRlcmVkU29ydGVkUmVjb3JkSWRzIiwiX2dlbmVyYXRlQ29tcHV0ZWREYXRhIiwicmF3Q2VsbFZhbHVlIiwiZ2V0Q2VsbFZhbHVlIiwiY2VsbFZhbHVlIiwibGlua2VkUmVjb3JkIiwicmVjb3JkSWQiLCJoYXNSZWNvcmQiLCJzb3J0cyIsIl9nZW5lcmF0ZUNvbXB1dGVkRGF0YUlmTmVlZGVkIiwiZmllbGRTZWxlY3Rpb24iLCJvcmlnaW5UYWJsZUlkIiwic291cmNlVHlwZSIsIkJsb2NrUXVlcnlTb3VyY2VUeXBlIiwiVEFCTEUiLCJzb3VyY2VUYWJsZUlkIiwicmVjb3JkU2VsZWN0aW9uIiwiZ2V0UmVjb3JkQnlJZElmRXhpc3RzIiwiX3NlcmlhbGl6ZWRPcHRzIiwiX2NoYW5nZVdhdGNoZXJzQnlLZXkiLCJjb3VudEJ5RmllbGRJZCIsIndhdGNoS2V5cyIsIndhdGNoS2V5Iiwic2xpY2UiXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQ0E7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Q0MsVUFBMUQsS0FBeUUsRUFBMUUsRUFBOEVNLE1BQXJGO0FBQ0g7Ozt3QkFpQnNFO0FBQ25FLFVBQU0yRixjQUEwQyxHQUFHLEVBQW5EO0FBQ0EsVUFBTUMsU0FBUyxHQUFHdkIsTUFBTSxDQUFDbkYsSUFBUCxDQUFZLEtBQUt3RyxvQkFBakIsRUFBdUMvQixNQUF2QyxDQUE4Q3BFLEdBQUcsSUFBSTtBQUNuRSxlQUFPQSxHQUFHLENBQUNLLFVBQUosQ0FBZUosNkJBQWtCSyxtQ0FBakMsQ0FBUDtBQUNILE9BRmlCLENBQWxCO0FBRm1FO0FBQUE7QUFBQTs7QUFBQTtBQUtuRSw4QkFBdUIrRixTQUF2QixtSUFBa0M7QUFBQSxjQUF2QkMsUUFBdUI7QUFDOUIsY0FBTS9GLE9BQU8sR0FBRytGLFFBQVEsQ0FBQ0MsS0FBVCxDQUNadEcsNkJBQWtCSyxtQ0FBbEIsQ0FBc0RHLE1BRDFDLENBQWhCO0FBR0EyRixVQUFBQSxjQUFjLENBQUM3RixPQUFELENBQWQsR0FBMEIsS0FBSzRGLG9CQUFMLENBQTBCRyxRQUExQixFQUFvQzdGLE1BQTlEO0FBQ0g7QUFWa0U7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTs7QUFZbkUsYUFBTzJGLGNBQVA7QUFDSDs7O3dCQThIK0Q7QUFDNUQsVUFBSSxLQUFLdkgsT0FBTCxDQUFhMEYsU0FBYixJQUEwQixLQUFLakYsa0JBQUwsQ0FBd0JpRixTQUF0RCxFQUFpRTtBQUM3RCxlQUFPLElBQVA7QUFDSDs7QUFFRCxhQUFPLEVBQVA7QUFDSDs7O0VBN2JrQ3RFLDRCOzs4QkFBakN6Qix3QixnQkFFa0IsMEI7ZUEycEJUQSx3QiIsInNvdXJjZXNDb250ZW50IjpbIi8qKiBAbW9kdWxlIEBhaXJ0YWJsZS9ibG9ja3MvbW9kZWxzOiBSZWNvcmRRdWVyeVJlc3VsdCAqLyAvKiogKi9cbmltcG9ydCB7RmllbGRUeXBlLCBGaWVsZElkfSBmcm9tICcuLi90eXBlcy9maWVsZCc7XG5pbXBvcnQgU2RrIGZyb20gJy4uL3Nkayc7XG5pbXBvcnQge0Zsb3dBbnlGdW5jdGlvbiwgRmxvd0FueU9iamVjdCwgT2JqZWN0TWFwfSBmcm9tICcuLi9wcml2YXRlX3V0aWxzJztcbmltcG9ydCB7aW52YXJpYW50fSBmcm9tICcuLi9lcnJvcl91dGlscyc7XG5pbXBvcnQge1JlY29yZElkfSBmcm9tICcuLi90eXBlcy9yZWNvcmQnO1xuaW1wb3J0IHtcbiAgICBCbG9ja1F1ZXJ5SWQsXG4gICAgQmxvY2tRdWVyeVNwZWMsXG4gICAgQmxvY2tRdWVyeVNvdXJjZVR5cGUsXG4gICAgQmxvY2tGaWVsZFNlbGVjdGlvblNwZWMsXG59IGZyb20gJy4uL3R5cGVzL2Jsb2NrX3F1ZXJ5X3NwZWMnO1xuaW1wb3J0IFJlY29yZFF1ZXJ5UmVzdWx0LCB7XG4gICAgV2F0Y2hhYmxlUmVjb3JkUXVlcnlSZXN1bHRLZXksXG4gICAgTm9ybWFsaXplZFJlY29yZFF1ZXJ5UmVzdWx0T3B0cyxcbn0gZnJvbSAnLi9yZWNvcmRfcXVlcnlfcmVzdWx0JztcbmltcG9ydCBUYWJsZU9yVmlld1F1ZXJ5UmVzdWx0IGZyb20gJy4vdGFibGVfb3Jfdmlld19xdWVyeV9yZXN1bHQnO1xuXG5pbXBvcnQgVGFibGUgZnJvbSAnLi90YWJsZSc7XG5pbXBvcnQgRmllbGQgZnJvbSAnLi9maWVsZCc7XG5pbXBvcnQgUmVjb3JkIGZyb20gJy4vcmVjb3JkJztcbmltcG9ydCBSZWNvcmRTdG9yZSwge1dhdGNoYWJsZVJlY29yZFN0b3JlS2V5c30gZnJvbSAnLi9yZWNvcmRfc3RvcmUnO1xuXG5leHBvcnQgY29uc3QgZ2V0TGlua2VkVGFibGVJZCA9IChmaWVsZDogRmllbGQpOiBzdHJpbmcgPT4ge1xuICAgIGNvbnN0IG9wdGlvbnMgPSBmaWVsZC5vcHRpb25zO1xuICAgIGNvbnN0IGxpbmtlZFRhYmxlSWQgPSBvcHRpb25zICYmIG9wdGlvbnMubGlua2VkVGFibGVJZDtcbiAgICBpbnZhcmlhbnQodHlwZW9mIGxpbmtlZFRhYmxlSWQgPT09ICdzdHJpbmcnLCAnbGlua2VkVGFibGVJZCBtdXN0IGV4aXN0Jyk7XG5cbiAgICByZXR1cm4gbGlua2VkVGFibGVJZDtcbn07XG5cbi8qKiBpbnRlcm5hbCAqL1xuaW50ZXJmYWNlIExpbmtlZFJlY29yZHNRdWVyeVJlc3VsdERhdGEge31cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgc2V0IG9mIHJlY29yZHMgZnJvbSBhIExpbmtlZFJlY29yZCBjZWxsIHZhbHVlLiBTZWUge0BsaW5rIFJlY29yZFF1ZXJ5UmVzdWx0fSBmb3IgbWFpblxuICogZG9jdW1lbnRhdGlvbi5cbiAqXG4gKiBEbyBub3QgaW5zdGFudGlhdGUuIFlvdSBjYW4gZ2V0IGluc3RhbmNlcyBvZiB0aGlzIGNsYXNzIGJ5IGNhbGxpbmdcbiAqIGByZWNvcmQuc2VsZWN0TGlua2VkUmVjb3Jkc0Zyb21DZWxsYC5cbiAqXG4gKiBAZG9jc1BhdGggbW9kZWxzL3F1ZXJ5IHJlc3VsdHMvTGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0XG4gKi9cbmNsYXNzIExpbmtlZFJlY29yZHNRdWVyeVJlc3VsdCBleHRlbmRzIFJlY29yZFF1ZXJ5UmVzdWx0PExpbmtlZFJlY29yZHNRdWVyeVJlc3VsdERhdGE+IHtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgc3RhdGljIF9jbGFzc05hbWUgPSAnTGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0JztcblxuICAgIC8vIHRoZSByZWNvcmQgY29udGFpbmluZyB0aGUgbGlua2VkLXJlY29yZCBjZWxsIHRoaXMgaXMgYSBxdWVyeSBvZi5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3JlY29yZDogUmVjb3JkO1xuICAgIC8vIHRoZSBjZWxsJ3MgZmllbGQgaW4gdGhlIHJlY29yZFxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfZmllbGQ6IEZpZWxkO1xuICAgIC8vIHRoZSB0YWJsZSB3ZSdyZSBsaW5raW5nIHRvXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9saW5rZWRUYWJsZTogVGFibGU7XG4gICAgLy8gdGhlIHJlY29yZHMgc3RvcmUgZm9yIHRoZSBvcmlnaW4gdGFibGVcbiAgICAvKiogQGludGVybmFsICovXG4gICAgX29yaWdpblJlY29yZFN0b3JlOiBSZWNvcmRTdG9yZTtcbiAgICAvLyB0aGUgcmVjb3JkcyBzdG9yZSBmb3IgdGhlIGxpbmtlZCB0YWJsZVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfbGlua2VkUmVjb3JkU3RvcmU6IFJlY29yZFN0b3JlO1xuICAgIC8vIGEgUmVjb3JkUXVlcnlSZXN1bHQgY29udGFpbmluZyBhbGwgdGhlIHJvd3MgaW4gdGhlIGxpbmtlZCB0YWJsZVxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfbGlua2VkUXVlcnlSZXN1bHQ6IFRhYmxlT3JWaWV3UXVlcnlSZXN1bHQ7XG4gICAgLy8gaXMgdGhlIHF1ZXJ5IHJlc3VsdCBjdXJyZW50bHkgdmFsaWQuIGlmIHRoZSBmaWVsZCBjb25maWcgY2hhbmdlcyB0byBsaW5rXG4gICAgLy8gdG8gYW5vdGhlciB0YWJsZSBvciBub3QgYmUgYSBsaW5rZWQgcmVjb3JkIGZpZWxkIGF0IGFsbCwgaXNWYWxpZCB3aWxsXG4gICAgLy8gYmVjb21lIGZhbHNlLiBvbmNlIGEgTGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0IGhhcyBiZWNvbWUgaW52YWxpZCwgaXQgd2lsbFxuICAgIC8vIG5vdCBiZWNvbWUgdmFsaWQgYWdhaW4uXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9pc1ZhbGlkOiBib29sZWFuID0gdHJ1ZTtcbiAgICAvLyBhIGxhemlseS1nZW5lcmF0ZWQgc2V0IG9mIHRoZSByZWNvcmQgaWRzIGluIHRoZSByZXN1bHQgc2V0LlxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfY29tcHV0ZWRSZWNvcmRJZHNTZXQ6IHtba2V5OiBzdHJpbmddOiB0cnVlIHwgdm9pZH0gfCBudWxsID0gbnVsbDtcbiAgICAvLyBhIGxhemlseS1nZW5lcmF0ZWQgYXJyYXkgb2YgdGhlIHJlY29yZCBpZHMgaW4gdGhlIHF1ZXJ5IHJlc3VsdC5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX2NvbXB1dGVkRmlsdGVyZWRTb3J0ZWRSZWNvcmRJZHM6IEFycmF5PHN0cmluZz4gfCBudWxsID0gbnVsbDtcbiAgICAvLyBob3cgbWFueSB0aW1lcyBoYXMgZWFjaCAnY2VsbFZhbHVlc0luRmllbGQ6JEZpZWxkSWQnIGJlZW4gd2F0Y2hlZD9cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX2NlbGxWYWx1ZUNoYW5nZUhhbmRsZXJCeUZpZWxkSWQ6IHtcbiAgICAgICAgW2tleTogc3RyaW5nXTogKFxuICAgICAgICAgICAgYXJnMTogVGFibGVPclZpZXdRdWVyeVJlc3VsdCxcbiAgICAgICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICAgICAgcmVjb3JkSWRzOiBBcnJheTxSZWNvcmRJZD4gfCB2b2lkLFxuICAgICAgICApID0+IHZvaWQ7XG4gICAgfSA9IHt9O1xuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfcmVjb3JkU3RvcmVRdWVyeUlkOiBCbG9ja1F1ZXJ5SWQgfCBudWxsID0gbnVsbDtcblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcmVjb3JkOiBSZWNvcmQsXG4gICAgICAgIGZpZWxkOiBGaWVsZCxcbiAgICAgICAgbm9ybWFsaXplZE9wdHM6IE5vcm1hbGl6ZWRSZWNvcmRRdWVyeVJlc3VsdE9wdHMsXG4gICAgICAgIHNkazogU2RrLFxuICAgICkge1xuICAgICAgICBzdXBlcihzZGssIG5vcm1hbGl6ZWRPcHRzKTtcblxuICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICByZWNvcmQucGFyZW50VGFibGUgPT09IGZpZWxkLnBhcmVudFRhYmxlLFxuICAgICAgICAgICAgJ3JlY29yZCBhbmQgZmllbGQgbXVzdCBiZWxvbmcgdG8gdGhlIHNhbWUgdGFibGUnLFxuICAgICAgICApO1xuXG4gICAgICAgIHRoaXMuX3JlY29yZCA9IHJlY29yZDtcbiAgICAgICAgdGhpcy5fZmllbGQgPSBmaWVsZDtcbiAgICAgICAgdGhpcy5fbGlua2VkVGFibGUgPSBub3JtYWxpemVkT3B0cy50YWJsZTtcbiAgICAgICAgdGhpcy5fb3JpZ2luUmVjb3JkU3RvcmUgPSB0aGlzLl9zZGsuYmFzZS5fX2dldFJlY29yZFN0b3JlKHRoaXMuX3JlY29yZC5wYXJlbnRUYWJsZS5pZCk7XG4gICAgICAgIHRoaXMuX2xpbmtlZFJlY29yZFN0b3JlID0gbm9ybWFsaXplZE9wdHMucmVjb3JkU3RvcmU7XG5cbiAgICAgICAgLy8gd2UgY291bGQgcmVseSBvbiBSZWNvcmRRdWVyeVJlc3VsdCdzIHJldXNlIHBvb2wgdG8gbWFrZSBzdXJlIHdlIGdldCBiYWNrXG4gICAgICAgIC8vIHRoZSBzYW1lIFJlY29yZFF1ZXJ5UmVzdWx0IGV2ZXJ5IHRpbWUsIGJ1dCB0aGF0IHdvdWxkIG1ha2UgaXQgbXVjaCBoYXJkZXJcbiAgICAgICAgLy8gdG8gbWFrZSBzdXJlIHdlIHVud2F0Y2ggZXZlcnl0aGluZyBmcm9tIHRoZSBvbGQgUmVjb3JkUXVlcnlSZXN1bHQgaWYgZS5nLlxuICAgICAgICAvLyB0aGUgZmllbGQgY29uZmlnIGNoYW5nZXMgdG8gcG9pbnQgYXQgYSBkaWZmZXJlbnQgdGFibGVcbiAgICAgICAgdGhpcy5fbGlua2VkUXVlcnlSZXN1bHQgPSB0aGlzLl9saW5rZWRUYWJsZS5fX3RhYmxlT3JWaWV3UXVlcnlSZXN1bHRQb29sLmdldE9iamVjdEZvclJldXNlKFxuICAgICAgICAgICAgdGhpcy5fc2RrLFxuICAgICAgICAgICAgdGhpcy5fbGlua2VkVGFibGUsXG4gICAgICAgICAgICBub3JtYWxpemVkT3B0cyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBJcyB0aGUgcXVlcnkgcmVzdWx0IGN1cnJlbnRseSB2YWxpZD8gVGhpcyB2YWx1ZSBhbHdheXMgc3RhcnRzIGFzICd0cnVlJyxcbiAgICAgKiBidXQgY2FuIGJlY29tZSBmYWxzZSBpZiB0aGUgcmVjb3JkIGZyb20gd2hpY2ggdGhpcyByZXN1bHQgd2FzIGNyZWF0ZWQgaXNcbiAgICAgKiBkZWxldGVkLCBpZiB0aGUgZmllbGQgaXMgZGVsZXRlZCwgaWYgdGhlIGZpZWxkIGNvbmZpZyBjaGFuZ2VzIHRvIGxpbmsgdG9cbiAgICAgKiBhIGRpZmZlcmVudCB0YWJsZSwgb3IgaWYgdGhlIGZpZWxkIGNvbmZpZyBjaGFuZ2VzIHRvIGxpbmsgdG8gYSB0eXBlXG4gICAgICogb3RoZXIgdGhhbiBNVUxUSVBMRV9SRUNPUkRfTElOS1MuIE9uY2UgYGlzVmFsaWRgIGhhcyBiZWNvbWUgZmFsc2UsIGl0XG4gICAgICogd2lsbCBuZXZlciBiZWNvbWUgdHJ1ZSBhZ2Fpbi4gTWFueSBmaWVsZHMgd2lsbCB0aHJvdyBvbiBhdHRlbXB0aW5nIHRvXG4gICAgICogYWNjZXNzIHRoZW0sIGFuZCB3YXRjaGVzIHdpbGwgbm8gbG9uZ2VyIGZpcmUuXG4gICAgICovXG4gICAgZ2V0IGlzVmFsaWQoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLl9pc1ZhbGlkO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoZSB0YWJsZSB0aGF0IHJlY29yZHMgaW4gdGhpcyBSZWNvcmRRdWVyeVJlc3VsdCBhcmUgcGFydCBvZlxuICAgICAqXG4gICAgICogQGludGVybmFsIChzaW5jZSB3ZSBtYXkgbm90IGJlIGFibGUgdG8gcmV0dXJuIHBhcmVudCBtb2RlbCBpbnN0YW5jZXMgaW4gdGhlIGltbXV0YWJsZSBtb2RlbHMgd29ybGQpXG4gICAgICovXG4gICAgZ2V0IHBhcmVudFRhYmxlKCk6IFRhYmxlIHtcbiAgICAgICAgaW52YXJpYW50KHRoaXMuaXNWYWxpZCwgJ0xpbmtlZFJlY29yZHNRdWVyeVJlc3VsdCBpcyBubyBsb25nZXIgdmFsaWQnKTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2xpbmtlZFRhYmxlO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIE9yZGVyZWQgYXJyYXkgb2YgYWxsIHRoZSBsaW5rZWQgcmVjb3JkIGlkcy4gV2F0Y2hhYmxlLlxuICAgICAqL1xuICAgIGdldCByZWNvcmRJZHMoKTogQXJyYXk8c3RyaW5nPiB7XG4gICAgICAgIGludmFyaWFudCh0aGlzLmlzVmFsaWQsICdMaW5rZWRSZWNvcmRzUXVlcnlSZXN1bHQgaXMgbm8gbG9uZ2VyIHZhbGlkJyk7XG4gICAgICAgIGludmFyaWFudCh0aGlzLmlzRGF0YUxvYWRlZCwgJ0xpbmtlZFJlY29yZHNRdWVyeVJlc3VsdCBkYXRhIGlzIG5vdCBsb2FkZWQnKTtcblxuICAgICAgICAvLyByZWNvcmQgaWRzIGFyZSBsYXppbHkgZ2VuZXJhdGVkXG4gICAgICAgIHRoaXMuX2dlbmVyYXRlQ29tcHV0ZWREYXRhSWZOZWVkZWQoKTtcblxuICAgICAgICBpbnZhcmlhbnQodGhpcy5fY29tcHV0ZWRGaWx0ZXJlZFNvcnRlZFJlY29yZElkcywgJ25vIHJlY29yZElkcycpO1xuICAgICAgICByZXR1cm4gdGhpcy5fY29tcHV0ZWRGaWx0ZXJlZFNvcnRlZFJlY29yZElkcztcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBPcmRlcmVkIGFycmF5IG9mIGFsbCB0aGUgbGlua2VkIHJlY29yZHMuIFdhdGNoYWJsZS5cbiAgICAgKi9cbiAgICBnZXQgcmVjb3JkcygpOiBBcnJheTxSZWNvcmQ+IHtcbiAgICAgICAgaW52YXJpYW50KHRoaXMuaXNWYWxpZCwgJ0xpbmtlZFJlY29yZHNRdWVyeVJlc3VsdCBpcyBubyBsb25nZXIgdmFsaWQnKTtcblxuICAgICAgICByZXR1cm4gdGhpcy5yZWNvcmRJZHMubWFwKHJlY29yZElkID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZCA9IHRoaXMuX2xpbmtlZFJlY29yZFN0b3JlLmdldFJlY29yZEJ5SWRJZkV4aXN0cyhyZWNvcmRJZCk7XG4gICAgICAgICAgICBpbnZhcmlhbnQocmVjb3JkLCAnTm8gcmVjb3JkIGZvciBpZDogJXMnLCByZWNvcmRJZCk7XG4gICAgICAgICAgICByZXR1cm4gcmVjb3JkO1xuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGUgZmllbGRzIHRoYXQgd2VyZSB1c2VkIHRvIGNyZWF0ZSB0aGlzIExpbmtlZFJlY29yZHNRdWVyeVJlc3VsdC5cbiAgICAgKi9cbiAgICBnZXQgZmllbGRzKCk6IEFycmF5PEZpZWxkPiB8IG51bGwge1xuICAgICAgICBpbnZhcmlhbnQodGhpcy5pc1ZhbGlkLCAnTGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0IGlzIG5vIGxvbmdlciB2YWxpZCcpO1xuXG4gICAgICAgIHJldHVybiB0aGlzLl9saW5rZWRRdWVyeVJlc3VsdC5maWVsZHM7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0ZG9jICovXG4gICAgd2F0Y2goXG4gICAgICAgIGtleXM6IFdhdGNoYWJsZVJlY29yZFF1ZXJ5UmVzdWx0S2V5IHwgUmVhZG9ubHlBcnJheTxXYXRjaGFibGVSZWNvcmRRdWVyeVJlc3VsdEtleT4sXG4gICAgICAgIGNhbGxiYWNrOiBGbG93QW55RnVuY3Rpb24sXG4gICAgICAgIGNvbnRleHQ/OiBGbG93QW55T2JqZWN0IHwgbnVsbCxcbiAgICApOiBBcnJheTxXYXRjaGFibGVSZWNvcmRRdWVyeVJlc3VsdEtleT4ge1xuICAgICAgICBpbnZhcmlhbnQodGhpcy5pc1ZhbGlkLCAnY2Fubm90IHdhdGNoIGFuIGludmFsaWQgTGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0Jyk7XG5cbiAgICAgICAgY29uc3QgdmFsaWRLZXlzID0gc3VwZXIud2F0Y2goa2V5cywgY2FsbGJhY2ssIGNvbnRleHQpO1xuICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiB2YWxpZEtleXMpIHtcbiAgICAgICAgICAgIGlmIChrZXkgPT09IFJlY29yZFF1ZXJ5UmVzdWx0LldhdGNoYWJsZUtleXMuY2VsbFZhbHVlcykge1xuICAgICAgICAgICAgICAgIHRoaXMuX3dhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSWZOZWVkZWRBZnRlcldhdGNoKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChrZXkuc3RhcnRzV2l0aChSZWNvcmRRdWVyeVJlc3VsdC5XYXRjaGFibGVDZWxsVmFsdWVzSW5GaWVsZEtleVByZWZpeCkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmaWVsZElkID0ga2V5LnN1YnN0cmluZyhcbiAgICAgICAgICAgICAgICAgICAgUmVjb3JkUXVlcnlSZXN1bHQuV2F0Y2hhYmxlQ2VsbFZhbHVlc0luRmllbGRLZXlQcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgdGhpcy5fd2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXNJbkZpZWxkSWZOZWVkZWRBZnRlcldhdGNoKGZpZWxkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiB2YWxpZEtleXM7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0ZG9jICovXG4gICAgdW53YXRjaChcbiAgICAgICAga2V5czogV2F0Y2hhYmxlUmVjb3JkUXVlcnlSZXN1bHRLZXkgfCBSZWFkb25seUFycmF5PFdhdGNoYWJsZVJlY29yZFF1ZXJ5UmVzdWx0S2V5PixcbiAgICAgICAgY2FsbGJhY2s6IEZsb3dBbnlGdW5jdGlvbixcbiAgICAgICAgY29udGV4dD86IEZsb3dBbnlPYmplY3QgfCBudWxsLFxuICAgICk6IEFycmF5PFdhdGNoYWJsZVJlY29yZFF1ZXJ5UmVzdWx0S2V5PiB7XG4gICAgICAgIGNvbnN0IGFycmF5S2V5cyA9IChBcnJheS5pc0FycmF5KGtleXMpID8ga2V5cyA6IFtrZXlzXSkgYXMgUmVhZG9ubHlBcnJheTxcbiAgICAgICAgICAgIFdhdGNoYWJsZVJlY29yZFF1ZXJ5UmVzdWx0S2V5XG4gICAgICAgID47XG5cbiAgICAgICAgZm9yIChjb25zdCBrZXkgb2YgYXJyYXlLZXlzKSB7XG4gICAgICAgICAgICBpZiAoa2V5ID09PSBSZWNvcmRRdWVyeVJlc3VsdC5XYXRjaGFibGVLZXlzLmNlbGxWYWx1ZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSWZQb3NzaWJsZUJlZm9yZVVud2F0Y2goKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKGtleS5zdGFydHNXaXRoKFJlY29yZFF1ZXJ5UmVzdWx0LldhdGNoYWJsZUNlbGxWYWx1ZXNJbkZpZWxkS2V5UHJlZml4KSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IGZpZWxkSWQgPSBrZXkuc3Vic3RyaW5nKFxuICAgICAgICAgICAgICAgICAgICBSZWNvcmRRdWVyeVJlc3VsdC5XYXRjaGFibGVDZWxsVmFsdWVzSW5GaWVsZEtleVByZWZpeC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICB0aGlzLl91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSW5GaWVsZElmUG9zc2libGVCZWZvcmVVbndhdGNoKGZpZWxkSWQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHN1cGVyLnVud2F0Y2goYXJyYXlLZXlzLCBjYWxsYmFjaywgY29udGV4dCk7XG4gICAgfVxuXG4gICAgLyoqIEBpbmhlcml0ZG9jICovXG4gICAgYXN5bmMgbG9hZERhdGFBc3luYygpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICAgICAgYXdhaXQgc3VwZXIubG9hZERhdGFBc3luYygpO1xuXG4gICAgICAgIC8vIFRoaXMgY29uZGl0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmlzdGljYWxseSByZXByb2R1Y2VkIGluIHRoZSB0ZXN0aW5nXG4gICAgICAgIC8vIGVudmlyb25tZW50LlxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgaWZcbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0YUxvYWRlZCkge1xuICAgICAgICAgICAgLy8gZGF0YSBzdGlsbCBtaWdodCBub3QgYmUgbG9hZGVkIGFmdGVyIHRoZSBwcm9taXNlIHJlc29sdmVzIGlmIHRoZVxuICAgICAgICAgICAgLy8gbGlua2VkIHRhYmxlIGNoYW5nZWQuIGluIHRoYXQgY2FzZSwgY2FsbCBhZ2FpbjpcbiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERhdGFBc3luYygpO1xuICAgICAgICAgICAgLy8gdGhlcmUgaGFzIHRvIGJlIGFuIHVubG9hZERhdGEgY2FsbCBmb3IgZXZlcnkgbG9hZERhdGFBc3luYyBjYWxsLlxuICAgICAgICAgICAgLy8gY2FsbCBpdCBoZXJlIHRvIG9mZnNldCBjYWxsaW5nIGxvYWREYXRhQXN5bmMgYSBzZWNvbmQgdGltZVxuICAgICAgICAgICAgdGhpcy51bmxvYWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgYXN5bmMgX2xvYWREYXRhQXN5bmMoKTogUHJvbWlzZTxBcnJheTxXYXRjaGFibGVSZWNvcmRRdWVyeVJlc3VsdEtleT4+IHtcbiAgICAgICAgdGhpcy5fcmVjb3JkLl9fbGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0UG9vbC5yZWdpc3Rlck9iamVjdEZvclJldXNlU3Ryb25nKHRoaXMpO1xuICAgICAgICB0aGlzLl93YXRjaE9yaWdpbigpO1xuICAgICAgICB0aGlzLl93YXRjaExpbmtlZFF1ZXJ5UmVzdWx0KCk7XG4gICAgICAgIGNvbnN0IGluaXRpYWxseUxvYWRlZCA9IHRoaXMuX2xpbmtlZFF1ZXJ5UmVzdWx0LmlzRGF0YUxvYWRlZDtcblxuICAgICAgICAvLyBodHRwczovL2FpcnRhYmxlLmNvbS9hcHBhaHVKUXc3cWZRVEJCVS90YmxTYnBpbU04U3BwOXR4cC92aXdlQUZJdXMzTWhVOUd4YS9yZWNOakZZSnBlVjIzTFBoSD9ibG9ja3M9aGlkZVxuICAgICAgICAvLyBUT0RPOiAoI3Byb2otYmxvY2tzLXNkay1yZWNvcmQtbGltaXRzKSBDdXJyZW50bHkgcXVlcmllcyBhbGwgY2VsbCB2YWx1ZXMgaW4gYSB0YWJsZVxuICAgICAgICAvLyB3aGVuIGxvYWRpbmcgbGlua2VkIHJlY29yZCBkYXRhLiBNdXN0IGFkZCBhIExpbmtlZFJlY29yZCBxdWVyeSB0eXBlIGluIHRoZSBmdXR1cmUuXG4gICAgICAgIC8vIFNpbmNlIF9sb2FkRGF0YUFzeW5jIGNhbiBvbmx5IGJlIGNhbGxlZCBvbmNlLCB0aGlzIHJlY29yZFN0b3JlUXVlcnlJZCBpcyBvbmx5IHNldCBvbmNlLFxuICAgICAgICAvLyBhbHRob3VnaCBpdCBpcyBndWFyYW50ZWVkIHRvIGJlIHN0YWJsZSBpZiBuZWVkZWQgKHNvIGxvbmcgYXMgdGhpcy5fZmllbGQuaWQgaXMgc3RhYmxlKVxuICAgICAgICBjb25zdCBbcmVjb3JkU3RvcmVRdWVyeUlkXSA9IGF3YWl0IFByb21pc2UuYWxsKFtcbiAgICAgICAgICAgIHRoaXMuX3Nkay5iYXNlXG4gICAgICAgICAgICAgICAgLl9fZ2V0UmVjb3JkU3RvcmUodGhpcy5fcmVjb3JkLnBhcmVudFRhYmxlLmlkKVxuICAgICAgICAgICAgICAgIC5sb2FkQWxsQ2VsbFZhbHVlc0luRmllbGRJZHNBc3luYyhbdGhpcy5fZmllbGQuaWRdKSxcbiAgICAgICAgICAgIHRoaXMuX2xpbmtlZFF1ZXJ5UmVzdWx0LmxvYWREYXRhQXN5bmMoKSxcbiAgICAgICAgICAgIHRoaXMuX2xvYWRSZWNvcmRDb2xvcnNBc3luYygpLFxuICAgICAgICBdKTtcbiAgICAgICAgdGhpcy5fcmVjb3JkU3RvcmVRdWVyeUlkID0gcmVjb3JkU3RvcmVRdWVyeUlkO1xuXG4gICAgICAgIHRoaXMuX2ludmFsaWRhdGVDb21wdXRlZERhdGEoKTtcblxuICAgICAgICBjb25zdCBjaGFuZ2VkS2V5cyA9IFsncmVjb3JkcycsICdyZWNvcmRJZHMnLCAncmVjb3JkQ29sb3JzJ107XG5cbiAgICAgICAgLy8gSWYgdGhlIGxpbmtlZCBxdWVyeSByZXN1bHQgd2FzIG5vdCBpbml0aWFsbHkgbG9hZGVkLCB0aGVuIHRoZVxuICAgICAgICAvLyBgY2VsbFZhbHVlc2AgZXZlbnQgd2lsbCBiZSBlbWl0dGVkIHZpYSBgX29uTGlua2VkQ2VsbFZhbHVlc0NoYW5nZWAuXG4gICAgICAgIC8vIE90aGVyd2lzZSwgaXQgbXVzdCBiZSBleHBsaWNpdGx5IGluY2x1ZGVkIGhlcmUgaW4gb3JkZXIgdG8gcHJvbW90ZVxuICAgICAgICAvLyBjb25zaXN0ZW5jeS5cbiAgICAgICAgaWYgKGluaXRpYWxseUxvYWRlZCkge1xuICAgICAgICAgICAgY2hhbmdlZEtleXMucHVzaCgnY2VsbFZhbHVlcycpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZmllbGRJZHMgPVxuICAgICAgICAgICAgdGhpcy5fbm9ybWFsaXplZE9wdHMuZmllbGRJZHNPck51bGxJZkFsbEZpZWxkcyB8fFxuICAgICAgICAgICAgdGhpcy5wYXJlbnRUYWJsZS5maWVsZHMubWFwKGZpZWxkID0+IGZpZWxkLmlkKTtcblxuICAgICAgICBmb3IgKGNvbnN0IGZpZWxkSWQgb2YgZmllbGRJZHMpIHtcbiAgICAgICAgICAgIGNoYW5nZWRLZXlzLnB1c2goUmVjb3JkUXVlcnlSZXN1bHQuV2F0Y2hhYmxlQ2VsbFZhbHVlc0luRmllbGRLZXlQcmVmaXggKyBmaWVsZElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBjaGFuZ2VkS2V5cztcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3VubG9hZERhdGEoKSB7XG4gICAgICAgIC8vIFRoZSBpbnZlcnNlIG9mIHRoaXMgY29uZGl0aW9uIGNhbm5vdCBiZSBkZXRlcm1pbmlzdGljYWxseSByZXByb2R1Y2VkXG4gICAgICAgIC8vIGluIHRoZSB0ZXN0aW5nIGVudmlyb25tZW50LlxuICAgICAgICAvLyBpc3RhbmJ1bCBpZ25vcmUgZWxzZVxuICAgICAgICBpZiAodGhpcy5pc1ZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLl9yZWNvcmQuX19saW5rZWRSZWNvcmRzUXVlcnlSZXN1bHRQb29sLnVucmVnaXN0ZXJPYmplY3RGb3JSZXVzZVN0cm9uZyh0aGlzKTtcbiAgICAgICAgICAgIHRoaXMuX3Vud2F0Y2hPcmlnaW4oKTtcbiAgICAgICAgICAgIHRoaXMuX3Vud2F0Y2hMaW5rZWRRdWVyeVJlc3VsdCgpO1xuXG4gICAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICAgICAgdGhpcy5fcmVjb3JkU3RvcmVRdWVyeUlkLFxuICAgICAgICAgICAgICAgICdVbnN1YnNjcmliaW5nIGZyb20gbGlua2VkIHJlY29yZCByZWNvcmQgc3RvcmUgd2l0aG91dCBxdWVyeUlkJyxcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgICB0aGlzLl9vcmlnaW5SZWNvcmRTdG9yZS51bmxvYWRDZWxsVmFsdWVzRm9yUXVlcnlJZHNUaGF0QXJlU3Vic2NyaWJlZFRvQWxsQ2VsbHMoW1xuICAgICAgICAgICAgICAgIHRoaXMuX3JlY29yZFN0b3JlUXVlcnlJZCxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICAgICAgdGhpcy5fbGlua2VkUXVlcnlSZXN1bHQudW5sb2FkRGF0YSgpO1xuICAgICAgICAgICAgdGhpcy5fdW5sb2FkUmVjb3JkQ29sb3JzKCk7XG5cbiAgICAgICAgICAgIHRoaXMuX2ludmFsaWRhdGVDb21wdXRlZERhdGEoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIHRoZSBrZXkgdXNlZCB0byBpZGVudGlmeSB0aGlzIHF1ZXJ5IHJlc3VsdCBpbiBPYmplY3RQb29sXG4gICAgICpcbiAgICAgKiBAaGlkZGVuXG4gICAgICovXG4gICAgZ2V0IF9fcG9vbEtleSgpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX3NlcmlhbGl6ZWRPcHRzfTo6JHt0aGlzLl9maWVsZC5pZH06OiR7dGhpcy5fbGlua2VkVGFibGUuaWR9Ojoke3RoaXMuaXNWYWxpZH1gO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBnZXQgX2NlbGxWYWx1ZXNXYXRjaENvdW50KCk6IG51bWJlciB7XG4gICAgICAgIHJldHVybiAodGhpcy5fY2hhbmdlV2F0Y2hlcnNCeUtleVtSZWNvcmRRdWVyeVJlc3VsdC5XYXRjaGFibGVLZXlzLmNlbGxWYWx1ZXNdIHx8IFtdKS5sZW5ndGg7XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF93YXRjaExpbmtlZFF1ZXJ5Q2VsbFZhbHVlc0lmTmVlZGVkQWZ0ZXJXYXRjaCgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2NlbGxWYWx1ZXNXYXRjaENvdW50ID09PSAxKSB7XG4gICAgICAgICAgICB0aGlzLl93YXRjaExpbmtlZFF1ZXJ5Q2VsbFZhbHVlcygpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSWZQb3NzaWJsZUJlZm9yZVVud2F0Y2goKSB7XG4gICAgICAgIGlmICh0aGlzLl9jZWxsVmFsdWVzV2F0Y2hDb3VudCA9PT0gMSAmJiB0aGlzLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3Vud2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXMoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBnZXQgX2NlbGxWYWx1ZVdhdGNoQ291bnRCeUZpZWxkSWQoKTogUmVhZG9ubHk8e1trZXk6IHN0cmluZ106IG51bWJlcn0+IHtcbiAgICAgICAgY29uc3QgY291bnRCeUZpZWxkSWQ6IE9iamVjdE1hcDxGaWVsZElkLCBudW1iZXI+ID0ge307XG4gICAgICAgIGNvbnN0IHdhdGNoS2V5cyA9IE9iamVjdC5rZXlzKHRoaXMuX2NoYW5nZVdhdGNoZXJzQnlLZXkpLmZpbHRlcihrZXkgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIGtleS5zdGFydHNXaXRoKFJlY29yZFF1ZXJ5UmVzdWx0LldhdGNoYWJsZUNlbGxWYWx1ZXNJbkZpZWxkS2V5UHJlZml4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIGZvciAoY29uc3Qgd2F0Y2hLZXkgb2Ygd2F0Y2hLZXlzKSB7XG4gICAgICAgICAgICBjb25zdCBmaWVsZElkID0gd2F0Y2hLZXkuc2xpY2UoXG4gICAgICAgICAgICAgICAgUmVjb3JkUXVlcnlSZXN1bHQuV2F0Y2hhYmxlQ2VsbFZhbHVlc0luRmllbGRLZXlQcmVmaXgubGVuZ3RoLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIGNvdW50QnlGaWVsZElkW2ZpZWxkSWRdID0gdGhpcy5fY2hhbmdlV2F0Y2hlcnNCeUtleVt3YXRjaEtleV0ubGVuZ3RoO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGNvdW50QnlGaWVsZElkO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfd2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXNJbkZpZWxkSWZOZWVkZWRBZnRlcldhdGNoKGZpZWxkSWQ6IHN0cmluZykge1xuICAgICAgICBpZiAodGhpcy5fY2VsbFZhbHVlV2F0Y2hDb3VudEJ5RmllbGRJZFtmaWVsZElkXSA9PT0gMSAmJiB0aGlzLmlzVmFsaWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3dhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSW5GaWVsZChmaWVsZElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfdW53YXRjaExpbmtlZFF1ZXJ5Q2VsbFZhbHVlc0luRmllbGRJZlBvc3NpYmxlQmVmb3JlVW53YXRjaChmaWVsZElkOiBzdHJpbmcpIHtcbiAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgdGhpcy5fY2VsbFZhbHVlV2F0Y2hDb3VudEJ5RmllbGRJZFtmaWVsZElkXSxcbiAgICAgICAgICAgIFwiY2VsbFZhbHVlc0luRmllbGQ6JXMgb3Zlci1mcmVlJ2RcIixcbiAgICAgICAgICAgIGZpZWxkSWQsXG4gICAgICAgICk7XG5cbiAgICAgICAgaWYgKHRoaXMuX2NlbGxWYWx1ZVdhdGNoQ291bnRCeUZpZWxkSWRbZmllbGRJZF0gPT09IDEgJiYgdGhpcy5pc1ZhbGlkKSB7XG4gICAgICAgICAgICB0aGlzLl91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSW5GaWVsZChmaWVsZElkKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfd2F0Y2hPcmlnaW4oKSB7XG4gICAgICAgIC8vIGlmIHRoZSBjZWxsIHZhbHVlcyBpbiB0aGUgcmVjb3JkIGNoYW5nZSwgd2UgbmVlZCB0byBpbnZhbGlkYXRlIG91clxuICAgICAgICAvLyBjYWNoZWQgZGF0YSBhbmQgbm90aWZ5IHdhdGNoZXJzXG4gICAgICAgIHRoaXMuX3JlY29yZC53YXRjaChcbiAgICAgICAgICAgIGBjZWxsVmFsdWVJbkZpZWxkOiR7dGhpcy5fZmllbGQuaWR9YCxcbiAgICAgICAgICAgIHRoaXMuX29uT3JpZ2luQ2VsbFZhbHVlQ2hhbmdlLFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICAgICAgLy8gaWYgdGhlIGZpZWxkIGNvbmZpZyBjaGFuZ2VzLCB3ZSBuZWVkIHRvIGludmFsaWRhdGUgY2FjaGVkIGRhdGEsXG4gICAgICAgIC8vIGFuZCBwb3RlbnRpYWxseSBzdGFydCB3YXRjaGluZyBhIGRpZmZlcmVudCB0YWJsZVxuICAgICAgICB0aGlzLl9maWVsZC53YXRjaCgndHlwZScsIHRoaXMuX29uT3JpZ2luRmllbGRDb25maWdDaGFuZ2UsIHRoaXMpO1xuICAgICAgICB0aGlzLl9maWVsZC53YXRjaCgnb3B0aW9ucycsIHRoaXMuX29uT3JpZ2luRmllbGRDb25maWdDaGFuZ2UsIHRoaXMpO1xuICAgICAgICAvLyBpZiB0aGUgdW5kZXJseWluZyByZWNvcmQgaXMgZGVsZXRlZCwgd2UgbmVlZCB0byBpbnZhbGlkYXRlIHRoaXNcbiAgICAgICAgLy8gcmVzdWx0XG4gICAgICAgIHRoaXMuX29yaWdpblJlY29yZFN0b3JlLndhdGNoV2l0aFJlY29yZFF1ZXJ5UmVzdWx0KHtcbiAgICAgICAgICAgIHJlY29yZFF1ZXJ5UmVzdWx0OiB0aGlzLFxuICAgICAgICAgICAga2V5czogV2F0Y2hhYmxlUmVjb3JkU3RvcmVLZXlzLnJlY29yZElkcyxcbiAgICAgICAgICAgIGNhbGxiYWNrRm9yUmVnaXN0cmF0aW9uOiB0aGlzLl9vbk9yaWdpblJlY29yZHNDaGFuZ2UsXG4gICAgICAgICAgICBjb250ZXh0OiB0aGlzLFxuICAgICAgICB9KTtcbiAgICAgICAgLy8gaWYgdGhlIGxpbmtlZCBmaWVsZCBpbiB0aGUgb3JpZ2luIHRhYmxlIGlzIGRlbGV0ZWQsIHdlIG5lZWQgdG9cbiAgICAgICAgLy8gaW52YWxpZGF0ZSB0aGlzIHJlc3VsdFxuICAgICAgICB0aGlzLl9yZWNvcmQucGFyZW50VGFibGUud2F0Y2goJ2ZpZWxkcycsIHRoaXMuX29uT3JpZ2luRmllbGRzQ2hhbmdlLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3Vud2F0Y2hPcmlnaW4oKSB7XG4gICAgICAgIHRoaXMuX3JlY29yZC51bndhdGNoKFxuICAgICAgICAgICAgYGNlbGxWYWx1ZUluRmllbGQ6JHt0aGlzLl9maWVsZC5pZH1gLFxuICAgICAgICAgICAgdGhpcy5fb25PcmlnaW5DZWxsVmFsdWVDaGFuZ2UsXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgICAgICB0aGlzLl9maWVsZC51bndhdGNoKCd0eXBlJywgdGhpcy5fb25PcmlnaW5GaWVsZENvbmZpZ0NoYW5nZSwgdGhpcyk7XG4gICAgICAgIHRoaXMuX2ZpZWxkLnVud2F0Y2goJ29wdGlvbnMnLCB0aGlzLl9vbk9yaWdpbkZpZWxkQ29uZmlnQ2hhbmdlLCB0aGlzKTtcbiAgICAgICAgdGhpcy5fb3JpZ2luUmVjb3JkU3RvcmUudW53YXRjaCgncmVjb3JkSWRzJywgdGhpcy5fb25PcmlnaW5SZWNvcmRzQ2hhbmdlLCB0aGlzKTtcbiAgICAgICAgdGhpcy5fcmVjb3JkLnBhcmVudFRhYmxlLnVud2F0Y2goJ2ZpZWxkcycsIHRoaXMuX29uT3JpZ2luRmllbGRzQ2hhbmdlLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3dhdGNoTGlua2VkUXVlcnlSZXN1bHQoKSB7XG4gICAgICAgIC8vIGluIHRoZSBsaW5rZWQgdGFibGUsIGFsbCB3ZSBjYXJlIGFib3V0IGlzIHRoZSBzZXQgb2YgcmVjb3JkSWRzLlxuICAgICAgICAvLyB0aGlzIHdhdGNoIGZpcmUgd2hlbiB0aGV5J3JlIGFkZGVkL3JlbW92ZWQgYW5kIHdoZW4gdGhleSBjaGFuZ2VcbiAgICAgICAgLy8gb3JkZXIuIHdlIG9ubHkgY2FyZSBhYm91dCBvcmRlciwgYmVjYXVzZSBhZGQvcmVtb3ZlIGlzIGhhbmRsZWQgYnlcbiAgICAgICAgLy8gd2F0Y2hpbmcgdGhlIG9yaWdpbiByZWNvcmRcbiAgICAgICAgdGhpcy5fbGlua2VkUXVlcnlSZXN1bHQud2F0Y2goJ3JlY29yZElkcycsIHRoaXMuX29uTGlua2VkUmVjb3JkSWRzQ2hhbmdlLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3Vud2F0Y2hMaW5rZWRRdWVyeVJlc3VsdCgpIHtcbiAgICAgICAgdGhpcy5fbGlua2VkUXVlcnlSZXN1bHQudW53YXRjaCgncmVjb3JkSWRzJywgdGhpcy5fb25MaW5rZWRSZWNvcmRJZHNDaGFuZ2UsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfd2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMuX2xpbmtlZFF1ZXJ5UmVzdWx0LndhdGNoKCdjZWxsVmFsdWVzJywgdGhpcy5fb25MaW5rZWRDZWxsVmFsdWVzQ2hhbmdlLCB0aGlzKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX3Vud2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXMoKSB7XG4gICAgICAgIHRoaXMuX2xpbmtlZFF1ZXJ5UmVzdWx0LnVud2F0Y2goJ2NlbGxWYWx1ZXMnLCB0aGlzLl9vbkxpbmtlZENlbGxWYWx1ZXNDaGFuZ2UsIHRoaXMpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfd2F0Y2hMaW5rZWRRdWVyeUNlbGxWYWx1ZXNJbkZpZWxkKGZpZWxkSWQ6IHN0cmluZykge1xuICAgICAgICB0aGlzLl9saW5rZWRRdWVyeVJlc3VsdC53YXRjaChcbiAgICAgICAgICAgIFJlY29yZFF1ZXJ5UmVzdWx0LldhdGNoYWJsZUNlbGxWYWx1ZXNJbkZpZWxkS2V5UHJlZml4ICsgZmllbGRJZCxcbiAgICAgICAgICAgIHRoaXMuX2dldE9uTGlua2VkQ2VsbFZhbHVlc0luRmllbGRDaGFuZ2UoZmllbGRJZCksXG4gICAgICAgICAgICB0aGlzLFxuICAgICAgICApO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfdW53YXRjaExpbmtlZFF1ZXJ5Q2VsbFZhbHVlc0luRmllbGQoZmllbGRJZDogc3RyaW5nKSB7XG4gICAgICAgIHRoaXMuX2xpbmtlZFF1ZXJ5UmVzdWx0LnVud2F0Y2goXG4gICAgICAgICAgICBSZWNvcmRRdWVyeVJlc3VsdC5XYXRjaGFibGVDZWxsVmFsdWVzSW5GaWVsZEtleVByZWZpeCArIGZpZWxkSWQsXG4gICAgICAgICAgICB0aGlzLl9nZXRPbkxpbmtlZENlbGxWYWx1ZXNJbkZpZWxkQ2hhbmdlKGZpZWxkSWQpLFxuICAgICAgICAgICAgdGhpcyxcbiAgICAgICAgKTtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX29uTGlua2VkUmVjb3JkSWRzQ2hhbmdlKCkge1xuICAgICAgICBpbnZhcmlhbnQodGhpcy5pc1ZhbGlkLCAnd2F0Y2gga2V5IGNoYW5nZSBldmVudCB3aGlsc3QgaW52YWxpZCcpO1xuICAgICAgICBpZiAoIXRoaXMuaXNEYXRhTG9hZGVkKSB7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9pbnZhbGlkYXRlQ29tcHV0ZWREYXRhKCk7XG5cbiAgICAgICAgLy8gd2UgZG9uJ3QgYWN0dWFsbHkga25vdyBhdCB0aGlzIHN0YWdlIHdoZXRoZXIgYW55dGhpbmcgY2hhbmdlZCBvclxuICAgICAgICAvLyBub3QuIGl0IG1heSBoYXZlIGRvbmUgdGhvdWdoLCBzbyBub3RpZnkgd2F0Y2hlcnNcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ3JlY29yZHMnKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ3JlY29yZElkcycpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFRoaXMgbW9kZWwgZG9lc24ndCB1c2UgdGhlIGBfZGF0YWAgY29tcHV0ZWQgcHJvcGVydHkgaXQgaW5oZXJpdHMgZnJvbVxuICAgICAqIEFic3RyYWN0TW9kZWwuIEl0IGltcGxlbWVudHMgdGhlIGZvbGxvd2luZyBtZXRob2Qgb25seSBzbyB0aGF0IGludGVybmFsXG4gICAgICogY2hlY2tzIGZvciBtb2RlbCBkZWxldGlvbiBiZWhhdmUgYXBwcm9wcmlhdGVseSAodGhlIGRhdGEgaXRzZWxmIGlzXG4gICAgICogaW5jb25zZXF1ZW50aWFsKS5cbiAgICAgKlxuICAgICAqIEBpbnRlcm5hbFxuICAgICAqL1xuICAgIGdldCBfZGF0YU9yTnVsbElmRGVsZXRlZCgpOiBMaW5rZWRSZWNvcmRzUXVlcnlSZXN1bHREYXRhIHwgbnVsbCB7XG4gICAgICAgIGlmICh0aGlzLl9yZWNvcmQuaXNEZWxldGVkIHx8IHRoaXMuX2xpbmtlZFJlY29yZFN0b3JlLmlzRGVsZXRlZCkge1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4ge307XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9vbkxpbmtlZENlbGxWYWx1ZXNDaGFuZ2UoXG4gICAgICAgIHF1ZXJ5UmVzdWx0OiBUYWJsZU9yVmlld1F1ZXJ5UmVzdWx0LFxuICAgICAgICBrZXk6IHN0cmluZyxcbiAgICAgICAgY2hhbmdlcz86IHtmaWVsZElkcz86IEFycmF5PEZpZWxkSWQ+OyByZWNvcmRJZHM/OiBBcnJheTxSZWNvcmRJZD59LFxuICAgICkge1xuICAgICAgICBpbnZhcmlhbnQodGhpcy5pc1ZhbGlkLCAnd2F0Y2gga2V5IGNoYW5nZSBldmVudCB3aGlsc3QgaW52YWxpZCcpO1xuXG4gICAgICAgIGlmIChjaGFuZ2VzICYmIGNoYW5nZXMuZmllbGRJZHMgJiYgY2hhbmdlcy5yZWNvcmRJZHMpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZElkc1NldCA9IHRoaXMuX2dldE9yR2VuZXJhdGVSZWNvcmRJZHNTZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHJlY29yZElkcyA9IGNoYW5nZXMucmVjb3JkSWRzLmZpbHRlcihpZCA9PiByZWNvcmRJZHNTZXRbaWRdID09PSB0cnVlKTtcbiAgICAgICAgICAgIGlmIChyZWNvcmRJZHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ2NlbGxWYWx1ZXMnLCB7ZmllbGRJZHM6IGNoYW5nZXMuZmllbGRJZHMsIHJlY29yZElkc30pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ2NlbGxWYWx1ZXMnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfZ2V0T25MaW5rZWRDZWxsVmFsdWVzSW5GaWVsZENoYW5nZShcbiAgICAgICAgZmllbGRJZDogc3RyaW5nLFxuICAgICk6IChhcmcxOiBUYWJsZU9yVmlld1F1ZXJ5UmVzdWx0LCBrZXk6IHN0cmluZywgcmVjb3JkSWRzOiBBcnJheTxSZWNvcmRJZD4gfCB2b2lkKSA9PiB2b2lkIHtcbiAgICAgICAgaWYgKCF0aGlzLl9jZWxsVmFsdWVDaGFuZ2VIYW5kbGVyQnlGaWVsZElkW2ZpZWxkSWRdKSB7XG4gICAgICAgICAgICB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VIYW5kbGVyQnlGaWVsZElkW2ZpZWxkSWRdID0gKFxuICAgICAgICAgICAgICAgIHF1ZXJ5UmVzdWx0OiBUYWJsZU9yVmlld1F1ZXJ5UmVzdWx0LFxuICAgICAgICAgICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICAgICAgICAgIHJlY29yZElkczogQXJyYXk8UmVjb3JkSWQ+IHwgdm9pZCxcbiAgICAgICAgICAgICkgPT4ge1xuICAgICAgICAgICAgICAgIGludmFyaWFudCh0aGlzLmlzVmFsaWQsICd3YXRjaCBrZXkgY2hhbmdlIGV2ZW50IHdoaWxzdCBpbnZhbGlkJyk7XG5cbiAgICAgICAgICAgICAgICAvLyBUaGUgbGlua2VkIHJlY29yZCBtYXkgZmluaXNoIGxvYWRpbmcgYmVmb3JlIGl0cyBwYXJlbnQuIEluXG4gICAgICAgICAgICAgICAgLy8gdGhhdCBjYXNlLCB0aGUgYXBwcm9wcmlhdGUgZXZlbnRzIHdpbGwgYmUgdHJpZ2dlcmVkIGJ5IHRoZVxuICAgICAgICAgICAgICAgIC8vIGBfbG9hZERhdGFBc3luY2AgbWV0aG9kLlxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5pc0RhdGFMb2FkZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIFRoZSBgZWxzZWAgYnJhbmNoIHdpbGwgb25seSBiZSByZWFjaGVkIHdoZW4gdGhlIHVuZGVybHlpbmdcbiAgICAgICAgICAgICAgICAvLyBgUmVjb3JkT3JWaWV3UXVlcnlSZXN1bHRgIGlzIGxvYWRlZCwgdW5sb2FkZWQsIGFuZCB0aGVuXG4gICAgICAgICAgICAgICAgLy8gbG9hZGVkIGFnYWluLiBCZWNhdXNlIHRoYXQgcXVlcnkgcmVzdWx0IGlzIG5vdCBkaXJlY3RseVxuICAgICAgICAgICAgICAgIC8vIGV4cG9zZWQgdG8gY29uc3VtZXJzLCB0aGUgY29uZGl0aW9uIGNhbiBvbmx5IGJlIG1ldCB3aGVuIHRoZVxuICAgICAgICAgICAgICAgIC8vIFNESyBpcyBtaXN1c2VkIChlLmcuIHJlcGVhdGVkbHkgZnJlZWluZyByZWxhdGVkIHF1ZXJ5XG4gICAgICAgICAgICAgICAgLy8gcmVzdWx0cykuIFRoZSBgZWxzZWAgYnJhbmNoIGF0dGVtcHRzIHRvIGhhbmRsZSB0aGF0XG4gICAgICAgICAgICAgICAgLy8gc2l0dWF0aW9uIGluIGEgbG9naWNhbCB3YXksIGJ1dCBpdCBpcyBub3QgdGVzdGVkIGJlY2F1c2UgaXRcbiAgICAgICAgICAgICAgICAvLyBpcyBmdW5kYW1lbnRhbGx5IGludmFsaWQuXG4gICAgICAgICAgICAgICAgLy8gaXN0YW5idWwgaWdub3JlIGVsc2VcbiAgICAgICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShyZWNvcmRJZHMpKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHJlY29yZElkc1NldCA9IHRoaXMuX2dldE9yR2VuZXJhdGVSZWNvcmRJZHNTZXQoKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZmlsdGVyZWRSZWNvcmRJZHMgPSByZWNvcmRJZHMuZmlsdGVyKFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQgPT4gdHlwZW9mIGlkID09PSAnc3RyaW5nJyAmJiByZWNvcmRJZHNTZXRbaWRdID09PSB0cnVlLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICAvLyBUaGVyZSBzaG91bGQgYWx3YXlzIGJlIGEgZmlsdGVyZWRSZWNvcmRJZHMgZm91bmQgZm9yIHRoaXMgcXVlcnlcbiAgICAgICAgICAgICAgICAgICAgLy8gdHlwZSAtIG5vdCBmaW5kaW5nIGFueSBpcyBhIGZ1bmRhbWVudGFsIG1pc3Rha2UgaW4gb3VyIHF1ZXJ5IGVuZ2luZVxuICAgICAgICAgICAgICAgICAgICBpbnZhcmlhbnQoXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXJlZFJlY29yZElkcy5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAnRmlsdGVyZWQgcmVjb3JkIGNoYW5nZSBvbiBpbmNvcnJlY3QgcmVjb3JkLCBxdWVyeSBlbmdpbmUgaXNzdWUnLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLl9vbkNoYW5nZShcbiAgICAgICAgICAgICAgICAgICAgICAgIFJlY29yZFF1ZXJ5UmVzdWx0LldhdGNoYWJsZUNlbGxWYWx1ZXNJbkZpZWxkS2V5UHJlZml4ICsgZmllbGRJZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcmVkUmVjb3JkSWRzLFxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuX29uQ2hhbmdlKFJlY29yZFF1ZXJ5UmVzdWx0LldhdGNoYWJsZUNlbGxWYWx1ZXNJbkZpZWxkS2V5UHJlZml4ICsgZmllbGRJZCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0aGlzLl9jZWxsVmFsdWVDaGFuZ2VIYW5kbGVyQnlGaWVsZElkW2ZpZWxkSWRdO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfb25PcmlnaW5DZWxsVmFsdWVDaGFuZ2UoKSB7XG4gICAgICAgIGludmFyaWFudCh0aGlzLmlzVmFsaWQsICd3YXRjaCBrZXkgY2hhbmdlIGV2ZW50IHdoaWxzdCBpbnZhbGlkJyk7XG5cbiAgICAgICAgaWYgKCF0aGlzLmlzRGF0YUxvYWRlZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIC8vIHdoZW4gdGhlIG9yaWdpbiBjZWxsIHZhbHVlIChsaXN0aW5nIGFsbCB0aGUgbGlua2VkIHJlY29yZHMpIGNoYW5nZXMsXG4gICAgICAgIC8vIGludmFsaWRhdGUgYWxsIHRoZSBkYXRhIHdlIGhhdmUgc3RvcmVkIC0gd2UgbmVlZCB0byBjb21wbGV0ZWx5XG4gICAgICAgIC8vIHJlZ2VuZXJhdGUgaXRcbiAgICAgICAgdGhpcy5faW52YWxpZGF0ZUNvbXB1dGVkRGF0YSgpO1xuXG4gICAgICAgIC8vIG5vdGlmeSB3YXRjaGVycyB0aGF0IG91ciBzZXQgb2YgbGlua2VkIHJlY29yZHMgaGFzIGNoYW5nZWRcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ3JlY29yZHMnKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ3JlY29yZElkcycpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfb25PcmlnaW5SZWNvcmRzQ2hhbmdlKCkge1xuICAgICAgICBpZiAodGhpcy5fcmVjb3JkLmlzRGVsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9vbk9yaWdpbkZpZWxkc0NoYW5nZSgpIHtcbiAgICAgICAgaWYgKHRoaXMuX2ZpZWxkLmlzRGVsZXRlZCkge1xuICAgICAgICAgICAgdGhpcy5faXNWYWxpZCA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9vbk9yaWdpbkZpZWxkQ29uZmlnQ2hhbmdlKCkge1xuICAgICAgICBpbnZhcmlhbnQodGhpcy5pc1ZhbGlkLCAnd2F0Y2gga2V5IGNoYW5nZSBldmVudCB3aGlsc3QgaW52YWxpZCcpO1xuXG4gICAgICAgIGNvbnN0IHR5cGUgPSB0aGlzLl9maWVsZC50eXBlO1xuXG4gICAgICAgIGlmICh0eXBlICE9PSBGaWVsZFR5cGUuTVVMVElQTEVfUkVDT1JEX0xJTktTKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlUXVlcnlSZXN1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGxpbmtlZFRhYmxlSWQgPSBnZXRMaW5rZWRUYWJsZUlkKHRoaXMuX2ZpZWxkKTtcbiAgICAgICAgaWYgKGxpbmtlZFRhYmxlSWQgIT09IHRoaXMuX2xpbmtlZFRhYmxlLmlkKSB7XG4gICAgICAgICAgICB0aGlzLl9pbnZhbGlkYXRlUXVlcnlSZXN1bHQoKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfaW52YWxpZGF0ZVF1ZXJ5UmVzdWx0KCkge1xuICAgICAgICBpZiAodGhpcy5pc0RhdGFMb2FkZWQpIHtcbiAgICAgICAgICAgIHRoaXMuX3VubG9hZERhdGEoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5fY2VsbFZhbHVlc1dhdGNoQ291bnQgPiAwKSB7XG4gICAgICAgICAgICB0aGlzLl91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzKCk7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChjb25zdCBmaWVsZElkIG9mIE9iamVjdC5rZXlzKHRoaXMuX2NlbGxWYWx1ZVdhdGNoQ291bnRCeUZpZWxkSWQpKSB7XG4gICAgICAgICAgICB0aGlzLl91bndhdGNoTGlua2VkUXVlcnlDZWxsVmFsdWVzSW5GaWVsZChmaWVsZElkKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuX2lzVmFsaWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ3JlY29yZHMnKTtcbiAgICAgICAgdGhpcy5fb25DaGFuZ2UoJ3JlY29yZElkcycpO1xuICAgIH1cblxuICAgIC8qKiBAaW50ZXJuYWwgKi9cbiAgICBfaW52YWxpZGF0ZUNvbXB1dGVkRGF0YSgpIHtcbiAgICAgICAgdGhpcy5fY29tcHV0ZWRSZWNvcmRJZHNTZXQgPSBudWxsO1xuICAgICAgICB0aGlzLl9jb21wdXRlZEZpbHRlcmVkU29ydGVkUmVjb3JkSWRzID0gbnVsbDtcbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX2dlbmVyYXRlQ29tcHV0ZWREYXRhSWZOZWVkZWQoKSB7XG4gICAgICAgIGlmICghdGhpcy5fY29tcHV0ZWRSZWNvcmRJZHNTZXQpIHtcbiAgICAgICAgICAgIHRoaXMuX2dlbmVyYXRlQ29tcHV0ZWREYXRhKCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgX2dlbmVyYXRlQ29tcHV0ZWREYXRhKCkge1xuICAgICAgICBjb25zdCByZWNvcmRJZHNTZXQ6IE9iamVjdE1hcDxSZWNvcmRJZCwgdHJ1ZT4gPSB7fTtcbiAgICAgICAgY29uc3QgcmF3Q2VsbFZhbHVlID0gdGhpcy5fcmVjb3JkLmdldENlbGxWYWx1ZSh0aGlzLl9maWVsZCk7XG4gICAgICAgIGNvbnN0IGNlbGxWYWx1ZSA9IHJhd0NlbGxWYWx1ZSA9PT0gbnVsbCA/IFtdIDogcmF3Q2VsbFZhbHVlO1xuICAgICAgICBpbnZhcmlhbnQoQXJyYXkuaXNBcnJheShjZWxsVmFsdWUpLCAnY2VsbFZhbHVlIHNob3VsZCBiZSBhcnJheScpO1xuXG4gICAgICAgIGZvciAoY29uc3QgbGlua2VkUmVjb3JkIG9mIGNlbGxWYWx1ZSkge1xuICAgICAgICAgICAgaW52YXJpYW50KFxuICAgICAgICAgICAgICAgIGxpbmtlZFJlY29yZCAmJiB0eXBlb2YgbGlua2VkUmVjb3JkID09PSAnb2JqZWN0JyxcbiAgICAgICAgICAgICAgICAnbGlua2VkIHJlY29yZCBzaG91bGQgYmUgb2JqZWN0JyxcbiAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgIGNvbnN0IHJlY29yZElkID0gbGlua2VkUmVjb3JkLmlkO1xuICAgICAgICAgICAgaW52YXJpYW50KHR5cGVvZiByZWNvcmRJZCA9PT0gJ3N0cmluZycsICdpZCBzaG91bGQgYmUgcHJlc2VudCcpO1xuXG4gICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHVzZSB0aGUgcXVlcnkgcmVzdWx0IGFzIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yXG4gICAgICAgICAgICAvLyByZWNvcmRJZHMsIHNpbmNlIHdoZW4gdGhlIGNsaWVudCBkZWxldGVzIGEgcmVjb3JkIGZyb20gdGhlIGxpbmtlZFxuICAgICAgICAgICAgLy8gdGFibGUsIHdlIHVwZGF0ZSBpdCBvcHRpbWlzdGljYWxseSBidXQgdGhlIG9yaWdpbiBjZWxsIHZhbHVlXG4gICAgICAgICAgICAvLyBkb2Vzbid0IHVwZGF0ZSB1bnRpbCByZWNlaXZpbmcgdGhlIHB1c2ggcGF5bG9hZC5cbiAgICAgICAgICAgIGlmICh0aGlzLl9saW5rZWRRdWVyeVJlc3VsdC5oYXNSZWNvcmQocmVjb3JkSWQpKSB7XG4gICAgICAgICAgICAgICAgcmVjb3JkSWRzU2V0W3JlY29yZElkXSA9IHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLl9jb21wdXRlZFJlY29yZElkc1NldCA9IHJlY29yZElkc1NldDtcblxuICAgICAgICBpZiAodGhpcy5fbm9ybWFsaXplZE9wdHMuc29ydHMgJiYgdGhpcy5fbm9ybWFsaXplZE9wdHMuc29ydHMubGVuZ3RoKSB7XG4gICAgICAgICAgICAvLyB3aGVuIHNvcnRzIGFyZSBwcmVzZW50LCByZWNvcmQgb3JkZXIgY29tZXMgZnJvbSB0aGUgcXVlcnkgcmVzdWx0XG4gICAgICAgICAgICB0aGlzLl9jb21wdXRlZEZpbHRlcmVkU29ydGVkUmVjb3JkSWRzID0gdGhpcy5fbGlua2VkUXVlcnlSZXN1bHQucmVjb3JkSWRzLmZpbHRlcihcbiAgICAgICAgICAgICAgICByZWNvcmRJZCA9PiByZWNvcmRJZHNTZXRbcmVjb3JkSWRdID09PSB0cnVlLFxuICAgICAgICAgICAgKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdpdGggbm8gc29ydHMsIHJlY29yZCBvcmRlciBpcyB0aGUgc2FtZSBhcyBpbiB0aGUgY2VsbCBpbiB0aGVcbiAgICAgICAgICAgIC8vIG1haW4gQWlydGFibGUgVUkuIFNpbmNlIHdlIGdlbmVyYXRlZCByZWNvcmRJZHNTZXQgYnkgaXRlcmF0aW5nXG4gICAgICAgICAgICAvLyBvdmVyIHRoZSBjZWxsIHZhbHVlLCB3ZSdyZSBndWFyYW50ZWVkIHRoYXQgdGhlIGtleSBvcmRlciBtYXRjaGVzXG4gICAgICAgICAgICAvLyB0aGUgbGlua2VkIHJlY29yZCBvcmRlciBpbiB0aGUgY2VsbC5cbiAgICAgICAgICAgIHRoaXMuX2NvbXB1dGVkRmlsdGVyZWRTb3J0ZWRSZWNvcmRJZHMgPSBPYmplY3Qua2V5cyhyZWNvcmRJZHNTZXQpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgLyoqIEBpbnRlcm5hbCAqL1xuICAgIF9nZXRPckdlbmVyYXRlUmVjb3JkSWRzU2V0KCkge1xuICAgICAgICB0aGlzLl9nZW5lcmF0ZUNvbXB1dGVkRGF0YUlmTmVlZGVkKCk7XG4gICAgICAgIGNvbnN0IHJlY29yZElkc1NldCA9IHRoaXMuX2NvbXB1dGVkUmVjb3JkSWRzU2V0O1xuICAgICAgICBpbnZhcmlhbnQocmVjb3JkSWRzU2V0LCAncmVjb3JkSWRzU2V0IG11c3QgZXhpc3QnKTtcbiAgICAgICAgcmV0dXJuIHJlY29yZElkc1NldDtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBUaGlzIGFsbG93cyBhIHJlY29yZCBxdWVyeSByZXN1bHQgdG8gc3BlY2lmeSB0aGUgc291cmNlIG9mIHRoZSBxdWVyeVxuICAgICAqIGVnOiBWaWV3LCBUYWJsZSwgTGlua2VkIHJlY29yZCB3aGVuIHdhdGNoaW5nIGZpZWxkcy5cbiAgICAgKiBUaGlzIHNjb3BlcyB0aGUgd2F0Y2ggdG8gdGhvc2UgZmllbGRzICsgcm93cyBpbiB0aGUgcXVlcnkuXG4gICAgICpcbiAgICAgKiBAaW50ZXJuYWxcbiAgICAgKi9cbiAgICBfX2NvbnN0cnVjdFF1ZXJ5U3BlY0ZvckJsb2NrRmllbGRTZWxlY3Rpb25TcGVjKFxuICAgICAgICBmaWVsZFNlbGVjdGlvbjogQmxvY2tGaWVsZFNlbGVjdGlvblNwZWMsXG4gICAgKTogQmxvY2tRdWVyeVNwZWMge1xuICAgICAgICAvLyBUaGUgb3JpZ2luIHRhYmxlSWQgaXMgYWx3YXlzIHRoZSBvbmUgcmVmZXJyZWQgdG8gaGVyZSBhcyB3ZSBtdXN0IHdhdGNoIHRoZSBvcmlnaW4gcmVjb3JkIGZvciBkZWxldGlvblxuICAgICAgICBjb25zdCBvcmlnaW5UYWJsZUlkID0gdGhpcy5fcmVjb3JkLnBhcmVudFRhYmxlLmlkO1xuXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzb3VyY2VUeXBlOiBCbG9ja1F1ZXJ5U291cmNlVHlwZS5UQUJMRSxcbiAgICAgICAgICAgIHNvdXJjZVRhYmxlSWQ6IG9yaWdpblRhYmxlSWQsXG4gICAgICAgICAgICByZWNvcmRTZWxlY3Rpb246IHtcbiAgICAgICAgICAgICAgICBmaWVsZFNlbGVjdGlvbixcbiAgICAgICAgICAgIH0sXG4gICAgICAgIH07XG4gICAgfVxufVxuXG5leHBvcnQgZGVmYXVsdCBMaW5rZWRSZWNvcmRzUXVlcnlSZXN1bHQ7XG4iXX0=
|
|
@@ -148,4 +148,5 @@ Object.defineProperty(exports, 'aggregators', {
|
|
|
148
148
|
|
|
149
149
|
return initializedAggregators;
|
|
150
150
|
}
|
|
151
|
-
});
|
|
151
|
+
});
|
|
152
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbHMvbW9kZWxzLnRzIl0sIm5hbWVzIjpbImluaXRpYWxpemVkQWdncmVnYXRvcnMiLCJPYmplY3QiLCJkZWZpbmVQcm9wZXJ0eSIsImV4cG9ydHMiLCJlbnVtZXJhYmxlIiwiZ2V0Il0sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBOzs7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBQ0E7O0FBakJBOztBQUNBOztBQUFlO0FBc0JmLElBQUlBLHNCQUFpRCxHQUFHLElBQXhEO0FBQ0FDLE1BQU0sQ0FBQ0MsY0FBUCxDQUFzQkMsT0FBdEIsRUFBK0IsYUFBL0IsRUFBOEM7QUFDMUNDLEVBQUFBLFVBQVUsRUFBRSxJQUQ4QjtBQUUxQ0MsRUFBQUEsR0FBRyxFQUFFLE1BQU07QUFDUCxRQUFJLENBQUNMLHNCQUFMLEVBQTZCO0FBQ3pCQSxNQUFBQSxzQkFBc0IsR0FBRyxrQ0FBekI7QUFDSDs7QUFDRCxXQUFPQSxzQkFBUDtBQUNIO0FBUHlDLENBQTlDIiwic291cmNlc0NvbnRlbnQiOlsiLy8gaXN0YW5idWwgaWdub3JlIGZpbGVcbi8qKiBAaWdub3JlICovIC8qKiAqL1xuaW1wb3J0ICogYXMgcmVjb3JkQ29sb3JpbmcgZnJvbSAnLi9yZWNvcmRfY29sb3JpbmcnO1xuaW1wb3J0IGNyZWF0ZUFnZ3JlZ2F0b3JzIGZyb20gJy4vY3JlYXRlX2FnZ3JlZ2F0b3JzJztcbmV4cG9ydCB7RmllbGRUeXBlLCBGaWVsZENvbmZpZ30gZnJvbSAnLi4vdHlwZXMvZmllbGQnO1xuZXhwb3J0IHtWaWV3VHlwZX0gZnJvbSAnLi4vdHlwZXMvdmlldyc7XG5leHBvcnQge2RlZmF1bHQgYXMgQmFzZX0gZnJvbSAnLi9iYXNlJztcbmV4cG9ydCB7ZGVmYXVsdCBhcyBUYWJsZX0gZnJvbSAnLi90YWJsZSc7XG5leHBvcnQge2RlZmF1bHQgYXMgRmllbGR9IGZyb20gJy4vZmllbGQnO1xuZXhwb3J0IHtkZWZhdWx0IGFzIFZpZXd9IGZyb20gJy4vdmlldyc7XG5leHBvcnQge2RlZmF1bHQgYXMgUmVjb3JkfSBmcm9tICcuL3JlY29yZCc7XG5leHBvcnQge2RlZmF1bHQgYXMgUmVjb3JkUXVlcnlSZXN1bHR9IGZyb20gJy4vcmVjb3JkX3F1ZXJ5X3Jlc3VsdCc7XG5leHBvcnQge2RlZmF1bHQgYXMgVGFibGVPclZpZXdRdWVyeVJlc3VsdH0gZnJvbSAnLi90YWJsZV9vcl92aWV3X3F1ZXJ5X3Jlc3VsdCc7XG5leHBvcnQge2RlZmF1bHQgYXMgR3JvdXBlZFJlY29yZFF1ZXJ5UmVzdWx0fSBmcm9tICcuL2dyb3VwZWRfcmVjb3JkX3F1ZXJ5X3Jlc3VsdCc7XG5leHBvcnQge2RlZmF1bHQgYXMgTGlua2VkUmVjb3Jkc1F1ZXJ5UmVzdWx0fSBmcm9tICcuL2xpbmtlZF9yZWNvcmRzX3F1ZXJ5X3Jlc3VsdCc7XG5leHBvcnQge2RlZmF1bHQgYXMgVmlld01ldGFkYXRhUXVlcnlSZXN1bHR9IGZyb20gJy4vdmlld19tZXRhZGF0YV9xdWVyeV9yZXN1bHQnO1xuZXhwb3J0IHtkZWZhdWx0IGFzIFNlc3Npb259IGZyb20gJy4vc2Vzc2lvbic7XG5leHBvcnQge2RlZmF1bHQgYXMgQ3Vyc29yfSBmcm9tICcuL2N1cnNvcic7XG5leHBvcnQge3JlY29yZENvbG9yaW5nfTtcblxuLy8gSEFDSzogYWdncmVnYXRvcnMgbmVlZCBhaXJ0YWJsZV9pbnRlcmZhY2UgdG8gaW5pdGlhbGl6ZSAtIHJlYWxseSwgdGhleSBzaG91bGQgYmUgYSBwcm9wZXJ0eSBvZlxuLy8gYmFzZSBpbnN0ZWFkIG9mIGhlcmUuIHRvIHdvcmsgYXJvdW5kIHRoYXQsIHRoZXkncmUgaW5pdGlhbGl6ZWQgbGF6aWx5IGZvciBub3c6XG5leHBvcnQgZGVjbGFyZSB2YXIgYWdncmVnYXRvcnM6IFJldHVyblR5cGU8dHlwZW9mIGNyZWF0ZUFnZ3JlZ2F0b3JzPjtcbmxldCBpbml0aWFsaXplZEFnZ3JlZ2F0b3JzOiBudWxsIHwgdHlwZW9mIGFnZ3JlZ2F0b3JzID0gbnVsbDtcbk9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnYWdncmVnYXRvcnMnLCB7XG4gICAgZW51bWVyYWJsZTogdHJ1ZSxcbiAgICBnZXQ6ICgpID0+IHtcbiAgICAgICAgaWYgKCFpbml0aWFsaXplZEFnZ3JlZ2F0b3JzKSB7XG4gICAgICAgICAgICBpbml0aWFsaXplZEFnZ3JlZ2F0b3JzID0gY3JlYXRlQWdncmVnYXRvcnMoKTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gaW5pdGlhbGl6ZWRBZ2dyZWdhdG9ycztcbiAgICB9LFxufSk7XG4iXX0=
|
|
@@ -3,11 +3,14 @@
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
-
exports.MAX_NUM_FIELDS_PER_TABLE = exports.MAX_TABLE_NAME_LENGTH = exports.MAX_FIELD_NAME_LENGTH = void 0;
|
|
6
|
+
exports.MAX_NUM_FIELDS_PER_TABLE = exports.MAX_TABLE_NAME_LENGTH = exports.MAX_FIELD_DESCRIPTION_LENGTH = exports.MAX_FIELD_NAME_LENGTH = void 0;
|
|
7
7
|
// Mirrored from clientServerSharedConfigSettings
|
|
8
8
|
var MAX_FIELD_NAME_LENGTH = 255;
|
|
9
9
|
exports.MAX_FIELD_NAME_LENGTH = MAX_FIELD_NAME_LENGTH;
|
|
10
|
+
var MAX_FIELD_DESCRIPTION_LENGTH = 20000;
|
|
11
|
+
exports.MAX_FIELD_DESCRIPTION_LENGTH = MAX_FIELD_DESCRIPTION_LENGTH;
|
|
10
12
|
var MAX_TABLE_NAME_LENGTH = 255;
|
|
11
13
|
exports.MAX_TABLE_NAME_LENGTH = MAX_TABLE_NAME_LENGTH;
|
|
12
14
|
var MAX_NUM_FIELDS_PER_TABLE = 500;
|
|
13
|
-
exports.MAX_NUM_FIELDS_PER_TABLE = MAX_NUM_FIELDS_PER_TABLE;
|
|
15
|
+
exports.MAX_NUM_FIELDS_PER_TABLE = MAX_NUM_FIELDS_PER_TABLE;
|
|
16
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9tb2RlbHMvbXV0YXRpb25fY29uc3RhbnRzLnRzIl0sIm5hbWVzIjpbIk1BWF9GSUVMRF9OQU1FX0xFTkdUSCIsIk1BWF9GSUVMRF9ERVNDUklQVElPTl9MRU5HVEgiLCJNQVhfVEFCTEVfTkFNRV9MRU5HVEgiLCJNQVhfTlVNX0ZJRUxEU19QRVJfVEFCTEUiXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBO0FBQ08sSUFBTUEscUJBQXFCLEdBQUcsR0FBOUI7O0FBQ0EsSUFBTUMsNEJBQTRCLEdBQUcsS0FBckM7O0FBQ0EsSUFBTUMscUJBQXFCLEdBQUcsR0FBOUI7O0FBQ0EsSUFBTUMsd0JBQXdCLEdBQUcsR0FBakMiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBNaXJyb3JlZCBmcm9tIGNsaWVudFNlcnZlclNoYXJlZENvbmZpZ1NldHRpbmdzXG5leHBvcnQgY29uc3QgTUFYX0ZJRUxEX05BTUVfTEVOR1RIID0gMjU1O1xuZXhwb3J0IGNvbnN0IE1BWF9GSUVMRF9ERVNDUklQVElPTl9MRU5HVEggPSAyMDAwMDtcbmV4cG9ydCBjb25zdCBNQVhfVEFCTEVfTkFNRV9MRU5HVEggPSAyNTU7XG5leHBvcnQgY29uc3QgTUFYX05VTV9GSUVMRFNfUEVSX1RBQkxFID0gNTAwO1xuIl19
|