소스 검색

Merge branch 'candidate-7.8.x'

Signed-off-by: Richard Chapman <rchapman@hpccsystems.com>
Richard Chapman 5 년 전
부모
커밋
7fc95c3377
33개의 변경된 파일1394개의 추가작업 그리고 231개의 파일을 삭제
  1. 17 6
      common/workunit/workunit.cpp
  2. 1 1
      docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DATASET.xml
  3. 4 3
      docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Decimal.xml
  4. 3 3
      docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-UTF8.xml
  5. 594 4
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Crypto.xml
  6. 36 37
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetLogicalFileAttribute.xml
  7. 2 2
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml
  8. 256 0
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayJson.xml
  9. 2 2
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml
  10. 2 2
      docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml
  11. 6 1
      docs/PT_BR/ECLStandardLibraryReference/SLR-includer.xml
  12. 15 3
      docs/PT_BR/ECLWatch/TheECLWatchMan.xml
  13. 27 27
      docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_CLI.xml
  14. 34 10
      docs/PT_BR/HPCCClientTools/CT_Mods/CT_Overview.xml
  15. 15 11
      docs/PT_BR/HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml
  16. 39 28
      docs/PT_BR/HPCCClientTools/ClientTools.xml
  17. 41 28
      docs/PT_BR/HPCCClientTools/TheECLIDEandHPCCClientTools.xml
  18. 1 1
      docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml
  19. 1 1
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml
  20. 2 4
      docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml
  21. 3 3
      docs/PT_BR/VisualizingECL/VizMods/Choropleth.xml
  22. 14 14
      docs/PT_BR/VisualizingECL/VizMods/MultiD.xml
  23. 41 0
      ecl/regress/issue24245a.ecl
  24. 41 0
      ecl/regress/issue24245b.ecl
  25. 15 15
      esp/src/package-lock.json
  26. 4 4
      esp/src/package.json
  27. 1 1
      esp/src/src/ESPRequest.ts
  28. 3 0
      esp/src/src/WsWorkunits.ts
  29. 57 0
      helm/examples/logging/README.md
  30. 32 0
      helm/examples/logging/azure/README.md
  31. 32 0
      helm/examples/logging/elastic/README.md
  32. 45 17
      plugins/spark/CMakeLists.txt
  33. 8 3
      rtl/eclrtl/rtlds.cpp

+ 17 - 6
common/workunit/workunit.cpp

@@ -15,6 +15,9 @@
     limitations under the License.
 ############################################################################## */
 
+#include <string>
+#include <unordered_set>
+
 #include "jlib.hpp"
 #include "workunit.hpp"
 #include "jprop.hpp"
