Line Input and Channel Gain module for summing Amp

GroupDIY Audio Forum

Help Support GroupDIY Audio Forum:

This site may earn a commission from merchant affiliate links, including eBay, Amazon, and others.

bjoneson

Well-known member
Joined
Mar 1, 2014
Messages
170
Location
Oakland, IA
I've had the great pleasure of kicking around ideas with folks here, and finally have a schematic put together for the Input Modules on the summing amp I'd like to build.

Here's some notes:

- I'm building this based in a modular chassis I have a personal attachment to. Each module is about 4.5" x 7.5", and is set up for 44-Pin card edge PCBs. That's why I'm using the 44-Pin format, and the choice of 4 channels per module is because that's as many as I could put front panel controls in for.

- This is a one time, DIY thing for my own personal use. No intention of doing any type of "production" run. As such, I'm not overly concerned about driving down part count or quality.

Here's a basic run-down of the circuit:

- Balanced line receivers from INA2134s (Could have done 134s for better channel separation, or gone with some of the newer THAT designs, but I have a pile of 2134s already sitting around).

- Coupling cap into 10k Pot acting as a "fader"

- GAR2520 (from classic API providing 10dB of available gain at the fader)

- Coupling cap to bus assign module

- Bus assignment is a little nasty looking in the schematic. Each channel has an "L Assign" and "R Assign" DPDT switch. When the L assign switch is engaged, it attenuates the opposite channel by ~3dB (by engaging the additional series resistor) and visa versa. Having 3dB attenuation when  both switches are engaged is a "nice to have", as opposed to a hard requirement for me.

I do have a couple of question marks I'm hoping folks would be willing to weigh in on:

- Coupling caps... I know they're needed to block DC. I chose the astronomical size of 470uF because the general advice I've gotten is the larger the better. I'm sure they could be smaller without impact the sonic characteristics of the circuit, but is there any negative impact to using the large values?

- Opamp stability compensation. I've got a 22pF cap in parallel with the feedback on the GAR2520's. Trying to make sure I've got the value correct.

- Bus impedance. I've been reading Doug Self's book, and he seems to be a huge advocate of "Low Impedance" design. That is, using the minimal practical impedance, reducing the level of Johnson Noise, etc... I'm planning on using 4k7 bus resistors in this design. With a total 24 channels.  Obviously the bus source impedance is going to be astronomically low in that configuration. Any issue with that?

I'm beginning to lay out the PCB for this module in KiCad, but was hoping to see if there were any thoughts on the circuit itself before I get too far down the rabbit hole.

Many thanks!

-Bob
 

Attachments

  • 4-INPUT.png
    4-INPUT.png
    57.4 KB · Views: 144
Semiconductors are not my 'thing' but I will make a comment on bus impedance. As I think you are sing virtual earth mixing then the bus impedance is very low indeed - it is approximately the value  of the VE op amp feedback resistor divided by its open loop gain. I think what Doug is referring to is the bus feed impedance which is the 4K7 resistors in your case. The Johnson noise in a 4K7 resistor is about -116dBu. It is only worth considering changing this if the op amp driving it has a  a self noise at the output that is close to this. In your case the preceding amp has a gain of 10dB but it uses a 31K4 feedback resistor and it is this that will determine the noise at the output. The Johnson noise in 31K4 is just shy of -106dBu so the op amp output noise cannot be better than this. The lesson here is, I think, that the whole chain from input to bus needs to be designed for minimum noise and I think that is what Doug means by low impedance design.

By the way, here is a quick way to work out Johnson noise on your calculator:

1. Divide the resistance in ohms by 3096
2. Take the square root. This is now the Johnson noise in micro volts.
3. Take the log and multiply by 20 to get dBV
4. Add 2.2 to get dBu

Cheers

Ian
 
