diff --git a/README.md b/README.md
index 6252746..d776c37 100644
--- a/README.md
+++ b/README.md
@@ -162,6 +162,15 @@ SHA256 digest for BasePlus: A321A4BC54D444B82575EC5D443553A096557AD69DC171D578A3
[Documentation for BasePlus](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/baseplus.md "Documentation for BasePlus")
+- **GSM** (Generate Secure Macros)\[0.11\], package allows
+ to create secured macros stored in SAS Proc FCMP functions.
+ The dataset with functions can be shared between different operating systems
+ and allows to generate macros on site without showing their code.
+
+SHA256 digest for GSM: 4322D79C382B9D58EF5E51AFD0856331F8B38B1B35AC21295DADFC43F81B2AF8
+
+[Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM")
+
- **dynMacroArray**\[0.2\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA)
SHA256 digest for dynMacroArray: 67956116578E71327748B7EB3DAFF9D872DBC6F6EDD0DC11B7CF2A54FDA71785
diff --git a/packages/README.md b/packages/README.md
index c8a8d86..8ffbdfc 100644
--- a/packages/README.md
+++ b/packages/README.md
@@ -110,6 +110,17 @@ SHA256 digest for BasePlus: A321A4BC54D444B82575EC5D443553A096557AD69DC171D578A3
---
+- **GSM** (Generate Secure Macros)\[0.11\], package allows
+ to create secured macros stored in SAS Proc FCMP functions.
+ The dataset with functions can be shared between different operating systems
+ and allows to generate macros on site without showing their code.
+
+SHA256 digest for GSM: 4322D79C382B9D58EF5E51AFD0856331F8B38B1B35AC21295DADFC43F81B2AF8
+
+[Documentation for GSM](https://github.com/yabwon/SAS_PACKAGES/blob/main/packages/gsm.md "Documentation for GSM")
+
+---
+
- **dynMacroArray**\[0.2\], set of macros (wrappers for a hash table) emulating dynamic array in the data step (macro predecessor of DFA)
SHA256 digest for dynMacroArray: 67956116578E71327748B7EB3DAFF9D872DBC6F6EDD0DC11B7CF2A54FDA71785
diff --git a/packages/SHA256_for_packages.txt b/packages/SHA256_for_packages.txt
index 774cf38..8cb9dbc 100644
--- a/packages/SHA256_for_packages.txt
+++ b/packages/SHA256_for_packages.txt
@@ -1,3 +1,9 @@
+/* 20210719 */
+GSM: 4322D79C382B9D58EF5E51AFD0856331F8B38B1B35AC21295DADFC43F81B2AF8
+
+/* 20210716 */
+GSM: 7134C8672023972BA0D5D5CE1E611F0DBB5F60ADAE847BC59C94FF7E2BEC0278
+
/* 20210528 */
BasePlus: A321A4BC54D444B82575EC5D443553A096557AD69DC171D578A330277E67637A
DFA: 22AB51B85E3344B8C0FB7AF164247881B656F5CBA88BBA974AD8BC41ED79327F
diff --git a/packages/gsm.md b/packages/gsm.md
new file mode 100644
index 0000000..dbe6a06
--- /dev/null
+++ b/packages/gsm.md
@@ -0,0 +1,251 @@
+- [The GSM package](#gsm-package)
+- [Content description](#content-description)
+ * [`%GSM()` macro](#gsm-macro)
+ * [`%GSMpck_makeFCMPcode()` macro](#gsmpck-makefcmpcode-macro)
+
+ * [License](#license)
+
+---
+
+
+# The GSM package [ver. 0.11] ###############################################
+
+The **GSM** (a.k.a. *Generate Secure Macros*) package allows
+to create secured macros stored in SAS Proc FCMP functions.
+The dataset with functions can be shared and allows to generate
+macros without showing their code.
+
+The GSM package is basically an automated version of the following:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+proc fcmp outlib = work.gsm.secure ENCRYPT;
+ function generateMacro() $;
+ rc = RESOLVE('
+ %macro secretMacro(x) / SECURE;
+ data test;
+ a = "&x.";
+ run;
+ %mend;
+ ');
+ return (rc);
+ endsub;
+run;
+
+/* share work.gsm dataset */
+options cmplib = work.gsm;
+data _null_;
+ rc = generateMacro();
+ put rc=;
+run;
+
+/* enjoy */
+%secretMacro(42)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+See examples for more details.
+
+
+*How to use it:*
+ - Copy all files with your macros into a directory.
+ Best approach is to have one file for one macro.
+ - Copy a path the directory.
+ - Run the following code:
+ ```
+ %GSM(, cmplib=)
+ ```
+ - Share generated `ZIP` file (unzip and run the code).
+
+*Limitations:*
+ Single macro file cannot be longer than 32760 bytes.
+
+---
+
+Package contains:
+ 1. macro gsm
+ 2. macro gsmpck_makefcmpcode
+
+Required SAS Components:
+ `Base SAS Software`
+
+* SAS package generated by generatePackage, version 20210528 *
+
+The SHA256 hash digest for package BasePlus:
+`4322D79C382B9D58EF5E51AFD0856331F8B38B1B35AC21295DADFC43F81B2AF8`
+
+
+## >>> `%GSM()` macro: <<< #######################
+
+The `%GSM()` macro is the main macro of
+the **GSM** (a.k.a. *Generate Secure Macros*) package.
+
+It converts a list of macros provided by the user into
+a data set of the Proc FCMP functions. The macros are stored
+as encrypted code which allow to share the macros
+without showing their code.
+
+As a result a zip file, containing dataset with functions and
+code to be executed on site, is generated.
+
+Since encrypted code is stored in a SAS dataset it has
+no limitation in sharing between operating systems (like catalogs have).
+
+*Limitation:* Due to the `Resolve()` function limitations
+ a single macro file cannot be longer than 32760 bytes.
+
+*Notes:*
+- All macros have to have the `secure` option added, i.e. `%macro aMacroname(...) / SECURE ;`.
+- During the execution a test macro, named `%GSMpck_dummyMacroForTests()`, is generated.
+- The `%GSM()` macro calls the `%GSMpck_makeFCMPcode(...)` macro internally.
+
+### SYNTAX: ###################################################################
+
+The basic syntax is the following, the `<...>` means optional parameters:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+%GSM(
+ path
+ <,trim=0>
+ <,cmplib=work.generateMacros>
+ <,source2=>
+ <,outpath=>
+)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Arguments description**:
+
+1. `path` - *Required*, indicates a directory which contains files with macros.
+ Only files with `sas` extension are used.
+
+* `trim=` - *Optional*, the default value is `0`.
+ If set to `1` then lines of macro code are trimmed.
+ If set to `2` then lines of macro code are stripped.
+
+* `cmplib=` - *Optional*, the default value is `work.generateMacros`.
+ Names the dataset which will contain generated functions.
+
+* `source2=` - *Optional*, the default value is null.
+ Indicate if `%includ`-ed files are printed out.
+ Any value other than null enables printing.
+
+* `outpath=` - *Optional*, the default value is set the same as the `path`.
+ Points a directory in which a result (a zip file) is generated.
+
+---
+
+
+### Example: ###################################################################
+
+Example 1. Prepare 2 files: `f1.sas` and `f2.sas` and use the `%GSM()` macro.
+
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+%let path = %sysfunc(pathname(work))/path2files;
+
+%put &=path.;
+options dlcreatedir;
+libname path "&path.";
+filename path "&path.";
+
+data _null_;
+ file path(f1.sas);
+ input;
+ put _infile_;
+cards4;
+%macro abc(x) / SECURE;
+ data test;
+ do i = 1 to &x.;
+ put i=;
+ end;
+ run;
+%mend;
+;;;;
+run;
+
+data _null_;
+ file path(f2.sas);
+ input;
+ put _infile_;
+cards4;
+%macro xyz(x) / SECURE;
+ %do i = 1 to &x.;
+ %put &i=;
+ %end;
+%mend;
+;;;;
+run;
+
+%GSM(&path., cmplib=work.myMacros)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+
+## >>> `%GSMpck_makeFCMPcode()` macro: <<< #######################
+
+The `%GSMpck_makeFCMPcode()` macro is an internal macro of
+the **GSM** (a.k.a. *Generate Secure Macros*) package.
+
+It executes a process of converting
+a macro provided by the user into
+a Proc FCMP function.
+
+Since encrypted code is stored in a SAS dataset it has
+no limitation in sharing between operating systems (like catalogs have).
+
+*Limitation:* Single macro file cannot be longer than 32760 bytes.
+
+### SYNTAX: ###################################################################
+
+The basic syntax is the following, the `<...>` means optional parameters:
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~sas
+%GSMpck_makeFCMPcode(
+ path
+ ,number
+ <,trim=0>
+ <,outlib=work.generateMacros.secure>
+ <,source2=>
+ <,fileNameCode=FNC>
+)
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**Arguments description**:
+
+1. `path` - *Required*, indicates a directory which contains files with macros.
+ Only files with `sas` extension are used.
+
+2. `number` - *Required*, a sequential number.
+
+* `trim=` - *Optional*, the default value is `0`.
+ If set to `1` then lines of macro code are trimmed.
+ If set to `2` then lines of macro code are stripped.
+
+* `cmplib=` - *Optional*, the default value is `work.generateMacros`.
+ Names the dataset which will contain generated functions.
+
+* `source2=` - *Optional*, the default value is null.
+ Indicate if `%includ`-ed files are printed out.
+ Any value other than null enables printing.
+
+* `fileNameCode=` - *Optional*, the default value is `FNC`.
+ Internal fileref.
+
+---
+
+
+## License ####################################################################
+
+Copyright (c) 2021 Bartosz Jablonski
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+
+---
\ No newline at end of file
diff --git a/packages/gsm.zip b/packages/gsm.zip
new file mode 100644
index 0000000..f7e6fde
Binary files /dev/null and b/packages/gsm.zip differ