@@ -5352,6 +5355,16 @@ IConstQuerySetQueryIterator* CWorkUnitFactory::getQuerySetQueriesSorted( WUQuery
         void populateQueryTree(const IPropertyTree* querySetTree, IPropertyTree* queryTree)
         {
             const char* querySetId = querySetTree->queryProp("@id");
+
+            std::unordered_set<std::string> aliasSet;
+            Owned<IPropertyTreeIterator> aliasIter = querySetTree->getElements("Alias");
+            ForEach(*aliasIter)
+            {
+                const char *id = aliasIter->query().queryProp("@id");
+                if (!isEmptyString(id))
+                    aliasSet.insert(id);
+            }
+
             VStringBuffer path("Query%s", xPath.get());
             Owned<IPropertyTreeIterator> iter = querySetTree->getElements(path.str());
             ForEach(*iter)
@@ -5368,9 +5381,7 @@ IConstQuerySetQueryIterator* CWorkUnitFactory::getQuerySetQueriesSorted( WUQuery
                         if (!subset->getValue(match))
                             continue;
                     }
-                    VStringBuffer aliasXPath("Alias[@id='%s']", queryId);
-                    IPropertyTree *alias = querySetTree->queryPropTree(aliasXPath.str());
-                    if (alias)
+                    if (aliasSet.find(queryId) != aliasSet.end())
                         activated = true;
                 }
                 if (activated && (postFilters.activatedFilter == WUQFSNo))
@@ -5395,15 +5406,15 @@ IConstQuerySetQueryIterator* CWorkUnitFactory::getQuerySetQueriesSorted( WUQuery
             Owned<IRemoteConnection> conn = querySDS().connect(querySetXPath.str(), myProcessSession(), 0, SDS_LOCK_TIMEOUT);
             if (!conn)
                 return NULL;
-
+            IPropertyTree *root = conn->queryRoot()->queryBranch(nullptr);
             if (querySet.isEmpty())
             {
-                Owned<IPropertyTreeIterator> querySetIter = conn->queryRoot()->getElements("*");
+                Owned<IPropertyTreeIterator> querySetIter = root->getElements("*");
                 ForEach(*querySetIter)
                     populateQueryTree(&querySetIter->query(), queryTree);
             }
             else
-                populateQueryTree(conn->queryRoot(), queryTree);
+                populateQueryTree(root, queryTree);
             return conn.getClear();
         }
     public:

+ 1 - 1
docs/PT_BR/ECLLanguageReference/ECLR_mods/Recrd-DATASET.xml

@@ -1155,7 +1155,7 @@ personRecord := RECORD
   UNSIGNED2 numChildren;
   DATASET(childPersonRecord) children;
 END;
-123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890
+
 personDataset := DATASET([{'Kevin','Hall',2,[{'Abby',2},{'Nat',2}]},
                           {'Jon','Simms',3,[{'Jen',18},{'Ali',16},{'Andy',13}]}],
                          personRecord);

+ 4 - 3
docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-Decimal.xml

@@ -23,9 +23,10 @@
 
   <para>Um valor decimal <indexterm>
       <primary>compactado</primary>
-    </indexterm> de <emphasis>n</emphasis> dígitos totais (até o máximo de
-  32). Se o valor _<emphasis>y</emphasis> estiver presente, o
-  <emphasis>y</emphasis> define o número das casas decimais no valor.</para>
+    </indexterm> de <emphasis>n</emphasis> dígitos totais. Se o valor de   
+  _<emphasis>y</emphasis> está presente, o <emphasis> y </emphasis> define   
+  o número de casas decimais no valor. Pode haver no máximo 32 dígitos
+  inteiros    e 32 dígitos fracionários.</para>
 
   <para>Se a palavra-chave UNSIGNED for omitida, o nibble mais à direita
   deterá o sinal. As declarações decimais não sinalizadas podem ser

+ 3 - 3
docs/PT_BR/ECLLanguageReference/ECLR_mods/Value-UTF8.xml

@@ -4,7 +4,7 @@
 <sect1 id="UTF8">
   <title>UTF8</title>
 
-  <para><emphasis role="bold">Utf8<indexterm>
+  <para><emphasis role="bold">UTF8<indexterm>
       <primary>UTF8</primary>
     </indexterm>[</emphasis><emphasis>_locale</emphasis><emphasis
   role="bold">]<indexterm>
@@ -27,9 +27,9 @@
 
   <para>Exemplo:</para>
 
-  <programlisting>utf8 FirstName := U'Noël'
+  <programlisting>UTF8 FirstName := U8'Noël';
         // utf-8-encoded string
-UTF8_de MyUnicodeString := U'abcd\353';
+UTF8_de MyUnicodeString := U8'abcd\353';
         // becomes 'abcdë' with a German locale
 </programlisting>
 </sect1>

+ 594 - 4
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/Crypto.xml

@@ -472,8 +472,9 @@ OUTPUT(decryptedStr);</programlisting>
     </informaltable>
 
     <para>A função Decrypt descriptografa o <emphasis>encryptedData</emphasis>
-    fornecido usando as opções definidas no módulo Symmetric
-    Encryption.</para>
+    fornecido usando as opções definidas no módulo Symmetric Encryption. Você
+    só pode descriptografar dados que foram criptografados     pelo método de
+    Criptografia da Biblioteca Padrão.</para>
 
     <para>Exemplo:</para>
 
@@ -666,7 +667,9 @@ OUTPUT( (STRING)myPKEModule.Decrypt(encrypted) );
 
     <para>A função Decrypt descriptografa o <emphasis>encryptedData</emphasis>
     fornecidos, usando as opções especificadas na definição do módulo Public
-    Key Encryption.</para>
+    Key Encryption. Você só pode descriptografar dados que foram
+    criptografados     pelo método de Criptografia da Biblioteca
+    Padrão.</para>
 
     <para>Exemplo:</para>
 
@@ -1044,7 +1047,9 @@ OUTPUT( (STRING)MyPKEModule.Decrypt(encrypted));</programlisting>
 
     <para>A função Decrypt descriptografa o <emphasis>encryptedData</emphasis>
     fornecidos, usando as opções especificadas na definição do módulo Public
-    Key Encryption From Buffer.</para>
+    Key Encryption From Buffer. Você só pode descriptografar dados que foram
+    criptografados     pelo método de Criptografia da Biblioteca
+    Padrão.</para>
 
     <para>Exemplo:</para>
 
@@ -1282,4 +1287,589 @@ myPKEModule := STD.Crypto.PublicKeyEncryptionFromBuffer('RSA', publicKey, privat
 DATA signature := myPKEModule.Sign((DATA)'The quick brown fox jumps');
 OUTPUT(TRUE = myPKEModule.VerifySignature(signature, (DATA)'The quick brown fox jumps'));</programlisting>
   </sect1>
+
+  <sect1 id="PublicKeyEncryptionFromLFNModule">
+    <title>PublicKeyEncryptionFromLFN Module</title>
+
+    <para><emphasis>myPKEModule</emphasis> :=<emphasis role="bold">
+    STD.Crypto.PublicKeyEncryptionFromLFN(</emphasis><emphasis>pkAlgorithm,
+    publicKeyFile, privateKeyFile, passphrase)<indexterm>
+        <primary>PublicKeyEncryption</primary>
+      </indexterm>;</emphasis></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="120.50pt"/>
+
+        <colspec/>
+
+        <tbody>
+          <row>
+            <entry><emphasis>myPKEModule</emphasis></entry>
+
+            <entry>O nome da estrutura do módulo Public Key Encryption From
+            LFN (Logical FileName)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>pkAlgorithm</emphasis></entry>
+
+            <entry>O algoritmo a ser usado, retornado por <link
+            linkend="SupportedPublicKeyAlgorithms">SupportedPublicKeyAlgorithms()</link></entry>
+          </row>
+
+          <row>
+            <entry><emphasis>publicKeyLFN</emphasis></entry>
+
+            <entry>Arquivo lógico de chave pública formatado PEM</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>privateKeyLFN</emphasis></entry>
+
+            <entry>Arquivo lógico de chave pública formatado PEM</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>passphrase</emphasis></entry>
+
+            <entry>A senha usada para criptografia, descriptografia,
+            assinatura, verificação.</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>Uma Public Key Encryption From LFN é definida na ECL. As definições
+    de funções subsequentes usam as opções definidas no módulo Public Key
+    Encryption from LFN para executar a verificação assimétrica de
+    criptografia/descriptografia/assinatura digital/assinatura.</para>
+
+    <para>Exemplo:</para>
+
+    <programlisting format="linespecific">IMPORT Std;
+
+PublicKeyFile := '~Examples::certificates::public::pubkey.pem'; 
+PrivateKeyFile:= '~Examples::certificates::private::privkey.pem'; 
+       //You can restrict access using file scope security
+       //on the ~Examples::certificates::private scope  
+
+pubKey :=  RECORD
+  STRING  Key;
+END;
+
+dPubKey :=  DATASET([{
+'-----BEGIN PUBLIC KEY-----' + '\n' +
+'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr64RncTp5pV0KMnWRAof' + '\n' +
+'od+3AUS/IDngT39j3Iovv9aI2N8g4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeE' + '\n' +
+'BHqlMDydw9aHOQG17CB30GYsw3Lf8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoy' + '\n' +
+'hIR9MexCldF+3WM/X0IX0ApSs7kuVPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv' + '\n' +
+'/oKj6q7kInEIvhLiGfcm3bpTzWQ66zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3' + '\n' +
+'J6Tk4NY3NySWzE/2/ZOWxZdR79XC+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0' + '\n' +
+'bwIDAQAB' + '\n' +
+'-----END PUBLIC KEY-----' + '\n'
+}],pubKey);
+
+OUTPUT(dPubKey,,PublicKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+PrivKey :=  RECORD
+  STRING  Key;
+END;
+dPrivKey :=  DATASET([{
+'-----BEGIN RSA PRIVATE KEY-----' + '\n' +
+'MIIEowIBAAKCAQEAr64RncTp5pV0KMnWRAofod+3AUS/IDngT39j3Iovv9aI2N8g' + '\n' +
+'4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeEBHqlMDydw9aHOQG17CB30GYsw3Lf' + '\n' +
+'8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoyhIR9MexCldF+3WM/X0IX0ApSs7ku' + '\n' +
+'VPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv/oKj6q7kInEIvhLiGfcm3bpTzWQ6' + '\n' +
+'6zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3J6Tk4NY3NySWzE/2/ZOWxZdR79XC' + '\n' +
+'+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0bwIDAQABAoIBAQCnGAtNYkOOu8wW' + '\n' +
+'F5Oid3aKwnwPytF211WQh3v2AcFU17qle+SMRi+ykBL6+u5RU5qH+HSc9Jm31AjW' + '\n' +
+'V1yPrdYVZInFjYIJCPzorcXY5zDOmMAuzg5PBVV7VhUA0a5GZck6FC8AilDUcEom' + '\n' +
+'GCK6Ul8mR9XELBFQ6keeTo2yDu0TQ4oBXrPBMN61uMHCxh2tDb2yvl8Zz+EllADG' + '\n' +
+'70pztRWNOrCzrC+ARlmmDfYOUgVFtZin53jq6O6ullPLzhkm3/+QFRGYWsFgQB6J' + '\n' +
+'Z9HJtW5YB47RT5RbLHKXeMc6IJW+d+5HrzgTdK79P7wAZk8JCIDyHe2AaNAUzc/G' + '\n' +
+'sB0cNeURAoGBAOKtaVFa6z2F4Q+koMBXCt4m7dCJnaC+qthF249uEOIBeF3ds9Fq' + '\n' +
+'f0jhhvuV0OcN8lYbR/ZlYRJDUs6mHh/2BYSkdeaLKojXTxKR2bA4xQk5dtJCdoPf' + '\n' +
+'0c15AlTgOYk2oNXP/azDICJYT/cdvIdUL9P4IoZthu1FjwG266GacEnNAoGBAMZn' + '\n' +
+'1wRUXS1dbqemoc+g48wj5r3/qsIG8PsZ2Y8W+oYW7diNA5o6acc8YPEWE2RbJDbX' + '\n' +
+'YEADBnRSdzzOdo0JEj4VbNZEtx6nQhBOOrtYKnnqHVI/XOz3VVu6kedUKdBR87KC' + '\n' +
+'eCzO1VcEeZtsTHuLO4t7NmdHGqNxTV+jLvzBoQsrAoGAI+fOD+nz6znirYSpRe5D' + '\n' +
+'tW67KtYxlr28+CcQoUaQ/Au5kjzE9/4DjXrT09QmVAMciNEnc/sZBjiNzFf525wv' + '\n' +
+'wZP/bPZMVYKtbsaVkdlcNJranHGUrkzswbxSRzmBQ5/YmCWrDAuYcnhEqmMWcuU9' + '\n' +
+'8jiS13JP9hOXlHDyIBYDhV0CgYBV6TznuQgnzp9NpQ/H8ijxilItz3lHTu4mLMlR' + '\n' +
+'9mdAjMkszdLTg5uuE+z+N8rp17VUseoRjb3LvLG4+MXIyDbH/0sDdPm+IjqvCNDR' + '\n' +
+'spmh9MgBh0JbsbWaZK0s9/qrI/FcSLZ04JLsfRmTPU/Y5y8/dHjYO6fDQhp44RZF' + '\n' +
+'iCqNxQKBgHf7KZIOKgV4YNyphk1UYWHNz8YY5o7WtaQ51Q+kIbU8PRd9rqJLZyk2' + '\n' +
+'tKf8e6z+wtKjxi8GKQzE/IdkQqiFmB1yEjjRHQ81WS+K5NnjN1t0IEscJqOAwv9s' + '\n' +
+'iIhG5ueb6xoj/N0LuXa8loUT5aChKWxRHEYdegqU48f+qxUcJj9R' + '\n' +
+'-----END RSA PRIVATE KEY-----' + '\n'
+}],PrivKey);
+
+OUTPUT(dPrivKey,,PrivateKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+//PKE Encryption module definition
+MyPKEModule := STD.Crypto.PublicKeyEncryptionFromLFN('RSA', PublicKeyFile, PrivateKeyFile, '');
+
+DATA encrypted := MyPKEModule.Encrypt((DATA)'The quick brown fox jumps over the lazy dog');
+OUTPUT( (STRING)MyPKEModule.Decrypt(encrypted));
+</programlisting>
+
+    <para/>
+  </sect1>
+
+  <sect1 id="EncryptPublicKeyEncryptionFromLFN">
+    <title>Encrypt (PKE From LFN)</title>
+
+    <para><emphasis>myPKEModule</emphasis><emphasis
+    role="bold">.Encrypt(</emphasis><emphasis>inputData</emphasis><emphasis
+    role="bold">)<indexterm>
+        <primary>Encrypt</primary>
+      </indexterm>;</emphasis></para>
+
+    <para><informaltable colsep="1" frame="all" rowsep="1">
+        <tgroup cols="2">
+          <colspec colwidth="120.50pt"/>
+
+          <colspec/>
+
+          <tbody>
+            <row>
+              <entry><emphasis>myPKEModule</emphasis></entry>
+
+              <entry>O nome da estrutura do módulo Public Key Encryption From
+              LFN (Logical FileName)</entry>
+            </row>
+
+            <row>
+              <entry><emphasis>inputData</emphasis></entry>
+
+              <entry>Os dados para criptografar no formato DATA</entry>
+            </row>
+
+            <row>
+              <entry>Return:<emphasis/></entry>
+
+              <entry>Conteúdo criptografado no formato DATA</entry>
+            </row>
+          </tbody>
+        </tgroup>
+      </informaltable></para>
+
+    <para>A função Encrypt criptografa o <emphasis>inputData</emphasis>
+    fornecido, usando as opções especificadas na definição do módulo Public
+    Key Encryption From LFN.</para>
+
+    <para>Exemplo:</para>
+
+    <programlisting format="linespecific">IMPORT Std;
+
+PublicKeyFile := '~Examples::certificates::public::pubkey.pem'; 
+PrivateKeyFile:= '~Examples::certificates::private::privkey.pem'; 
+       //You can restrict access using file scope security
+       //on the ~Examples::certificates::private scope  
+
+pubKey :=  RECORD
+  STRING  Key;
+END;
+
+dPubKey :=  DATASET([{
+'-----BEGIN PUBLIC KEY-----' + '\n' +
+'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr64RncTp5pV0KMnWRAof' + '\n' +
+'od+3AUS/IDngT39j3Iovv9aI2N8g4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeE' + '\n' +
+'BHqlMDydw9aHOQG17CB30GYsw3Lf8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoy' + '\n' +
+'hIR9MexCldF+3WM/X0IX0ApSs7kuVPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv' + '\n' +
+'/oKj6q7kInEIvhLiGfcm3bpTzWQ66zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3' + '\n' +
+'J6Tk4NY3NySWzE/2/ZOWxZdR79XC+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0' + '\n' +
+'bwIDAQAB' + '\n' +
+'-----END PUBLIC KEY-----' + '\n'
+}],pubKey);
+
+OUTPUT(dPubKey,,PublicKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+PrivKey :=  RECORD
+  STRING  Key;
+END;
+dPrivKey :=  DATASET([{
+'-----BEGIN RSA PRIVATE KEY-----' + '\n' +
+'MIIEowIBAAKCAQEAr64RncTp5pV0KMnWRAofod+3AUS/IDngT39j3Iovv9aI2N8g' + '\n' +
+'4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeEBHqlMDydw9aHOQG17CB30GYsw3Lf' + '\n' +
+'8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoyhIR9MexCldF+3WM/X0IX0ApSs7ku' + '\n' +
+'VPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv/oKj6q7kInEIvhLiGfcm3bpTzWQ6' + '\n' +
+'6zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3J6Tk4NY3NySWzE/2/ZOWxZdR79XC' + '\n' +
+'+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0bwIDAQABAoIBAQCnGAtNYkOOu8wW' + '\n' +
+'F5Oid3aKwnwPytF211WQh3v2AcFU17qle+SMRi+ykBL6+u5RU5qH+HSc9Jm31AjW' + '\n' +
+'V1yPrdYVZInFjYIJCPzorcXY5zDOmMAuzg5PBVV7VhUA0a5GZck6FC8AilDUcEom' + '\n' +
+'GCK6Ul8mR9XELBFQ6keeTo2yDu0TQ4oBXrPBMN61uMHCxh2tDb2yvl8Zz+EllADG' + '\n' +
+'70pztRWNOrCzrC+ARlmmDfYOUgVFtZin53jq6O6ullPLzhkm3/+QFRGYWsFgQB6J' + '\n' +
+'Z9HJtW5YB47RT5RbLHKXeMc6IJW+d+5HrzgTdK79P7wAZk8JCIDyHe2AaNAUzc/G' + '\n' +
+'sB0cNeURAoGBAOKtaVFa6z2F4Q+koMBXCt4m7dCJnaC+qthF249uEOIBeF3ds9Fq' + '\n' +
+'f0jhhvuV0OcN8lYbR/ZlYRJDUs6mHh/2BYSkdeaLKojXTxKR2bA4xQk5dtJCdoPf' + '\n' +
+'0c15AlTgOYk2oNXP/azDICJYT/cdvIdUL9P4IoZthu1FjwG266GacEnNAoGBAMZn' + '\n' +
+'1wRUXS1dbqemoc+g48wj5r3/qsIG8PsZ2Y8W+oYW7diNA5o6acc8YPEWE2RbJDbX' + '\n' +
+'YEADBnRSdzzOdo0JEj4VbNZEtx6nQhBOOrtYKnnqHVI/XOz3VVu6kedUKdBR87KC' + '\n' +
+'eCzO1VcEeZtsTHuLO4t7NmdHGqNxTV+jLvzBoQsrAoGAI+fOD+nz6znirYSpRe5D' + '\n' +
+'tW67KtYxlr28+CcQoUaQ/Au5kjzE9/4DjXrT09QmVAMciNEnc/sZBjiNzFf525wv' + '\n' +
+'wZP/bPZMVYKtbsaVkdlcNJranHGUrkzswbxSRzmBQ5/YmCWrDAuYcnhEqmMWcuU9' + '\n' +
+'8jiS13JP9hOXlHDyIBYDhV0CgYBV6TznuQgnzp9NpQ/H8ijxilItz3lHTu4mLMlR' + '\n' +
+'9mdAjMkszdLTg5uuE+z+N8rp17VUseoRjb3LvLG4+MXIyDbH/0sDdPm+IjqvCNDR' + '\n' +
+'spmh9MgBh0JbsbWaZK0s9/qrI/FcSLZ04JLsfRmTPU/Y5y8/dHjYO6fDQhp44RZF' + '\n' +
+'iCqNxQKBgHf7KZIOKgV4YNyphk1UYWHNz8YY5o7WtaQ51Q+kIbU8PRd9rqJLZyk2' + '\n' +
+'tKf8e6z+wtKjxi8GKQzE/IdkQqiFmB1yEjjRHQ81WS+K5NnjN1t0IEscJqOAwv9s' + '\n' +
+'iIhG5ueb6xoj/N0LuXa8loUT5aChKWxRHEYdegqU48f+qxUcJj9R' + '\n' +
+'-----END RSA PRIVATE KEY-----' + '\n'
+}],PrivKey);
+
+OUTPUT(dPrivKey,,PrivateKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+//PKE Encryption module definition
+MyPKEModule := STD.Crypto.PublicKeyEncryptionFromLFN('RSA', PublicKeyFile, PrivateKeyFile, '');
+
+DATA encrypted := MyPKEModule.Encrypt((DATA)'The quick brown fox jumps over the lazy dog');
+OUTPUT( (STRING)MyPKEModule.Decrypt(encrypted));
+</programlisting>
+
+    <para/>
+  </sect1>
+
+  <sect1 id="DecryptPublicKeyEncryptionFromLFN">
+    <title>Decrypt (PKE From LFN)</title>
+
+    <para><emphasis>myPKEModule</emphasis><emphasis
+    role="bold">.Decrypt(</emphasis><emphasis>encryptedData</emphasis><emphasis
+    role="bold">)<indexterm>
+        <primary>Decrypt</primary>
+      </indexterm>;</emphasis></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="120.50pt"/>
+
+        <colspec/>
+
+        <tbody>
+          <row>
+            <entry><emphasis>myPKEModule</emphasis></entry>
+
+            <entry>O nome da estrutura do módulo Public Key Encryption From
+            LFN (Logical FileName)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>encryptedData</emphasis></entry>
+
+            <entry>Os dados para descriptografar no formato DATA</entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis/></entry>
+
+            <entry>Conteúdo descriptografado no formato DATA</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>A função Decrypt descriptografa o <emphasis>encryptedData</emphasis>
+    fornecidos, usando as opções especificadas na definição do módulo Public
+    Key Encryption From LFN. Você só pode descriptografar dados que foram
+    criptografados pelo método Criptografar da Biblioteca Padrão.</para>
+
+    <para>Exemplo:</para>
+
+    <programlisting format="linespecific">IMPORT Std;
+
+PublicKeyFile := '~Examples::certificates::public::pubkey.pem'; 
+PrivateKeyFile:= '~Examples::certificates::private::privkey.pem'; 
+       //You can restrict access using file scope security
+       //on the ~Examples::certificates::private scope  
+
+pubKey :=  RECORD
+  STRING  Key;
+END;
+
+dPubKey :=  DATASET([{
+'-----BEGIN PUBLIC KEY-----' + '\n' +
+'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr64RncTp5pV0KMnWRAof' + '\n' +
+'od+3AUS/IDngT39j3Iovv9aI2N8g4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeE' + '\n' +
+'BHqlMDydw9aHOQG17CB30GYsw3Lf8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoy' + '\n' +
+'hIR9MexCldF+3WM/X0IX0ApSs7kuVPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv' + '\n' +
+'/oKj6q7kInEIvhLiGfcm3bpTzWQ66zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3' + '\n' +
+'J6Tk4NY3NySWzE/2/ZOWxZdR79XC+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0' + '\n' +
+'bwIDAQAB' + '\n' +
+'-----END PUBLIC KEY-----' + '\n'
+}],pubKey);
+
+OUTPUT(dPubKey,,PublicKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+PrivKey :=  RECORD
+  STRING  Key;
+END;
+dPrivKey :=  DATASET([{
+'-----BEGIN RSA PRIVATE KEY-----' + '\n' +
+'MIIEowIBAAKCAQEAr64RncTp5pV0KMnWRAofod+3AUS/IDngT39j3Iovv9aI2N8g' + '\n' +
+'4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeEBHqlMDydw9aHOQG17CB30GYsw3Lf' + '\n' +
+'8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoyhIR9MexCldF+3WM/X0IX0ApSs7ku' + '\n' +
+'VPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv/oKj6q7kInEIvhLiGfcm3bpTzWQ6' + '\n' +
+'6zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3J6Tk4NY3NySWzE/2/ZOWxZdR79XC' + '\n' +
+'+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0bwIDAQABAoIBAQCnGAtNYkOOu8wW' + '\n' +
+'F5Oid3aKwnwPytF211WQh3v2AcFU17qle+SMRi+ykBL6+u5RU5qH+HSc9Jm31AjW' + '\n' +
+'V1yPrdYVZInFjYIJCPzorcXY5zDOmMAuzg5PBVV7VhUA0a5GZck6FC8AilDUcEom' + '\n' +
+'GCK6Ul8mR9XELBFQ6keeTo2yDu0TQ4oBXrPBMN61uMHCxh2tDb2yvl8Zz+EllADG' + '\n' +
+'70pztRWNOrCzrC+ARlmmDfYOUgVFtZin53jq6O6ullPLzhkm3/+QFRGYWsFgQB6J' + '\n' +
+'Z9HJtW5YB47RT5RbLHKXeMc6IJW+d+5HrzgTdK79P7wAZk8JCIDyHe2AaNAUzc/G' + '\n' +
+'sB0cNeURAoGBAOKtaVFa6z2F4Q+koMBXCt4m7dCJnaC+qthF249uEOIBeF3ds9Fq' + '\n' +
+'f0jhhvuV0OcN8lYbR/ZlYRJDUs6mHh/2BYSkdeaLKojXTxKR2bA4xQk5dtJCdoPf' + '\n' +
+'0c15AlTgOYk2oNXP/azDICJYT/cdvIdUL9P4IoZthu1FjwG266GacEnNAoGBAMZn' + '\n' +
+'1wRUXS1dbqemoc+g48wj5r3/qsIG8PsZ2Y8W+oYW7diNA5o6acc8YPEWE2RbJDbX' + '\n' +
+'YEADBnRSdzzOdo0JEj4VbNZEtx6nQhBOOrtYKnnqHVI/XOz3VVu6kedUKdBR87KC' + '\n' +
+'eCzO1VcEeZtsTHuLO4t7NmdHGqNxTV+jLvzBoQsrAoGAI+fOD+nz6znirYSpRe5D' + '\n' +
+'tW67KtYxlr28+CcQoUaQ/Au5kjzE9/4DjXrT09QmVAMciNEnc/sZBjiNzFf525wv' + '\n' +
+'wZP/bPZMVYKtbsaVkdlcNJranHGUrkzswbxSRzmBQ5/YmCWrDAuYcnhEqmMWcuU9' + '\n' +
+'8jiS13JP9hOXlHDyIBYDhV0CgYBV6TznuQgnzp9NpQ/H8ijxilItz3lHTu4mLMlR' + '\n' +
+'9mdAjMkszdLTg5uuE+z+N8rp17VUseoRjb3LvLG4+MXIyDbH/0sDdPm+IjqvCNDR' + '\n' +
+'spmh9MgBh0JbsbWaZK0s9/qrI/FcSLZ04JLsfRmTPU/Y5y8/dHjYO6fDQhp44RZF' + '\n' +
+'iCqNxQKBgHf7KZIOKgV4YNyphk1UYWHNz8YY5o7WtaQ51Q+kIbU8PRd9rqJLZyk2' + '\n' +
+'tKf8e6z+wtKjxi8GKQzE/IdkQqiFmB1yEjjRHQ81WS+K5NnjN1t0IEscJqOAwv9s' + '\n' +
+'iIhG5ueb6xoj/N0LuXa8loUT5aChKWxRHEYdegqU48f+qxUcJj9R' + '\n' +
+'-----END RSA PRIVATE KEY-----' + '\n'
+}],PrivKey);
+
+OUTPUT(dPrivKey,,PrivateKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+//PKE Encryption module definition
+MyPKEModule := STD.Crypto.PublicKeyEncryptionFromLFN('RSA', PublicKeyFile, PrivateKeyFile, '');
+
+DATA encrypted := MyPKEModule.Encrypt((DATA)'The quick brown fox jumps over the lazy dog');
+OUTPUT( (STRING)MyPKEModule.Decrypt(encrypted));
+</programlisting>
+  </sect1>
+
+  <sect1 id="SignPublicKeyEncryptionFromLFN">
+    <title>Sign (PKE From LFN)</title>
+
+    <para><emphasis>mySymEncModule</emphasis><emphasis
+    role="bold">.Sign(</emphasis><emphasis>encryptedData</emphasis><emphasis
+    role="bold">)<indexterm>
+        <primary>Sign</primary>
+      </indexterm>;</emphasis></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="120.50pt"/>
+
+        <colspec/>
+
+        <tbody>
+          <row>
+            <entry><emphasis>myPKEModule</emphasis></entry>
+
+            <entry>O nome da estrutura do módulo Public Key Encryption From
+            LFN (Logical FileName)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>inputData</emphasis></entry>
+
+            <entry>Os dados para assinar no formato DATA</entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis/></entry>
+
+            <entry>Assinatura digital computada no formato DATA</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>A função Sign cria uma assinatura digital do
+    <emphasis>inputData</emphasis> fornecido, usando as opções especificadas
+    na definição do módulo Public Key Encryption From LFN.</para>
+
+    <para>Exemplo:</para>
+
+    <programlisting format="linespecific">IMPORT Std;
+
+PublicKeyFile := '~Examples::certificates::public::pubkey.pem'; 
+PrivateKeyFile:= '~Examples::certificates::private::privkey.pem'; 
+       //You can restrict access using file scope security
+       //on the ~Examples::certificates::private scope  
+
+pubKey :=  RECORD
+  STRING  Key;
+END;
+
+dPubKey :=  DATASET([{
+'-----BEGIN PUBLIC KEY-----' + '\n' +
+'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr64RncTp5pV0KMnWRAof' + '\n' +
+'od+3AUS/IDngT39j3Iovv9aI2N8g4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeE' + '\n' +
+'BHqlMDydw9aHOQG17CB30GYsw3Lf8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoy' + '\n' +
+'hIR9MexCldF+3WM/X0IX0ApSs7kuVPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv' + '\n' +
+'/oKj6q7kInEIvhLiGfcm3bpTzWQ66zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3' + '\n' +
+'J6Tk4NY3NySWzE/2/ZOWxZdR79XC+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0' + '\n' +
+'bwIDAQAB' + '\n' +
+'-----END PUBLIC KEY-----' + '\n'
+}],pubKey);
+
+OUTPUT(dPubKey,,PublicKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+PrivKey :=  RECORD
+  STRING  Key;
+END;
+dPrivKey :=  DATASET([{
+'-----BEGIN RSA PRIVATE KEY-----' + '\n' +
+'MIIEowIBAAKCAQEAr64RncTp5pV0KMnWRAofod+3AUS/IDngT39j3Iovv9aI2N8g' + '\n' +
+'4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeEBHqlMDydw9aHOQG17CB30GYsw3Lf' + '\n' +
+'8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoyhIR9MexCldF+3WM/X0IX0ApSs7ku' + '\n' +
+'VPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv/oKj6q7kInEIvhLiGfcm3bpTzWQ6' + '\n' +
+'6zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3J6Tk4NY3NySWzE/2/ZOWxZdR79XC' + '\n' +
+'+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0bwIDAQABAoIBAQCnGAtNYkOOu8wW' + '\n' +
+'F5Oid3aKwnwPytF211WQh3v2AcFU17qle+SMRi+ykBL6+u5RU5qH+HSc9Jm31AjW' + '\n' +
+'V1yPrdYVZInFjYIJCPzorcXY5zDOmMAuzg5PBVV7VhUA0a5GZck6FC8AilDUcEom' + '\n' +
+'GCK6Ul8mR9XELBFQ6keeTo2yDu0TQ4oBXrPBMN61uMHCxh2tDb2yvl8Zz+EllADG' + '\n' +
+'70pztRWNOrCzrC+ARlmmDfYOUgVFtZin53jq6O6ullPLzhkm3/+QFRGYWsFgQB6J' + '\n' +
+'Z9HJtW5YB47RT5RbLHKXeMc6IJW+d+5HrzgTdK79P7wAZk8JCIDyHe2AaNAUzc/G' + '\n' +
+'sB0cNeURAoGBAOKtaVFa6z2F4Q+koMBXCt4m7dCJnaC+qthF249uEOIBeF3ds9Fq' + '\n' +
+'f0jhhvuV0OcN8lYbR/ZlYRJDUs6mHh/2BYSkdeaLKojXTxKR2bA4xQk5dtJCdoPf' + '\n' +
+'0c15AlTgOYk2oNXP/azDICJYT/cdvIdUL9P4IoZthu1FjwG266GacEnNAoGBAMZn' + '\n' +
+'1wRUXS1dbqemoc+g48wj5r3/qsIG8PsZ2Y8W+oYW7diNA5o6acc8YPEWE2RbJDbX' + '\n' +
+'YEADBnRSdzzOdo0JEj4VbNZEtx6nQhBOOrtYKnnqHVI/XOz3VVu6kedUKdBR87KC' + '\n' +
+'eCzO1VcEeZtsTHuLO4t7NmdHGqNxTV+jLvzBoQsrAoGAI+fOD+nz6znirYSpRe5D' + '\n' +
+'tW67KtYxlr28+CcQoUaQ/Au5kjzE9/4DjXrT09QmVAMciNEnc/sZBjiNzFf525wv' + '\n' +
+'wZP/bPZMVYKtbsaVkdlcNJranHGUrkzswbxSRzmBQ5/YmCWrDAuYcnhEqmMWcuU9' + '\n' +
+'8jiS13JP9hOXlHDyIBYDhV0CgYBV6TznuQgnzp9NpQ/H8ijxilItz3lHTu4mLMlR' + '\n' +
+'9mdAjMkszdLTg5uuE+z+N8rp17VUseoRjb3LvLG4+MXIyDbH/0sDdPm+IjqvCNDR' + '\n' +
+'spmh9MgBh0JbsbWaZK0s9/qrI/FcSLZ04JLsfRmTPU/Y5y8/dHjYO6fDQhp44RZF' + '\n' +
+'iCqNxQKBgHf7KZIOKgV4YNyphk1UYWHNz8YY5o7WtaQ51Q+kIbU8PRd9rqJLZyk2' + '\n' +
+'tKf8e6z+wtKjxi8GKQzE/IdkQqiFmB1yEjjRHQ81WS+K5NnjN1t0IEscJqOAwv9s' + '\n' +
+'iIhG5ueb6xoj/N0LuXa8loUT5aChKWxRHEYdegqU48f+qxUcJj9R' + '\n' +
+'-----END RSA PRIVATE KEY-----' + '\n'
+}],PrivKey);
+
+OUTPUT(dPrivKey,,PrivateKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+//PKE Encryption module definition
+MyPKEModule := STD.Crypto.PublicKeyEncryptionFromLFN('RSA', PublicKeyFile, PrivateKeyFile, '');
+
+DATA signature := myPKEModule.Sign((DATA)'The quick brown fox jumps');
+OUTPUT(TRUE = myPKEModule.VerifySignature(signature, (DATA)'The quick brown fox jumps'));</programlisting>
+  </sect1>
+
+  <sect1 id="VerifySignaturePublicKeyEncryptionFromLFN">
+    <title>VerifySignature (PKE From LFN)</title>
+
+    <para><emphasis>myPKEModule</emphasis><emphasis
+    role="bold">.VerifySignature(</emphasis><emphasis>signature,
+    signedData</emphasis><emphasis role="bold">)<indexterm>
+        <primary>VerifySignature</primary>
+      </indexterm>;</emphasis></para>
+
+    <informaltable colsep="1" frame="all" rowsep="1">
+      <tgroup cols="2">
+        <colspec colwidth="120.50pt"/>
+
+        <colspec/>
+
+        <tbody>
+          <row>
+            <entry><emphasis>myPKEModule</emphasis></entry>
+
+            <entry>O nome da estrutura do módulo Public Key Encryption From
+            LFN (Logical FileName)</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>signature</emphasis></entry>
+
+            <entry>A assinatura digital a ser verificada</entry>
+          </row>
+
+          <row>
+            <entry><emphasis>signedData</emphasis></entry>
+
+            <entry>Dados usados para criar a assinatura no formato
+            DATA</entry>
+          </row>
+
+          <row>
+            <entry>Return:<emphasis/></entry>
+
+            <entry>Um valor BOOLEAN para indicar verificação</entry>
+          </row>
+        </tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>A função VerifySignature verifica a <emphasis>assinatura</emphasis>
+    digital fornecida usando as opções especificadas na definição do módulo
+    Public Key Encryption From LFN.</para>
+
+    <para>Exemplo:</para>
+
+    <programlisting format="linespecific">IMPORT Std;
+
+PublicKeyFile := '~Examples::certificates::public::pubkey.pem'; 
+PrivateKeyFile:= '~Examples::certificates::private::privkey.pem'; 
+       //You can restrict access using file scope security
+       //on the ~Examples::certificates::private scope  
+
+pubKey :=  RECORD
+  STRING  Key;
+END;
+
+dPubKey :=  DATASET([{
+'-----BEGIN PUBLIC KEY-----' + '\n' +
+'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAr64RncTp5pV0KMnWRAof' + '\n' +
+'od+3AUS/IDngT39j3Iovv9aI2N8g4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeE' + '\n' +
+'BHqlMDydw9aHOQG17CB30GYsw3Lf8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoy' + '\n' +
+'hIR9MexCldF+3WM/X0IX0ApSs7kuVPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv' + '\n' +
+'/oKj6q7kInEIvhLiGfcm3bpTzWQ66zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3' + '\n' +
+'J6Tk4NY3NySWzE/2/ZOWxZdR79XC+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0' + '\n' +
+'bwIDAQAB' + '\n' +
+'-----END PUBLIC KEY-----' + '\n'
+}],pubKey);
+
+OUTPUT(dPubKey,,PublicKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+PrivKey :=  RECORD
+  STRING  Key;
+END;
+dPrivKey :=  DATASET([{
+'-----BEGIN RSA PRIVATE KEY-----' + '\n' +
+'MIIEowIBAAKCAQEAr64RncTp5pV0KMnWRAofod+3AUS/IDngT39j3Iovv9aI2N8g' + '\n' +
+'4W5ipqhKftRESmzQ6I/TiUQcmi42soUXmCeEBHqlMDydw9aHOQG17CB30GYsw3Lf' + '\n' +
+'8iZo7RC7ocQE3OcRzH0eBkOryW6X3efWnMoyhIR9MexCldF+3WM/X0IX0ApSs7ku' + '\n' +
+'VPVG4Yj202+1FVO/XNwjMukJG5ASuxpYAQvv/oKj6q7kInEIvhLiGfcm3bpTzWQ6' + '\n' +
+'6zVz3z/huLbEXEy5oj2fQaC5E3s5mdpk/CW3J6Tk4NY3NySWzE/2/ZOWxZdR79XC' + '\n' +
+'+goNL6v/5gPI8B/a3Z8OeM2PfSZwPMnVuvU0bwIDAQABAoIBAQCnGAtNYkOOu8wW' + '\n' +
+'F5Oid3aKwnwPytF211WQh3v2AcFU17qle+SMRi+ykBL6+u5RU5qH+HSc9Jm31AjW' + '\n' +
+'V1yPrdYVZInFjYIJCPzorcXY5zDOmMAuzg5PBVV7VhUA0a5GZck6FC8AilDUcEom' + '\n' +
+'GCK6Ul8mR9XELBFQ6keeTo2yDu0TQ4oBXrPBMN61uMHCxh2tDb2yvl8Zz+EllADG' + '\n' +
+'70pztRWNOrCzrC+ARlmmDfYOUgVFtZin53jq6O6ullPLzhkm3/+QFRGYWsFgQB6J' + '\n' +
+'Z9HJtW5YB47RT5RbLHKXeMc6IJW+d+5HrzgTdK79P7wAZk8JCIDyHe2AaNAUzc/G' + '\n' +
+'sB0cNeURAoGBAOKtaVFa6z2F4Q+koMBXCt4m7dCJnaC+qthF249uEOIBeF3ds9Fq' + '\n' +
+'f0jhhvuV0OcN8lYbR/ZlYRJDUs6mHh/2BYSkdeaLKojXTxKR2bA4xQk5dtJCdoPf' + '\n' +
+'0c15AlTgOYk2oNXP/azDICJYT/cdvIdUL9P4IoZthu1FjwG266GacEnNAoGBAMZn' + '\n' +
+'1wRUXS1dbqemoc+g48wj5r3/qsIG8PsZ2Y8W+oYW7diNA5o6acc8YPEWE2RbJDbX' + '\n' +
+'YEADBnRSdzzOdo0JEj4VbNZEtx6nQhBOOrtYKnnqHVI/XOz3VVu6kedUKdBR87KC' + '\n' +
+'eCzO1VcEeZtsTHuLO4t7NmdHGqNxTV+jLvzBoQsrAoGAI+fOD+nz6znirYSpRe5D' + '\n' +
+'tW67KtYxlr28+CcQoUaQ/Au5kjzE9/4DjXrT09QmVAMciNEnc/sZBjiNzFf525wv' + '\n' +
+'wZP/bPZMVYKtbsaVkdlcNJranHGUrkzswbxSRzmBQ5/YmCWrDAuYcnhEqmMWcuU9' + '\n' +
+'8jiS13JP9hOXlHDyIBYDhV0CgYBV6TznuQgnzp9NpQ/H8ijxilItz3lHTu4mLMlR' + '\n' +
+'9mdAjMkszdLTg5uuE+z+N8rp17VUseoRjb3LvLG4+MXIyDbH/0sDdPm+IjqvCNDR' + '\n' +
+'spmh9MgBh0JbsbWaZK0s9/qrI/FcSLZ04JLsfRmTPU/Y5y8/dHjYO6fDQhp44RZF' + '\n' +
+'iCqNxQKBgHf7KZIOKgV4YNyphk1UYWHNz8YY5o7WtaQ51Q+kIbU8PRd9rqJLZyk2' + '\n' +
+'tKf8e6z+wtKjxi8GKQzE/IdkQqiFmB1yEjjRHQ81WS+K5NnjN1t0IEscJqOAwv9s' + '\n' +
+'iIhG5ueb6xoj/N0LuXa8loUT5aChKWxRHEYdegqU48f+qxUcJj9R' + '\n' +
+'-----END RSA PRIVATE KEY-----' + '\n'
+}],PrivKey);
+
+OUTPUT(dPrivKey,,PrivateKeyFile, CSV(SEPARATOR(''), TERMINATOR('')), OVERWRITE);
+
+//PKE Encryption module definition
+MyPKEModule := STD.Crypto.PublicKeyEncryptionFromLFN('RSA', PublicKeyFile, PrivateKeyFile, '');
+
+DATA signature := myPKEModule.Sign((DATA)'The quick brown fox jumps');
+OUTPUT(TRUE = myPKEModule.VerifySignature(signature, (DATA)'The quick brown fox jumps'));</programlisting>
+  </sect1>
 </chapter>

+ 36 - 37
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/GetLogicalFileAttribute.xml

@@ -32,9 +32,9 @@
 
           <entry>Uma string terminada por nulo que contém o nome do atributo
           de arquivo a ser retornado. Os valores possíveis são recordSize,
-          recordCount, size, clusterName, directory, owner, description, ECL,
-          partmask, numparts, name, modified, format, job, checkSum, kind,
-          csvSeparate, csvTerminate, headerLength, footerLength, rowTag,
+          recordCount, size, clusterName, directory, owner, description,
+          ECL,partmask, numparts, name, modified, format, job, checkSum,
+          kind,csvSeparate, csvTerminate, headerLength, footerLength, rowTag,
           workunit, accessed, expireDays, maxRecordSize, csvQuote,
           blockCompressed, compressedSize, fileCrc, formatCrc ou protected. O
           valor faz distinção entre maiúsculas e minúsculas.</entry>
@@ -57,39 +57,38 @@
   <para>Exemplo:</para>
 
   <programlisting format="linespecific">IMPORT STD;
-file := '~class::bmf::join::halfkeyed';
+file := '~ certification::full_test_distributed';
 
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'recordSize'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'recordCount'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'size'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'clusterName'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'directory'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'numparts'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'owner'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'description'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'ECL'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'partmask'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'numparts'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'name'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'modified'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'protected'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'format'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'job'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'checkSum'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'kind'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'csvSeparate'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'csvTerminate'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'headerLength'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'footerLength'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'rowtag'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'workunit'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'accessed'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'expireDays'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'maxRecordSize'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'csvQuote'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'blockCompressed'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'compressedSize'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'fileCrc'));
-OUTPUT(STD.File.GetLogicalFileAttribute(file,'formatCrc'));
-</programlisting>
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'recordSize'),NAMED('recordSize'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'recordCount'),NAMED('recordCount'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'size'),NAMED('size'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'clusterName'),NAMED('clusterName'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'directory'),NAMED('directory'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'numparts'),NAMED('numparts'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'owner'),NAMED('owner'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'description'),NAMED('description'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'ECL'),NAMED('ECL'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'partmask'),NAMED('partmask'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'name'),NAMED('name'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'modified'),NAMED('modified'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'protected'),NAMED('protected'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'format'),NAMED('format'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'job'),NAMED('job'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'checkSum'),NAMED('checkSum'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'kind'),NAMED('kind'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'csvSeparate'),NAMED('csvSeparate'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'csvTerminate'),NAMED('csvTerminate'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'csvEscape'),NAMED('csvEscape'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'headerLength'),NAMED('headerLength'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'footerLength'),NAMED('footerLength'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'rowtag'),NAMED('rowtag'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'workunit'),NAMED('workunit'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'accessed'),NAMED('accessed'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'expireDays'),NAMED('expireDays'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'maxRecordSize'),NAMED('maxRecordSize'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'csvQuote'),NAMED('csvQuote'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'blockCompressed'),NAMED('blockCompressed'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'compressedSize'),NAMED('compressedSize'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'fileCrc'),NAMED('fileCrc'));
+OUTPUT(STD.File.GetLogicalFileAttribute(file,'formatCrc'),NAMED('formatCrc'));</programlisting>
 </sect1>

+ 2 - 2
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayFixed.xml

@@ -74,8 +74,8 @@
         <row>
           <entry><emphasis>sourcepath</emphasis></entry>
 
-          <entry>Uma string terminada por nulo que contém o caminho e o nome
-          do arquivo.</entry>
+          <entry>Uma cadeia terminada por nulo contendo o endereço IP ou nome
+          do host da Dropzone em que o arquivo está localizado.</entry>
         </row>
 
         <row>

+ 256 - 0
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayJson.xml

@@ -0,0 +1,256 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE sect1 PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
+"http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
+<sect1 id="SprayJSON">
+  <title>SprayJson</title>
+
+  <para><emphasis role="bold">STD.File.SprayJson<indexterm>
+      <primary>STD.File.SprayJson</primary>
+    </indexterm><indexterm>
+      <primary>File.SprayJson</primary>
+    </indexterm><indexterm>
+      <primary>SprayJson</primary>
+    </indexterm>(</emphasis> <emphasis> sourceIP </emphasis> <emphasis
+  role="bold">, </emphasis> <emphasis>sourcepath , </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis> maxrecordsize </emphasis> <emphasis
+  role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis role="bold">
+  </emphasis> <emphasis> srcRowPath </emphasis> <emphasis role="bold">
+  </emphasis> <emphasis>, </emphasis> <emphasis role="bold">[</emphasis>
+  <emphasis> srcEncoding </emphasis> <emphasis role="bold">] </emphasis>
+  <emphasis>, </emphasis> <emphasis role="bold"> </emphasis>
+  <emphasis>destinationgroup, destinationlogicalname </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis>timeout</emphasis> <emphasis
+  role="bold">]</emphasis> <emphasis role="bold"> [</emphasis>
+  <emphasis>espserverIPport</emphasis> <emphasis role="bold">]</emphasis>
+  <emphasis> </emphasis> <emphasis role="bold">[</emphasis>
+  <emphasis>maxConnections</emphasis> <emphasis role="bold">]</emphasis>
+  <emphasis role="bold"> [</emphasis> <emphasis>allowoverwrite</emphasis>
+  <emphasis role="bold">] [</emphasis> <emphasis>replicate</emphasis>
+  <emphasis role="bold">] [</emphasis> <emphasis> compress
+  </emphasis><emphasis role="bold">] </emphasis>, <emphasis
+  role="bold">[</emphasis><emphasis>failIfNoSourceFile</emphasis><emphasis
+  role="bold">]</emphasis>, <emphasis
+  role="bold">[</emphasis><emphasis>expireDays</emphasis><emphasis
+  role="bold">] , </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis role="bold">] ,
+  </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>noSplit</emphasis><emphasis role="bold">])</emphasis></para>
+
+  <para><emphasis>dfuwuid</emphasis> <emphasis role="bold"> :=
+  STD.File.fSprayJson<indexterm>
+      <primary>STD.File.fSprayJson</primary>
+    </indexterm><indexterm>
+      <primary>File.fSprayJson</primary>
+    </indexterm><indexterm>
+      <primary>fSprayJson</primary>
+    </indexterm>(</emphasis> <emphasis> sourceIP</emphasis> <emphasis
+  role="bold">, </emphasis> <emphasis>sourcepath, </emphasis> <emphasis
+  role="bold">[</emphasis> <emphasis> maxrecordsize </emphasis> <emphasis
+  role="bold">] </emphasis> <emphasis>, </emphasis> <emphasis role="bold">
+  </emphasis> <emphasis>srcRowPath</emphasis> <emphasis role="bold">
+  </emphasis> <emphasis>, </emphasis> <emphasis role="bold">[</emphasis>
+  <emphasis> srcEncoding </emphasis> <emphasis role="bold">] </emphasis>
+  <emphasis>,destinationgroup,</emphasis> <emphasis> destinationlogicalname
+  </emphasis> , <emphasis role="bold">[</emphasis>
+  <emphasis>timeout</emphasis> <emphasis role="bold">] , [</emphasis>
+  <emphasis>espserverIPport</emphasis> <emphasis role="bold">]</emphasis>
+  <emphasis> </emphasis>, <emphasis role="bold"> [</emphasis>
+  <emphasis>maxConnections</emphasis> <emphasis role="bold">] , [</emphasis>
+  <emphasis>allowoverwrite</emphasis> <emphasis role="bold">] , [</emphasis>
+  <emphasis>replicate</emphasis> <emphasis role="bold">] , [</emphasis>
+  <emphasis> compress </emphasis> <emphasis role="bold">] </emphasis>,
+  <emphasis
+  role="bold">[</emphasis><emphasis>failIfNoSourceFile</emphasis><emphasis
+  role="bold">]</emphasis>, <emphasis
+  role="bold">[</emphasis><emphasis>expireDays</emphasis><emphasis
+  role="bold">] , </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>dfuServerQueue</emphasis><emphasis role="bold">] ,
+  </emphasis><emphasis role="bold">[</emphasis>
+  <emphasis>noSplit</emphasis><emphasis role="bold">])</emphasis></para>
+
+  <informaltable colsep="1" frame="all" rowsep="1">
+    <tgroup cols="2">
+      <colspec colwidth="80.50pt"/>
+
+      <colspec/>
+
+      <tbody>
+        <row>
+          <entry><emphasis>sourceIP</emphasis></entry>
+
+          <entry>Uma string terminada por nulo contendo o endereço IP ou o
+          nome do host da Dropzone em que o arquivo está localizado.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>sourcepath</emphasis></entry>
+
+          <entry>Uma string terminada por nulo contendo o caminho e o nome do
+          arquivo.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>maxrecordsize</emphasis></entry>
+
+          <entry>Opcional. Um número inteiro contendo o tamanho máximo dos
+          registros no arquivo. Se omitido, o padrão é 8192.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>sourceRowPath</emphasis></entry>
+
+          <entry>O caminho JSON usado para delimitar registros no arquivo de
+          origem. Requerido.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>srcEncoding</emphasis></entry>
+
+          <entry>Opcional. Uma string terminada por nulo contendo a
+          codificação (utf8,utf8n,utf16be,utf16le,utf32be,utf32le). Se
+          omitido, o padrão é 'utf8'</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>destinationgroup</emphasis></entry>
+
+          <entry>Uma string terminada por nulo contendo o nome do grupo para
+          distribuir o arquivo.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>destinationlogicalname</emphasis></entry>
+
+          <entry>Uma string terminada por nulo contendo o nome lógico do
+          arquivo a ser criado.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>timeout</emphasis></entry>
+
+          <entry>Opcional. Um valor inteiro indicando a configuração de tempo
+          limite. Se omitido, o padrão é -1. Se definido como zero (0), o
+          controle de execução retornará imediatamente para a workunit ECL sem
+          aguardar a conclusão da workunit do DFU.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>espserverIPport</emphasis></entry>
+
+          <entry>Opcional. Uma sequência terminada por nulo contendo o
+          protocolo IP, porta e diretório, ou o equivalente ao DNS, do
+          programa do servidor ESP. Geralmente, é o mesmo IP e porta que o ECL
+          Watch, com "/FileSpray" anexado. Se omitido, o padrão é o valor
+          contido no atributo lib_system.ws_fs_server.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>maxConnections</emphasis></entry>
+
+          <entry>Opcional. Um número inteiro especificando o número máximo de
+          conexões. Se omitido, o padrão é um (1).</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>allowoverwrite</emphasis></entry>
+
+          <entry>Opcional. Uma flag booleana TRUE ou FALSE indicando se o novo
+          arquivo deve sobrescrever um arquivo existente com o mesmo nome. Se
+          omitido, o padrão é FALSE.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>replicate</emphasis></entry>
+
+          <entry>Opcional. Uma flag booleana TRUE ou FALSE, indicando se o
+          novo arquivo deve ser replicado. Se omitido, o padrão é
+          FALSE</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>compress</emphasis></entry>
+
+          <entry>Opcional. Uma flag booleana TRUE ou FALSE indicando se deseja
+          compactar o novo arquivo. Se omitido, o padrão é FALSE</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>failIfNoSourceFile</emphasis></entry>
+
+          <entry>Opcional. Uma flag booleana TRUE ou FALSE indicando se um
+          arquivo ausente aciona uma falha. Se omitido, o padrão é
+          FALSE.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>expireDays</emphasis></entry>
+
+          <entry>Opcional. Especifica que o arquivo é um arquivo temporário a
+          ser excluído automaticamente após o número especificado de dias
+          desde que o arquivo foi lido. Se omitido, o padrão é -1 (nunca
+          expira). Se definido como 0, o arquivo será excluído automaticamente
+          quando atingir o limite definido na configuração <emphasis
+          role="bold">expiryDefault</emphasis> do Servidor Sasha.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>dfuServerQueue</emphasis></entry>
+
+          <entry>Nome da fila do servidor DFU de destino. O padrão é ''
+          (vazio) para a primeira fila do DFU no ambiente.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>noSplit</emphasis></entry>
+
+          <entry>Opcional. Uma flag booleana TRUE ou FALSE indicando não
+          dividir uma parte do arquivo em várias partes de destino. O padrão é
+          FALSE.</entry>
+        </row>
+
+        <row>
+          <entry><emphasis>dfuwuid</emphasis></entry>
+
+          <entry>O nome do atributo para receber a sting terminada por nulo
+          que contém o ID da workunit DFU (DFUWUID) gerado para o
+          job..</entry>
+        </row>
+
+        <row>
+          <entry>username<emphasis> </emphasis></entry>
+
+          <entry>Opcional. String contendo um nome de usuário a ser usado para
+          acesso autenticado ao processo ESP; uma string de valor vazia indica
+          que nenhuma autenticação de usuário é necessária. Se omitido, o
+          padrão é uma string vazia.</entry>
+        </row>
+
+        <row>
+          <entry>userPw:<emphasis> </emphasis></entry>
+
+          <entry>Opcional. String contendo a senha a ser usada com o usuário
+          citado no argumento <emphasis>username</emphasis>; se o
+          <emphasis>username</emphasis> estiver vazio, isso será ignorado. Se
+          omitido, o padrão é uma string vazia.</entry>
+        </row>
+
+        <row>
+          <entry>Return:<emphasis> </emphasis></entry>
+
+          <entry>fSprayJson retorna uma string terminada por nulo contendo o
+          ID da Workunit DFU (DFUWUID).</entry>
+        </row>
+      </tbody>
+    </tgroup>
+  </informaltable>
+
+  <para>A função <emphasis role="bold">SprayJson </emphasis>pega o arquivo
+  JSON preparado da landing zone e os distribui ao longo dos nós dos cluster
+  de destino, produzindo um arquivo JSON bem preparado em cada nó.</para>
+
+  <para>Exemplo:</para>
+
+  <programlisting format="linespecific">STD.File.SprayJson('10.150.50.14','/var/lib/HPCCSystems/mydropzone/colors.json',,
+      '/',,'mythor','examples::colors.json',-1,
+      'http://10.150.50.12:8010/FileSpray');</programlisting>
+</sect1>

+ 2 - 2
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayVariable.xml

@@ -97,8 +97,8 @@
         <row>
           <entry><emphasis>sourceIP</emphasis></entry>
 
-          <entry>Uma string terminada por nulo que contém o endereço IP da
-          arquivo.</entry>
+          <entry>Uma cadeia terminada por nulo contendo o endereço IP ou nome
+          do host da Dropzone em que o arquivo está localizado.</entry>
         </row>
 
         <row>

+ 2 - 2
docs/PT_BR/ECLStandardLibraryReference/SLR-Mods/SprayXML.xml

@@ -78,8 +78,8 @@
         <row>
           <entry><emphasis>sourceIP</emphasis></entry>
 
-          <entry>Uma string terminada por nulo que contém o endereço IP do
-          arquivo.</entry>
+          <entry>Uma cadeia terminada por nulo contendo o endereço IP ou nome
+          do host da Dropzone em que o arquivo está localizado.</entry>
         </row>
 
         <row>

+ 6 - 1
docs/PT_BR/ECLStandardLibraryReference/SLR-includer.xml

@@ -199,7 +199,9 @@
   </chapter>
 
   <chapter id="File_Movement">
-    <title><emphasis>Movimentação de Arquivos</emphasis></title>
+    <title>
+      <emphasis>Movimentação de Arquivos</emphasis>
+    </title>
 
     <xi:include href="ECLStandardLibraryReference/SLR-Mods/DfuPlusExec.xml"
                 xmlns:xi="http://www.w3.org/2001/XInclude"/>
@@ -228,6 +230,9 @@
     <xi:include href="ECLStandardLibraryReference/SLR-Mods/SprayXML.xml"
                 xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
+    <xi:include href="ECLStandardLibraryReference/SLR-Mods/SprayJson.xml"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
     <xi:include href="ECLStandardLibraryReference/SLR-Mods/WaitDfuWorkunit.xml"
                 xmlns:xi="http://www.w3.org/2001/XInclude"/>
   </chapter>

+ 15 - 3
docs/PT_BR/ECLWatch/TheECLWatchMan.xml

@@ -374,9 +374,21 @@
 
           <para>O link <emphasis role="bold">Set Banner (Fixar
           Banner)</emphasis> permite que você configure uma mensagem de banner
-          personalizada no topo da janela do navegador ao abrir o ECL Watch. É
-          possível usar esse recurso para enviar mensagens para os
-          usuários.</para>
+          personalizada no topo da janela do navegador ao abrir o ECL Watch.
+          Marque a caixa <emphasis role="bold">Enable</emphasis> para ativar
+          um banner. Você pode usar o banner para enviar uma mensagem sobre o
+          ambiente aos usuários. Personalize a aparência do banner da mensagem
+          com os outros controles. As configurações de banner persistem até
+          que o servidor ESP seja reiniciado.</para>
+
+          <para>O link <emphasis role="bold">Set Toolbar</emphasis> permite
+          personalizar a barra de ferramentas na parte superior da página do
+          ECL Watch. Marque a caixa <emphasis role="bold">Enable Environment
+          Text </emphasis> para exibir o texto <emphasis role="bold"> Name of
+          Environment</emphasis> na parte superior da página e na guia do
+          navegador. Rotular as abas do navegador é útil ao trabalhar com
+          vários ambientes. As configurações da barra de ferramentas persistem
+          durante a reinicialização do servidor ESP.</para>
 
           <para>O link <emphasis role="bold">Error/Warning(s)
           (Erro/aviso(s))</emphasis> exibe uma aba que exibe mensagens de

+ 27 - 27
docs/PT_BR/HPCCClientTools/CT_Mods/CT_ECL_CLI.xml

@@ -247,7 +247,7 @@ ECLCC_PATH
                     <entry><graphic fileref="images/caution.png" scale="noin"
                     xml:base="../../"/></entry>
 
-                    <entry>Não recomendamos armazenar palavras em uma variável
+                    <entry>Não recomendamos armazenar senhas em uma variável
                     do ambiente, a menos que seu sistema esteja
                     protegido.</entry>
                   </row>
@@ -2036,7 +2036,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2175,7 +2175,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="175.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2259,7 +2259,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="175.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2351,7 +2351,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="175.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2444,7 +2444,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2540,7 +2540,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2638,7 +2638,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="175.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2815,7 +2815,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
             <tgroup cols="2">
               <colspec align="left" colwidth="175.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -2934,7 +2934,7 @@ ecl packagemap add roxie mypackagemap.pkg --daliip=192.168.11.11
           <tgroup cols="2">
             <colspec align="left" colwidth="175.55pt"/>
 
-            <colspec colwidth="384.85pt"/>
+            <colspec/>
 
             <tbody>
               <row>
@@ -3073,7 +3073,7 @@ ecl packagemap validate roxie --active</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="175.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3197,7 +3197,7 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3372,7 +3372,7 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3446,7 +3446,7 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3521,7 +3521,7 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3597,7 +3597,7 @@ ecl packagemap copy //192.168.0.100:8010/roxie/MyPkg roxie2
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3678,7 +3678,7 @@ ecl bundle depends mybundle --version=2</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3739,7 +3739,7 @@ ecl bundle info mybundle --version=2</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3802,7 +3802,7 @@ ecl bundle install mybundle --keepprior</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3887,7 +3887,7 @@ ecl bundle install mybundle --keepprior</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -3955,7 +3955,7 @@ ecl bundle list myb*
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -4011,7 +4011,7 @@ ecl bundle list myb*
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -4066,7 +4066,7 @@ ecl bundle list myb*
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -4150,7 +4150,7 @@ ecl abort -n MyJob</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -4238,7 +4238,7 @@ ecl status -n MyJob</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -4327,7 +4327,7 @@ ecl getwuid -n MyCommonJobName --limit=100</programlisting>
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>
@@ -4418,7 +4418,7 @@ ecl getname -wu W201407*
             <tgroup cols="2">
               <colspec align="left" colwidth="125.55pt"/>
 
-              <colspec colwidth="384.85pt"/>
+              <colspec/>
 
               <tbody>
                 <row>

+ 34 - 10
docs/PT_BR/HPCCClientTools/CT_Mods/CT_Overview.xml

@@ -32,13 +32,6 @@
         </row>
 
         <row>
-          <entry><emphasis role="bold">ECLPlus</emphasis></entry>
-
-          <entry>Ferramenta de execução ECL da linha de comando para facilitar
-          a automação da execução do código ECL.</entry>
-        </row>
-
-        <row>
           <entry><emphasis role="bold">ECL</emphasis></entry>
 
           <entry>Ferramenta ECL de linha de comando.</entry>
@@ -125,7 +118,7 @@
       <title>Instalação</title>
 
       <para>O programa de instalação instala todas as ferramentas do cliente,
-      incluindo ECLPlus, DFUPlus, e as ferramentas ECL de linha de
+      incluindo ECL IDE, DFUPlus, e as ferramentas ECL de linha de
       comando.</para>
 
       <orderedlist>
@@ -146,7 +139,7 @@
           <para><emphasis role="bold">Windows: </emphasis></para>
 
           <para>Execute o arquivo executável, p.ex.:
-          hpccsystems-clienttools_community-4.X.X-XWindows-i386.exe em sua
+          hpccsystems-clienttools_community-7.X.X-XWindows-i386.exe em sua
           máquina. Siga os comandos para concluir a instalação.</para>
 
           <para><emphasis role="bold">Sistemas baseados em RPM
@@ -164,13 +157,44 @@
 
           <programlisting>sudo dpkg -i &lt;deb filename&gt;</programlisting>
 
+          <para>Após a instalação do pacote, execute o seguinte comando para
+          atualizar as dependências:</para>
+
+          <programlisting>sudo apt-get install -f </programlisting>
+
           <para><emphasis role="bold">Mac OSX:</emphasis></para>
 
           <para>Execute o arquivo de instalação, p.ex.:
-          hpccsystems-clienttools_community-4.X.X-XDarwin-x86_64.dmg. Siga os
+          hpccsystems-clienttools_community-7.X.X-XDarwin-x86_64.dmg. Siga os
           comandos para concluir a instalação.</para>
         </listitem>
       </orderedlist>
     </sect2>
+
+    <sect2 id="WinPath" role="brk">
+      <title>Ferramentas do Cliente e Caminho do Windows</title>
+
+      <para>As ferramentas do Cliente HPCC Systems foram projetadas para
+      permitir que você tenha mais de uma versão instalada. Por esse motivo, a
+      opção de adicionar a pasta de arquivos executáveis no caminho do sistema
+      é opcional durante instalação.</para>
+
+      <para>Se você planeja usar apenas uma versão, pode ser mais fácil
+      adicionar o       pasta para o seu sistema ou caminho do usuário. Se
+      você quiser várias versões       instaladas, você provavelmente deseja
+      gerenciar o caminho sozinho.</para>
+
+      <para>Para facilitar, o instalador cria um atalho do menu Iniciar       
+      para um prompt de comando ECL. Este prompt de comando adiciona a pasta
+      executável ao caminho da sessão dessa prompt de comando.</para>
+
+      <para>Algumas funções da ferramenta de linha de comando podem exigir
+      permissões elevadas.       Você pode clicar com o <emphasis
+      role="bold">botão direito</emphasis> &gt; <emphasis role="bold">Run As
+      Administrator</emphasis> para o prompt de comando ECL.</para>
+
+      <para><graphic align="left"
+      fileref="../../images/ECLCmdPrompt.jpg"/></para>
+    </sect2>
   </sect1>
 </chapter>

+ 15 - 11
docs/PT_BR/HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml

@@ -110,8 +110,7 @@
       <title>Instalação</title>
 
       <para>O programa de instalação instala todas as ferramentas do cliente,
-      incluindo ECLPlus, DFUPlus, e as ferramentas ECL de linha de
-      comando.</para>
+      incluindo DFUPlus, e as ferramentas ECL de linha de comando.</para>
 
       <orderedlist>
         <listitem>
@@ -131,7 +130,7 @@
           <para><emphasis role="bold">Windows: </emphasis></para>
 
           <para>Execute o arquivo executável, p.ex.:
-          hpccsystems-clienttools_community-4.X.X-XWindows-i386.exe em sua
+          hpccsystems-clienttools_community-7.X.X-XWindows-i386.exe em sua
           máquina. Siga os comandos para concluir a instalação.</para>
 
           <para><emphasis role="bold">Sistemas baseados em RPM
@@ -149,6 +148,11 @@
 
           <programlisting>sudo dpkg -i &lt;deb filename&gt;</programlisting>
 
+          <para>Após instalar o pacote, execute o comando a seguir para
+          atualizar as dependências:</para>
+
+          <programlisting>sudo apt-get install -f </programlisting>
+
           <para><emphasis role="bold">Mac OSX:</emphasis></para>
 
           <para>Abra o arquivo de imagem de disco da Apple (.dmg) e execute o
@@ -211,7 +215,7 @@
       <para>Se você instalar uma versão diferente do software Ferramentas do
       cliente recebido, você terá uma pasta em /opt/HPCCSystems que
       corresponde ao conjunto de Ferramentas do cliente. Então você poderia
-      ter as versões 4.0.x, 4.2.x, 4.4.x, etc. do software.</para>
+      ter as versões 7.0.x, 7.2.x, 7.4.x, etc. do software.</para>
 
       <para>Para versões mais antigas, baixe o(s) pacote(s) e realize a
       instalação. Instale por último aquele que você deseja usar. Após
@@ -227,26 +231,26 @@
       forma pela qual você deseja salvar as versões antigas instaladas.</para>
 
       <para><emphasis role="bold">Por exemplo:</emphasis>se quisesse executar
-      o eclplus:</para>
+      o DFUplus:</para>
 
-      <programlisting>eclplus action=view wuid=W12345678</programlisting>
+      <programlisting>dfuplus action=list server=http://127.0.0.1:8010</programlisting>
 
-      <para>Para executar o eclplus em uma versão antiga ou outra versão das
-      Ferramentas do cliente, por exemplo a versão 4.0.x:</para>
+      <para>Para executar o DFUplus em uma versão antiga ou outra versão das
+      Ferramentas do cliente, por exemplo a versão 7.0.x:</para>
 
-      <para><programlisting>/opt/HPCCSystems/4.0.x/clienttools/bin/eclplus action=view wuid=W12345678</programlisting></para>
+      <para><programlisting>/opt/HPCCSystems/7.0.x/clienttools/bin/dfuplus action=list server=http://127.0.0.1:8010</programlisting></para>
 
       <para><emphasis role="bold">Windows</emphasis></para>
 
       <para>O software Ferramentas do cliente para Windows é instalado em um
       diretório como esse: C:\Program Files
-      (x86)\HPCCSystems\6.2.0\clienttools\bin onde o número (6.2.0, por
+      (x86)\HPCCSystems\7.2.0\clienttools\bin onde o número (7.2.0, por
       exemplo) corresponde à versão do software Ferramentas do cliente.</para>
 
       <para>Se quiser acessar uma versão do software da linha de comando em
       qualquer pasta, adicione a pasta \bin ao caminho no Windows (por
       exemplo, <emphasis role="bold">C:\Program Files
-      (x86)\HPCCSystems\6.2.0\clienttools\bin</emphasis> )</para>
+      (x86)\HPCCSystems\7.2.0\clienttools\bin</emphasis> )</para>
 
       <para>O instalador do Windows perguntará se você deseja remover a versão
       anterior durante a instalação. Se quiser manter as duas, recuse a oferta

+ 39 - 28
docs/PT_BR/HPCCClientTools/ClientTools.xml

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
 <book lang="en_US" xml:base="../">
@@ -7,7 +7,7 @@
 
     <mediaobject>
       <imageobject>
-        <imagedata fileref="images/redswooshWithLogo3.jpg" />
+        <imagedata fileref="images/redswooshWithLogo3.jpg"/>
       </imageobject>
     </mediaobject>
 
@@ -16,58 +16,69 @@
     </author>
 
     <legalnotice>
-      <para>Sua opinião e comentários sobre este documento são muito bem-vindos e podem ser enviados por e-mail para <email>docfeedback@hpccsystems.com</email> </para>
+      <para>Sua opinião e comentários sobre este documento são muito
+      bem-vindos e podem ser enviados por e-mail para
+      <email>docfeedback@hpccsystems.com</email></para>
 
-      <para>Inclua a frase <emphasis role="bold">Feedback sobre documentação</emphasis> na linha de assunto e indique o nome do documento, o número das páginas e número da versão atual no corpo da mensagem.</para>
+      <para>Inclua a frase <emphasis role="bold">Feedback sobre
+      documentação</emphasis> na linha de assunto e indique o nome do
+      documento, o número das páginas e número da versão atual no corpo da
+      mensagem.</para>
 
-      <para>LexisNexis e o logotipo Knowledge Burst são marcas comerciais registradas da Reed Elsevier Properties Inc., usadas sob licença. </para>
+      <para>LexisNexis e o logotipo Knowledge Burst são marcas comerciais
+      registradas da Reed Elsevier Properties Inc., usadas sob licença.</para>
 
-      <para>HPCC Systems<superscript>®</superscript> is a registered trademark of LexisNexis Risk Data Management Inc.</para>
+      <para>HPCC Systems<superscript>®</superscript> is a registered trademark
+      of LexisNexis Risk Data Management Inc.</para>
 
-      <para>Os demais produtos, logotipos e serviços podem ser marcas comerciais ou registradas de suas respectivas empresas. </para>
+      <para>Os demais produtos, logotipos e serviços podem ser marcas
+      comerciais ou registradas de suas respectivas empresas.</para>
 
-      <para>Todos os nomes e dados de exemplo usados neste manual são fictícios.  Qualquer semelhança com pessoas reais, vivas ou mortas, é mera coincidência.</para>
+      <para>Todos os nomes e dados de exemplo usados neste manual são
+      fictícios. Qualquer semelhança com pessoas reais, vivas ou mortas, é
+      mera coincidência.</para>
 
-      <para></para>
+      <para/>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="common/Version.xml"
+                xpointer="xpointer(//*[@id='FooterInfo'])"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
-    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="common/Version.xml"
+                xpointer="xpointer(//*[@id='DateVer'])"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="common/Version.xml"
+                xpointer="xpointer(//*[@id='Copyright'])"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
     <mediaobject role="logo">
       <imageobject>
-        <imagedata fileref="images/LN_Rightjustified.jpg" />
+        <imagedata fileref="images/LN_Rightjustified.jpg"/>
       </imageobject>
     </mediaobject>
   </bookinfo>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Overview_withoutIDE.xml"
               xpointer="xpointer(//*[@id='CT_Overview'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml"
-              xpointer="xpointer(//*[@id='Command_Line_ECL'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml"
+              xpointer="xpointer(//*[@id='ECL_CLI'])"
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="xpointer(//*[@id='ECL_CLI'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="xpointer(//*[@id='ECL_Compiler'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml"
+              xpointer="xpointer(//*[@id='ECL_Compiler'])"
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml"
               xpointer="xpointer(//*[@id='Command_Line_DFU'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml"
-              xpointer="xpointer(//*[@id='ESDL_CLI'])" xmlns:xi="http://www.w3.org/2001/XInclude" />
-              
+              xpointer="xpointer(//*[@id='ESDL_CLI'])"
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </book>

+ 41 - 28
docs/PT_BR/HPCCClientTools/TheECLIDEandHPCCClientTools.xml

@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?>
 <!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
 "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd">
 <book lang="en_US" xml:base="../">
@@ -7,7 +7,7 @@
 
     <mediaobject>
       <imageobject>
-        <imagedata fileref="images/redswooshWithLogo3.jpg" />
+        <imagedata fileref="images/redswooshWithLogo3.jpg"/>
       </imageobject>
     </mediaobject>
 
@@ -16,60 +16,73 @@
     </author>
 
     <legalnotice>
-      <para>Sua opinião e comentários sobre este documento são muito bem-vindos e podem ser enviados por e-mail para <email>docfeedback@hpccsystems.com</email> </para>
+      <para>Sua opinião e comentários sobre este documento são muito
+      bem-vindos e podem ser enviados por e-mail para
+      <email>docfeedback@hpccsystems.com</email></para>
 
-      <para>Inclua a frase <emphasis role="bold">Feedback sobre documentação</emphasis> na linha de assunto e indique o nome do documento, o número das páginas e número da versão atual no corpo da mensagem.</para>
+      <para>Inclua a frase <emphasis role="bold">Feedback sobre
+      documentação</emphasis> na linha de assunto e indique o nome do
+      documento, o número das páginas e número da versão atual no corpo da
+      mensagem.</para>
 
-      <para>LexisNexis e o logotipo Knowledge Burst são marcas comerciais registradas da Reed Elsevier Properties Inc., usadas sob licença. </para>
+      <para>LexisNexis e o logotipo Knowledge Burst são marcas comerciais
+      registradas da Reed Elsevier Properties Inc., usadas sob licença.</para>
 
-      <para>HPCC Systems<superscript>®</superscript> is a registered trademark of LexisNexis Risk Data Management Inc.</para>
+      <para>HPCC Systems<superscript>®</superscript> is a registered trademark
+      of LexisNexis Risk Data Management Inc.</para>
 
-      <para>Os demais produtos, logotipos e serviços podem ser marcas comerciais ou registradas de suas respectivas empresas. </para>
+      <para>Os demais produtos, logotipos e serviços podem ser marcas
+      comerciais ou registradas de suas respectivas empresas.</para>
 
-      <para>Todos os nomes e dados de exemplo usados neste manual são fictícios.  Qualquer semelhança com pessoas reais, vivas ou mortas, é mera coincidência.</para>
+      <para>Todos os nomes e dados de exemplo usados neste manual são
+      fictícios. Qualquer semelhança com pessoas reais, vivas ou mortas, é
+      mera coincidência.</para>
 
-      <para></para>
+      <para/>
     </legalnotice>
 
-    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='FooterInfo'])"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="common/Version.xml"
+                xpointer="xpointer(//*[@id='FooterInfo'])"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
-    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='DateVer'])"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="common/Version.xml"
+                xpointer="xpointer(//*[@id='DateVer'])"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
     <corpname>HPCC Systems<superscript>®</superscript></corpname>
 