ruffrecords said:
In your case the preceding amp has a gain of 10dB but it uses a 31K4 feedback resistor and it is this that will determine the noise at the output. The Johnson noise in 31K4 is just shy of -106dBu so the op amp output noise cannot be better than this. 
Not exactly. There is a 10k resistor to ground so the impedance at the non-inverting input is about 7.5k, resulting in an intrinsic noise of about -111 dBu.
But it has to be considered in view of the noise levels generated by the transistors in the 2520. I don't recall by heart the levels of input noise voltage density (En) and input noise current density (In), but I could swear the noise produced there is at least equal to the intrinic noise of the resistors. Which doesn't make this a poor design, on the contrary, the choice of source and NFB component values is in line with the optimum determined by the 2520's configuration.
Now I agree 100% with your recommendation to make sure that all stages operate within the same goal of minimum noise.
However, you will find in most cases the summing amps to be the main contributor to noise in a line-level mixer.
Depending on the number of stems the noise gain of the summing amp is generally between 18 and 40dB. In order to make it comparable to a line-input or fader make-up stage, its noise voltage would need to be between -125 and -137, which implies a noise voltage density of 3.3nV/sqrtHz (typical of a 5534) down to 0.8 nV/sqrtHz (domain of über-low noise opamps).

The subject of bus impedance is another issue. You are right when you say that the bus impedance is the value of the NFB resistor divided by the open-loop gain, and as such it's a very low value, that's irrelevant to any usble conclusion.
I believe this is not a valid angle.
The important factor is the actual impedance presented to the bus by the stems, which determines the impedance the active input device(s) see. In most cases, this impedance is low. For example, an 8 input mixer with 10k injection resistor will present an impedance of about 1100 ohms, which is much lower than the optimum noise impedance of most bipolar opamps (typically 7-15k).
Even with such a small configuration, one sees that noise optimization orients towards the choice of a VLN opamp. (or an hybrid BJT+opamp).
 
abbey road d enfer said:
The important factor is the actual impedance presented to the bus by the stems, which determines the impedance the active input device(s) see. In most cases, this impedance is low. For example, an 8 input mixer with 10k injection resistor will present an impedance of about 1100 ohms, which is much lower than the optimum noise impedance of most bipolar opamps (typically 7-15k).
Even with such a small configuration, one sees that noise optimization orients towards the choice of a VLN opamp. (or an hybrid BJT+opamp).

Yes, I appologize. Above I was referring to what's sometimes called the "Bus Source Impedance". I'm planning 24 channels / bus, and if I use 4.7K for bus stems, I think that gives me around 200 Ohms if my quick math is correct. Obviously that impedance rises as channels are removed from the bus in my current configuration. Though the advantage is that the summing amp is working at lower gain. I find myself wondering about this trade off.

I haven't finalized the summing amp topology yet, but am intending to do the basic ACN / VE thing. I may use 990s for this purpose as from what I can tell, having BJT inputs, they operate with very low noise on low source impedance.

From there I'd likely feed a stereo pot into a booster (probably gar2520s again) out to some 600:600 output transformers. Similar to the API topology, but without the insert point (and 2nd set of transformers to support it).

Thanks again for the analysis and advice. I hope to have an initial PCB layout completed in the next few days.
 
Any thoughts on the AC coupling cap size between stages? Seems general rule is larger is better, so I "went big" w/ 470uF. What about polarity? With a bipolar supply, how can you be sure of the polarity of any offset at the output of the opamps?
 
For those caps... when you can't know which polarity will be present it's normally very low so you can put it either way. About the size, you need to account it as a HPF, you want it to be about 10 times lower than your lowest desired freq. In your case the load will be the summing resistors, worst case 6k7/2 (both channels assigned) so ~3k3. With 47µF you are about 1Hz, so it should be more than good enough.

The input noise of the 990 is not only about the input devices being BJT but the specific BJT used and the polarization used to get a balance between voltage noise and current noise. They are optimized for input impedance about 600Ω IIRC, so you would need to be close to that, 24 channels, you could go as high as 15k and the noise from the resistors will be the same as the Ein. You will be under that number so you will be fine, but if you need a lot of bus being feed by a single opamp, at the channel, it needs to be able to drive all those summing resistors. Then you make the tradeoff, and the critical value will tell you how many mixes you can have or how much driving capability you need at the channel amp, without compromising the noise performance.

JS
 
