prebid.js 7.17.0 → 7.19.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/33acrossBidAdapter.js +1 -1
- package/dist/adagioBidAdapter.js +1 -1
- package/dist/adbookpspBidAdapter.js +1 -1
- package/dist/adfBidAdapter.js +1 -1
- package/dist/adgenerationBidAdapter.js +1 -1
- package/dist/adqueryBidAdapter.js +1 -1
- package/dist/adqueryIdSystem.js +1 -1
- package/dist/adrelevantisBidAdapter.js +1 -1
- package/dist/adtrgtmeBidAdapter.js +1 -1
- package/dist/adxcgBidAdapter.js +1 -1
- package/dist/adyoulikeBidAdapter.js +1 -1
- package/dist/ajaBidAdapter.js +1 -1
- package/dist/amxBidAdapter.js +1 -1
- package/dist/amxIdSystem.js +1 -1
- package/dist/appierAnalyticsAdapter.js +1 -1
- package/dist/appnexusBidAdapter.js +1 -1
- package/dist/asoBidAdapter.js +1 -1
- package/dist/audiencerunBidAdapter.js +1 -1
- package/dist/axonixBidAdapter.js +1 -1
- package/dist/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +1 -1
- package/dist/bidglassBidAdapter.js +1 -1
- package/dist/bidwatchAnalyticsAdapter.js +1 -1
- package/dist/big-richmediaBidAdapter.js +1 -1
- package/dist/bluebillywigBidAdapter.js +1 -1
- package/dist/bridgewellBidAdapter.js +1 -1
- package/dist/brightMountainMediaBidAdapter.js +1 -1
- package/dist/carodaBidAdapter.js +1 -1
- package/dist/cleanioRtdProvider.js +1 -1
- package/dist/colossussspBidAdapter.js +1 -1
- package/dist/concertBidAdapter.js +1 -1
- package/dist/connectadBidAdapter.js +1 -1
- package/dist/consumableBidAdapter.js +1 -1
- package/dist/conversantAnalyticsAdapter.js +1 -0
- package/dist/conversantBidAdapter.js +1 -1
- package/dist/craftBidAdapter.js +1 -1
- package/dist/criteoBidAdapter.js +1 -1
- package/dist/debugging-standalone.js +1 -1
- package/dist/debugging.js +1 -1
- package/dist/dependencies.json +6 -0
- package/dist/dgkeywordRtdProvider.js +1 -1
- package/dist/dianomiBidAdapter.js +1 -1
- package/dist/dspxBidAdapter.js +1 -1
- package/dist/enrichmentFpdModule.js +1 -1
- package/dist/eplanningBidAdapter.js +1 -1
- package/dist/finativeBidAdapter.js +1 -1
- package/dist/fpd.js +1 -0
- package/dist/glimpseBidAdapter.js +1 -1
- package/dist/gmosspBidAdapter.js +1 -1
- package/dist/goldbachBidAdapter.js +1 -1
- package/dist/gridBidAdapter.js +1 -1
- package/dist/gridNMBidAdapter.js +1 -1
- package/dist/growthCodeIdSystem.js +1 -0
- package/dist/gumgumBidAdapter.js +1 -1
- package/dist/h12mediaBidAdapter.js +1 -1
- package/dist/id5IdSystem.js +1 -1
- package/dist/impactifyBidAdapter.js +1 -1
- package/dist/improvedigitalBidAdapter.js +1 -1
- package/dist/inmarBidAdapter.js +1 -1
- package/dist/insticatorBidAdapter.js +1 -1
- package/dist/ixBidAdapter.js +1 -1
- package/dist/jixieBidAdapter.js +1 -1
- package/dist/justpremiumBidAdapter.js +1 -1
- package/dist/konduitAnalyticsAdapter.js +1 -1
- package/dist/kueezBidAdapter.js +1 -1
- package/dist/lassoBidAdapter.js +1 -1
- package/dist/lifestreetBidAdapter.js +1 -1
- package/dist/liveIntentIdSystem.js +1 -1
- package/dist/liveyieldAnalyticsAdapter.js +1 -1
- package/dist/logicadBidAdapter.js +1 -1
- package/dist/loglyliftBidAdapter.js +1 -1
- package/dist/malltvAnalyticsAdapter.js +1 -1
- package/dist/marsmediaBidAdapter.js +1 -1
- package/dist/mediafuseBidAdapter.js +1 -1
- package/dist/mediakeysBidAdapter.js +1 -1
- package/dist/mediasquareBidAdapter.js +1 -1
- package/dist/mgidBidAdapter.js +1 -1
- package/dist/minutemediaBidAdapter.js +1 -1
- package/dist/nativoBidAdapter.js +1 -1
- package/dist/nextMillenniumBidAdapter.js +1 -1
- package/dist/not-for-prod/prebid.js +133 -130
- package/dist/oguryBidAdapter.js +1 -1
- package/dist/onetagBidAdapter.js +1 -1
- package/dist/ooloAnalyticsAdapter.js +1 -1
- package/dist/outbrainBidAdapter.js +1 -1
- package/dist/parrableIdSystem.js +1 -1
- package/dist/pixfutureBidAdapter.js +1 -1
- package/dist/prebid-core.js +1 -1
- package/dist/prebidServerBidAdapter.js +1 -1
- package/dist/publinkIdSystem.js +1 -1
- package/dist/pubmaticBidAdapter.js +1 -1
- package/dist/pubwiseAnalyticsAdapter.js +1 -1
- package/dist/pxyzBidAdapter.js +1 -1
- package/dist/quantcastBidAdapter.js +1 -1
- package/dist/readpeakBidAdapter.js +1 -1
- package/dist/relaidoBidAdapter.js +1 -1
- package/dist/rhythmoneBidAdapter.js +1 -1
- package/dist/riseBidAdapter.js +1 -1
- package/dist/rubiconAnalyticsAdapter.js +1 -1
- package/dist/rubiconBidAdapter.js +1 -1
- package/dist/seedingAllianceBidAdapter.js +1 -1
- package/dist/seedtagBidAdapter.js +1 -1
- package/dist/sharethroughAnalyticsAdapter.js +1 -1
- package/dist/sharethroughBidAdapter.js +1 -1
- package/dist/shinezBidAdapter.js +1 -1
- package/dist/smaatoBidAdapter.js +1 -1
- package/dist/smartadserverBidAdapter.js +1 -1
- package/dist/smartxBidAdapter.js +1 -1
- package/dist/smilewantedBidAdapter.js +1 -1
- package/dist/sonobiBidAdapter.js +1 -1
- package/dist/sovrnAnalyticsAdapter.js +1 -1
- package/dist/sovrnBidAdapter.js +1 -1
- package/dist/sspBCBidAdapter.js +1 -1
- package/dist/sublimeBidAdapter.js +1 -1
- package/dist/synacormediaBidAdapter.js +1 -1
- package/dist/taboolaBidAdapter.js +1 -1
- package/dist/targetVideoBidAdapter.js +1 -1
- package/dist/teadsBidAdapter.js +1 -1
- package/dist/trionBidAdapter.js +1 -1
- package/dist/tripleliftBidAdapter.js +1 -1
- package/dist/ttdBidAdapter.js +1 -1
- package/dist/ucfunnelAnalyticsAdapter.js +1 -1
- package/dist/underdogmediaBidAdapter.js +1 -1
- package/dist/undertoneBidAdapter.js +1 -1
- package/dist/userId.js +1 -1
- package/dist/vidazooBidAdapter.js +1 -1
- package/dist/videobyteBidAdapter.js +1 -1
- package/dist/visxBidAdapter.js +1 -1
- package/dist/vuukleBidAdapter.js +1 -1
- package/dist/widespaceBidAdapter.js +1 -1
- package/dist/winrBidAdapter.js +1 -1
- package/dist/yahoosspBidAdapter.js +1 -1
- package/dist/yandexBidAdapter.js +1 -1
- package/dist/yieldmoBidAdapter.js +1 -1
- package/dist/yieldoneAnalyticsAdapter.js +1 -1
- package/libraries/fpd/sua.js +98 -0
- package/modules/adagioBidAdapter.js +2 -1
- package/modules/adfBidAdapter.js +1 -1
- package/modules/adkernelAdnBidAdapter.js +1 -0
- package/modules/adqueryBidAdapter.js +4 -2
- package/modules/adqueryIdSystem.js +8 -8
- package/modules/adxcgBidAdapter.js +1 -1
- package/modules/amxBidAdapter.js +1 -1
- package/modules/{andBeyondMediaBidAdapter.js → beyondmediaBidAdapter.js} +0 -0
- package/modules/{andBeyondMediaBidAdapter.md → beyondmediaBidAdapter.md} +1 -1
- package/modules/bidwatchAnalyticsAdapter.js +1 -1
- package/modules/cleanioRtdProvider.js +3 -4
- package/modules/colossussspBidAdapter.js +2 -1
- package/modules/conversantAnalyticsAdapter.js +560 -0
- package/modules/conversantAnalyticsAdapter.md +47 -0
- package/modules/criteoBidAdapter.js +1 -1
- package/modules/debugging/bidInterceptor.js +2 -2
- package/modules/debugging/debugging.js +10 -2
- package/modules/dgkeywordRtdProvider.js +21 -3
- package/modules/dianomiBidAdapter.js +1 -1
- package/modules/enrichmentFpdModule.js +33 -14
- package/modules/finativeBidAdapter.js +1 -1
- package/modules/gridBidAdapter.js +188 -118
- package/modules/growthCodeIdSystem.js +164 -0
- package/modules/growthCodeIdSystem.md +37 -0
- package/modules/improvedigitalBidAdapter.js +2 -2
- package/modules/ixBidAdapter.js +94 -23
- package/modules/liveIntentIdSystem.js +39 -5
- package/modules/mediakeysBidAdapter.js +6 -1
- package/modules/mediakeysBidAdapter.md +50 -40
- package/modules/nativoBidAdapter.js +3 -2
- package/modules/nextMillenniumBidAdapter.js +34 -11
- package/modules/prebidServerBidAdapter/index.js +44 -13
- package/modules/readpeakBidAdapter.js +1 -1
- package/modules/rubiconBidAdapter.js +2 -3
- package/modules/seedingAllianceBidAdapter.js +1 -1
- package/modules/seedtagBidAdapter.js +4 -0
- package/modules/sharethroughBidAdapter.js +1 -1
- package/modules/taboolaBidAdapter.js +4 -8
- package/modules/talkadsBidAdapter.js +1 -0
- package/modules/truereachBidAdapter.js +1 -0
- package/modules/ttdBidAdapter.js +1 -1
- package/modules/userId/eids.js +19 -0
- package/modules/vidazooBidAdapter.js +1 -1
- package/modules/vuukleBidAdapter.js +34 -3
- package/modules/yahoosspBidAdapter.js +3 -1
- package/modules/yandexBidAdapter.js +31 -8
- package/package.json +2 -2
- package/src/adapterManager.js +2 -4
- package/src/cpmBucketManager.js +22 -3
- package/src/native.js +1 -5
- package/src/prebid.js +3 -3
- package/test/spec/cpmBucketManager_spec.js +239 -177
- package/test/spec/fpd/sua_spec.js +244 -0
- package/test/spec/modules/adagioBidAdapter_spec.js +23 -0
- package/test/spec/modules/adfBidAdapter_spec.js +2 -3
- package/test/spec/modules/adqueryBidAdapter_spec.js +11 -0
- package/test/spec/modules/adqueryIdSystem_spec.js +0 -2
- package/test/spec/modules/adxcgBidAdapter_spec.js +2 -3
- package/test/spec/modules/amxBidAdapter_spec.js +3 -2
- package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js} +1 -1
- package/test/spec/modules/bidwatchAnalyticsAdapter_spec.js +2 -0
- package/test/spec/modules/colossussspBidAdapter_spec.js +4 -2
- package/test/spec/modules/conversantAnalyticsAdapter_spec.js +963 -0
- package/test/spec/modules/debugging_mod_spec.js +9 -0
- package/test/spec/modules/dgkeywordRtdProvider_spec.js +83 -1
- package/test/spec/modules/dianomiBidAdapter_spec.js +2 -3
- package/test/spec/modules/enrichmentFpdModule_spec.js +50 -7
- package/test/spec/modules/fpdModule_spec.js +9 -0
- package/test/spec/modules/gridBidAdapter_spec.js +87 -31
- package/test/spec/modules/growthCodeIdSystem_spec.js +83 -0
- package/test/spec/modules/ixBidAdapter_spec.js +221 -2
- package/test/spec/modules/liveIntentIdMinimalSystem_spec.js +62 -8
- package/test/spec/modules/liveIntentIdSystem_spec.js +62 -8
- package/test/spec/modules/mediakeysBidAdapter_spec.js +20 -3
- package/test/spec/modules/nativoBidAdapter_spec.js +13 -2
- package/test/spec/modules/prebidServerBidAdapter_spec.js +171 -4
- package/test/spec/modules/seedtagBidAdapter_spec.js +42 -0
- package/test/spec/modules/sharethroughBidAdapter_spec.js +2 -1
- package/test/spec/modules/taboolaBidAdapter_spec.js +2 -2
- package/test/spec/modules/ttdBidAdapter_spec.js +3 -3
- package/test/spec/modules/vuukleBidAdapter_spec.js +87 -0
- package/test/spec/modules/yahoosspBidAdapter_spec.js +3 -1
- package/test/spec/modules/yandexBidAdapter_spec.js +8 -5
- package/test/spec/native_spec.js +5 -0
- package/test/spec/unit/pbjs_api_spec.js +44 -0
|
@@ -1265,6 +1265,29 @@ describe('Adagio bid adapter', () => {
|
|
|
1265
1265
|
expect(result.dom_loading).to.be.a('String');
|
|
1266
1266
|
expect(result.user_timestamp).to.be.a('String');
|
|
1267
1267
|
});
|
|
1268
|
+
|
|
1269
|
+
it('should return `adunit_position` feature when the slot is hidden', function () {
|
|
1270
|
+
const elem = fixtures.getElementById();
|
|
1271
|
+
sandbox.stub(window.top.document, 'getElementById').returns(elem);
|
|
1272
|
+
sandbox.stub(window.top, 'getComputedStyle').returns({ display: 'none' });
|
|
1273
|
+
sandbox.stub(utils, 'inIframe').returns(false);
|
|
1274
|
+
|
|
1275
|
+
const bidRequest = new BidRequestBuilder({
|
|
1276
|
+
mediaTypes: {
|
|
1277
|
+
banner: { sizes: [[300, 250]] },
|
|
1278
|
+
},
|
|
1279
|
+
})
|
|
1280
|
+
.withParams()
|
|
1281
|
+
.build();
|
|
1282
|
+
|
|
1283
|
+
const bidderRequest = new BidderRequestBuilder().build();
|
|
1284
|
+
|
|
1285
|
+
const requests = spec.buildRequests([bidRequest], bidderRequest);
|
|
1286
|
+
const result = requests[0].data.adUnits[0].features;
|
|
1287
|
+
|
|
1288
|
+
expect(result.adunit_position).to.match(/^[\d]+x[\d]+$/);
|
|
1289
|
+
expect(elem.style.display).to.equal(null); // set null to reset style
|
|
1290
|
+
});
|
|
1268
1291
|
});
|
|
1269
1292
|
|
|
1270
1293
|
describe('Adagio features when prebid in Safeframe', function() {
|
|
@@ -170,11 +170,10 @@ describe('Adf adapter', function () {
|
|
|
170
170
|
let validBidRequests = [{
|
|
171
171
|
bidId: 'bidId',
|
|
172
172
|
params: { siteId: 'siteId' },
|
|
173
|
-
transactionId: 'transactionId'
|
|
174
173
|
}];
|
|
175
|
-
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' } }).data);
|
|
174
|
+
let request = JSON.parse(spec.buildRequests(validBidRequests, { refererInfo: { page: 'page' }, auctionId: 'tid' }).data);
|
|
176
175
|
|
|
177
|
-
assert.equal(request.source.tid,
|
|
176
|
+
assert.equal(request.source.tid, 'tid');
|
|
178
177
|
assert.equal(request.source.fd, 1);
|
|
179
178
|
});
|
|
180
179
|
|
|
@@ -70,6 +70,13 @@ describe('adqueryBidAdapter', function () {
|
|
|
70
70
|
it('should return false if any parameter missing', function () {
|
|
71
71
|
expect(spec.isBidRequestValid(inValidBid)).to.be.false
|
|
72
72
|
})
|
|
73
|
+
|
|
74
|
+
it('should return false when sizes for banner are not specified', () => {
|
|
75
|
+
const bid = utils.deepClone(bidRequest);
|
|
76
|
+
delete bid.mediaTypes.banner.sizes;
|
|
77
|
+
|
|
78
|
+
expect(spec.isBidRequestValid(bid)).to.equal(false);
|
|
79
|
+
});
|
|
73
80
|
})
|
|
74
81
|
|
|
75
82
|
describe('buildRequests', function () {
|
|
@@ -108,6 +115,10 @@ describe('adqueryBidAdapter', function () {
|
|
|
108
115
|
it('should include bidder', function () {
|
|
109
116
|
expect(rdata.bidder !== null).to.be.true
|
|
110
117
|
})
|
|
118
|
+
|
|
119
|
+
it('should include sizes', function () {
|
|
120
|
+
expect(rdata.sizes).not.be.null
|
|
121
|
+
})
|
|
111
122
|
})
|
|
112
123
|
|
|
113
124
|
describe('interpretResponse', function () {
|
|
@@ -164,11 +164,10 @@ describe('Adxcg adapter', function () {
|
|
|
164
164
|
let validBidRequests = [{
|
|
165
165
|
bidId: 'bidId',
|
|
166
166
|
params: {siteId: 'siteId'},
|
|
167
|
-
transactionId: 'transactionId'
|
|
168
167
|
}];
|
|
169
|
-
let request = JSON.parse(spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}}).data);
|
|
168
|
+
let request = JSON.parse(spec.buildRequests(validBidRequests, {refererInfo: {referer: 'page'}, auctionId: 'tid'}).data);
|
|
170
169
|
|
|
171
|
-
assert.equal(request.source.tid,
|
|
170
|
+
assert.equal(request.source.tid, 'tid');
|
|
172
171
|
assert.equal(request.source.fd, 1);
|
|
173
172
|
});
|
|
174
173
|
|
|
@@ -359,6 +359,7 @@ describe('AmxBidAdapter', () => {
|
|
|
359
359
|
bidId: sampleRequestId + '_2',
|
|
360
360
|
params: {
|
|
361
361
|
...sampleBidRequestBase.params,
|
|
362
|
+
adUnitId: '',
|
|
362
363
|
tagId: 'example',
|
|
363
364
|
},
|
|
364
365
|
},
|
|
@@ -404,12 +405,12 @@ describe('AmxBidAdapter', () => {
|
|
|
404
405
|
|
|
405
406
|
it('can build a video request', () => {
|
|
406
407
|
const { data } = spec.buildRequests(
|
|
407
|
-
[sampleBidRequestVideo],
|
|
408
|
+
[{...sampleBidRequestVideo, params: { ...sampleBidRequestVideo.params, adUnitId: 'custom-auid' }}],
|
|
408
409
|
sampleBidderRequest
|
|
409
410
|
);
|
|
410
411
|
expect(Object.keys(data.m).length).to.equal(1);
|
|
411
412
|
expect(data.m[sampleRequestId + '_video']).to.deep.equal({
|
|
412
|
-
au: '
|
|
413
|
+
au: 'custom-auid',
|
|
413
414
|
ms: [[[300, 150]], [], [[360, 250]]],
|
|
414
415
|
av: true,
|
|
415
416
|
aw: 360,
|
package/test/spec/modules/{andBeyondMediaBidAdapter_spec.js → beyondmediaBidAdapter_spec.js}
RENAMED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { expect } from 'chai';
|
|
2
|
-
import { spec } from '../../../modules/
|
|
2
|
+
import { spec } from '../../../modules/beyondmediaBidAdapter.js';
|
|
3
3
|
import { BANNER, VIDEO, NATIVE } from '../../../src/mediaTypes.js';
|
|
4
4
|
import { getUniqueIdentifierStr } from '../../../src/utils.js';
|
|
5
5
|
|
|
@@ -293,6 +293,7 @@ describe('BidWatch Analytics', function () {
|
|
|
293
293
|
expect(message.auctionEnd[0].bidsReceived[0]).not.to.have.property('ad');
|
|
294
294
|
expect(message.auctionEnd[0].bidsReceived[0]).to.have.property('meta');
|
|
295
295
|
expect(message.auctionEnd[0].bidsReceived[0].meta).to.have.property('advertiserDomains');
|
|
296
|
+
expect(message.auctionEnd[0].bidsReceived[0]).to.have.property('adId');
|
|
296
297
|
expect(message.auctionEnd[0]).to.have.property('bidderRequests').and.to.have.lengthOf(1);
|
|
297
298
|
expect(message.auctionEnd[0].bidderRequests[0]).to.have.property('gdprConsent');
|
|
298
299
|
expect(message.auctionEnd[0].bidderRequests[0].gdprConsent).not.to.have.property('vendorData');
|
|
@@ -315,6 +316,7 @@ describe('BidWatch Analytics', function () {
|
|
|
315
316
|
expect(server.requests.length).to.equal(1);
|
|
316
317
|
let message = JSON.parse(server.requests[0].requestBody);
|
|
317
318
|
expect(message).not.to.have.property('ad');
|
|
319
|
+
expect(message).to.have.property('adId')
|
|
318
320
|
expect(message).to.have.property('cpmIncrement').and.to.equal(27.4276);
|
|
319
321
|
sinon.assert.callCount(bidwatchAnalytics.track, 1);
|
|
320
322
|
});
|
|
@@ -101,7 +101,7 @@ describe('ColossussspAdapter', function () {
|
|
|
101
101
|
let placements = data['placements'];
|
|
102
102
|
for (let i = 0; i < placements.length; i++) {
|
|
103
103
|
let placement = placements[i];
|
|
104
|
-
expect(placement).to.have.all.keys('placementId', 'groupId', 'eids', 'bidId', 'traffic', 'sizes', 'schain', 'floor', 'gpid');
|
|
104
|
+
expect(placement).to.have.all.keys('placementId', 'groupId', 'eids', 'bidId', 'traffic', 'sizes', 'schain', 'floor', 'gpid', 'tid');
|
|
105
105
|
expect(placement.schain).to.be.an('object')
|
|
106
106
|
expect(placement.placementId).to.be.a('number');
|
|
107
107
|
expect(placement.groupId).to.be.a('number');
|
|
@@ -110,6 +110,7 @@ describe('ColossussspAdapter', function () {
|
|
|
110
110
|
expect(placement.sizes).to.be.an('array');
|
|
111
111
|
expect(placement.floor).to.be.an('object');
|
|
112
112
|
expect(placement.gpid).to.be.an('string');
|
|
113
|
+
expect(placement.tid).to.be.an('string');
|
|
113
114
|
}
|
|
114
115
|
});
|
|
115
116
|
|
|
@@ -143,7 +144,7 @@ describe('ColossussspAdapter', function () {
|
|
|
143
144
|
let placement = placements[i];
|
|
144
145
|
expect(placement).to.have.all.keys('placementId', 'groupId', 'eids', 'bidId', 'traffic', 'schain', 'floor', 'gpid', 'sizes',
|
|
145
146
|
'playerSize', 'minduration', 'maxduration', 'mimes', 'protocols', 'startdelay', 'placement', 'skip', 'skipafter',
|
|
146
|
-
'minbitrate', 'maxbitrate', 'delivery', 'playbackmethod', 'api', 'linearity'
|
|
147
|
+
'minbitrate', 'maxbitrate', 'delivery', 'playbackmethod', 'api', 'linearity', 'tid'
|
|
147
148
|
);
|
|
148
149
|
expect(placement.schain).to.be.an('object')
|
|
149
150
|
expect(placement.placementId).to.be.a('number');
|
|
@@ -155,6 +156,7 @@ describe('ColossussspAdapter', function () {
|
|
|
155
156
|
expect(placement.playerSize).to.be.an('array');
|
|
156
157
|
expect(placement.minduration).to.be.an('number');
|
|
157
158
|
expect(placement.maxduration).to.be.an('number');
|
|
159
|
+
expect(placement.tid).to.be.an('string');
|
|
158
160
|
}
|
|
159
161
|
});
|
|
160
162
|
|