-    <xi:include href="common/Version.xml" xpointer="xpointer(//*[@id='Copyright'])"
-                xmlns:xi="http://www.w3.org/2001/XInclude" />
+    <xi:include href="common/Version.xml"
+                xpointer="xpointer(//*[@id='Copyright'])"
+                xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
     <mediaobject role="logo">
       <imageobject>
-        <imagedata fileref="images/LN_Rightjustified.jpg" />
+        <imagedata fileref="images/LN_Rightjustified.jpg"/>
       </imageobject>
     </mediaobject>
   </bookinfo>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Overview.xml"
               xpointer="xpointer(//*[@id='CT_Overview'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_IDE.xml"
               xpointer="xpointer(//*[@id='The_ECL_Ide'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_ECL.xml"
-              xpointer="xpointer(//*[@id='Command_Line_ECL'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml"
+              xpointer="xpointer(//*[@id='ECL_CLI'])"
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
-  <xi:include href="HPCCClientTools/CT_Mods/CT_ECL_CLI.xml" xpointer="xpointer(//*[@id='ECL_CLI'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
-
-  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml" xpointer="xpointer(//*[@id='ECL_Compiler'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+  <xi:include href="HPCCClientTools/CT_Mods/ECLCC.xml"
+              xpointer="xpointer(//*[@id='ECL_Compiler'])"
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 
   <xi:include href="HPCCClientTools/CT_Mods/CT_Comm_Line_DFU.xml"
               xpointer="xpointer(//*[@id='Command_Line_DFU'])"
-              xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
+
   <xi:include href="HPCCClientTools/CT_Mods/CT_ESDL_CLI.xml"
-              xpointer="xpointer(//*[@id='ESDL_CLI'])" xmlns:xi="http://www.w3.org/2001/XInclude" />
+              xpointer="xpointer(//*[@id='ESDL_CLI'])"
+              xmlns:xi="http://www.w3.org/2001/XInclude"/>
 </book>

+ 1 - 1
docs/PT_BR/HPCCSystemAdmin/HPCCSystemAdministratorsGuide.xml

@@ -1233,7 +1233,7 @@ useDropZoneRestriction=true
 #dafsMaxReceiveTimeSeconds=0
 
 # Dafilesrv: set to change number of seconds before retrying an unresponsive dafilesrv 
-connection (default 10 seconds)
+#   (default 10 seconds)
 # NB: for now this only applies to the last cached server 
 #dafsConnectFailRetrySeconds=10
 

+ 1 - 1
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Inst-Mods/UserSecurityMaint.xml

@@ -80,7 +80,7 @@
       </informaltable></para>
   </sect2>
 
-  <sect2 id="Sec_Adm_w_ECLWatch">
+  <sect2 id="Sec_Adm_w_ECLWatch" role="brk">
     <title>Administração de Segurança utilizando o ECL Watch</title>
 
     <para>É preciso ter direitos de administrador para administrar as

+ 2 - 4
docs/PT_BR/Installing_and_RunningTheHPCCPlatform/Installing_and_RunningTheHPCCPlatform.xml

@@ -325,7 +325,7 @@ gpgcheck=0</programlisting></para>
           <title>Ubuntu/Debian</title>
 
           <para>Um pacote Debian é disponibilizado para instalações Ubuntu.
-          Para instalar o pacote, use:</para>
+          Você deve instalar o pacote, usando o comando:</para>
 
           <programlisting>sudo dpkg -i &lt;deb filename&gt;</programlisting>
 
@@ -1918,11 +1918,9 @@ sudo /opt/HPCCSystems/sbin/hpcc-push.sh \
 
       <programlisting>sudo yum remove hpccsystems-platform </programlisting>
 
-      <para>Em contrapartida, ainda é possível usar</para>
-
       <para><emphasis role="bold">Ubuntu/Debian </emphasis></para>
 
-      <programlisting>sudo dpkg -r hpccsystems-platform</programlisting>
+      <programlisting>sudo apt-get remove hpccsystems-platform</programlisting>
     </sect1>
 
     <sect1 id="Helper-Applications">

+ 3 - 3
docs/PT_BR/VisualizingECL/VizMods/Choropleth.xml

@@ -302,13 +302,13 @@ _euroIE := DATASET([    {'Carlow', '27431', '27181', '54612'},
                                     {'Kilkenny', '47788', '47631', '95419'}, 
                                     {'Cork', '198658', '201144', '399802'}],
                                     {STRING region, INTEGER4 males, INTEGER4 females, 
-                                    INTEGER4 total});
+                                     INTEGER4 total});
   data_euroIE := OUTPUT(_euroIE, NAMED('choro_euroIE'));
   data_euroIE;
   
   viz_euroIE := Visualizer.Choropleth.EuroIE('euroIE',, 'choro_euroIE', 
-  DATASET([{'County', 'region'},{'Population', 'total'}], Visualizer.KeyValueDef),, 
-  DATASET([{'paletteID', 'Greens'}], Visualizer.KeyValueDef));
+                DATASET([{'County', 'region'}, {'Population', 'total'}], Visualizer.KeyValueDef),, 
+                DATASET([{'paletteID', 'Greens'}], Visualizer.KeyValueDef));
   viz_euroIE;</programlisting>
   </sect1>
 </chapter>