bjoneson said:
I'm planning 24 channels / bus, and if I use 4.7K for bus stems, I think that gives me around 200 Ohms if my quick math is correct. Obviously that impedance rises as channels are removed from the bus in my current configuration. Though the advantage is that the summing amp is working at lower gain. I find myself wondering about this trade off.
Noise in the summing amp is dominated by three factors:
Input noise voltage density; that depends only on the active device and doesn't change with the number of stems, but the output noise will depend on the actual noise gain. For the 990, it's 1.1 nV/sqrtHz, resulting in  0.28 uV over a 20kHz BW for 1 stem, 1.25 for 8 stems and 3.5uV for 24 stems .
Now the noise contribution of the input noise-current; for the 990, it's 1pA/sqrtHz and depends also on the number of stems. Assuming 5k, the noise contribution is:
For one stem: resistance 2.5k, noise density 2.5nV, noise gain 2, resulting output density 5 nV=>0.7uV for 20k BW
For 8 stems: resistance 550R, noise density 0.55nV, noise gain 9, resulting output density 4.95 nV=>0.69uV for 20k BW
For 24 stems: resistance 200R, noise density 0.20nV, noise gain 25, resulting output density 5 nV=>0.7uV for 20k BW
So there is not much variation there, although it shows that an optimum is found when the actual impedance is matched with the value defined by the ratio of Vn/In.
Finally, the Johnson noise contribution of the combined stems:
For one stem: Z=2.5k =>900nV, noise gain 2=> 1.8uV
For 8 stems: Z=550R =>420nV, noise gain 9=> 3.8uV
For 32 stems: Z=200R =>250nV, noise gain 25=> 6.25uV
It confirms the generally accepted notion that noise increases with the number of stems.
Remenber that all theses noises combine quadratically =>Entot²=En(voltage)²+En(current)²+En(Johnson)²
I may use 990s for this purpose as from what I can tell, having BJT inputs, they operate with very low noise on low source impedance.
Using BJT's is not a guarantee that it will be optimized for low impedance. There are many BJT input stages that are optimized for 10k and more. The operating point of the device must be chosen in accordance with the intended source impedance. In the case of the 990, they have chosen to run the input devices at about 2mA, which puts the optimum source at 800 ohms for each transistor, or 1100 ohms for the differential pair.
 
joaquins said:
The input noise of the 990 is not only about the input devices being BJT but the specific BJT used and the polarization used to get a balance between voltage noise and current noise. They are optimized for input impedance about 600Ω IIRC, so you would need to be close to that, 24 channels, you could go as high as 15k and the noise from the resistors will be the same as the Ein. You will be under that number so you will be fine, but if you need a lot of bus being feed by a single opamp, at the channel, it needs to be able to drive all those summing resistors. Then you make the tradeoff, and the critical value will tell you how many mixes you can have or how much driving capability you need at the channel amp, without compromising the noise performance.

JS

Plan is only to run 2 busses, so not too worried about loading down the channel amps. At 4.7k bus resistors, max load should be 2.35K. Actually since I'm attenuating when both buses are assigned with an additional 2k, my max load on the channel amps is only 3.35K. I could probably go lower with the 2520s being specified down to 70 Ohms, but at some point you need current to drive that load, and I'm trying to keep the supply under 1A for the project. I've got a regulated power supply built with LM317 / LM337 which maxes out around 1.5A. 

The Quiescent current alone on the 2520's is around 20mA (with the +/18V supply I'm using) * 24 channels and I've already eaten up half of that 1 Amp.

Thanks again for the notes / input!
 
abbey road d enfer said:
Using BJT's is not a guarantee that it will be optimized for low impedance. There are many BJT input stages that are optimized for 10k and more. The operating point of the device must be chosen in accordance with the intended source impedance. In the case of the 990, they have chosen to run the input devices at about 2mA, which puts the optimum source at 800 ohms for each transistor, or 1100 ohms for the differential pair.

Thanks for taking the time to explain the noise factors in the summing amp. Took me a few reads, and there were some unfamiliar terms, but after a bit more searching I think I'm tracking.

Regarding the optimum source impedance. I'm probably asking for more information than I have the capacity to chew on right now, but how did you arrive at the 800 ohms based on the 2mA specification? And what would be the effect of running with a smaller source impedance (i.e. 200 Ohms in my case).

Could I use a 600 Ohm series resistor on the bus to raise the impedance, or am I just asking for trouble there?

Thanks again for all of the advice!
 
bjoneson said:
abbey road d enfer said:
Using BJT's is not a guarantee that it will be optimized for low impedance. There are many BJT input stages that are optimized for 10k and more. The operating point of the device must be chosen in accordance with the intended source impedance. In the case of the 990, they have chosen to run the input devices at about 2mA, which puts the optimum source at 800 ohms for each transistor, or 1100 ohms for the differential pair.

