module MU
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the folder or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the folder or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the folder or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2016 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2014 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2017 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2020 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2017 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2019 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2017 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2018 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
- Copyright
-
Copyright © 2017 eGlobalTech, Inc., all rights reserved
Licensed under the BSD-3 license (the “License”); you may not use this file except in compliance with the License. You may obtain a copy of the License in the root of the project or at
http://egt-labs.com/mu/LICENSE.html
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.
Constants
- DEBUG
For log entries that should only be logged when we're in verbose mode
- ERR
Log entries for fatal errors
- ERROR
Log entries for fatal errors
- INFO
For ordinary log entries
- NOTICE
For more interesting log entries which are not errors
- SUMMARY
Log entries that will be held and displayed/emailed at the end of deploy, cleanup, etc.
- WARN
Log entries for non-fatal errors
- WARNING
Log entries for non-fatal errors
Public Class Methods
Wrapper for {MU::Cloud::AWS.account_number}
# File modules/mu.rb, line 844 def self.account_number if !@@globals[Thread.current.object_id].nil? and !@@globals[Thread.current.object_id]['account_number'].nil? return @@globals[Thread.current.object_id]['account_number'] end @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['account_number'] = MU::Cloud::AWS.account_number @@globals[Thread.current.object_id]['account_number'] end
Return the name of the Mu log and key bucket for this Mu server. Not necessarily in any specific cloud provider. @return [String]
# File modules/mu.rb, line 1099 def self.adminBucketName(platform = nil, credentials: nil) return nil if platform and !MU::Cloud.supportedClouds.include?(platform) clouds = platform.nil? ? MU::Cloud.supportedClouds : [platform] clouds.each { |cloud| bucketname = MU::Cloud.cloudClass(cloud).adminBucketName(credentials) begin if platform or (MU::Cloud.cloudClass(cloud).hosted? and platform.nil?) or cloud == MU::Config.defaultCloud return bucketname end end } return bucketname end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 506 def self.appname; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['appname'] end
The version of Chef
we will install on nodes. @return [String]
# File modules/mu.rb, line 794 def self.chefVersion @@chefVersion end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 536 def self.chef_user; @@globals[Thread.current.object_id] ||= {} if @@globals.has_key?(Thread.current.object_id) and @@globals[Thread.current.object_id].has_key?('chef_user') @@globals[Thread.current.object_id]['chef_user'] elsif Etc.getpwuid(Process.uid).name == "root" return "mu" else return Etc.getpwuid(Process.uid).name end end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 560 def self.curRegion @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['curRegion'] ||= myRegion || ENV['EC2_REGION'] end
Mu's deployment metadata directory.
# File modules/mu.rb, line 575 def self.dataDir(for_user = MU.mu_user) if !localOnly and ((Process.uid == 0 and (for_user.nil? or for_user.empty?)) or for_user == "mu" or for_user == "root") return @myDataDir else for_user ||= MU.mu_user basepath = Etc.getpwnam(for_user).dir+"/.mu" Dir.mkdir(basepath, 0755) if !Dir.exist?(basepath) Dir.mkdir(basepath+"/var", 0755) if !Dir.exist?(basepath+"/var") return basepath+"/var" end end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 500 def self.deploy_id; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['deploy_id'] end
Little hack to initialize library-only environments' config files
# File modules/mu.rb, line 642 def self.detectCloudProviders MU.log "Auto-detecting cloud providers" new_cfg = $MU_CFG.dup examples = {} MU::Cloud.supportedClouds.each { |cloud| cloudclass = MU::Cloud.cloudClass(cloud) begin if cloudclass.hosted? and !$MU_CFG[cloud.downcase] cfg_blob = cloudclass.hosted_config if cfg_blob new_cfg[cloud.downcase] = cfg_blob MU.log "Adding auto-detected #{cloud} stanza", MU::NOTICE end elsif !$MU_CFG[cloud.downcase] and !cloudclass.config_example.nil? examples[cloud.downcase] = cloudclass.config_example end rescue NoMethodError => e # missing .hosted? is normal for dummy layers like CloudFormation MU.log e.message, MU::WARN end } new_cfg['auto_detection_done'] = true if new_cfg != $MU_CFG or !cfgExists? MU.log "Generating #{cfgPath}" saveMuConfig(new_cfg, examples) # XXX and reload it end new_cfg end
Copy the set of global variables in use by another thread, typically our parent thread.
# File modules/mu.rb, line 481 def self.dupGlobals(parent_thread_id, target_thread: Thread.current) @@globals[parent_thread_id] ||= {} @@globals[parent_thread_id].each_pair { |name, value| setVar(name, value, target_thread: target_thread) } end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 512 def self.environment; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['environment'] end
The Mu config directory @return [String]
# File modules/mu.rb, line 446 def self.etcDir; @@etcDir end
Generate a random password which will satisfy the complexity requirements of stock Amazon Windows AMIs. return [String]: A password string.
# File modules/mu.rb, line 1077 def self.generateWindowsPassword(safe_pattern: '~!@#%^&*_-+=`|(){}[]:;<>,.?', retries: 50) # We have dopey complexity requirements, be stringent here. # I'll be nice and not condense this into one elegant-but-unreadable regular expression attempts = 0 safe_metachars = Regexp.escape(safe_pattern) begin if attempts > retries MU.log "Failed to generate an adequate Windows password after #{attempts} attempts", MU::ERR raise MuError, "Failed to generate an adequate Windows password after #{attempts} attempts" end winpass = Password.random(14..16) attempts += 1 end while winpass.nil? or !winpass.match(/^[a-z]/i) or !winpass.match(/[A-Z]/) or !winpass.match(/[a-z]/) or !winpass.match(/\d/) or !winpass.match(/[#{safe_metachars}]/) or winpass.match(/[^\w\d#{safe_metachars}]/) MU.log "Generated Windows password after #{attempts} attempts", MU::DEBUG return winpass end
Rig us up to share some global class variables (as MU.var_name). These values are PER-THREAD, so that things like Momma Cat can be more or less thread-safe with global values.
# File modules/mu.rb, line 464 def self.globals; @@globals end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 530 def self.handle; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['handle'] end
Recursively compare two hashes. Intended to see when cloud API descriptions of existing resources differ from proposed changes so we know when to bother updating. @param hash1 [Hash]: The first hash @param hash2 [Hash]: The second hash @param missing_is_default [Boolean]: Assume that any element missing from hash2 but present in hash1 is a default value to be ignored @return [Boolean]
# File modules/mu.rb, line 1009 def self.hashCmp(hash1, hash2, missing_is_default: false) return false if hash1.nil? hash2.keys.each { |k| if hash1[k].nil? return false end } if !missing_is_default hash1.keys.each { |k| if hash2[k].nil? return false end } end hash1.keys.each { |k| if hash1[k].is_a?(Array) return false if !missing_is_default and hash2[k].nil? if !hash2[k].nil? hash2[k].each { |item| if !hash1[k].include?(item) return false end } end elsif hash1[k].is_a?(Hash) and !hash2[k].nil? result = hashCmp(hash1[k], hash2[k], missing_is_default: missing_is_default) return false if !result else if missing_is_default return false if !hash2[k].nil? and hash1[k] != hash2[k] else return false if hash1[k] != hash2[k] end end } true end
Are we operating in a gem?
# File modules/mu.rb, line 417 def self.inGem? return @in_gem if defined? @in_gem if Gem.paths and Gem.paths.home and File.dirname(__FILE__).match(/^#{Gem.paths.home}/) @in_gem = true elsif Gem.paths and Gem.paths.path and !Gem.paths.path.empty? Gem.paths.path.each { |p| if File.dirname(__FILE__).match(/^#{Regexp.quote(p)}/) @in_gem = true end } @in_gem = false if !defined? @in_gem else @in_gem = false end end
The Mu install directory @return [String]
# File modules/mu.rb, line 454 def self.installDir; @@installDir end
@param groomer [String]: The grooming agent to load. @return [Class]: The class object implementing this groomer agent
# File modules/mu.rb, line 803 def self.loadGroomer(groomer) MU::Groomer.loadGroomer(groomer) end
Returns true if we're running without a full systemwide Mu Master
install, typically as a gem.
# File modules/mu.rb, line 412 def self.localOnly ((Gem.paths and Gem.paths.home and File.realpath(File.expand_path(File.dirname(__FILE__))).match(/^#{Gem.paths.home}/)) or !Dir.exist?("/opt/mu")) end
Shortcut to invoke {MU::Logger#log}
# File modules/mu.rb, line 612 def self.log(msg, level = MU::INFO, shorthand_details = nil, details: nil, html: false, verbosity: nil, color: true) return if (level == MU::DEBUG and verbosity and verbosity <= MU::Logger::LOUD) return if verbosity and verbosity == MU::Logger::SILENT details ||= shorthand_details if (level == MU::ERR or level == MU::WARN or level == MU::DEBUG or (verbosity and verbosity >= MU::Logger::LOUD) or (level == MU::NOTICE and !details.nil?)) and Thread.current.thread_variable_get("name") newdetails = { :thread => Thread.current.object_id, :name => Thread.current.thread_variable_get("name") } newdetails[:details] = details.dup if details details = newdetails end @@logger.log(msg, level, details: details, html: html, verbosity: verbosity, color: color) end
The main (root) Mu user's data directory. @return [String]
# File modules/mu.rb, line 438 def self.mainDataDir; @@mainDataDir end
The port on which the Momma Cat daemon should listen for requests @return [Integer]
# File modules/mu.rb, line 686 def self.mommaCatPort @@mommacat_port end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 494 def self.mommacat; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['mommacat'] end
Front our global $MU_CFG hash with a read-only copy
# File modules/mu.rb, line 406 def self.muCfg Marshal.load(Marshal.dump($MU_CFG)).freeze end
Public Mu server IP address, not necessarily the same as MU.my_public_ip
(an be a proxy, load balancer, etc)
# File modules/mu.rb, line 738 def self.mu_public_addr; @@mu_public_addr end
Public Mu server name, not necessarily the same as MU.my_public_ip
(an be a proxy, load balancer, etc)
# File modules/mu.rb, line 733 def self.mu_public_ip; @@mu_public_ip end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 548 def self.mu_user @@globals[Thread.current.object_id] ||= {} if @@globals.has_key?(Thread.current.object_id) and @@globals[Thread.current.object_id].has_key?('mu_user') return @@globals[Thread.current.object_id]['mu_user'] elsif Etc.getpwuid(Process.uid).name == "root" return "mu" else return Etc.getpwuid(Process.uid).name end end
Find the cloud provider availability zone where this master resides, if any
# File modules/mu.rb, line 868 def self.myAZ if MU::Cloud::Google.hosted? zone = MU::Cloud::Google.getGoogleMetaData("instance/zone") @@myAZ_var = zone.gsub(/.*?\//, "") elsif MU::Cloud::AWS.hosted? return nil if MU.myCloudDescriptor.nil? begin @@myAZ_var ||= MU.myCloudDescriptor.placement.availability_zone rescue Aws::EC2::Errors::InternalError => e MU.log "Got #{e.inspect} on MU::Cloud::AWS.ec2(region: #{MU.myRegion}).describe_instances(instance_ids: [#{@@myInstanceId}])", MU::WARN sleep 10 end end @@myAZ_var end
Figure out what cloud provider we're in, if any. @return [String]: Google, AWS, etc. Returns nil if we don't seem to be in a cloud.
# File modules/mu.rb, line 828 def self.myCloud if MU::Cloud::Google.hosted? @@myInstanceId = MU::Cloud::Google.getGoogleMetaData("instance/name") return "Google" elsif MU::Cloud::AWS.hosted? @@myInstanceId = MU::Cloud::AWS.getAWSMetaData("instance-id") return "AWS" elsif MU::Cloud::Azure.hosted? metadata = MU::Cloud::Azure.get_metadata()["compute"] @@myInstanceId = MU::Cloud::Azure::Id.new("/subscriptions/"+metadata["subscriptionId"]+"/resourceGroups/"+metadata["resourceGroupName"]+"/providers/Microsoft.Compute/virtualMachines/"+metadata["name"]) return "Azure" end nil end
If our Mu master is hosted in a cloud provider, we can use this to get its cloud API descriptor.
# File modules/mu.rb, line 862 def self.myCloudDescriptor; @@myCloudDescriptor end
The cloud instance identifier of this Mu master
# File modules/mu.rb, line 855 def self.myInstanceId return nil if MU.myCloud.nil? @@myInstanceId # MU.myCloud will have set this, since it's our test variable end
Find the cloud provider region where this master resides, if any
# File modules/mu.rb, line 809 def self.myRegion if MU::Cloud::Google.hosted? zone = MU::Cloud::Google.getGoogleMetaData("instance/zone") @@myRegion_var = zone.gsub(/^.*?\/|\-\d+$/, "") elsif MU::Cloud::AWS.hosted? @@myRegion_var ||= MU::Cloud::AWS.myRegion elsif MU::Cloud::Azure.hosted? @@myRegion_var ||= MU::Cloud::Azure.myRegion else @@myRegion_var = nil end @@myRegion_var end
Mu's installation directory. @return [String]
# File modules/mu.rb, line 381 def self.myRoot; @@myRoot end
Mu's SSL certificate directory @return [String]
# File modules/mu.rb, line 998 def self.mySSLDir @@mySSLDir end
The VPC/Network in which this Mu master resides
# File modules/mu.rb, line 985 def self.myVPC return nil if MU.myCloud.nil? return @@myVPC_var if @@myVPC_var my_vpc_desc = MU.myVPCObj @@myVPC_var ||= my_vpc_desc.cloud_id if my_vpc_desc @@myVPC_var end
The VPC/Network in which this Mu master resides
# File modules/mu.rb, line 976 def self.myVPCObj return nil if MU.myCloud.nil? return @@myVPCObj_var if @@myVPCObj_var @@myVPCObj_var ||= MU::Cloud.cloudClass(MU.myCloud).myVPCObj @@myVPCObj_var end
This machine's private IP address
# File modules/mu.rb, line 723 def self.my_private_ip; @@my_private_ip end
This machine's public IP address
# File modules/mu.rb, line 728 def self.my_public_ip; @@my_public_ip end
Expunge all global variables.
# File modules/mu.rb, line 489 def self.purgeGlobals @@globals.delete(Thread.current.object_id) end
Boilerplate retry block executor, for making cloud API calls which might fail transiently.
@param catchme [Array<Exception>]: Exception classes which should be caught and retried @param wait [Integer]: Number of seconds to wait between retries @param max [Integer]: Maximum number of retries; if less than 1, will retry indefinitely @param ignoreme [Array<Exception>]: Exception classes which can be silently treated as success. This will override any loop_if
block and return automatically (after invoking always
, if the latter was specified). @param on_retry [Proc]: Optional block of code to invoke during retries @param always [Proc]: Optional block of code to invoke before returning or failing, a bit like ensure
@param loop_if [Proc]: Optional block of code to invoke which will cause our block to be rerun until true @param loop_msg [String]: Message to display every third attempt
# File modules/mu.rb, line 321 def self.retrier(catchme = nil, wait: 30, max: 0, ignoreme: [], on_retry: nil, always: nil, loop_if: nil, loop_msg: nil, logmsg_interval: 3) loop_if ||= Proc.new { false } retries = 0 begin retries += 1 loglevel = (logmsg_interval > 0 and (retries % logmsg_interval) == 0) ? MU::NOTICE : MU::DEBUG log_attempts = retries.to_s log_attempts += (max > 0 ? "/"+max.to_s : "") yield(retries, wait) if block_given? if loop_if.call MU.log loop_msg, loglevel, details: log_attempts if loop_msg sleep wait end rescue StandardError => e if catchme and catchme.include?(e.class) if max > 0 and retries >= max always.call if always and always.is_a?(Proc) if ignoreme.include?(e.class) return else raise e end end if on_retry and on_retry.is_a?(Proc) on_retry.call(e) end if retries == max-1 MU.log e.message, MU::WARN, details: caller sleep wait # wait extra on the final attempt else MU.log e.message, loglevel, details: log_attempts end sleep wait retry elsif ignoreme and ignoreme.include?(e.class) always.call if always and always.is_a?(Proc) return else always.call if always and always.is_a?(Proc) raise e end end while loop_if.call and (max < 1 or retries < max) always.call if always and always.is_a?(Proc) end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 524 def self.seed; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['seed'] end
Set parameters parameters for calls to {MU#log}
# File modules/mu.rb, line 595 def self.setLogging(verbosity, webify_logs = false, handle = STDOUT, color = true) @@logger ||= MU::Logger.new(verbosity, webify_logs, handle, color) @@logger.html = webify_logs @@logger.verbosity = verbosity @@logger.handle = handle @@logger.color = color end
Set one of our global per-thread variables.
# File modules/mu.rb, line 471 def self.setVar(name, value, target_thread: Thread.current) @@global_var_semaphore.synchronize { @@globals[target_thread.object_id] ||= Hash.new @@globals[target_thread.object_id][name] ||= Hash.new @@globals[target_thread.object_id][name] = value } end
Given a hash, or an array that might contain a hash, change all of the keys to symbols. Useful for formatting option parameters to some APIs.
# File modules/mu.rb, line 1050 def self.strToSym(obj) if obj.is_a?(Hash) newhash = {} obj.each_pair { |k, v| if v.is_a?(Hash) or v.is_a?(Array) newhash[k.to_sym] = MU.strToSym(v) else newhash[k.to_sym] = v end } newhash elsif obj.is_a?(Array) newarr = [] obj.each { |v| if v.is_a?(Hash) or v.is_a?(Array) newarr << MU.strToSym(v) else newarr << v end } newarr end end
Recursively turn a Ruby OpenStruct into a Hash
@param struct [OpenStruct] @param stringify_keys [Boolean] @return [Hash]
# File modules/mu.rb, line 888 def self.structToHash(struct, stringify_keys: false) return nil if struct.nil? google_struct = false begin google_struct = struct.class.ancestors.include?(::Google::Apis::Core::Hashable) rescue NameError rescue TypeError return struct end aws_struct = false begin aws_struct = struct.class.ancestors.include?(::Seahorse::Client::Response) rescue NameError rescue TypeError return struct end azure_struct = false begin azure_struct = struct.class.ancestors.include?(::MsRestAzure) or struct.class.name.match(/Azure::.*?::Mgmt::.*?::Models::/) rescue NameError rescue TypeError return struct end if struct.is_a?(Struct) or struct.class.ancestors.include?(Struct) or google_struct or aws_struct or azure_struct hash = if azure_struct MU::Cloud::Azure.respToHash(struct) else struct.to_h end if stringify_keys newhash = {} hash.each_pair { |k, v| newhash[k.to_s] = v } hash = newhash end hash.each_pair { |key, value| hash[key] = self.structToHash(value, stringify_keys: stringify_keys) } return hash elsif struct.is_a?(MU::Config::Ref) struct = struct.to_h elsif struct.is_a?(MU::Cloud::Azure::Id) struct = struct.to_s elsif struct.is_a?(Hash) if stringify_keys newhash = {} struct.each_pair { |k, v| newhash[k.to_s] = v } struct = newhash end struct.each_pair { |key, value| struct[key] = self.structToHash(value, stringify_keys: stringify_keys) } return struct elsif struct.is_a?(Array) struct.map! { |elt| self.structToHash(elt, stringify_keys: stringify_keys) } elsif struct.is_a?(String) # Cleanse weird encoding problems return struct.dup.to_s.force_encoding("ASCII-8BIT").encode('UTF-8', invalid: :replace, undef: :replace, replace: '?') else return struct end end
Shortcut to get SUMMARY
messages from the global MU::Logger
instance @return [Array<String>]
# File modules/mu.rb, line 607 def self.summary @@logger.summary end
XXX these guys to move into mu/groomer List of known/supported grooming agents (configuration management tools)
# File modules/mu.rb, line 786 def self.supportedGroomers ["Chef", "Ansible"] end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 566 def self.syncLitterThread; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['syncLitterThread'] end
Accessor for per-thread global variable. There is probably a Ruby-clever way to define this.
# File modules/mu.rb, line 518 def self.timestamp; @@globals[Thread.current.object_id] ||= {} @@globals[Thread.current.object_id]['timestamp'] end
Fetch the email address of a given Mu user
# File modules/mu.rb, line 753 def self.userEmail(user = MU.mu_user) @userlist ||= MU::Master.listUsers user = "mu" if user == "root" if Dir.exist?("#{MU.mainDataDir}/users/#{user}") and File.readable?("#{MU.mainDataDir}/users/#{user}/email") and File.size?("#{MU.mainDataDir}/users/#{user}/email") return File.read("#{MU.mainDataDir}/users/#{user}/email").chomp elsif @userlist.has_key?(user) return @userlist[user]['email'] else MU.log "Attempted to load nonexistent user #{user}", MU::ERR return nil end end
Fetch the real-world name of a given Mu user
# File modules/mu.rb, line 769 def self.userName(user = MU.mu_user) @userlist ||= MU::Master.listUsers if Dir.exist?("#{MU.mainDataDir}/users/#{user}") and File.readable?("#{MU.mainDataDir}/users/#{user}/realname") and File.size?("#{MU.mainDataDir}/users/#{user}/realname") return File.read("#{MU.mainDataDir}/users/#{user}/realname").chomp elsif @userlist.has_key?(user) return @userlist[user]['email'] else MU.log "Attempted to load nonexistent user #{user}", MU::ERR return nil end end
Return the verbosity setting of the default @@logger object
# File modules/mu.rb, line 590 def self.verbosity @@logger ? @@logger.verbosity : MU::Logger::NORMAL end
utility routine for sorting semantic versioning strings
# File modules/mu.rb, line 386 def self.version_sort(a, b) a_parts = a.split(/[^a-z0-9]/) b_parts = b.split(/[^a-z0-9]/) for i in 0..a_parts.size matchval = if a_parts[i] and b_parts[i] and a_parts[i].match(/^\d+/) and b_parts[i].match(/^\d+/) a_parts[i].to_i <=> b_parts[i].to_i elsif a_parts[i] and !b_parts[i] 1 elsif !a_parts[i] and b_parts[i] -1 else a_parts[i] <=> b_parts[i] end return matchval if matchval != 0 end 0 end