+ 14 - 14
docs/PT_BR/VisualizingECL/VizMods/MultiD.xml

@@ -100,8 +100,8 @@
                   {'Bioligy', 66, 60, 85, 6},
                   {'Physics', 46, 20, 53, 7},
                   {'Math', 98, 30, 23, 13}],
-                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, 
-                  INTEGER4 year4});
+                  {STRING subject, INTEGER4 year1, 
+                   INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
   data_exams := OUTPUT(ds, NAMED('MultiD__test'));
   data_exams;
   
@@ -198,8 +198,8 @@
                   {'Bioligy', 66, 60, 85, 6},
                   {'Physics', 46, 20, 53, 7},
                   {'Math', 98, 30, 23, 13}],
-                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, 
-                  INTEGER4 year4});
+                  {STRING subject, INTEGER4 year1, 
+                   INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
   data_exams := OUTPUT(ds, NAMED('MultiD__test'));
   data_exams;
   
@@ -296,8 +296,8 @@
                   {'Bioligy', 66, 60, 85, 6},
                   {'Physics', 46, 20, 53, 7},
                   {'Math', 98, 30, 23, 13}],
-                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, 
-                  INTEGER4 year4});
+                  {STRING subject, INTEGER4 year1, 
+                   INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
   data_exams := OUTPUT(ds, NAMED('MultiD__test'));
   data_exams;
 
@@ -397,8 +397,8 @@
                   {'Bioligy', 66, 60, 85, 6},
                   {'Physics', 46, 20, 53, 7},
                   {'Math', 98, 30, 23, 13}],
