update shop data

pull/49/head
Sebastien Bourdeauducq 2019-11-06 14:48:26 +08:00
parent cf26888ea1
commit ede2829c92
6 changed files with 111 additions and 201 deletions

View File

Before

Width:  |  Height:  |  Size: 50 KiB

After

Width:  |  Height:  |  Size: 50 KiB

View File

Before

Width:  |  Height:  |  Size: 39 KiB

After

Width:  |  Height:  |  Size: 39 KiB

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

@ -1663,9 +1663,7 @@ class Shop extends React.PureComponent {
<OrderPanel
title="Order hardware"
description="
Choose your crate and drag/add the cards you want
to the crate below to see
how the combination would look like."
Drag and drop the cards you want into the crate below to see how the combination would look like. If you have any issues with this ordering system, or if you need other configurations, email us directly anytime at sales@m-****.hk. The price is estimated and must be confirmed by a quote."
crateMode={
<CrateMode
items={crateModeItems}

View File

@ -5,4 +5,4 @@ for(var u=h.reduce(function(a,b,c){return("kasli"===b.type||"kasli-backplane"===
["novo","urukul","koster"].map(function(a){return h.find(function(b){return b.type===a})&&(k[c.state.items[a].rules.connectors.type]=_objectSpread({},c.state.items[a].rules.connectors)),a});for(var z=h.reduce(function(a,b,c){return"idc-bnc"===b.type&&a.push(c),a},[]),A=z.length-1;0<=A;A--){var B=z[A],C=!1;if(0==B)C=!0;else if(1<=B){var H=z[A]-1;"zotino"!==h[H].type&&"hd68"!==h[H].type&&"idc-bnc"!==h[H].type&&(C=!0)}C&&(j[B]=_objectSpread({},h[B]),j[B].warnings={},j[B].warnings.wrong=_objectSpread({},h[B].rules.wrong))}// check number of IDC-BNC adapters for a Zotino and HD68-IDC
for(var D=h.reduce(function(a,b,c){return("zotino"===b.type||"hd68"===b.type)&&a.push(c),a},[]),E=function(a){var b=void 0,c=0,d=D[a];b=a===D.length-1?h.slice(d+1):h.slice(d+1,D[a+1]);var e=!1;// check if HD68-IDC has at least 1 IDC-BNC adapter
if(c=b.reduce(function(a,b,c,d){return 0===c&&"idc-bnc"===b.type?a+1:"idc-bnc"===d[0].type&&0<c&&"idc-bnc"===d[c-1].type?("idc-bnc"!==b.type&&(e=!0),a+("idc-bnc"!==b.type||e?0:1)):a},0),(d in j)?(j[d].nbrCurrentSlot=c,!("warnings"in j[d])&&(j[d].warnings={})):(j[d]=_objectSpread({},h[d]),j[d].nbrCurrentSlot=c,j[d].warnings={}),0<c&&(k[h[d].rules.maxSlot.type]=_objectSpread({},h[d].rules.maxSlot)),c>h[d].nbrSlotMax&&(j[d].warnings.maxSlotWarning=_objectSpread({},h[d].rules.maxSlotWarning)),"hd68"===h[d].type){var f=!1;d<h.length-1?"idc-bnc"!==h[d+1].type&&(f=!0):d===h.length-1&&(f=!0),f&&((d in j)?j[d].warnings.minAdapter=_objectSpread({},h[d].rules.minAdapter):(j[d]=_objectSpread({},h[d]),j[d].warnings={},j[d].warnings.minAdapter=_objectSpread({},h[d].rules.minAdapter)))}},F=0;F<=D.length-1;F++)E(F);// update state with rules
this.setState(_objectSpread({},this.state,{columns:_objectSpread({},this.state.columns,{cart:_objectSpread({},this.state.columns.cart,{itemsData:_objectSpread({},j)})}),rules:_objectSpread({},k)}))}},{key:"render",value:function render(){var a=this.state,b=a.currency,c=a.currentItemHovered,d=a.currentMode,e=a.crateModeSlots,f=a.crateModeItems,g=a.items,h=a.columns,i=a.rules;return React.createElement(DragDropContext,{onDragEnd:this.handleOnDragEnd},React.createElement(Layout,{className:"shop",aside:React.createElement(Backlog,{currency:b,items:g,data:h.backlog,onClickAddItem:this.handleClickAddItem}),main:React.createElement(OrderPanel,{title:"Order hardware",description:" Choose your crate and drag/add the cards you want to the crate below to see how the combination would look like.",crateMode:React.createElement(CrateMode,{items:f,mode:d,onClickMode:this.handleCrateModeChange}),crate:React.createElement(Crate,{cart:React.createElement(Cart,{nbrSlots:e[d],data:h.cart,itemHovered:c,onToggleProgress:this.handleToggleItemProgress,onToggleWarning:this.handleToggleItemWarning,onToggleOverlayRemove:this.handleToggleOverlayRemove,onClickRemoveItem:this.handleDeleteItem}),rules:Object.values(i).filter(function(a){return a})}),summaryPrice:React.createElement(OrderSumary,{currency:b,currentMode:d,modes:f,summary:h.cart.items,itemsData:h.cart.itemsData,onMouseEnterItem:this.handleMouseEnterItem,onMouseLeaveItem:this.handleMouseLeaveItem,onDeleteItem:this.handleDeleteItem,onDeleteAllItems:this.handleDeleteAllItems,onClickSelectItem:this.handleClickSelectItem}),form:React.createElement(OrderForm,{onClickSubmit:this.handleClickSubmit})})}))}}]),b}(React.PureComponent);ReactDOM.render(React.createElement(Shop,{data:data}),document.querySelector("#root-shop"));
this.setState(_objectSpread({},this.state,{columns:_objectSpread({},this.state.columns,{cart:_objectSpread({},this.state.columns.cart,{itemsData:_objectSpread({},j)})}),rules:_objectSpread({},k)}))}},{key:"render",value:function render(){var a=this.state,b=a.currency,c=a.currentItemHovered,d=a.currentMode,e=a.crateModeSlots,f=a.crateModeItems,g=a.items,h=a.columns,i=a.rules;return React.createElement(DragDropContext,{onDragEnd:this.handleOnDragEnd},React.createElement(Layout,{className:"shop",aside:React.createElement(Backlog,{currency:b,items:g,data:h.backlog,onClickAddItem:this.handleClickAddItem}),main:React.createElement(OrderPanel,{title:"Order hardware",description:" Drag and drop the cards you want into the crate below to see how the combination would look like. If you have any issues with this ordering system, or if you need other configurations, email us directly anytime at sales@m-****.hk. The price is estimated and must be confirmed by a quote.",crateMode:React.createElement(CrateMode,{items:f,mode:d,onClickMode:this.handleCrateModeChange}),crate:React.createElement(Crate,{cart:React.createElement(Cart,{nbrSlots:e[d],data:h.cart,itemHovered:c,onToggleProgress:this.handleToggleItemProgress,onToggleWarning:this.handleToggleItemWarning,onToggleOverlayRemove:this.handleToggleOverlayRemove,onClickRemoveItem:this.handleDeleteItem}),rules:Object.values(i).filter(function(a){return a})}),summaryPrice:React.createElement(OrderSumary,{currency:b,currentMode:d,modes:f,summary:h.cart.items,itemsData:h.cart.itemsData,onMouseEnterItem:this.handleMouseEnterItem,onMouseLeaveItem:this.handleMouseLeaveItem,onDeleteItem:this.handleDeleteItem,onDeleteAllItems:this.handleDeleteAllItems,onClickSelectItem:this.handleClickSelectItem}),form:React.createElement(OrderForm,{onClickSubmit:this.handleClickSubmit})})}))}}]),b}(React.PureComponent);ReactDOM.render(React.createElement(Shop,{data:data}),document.querySelector("#root-shop"));