Thanks for taking the time to explain the noise factors in the summing amp. Took me a few reads, and there were some unfamiliar terms, but after a bit more searching I think I'm tracking.

Regarding the optimum source impedance. I'm probably asking for more information than I have the capacity to chew on right now, but how did you arrive at the 800 ohms based on the 2mA specification?
That's direct from the 990 page. You can corroborate it with the LM394 specs.
http://www.ti.com/lit/ds/snls385a/snls385a.pdf
And what would be the effect of running with a smaller source impedance (i.e. 200 Ohms in my case).
My calculations show that the degradation is minimal (about 0.1dB).
Could I use a 600 Ohm series resistor on the bus to raise the impedance,
Definitely no, because that would increase the source impedance by a factor 4 which would only increase the effects of noise current and Johnson, without any improvement whatsoever.
One answer would be to tune the input devices operating point to make its optimum impedance closer to 200 ohms, but it's not really feasible because that would imply an operating current of about 10mA, which is outside specs and would lead to excessive dissipation. BTW I realised I have screwed the calcualtion of input noise voltage contribution to output noise in the previous post. I'll amend it right now.
 
This is a good mental exercise but generally the stems you are summing will have significantly higher noise floors than your sum bus amp and resistors.

Pay attention to layout and circuit design as any master section signal ground (0V) node error (wrt average of stem grounds) can be amplified by the full noise gain of the sum amp (generally N+1).

After decades of messing with these I find noise is only one factor in sum bus signal integrity. When combining a lot of stems phase shift and distortion also degrades due to elevated noise gain. While often less apparent, it all matters.

JR
 
abbey road d enfer said:
ruffrecords said:
In your case the preceding amp has a gain of 10dB but it uses a 31K4 feedback resistor and it is this that will determine the noise at the output. The Johnson noise in 31K4 is just shy of -106dBu so the op amp output noise cannot be better than this. 
Not exactly. There is a 10k resistor to ground so the impedance at the non-inverting input is about 7.5k, resulting in an intrinsic noise of about -111 dBu.

I am a little confused.  I understand the derivation of the 7.5K noise resistance but is its noise not multiplied by the noise gain of the amp, raising it by 10dB?

Cheers

Ian
 
ruffrecords said:
abbey road d enfer said:
ruffrecords said:
In your case the preceding amp has a gain of 10dB but it uses a 31K4 feedback resistor and it is this that will determine the noise at the output. The Johnson noise in 31K4 is just shy of -106dBu so the op amp output noise cannot be better than this. 
Not exactly. There is a 10k resistor to ground so the impedance at the non-inverting input is about 7.5k, resulting in an intrinsic noise of about -111 dBu.

I am a little confused.  I understand the derivation of the 7.5K noise resistance but is its noise not multiplied by the noise gain of the amp, raising it by 10dB?
Absolutely. This proves that one is never too precise about expressing noise notions; I should have expressed myself better. -111 is just the Johnson noise of the equivalent 7.5k resistor. In other words it's the resistors' contribution to the input noise. The noise gain is about 12dB then the resistors' contribution to the output noise  is -99.
 
Perhaps TMI but when micro managing this noise, the total input noise before multiplication by the noise gain, is the square root of the sum of the three different (incoherent) noise terms squared, so for a typical bipolar op amp you will have the square root of the thermal noise of the resistance squared, plus the noise voltage of the active stage squared, plus the noise current of the active device times the resistance squared.  Then that square root of the sum gets multiplied by the noise gain.

This suggests a few things, #1 a dominant noise source will generally swamp out other lesser noise sources that are several dB down, and #2 the resistance factors in twice, first for it's own thermal noise, and again times the input noise current as a separate noise term.

I won't presume to know which of these three are more or less significant for this hypothetical, while JFET input op amps generally have very low noise current so that term drops in significance , while JFET op amps generally have higher noise voltage, so no free lunch there, while some modern op amps are very respectable (I wish we had them a few decades ago).

JR
 
I've put together a PCB layout for the input module for the modular summing box. This was about my 4th iteration. I tried to keep all of the signal traces on the top layer, then placed power rail, and power ground traces on the bottom layer, with a copper fill for audio ground.