-                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, 
-                  INTEGER4 year4});
+                  {STRING subject, INTEGER4 year1, 
+                   INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
   data_exams := OUTPUT(ds, NAMED('MultiD__test'));
   data_exams;
   
@@ -495,8 +495,8 @@
                   {'Bioligy', 66, 60, 85, 6},
                   {'Physics', 46, 20, 53, 7},
                   {'Math', 98, 30, 23, 13}],
-                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, 
-                  INTEGER4 year4});
+                  {STRING subject, INTEGER4 year1, 
+                   INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
   data_exams := OUTPUT(ds, NAMED('MultiD__test'));
   data_exams;
   
@@ -593,8 +593,8 @@
                   {'Bioligy', 66, 60, 85, 6},
                   {'Physics', 46, 20, 53, 7},
                   {'Math', 98, 30, 23, 13}],
-                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, 
-                  INTEGER4 year4});
+                  {STRING subject, INTEGER4 year1, 
+                   INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
   data_exams := OUTPUT(ds, NAMED('MultiD__test'));
   data_exams;
 
@@ -691,8 +691,8 @@
                   {'Bioligy', 66, 60, 85, 6},
                   {'Physics', 46, 20, 53, 7},
                   {'Math', 98, 30, 23, 13}],
-                  {STRING subject, INTEGER4 year1, INTEGER4 year2, INTEGER4 year3, 
-                  INTEGER4 year4});
+                  {STRING subject, INTEGER4 year1, 
+                   INTEGER4 year2, INTEGER4 year3, INTEGER4 year4});
   data_exams := OUTPUT(ds, NAMED('MultiD__test'));
   data_exams;
 

