tg-core-components 6.3.1 → 6.3.2
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/es/lib/WithValidation/rules/phone.js +2 -2
- package/es/widgets/AccountDetail/index.js +8 -25
- package/es/widgets/BonusWidget/index.js +4 -4
- package/es/widgets/BonusWidget/types.js +1 -2
- package/es/widgets/Cashier/Deposit/PaymentForm/index.js +2 -1
- package/es/widgets/ResponsibleGaming/Amount.js +1 -1
- package/es/widgets/SignUp/ContactInfoStep.js +1 -1
- package/lib/lib/WithValidation/rules/phone.js +2 -2
- package/lib/widgets/AccountDetail/index.js +8 -37
- package/lib/widgets/BonusWidget/index.js +4 -4
- package/lib/widgets/BonusWidget/types.js +1 -2
- package/lib/widgets/Cashier/Deposit/PaymentForm/index.js +2 -1
- package/lib/widgets/ResponsibleGaming/Amount.js +1 -1
- package/package.json +2 -2
- package/es/lib/WithValidation/rules/blacklistedCharacters.js +0 -3
- package/es/lib/WithValidation/rules/noSpecialCharacters.js +0 -3
- package/lib/lib/WithValidation/rules/blacklistedCharacters.js +0 -9
- package/lib/lib/WithValidation/rules/noSpecialCharacters.js +0 -9
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export default (function (
|
|
2
|
-
return
|
|
1
|
+
export default (function (phone) {
|
|
2
|
+
return phone ? /^[\+]?[0-9]{0,4}[0-9]{8,12}$/.test(phone) : true;
|
|
3
3
|
});
|
|
@@ -3,10 +3,6 @@ import compose from 'recompose/compose';
|
|
|
3
3
|
import PropTypes from 'prop-types';
|
|
4
4
|
import { injectIntl } from 'react-intl';
|
|
5
5
|
import require from '../../lib/WithValidation/rules/required';
|
|
6
|
-
import phone from '../../lib/WithValidation/rules/phone';
|
|
7
|
-
import blacklistedCharacters from '../../lib/WithValidation/rules/blacklistedCharacters';
|
|
8
|
-
import noSpecialCharacters from '../../lib/WithValidation/rules/noSpecialCharacters';
|
|
9
|
-
import stringWithoutNumbers from '../../lib/WithValidation/rules/stringWithoutNumbers';
|
|
10
6
|
import WithValidation from '../../lib/WithValidation';
|
|
11
7
|
import Input from '../../components/Input';
|
|
12
8
|
import Select from '../../components/Select';
|
|
@@ -48,9 +44,7 @@ var AccountDetail = function AccountDetail(_ref) {
|
|
|
48
44
|
onSubmit = _ref.onSubmit,
|
|
49
45
|
jurisdiction = _ref.jurisdiction,
|
|
50
46
|
countries = _ref.countries,
|
|
51
|
-
isLoading = _ref.isLoading
|
|
52
|
-
isComplete = _ref.isComplete,
|
|
53
|
-
showCallingCode = _ref.showCallingCode;
|
|
47
|
+
isLoading = _ref.isLoading;
|
|
54
48
|
|
|
55
49
|
return React.createElement(
|
|
56
50
|
'form',
|
|
@@ -125,7 +119,7 @@ var AccountDetail = function AccountDetail(_ref) {
|
|
|
125
119
|
React.createElement(
|
|
126
120
|
Select,
|
|
127
121
|
{
|
|
128
|
-
disabled:
|
|
122
|
+
disabled: Boolean(data.Country),
|
|
129
123
|
className: 'layout-item-6',
|
|
130
124
|
value: data.Country,
|
|
131
125
|
label: translate({
|
|
@@ -162,14 +156,6 @@ var AccountDetail = function AccountDetail(_ref) {
|
|
|
162
156
|
id: 'title.mobile_number',
|
|
163
157
|
defaultMessage: 'Mobile number'
|
|
164
158
|
}, intl),
|
|
165
|
-
callingCodes: showCallingCode && countries ? countries.sort(function (a, b) {
|
|
166
|
-
return Number(a.callingCode) - Number(b.callingCode);
|
|
167
|
-
}).map(function (i) {
|
|
168
|
-
return {
|
|
169
|
-
value: '00' + i.callingCode,
|
|
170
|
-
label: '+' + i.callingCode + ' ' + (countryEmojiFlags[i.value] || '')
|
|
171
|
-
};
|
|
172
|
-
}) : [],
|
|
173
159
|
name: 'MobilePhoneNumber',
|
|
174
160
|
autoComplete: 'off',
|
|
175
161
|
status: errors.MobilePhoneNumber && 'failure' || 'idle',
|
|
@@ -262,9 +248,7 @@ AccountDetail.propTypes = {
|
|
|
262
248
|
/** Array of validation errors where the error display depends on which invalid rule it breaks */
|
|
263
249
|
error: PropTypes.array,
|
|
264
250
|
/** The submission function firing when submitting the form */
|
|
265
|
-
onSubmit: PropTypes.func
|
|
266
|
-
/** If the user profile is complete or not */
|
|
267
|
-
isComplete: PropTypes.bool
|
|
251
|
+
onSubmit: PropTypes.func
|
|
268
252
|
};
|
|
269
253
|
|
|
270
254
|
AccountDetail.defaultProps = {
|
|
@@ -274,15 +258,14 @@ AccountDetail.defaultProps = {
|
|
|
274
258
|
value: '',
|
|
275
259
|
name: '',
|
|
276
260
|
error: [],
|
|
277
|
-
onSubmit: Function
|
|
278
|
-
isComplete: false
|
|
261
|
+
onSubmit: Function
|
|
279
262
|
};
|
|
280
263
|
|
|
281
264
|
var rules = {
|
|
282
|
-
MobilePhoneNumber: [[require, 'error.empty.mobilePhoneNumber']
|
|
283
|
-
Address1: [[require, 'error.empty.address']
|
|
284
|
-
Zip: [[require, 'error.empty.zip_code']
|
|
285
|
-
City: [[require, 'error.empty.city']
|
|
265
|
+
MobilePhoneNumber: [[require, 'error.empty.mobilePhoneNumber']],
|
|
266
|
+
Address1: [[require, 'error.empty.address']],
|
|
267
|
+
Zip: [[require, 'error.empty.zip_code']],
|
|
268
|
+
City: [[require, 'error.empty.city']],
|
|
286
269
|
Password: [[require, 'error.empty.password']],
|
|
287
270
|
Country: [[require, 'error.empty.country']],
|
|
288
271
|
Gender: [[require, 'error.empty.gender']]
|
|
@@ -46,7 +46,7 @@ var BonusAction = function BonusAction(_ref) {
|
|
|
46
46
|
return React.createElement(
|
|
47
47
|
'div',
|
|
48
48
|
{ className: 'actions' },
|
|
49
|
-
ALEACC_BONUS_CLAIM_STATE.includes(bonus.State)
|
|
49
|
+
ALEACC_BONUS_CLAIM_STATE.includes(bonus.State) && React.createElement(
|
|
50
50
|
Button,
|
|
51
51
|
{
|
|
52
52
|
className: 'button primary small',
|
|
@@ -149,7 +149,7 @@ var BonusWidget = function BonusWidget(_ref3) {
|
|
|
149
149
|
|
|
150
150
|
Object.keys(bonusList).forEach(function (bonusState) {
|
|
151
151
|
var listData = bonuses.filter(function (bonus) {
|
|
152
|
-
return bonusMapping[bonus.State] === bonusState
|
|
152
|
+
return bonusMapping[bonus.State] === bonusState;
|
|
153
153
|
});
|
|
154
154
|
|
|
155
155
|
bonusList[bonusState] = listData.map(function (item) {
|
|
@@ -168,7 +168,7 @@ var BonusWidget = function BonusWidget(_ref3) {
|
|
|
168
168
|
'div',
|
|
169
169
|
null,
|
|
170
170
|
getBonusState(item.State)
|
|
171
|
-
)], [
|
|
171
|
+
)], [React.createElement(
|
|
172
172
|
'div',
|
|
173
173
|
{ className: 'amount' },
|
|
174
174
|
item.Type.toLowerCase() == 'freespins' ? React.createElement(FormattedNumber, { value: item.Amount, style: 'decimal' }) : React.createElement(Money, { value: item.Amount, currency: item.Currency })
|
|
@@ -177,7 +177,7 @@ var BonusWidget = function BonusWidget(_ref3) {
|
|
|
177
177
|
// Add bonus actions to not expired Fasttrack bonuses
|
|
178
178
|
if (item.Provider === 'fasttrack' && item.State !== 'Expired') info.push(React.createElement(BonusActionFT, { bonus: item, onClaimBonus: onClaimBonus }));
|
|
179
179
|
// Add bonus actions to post claim bonuses from Aleacc
|
|
180
|
-
else if (item.Provider !== 'fasttrack' && ALEACC_BONUS_ACTION_STATE.includes(item.State)
|
|
180
|
+
else if (item.Provider !== 'fasttrack' && ALEACC_BONUS_ACTION_STATE.includes(item.State)) info.push(React.createElement(BonusAction, {
|
|
181
181
|
bonus: item,
|
|
182
182
|
onClaimBonus: onClaimBonus,
|
|
183
183
|
onRejectBonus: onRejectBonus
|
|
@@ -12,8 +12,7 @@ export var getBonusType = function getBonusType(type) {
|
|
|
12
12
|
FreeBetsMonetary: React.createElement(Translate, {
|
|
13
13
|
id: 'label.type.bonus.freeBetsMonetary',
|
|
14
14
|
defaultMessage: 'Free Bets Monetary'
|
|
15
|
-
})
|
|
16
|
-
Deposit: React.createElement(Translate, { id: 'label.type.bonus.deposit', defaultMessage: 'Deposit' })
|
|
15
|
+
})
|
|
17
16
|
};
|
|
18
17
|
|
|
19
18
|
return translations[type] || React.createElement(
|
|
@@ -94,6 +94,7 @@ var PaymentForm = function (_Component) {
|
|
|
94
94
|
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref3 = PaymentForm.__proto__ || Object.getPrototypeOf(PaymentForm)).call.apply(_ref3, [this].concat(args))), _this), _this.onMessage = function (message) {
|
|
95
95
|
var operatingSystem = _this.props.operatingSystem;
|
|
96
96
|
|
|
97
|
+
console.log({ message: message });
|
|
97
98
|
var data = JSON.parse(message.data);
|
|
98
99
|
|
|
99
100
|
if (data.method === 'OPEN_APP') {
|
|
@@ -166,7 +167,7 @@ var PaymentForm = function (_Component) {
|
|
|
166
167
|
} else if (data.redirectOutput.container == 'iframe' && data.redirectOutput.method == 'GET' && data.redirectOutput.html != null) {
|
|
167
168
|
return React.createElement(InjectedIframeHTML, { data: data, iframeProps: iframeProps });
|
|
168
169
|
} else if (data.redirectOutput.container == 'iframe' && data.redirectOutput.method == 'GET' && redirect) {
|
|
169
|
-
window.location.
|
|
170
|
+
window.location.href = data.redirectOutput.url;
|
|
170
171
|
return null;
|
|
171
172
|
} else if (data.redirectOutput.container == 'iframe' && data.redirectOutput.method == 'GET') {
|
|
172
173
|
return React.createElement('iframe', _extends({
|
|
@@ -31,7 +31,7 @@ var Amount = function Amount(_ref) {
|
|
|
31
31
|
React.createElement('p', { dangerouslySetInnerHTML: { __html: content } }),
|
|
32
32
|
React.createElement(Select, {
|
|
33
33
|
className: 'layout-item',
|
|
34
|
-
title: translate({ id: 'label.choose_limit' }),
|
|
34
|
+
title: translate({ id: 'label.choose_limit' }, intl),
|
|
35
35
|
options: types,
|
|
36
36
|
name: 'Timespan',
|
|
37
37
|
error: errors.Timespan && translate({ id: errors.Timespan }, intl)
|
|
@@ -102,7 +102,7 @@ var ContactInfo = function (_Component) {
|
|
|
102
102
|
onBlur: function onBlur(value) {
|
|
103
103
|
return _onBlur('FirstName', value);
|
|
104
104
|
},
|
|
105
|
-
error: (errors.FirstName && translate({ id: errors.FirstName }
|
|
105
|
+
error: (errors.FirstName && translate({ id: errors.FirstName }, intl))
|
|
106
106
|
}),
|
|
107
107
|
React.createElement(Input, {
|
|
108
108
|
className: 'layout-item-6',
|
|
@@ -22,22 +22,6 @@ var _required = require('../../lib/WithValidation/rules/required');
|
|
|
22
22
|
|
|
23
23
|
var _required2 = _interopRequireDefault(_required);
|
|
24
24
|
|
|
25
|
-
var _phone = require('../../lib/WithValidation/rules/phone');
|
|
26
|
-
|
|
27
|
-
var _phone2 = _interopRequireDefault(_phone);
|
|
28
|
-
|
|
29
|
-
var _blacklistedCharacters = require('../../lib/WithValidation/rules/blacklistedCharacters');
|
|
30
|
-
|
|
31
|
-
var _blacklistedCharacters2 = _interopRequireDefault(_blacklistedCharacters);
|
|
32
|
-
|
|
33
|
-
var _noSpecialCharacters = require('../../lib/WithValidation/rules/noSpecialCharacters');
|
|
34
|
-
|
|
35
|
-
var _noSpecialCharacters2 = _interopRequireDefault(_noSpecialCharacters);
|
|
36
|
-
|
|
37
|
-
var _stringWithoutNumbers = require('../../lib/WithValidation/rules/stringWithoutNumbers');
|
|
38
|
-
|
|
39
|
-
var _stringWithoutNumbers2 = _interopRequireDefault(_stringWithoutNumbers);
|
|
40
|
-
|
|
41
25
|
var _WithValidation = require('../../lib/WithValidation');
|
|
42
26
|
|
|
43
27
|
var _WithValidation2 = _interopRequireDefault(_WithValidation);
|
|
@@ -101,9 +85,7 @@ var AccountDetail = function AccountDetail(_ref) {
|
|
|
101
85
|
onSubmit = _ref.onSubmit,
|
|
102
86
|
jurisdiction = _ref.jurisdiction,
|
|
103
87
|
countries = _ref.countries,
|
|
104
|
-
isLoading = _ref.isLoading
|
|
105
|
-
isComplete = _ref.isComplete,
|
|
106
|
-
showCallingCode = _ref.showCallingCode;
|
|
88
|
+
isLoading = _ref.isLoading;
|
|
107
89
|
|
|
108
90
|
return _react2.default.createElement(
|
|
109
91
|
'form',
|
|
@@ -178,7 +160,7 @@ var AccountDetail = function AccountDetail(_ref) {
|
|
|
178
160
|
_react2.default.createElement(
|
|
179
161
|
_Select2.default,
|
|
180
162
|
{
|
|
181
|
-
disabled:
|
|
163
|
+
disabled: Boolean(data.Country),
|
|
182
164
|
className: 'layout-item-6',
|
|
183
165
|
value: data.Country,
|
|
184
166
|
label: (0, _translate2.default)({
|
|
@@ -215,14 +197,6 @@ var AccountDetail = function AccountDetail(_ref) {
|
|
|
215
197
|
id: 'title.mobile_number',
|
|
216
198
|
defaultMessage: 'Mobile number'
|
|
217
199
|
}, intl),
|
|
218
|
-
callingCodes: showCallingCode && countries ? countries.sort(function (a, b) {
|
|
219
|
-
return Number(a.callingCode) - Number(b.callingCode);
|
|
220
|
-
}).map(function (i) {
|
|
221
|
-
return {
|
|
222
|
-
value: '00' + i.callingCode,
|
|
223
|
-
label: '+' + i.callingCode + ' ' + (_countryEmojiFlags2.default[i.value] || '')
|
|
224
|
-
};
|
|
225
|
-
}) : [],
|
|
226
200
|
name: 'MobilePhoneNumber',
|
|
227
201
|
autoComplete: 'off',
|
|
228
202
|
status: errors.MobilePhoneNumber && 'failure' || 'idle',
|
|
@@ -315,9 +289,7 @@ AccountDetail.propTypes = {
|
|
|
315
289
|
/** Array of validation errors where the error display depends on which invalid rule it breaks */
|
|
316
290
|
error: _propTypes2.default.array,
|
|
317
291
|
/** The submission function firing when submitting the form */
|
|
318
|
-
onSubmit: _propTypes2.default.func
|
|
319
|
-
/** If the user profile is complete or not */
|
|
320
|
-
isComplete: _propTypes2.default.bool
|
|
292
|
+
onSubmit: _propTypes2.default.func
|
|
321
293
|
};
|
|
322
294
|
|
|
323
295
|
AccountDetail.defaultProps = {
|
|
@@ -327,15 +299,14 @@ AccountDetail.defaultProps = {
|
|
|
327
299
|
value: '',
|
|
328
300
|
name: '',
|
|
329
301
|
error: [],
|
|
330
|
-
onSubmit: Function
|
|
331
|
-
isComplete: false
|
|
302
|
+
onSubmit: Function
|
|
332
303
|
};
|
|
333
304
|
|
|
334
305
|
var rules = {
|
|
335
|
-
MobilePhoneNumber: [[_required2.default, 'error.empty.mobilePhoneNumber']
|
|
336
|
-
Address1: [[_required2.default, 'error.empty.address']
|
|
337
|
-
Zip: [[_required2.default, 'error.empty.zip_code']
|
|
338
|
-
City: [[_required2.default, 'error.empty.city']
|
|
306
|
+
MobilePhoneNumber: [[_required2.default, 'error.empty.mobilePhoneNumber']],
|
|
307
|
+
Address1: [[_required2.default, 'error.empty.address']],
|
|
308
|
+
Zip: [[_required2.default, 'error.empty.zip_code']],
|
|
309
|
+
City: [[_required2.default, 'error.empty.city']],
|
|
339
310
|
Password: [[_required2.default, 'error.empty.password']],
|
|
340
311
|
Country: [[_required2.default, 'error.empty.country']],
|
|
341
312
|
Gender: [[_required2.default, 'error.empty.gender']]
|
|
@@ -78,7 +78,7 @@ var BonusAction = function BonusAction(_ref) {
|
|
|
78
78
|
return _react2.default.createElement(
|
|
79
79
|
'div',
|
|
80
80
|
{ className: 'actions' },
|
|
81
|
-
ALEACC_BONUS_CLAIM_STATE.includes(bonus.State)
|
|
81
|
+
ALEACC_BONUS_CLAIM_STATE.includes(bonus.State) && _react2.default.createElement(
|
|
82
82
|
_Button2.default,
|
|
83
83
|
{
|
|
84
84
|
className: 'button primary small',
|
|
@@ -181,7 +181,7 @@ var BonusWidget = function BonusWidget(_ref3) {
|
|
|
181
181
|
|
|
182
182
|
Object.keys(bonusList).forEach(function (bonusState) {
|
|
183
183
|
var listData = bonuses.filter(function (bonus) {
|
|
184
|
-
return bonusMapping[bonus.State] === bonusState
|
|
184
|
+
return bonusMapping[bonus.State] === bonusState;
|
|
185
185
|
});
|
|
186
186
|
|
|
187
187
|
bonusList[bonusState] = listData.map(function (item) {
|
|
@@ -200,7 +200,7 @@ var BonusWidget = function BonusWidget(_ref3) {
|
|
|
200
200
|
'div',
|
|
201
201
|
null,
|
|
202
202
|
(0, _states.getBonusState)(item.State)
|
|
203
|
-
)], [
|
|
203
|
+
)], [_react2.default.createElement(
|
|
204
204
|
'div',
|
|
205
205
|
{ className: 'amount' },
|
|
206
206
|
item.Type.toLowerCase() == 'freespins' ? _react2.default.createElement(_reactIntl.FormattedNumber, { value: item.Amount, style: 'decimal' }) : _react2.default.createElement(_Money2.default, { value: item.Amount, currency: item.Currency })
|
|
@@ -209,7 +209,7 @@ var BonusWidget = function BonusWidget(_ref3) {
|
|
|
209
209
|
// Add bonus actions to not expired Fasttrack bonuses
|
|
210
210
|
if (item.Provider === 'fasttrack' && item.State !== 'Expired') info.push(_react2.default.createElement(BonusActionFT, { bonus: item, onClaimBonus: onClaimBonus }));
|
|
211
211
|
// Add bonus actions to post claim bonuses from Aleacc
|
|
212
|
-
else if (item.Provider !== 'fasttrack' && ALEACC_BONUS_ACTION_STATE.includes(item.State)
|
|
212
|
+
else if (item.Provider !== 'fasttrack' && ALEACC_BONUS_ACTION_STATE.includes(item.State)) info.push(_react2.default.createElement(BonusAction, {
|
|
213
213
|
bonus: item,
|
|
214
214
|
onClaimBonus: onClaimBonus,
|
|
215
215
|
onRejectBonus: onRejectBonus
|
|
@@ -26,8 +26,7 @@ var getBonusType = exports.getBonusType = function getBonusType(type) {
|
|
|
26
26
|
FreeBetsMonetary: _react2.default.createElement(_Translate2.default, {
|
|
27
27
|
id: 'label.type.bonus.freeBetsMonetary',
|
|
28
28
|
defaultMessage: 'Free Bets Monetary'
|
|
29
|
-
})
|
|
30
|
-
Deposit: _react2.default.createElement(_Translate2.default, { id: 'label.type.bonus.deposit', defaultMessage: 'Deposit' })
|
|
29
|
+
})
|
|
31
30
|
};
|
|
32
31
|
|
|
33
32
|
return translations[type] || _react2.default.createElement(
|
|
@@ -126,6 +126,7 @@ var PaymentForm = function (_Component) {
|
|
|
126
126
|
return _ret = (_temp = (_this = _possibleConstructorReturn(this, (_ref3 = PaymentForm.__proto__ || Object.getPrototypeOf(PaymentForm)).call.apply(_ref3, [this].concat(args))), _this), _this.onMessage = function (message) {
|
|
127
127
|
var operatingSystem = _this.props.operatingSystem;
|
|
128
128
|
|
|
129
|
+
console.log({ message: message });
|
|
129
130
|
var data = JSON.parse(message.data);
|
|
130
131
|
|
|
131
132
|
if (data.method === 'OPEN_APP') {
|
|
@@ -198,7 +199,7 @@ var PaymentForm = function (_Component) {
|
|
|
198
199
|
} else if (data.redirectOutput.container == 'iframe' && data.redirectOutput.method == 'GET' && data.redirectOutput.html != null) {
|
|
199
200
|
return _react2.default.createElement(_InjectedIframeHTML2.default, { data: data, iframeProps: iframeProps });
|
|
200
201
|
} else if (data.redirectOutput.container == 'iframe' && data.redirectOutput.method == 'GET' && redirect) {
|
|
201
|
-
window.location.
|
|
202
|
+
window.location.href = data.redirectOutput.url;
|
|
202
203
|
return null;
|
|
203
204
|
} else if (data.redirectOutput.container == 'iframe' && data.redirectOutput.method == 'GET') {
|
|
204
205
|
return _react2.default.createElement('iframe', _extends({
|
|
@@ -48,7 +48,7 @@ var Amount = function Amount(_ref) {
|
|
|
48
48
|
_react2.default.createElement('p', { dangerouslySetInnerHTML: { __html: content } }),
|
|
49
49
|
_react2.default.createElement(_Select2.default, {
|
|
50
50
|
className: 'layout-item',
|
|
51
|
-
title: translate({ id: 'label.choose_limit' }),
|
|
51
|
+
title: translate({ id: 'label.choose_limit' }, intl),
|
|
52
52
|
options: types,
|
|
53
53
|
name: 'Timespan',
|
|
54
54
|
error: errors.Timespan && translate({ id: errors.Timespan }, intl)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "tg-core-components",
|
|
3
|
-
"version": "6.3.
|
|
3
|
+
"version": "6.3.2",
|
|
4
4
|
"description": "tg-core-components",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -76,5 +76,5 @@
|
|
|
76
76
|
"webpack": "^3.0.0",
|
|
77
77
|
"webpack-blocks": "^1.0.0"
|
|
78
78
|
},
|
|
79
|
-
"gitHead": "
|
|
79
|
+
"gitHead": "655fb1956cc5f772c25bcb3a193836eb387d5122"
|
|
80
80
|
}
|