I know and have read lot's of back and forth on "star grounding" the board (which frankly I just can't find to be practical with this many audio ground points), vs. plane. I can't justify the cost of a 4 layer board to provide rail planes as well.

Hoping someone would be willing to give a cursory look and see if anything look egregious. I'm planning to do a very small run of 6 boards for my project, but it's a small chunk of change (around $200), and while I don't expect perfection, I don't want to purchase a $200 set of paper weights either.

Thanks to the integration within KiCad, I feel very confident that the PCB represents the circuit. I'm more concerned about power and grounding, potential for loops, etc...

I apologize for the image, a screenshot was the only way I could find to get a quick and dirty snapshot of the board.

Many thanks!

-Bob
 

Attachments

  • 4INPUTPCB.png
    4INPUTPCB.png
    204.1 KB · Views: 48
One potential thought that came to mind was to remove the power ground traces from the bottom, opening up the audio ground plane a bit more, and using a fill on the top layer for power ground.
 
bjoneson said:
One potential thought that came to mind was to remove the power ground traces from the bottom, opening up the audio ground plane a bit more, and using a fill on the top layer for power ground.
Considering it's an audio design, not RF, and all connections to the outside world are via the connector, there is no justification for separate audio and power "grounds".
If I was anal about crosstalk, I would have four separate ground planes joining only at the connector. That would probably reduce crosspath-induced crosstalk from -100dB to -120  :eek:
I don't know Kicad but with Eagle it is feasible either by editing manually the ground plane contour, or by creating four separate grounds and merging them after routing.
 