+ 41 - 0
ecl/regress/issue24245a.ecl

@@ -0,0 +1,41 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2020 HPCC Systems®.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+
+numberRecord :=
+            RECORD
+string20000   number;
+            END;
+
+number2Record :=
+            RECORD
+string20001   number;
+            END;
+
+numbersRecord := RECORD
+  EMBEDDED DATASET(number2Record) numbers;
+END;
+
+
+
+ds := DATASET(300000, transform(numberRecord, SELF.number := (string)COUNTER));
+
+r := ROLLUP(NOFOLD(GROUP(ds, number[50000], LOCAL)), GROUP,
+            transform(numbersRecord, SELF.numbers := project(ROWS(LEFT),
+                                                             transform(number2Record, SELF.number := LEFT.number))));
+
+output(count(nofold(r)));

+ 41 - 0
ecl/regress/issue24245b.ecl

@@ -0,0 +1,41 @@
+/*##############################################################################
+
+    HPCC SYSTEMS software Copyright (C) 2020 HPCC Systems®.
+
+    Licensed under the Apache License, Version 2.0 (the "License");
+    you may not use this file except in compliance with the License.
+    You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+############################################################################## */
+
+
+numberRecord :=
+            RECORD
+string2000000   number;
+            END;
+
+number2Record :=
+            RECORD
+string2000001   number;
+            END;
+
+numbersRecord := RECORD
+  EMBEDDED DATASET(number2Record) numbers;
+END;
+
+
+
+ds := DATASET(3000, transform(numberRecord, SELF.number := (string)COUNTER));
+
+r := ROLLUP(NOFOLD(GROUP(ds, number[50000], LOCAL)), GROUP,
+            transform(numbersRecord, SELF.numbers := project(ROWS(LEFT),
+                                                             transform(number2Record, SELF.number := LEFT.number))));
+
+output(count(nofold(r)));

