UNPKG

rr-table

Version:

Responsive and customizable React Table

670 lines (650 loc) 73.5 kB
"use strict"; var _react = _interopRequireDefault(require("react")); var _react2 = require("@storybook/react"); var _addonCentered = _interopRequireDefault(require("@storybook/addon-centered")); var _addonKnobs = require("@storybook/addon-knobs"); var _addonActions = require("@storybook/addon-actions"); var _mocks = require("../../config/storybook/mocks"); var _wrappers = require("../../config/storybook/wrappers"); var _components = require("../../config/storybook/components"); var _utils = require("../../config/storybook/utils"); var _Row = _interopRequireDefault(require("../Row")); var _index = _interopRequireDefault(require("./index")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _extends() { _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; return _extends.apply(this, arguments); } /** Stories of Default Table */ (0, _react2.storiesOf)('- Table -|1 - Default', module) /** Decorators */ .addDecorator(function (story) { return _react.default.createElement(_wrappers.StoryWrapper, { border: (0, _addonKnobs.boolean)('-- wrapper border --', false) }, story()); }).addDecorator(_addonCentered.default) /** Stories */ .add('1 - Default Table', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', ['Name', 'Surname', 'id']), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('2 - Default Table with keys', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('3 - Responsive Table Colored', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), colWidths: (0, _addonKnobs.array)('colWidths', _mocks.mockedColWidths), card: function card(_ref) { var data = _ref.data, close = _ref.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), center: (0, _addonKnobs.boolean)('center', false), isLoading: (0, _addonKnobs.boolean)('isLoading', false), loader: _components.Loader, onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('4 - Responsive Table with custom options and custom empty cell and colored text', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref2) { var data = _ref2.data, close = _ref2.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, cardWidth: (0, _addonKnobs.text)('cardWidth', '400px'), colored: (0, _addonKnobs.object)('colored', { color: '#e1bee7', parity: 1 }), center: (0, _addonKnobs.boolean)('center', false), emptyCellContent: function emptyCellContent() { return _react.default.createElement("div", { style: { color: 'peru', fontWeight: 'bold' } }, "NA"); }, colWidths: (0, _addonKnobs.array)('colWidths', _mocks.mockedColWidths), fontSize: (0, _addonKnobs.text)('fontSize', '16px'), lineClamp: (0, _addonKnobs.number)('lineClamp', 3), lineHeight: (0, _addonKnobs.number)('lineHeight', 2.2), rowHeight: (0, _addonKnobs.text)('rowHeight', '120px'), textColor: (0, _addonKnobs.color)('textColor', '#303f9f'), cellPadding: (0, _addonKnobs.text)('cellPadding', '10px'), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('5 - Responsive Table with custom options and custom empty cell and custom colors', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref3) { var data = _ref3.data, close = _ref3.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, cardWidth: (0, _addonKnobs.text)('cardWidth', '400px'), colored: (0, _addonKnobs.object)('colored', { color: '#cfd8dc', parity: 2 }), center: (0, _addonKnobs.boolean)('center', false), emptyCellContent: function emptyCellContent() { return _react.default.createElement("div", { style: { color: '#ffcc80', fontWeight: 'bold' } }, "No data"); }, colWidths: (0, _addonKnobs.array)('colWidths', _mocks.mockedColWidths), fontSize: (0, _addonKnobs.text)('fontSize', '14px'), lineClamp: (0, _addonKnobs.number)('lineClamp', 1), lineHeight: (0, _addonKnobs.number)('lineHeight', 2.2), rowHeight: (0, _addonKnobs.text)('rowHeight', '50px'), textColor: (0, _addonKnobs.object)('textColor', { default: '#263238', hovered: '#3f51b5', selected: '#f5f5f5' }), rowColor: (0, _addonKnobs.object)('rowColor', { default: '#e8eaf6', hovered: '#b0bec5', selected: '#00897b' }), cellPadding: (0, _addonKnobs.text)('cellPadding', '10px'), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('6 - normalize', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', [{ title: 'Name', sortingKey: 'name' }, { title: 'Surname' }, { title: 'Age', sortingKey: 'info.age' }, 'Job', { title: 'Sex', sortingKey: 'info.sex' }, 'Animaux']), keys: (0, _addonKnobs.array)('keys', [{ display: 'name', normalize: function normalize(data) { return data.toUpperCase(); } }, 'surname', 'info.age', 'company.job', 'info.sex', function (d) { return d.pets && d.pets.join(', ').toUpperCase(); }]), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref4) { var data = _ref4.data, close = _ref4.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('7 - Sorting', function () { return _react.default.createElement(_index.default, { onSort: (0, _addonActions.action)('cell clicked'), sort: (0, _addonKnobs.object)('sort', { sortingKey: 'name', order: 'DESC' }), titles: (0, _addonKnobs.array)('titles', [{ title: 'Name', sortingKey: 'name' }, { title: 'Surname' }, { title: 'Age', sortingKey: 'info.age' }, 'Job', { title: 'Sex', sortingKey: 'info.sex' }, 'Animaux']), keys: (0, _addonKnobs.array)('keys', [{ display: 'name', normalize: function normalize(data) { return data.toUpperCase(); } }, 'surname', 'info.age', 'company.job', 'info.sex', function (d) { return d.pets && d.pets.join(', ').toUpperCase(); }]), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref5) { var data = _ref5.data, close = _ref5.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }); /** Stories of Empty data */ (0, _react2.storiesOf)('- Table -|2 - Empty data', module) /** Decorators */ .addDecorator(function (story) { return _react.default.createElement(_wrappers.StoryWrapper, { border: (0, _addonKnobs.boolean)('-- wrapper border --', false) }, story()); }).addDecorator(_addonCentered.default) /** Stories */ .add('1 - Empty data row', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref6) { var data = _ref6.data, close = _ref6.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), center: (0, _addonKnobs.boolean)('center', false), isLoading: (0, _addonKnobs.boolean)('isLoading', false), loader: _components.Loader, onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedListWithEmptyData) }); }).add('2 - No data at all - default', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref7) { var data = _ref7.data, close = _ref7.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), center: (0, _addonKnobs.boolean)('center', false), isLoading: (0, _addonKnobs.boolean)('isLoading', false), loader: _components.Loader, onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', []) }); }).add('3 - No data at all - custom text', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref8) { var data = _ref8.data, close = _ref8.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), center: (0, _addonKnobs.boolean)('center', false), isLoading: (0, _addonKnobs.boolean)('isLoading', false), loader: _components.Loader, onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', []), emptyList: (0, _addonKnobs.text)('emptyList', '0 results') }); }).add('4 - No data at all - custom component', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref9) { var data = _ref9.data, close = _ref9.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), center: (0, _addonKnobs.boolean)('center', false), isLoading: (0, _addonKnobs.boolean)('isLoading', false), loader: _components.Loader, onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', []), emptyList: _react.default.createElement(_components.EmptyRowContent, null, "Empty list") }); }); /** Stories of Table with custom Head */ (0, _react2.storiesOf)('- Table -|3 - Custom Head', module) /** Decorators */ .addDecorator(function (story) { return _react.default.createElement(_wrappers.StoryWrapper, { border: (0, _addonKnobs.boolean)('-- wrapper border --', false) }, story()); }).addDecorator(_addonCentered.default) /** Stories */ .add('- Custom Head (component)', function () { return _react.default.createElement(_index.default, { head: (0, _addonKnobs.object)('head', _react.default.createElement(_components.Head, { titles: (0, _addonKnobs.array)('titles', ['Name', 'Surname', 'id']) })), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('- Custom Head (component function)', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', ['Name', 'Surname', 'id']), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList), head: _components.Head }); }).add('- Custom Head (function render props)', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', ['Name', 'Surname', 'id']), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList), head: function head(_ref10) { var titles = _ref10.titles; return _react.default.createElement("div", { style: { display: 'flex', justifyContent: 'space-between', backgroundColor: '#c5e1a5', height: '3rem' } }, titles.map(function (title) { return _react.default.createElement("div", { key: title }, title); })); } }); }); /** Stories of Table with custom HeadCell */ (0, _react2.storiesOf)('- Table -|4 - Custom HeadCell', module) /** Decorators */ .addDecorator(function (story) { return _react.default.createElement(_wrappers.StoryWrapper, { border: (0, _addonKnobs.boolean)('-- wrapper border --', false) }, story()); }).addDecorator(_addonCentered.default) /** Stories */ .add('- Custom HeadCell (component function)', function () { return _react.default.createElement(_index.default, { headCell: _components.HeadCell, titles: (0, _addonKnobs.object)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }).add('- Custom HeadCell (function render props)', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', ['Name', 'Surname', 'id']), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList), headCell: function headCell(_ref11) { var title = _ref11.title, id = _ref11.id; return _react.default.createElement(_components.HeadCell, { key: id }, title); } }); }).add('- Custom Head with custom HeadCell (function render props)', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', ['Name', 'Surname', 'id']), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList), head: _components.Head, headCell: function headCell(_ref12) { var title = _ref12.title, id = _ref12.id; return _react.default.createElement(_components.HeadCell, { key: id }, title); } }); }).add('- with html', function () { return _react.default.createElement(_index.default, { onSort: _utils.onSort, sort: (0, _addonKnobs.object)('sort', { sortingKey: 'name', order: 'DESC' }), titles: (0, _addonKnobs.array)('titles', [{ title: 'Name', sortingKey: 'name' }, { title: 'Surname' }, { title: 'Age', sortingKey: 'info.age' }, 'Job', { title: 'Sex', sortingKey: 'info.sex' }, 'Animaux']), keys: (0, _addonKnobs.array)('keys', [{ display: 'name', normalize: function normalize(data) { return data.toUpperCase(); } }, 'surname', 'info.age', 'company.job', 'info.sex', function (d) { return _react.default.createElement("button", { type: "button", onClick: function onClick(e) { e.stopPropagation(); } }, d.info.sex); }]), breakpoints: (0, _addonKnobs.array)('breakpoints', _mocks.mockedBreakpoints), priorities: (0, _addonKnobs.array)('priorities', _mocks.mockedPriorities), card: function card(_ref13) { var data = _ref13.data, close = _ref13.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, colored: (0, _addonKnobs.boolean)('colored', true), onRowClick: (0, _addonActions.action)('row clicked'), list: (0, _addonKnobs.object)('list', _mocks.mockedList) }); }); /** Stories of Table with render props row */ (0, _react2.storiesOf)('- Table -|5 - render props row', module) /** Decorators */ .addDecorator(function (story) { return _react.default.createElement(_wrappers.StoryWrapper, { border: (0, _addonKnobs.boolean)('-- wrapper border --', false) }, story()); }).addDecorator(_addonCentered.default) /** Stories */ .add('- custom row with a unique children', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), card: function card(_ref14) { var data = _ref14.data, close = _ref14.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, breakpoints: _mocks.mockedBreakpoints, priorities: _mocks.mockedPriorities, colored: (0, _addonKnobs.boolean)('colored', true), list: (0, _addonKnobs.object)('list', _mocks.mockedListWithEmptyData), row: function row(rowProps) { if (!rowProps.data.name && !rowProps.data.surname && !rowProps.data.info.age) { return _react.default.createElement(_Row.default, _extends({ id: rowProps.id }, rowProps, { onClick: (0, _addonActions.action)('row clicked'), handleClick: null }), _react.default.createElement(_components.EmptyRowContent, null, "Hello")); } return _react.default.createElement(_Row.default, _extends({}, rowProps, { onClick: (0, _addonActions.action)('row clicked') })); } }); }).add('- custom row with custom items', function () { return _react.default.createElement(_index.default, { titles: (0, _addonKnobs.array)('titles', _mocks.mockedTitles), keys: (0, _addonKnobs.array)('keys', _mocks.mockedKeys), card: function card(_ref15) { var data = _ref15.data, close = _ref15.close; return _react.default.createElement(_components.Card, { close: close, data: (0, _addonKnobs.object)('card data', data) }); }, breakpoints: _mocks.mockedBreakpoints, priorities: _mocks.mockedPriorities, colored: (0, _addonKnobs.boolean)('colored', true), list: (0, _addonKnobs.object)('list', _mocks.mockedListWithEmptyData), row: function row(rowProps) { if (!rowProps.data.name && !rowProps.data.surname && !rowProps.data.info.age) { return _react.default.createElement(_Row.default, _extends({}, rowProps, { id: rowProps.id, handleClick: null, items: [_react.default.createElement(_components.EmptyRowContent, null, "Hello"), 'Houhou hou hou'], colWidths: (0, _addonKnobs.array)('colWidths', [4, 1]), onClick: (0, _addonActions.action)('row clicked') })); } return _react.default.createElement(_Row.default, _extends({}, rowProps, { onClick: (0, _addonActions.action)('row clicked') })); } }); }); // .add('- Custom Head (function)', () => ( // <Table // titles={array('titles', ['Name', 'Surname', 'id'])} // list={object('list', mockedList)} // head={Head} // /> // )) // .add('- Custom Head (function render props)', () => ( // <Table // titles={array('titles', ['Name', 'Surname', 'id'])} // list={object('list', mockedList)} // head={({ titles }) => ( // <div // style={{ // display: 'flex', // justifyContent: 'space-between', // backgroundColor: '#9fa8da', // height: '3rem', // }} // > // {titles.map(title => ( // <div>{title}</div> // ))} // </div> // )} // /> // )); // -------------------------------------- // .add('custom row', () => ( // <Table // titles={titles} // breakpoints={breakpoints} // priorities={priorities} // head={props => <Head {...props} />} // card={data => <Card data={data} />} // row={data => ( // if (data.prout) { // return <Row projectId={42}>lala</Row>; // } // <Row // key={data.id} // id={data.id} // items={[data.name, data.surname, data.age, data.job, data.sex]} // breakpoints={breakpoints} // priorities={priorities} // /> // )} // /> // )) // .add('custom cells', () => ( // <Table> // <Row> // <Cell data={list[0].name} breakpoints={breakpoints} priority={1} /> // <Cell data={list[0].surname} breakpoints={breakpoints} priority={2} /> // <div> // <h3>{list[0].age}</h3> // </div> // <Cell data={list[0].sex} /> // </Row> // <Row> // <Cell breakpoints={breakpoints} priority={1}> // <div // style={{ // width: 200, // backgroundColor: 'blue', // height: '100%', // color: 'white', // }} // > // {list[1].name} // </div> // </Cell> // <Cell data={list[1].surname} breakpoints={breakpoints} priority={2} /> // <Cell data={list[1].age} breakpoints={breakpoints} /> // <Cell data={list[1].sex} breakpoints={breakpoints} /> // </Row> // <Row> // <Cell data={list[2].name} breakpoints={breakpoints} /> // <Cell data={list[2].surname} breakpoints={breakpoints} priority={1} /> // <Cell data={list[2].age} breakpoints={breakpoints} /> // <Cell data={list[2].sex} breakpoints={breakpoints} /> // </Row> // <Row> // <Cell data={list[3].name} breakpoints={breakpoints} /> // <Cell data={list[3].surname} breakpoints={breakpoints} priority={1} /> // <Cell data={list[3].age} breakpoints={breakpoints} priority={1} /> // <Cell data={list[3].sex} breakpoints={breakpoints} /> // </Row> // </Table> // )); // ------------------------------------- // card={data => ( // <div> // <ul> // <li> // Name: // {data.name} // </li> // <li> // Surname: // {data.surname} // </li> // <li> // Age: // {data.age} // </li> // <li> // Job: // {data.job} // </li> // <li> // Sex: // {data.sex} // </li> // </ul> // </div> // )} // {list.map(data => ( // <Row // key={data.id} // id={data.id} // items={[data.name, data.surname, data.age, data.job, data.sex]} // breakpoints={breakpoints} // priorities={priorities} // /> // ))} //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9jb21wb25lbnRzL1RhYmxlL1RhYmxlLnN0b3JpZXMuanMiXSwibmFtZXMiOlsibW9kdWxlIiwiYWRkRGVjb3JhdG9yIiwic3RvcnkiLCJjZW50ZXJlZCIsImFkZCIsIm1vY2tlZExpc3QiLCJtb2NrZWRUaXRsZXMiLCJtb2NrZWRLZXlzIiwibW9ja2VkQnJlYWtwb2ludHMiLCJtb2NrZWRQcmlvcml0aWVzIiwibW9ja2VkQ29sV2lkdGhzIiwiZGF0YSIsImNsb3NlIiwiTG9hZGVyIiwiY29sb3IiLCJwYXJpdHkiLCJmb250V2VpZ2h0IiwiZGVmYXVsdCIsImhvdmVyZWQiLCJzZWxlY3RlZCIsInRpdGxlIiwic29ydGluZ0tleSIsImRpc3BsYXkiLCJub3JtYWxpemUiLCJ0b1VwcGVyQ2FzZSIsImQiLCJwZXRzIiwiam9pbiIsIm9yZGVyIiwibW9ja2VkTGlzdFdpdGhFbXB0eURhdGEiLCJIZWFkIiwidGl0bGVzIiwianVzdGlmeUNvbnRlbnQiLCJiYWNrZ3JvdW5kQ29sb3IiLCJoZWlnaHQiLCJtYXAiLCJIZWFkQ2VsbCIsImlkIiwib25Tb3J0IiwiZSIsInN0b3BQcm9wYWdhdGlvbiIsImluZm8iLCJzZXgiLCJyb3dQcm9wcyIsIm5hbWUiLCJzdXJuYW1lIiwiYWdlIl0sIm1hcHBpbmdzIjoiOztBQUFBOztBQUVBOztBQUNBOztBQUNBOztBQUdBOztBQUdBOztBQVNBOztBQUNBOztBQUdBOztBQUNBOztBQUdBOzs7Ozs7QUFFQTtBQUNBLHVCQUFVLHVCQUFWLEVBQW1DQSxNQUFuQztBQUNFO0FBREYsQ0FFR0MsWUFGSCxDQUVnQixVQUFBQyxLQUFLO0FBQUEsU0FDakIsNkJBQUMsc0JBQUQ7QUFBYyxJQUFBLE1BQU0sRUFBRSx5QkFBUSxzQkFBUixFQUFnQyxLQUFoQztBQUF0QixLQUErREEsS0FBSyxFQUFwRSxDQURpQjtBQUFBLENBRnJCLEVBS0dELFlBTEgsQ0FLZ0JFLHNCQUxoQjtBQU9FO0FBUEYsQ0FRR0MsR0FSSCxDQVFPLG1CQVJQLEVBUTRCO0FBQUEsU0FDeEIsNkJBQUMsY0FBRDtBQUFPLElBQUEsTUFBTSxFQUFFLHVCQUFNLFFBQU4sRUFBZ0IsQ0FBQyxNQUFELEVBQVMsU0FBVCxFQUFvQixJQUFwQixDQUFoQixDQUFmO0FBQTJELElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZUMsaUJBQWY7QUFBakUsSUFEd0I7QUFBQSxDQVI1QixFQVlHRCxHQVpILENBWU8sNkJBWlAsRUFZc0M7QUFBQSxTQUNsQyw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQkUsbUJBQWhCLENBRFY7QUFFRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWNDLGlCQUFkLENBRlI7QUFHRSxJQUFBLFVBQVUsRUFBRSwwQkFBTyxhQUFQLENBSGQ7QUFJRSxJQUFBLElBQUksRUFBRSx3QkFBTyxNQUFQLEVBQWVGLGlCQUFmO0FBSlIsSUFEa0M7QUFBQSxDQVp0QyxFQXFCR0QsR0FyQkgsQ0FxQk8sOEJBckJQLEVBcUJ1QztBQUFBLFNBQ25DLDZCQUFDLGNBQUQ7QUFDRSxJQUFBLE1BQU0sRUFBRSx1QkFBTSxRQUFOLEVBQWdCRSxtQkFBaEIsQ0FEVjtBQUVFLElBQUEsSUFBSSxFQUFFLHVCQUFNLE1BQU4sRUFBY0MsaUJBQWQsQ0FGUjtBQUdFLElBQUEsV0FBVyxFQUFFLHVCQUFNLGFBQU4sRUFBcUJDLHdCQUFyQixDQUhmO0FBSUUsSUFBQSxVQUFVLEVBQUUsdUJBQU0sWUFBTixFQUFvQkMsdUJBQXBCLENBSmQ7QUFLRSxJQUFBLFNBQVMsRUFBRSx1QkFBTSxXQUFOLEVBQW1CQyxzQkFBbkIsQ0FMYjtBQU1FLElBQUEsSUFBSSxFQUFFO0FBQUEsVUFBR0MsSUFBSCxRQUFHQSxJQUFIO0FBQUEsVUFBU0MsS0FBVCxRQUFTQSxLQUFUO0FBQUEsYUFBcUIsNkJBQUMsZ0JBQUQ7QUFBTSxRQUFBLEtBQUssRUFBRUEsS0FBYjtBQUFvQixRQUFBLElBQUksRUFBRSx3QkFBTyxXQUFQLEVBQW9CRCxJQUFwQjtBQUExQixRQUFyQjtBQUFBLEtBTlI7QUFPRSxJQUFBLE9BQU8sRUFBRSx5QkFBUSxTQUFSLEVBQW1CLElBQW5CLENBUFg7QUFRRSxJQUFBLE1BQU0sRUFBRSx5QkFBUSxRQUFSLEVBQWtCLEtBQWxCLENBUlY7QUFTRSxJQUFBLFNBQVMsRUFBRSx5QkFBUSxXQUFSLEVBQXFCLEtBQXJCLENBVGI7QUFVRSxJQUFBLE1BQU0sRUFBRUUsa0JBVlY7QUFXRSxJQUFBLFVBQVUsRUFBRSwwQkFBTyxhQUFQLENBWGQ7QUFZRSxJQUFBLElBQUksRUFBRSx3QkFBTyxNQUFQLEVBQWVSLGlCQUFmO0FBWlIsSUFEbUM7QUFBQSxDQXJCdkMsRUFzQ0dELEdBdENILENBc0NPLGlGQXRDUCxFQXNDMEY7QUFBQSxTQUN0Riw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQkUsbUJBQWhCLENBRFY7QUFFRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWNDLGlCQUFkLENBRlI7QUFHRSxJQUFBLFdBQVcsRUFBRSx1QkFBTSxhQUFOLEVBQXFCQyx3QkFBckIsQ0FIZjtBQUlFLElBQUEsVUFBVSxFQUFFLHVCQUFNLFlBQU4sRUFBb0JDLHVCQUFwQixDQUpkO0FBS0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHRSxJQUFILFNBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FMUjtBQU1FLElBQUEsU0FBUyxFQUFFLHNCQUFLLFdBQUwsRUFBa0IsT0FBbEIsQ0FOYjtBQU9FLElBQUEsT0FBTyxFQUFFLHdCQUFPLFNBQVAsRUFBa0I7QUFBRUcsTUFBQUEsS0FBSyxFQUFFLFNBQVQ7QUFBb0JDLE1BQUFBLE1BQU0sRUFBRTtBQUE1QixLQUFsQixDQVBYO0FBUUUsSUFBQSxNQUFNLEVBQUUseUJBQVEsUUFBUixFQUFrQixLQUFsQixDQVJWO0FBU0UsSUFBQSxnQkFBZ0IsRUFBRTtBQUFBLGFBQU07QUFBSyxRQUFBLEtBQUssRUFBRTtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsTUFBVDtBQUFpQkUsVUFBQUEsVUFBVSxFQUFFO0FBQTdCO0FBQVosY0FBTjtBQUFBLEtBVHBCO0FBVUUsSUFBQSxTQUFTLEVBQUUsdUJBQU0sV0FBTixFQUFtQk4sc0JBQW5CLENBVmI7QUFXRSxJQUFBLFFBQVEsRUFBRSxzQkFBSyxVQUFMLEVBQWlCLE1BQWpCLENBWFo7QUFZRSxJQUFBLFNBQVMsRUFBRSx3QkFBTyxXQUFQLEVBQW9CLENBQXBCLENBWmI7QUFhRSxJQUFBLFVBQVUsRUFBRSx3QkFBTyxZQUFQLEVBQXFCLEdBQXJCLENBYmQ7QUFjRSxJQUFBLFNBQVMsRUFBRSxzQkFBSyxXQUFMLEVBQWtCLE9BQWxCLENBZGI7QUFlRSxJQUFBLFNBQVMsRUFBRSx1QkFBTSxXQUFOLEVBQW1CLFNBQW5CLENBZmI7QUFnQkUsSUFBQSxXQUFXLEVBQUUsc0JBQUssYUFBTCxFQUFvQixNQUFwQixDQWhCZjtBQWlCRSxJQUFBLFVBQVUsRUFBRSwwQkFBTyxhQUFQLENBakJkO0FBa0JFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZUwsaUJBQWY7QUFsQlIsSUFEc0Y7QUFBQSxDQXRDMUYsRUE2REdELEdBN0RILENBNkRPLGtGQTdEUCxFQTZEMkY7QUFBQSxTQUN2Riw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQkUsbUJBQWhCLENBRFY7QUFFRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWNDLGlCQUFkLENBRlI7QUFHRSxJQUFBLFdBQVcsRUFBRSx1QkFBTSxhQUFOLEVBQXFCQyx3QkFBckIsQ0FIZjtBQUlFLElBQUEsVUFBVSxFQUFFLHVCQUFNLFlBQU4sRUFBb0JDLHVCQUFwQixDQUpkO0FBS0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHRSxJQUFILFNBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FMUjtBQU1FLElBQUEsU0FBUyxFQUFFLHNCQUFLLFdBQUwsRUFBa0IsT0FBbEIsQ0FOYjtBQU9FLElBQUEsT0FBTyxFQUFFLHdCQUFPLFNBQVAsRUFBa0I7QUFBRUcsTUFBQUEsS0FBSyxFQUFFLFNBQVQ7QUFBb0JDLE1BQUFBLE1BQU0sRUFBRTtBQUE1QixLQUFsQixDQVBYO0FBUUUsSUFBQSxNQUFNLEVBQUUseUJBQVEsUUFBUixFQUFrQixLQUFsQixDQVJWO0FBU0UsSUFBQSxnQkFBZ0IsRUFBRTtBQUFBLGFBQU07QUFBSyxRQUFBLEtBQUssRUFBRTtBQUFFRCxVQUFBQSxLQUFLLEVBQUUsU0FBVDtBQUFvQkUsVUFBQUEsVUFBVSxFQUFFO0FBQWhDO0FBQVosbUJBQU47QUFBQSxLQVRwQjtBQVVFLElBQUEsU0FBUyxFQUFFLHVCQUFNLFdBQU4sRUFBbUJOLHNCQUFuQixDQVZiO0FBV0UsSUFBQSxRQUFRLEVBQUUsc0JBQUssVUFBTCxFQUFpQixNQUFqQixDQVhaO0FBWUUsSUFBQSxTQUFTLEVBQUUsd0JBQU8sV0FBUCxFQUFvQixDQUFwQixDQVpiO0FBYUUsSUFBQSxVQUFVLEVBQUUsd0JBQU8sWUFBUCxFQUFxQixHQUFyQixDQWJkO0FBY0UsSUFBQSxTQUFTLEVBQUUsc0JBQUssV0FBTCxFQUFrQixNQUFsQixDQWRiO0FBZUUsSUFBQSxTQUFTLEVBQUUsd0JBQU8sV0FBUCxFQUFvQjtBQUM3Qk8sTUFBQUEsT0FBTyxFQUFFLFNBRG9CO0FBRTdCQyxNQUFBQSxPQUFPLEVBQUUsU0FGb0I7QUFHN0JDLE1BQUFBLFFBQVEsRUFBRTtBQUhtQixLQUFwQixDQWZiO0FBb0JFLElBQUEsUUFBUSxFQUFFLHdCQUFPLFVBQVAsRUFBbUI7QUFBRUYsTUFBQUEsT0FBTyxFQUFFLFNBQVg7QUFBc0JDLE1BQUFBLE9BQU8sRUFBRSxTQUEvQjtBQUEwQ0MsTUFBQUEsUUFBUSxFQUFFO0FBQXBELEtBQW5CLENBcEJaO0FBcUJFLElBQUEsV0FBVyxFQUFFLHNCQUFLLGFBQUwsRUFBb0IsTUFBcEIsQ0FyQmY7QUFzQkUsSUFBQSxVQUFVLEVBQUUsMEJBQU8sYUFBUCxDQXRCZDtBQXVCRSxJQUFBLElBQUksRUFBRSx3QkFBTyxNQUFQLEVBQWVkLGlCQUFmO0FBdkJSLElBRHVGO0FBQUEsQ0E3RDNGLEVBeUZHRCxHQXpGSCxDQXlGTyxlQXpGUCxFQXlGd0I7QUFBQSxTQUNwQiw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQixDQUN0QjtBQUFFZ0IsTUFBQUEsS0FBSyxFQUFFLE1BQVQ7QUFBaUJDLE1BQUFBLFVBQVUsRUFBRTtBQUE3QixLQURzQixFQUV0QjtBQUFFRCxNQUFBQSxLQUFLLEVBQUU7QUFBVCxLQUZzQixFQUd0QjtBQUFFQSxNQUFBQSxLQUFLLEVBQUUsS0FBVDtBQUFnQkMsTUFBQUEsVUFBVSxFQUFFO0FBQTVCLEtBSHNCLEVBSXRCLEtBSnNCLEVBS3RCO0FBQUVELE1BQUFBLEtBQUssRUFBRSxLQUFUO0FBQWdCQyxNQUFBQSxVQUFVLEVBQUU7QUFBNUIsS0FMc0IsRUFNdEIsU0FOc0IsQ0FBaEIsQ0FEVjtBQVNFLElBQUEsSUFBSSxFQUFFLHVCQUFNLE1BQU4sRUFBYyxDQUNsQjtBQUFFQyxNQUFBQSxPQUFPLEVBQUUsTUFBWDtBQUFtQkMsTUFBQUEsU0FBUyxFQUFFLG1CQUFBWixJQUFJO0FBQUEsZUFBSUEsSUFBSSxDQUFDYSxXQUFMLEVBQUo7QUFBQTtBQUFsQyxLQURrQixFQUVsQixTQUZrQixFQUdsQixVQUhrQixFQUlsQixhQUprQixFQUtsQixVQUxrQixFQU1sQixVQUFBQyxDQUFDO0FBQUEsYUFBSUEsQ0FBQyxDQUFDQyxJQUFGLElBQVVELENBQUMsQ0FBQ0MsSUFBRixDQUFPQyxJQUFQLENBQVksSUFBWixFQUFrQkgsV0FBbEIsRUFBZDtBQUFBLEtBTmlCLENBQWQsQ0FUUjtBQWlCRSxJQUFBLFdBQVcsRUFBRSx1QkFBTSxhQUFOLEVBQXFCaEIsd0JBQXJCLENBakJmO0FBa0JFLElBQUEsVUFBVSxFQUFFLHVCQUFNLFlBQU4sRUFBb0JDLHVCQUFwQixDQWxCZDtBQW1CRSxJQUFBLElBQUksRUFBRTtBQUFBLFVBQUdFLElBQUgsU0FBR0EsSUFBSDtBQUFBLFVBQVNDLEtBQVQsU0FBU0EsS0FBVDtBQUFBLGFBQXFCLDZCQUFDLGdCQUFEO0FBQU0sUUFBQSxLQUFLLEVBQUVBLEtBQWI7QUFBb0IsUUFBQSxJQUFJLEVBQUUsd0JBQU8sV0FBUCxFQUFvQkQsSUFBcEI7QUFBMUIsUUFBckI7QUFBQSxLQW5CUjtBQW9CRSxJQUFBLE9BQU8sRUFBRSx5QkFBUSxTQUFSLEVBQW1CLElBQW5CLENBcEJYO0FBcUJFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FyQmQ7QUFzQkUsSUFBQSxJQUFJLEVBQUUsd0JBQU8sTUFBUCxFQUFlTixpQkFBZjtBQXRCUixJQURvQjtBQUFBLENBekZ4QixFQW9IR0QsR0FwSEgsQ0FvSE8sYUFwSFAsRUFvSHNCO0FBQUEsU0FDbEIsNkJBQUMsY0FBRDtBQUNFLElBQUEsTUFBTSxFQUFFLDBCQUFPLGNBQVAsQ0FEVjtBQUVFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZTtBQUFFaUIsTUFBQUEsVUFBVSxFQUFFLE1BQWQ7QUFBc0JPLE1BQUFBLEtBQUssRUFBRTtBQUE3QixLQUFmLENBRlI7QUFHRSxJQUFBLE1BQU0sRUFBRSx1QkFBTSxRQUFOLEVBQWdCLENBQ3RCO0FBQUVSLE1BQUFBLEtBQUssRUFBRSxNQUFUO0FBQWlCQyxNQUFBQSxVQUFVLEVBQUU7QUFBN0IsS0FEc0IsRUFFdEI7QUFBRUQsTUFBQUEsS0FBSyxFQUFFO0FBQVQsS0FGc0IsRUFHdEI7QUFBRUEsTUFBQUEsS0FBSyxFQUFFLEtBQVQ7QUFBZ0JDLE1BQUFBLFVBQVUsRUFBRTtBQUE1QixLQUhzQixFQUl0QixLQUpzQixFQUt0QjtBQUFFRCxNQUFBQSxLQUFLLEVBQUUsS0FBVDtBQUFnQkMsTUFBQUEsVUFBVSxFQUFFO0FBQTVCLEtBTHNCLEVBTXRCLFNBTnNCLENBQWhCLENBSFY7QUFXRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWMsQ0FDbEI7QUFBRUMsTUFBQUEsT0FBTyxFQUFFLE1BQVg7QUFBbUJDLE1BQUFBLFNBQVMsRUFBRSxtQkFBQVosSUFBSTtBQUFBLGVBQUlBLElBQUksQ0FBQ2EsV0FBTCxFQUFKO0FBQUE7QUFBbEMsS0FEa0IsRUFFbEIsU0FGa0IsRUFHbEIsVUFIa0IsRUFJbEIsYUFKa0IsRUFLbEIsVUFMa0IsRUFNbEIsVUFBQUMsQ0FBQztBQUFBLGFBQUlBLENBQUMsQ0FBQ0MsSUFBRixJQUFVRCxDQUFDLENBQUNDLElBQUYsQ0FBT0MsSUFBUCxDQUFZLElBQVosRUFBa0JILFdBQWxCLEVBQWQ7QUFBQSxLQU5pQixDQUFkLENBWFI7QUFtQkUsSUFBQSxXQUFXLEVBQUUsdUJBQU0sYUFBTixFQUFxQmhCLHdCQUFyQixDQW5CZjtBQW9CRSxJQUFBLFVBQVUsRUFBRSx1QkFBTSxZQUFOLEVBQW9CQyx1QkFBcEIsQ0FwQmQ7QUFxQkUsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHRSxJQUFILFNBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FyQlI7QUFzQkUsSUFBQSxPQUFPLEVBQUUseUJBQVEsU0FBUixFQUFtQixJQUFuQixDQXRCWDtBQXVCRSxJQUFBLFVBQVUsRUFBRSwwQkFBTyxhQUFQLENBdkJkO0FBd0JFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZU4saUJBQWY7QUF4QlIsSUFEa0I7QUFBQSxDQXBIdEI7QUFpSkE7O0FBQ0EsdUJBQVUsMEJBQVYsRUFBc0NMLE1BQXRDO0FBQ0U7QUFERixDQUVHQyxZQUZILENBRWdCLFVBQUFDLEtBQUs7QUFBQSxTQUNqQiw2QkFBQyxzQkFBRDtBQUFjLElBQUEsTUFBTSxFQUFFLHlCQUFRLHNCQUFSLEVBQWdDLEtBQWhDO0FBQXRCLEtBQStEQSxLQUFLLEVBQXBFLENBRGlCO0FBQUEsQ0FGckIsRUFLR0QsWUFMSCxDQUtnQkUsc0JBTGhCO0FBT0U7QUFQRixDQVFHQyxHQVJILENBUU8sb0JBUlAsRUFRNkI7QUFBQSxTQUN6Qiw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQkUsbUJBQWhCLENBRFY7QUFFRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWNDLGlCQUFkLENBRlI7QUFHRSxJQUFBLFdBQVcsRUFBRSx1QkFBTSxhQUFOLEVBQXFCQyx3QkFBckIsQ0FIZjtBQUlFLElBQUEsVUFBVSxFQUFFLHVCQUFNLFlBQU4sRUFBb0JDLHVCQUFwQixDQUpkO0FBS0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHRSxJQUFILFNBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FMUjtBQU1FLElBQUEsT0FBTyxFQUFFLHlCQUFRLFNBQVIsRUFBbUIsSUFBbkIsQ0FOWDtBQU9FLElBQUEsTUFBTSxFQUFFLHlCQUFRLFFBQVIsRUFBa0IsS0FBbEIsQ0FQVjtBQVFFLElBQUEsU0FBUyxFQUFFLHlCQUFRLFdBQVIsRUFBcUIsS0FBckIsQ0FSYjtBQVNFLElBQUEsTUFBTSxFQUFFRSxrQkFUVjtBQVVFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FWZDtBQVdFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZWdCLDhCQUFmO0FBWFIsSUFEeUI7QUFBQSxDQVI3QixFQXdCR3pCLEdBeEJILENBd0JPLDhCQXhCUCxFQXdCdUM7QUFBQSxTQUNuQyw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQkUsbUJBQWhCLENBRFY7QUFFRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWNDLGlCQUFkLENBRlI7QUFHRSxJQUFBLFdBQVcsRUFBRSx1QkFBTSxhQUFOLEVBQXFCQyx3QkFBckIsQ0FIZjtBQUlFLElBQUEsVUFBVSxFQUFFLHVCQUFNLFlBQU4sRUFBb0JDLHVCQUFwQixDQUpkO0FBS0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHRSxJQUFILFNBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FMUjtBQU1FLElBQUEsT0FBTyxFQUFFLHlCQUFRLFNBQVIsRUFBbUIsSUFBbkIsQ0FOWDtBQU9FLElBQUEsTUFBTSxFQUFFLHlCQUFRLFFBQVIsRUFBa0IsS0FBbEIsQ0FQVjtBQVFFLElBQUEsU0FBUyxFQUFFLHlCQUFRLFdBQVIsRUFBcUIsS0FBckIsQ0FSYjtBQVNFLElBQUEsTUFBTSxFQUFFRSxrQkFUVjtBQVVFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FWZDtBQVdFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZSxFQUFmO0FBWFIsSUFEbUM7QUFBQSxDQXhCdkMsRUF3Q0dULEdBeENILENBd0NPLGtDQXhDUCxFQXdDMkM7QUFBQSxTQUN2Qyw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQkUsbUJBQWhCLENBRFY7QUFFRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWNDLGlCQUFkLENBRlI7QUFHRSxJQUFBLFdBQVcsRUFBRSx1QkFBTSxhQUFOLEVBQXFCQyx3QkFBckIsQ0FIZjtBQUlFLElBQUEsVUFBVSxFQUFFLHVCQUFNLFlBQU4sRUFBb0JDLHVCQUFwQixDQUpkO0FBS0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHRSxJQUFILFNBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FMUjtBQU1FLElBQUEsT0FBTyxFQUFFLHlCQUFRLFNBQVIsRUFBbUIsSUFBbkIsQ0FOWDtBQU9FLElBQUEsTUFBTSxFQUFFLHlCQUFRLFFBQVIsRUFBa0IsS0FBbEIsQ0FQVjtBQVFFLElBQUEsU0FBUyxFQUFFLHlCQUFRLFdBQVIsRUFBcUIsS0FBckIsQ0FSYjtBQVNFLElBQUEsTUFBTSxFQUFFRSxrQkFUVjtBQVVFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FWZDtBQVdFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZSxFQUFmLENBWFI7QUFZRSxJQUFBLFNBQVMsRUFBRSxzQkFBSyxXQUFMLEVBQWtCLFdBQWxCO0FBWmIsSUFEdUM7QUFBQSxDQXhDM0MsRUF5REdULEdBekRILENBeURPLHVDQXpEUCxFQXlEZ0Q7QUFBQSxTQUM1Qyw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQkUsbUJBQWhCLENBRFY7QUFFRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWNDLGlCQUFkLENBRlI7QUFHRSxJQUFBLFdBQVcsRUFBRSx1QkFBTSxhQUFOLEVBQXFCQyx3QkFBckIsQ0FIZjtBQUlFLElBQUEsVUFBVSxFQUFFLHVCQUFNLFlBQU4sRUFBb0JDLHVCQUFwQixDQUpkO0FBS0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHRSxJQUFILFNBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFNBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FMUjtBQU1FLElBQUEsT0FBTyxFQUFFLHlCQUFRLFNBQVIsRUFBbUIsSUFBbkIsQ0FOWDtBQU9FLElBQUEsTUFBTSxFQUFFLHlCQUFRLFFBQVIsRUFBa0IsS0FBbEIsQ0FQVjtBQVFFLElBQUEsU0FBUyxFQUFFLHlCQUFRLFdBQVIsRUFBcUIsS0FBckIsQ0FSYjtBQVNFLElBQUEsTUFBTSxFQUFFRSxrQkFUVjtBQVVFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FWZDtBQVdFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZSxFQUFmLENBWFI7QUFZRSxJQUFBLFNBQVMsRUFBRSw2QkFBQywyQkFBRDtBQVpiLElBRDRDO0FBQUEsQ0F6RGhEO0FBMEVBOztBQUNBLHVCQUFVLDJCQUFWLEVBQXVDYixNQUF2QztBQUNFO0FBREYsQ0FFR0MsWUFGSCxDQUVnQixVQUFBQyxLQUFLO0FBQUEsU0FDakIsNkJBQUMsc0JBQUQ7QUFBYyxJQUFBLE1BQU0sRUFBRSx5QkFBUSxzQkFBUixFQUFnQyxLQUFoQztBQUF0QixLQUErREEsS0FBSyxFQUFwRSxDQURpQjtBQUFBLENBRnJCLEVBS0dELFlBTEgsQ0FLZ0JFLHNCQUxoQjtBQU9FO0FBUEYsQ0FRR0MsR0FSSCxDQVFPLDJCQVJQLEVBUW9DO0FBQUEsU0FDaEMsNkJBQUMsY0FBRDtBQUNFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZSw2QkFBQyxnQkFBRDtBQUFNLE1BQUEsTUFBTSxFQUFFLHVCQUFNLFFBQU4sRUFBZ0IsQ0FBQyxNQUFELEVBQVMsU0FBVCxFQUFvQixJQUFwQixDQUFoQjtBQUFkLE1BQWYsQ0FEUjtBQUVFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FGZDtBQUdFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZUMsaUJBQWY7QUFIUixJQURnQztBQUFBLENBUnBDLEVBZ0JHRCxHQWhCSCxDQWdCTyxvQ0FoQlAsRUFnQjZDO0FBQUEsU0FDekMsNkJBQUMsY0FBRDtBQUNFLElBQUEsTUFBTSxFQUFFLHVCQUFNLFFBQU4sRUFBZ0IsQ0FBQyxNQUFELEVBQVMsU0FBVCxFQUFvQixJQUFwQixDQUFoQixDQURWO0FBRUUsSUFBQSxVQUFVLEVBQUUsMEJBQU8sYUFBUCxDQUZkO0FBR0UsSUFBQSxJQUFJLEVBQUUsd0JBQU8sTUFBUCxFQUFlQyxpQkFBZixDQUhSO0FBSUUsSUFBQSxJQUFJLEVBQUV5QjtBQUpSLElBRHlDO0FBQUEsQ0FoQjdDLEVBeUJHMUIsR0F6QkgsQ0F5Qk8sdUNBekJQLEVBeUJnRDtBQUFBLFNBQzVDLDZCQUFDLGNBQUQ7QUFDRSxJQUFBLE1BQU0sRUFBRSx1QkFBTSxRQUFOLEVBQWdCLENBQUMsTUFBRCxFQUFTLFNBQVQsRUFBb0IsSUFBcEIsQ0FBaEIsQ0FEVjtBQUVFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FGZDtBQUdFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZUMsaUJBQWYsQ0FIUjtBQUlFLElBQUEsSUFBSSxFQUFFO0FBQUEsVUFBRzBCLE1BQUgsVUFBR0EsTUFBSDtBQUFBLGFBQ0o7QUFDRSxRQUFBLEtBQUssRUFBRTtBQUNMVCxVQUFBQSxPQUFPLEVBQUUsTUFESjtBQUVMVSxVQUFBQSxjQUFjLEVBQUUsZUFGWDtBQUdMQyxVQUFBQSxlQUFlLEVBQUUsU0FIWjtBQUlMQyxVQUFBQSxNQUFNLEVBQUU7QUFKSDtBQURULFNBUUdILE1BQU0sQ0FBQ0ksR0FBUCxDQUFXLFVBQUFmLEtBQUs7QUFBQSxlQUNmO0FBQUssVUFBQSxHQUFHLEVBQUVBO0FBQVYsV0FBa0JBLEtBQWxCLENBRGU7QUFBQSxPQUFoQixDQVJILENBREk7QUFBQTtBQUpSLElBRDRDO0FBQUEsQ0F6QmhEO0FBK0NBOztBQUNBLHVCQUFVLCtCQUFWLEVBQTJDcEIsTUFBM0M7QUFDRTtBQURGLENBRUdDLFlBRkgsQ0FFZ0IsVUFBQUMsS0FBSztBQUFBLFNBQ2pCLDZCQUFDLHNCQUFEO0FBQWMsSUFBQSxNQUFNLEVBQUUseUJBQVEsc0JBQVIsRUFBZ0MsS0FBaEM7QUFBdEIsS0FBK0RBLEtBQUssRUFBcEUsQ0FEaUI7QUFBQSxDQUZyQixFQUtHRCxZQUxILENBS2dCRSxzQkFMaEI7QUFPRTtBQVBGLENBUUdDLEdBUkgsQ0FRTyx3Q0FSUCxFQVFpRDtBQUFBLFNBQzdDLDZCQUFDLGNBQUQ7QUFDRSxJQUFBLFFBQVEsRUFBRWdDLG9CQURaO0FBRUUsSUFBQSxNQUFNLEVBQUUsd0JBQU8sUUFBUCxFQUFpQjlCLG1CQUFqQixDQUZWO0FBR0UsSUFBQSxJQUFJLEVBQUUsdUJBQU0sTUFBTixFQUFjQyxpQkFBZCxDQUhSO0FBSUUsSUFBQSxVQUFVLEVBQUUsMEJBQU8sYUFBUCxDQUpkO0FBS0UsSUFBQSxJQUFJLEVBQUUsd0JBQU8sTUFBUCxFQUFlRixpQkFBZjtBQUxSLElBRDZDO0FBQUEsQ0FSakQsRUFrQkdELEdBbEJILENBa0JPLDJDQWxCUCxFQWtCb0Q7QUFBQSxTQUNoRCw2QkFBQyxjQUFEO0FBQ0UsSUFBQSxNQUFNLEVBQUUsdUJBQU0sUUFBTixFQUFnQixDQUFDLE1BQUQsRUFBUyxTQUFULEVBQW9CLElBQXBCLENBQWhCLENBRFY7QUFFRSxJQUFBLFVBQVUsRUFBRSwwQkFBTyxhQUFQLENBRmQ7QUFHRSxJQUFBLElBQUksRUFBRSx3QkFBTyxNQUFQLEVBQWVDLGlCQUFmLENBSFI7QUFJRSxJQUFBLFFBQVEsRUFBRTtBQUFBLFVBQUdlLEtBQUgsVUFBR0EsS0FBSDtBQUFBLFVBQVVpQixFQUFWLFVBQVVBLEVBQVY7QUFBQSxhQUFtQiw2QkFBQyxvQkFBRDtBQUFVLFFBQUEsR0FBRyxFQUFFQTtBQUFmLFNBQW9CakIsS0FBcEIsQ0FBbkI7QUFBQTtBQUpaLElBRGdEO0FBQUEsQ0FsQnBELEVBMkJHaEIsR0EzQkgsQ0EyQk8sNERBM0JQLEVBMkJxRTtBQUFBLFNBQ2pFLDZCQUFDLGNBQUQ7QUFDRSxJQUFBLE1BQU0sRUFBRSx1QkFBTSxRQUFOLEVBQWdCLENBQUMsTUFBRCxFQUFTLFNBQVQsRUFBb0IsSUFBcEIsQ0FBaEIsQ0FEVjtBQUVFLElBQUEsVUFBVSxFQUFFLDBCQUFPLGFBQVAsQ0FGZDtBQUdFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZUMsaUJBQWYsQ0FIUjtBQUlFLElBQUEsSUFBSSxFQUFFeUIsZ0JBSlI7QUFLRSxJQUFBLFFBQVEsRUFBRTtBQUFBLFVBQUdWLEtBQUgsVUFBR0EsS0FBSDtBQUFBLFVBQVVpQixFQUFWLFVBQVVBLEVBQVY7QUFBQSxhQUFtQiw2QkFBQyxvQkFBRDtBQUFVLFFBQUEsR0FBRyxFQUFFQTtBQUFmLFNBQW9CakIsS0FBcEIsQ0FBbkI7QUFBQTtBQUxaLElBRGlFO0FBQUEsQ0EzQnJFLEVBcUNHaEIsR0FyQ0gsQ0FxQ08sYUFyQ1AsRUFxQ3NCO0FBQUEsU0FDbEIsNkJBQUMsY0FBRDtBQUNFLElBQUEsTUFBTSxFQUFFa0MsYUFEVjtBQUVFLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZTtBQUFFakIsTUFBQUEsVUFBVSxFQUFFLE1BQWQ7QUFBc0JPLE1BQUFBLEtBQUssRUFBRTtBQUE3QixLQUFmLENBRlI7QUFHRSxJQUFBLE1BQU0sRUFBRSx1QkFBTSxRQUFOLEVBQWdCLENBQ3RCO0FBQUVSLE1BQUFBLEtBQUssRUFBRSxNQUFUO0FBQWlCQyxNQUFBQSxVQUFVLEVBQUU7QUFBN0IsS0FEc0IsRUFFdEI7QUFBRUQsTUFBQUEsS0FBSyxFQUFFO0FBQVQsS0FGc0IsRUFHdEI7QUFBRUEsTUFBQUEsS0FBSyxFQUFFLEtBQVQ7QUFBZ0JDLE1BQUFBLFVBQVUsRUFBRTtBQUE1QixLQUhzQixFQUl0QixLQUpzQixFQUt0QjtBQUFFRCxNQUFBQSxLQUFLLEVBQUUsS0FBVDtBQUFnQkMsTUFBQUEsVUFBVSxFQUFFO0FBQTVCLEtBTHNCLEVBTXRCLFNBTnNCLENBQWhCLENBSFY7QUFXRSxJQUFBLElBQUksRUFBRSx1QkFBTSxNQUFOLEVBQWMsQ0FDbEI7QUFBRUMsTUFBQUEsT0FBTyxFQUFFLE1BQVg7QUFBbUJDLE1BQUFBLFNBQVMsRUFBRSxtQkFBQVosSUFBSTtBQUFBLGVBQUlBLElBQUksQ0FBQ2EsV0FBTCxFQUFKO0FBQUE7QUFBbEMsS0FEa0IsRUFFbEIsU0FGa0IsRUFHbEIsVUFIa0IsRUFJbEIsYUFKa0IsRUFLbEIsVUFMa0IsRUFNbEIsVUFBQUMsQ0FBQztBQUFBLGFBQ0M7QUFDRSxRQUFBLElBQUksRUFBQyxRQURQO0FBRUUsUUFBQSxPQUFPLEVBQUUsaUJBQUNjLENBQUQsRUFBTztBQUNkQSxVQUFBQSxDQUFDLENBQUNDLGVBQUY7QUFDRDtBQUpILFNBTUdmLENBQUMsQ0FBQ2dCLElBQUYsQ0FBT0MsR0FOVixDQUREO0FBQUEsS0FOaUIsQ0FBZCxDQVhSO0FBNEJFLElBQUEsV0FBVyxFQUFFLHVCQUFNLGFBQU4sRUFBcUJsQyx3QkFBckIsQ0E1QmY7QUE2QkUsSUFBQSxVQUFVLEVBQUUsdUJBQU0sWUFBTixFQUFvQkMsdUJBQXBCLENBN0JkO0FBOEJFLElBQUEsSUFBSSxFQUFFO0FBQUEsVUFBR0UsSUFBSCxVQUFHQSxJQUFIO0FBQUEsVUFBU0MsS0FBVCxVQUFTQSxLQUFUO0FBQUEsYUFBcUIsNkJBQUMsZ0JBQUQ7QUFBTSxRQUFBLEtBQUssRUFBRUEsS0FBYjtBQUFvQixRQUFBLElBQUksRUFBRSx3QkFBTyxXQUFQLEVBQW9CRCxJQUFwQjtBQUExQixRQUFyQjtBQUFBLEtBOUJSO0FBK0JFLElBQUEsT0FBTyxFQUFFLHlCQUFRLFNBQVIsRUFBbUIsSUFBbkIsQ0EvQlg7QUFnQ0UsSUFBQSxVQUFVLEVBQUUsMEJBQU8sYUFBUCxDQWhDZDtBQWlDRSxJQUFBLElBQUksRUFBRSx3QkFBTyxNQUFQLEVBQWVOLGlCQUFmO0FBakNSLElBRGtCO0FBQUEsQ0FyQ3RCO0FBMkVBOztBQUNBLHVCQUFVLGdDQUFWLEVBQTRDTCxNQUE1QztBQUNFO0FBREYsQ0FFR0MsWUFGSCxDQUVnQixVQUFBQyxLQUFLO0FBQUEsU0FDakIsNkJBQUMsc0JBQUQ7QUFBYyxJQUFBLE1BQU0sRUFBRSx5QkFBUSxzQkFBUixFQUFnQyxLQUFoQztBQUF0QixLQUErREEsS0FBSyxFQUFwRSxDQURpQjtBQUFBLENBRnJCLEVBS0dELFlBTEgsQ0FLZ0JFLHNCQUxoQjtBQU9FO0FBUEYsQ0FRR0MsR0FSSCxDQVFPLHFDQVJQLEVBUThDO0FBQUEsU0FDMUMsNkJBQUMsY0FBRDtBQUNFLElBQUEsTUFBTSxFQUFFLHVCQUFNLFFBQU4sRUFBZ0JFLG1CQUFoQixDQURWO0FBRUUsSUFBQSxJQUFJLEVBQUUsdUJBQU0sTUFBTixFQUFjQyxpQkFBZCxDQUZSO0FBR0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHSSxJQUFILFVBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFVBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FIUjtBQUlFLElBQUEsV0FBVyxFQUFFSCx3QkFKZjtBQUtFLElBQUEsVUFBVSxFQUFFQyx1QkFMZDtBQU1FLElBQUEsT0FBTyxFQUFFLHlCQUFRLFNBQVIsRUFBbUIsSUFBbkIsQ0FOWDtBQU9FLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZW9CLDhCQUFmLENBUFI7QUFRRSxJQUFBLEdBQUcsRUFBRSxhQUFDYyxRQUFELEVBQWM7QUFDakIsVUFBSSxDQUFDQSxRQUFRLENBQUNoQyxJQUFULENBQWNpQyxJQUFmLElBQXVCLENBQUNELFFBQVEsQ0FBQ2hDLElBQVQsQ0FBY2tDLE9BQXRDLElBQWlELENBQUNGLFFBQVEsQ0FBQ2hDLElBQVQsQ0FBYzhCLElBQWQsQ0FBbUJLLEdBQXpFLEVBQThFO0FBQzVFLGVBQ0UsNkJBQUMsWUFBRDtBQUFLLFVBQUEsRUFBRSxFQUFFSCxRQUFRLENBQUNOO0FBQWxCLFdBQTBCTSxRQUExQjtBQUFvQyxVQUFBLE9BQU8sRUFBRSwwQkFBTyxhQUFQLENBQTdDO0FBQW9FLFVBQUEsV0FBVyxFQUFFO0FBQWpGLFlBQ0UsNkJBQUMsMkJBQUQsZ0JBREYsQ0FERjtBQUtEOztBQUNELGFBQU8sNkJBQUMsWUFBRCxlQUFTQSxRQUFUO0FBQW1CLFFBQUEsT0FBTyxFQUFFLDBCQUFPLGFBQVA7QUFBNUIsU0FBUDtBQUNEO0FBakJILElBRDBDO0FBQUEsQ0FSOUMsRUE4Qkd2QyxHQTlCSCxDQThCTyxnQ0E5QlAsRUE4QnlDO0FBQUEsU0FDckMsNkJBQUMsY0FBRDtBQUNFLElBQUEsTUFBTSxFQUFFLHVCQUFNLFFBQU4sRUFBZ0JFLG1CQUFoQixDQURWO0FBRUUsSUFBQSxJQUFJLEVBQUUsdUJBQU0sTUFBTixFQUFjQyxpQkFBZCxDQUZSO0FBR0UsSUFBQSxJQUFJLEVBQUU7QUFBQSxVQUFHSSxJQUFILFVBQUdBLElBQUg7QUFBQSxVQUFTQyxLQUFULFVBQVNBLEtBQVQ7QUFBQSxhQUFxQiw2QkFBQyxnQkFBRDtBQUFNLFFBQUEsS0FBSyxFQUFFQSxLQUFiO0FBQW9CLFFBQUEsSUFBSSxFQUFFLHdCQUFPLFdBQVAsRUFBb0JELElBQXBCO0FBQTFCLFFBQXJCO0FBQUEsS0FIUjtBQUlFLElBQUEsV0FBVyxFQUFFSCx3QkFKZjtBQUtFLElBQUEsVUFBVSxFQUFFQyx1QkFMZDtBQU1FLElBQUEsT0FBTyxFQUFFLHlCQUFRLFNBQVIsRUFBbUIsSUFBbkIsQ0FOWDtBQU9FLElBQUEsSUFBSSxFQUFFLHdCQUFPLE1BQVAsRUFBZW9CLDhCQUFmLENBUFI7QUFRRSxJQUFBLEdBQUcsRUFBRSxhQUFDYyxRQUFELEVBQWM7QUFDakIsVUFBSSxDQUFDQSxRQUFRLENBQUNoQyxJQUFULENBQWNpQyxJQUFmLElBQXVCLENBQUNELFFBQVEsQ0FBQ2hDLElBQVQsQ0FBY2tDLE9BQXRDLElBQWlELENBQUNGLFFBQVEsQ0FBQ2hDLElBQVQsQ0FBYzhCLElBQWQsQ0FBbUJLLEdBQXpFLEVBQThFO0FBQzVFLGVBQ0UsNkJBQUMsWUFBRCxlQUNNSCxRQUROO0FBRUUsVUFBQSxFQUFFLEVBQUVBLFFBQVEsQ0FBQ04sRUFGZjtBQUdFLFVBQUEsV0FBVyxFQUFFLElBSGY7QUFJRSxVQUFBLEtBQUssRUFBRSxDQUFDLDZCQUFDLDJCQUFELGdCQUFELEVBQTJDLGdCQUEzQyxDQUpUO0FBS0UsVUFBQSxTQUFTLEVBQUUsdUJBQU0sV0FBTixFQUFtQixDQUFDLENBQUQsRUFBSSxDQUFKLENBQW5CLENBTGI7QUFNRSxVQUFBLE9BQU8sRUFBRSwwQkFBTyxhQUFQO0FBTlgsV0FERjtBQVVEOztBQUNELGFBQU8sNkJBQUMsWUFBRCxlQUFTTSxRQUFUO0FBQW1CLFFBQUEsT0FBTyxFQUFFLDBCQUFPLGFBQVA7QUFBNUIsU0FBUDtBQUNEO0FBdEJILElBRHFDO0FBQUEsQ0E5QnpDLEUsQ0F5REE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFJlYWN0IGZyb20gJ3JlYWN0Jztcbi8qKiBTdG9yeWJvb2sgSW1wb3J0ICovXG5pbXBvcnQgeyBzdG9yaWVzT2YgfSBmcm9tICdAc3Rvcnlib29rL3JlYWN0JztcbmltcG9ydCBjZW50ZXJlZCBmcm9tICdAc3Rvcnlib29rL2FkZG9uLWNlbnRlcmVkJztcbmltcG9ydCB7XG4gIHRleHQsIG51bWJlciwgYm9vbGVhbiwgYXJyYXksIG9iamVjdCwgY29sb3IsXG59IGZyb20gJ0BzdG9yeWJvb2svYWRkb24ta25vYnMnO1xuaW1wb3J0IHsgYWN0aW9uIH0gZnJvbSAnQHN0b3J5Ym9vay9hZGRvbi1hY3Rpb25zJztcblxuLyoqIENvbXBvbmVudHMgSW1wb3J0ICovXG5pbXBvcnQge1xuICBtb2NrZWRCcmVha3BvaW50cyxcbiAgbW9ja2VkQ29sV2lkdGhzLFxuICBtb2NrZWRLZXlzLFxuICBtb2NrZWRMaXN0LFxuICBtb2NrZWRQcmlvcml0aWVzLFxuICBtb2NrZWRUaXRsZXMsXG4gIG1vY2tlZExpc3RXaXRoRW1wdHlEYXRhLFxufSBmcm9tICdjb25maWcvc3Rvcnlib29rL21vY2tzJztcbmltcG9ydCB7IFN0b3J5V3JhcHBlciB9IGZyb20gJ2NvbmZpZy9zdG9yeWJvb2svd3JhcHBlcnMnO1xuaW1wb3J0IHtcbiAgQ2FyZCwgTG9hZGVyLCBIZWFkLCBIZWFkQ2VsbCwgRW1wdHlSb3dDb250ZW50LFxufSBmcm9tICdjb25maWcvc3Rvcnlib29rL2NvbXBvbmVudHMnO1xuaW1wb3J0IHsgb25Tb3J0IH0gZnJvbSAnY29uZmlnL3N0b3J5Ym9vay91dGlscyc7XG5pbXBvcnQgUm93IGZyb20gJ2NvbXBvbmVudHMvUm93Jztcbi8vIGltcG9ydCBDZWxsIGZyb20gJ2NvbXBvbmVudHMvQ2VsbCc7XG4vLyBpbXBvcnQgQ2FyZCBmcm9tICdjb21wb25lbnRzL0NhcmQnO1xuaW1wb3J0IFRhYmxlIGZyb20gJy4vaW5kZXgnO1xuXG4vKiogU3RvcmllcyBvZiBEZWZhdWx0IFRhYmxlICovXG5zdG9yaWVzT2YoJy0gVGFibGUgLXwxIC0gRGVmYXVsdCcsIG1vZHVsZSlcbiAgLyoqIERlY29yYXRvcnMgKi9cbiAgLmFkZERlY29yYXRvcihzdG9yeSA9PiAoXG4gICAgPFN0b3J5V3JhcHBlciBib3JkZXI9e2Jvb2xlYW4oJy0tIHdyYXBwZXIgYm9yZGVyIC0tJywgZmFsc2UpfT57c3RvcnkoKX08L1N0b3J5V3JhcHBlcj5cbiAgKSlcbiAgLmFkZERlY29yYXRvcihjZW50ZXJlZClcblxuICAvKiogU3RvcmllcyAqL1xuICAuYWRkKCcxIC0gRGVmYXVsdCBUYWJsZScsICgpID0+IChc