<?xml version="1.0" encoding="UTF-8"?>
<informationTable xmlns="http://www.sec.gov/edgar/document/thirteenf/informationtable" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <infoTable>
    <nameOfIssuer>Abbott Laboratories</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>002824100</cusip>
    <value>40239453</value>
    <shrsOrPrnAmt>
      <sshPrnamt>391930</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>350193</Sole>
      <Shared>0</Shared>
      <None>41737</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>AbbVie</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>00287Y109</cusip>
    <value>170005626</value>
    <shrsOrPrnAmt>
      <sshPrnamt>781671</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>758159</Sole>
      <Shared>0</Shared>
      <None>23512</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Adobe</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>00724F101</cusip>
    <value>2317282</value>
    <shrsOrPrnAmt>
      <sshPrnamt>9533</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>820</Sole>
      <Shared>0</Shared>
      <None>8713</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Advanced Micro Devices</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>007903107</cusip>
    <value>85671290</value>
    <shrsOrPrnAmt>
      <sshPrnamt>421134</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>408150</Sole>
      <Shared>0</Shared>
      <None>12984</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Aecom Technology</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>00766T100</cusip>
    <value>873731</value>
    <shrsOrPrnAmt>
      <sshPrnamt>10301</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>10301</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Agnico-Eagle Mines</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>008474108</cusip>
    <value>4138356</value>
    <shrsOrPrnAmt>
      <sshPrnamt>20388</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>5300</Sole>
      <Shared>0</Shared>
      <None>15088</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Air Products &amp; Chemicals</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>009158106</cusip>
    <value>35488001</value>
    <shrsOrPrnAmt>
      <sshPrnamt>122166</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>120862</Sole>
      <Shared>0</Shared>
      <None>1304</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Alphabet inc., C</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>02079K107</cusip>
    <value>574007</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2001</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2001</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Alphabet, Class A</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>02079K305</cusip>
    <value>411557023</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1431204</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1375838</Sole>
      <Shared>0</Shared>
      <None>55366</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Amazon.com</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>023135106</cusip>
    <value>6257264</value>
    <shrsOrPrnAmt>
      <sshPrnamt>30044</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>27275</Sole>
      <Shared>0</Shared>
      <None>2769</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Amdocs</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G02602103</cusip>
    <value>274092</value>
    <shrsOrPrnAmt>
      <sshPrnamt>4200</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>4200</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Amphenol Corp Class A</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>032095101</cusip>
    <value>4062532</value>
    <shrsOrPrnAmt>
      <sshPrnamt>32153</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>13400</Sole>
      <Shared>0</Shared>
      <None>18753</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Aon PLC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G0403H108</cusip>
    <value>642009</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1989</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1989</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Apple</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>037833100</cusip>
    <value>451781321</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1780138</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1669536</Sole>
      <Shared>0</Shared>
      <None>110602</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Applied Materials</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>038222105</cusip>
    <value>543446</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1590</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1590</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Argan, Inc.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>04010E109</cusip>
    <value>639964</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1175</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1175</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ASML Holding NY</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>N07059210</cusip>
    <value>418250065</value>
    <shrsOrPrnAmt>
      <sshPrnamt>316657</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>314950</Sole>
      <Shared>0</Shared>
      <None>1707</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Astrazeneca PLC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G0593M107</cusip>
    <value>161970179</value>
    <shrsOrPrnAmt>
      <sshPrnamt>821571</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>804700</Sole>
      <Shared>0</Shared>
      <None>16871</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>AutoZone</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>053332102</cusip>
    <value>138370758</value>
    <shrsOrPrnAmt>
      <sshPrnamt>40965</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>40203</Sole>
      <Shared>0</Shared>
      <None>762</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Badger Meter</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>056525108</cusip>
    <value>340198</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2233</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2233</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Banco Santander ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>05964H105</cusip>
    <value>290220</value>
    <shrsOrPrnAmt>
      <sshPrnamt>26000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>20000</Sole>
      <Shared>0</Shared>
      <None>6000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Barrick Mining Corporation</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>06849F108</cusip>
    <value>8649867</value>
    <shrsOrPrnAmt>
      <sshPrnamt>212061</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>210000</Sole>
      <Shared>0</Shared>
      <None>2061</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>BHP Biliton ADR</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>088606108</cusip>
    <value>874699</value>
    <shrsOrPrnAmt>
      <sshPrnamt>12025</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>8250</Sole>
      <Shared>0</Shared>
      <None>3775</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Boston Scientific</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>101137107</cusip>
    <value>2684884</value>
    <shrsOrPrnAmt>
      <sshPrnamt>42787</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>27452</Sole>
      <Shared>0</Shared>
      <None>15335</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Broadcom Ltd</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>11135F101</cusip>
    <value>463392208</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1497180</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1459198</Sole>
      <Shared>0</Shared>
      <None>37982</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Camden Property Trust</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>133131102</cusip>
    <value>551779</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5650</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1050</Sole>
      <Shared>0</Shared>
      <None>4600</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Cameco Corp</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>13321L108</cusip>
    <value>740775</value>
    <shrsOrPrnAmt>
      <sshPrnamt>6820</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>6820</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Canadian National Railway</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>136375102</cusip>
    <value>41135029</value>
    <shrsOrPrnAmt>
      <sshPrnamt>400263</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>400263</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Caterpillar</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>149123101</cusip>
    <value>208996</value>
    <shrsOrPrnAmt>
      <sshPrnamt>295</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>295</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Chevron Corporation</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>166764100</cusip>
    <value>213728</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1033</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1033</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Chubb</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>H1467J104</cusip>
    <value>381338</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1170</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>810</Sole>
      <Shared>0</Shared>
      <None>360</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Church &amp; Dwight</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>171340102</cusip>
    <value>111020564</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1189676</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1171534</Sole>
      <Shared>0</Shared>
      <None>18142</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Cisco Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>17275R102</cusip>
    <value>138773051</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1788543</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1740730</Sole>
      <Shared>0</Shared>
      <None>47813</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Colgate-Palmolive</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>194162103</cusip>
    <value>38374978</value>
    <shrsOrPrnAmt>
      <sshPrnamt>450252</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>450252</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Comfort Systems USA</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>199908104</cusip>
    <value>2688341</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1950</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1950</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ConocoPhillips</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>20825C104</cusip>
    <value>1989900</value>
    <shrsOrPrnAmt>
      <sshPrnamt>15075</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>15075</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Copart</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>217204106</cusip>
    <value>1220233</value>
    <shrsOrPrnAmt>
      <sshPrnamt>36754</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>4500</Sole>
      <Shared>0</Shared>
      <None>32254</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Corning</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>219350105</cusip>
    <value>271940</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Corteva</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>22052L104</cusip>
    <value>2941151</value>
    <shrsOrPrnAmt>
      <sshPrnamt>35135</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>12010</Sole>
      <Shared>0</Shared>
      <None>23125</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Costco Wholesale</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>22160K105</cusip>
    <value>4131199</value>
    <shrsOrPrnAmt>
      <sshPrnamt>4146</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>3414</Sole>
      <Shared>0</Shared>
      <None>732</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>CRH PLC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G25508105</cusip>
    <value>27788998</value>
    <shrsOrPrnAmt>
      <sshPrnamt>264355</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>248503</Sole>
      <Shared>0</Shared>
      <None>15852</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>CrowdStrike Holdings Inc Class A</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>22788C105</cusip>
    <value>210236</value>
    <shrsOrPrnAmt>
      <sshPrnamt>538</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>538</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>CSW Industrials, Inc.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>126402106</cusip>
    <value>342142</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1313</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1313</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Danaher</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>235851102</cusip>
    <value>1417450</value>
    <shrsOrPrnAmt>
      <sshPrnamt>7476</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>7476</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Dominion Energy</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>25746U109</cusip>
    <value>769535</value>
    <shrsOrPrnAmt>
      <sshPrnamt>12448</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>8693</Sole>
      <Shared>0</Shared>
      <None>3755</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Eaton Corp PLC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G29183103</cusip>
    <value>71928510</value>
    <shrsOrPrnAmt>
      <sshPrnamt>201103</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>187536</Sole>
      <Shared>0</Shared>
      <None>13567</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Eli Lilly</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>532457108</cusip>
    <value>510568006</value>
    <shrsOrPrnAmt>
      <sshPrnamt>555104</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>548339</Sole>
      <Shared>0</Shared>
      <None>6765</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>EMCOR Group</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>29084Q100</cusip>
    <value>1971288</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2670</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>2300</Sole>
      <Shared>0</Shared>
      <None>370</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Emerson Electric</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>291011104</cusip>
    <value>817434</value>
    <shrsOrPrnAmt>
      <sshPrnamt>6239</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>6239</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Enphase Energy</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>29355A107</cusip>
    <value>414284</value>
    <shrsOrPrnAmt>
      <sshPrnamt>10957</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>10957</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Equinix</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>29444U700</cusip>
    <value>1365474</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1393</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>155</Sole>
      <Shared>0</Shared>
      <None>1238</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Equity Residential Property Trust</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>29476L107</cusip>
    <value>532350</value>
    <shrsOrPrnAmt>
      <sshPrnamt>9000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1665</Sole>
      <Shared>0</Shared>
      <None>7335</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Exxon Mobil</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>30231G102</cusip>
    <value>268741</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1584</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1584</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Fastenal</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>311900104</cusip>
    <value>1478304</value>
    <shrsOrPrnAmt>
      <sshPrnamt>31860</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>3490</Sole>
      <Shared>0</Shared>
      <None>28370</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Federal Signal</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>313855108</cusip>
    <value>361296</value>
    <shrsOrPrnAmt>
      <sshPrnamt>3341</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>3341</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Ferguson Enterprises Inc</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>31488V107</cusip>
    <value>56403435</value>
    <shrsOrPrnAmt>
      <sshPrnamt>241805</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>225450</Sole>
      <Shared>0</Shared>
      <None>16355</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>First Solar</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>336433107</cusip>
    <value>841906</value>
    <shrsOrPrnAmt>
      <sshPrnamt>4268</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>2500</Sole>
      <Shared>0</Shared>
      <None>1768</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Floor &amp; Decor Holdings, Inc. Class</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>339750101</cusip>
    <value>489458</value>
    <shrsOrPrnAmt>
      <sshPrnamt>9635</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1055</Sole>
      <Shared>0</Shared>
      <None>8580</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Fortinet Inc.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>34959E109</cusip>
    <value>1096928</value>
    <shrsOrPrnAmt>
      <sshPrnamt>13423</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>12170</Sole>
      <Shared>0</Shared>
      <None>1253</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>GE Healthcare Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>36266G107</cusip>
    <value>616063</value>
    <shrsOrPrnAmt>
      <sshPrnamt>8655</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>8655</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>GE Vernova Inc</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>36828A101</cusip>
    <value>535088</value>
    <shrsOrPrnAmt>
      <sshPrnamt>613</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>613</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Genuine Parts</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>372460105</cusip>
    <value>16075058</value>
    <shrsOrPrnAmt>
      <sshPrnamt>152010</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>150210</Sole>
      <Shared>0</Shared>
      <None>1800</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>GlaxoSmithKline ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>37733W204</cusip>
    <value>1840366</value>
    <shrsOrPrnAmt>
      <sshPrnamt>33346</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>22000</Sole>
      <Shared>0</Shared>
      <None>11346</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Home Depot</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>437076102</cusip>
    <value>22820362</value>
    <shrsOrPrnAmt>
      <sshPrnamt>69386</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>65344</Sole>
      <Shared>0</Shared>
      <None>4042</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Illinois Tool Works</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>452308109</cusip>
    <value>79703921</value>
    <shrsOrPrnAmt>
      <sshPrnamt>306212</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>300182</Sole>
      <Shared>0</Shared>
      <None>6030</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Infosys ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>456788108</cusip>
    <value>2837100</value>
    <shrsOrPrnAmt>
      <sshPrnamt>210000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>210000</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>International Business Machines</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>459200101</cusip>
    <value>395580</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1632</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1632</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>International Seaways, Inc.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>Y41053102</cusip>
    <value>393698</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5402</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>5402</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Intuit</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>461202103</cusip>
    <value>1110352</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2568</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2568</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Intuitive Surgical</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>46120E602</cusip>
    <value>354040</value>
    <shrsOrPrnAmt>
      <sshPrnamt>768</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>768</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Itron</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>465741106</cusip>
    <value>268890</value>
    <shrsOrPrnAmt>
      <sshPrnamt>3000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>3000</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Jabil Inc</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>466313103</cusip>
    <value>7597018</value>
    <shrsOrPrnAmt>
      <sshPrnamt>28600</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>28600</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Johnson &amp; Johnson</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>478160104</cusip>
    <value>43798026</value>
    <shrsOrPrnAmt>
      <sshPrnamt>179177</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>165093</Sole>
      <Shared>0</Shared>
      <None>14084</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Johnson Controls International</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G51502105</cusip>
    <value>341051156</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2604438</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>2570291</Sole>
      <Shared>0</Shared>
      <None>34147</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>JP Morgan Chase</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>46625H100</cusip>
    <value>845122</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2873</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1200</Sole>
      <Shared>0</Shared>
      <None>1673</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Kenvue Inc</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>49177J102</cusip>
    <value>28913601</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1677123</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1676136</Sole>
      <Shared>0</Shared>
      <None>987</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Kimberly-Clark</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>494368103</cusip>
    <value>29048757</value>
    <shrsOrPrnAmt>
      <sshPrnamt>301117</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>300167</Sole>
      <Shared>0</Shared>
      <None>950</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Limbach Holdings, Inc</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>53263P105</cusip>
    <value>401567</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5145</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>5145</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Lincoln Electric Holdings</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>533900106</cusip>
    <value>66996293</value>
    <shrsOrPrnAmt>
      <sshPrnamt>268975</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>268975</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Linde</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G54950103</cusip>
    <value>70856498</value>
    <shrsOrPrnAmt>
      <sshPrnamt>142925</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>135744</Sole>
      <Shared>0</Shared>
      <None>7181</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Lowe's</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>548661107</cusip>
    <value>97921993</value>
    <shrsOrPrnAmt>
      <sshPrnamt>414432</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>403038</Sole>
      <Shared>0</Shared>
      <None>11394</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Mastercard, Class A</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>57636Q104</cusip>
    <value>2658191</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5320</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>4791</Sole>
      <Shared>0</Shared>
      <None>529</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Matrix Service Company</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>576853105</cusip>
    <value>202117</value>
    <shrsOrPrnAmt>
      <sshPrnamt>17606</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>17606</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Merck &amp; Co</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>58933Y105</cusip>
    <value>18939781</value>
    <shrsOrPrnAmt>
      <sshPrnamt>157451</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>140076</Sole>
      <Shared>0</Shared>
      <None>17375</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Meta Platforms Inc Cl A</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>30303M102</cusip>
    <value>2170661</value>
    <shrsOrPrnAmt>
      <sshPrnamt>3794</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>3200</Sole>
      <Shared>0</Shared>
      <None>594</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Micron Technology</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>595112103</cusip>
    <value>600680</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1778</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>255</Sole>
      <Shared>0</Shared>
      <None>1523</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Microsoft</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>594918104</cusip>
    <value>387666640</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1047266</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1016296</Sole>
      <Shared>0</Shared>
      <None>30970</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Mid-America Apartment Communities</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>59522J103</cusip>
    <value>420703</value>
    <shrsOrPrnAmt>
      <sshPrnamt>3445</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>775</Sole>
      <Shared>0</Shared>
      <None>2670</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Monolithic Power Systems</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>609839105</cusip>
    <value>7175656</value>
    <shrsOrPrnAmt>
      <sshPrnamt>6563</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>5895</Sole>
      <Shared>0</Shared>
      <None>668</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Monster Beverage</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>61174X109</cusip>
    <value>2066922</value>
    <shrsOrPrnAmt>
      <sshPrnamt>28525</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>27900</Sole>
      <Shared>0</Shared>
      <None>625</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Moody's</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>615369105</cusip>
    <value>1902923</value>
    <shrsOrPrnAmt>
      <sshPrnamt>4362</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>4362</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Motorola Solutions</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>620076307</cusip>
    <value>2645047</value>
    <shrsOrPrnAmt>
      <sshPrnamt>6095</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>6000</Sole>
      <Shared>0</Shared>
      <None>95</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NextEra Energy</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>65339F101</cusip>
    <value>1489702</value>
    <shrsOrPrnAmt>
      <sshPrnamt>16039</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>11276</Sole>
      <Shared>0</Shared>
      <None>4763</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NICE Systems ADR</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>653656108</cusip>
    <value>3268547</value>
    <shrsOrPrnAmt>
      <sshPrnamt>29644</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>28495</Sole>
      <Shared>0</Shared>
      <None>1149</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Nike, Class B</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>654106103</cusip>
    <value>18827161</value>
    <shrsOrPrnAmt>
      <sshPrnamt>356440</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>350285</Sole>
      <Shared>0</Shared>
      <None>6155</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Norfolk Southern</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>655844108</cusip>
    <value>978670</value>
    <shrsOrPrnAmt>
      <sshPrnamt>3410</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>3410</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Northern Trust</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>665859104</cusip>
    <value>232663</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1667</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1667</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Novartis ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>66987V109</cusip>
    <value>47506472</value>
    <shrsOrPrnAmt>
      <sshPrnamt>311008</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>298064</Sole>
      <Shared>0</Shared>
      <None>12944</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Novo Nordisk ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>670100205</cusip>
    <value>65805542</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1790627</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1744042</Sole>
      <Shared>0</Shared>
      <None>46585</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>nVent Electric plc</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G6700G107</cusip>
    <value>603109</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5099</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>3255</Sole>
      <Shared>0</Shared>
      <None>1844</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NVIDIA</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>67066G104</cusip>
    <value>385248031</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2208991</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>2141513</Sole>
      <Shared>0</Shared>
      <None>67478</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>NXP Semiconductors</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>N6596X109</cusip>
    <value>389586</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1979</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1979</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>O'Reilly Automotive</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>67103H107</cusip>
    <value>4312631</value>
    <shrsOrPrnAmt>
      <sshPrnamt>46719</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>19500</Sole>
      <Shared>0</Shared>
      <None>27219</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Oracle</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>68389X105</cusip>
    <value>92012450</value>
    <shrsOrPrnAmt>
      <sshPrnamt>625467</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>613850</Sole>
      <Shared>0</Shared>
      <None>11617</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Palo Alto Networks Inc.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>697435105</cusip>
    <value>349979</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2183</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2183</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Phillips 66</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>718546104</cusip>
    <value>1518288</value>
    <shrsOrPrnAmt>
      <sshPrnamt>8334</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>8334</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Procter &amp; Gamble</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>742718109</cusip>
    <value>2107091</value>
    <shrsOrPrnAmt>
      <sshPrnamt>14588</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>3252</Sole>
      <Shared>0</Shared>
      <None>11336</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Prologis Inc</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>74340W103</cusip>
    <value>1640354</value>
    <shrsOrPrnAmt>
      <sshPrnamt>12410</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1075</Sole>
      <Shared>0</Shared>
      <None>11335</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Public Storage International</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>74460D109</cusip>
    <value>1859050</value>
    <shrsOrPrnAmt>
      <sshPrnamt>6863</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>410</Sole>
      <Shared>0</Shared>
      <None>6453</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Qualcomm</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>747525103</cusip>
    <value>7219922</value>
    <shrsOrPrnAmt>
      <sshPrnamt>56064</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>37000</Sole>
      <Shared>0</Shared>
      <None>19064</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Quanta Services</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>74762E102</cusip>
    <value>2681414</value>
    <shrsOrPrnAmt>
      <sshPrnamt>4884</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>3700</Sole>
      <Shared>0</Shared>
      <None>1184</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Quimica y Minera Chile ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>833635105</cusip>
    <value>9808795</value>
    <shrsOrPrnAmt>
      <sshPrnamt>121186</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>116400</Sole>
      <Shared>0</Shared>
      <None>4786</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Rayonier</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>754907103</cusip>
    <value>290206</value>
    <shrsOrPrnAmt>
      <sshPrnamt>14074</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>5346</Sole>
      <Shared>0</Shared>
      <None>8728</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Raytheon Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>75513E101</cusip>
    <value>228972</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1187</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1187</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Republic Services</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>760759100</cusip>
    <value>2849231</value>
    <shrsOrPrnAmt>
      <sshPrnamt>13009</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>4200</Sole>
      <Shared>0</Shared>
      <None>8809</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Rio Tinto ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>767204100</cusip>
    <value>10006659</value>
    <shrsOrPrnAmt>
      <sshPrnamt>107264</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>100825</Sole>
      <Shared>0</Shared>
      <None>6439</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Rockwell Automation</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>773903109</cusip>
    <value>108195501</value>
    <shrsOrPrnAmt>
      <sshPrnamt>301481</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>300181</Sole>
      <Shared>0</Shared>
      <None>1300</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Ross Stores</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>778296103</cusip>
    <value>2395061</value>
    <shrsOrPrnAmt>
      <sshPrnamt>11056</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>2750</Sole>
      <Shared>0</Shared>
      <None>8306</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Salesforce Inc.</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>79466L302</cusip>
    <value>941377</value>
    <shrsOrPrnAmt>
      <sshPrnamt>5043</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>5043</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>SAP ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>803054204</cusip>
    <value>4635190</value>
    <shrsOrPrnAmt>
      <sshPrnamt>27073</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>18405</Sole>
      <Shared>0</Shared>
      <None>8668</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Seagate Technology Holdings PLC</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G7997R103</cusip>
    <value>261304</value>
    <shrsOrPrnAmt>
      <sshPrnamt>667</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>667</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>ServiceNow</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>81762P102</cusip>
    <value>120369774</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1151313</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1138209</Sole>
      <Shared>0</Shared>
      <None>13104</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>SITIME CORP COM</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>82982T106</cusip>
    <value>352257</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1020</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1020</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>SK Telecom ADR</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>78440P306</cusip>
    <value>322190</value>
    <shrsOrPrnAmt>
      <sshPrnamt>11000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>11000</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Smith &amp; Nephew plc ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>83175M205</cusip>
    <value>390989</value>
    <shrsOrPrnAmt>
      <sshPrnamt>12303</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>668</Sole>
      <Shared>0</Shared>
      <None>11635</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Southern Copper</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>84265V105</cusip>
    <value>1252941</value>
    <shrsOrPrnAmt>
      <sshPrnamt>7282</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>7282</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Stryker</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>863667101</cusip>
    <value>120728238</value>
    <shrsOrPrnAmt>
      <sshPrnamt>367413</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>354079</Sole>
      <Shared>0</Shared>
      <None>13334</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Taiwan Semiconductor ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>874039100</cusip>
    <value>673230533</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1992101</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1949221</Sole>
      <Shared>0</Shared>
      <None>42880</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>TE Connectivity</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G87052109</cusip>
    <value>1349851</value>
    <shrsOrPrnAmt>
      <sshPrnamt>6458</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>6458</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Telekomunikasi Indonesia ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>715684106</cusip>
    <value>2241600</value>
    <shrsOrPrnAmt>
      <sshPrnamt>120000</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>120000</Sole>
      <Shared>0</Shared>
      <None>0</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Teradyne</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>880770102</cusip>
    <value>1275667</value>
    <shrsOrPrnAmt>
      <sshPrnamt>4303</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>4303</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Texas Instruments</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>882508104</cusip>
    <value>49966588</value>
    <shrsOrPrnAmt>
      <sshPrnamt>257374</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>250138</Sole>
      <Shared>0</Shared>
      <None>7236</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>TJX Companies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>872540109</cusip>
    <value>194858754</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1220155</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1169863</Sole>
      <Shared>0</Shared>
      <None>50292</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Toronto-Dominion Bank</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>891160509</cusip>
    <value>265934</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2850</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2850</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Tractor Supply</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>892356106</cusip>
    <value>649149</value>
    <shrsOrPrnAmt>
      <sshPrnamt>14330</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>2240</Sole>
      <Shared>0</Shared>
      <None>12090</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Trane</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>G8994E103</cusip>
    <value>167417794</value>
    <shrsOrPrnAmt>
      <sshPrnamt>401732</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>397662</Sole>
      <Shared>0</Shared>
      <None>4070</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Trimble</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>896239100</cusip>
    <value>109752215</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1682542</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1665406</Sole>
      <Shared>0</Shared>
      <None>17136</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Tyler Technologies</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>902252105</cusip>
    <value>577937</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1688</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>608</Sole>
      <Shared>0</Shared>
      <None>1080</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Unilever ADS</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>904767803</cusip>
    <value>45251841</value>
    <shrsOrPrnAmt>
      <sshPrnamt>794310</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>747853</Sole>
      <Shared>0</Shared>
      <None>46457</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>United Parcel Service, Cl B</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>911312106</cusip>
    <value>29847508</value>
    <shrsOrPrnAmt>
      <sshPrnamt>303390</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>300170</Sole>
      <Shared>0</Shared>
      <None>3220</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>United Rentals</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>911363109</cusip>
    <value>211282</value>
    <shrsOrPrnAmt>
      <sshPrnamt>290</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>290</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Visa</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>92826C839</cusip>
    <value>564887</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1869</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>1400</Sole>
      <Shared>0</Shared>
      <None>469</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>W.W. Grainger</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>384802104</cusip>
    <value>89439875</value>
    <shrsOrPrnAmt>
      <sshPrnamt>81994</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>80044</Sole>
      <Shared>0</Shared>
      <None>1950</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Waste Management</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>94106L109</cusip>
    <value>62258383</value>
    <shrsOrPrnAmt>
      <sshPrnamt>270936</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>266680</Sole>
      <Shared>0</Shared>
      <None>4256</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Wells Fargo</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>949746101</cusip>
    <value>203642</value>
    <shrsOrPrnAmt>
      <sshPrnamt>2558</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>2558</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Welltower</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>95040Q104</cusip>
    <value>1424500</value>
    <shrsOrPrnAmt>
      <sshPrnamt>7205</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>430</Sole>
      <Shared>0</Shared>
      <None>6775</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Weyerhaeuser</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>962166104</cusip>
    <value>268486</value>
    <shrsOrPrnAmt>
      <sshPrnamt>10990</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>4000</Sole>
      <Shared>0</Shared>
      <None>6990</None>
    </votingAuthority>
  </infoTable>
  <infoTable>
    <nameOfIssuer>Zscaler</nameOfIssuer>
    <titleOfClass>COM</titleOfClass>
    <cusip>98980G102</cusip>
    <value>200334</value>
    <shrsOrPrnAmt>
      <sshPrnamt>1428</sshPrnamt>
      <sshPrnamtType>SH</sshPrnamtType>
    </shrsOrPrnAmt>
    <investmentDiscretion>SOLE</investmentDiscretion>
    <otherManager>0</otherManager>
    <votingAuthority>
      <Sole>0</Sole>
      <Shared>0</Shared>
      <None>1428</None>
    </votingAuthority>
  </infoTable>
</informationTable>