+ 15 - 15
esp/src/package-lock.json

@@ -2409,11 +2409,11 @@
       }
     },
     "dijit": {
-      "version": "1.16.2",
-      "resolved": "https://registry.npmjs.org/dijit/-/dijit-1.16.2.tgz",
-      "integrity": "sha512-8JnL7yMeQvF4Gg9wwBYYsu6tOh3fe3FNz2+RM0gZYDaJ8O48Y1+4n1JY42MmPWJWTxiqN7tB5zhwZ6wk3tdQAw==",
+      "version": "1.16.3",
+      "resolved": "https://registry.npmjs.org/dijit/-/dijit-1.16.3.tgz",
+      "integrity": "sha512-D1dvhLYU2qXQ92rK49z0pQvskQphKyA9j9b5CyljwrNWDSbikIFzKobF9W+srEAMHRD10mHSJEHu5F/Fkyfg3w==",
       "requires": {
-        "dojo": "1.16.2"
+        "dojo": "1.16.3"
       }
     },
     "dir-glob": {
@@ -2435,9 +2435,9 @@
       }
     },
     "dojo": {
-      "version": "1.16.2",
-      "resolved": "https://registry.npmjs.org/dojo/-/dojo-1.16.2.tgz",
-      "integrity": "sha512-cgiT6WFAmcc1p95X7HPPVq3pM+qD4eB+DRWI+z04IWlGh5v4h9wqOdz1s+2mG7x7UYz+EzoGyLB87GDgGUOtIQ=="
+      "version": "1.16.3",
+      "resolved": "https://registry.npmjs.org/dojo/-/dojo-1.16.3.tgz",
+      "integrity": "sha512-+mPovtmbULx5V69lWji496gMfhXuL1WCC0KBq0hig4Tz6WGAYxTOJV6ch3bewNzSJHmaHiSsIMYkW8jcUrhLIQ=="
     },
     "dojo-themes": {
       "version": "1.14.1",
@@ -2445,9 +2445,9 @@
       "integrity": "sha512-SKi9csVzB+8d/h1nYtrNuKQ8qlv9LCG/LneKoKkJFotgqgdv9YXr+tR7sJpVwiOZnfH/5nAVN2hpsiPs+H7jng=="
     },
     "dojo-util": {
-      "version": "1.16.2",
-      "resolved": "https://registry.npmjs.org/dojo-util/-/dojo-util-1.16.2.tgz",
-      "integrity": "sha512-AtKzgGPc+GumEvozUFQ3LfzC7roithyxSCvL4jTEJBhftOIkg4Kq+oktetpqnt8COWwtrki/KlPTz3yoioblfA=="
+      "version": "1.16.3",
+      "resolved": "https://registry.npmjs.org/dojo-util/-/dojo-util-1.16.3.tgz",
+      "integrity": "sha512-XBGNPbT55lJBJEcLxwXgqg2D2hHsOjRzAiYaV3fL47XBvTLf3b1IgbjAfF1Y+RXUh6BlfTbPf2SjSLryCRiMEQ=="
     },
     "dojo-webpack-plugin": {
       "version": "2.8.13",
@@ -2497,12 +2497,12 @@
       }
     },
     "dojox": {
-      "version": "1.16.2",
-      "resolved": "https://registry.npmjs.org/dojox/-/dojox-1.16.2.tgz",
-      "integrity": "sha512-s6wy87fjqMIfy0brNc2+o7VOyV/Dl7LtChCvDBL+a0lPMWvEA+Giymg7CLGN+5HDNcoHT1jkPOixqMbBRqep/Q==",
+      "version": "1.16.3",
+      "resolved": "https://registry.npmjs.org/dojox/-/dojox-1.16.3.tgz",
+      "integrity": "sha512-VzmKayfbg/zs5oi3H4uJuAaOTNrcrJ1CPcsD4h+DdTaAcKPLOyIETfFAnz+OPql5ShxpU3u/LUGRIA0rUtfG/A==",
       "requires": {
-        "dijit": "1.16.2",
-        "dojo": "1.16.2"
+        "dijit": "1.16.3",
+        "dojo": "1.16.3"
       }
     },
     "dom-helpers": {

+ 4 - 4
esp/src/package.json

@@ -50,11 +50,11 @@
     "clipboard": "2.0.4",
     "codemirror": "5.50.2",
     "detect-browser": "5.0.0",
-    "dijit": "1.16.2",
-    "dojo": "1.16.2",
+    "dijit": "1.16.3",
+    "dojo": "1.16.3",
     "dojo-themes": "1.14.1",
-    "dojo-util": "1.16.2",
-    "dojox": "1.16.2",
+    "dojo-util": "1.16.3",
+    "dojox": "1.16.3",
     "es6-promise": "4.2.8",
     "font-awesome": "4.7.0",
     "react": "16.12.0",

+ 1 - 1
esp/src/src/ESPRequest.ts

@@ -20,7 +20,7 @@ class RequestHelper {
 
     constructor() {
         this.serverIP = (typeof debugConfig !== "undefined") ? debugConfig.IP : this.getParamFromURL("ServerIP");
-        this.timeOutSeconds = 60;
+        this.timeOutSeconds = 120;
     }
 
     getParamFromURL(key) {

+ 3 - 0
esp/src/src/WsWorkunits.ts

@@ -210,6 +210,9 @@ export function WUResult(params) {
 }
 
 export function WUQueryGetGraph(params) {
+    if (params.request) {
+        params.request.timeOutSeconds = 300;  // 5 minutes
+    }
     return ESPRequest.send("WsWorkunits", "WUQueryGetGraph", params);
 }
 

파일 크기가 너무 크기때문에 변경 상태를 표시하지 않습니다.
+ 57 - 0
helm/examples/logging/README.md


+ 32 - 0
helm/examples/logging/azure/README.md

@@ -0,0 +1,32 @@
+# HPCC Log Processing via Azure's AKS Insights
+
+Azure's AKS Insights is an optional feature designed to help monitor performance and health of kubernetes based clusters. 
+Once enabled and associated with a given AKS with an active HPCC System cluster, the HPCC component logs are automatically captured by Insights, since all STDERR/STDOUT data is captured and made available for monitoring and/or querying purposes. As is usually the case with cloud provider features, cost is a significant consideration and should be well understood by the user. Log content is written to the logs store associated with your Log Analytics workspace.
+
+The AKS Insights interface on Azure provides Kubernetes-centric cluster/node/container-level health metrics visualizations, and direct links to container logs via "log analytics" interfaces. The logs can be queried via “Kusto” query language (KQL). 
+
+    Example query for Transaction summary log entries from known ESP component container
+    let ContainerIdList = KubePodInventory
+    | where ContainerName =~ 'xyz/myesp'
+    | where ClusterId =~ '/subscriptions/xyz/resourceGroups/xyz/providers/Microsoft.ContainerService/managedClusters/aks-clusterxyz'
+    | distinct ContainerID;
+    ContainerLog
+    | where LogEntry contains "TxSummary["
+    | where ContainerID in (ContainerIdList)
+    | project LogEntrySource, LogEntry, TimeGenerated, Computer, Image, Name, ContainerID
+    | order by TimeGenerated desc
+    | render table
+
+    Sample output
+    > 6/20/2020, 1:00:00.244 AM	stderr	1 TxSummary[activeReqs=6 auth=NA contLen=352 rcv=0ms handleHttp=3ms user=@10.240.0.4 req=POST wsstore.SET v1.0 total=3ms ] 	aks-default-12315622-vmss00000i			bc1555515a09e12a129c3ea5df0b76fb74c4227354dc2b643182c8f910b33ed4	
+	  > 6/20/2020, 12:59:58.910 AM	stderr	1 TxSummary[activeReqs=5 auth=NA contLen=99 rcv=0ms handleHttp=2ms user=@10.240.0.5 req=POST wsstore.FETCH v1.0 total=2ms ] 	aks-default-12315622-vmss00000i			bc1555515a09e12a129c3ea5df0b76fb74c4227354dc2b643182c8f910b33ed4
+
+More complex queries can be formulated to fetch specific information provided in any of the log columns including unformatted data in the log message. The Insights interface facilitates creation of alerts based on those queries, which can be used to trigger emails, SMS, Logic App execution, and many other actions.
+
+Log and/or metric capture behavior can be controled via kubernetes yaml:
+
+    https://github.com/microsoft/OMS-docker/blob/ci_feature_prod/Kubernetes/container-azm-ms-agentconfig.yaml
+    
+Overly chatty streams can be filtered out, capturing K8s events can be turned off, etc.
+Always keep in mind sensitive data could be logged, therefore access restriction to insights is strongly advised
+

+ 32 - 0
helm/examples/logging/elastic/README.md

@@ -0,0 +1,32 @@
+# HPCC Log Processing via Elastic Stack
+
+Setting up a base Elastic Stack cluster to process HPCC Systems component logs is straightforward. Elastic provides Helm charts to deploy each of their components, so we'll add the Elastic helm-charts repository locally:
+
+	> helm repo add elastic https://helm.elastic.co
+
+We'll install the Filebeat component (log agent) , and ElasticSearch (log store and indexer). By default, Filebeat will forward the log entries to the ElasticSearch default endpoint:
+
+    > helm install filebeat elastic/filebeat
+    > helm install elasticsearch elastic/elasticsearch
+
+Finally, the Kibana component can also be installed to be used as a front end, which allows log index management, log querying, and visualization:
+
+    > helm install kibana elastic/kibana
+
+Each of the Elastic components should be configured appropriately based on the cluster needs, detailed documentation can be found on the elastic GitHub page https://github.com/elastic/helm-charts/
+
+Inspecting the Elastic pods and services, expect a Filebeat pod for each of the nodes in your cluster, a configurable number of ElasticSearch pods, and a service for both Kibana and ElasticSearch. 
+
+Of utmost importance are the persistent volumes created by ElasticSearch on which the log indexes are stored. Review the ElasticSearch helm-charts GitHub page for details on all available configuration options.
+
+Port forwarding might be required to expose the Kibana interface
+
+    > kubectl port-forward service/kibana-kibana 5601
+
+Once all the components are working successfully, the logs will be written to a filebeat prefixed index on ElasticSearch, and it can be managed from the Kibana interface. Some index content retention policy rules can be configured here.
+
+The default filebeat configuration aggregates several Kubernetes metadata fields to each log entry forwarded to ElasticSearch. The Kubernetes fields can be used to identify the HPCC component responsible for each entry, and the source pod and or node on which the event was reported. 
+
+<kibana discovery page screenshot>
+  
+Kibana discovery page showing several HPCC Systems component log entries. All other log entries not created by HPCC components are filtered out by the filter at the top left corner. The Kubernetes container name, node name, and pod name accompany the “message” field which contains the actual log entry.

+ 45 - 17
plugins/spark/CMakeLists.txt

@@ -57,28 +57,56 @@ if(SPARK)
 
     set(CENTRAL_REPO "https://repo1.maven.org/maven2")
 
+    set(JAR_VERSION "${HPCC_MAJOR}.${HPCC_MINOR}.${HPCC_POINT}-${HPCC_SEQUENCE}")
+    if(NOT HPCC_MATURITY STREQUAL "release")
+        set(JAR_VERSION "${JAR_VERSION}-SNAPSHOT")
+    endif()
+
+
     if(NOT SPARK_HPCC_JAR)
-        if(NOT SPARK_HPCC_VERSION)
-            set(SPARK_HPCC_VERSION "7.2.6")
-        endif()
-        file(DOWNLOAD
-            ${CENTRAL_REPO}/org/hpccsystems/spark-hpcc/${SPARK_HPCC_VERSION}/spark-hpcc-${SPARK_HPCC_VERSION}.jar
-            ${CMAKE_CURRENT_BINARY_DIR}/spark-hpcc-${SPARK_HPCC_VERSION}.jar
-            INACTIVITY_TIMEOUT 30
+        if(HPCC_MATURITY STREQUAL "release")
+            file(DOWNLOAD
+                ${CENTRAL_REPO}/org/hpccsystems/spark-hpcc/${JAR_VERSION}/spark-hpcc-${JAR_VERSION}.jar
+                ${CMAKE_CURRENT_BINARY_DIR}/spark-hpcc-${JAR_VERSION}.jar
+                INACTIVITY_TIMEOUT 30
             TIMEOUT 90)
-        set(SPARK_HPCC_JAR ${CMAKE_CURRENT_BINARY_DIR}/spark-hpcc-${SPARK_HPCC_VERSION}.jar)
+        else()
+            execute_process(
+                COMMAND wget "https://oss.sonatype.org/service/local/artifact/maven/content?r=snapshots&g=org.hpccsystems&a=spark-hpcc&v=${JAR_VERSION}" -O spark-hpcc-${JAR_VERSION}.jar -q
+                WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+                RESULT_VARIABLE dl_spark_hpcc
+                OUTPUT_QUIET
+                )
+            if(dl_spark_hpcc)
+                message(FATAL_ERROR "Download of spark-hpcc-${JAR_VERSION}.jar failed")
+            else()
+                message(STATUS "Successfully downloaded spark-hpcc-${JAR_VERSION}.jar")
+            endif()
+        endif()
+        set(SPARK_HPCC_JAR ${CMAKE_CURRENT_BINARY_DIR}/spark-hpcc-${JAR_VERSION}.jar)
     endif()
 
-    if(NOT DFSCLIENT_JAR)    
-        if(NOT DFSCLIENT_VERSION)
-            set(DFSCLIENT_VERSION "7.2.6")
+    if(NOT DFSCLIENT_JAR)
+        if(HPCC_MATURITY STREQUAL "release") 
+            file(DOWNLOAD
+                ${CENTRAL_REPO}/org/hpccsystems/dfsclient/${JAR_VERSION}/dfsclient-${JAR_VERSION}-jar-with-dependencies.jar
+                ${CMAKE_CURRENT_BINARY_DIR}/dfsclient-${JAR_VERSION}-jar-with-dependencies.jar
+                INACTIVITY_TIMEOUT 30
+                TIMEOUT 90)
+        else()
+            execute_process(
+                COMMAND wget "https://oss.sonatype.org/service/local/artifact/maven/content?r=snapshots&g=org.hpccsystems&a=dfsclient&v=${JAR_VERSION}&c=jar-with-dependencies" -O dfsclient-${JAR_VERSION}-jar-with-dependencies.jar -q
+                WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
+                RESULT_VARIABLE dl_dfsclient
+                OUTPUT_QUIET
+                )
+            if(dl_dfsclient)
+                message(FATAL_ERROR "Download of dfsclient-${JAR_VERSION}-jar-with-dependencies.jar failed")
+            else()
+                message(STATUS "Successfully downloaded dfsclient-${JAR_VERSION}-jar-with-dependencies.jar")
+            endif()
         endif()
-        file(DOWNLOAD
-            ${CENTRAL_REPO}/org/hpccsystems/dfsclient/${DFSCLIENT_VERSION}/dfsclient-${DFSCLIENT_VERSION}-jar-with-dependencies.jar
-            ${CMAKE_CURRENT_BINARY_DIR}/dfsclient-${DFSCLIENT_VERSION}-jar-with-dependencies.jar
-            INACTIVITY_TIMEOUT 30
-            TIMEOUT 90)
-        set(DFSCLIENT_JAR ${CMAKE_CURRENT_BINARY_DIR}/dfsclient-${DFSCLIENT_VERSION}-jar-with-dependencies.jar)
+        set(DFSCLIENT_JAR ${CMAKE_CURRENT_BINARY_DIR}/dfsclient-${JAR_VERSION}-jar-with-dependencies.jar)
     endif(NOT DFSCLIENT_JAR)
 
 

+ 8 - 3
rtl/eclrtl/rtlds.cpp

@@ -32,9 +32,10 @@ unsigned getNextSize(unsigned max, unsigned required)
 {
     if (required > DOUBLE_LIMIT)
     {
-        max = (required + DOUBLE_LIMIT) & ~(DOUBLE_LIMIT-1);
-        if (required >= max)
-            throw MakeStringException(-1, "getNextSize: Request for %d bytes oldMax = %d", required, max);
+        unsigned nextMax = (required + DOUBLE_LIMIT) & ~(DOUBLE_LIMIT-1);
+        if (required >= nextMax)
+            throw MakeStringException(-1, "Request to create an embedded dataset exceeded 4Gb.  [Old size = %u]", max);
+        max = nextMax;
     }
     else
     {
@@ -76,6 +77,10 @@ void RtlDatasetBuilder::ensure(size32_t required)
 
 byte * RtlDatasetBuilder::ensureCapacity(size32_t required, const char * fieldName)
 {
+    //Check if the required memory wraps within a size32_t type
+    if (totalSize + required < totalSize)
+        throw MakeStringException(-1, "Request to create an embedded dataset >= 4Gb.  [Old size = %u, extra = %u]", totalSize, required);
+
     ensure(totalSize + required);
     return self; // self is updated by ensure()
 }