View File

@ -2,7 +2,7 @@ const shop_data = {
currentItemHovered: null,
currentMode: 'rack',
currency: 'EUR',
currency: 'USD',
crateModeSlots: {
rack: 21,
@ -22,11 +22,11 @@ const shop_data = {
crateModeItems: [{
id: 'rack',
name: 'Rack mountable crate',
price: 1000,
price: 1450,
}, {
id: 'desktop',
name: 'Desktop crate',
price: 2000,
price: 1450,
}],
items: {
@ -34,20 +34,14 @@ const shop_data = {
'kasli': {
id: 'kasli',
name: 'Kasli',
price: 1000,
price: 3600,
image: '/shop/graphic-02_kasli.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'FPGA core device, runs ARTIQ kernels, controls the EEMs.',
'3 SFP 6GB/s slots for Ethernet or DRTIO.',
'8 EEM connectors on board.',
'4 MMCX clock outputs.',
'Price includes bitstream generation, flashing, testing, and firmware updates for 1 year (USD 1400).',
],
size: 'big',
type: 'kasli',
@ -94,21 +88,11 @@ const shop_data = {
},
'kasli-backplane': {
id: 'kasli-backplane',
name: 'Kasli',
price: 1000,
name: 'Kasli + BP adapter',
price: 3830,
image: '/shop/graphic-02_kasli-with-backplane.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'Same as above, but with adapter that provides 4 additional EEM connectors',
],
size: 'big',
type: 'kasli-backplane',
@ -156,20 +140,16 @@ const shop_data = {
'bnc-dio': {
id: 'bnc-dio',
name: 'BNC-DIO',
price: 1000,
price: 450,
image: '/shop/graphic-02_BNC-DIO.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'Two banks of four digital channels each, with BNC connectors.',
'Each bank with individual ground isolation.',
'Per-bank switchable direction via on-board switches.',
'Per-channel switchable 50 Ohm termination with LED indicators.',
'Short circuit tolerance: infinite.',
'Minimum pulse width: 3ns.',
'Max 150 MHz toggle rate with 50% duty cycle.'
],
size: 'big',
type: null,
@ -184,27 +164,17 @@ const shop_data = {
type: 'bnc-dio',
icon: '/shop/icon-warning.svg',
name: 'BNC-DIO',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
},
},
},
'eem-octal': {
id: 'eem-octal',
'sma-dio': {
id: 'sma-dio',
name: 'SMA-DIO',
price: 1000,
image: '/shop/graphic-02_EEM-Octal.svg',
price: 400,
image: '/shop/graphic-02_SMA-DIO.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'Same as above, but with SMA connectors.'
],
size: 'small',
type: null,
@ -216,30 +186,24 @@ const shop_data = {
clockOccupied: 0,
rules: {
resources: {
type: 'eem-octal',
type: 'sma-dio',
icon: '/shop/icon-warning.svg',
name: 'SMA-DIO',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
},
},
},
'eem-16x': {
id: 'eem-16x',
'rj45-dio': {
id: 'rj45-dio',
name: 'RJ45-DIO',
price: 1000,
image: '/shop/graphic-02_EEM-16x.svg',
price: 390,
image: '/shop/graphic-02_RJ45-DIO.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'Supplies 16 LVDS pairs via 4 front-panel RJ45 connectors.',
'Each RJ45 supplies 4 LVDS DIOs.',
'Direction individually selectable for each signal via on-board switches.',
'No galvanic isolation.',
'Higher speed and lower jitter than the isolated SMA and BNC DIO cards.'
],
size: 'small',
type: null,
@ -251,30 +215,27 @@ const shop_data = {
clockOccupied: 0,
rules: {
resources: {
type: 'eem-16x',
type: 'rj45-dio',
icon: '/shop/icon-warning.svg',
name: 'RJ45-DIO',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides two EEM connectors (e.g. Kasli) at its left.',
},
},
},
'urukul': {
id: 'urukul',
name: 'Urukul',
price: 1000,
price: 2350,
image: '/shop/graphic-02_Urukul.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'4 channel 1GS/s DDS.',
'Output frequency (-3 dB): <1 to >400 MHz.',
'Nominal max output power 10 dBm.',
'Digital step attenuator 0 to -31.5dB.',
'RF switch (1ns temporal resolution), 70dB isolation.',
'AD9910 or AD9912 chip.',
'By default, we use the AD9910 as it provides more features. If you need the higher frequency resolution of the AD9912, leave us a note.',
'External 5W power amplifier is available separately, leave us a note if interested.'
],
size: 'small',
type: 'urukul',
@ -295,34 +256,22 @@ const shop_data = {
type: 'urukul',
icon: '/shop/icon-warning.svg',
name: 'Urukul',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides EEM and clocking connectors (e.g. Kasli) at its left.',
},
},
},
'zotino': {
id: 'zotino',
name: 'Zotino',
price: 1000,
price: 1600,
image: '/shop/graphic-02_zotino.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'4 EEM on backplane extension',
'32-channel DAC.',
'16-bit resolution.',
'1 MSPS shared between all channels.',
'Output voltage +-10V.',
'HD68 connector with all channels.',
'Channels can also be broken out to BNC or SMA using IDC-BNC, IDC-SMA or IDC-MCX cards.'
],
size: 'small',
type: 'zotino',
@ -350,20 +299,19 @@ const shop_data = {
type: 'zotino',
icon: '/shop/icon-warning.svg',
name: 'Zotino',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
},
},
},
'idc-bnc-adapter': {
id: 'idc-bnc-adapter',
name: 'IDC-BNC',
price: 1000,
price: 160,
image: '/shop/graphic-02_IDC-BNC-adapter.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'Breaks out analog signals from Zotino or HD68-IDC to BNC connectors.',
'Each card provides 8 channels.',
'Breaking out all 32 channels from a Zotino requires 8 IDC-BNC cards.'
],
size: 'big',
type: 'idc-bnc',
@ -385,20 +333,10 @@ const shop_data = {
'hd68-idc-adapter': {
id:'hd68-idc-adapter',
name: 'HD68-IDC',
price: 1000,
price: 150,
image: '/shop/graphic-02_HD68.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'Connects an external HD68 cable to IDC-BNC, IDC-SMA or IDC-MCX cards.',
],
size: 'small',
type: 'hd68',
@ -433,20 +371,16 @@ const shop_data = {
'novo': {
id: 'novo',
name: 'Novo',
price: 1000,
price: 1600,
image: '/shop/graphic-02_Novo.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'8-channel ADC.',
'16-bit resolution.',
'1.5 MSPS simultaneously on all channels.',
'When used with ARTIQ-Python driver, effective sample rate is lower.',
'Digitally programmable input gain.',
'Full-scale input ranges between +-10mV and +-10V.',
'Supports SU-Servo laser intensity stabilization servo in conjunction with Urukul.'
],
size: 'big',
type: 'novo',
@ -467,27 +401,21 @@ const shop_data = {
type: 'novo',
icon: '/shop/icon-warning.svg',
name: 'Novo',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides EEM connectors (e.g. Kasli) at its left.',
},
}
},
'koster': {
id: 'koster',
name: 'Koster',
price: 1000,
price: 550,
image: '/shop/graphic-02_Koster.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'Camera input interface card.',
'Supports some EMCCD cameras.',
'Allows image processing to occur in the FPGA with lower latency.',
'Existing stack supports summing over rectangular ROIs and reporting the result to ARTIQ kernels.',
'Camera signal is entirely processed in the Kasli FPGA.',
],
size: 'small',
type: 'koster',
@ -495,40 +423,34 @@ const shop_data = {
nbrSlotMin: 0,
nbrSlotMax: 0,
nbrClockMax: 0,
slotOccupied: 3,
slotOccupied: 2,
clockOccupied: 0,
rules: {
connectors: {
type: 'koster',
icon: '/shop/icon-reminder.svg',
name: 'Koster',
message: 'This configuration uses 3 EEM connectors. If you prefer to use 1 or 2 EEM connectors, please inform us by leaving an additional note.',
message: 'This configuration uses 2 EEM connectors. If you prefer to use 1 or 3 EEM connectors, please inform us by leaving an additional note.',
},
resources: {
type: 'koster',
icon: '/shop/icon-warning.svg',
name: 'Koster',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides EEM connectors (e.g. Kasli) at its left.',
},
}
},
'clocker': {
id: 'clocker',
name: 'Clocker',
price: 1000,
price: 525,
image: '/shop/graphic-02_Clocker.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'Distribute a low jitter clock signal among cards.',
'2 inputs.',
'10 outputs including 4 SMAs.',
'Frequency up to 1GHz.',
'Low jitter <100fs RMS.'
],
size: 'small',
type: 'clocker',
@ -553,23 +475,18 @@ const shop_data = {
},
},
},
'stabiliser': {
id: 'stabiliser',
'stabilizer': {
id: 'stabilizer',
name: 'Stabilizer',
price: 1000,
image: '/shop/graphic-02_Stabiliser.svg',
price: 3000,
image: '/shop/graphic-02_Stabilizer.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'CPU-based dual-channel fast servo.',
'400MHz STM32H743ZIT6.',
'Dual 16bit ADC with x2, x5, x10 PGA (2MS/s).',
'16bit AD5542A DAC (1us settling time).',
'100Base-T Ethernet.',
'Can be controlled by Kasli or work stand-alone with PoE supply.'
],
size: 'small',
type: null,
@ -583,20 +500,15 @@ const shop_data = {
'mirny': {
id: 'mirny',
name: 'Mirny',
price: 1000,
price: 2660,
image: '/shop/graphic-02_Mirny.svg',
specs: [
'Artix 7 100T FPGA',
'4GB DDR3 SDRAM',
'128MB SPI Flash',
'3 SFP 6GB/s slots',
'1 SATA 6GB/s connector',
'Clock recovery and distribution',
'4 MMCX clock outputs',
'4 channel USB connectivity',
'I2C tree to EEMs via USB and FPGA',
'8 EEM connectors on board',
'4 EEM on backplane extension',
'4-channel Wide-band PLL/VCO-based microwave frequency synthesiser.',
'53 MHz to >4 GHz.',
'Up to 13.6 GHz when using the mezzanine.',,
'Much higher frequency resolution than Urukul.',
'Lower jitter and phase noise.',
'Large frequency changes take several milliseconds.',
],
size: 'small',
type: null,
@ -611,7 +523,7 @@ const shop_data = {
type: 'mirny',
icon: '/shop/icon-warning.svg',
name: 'Mirny',
message: 'This card needs a card that provides XXX connector (e.g. Kasli) at its left.',
message: 'This card needs a card that provides a EEM connector (e.g. Kasli) at its left.',
},
},
},
@ -630,17 +542,17 @@ const shop_data = {
'kasli',
'kasli-backplane',
'bnc-dio',
'eem-octal',
'eem-16x',
'sma-dio',
'rj45-dio',
'urukul',
'mirny',
'zotino',
'idc-bnc-adapter',
'hd68-idc-adapter',
'novo',
'koster',
'clocker',
'stabiliser',
'mirny'
'stabilizer',
],
},