Follow the whole path. (For the moment, disregard JR's point that nearly any source signal has more hiss than the bus.)

The INA2134 is full of 25K resistors. Without untangling the topology, I would scratch-mark that as a 25K source resistance.

At full-gain, this dominates ALL other noise sources.

And the INA2134 is too sweet to discard casually.

The fact that TI can get away with selling the '2134 by the crate suggests that 25K *IS* low-enough for most line inputs. They are no fools, and some of their customers are sharp also. (IIRC, INA parts started at a specialty company that TI recently bought.)

But move on. The 10K pot is clearly small next to 25K, and in fact will be 0-2k5 over its travel. The next 10K looks pointless but should not be a big factor.

Now the gain-set network for the '2520 DOA. WHY is the lower leg 10K? This has *double* the hiss of the worst-case pot setting. Is it because the '2520 is a weak thing which can't pull anything lower? No, in fact we could scale the gain-set down by a factor of 100X, to 100r+215r, and the '2520 would "almost" pull it. THD and power demand would rise a hair, so ponder a 10X reduction (1k+2.15k). The '2520 can surely pull 3K, even with the several 4k7 bus loads. And 1K is <2k5, the worst-case pot resistance. We could maybe even go 470r+1k, which is probably diminishing-returns against the '2520's self-hiss.

With 10k pot, ~~1k gain-set, now the 4k7 bus resistor is not "as low as it could be". If we replace the '2134 with a dead-short, the 4k7 bus resistors dominate. (All assuming a hiss-free sum amp-- at 4k7 level we can probably come close with available devices.)

If we run the fader at -7dB, the '2134's self-hiss comes through equal to the 4k7 mix-r's self-hiss, a 3dB noise figure.

Many similar inputs summed will cause mix-sum to be greater than any single input. 16 trumpets (identical volumes but not identical) will sum 12dB higher than any one trumpet (or sax or singer or string).

And the mix-amp *probably* does not have higher output than the channel amps (all run on the same supply).

If we allow for this by working the faders at -20dB, now the 25K of the '2134s acts-like about 0.25k. The faders will be set about 1k up from the bottom. The gain of 3.15 (and assuming low-R gain-set) makes the self-hiss of 1k look like 10k. This barely edges the hiss of the 4k7 mix-resistors. And makes us wonder if we need 10dB gain post-pot... can we run faders at -10dB and get to the same point? (We may need the gain on smaller 3-in mixes.)
 

Attachments

  • bjoneson-1.gif
    bjoneson-1.gif
    4.2 KB · Views: 58
me> The INA2134 is full of 25K resistors. Without untangling the topology, I would scratch-mark that as a 25K source resistance.

The rated output hiss of INA is 7 microVolts. Counting on thumbs, that is like a 240K resistor. Makes any diddling of 10K 4k7 1k kinda moot.

There are better diff-amp topologies and implementations.

Side-note-- why the DOA 2520? Fancy opamps have use at very low levels (low hiss) and at very high levels (favorable distortions). Here it seems to have no particular advantage. Fader up, the mix-amp clips first, and INA hiss drowns DOA hiss. Fader down, the INA2134 clips first.
 
PRR said:
Follow the whole path. (For the moment, disregard JR's point that nearly any source signal has more hiss than the bus.)

The INA2134 is full of 25K resistors. Without untangling the topology, I would scratch-mark that as a 25K source resistance.

At full-gain, this dominates ALL other noise sources.

And the INA2134 is too sweet to discard casually.

The fact that TI can get away with selling the '2134 by the crate suggests that 25K *IS* low-enough for most line inputs. They are no fools, and some of their customers are sharp also. (IIRC, INA parts started at a specialty company that TI recently bought.)

Burl Brown is the company that originally made the INA, OPA, and DRV chips. I've seen them under the hood of some pretty decent equipment (including several Dangerous pieces). That's one of the things that drew me to them. THAT has some newer stuff that looks like it specs out better, but the BB based stuff seems to have a solid reputation in these types of applications.

PRR said:
But move on. The 10K pot is clearly small next to 25K, and in fact will be 0-2k5 over its travel. The next 10K looks pointless but should not be a big factor.

Are you referring to the shunt resistor at the non inverting input of the 2520? If so, that's actually a 100K resistor (I'm realizing the schematic I posted is a bit hard to read, and will likely get a revised one posted at a better resolution). With the coupling capacitor ahead of the pot, was thinking the non inverting input needed a DC path to earth for input current. Now that I look at it, it seems as though that path is provided by the pot itself. I'm thinking now, I should just remove that resistor from the design.

PRR said:
Now the gain-set network for the '2520 DOA. WHY is the lower leg 10K? This has *double* the hiss of the worst-case pot setting. Is it because the '2520 is a weak thing which can't pull anything lower? No, in fact we could scale the gain-set down by a factor of 100X, to 100r+215r, and the '2520 would "almost" pull it. THD and power demand would rise a hair, so ponder a 10X reduction (1k+2.15k). The '2520 can surely pull 3K, even with the several 4k7 bus loads. And 1K is <2k5, the worst-case pot resistance. We could maybe even go 470r+1k, which is probably diminishing-returns against the '2520's self-hiss.

That's a fair question, and good explanation of the trade off. The honest truth is, I was referencing another design and the math was easy with 10K. Totally agree that DOA is more than capable of driving lower values there.  I like the idea of scaling down by a factor of 10 to 1k+2.15k. Sometimes somebody just needs to point out the obvious.

PRR said:
With 10k pot, ~~1k gain-set, now the 4k7 bus resistor is not "as low as it could be". If we replace the '2134 with a dead-short, the 4k7 bus resistors dominate. (All assuming a hiss-free sum amp-- at 4k7 level we can probably come close with available devices.)

If we run the fader at -7dB, the '2134's self-hiss comes through equal to the 4k7 mix-r's self-hiss, a 3dB noise figure.

Many similar inputs summed will cause mix-sum to be greater than any single input. 16 trumpets (identical volumes but not identical) will sum 12dB higher than any one trumpet (or sax or singer or string).

And the mix-amp *probably* does not have higher output than the channel amps (all run on the same supply).

If we allow for this by working the faders at -20dB, now the 25K of the '2134s acts-like about 0.25k. The faders will be set about 1k up from the bottom. The gain of 3.15 (and assuming low-R gain-set) makes the self-hiss of 1k look like 10k. This barely edges the hiss of the 4k7 mix-resistors. And makes us wonder if we need 10dB gain post-pot... can we run faders at -10dB and get to the same point? (We may need the gain on smaller 3-in mixes.)

A couple things going on here. I actually was planning to run the summing amps on +/- 24V rails. The supply I'm currently using provides both +/- 18V, and +/- 24V. Most of the monolithic stuff caps at 18V rails. I'm considering 990s for summing duty on 24V rails to allow for additional headroom on the bus.

You provided a pretty thorough explanation there, but I'm not sure what you mean by "running the faders at -10dB".

Thanks for taking the time to take a look. There was some really practical information here, that I think is going to directly improve my project.

 

Latest posts

Back
Top