World Library  
Flag as Inappropriate
Email this Article

Iso/iec 19770

 

Iso/iec 19770

International standards in the ISO/IEC 19770[1] family of standards for IT asset management (ITAM) address both the processes and technology for managing software assets and related IT assets. Broadly speaking, the standard family bellongs to the set of Software Asset Management (or SAM) standards and is integrated with other Management System Standards.

ISO/IEC 19770 day-to-day management comes under ISO/IEC/SC7/WG21, or Working Group 21 (WG21) chaired by Roger Cummings[2] as convener and Peter Beruk[3] as secretary. It is WG21 that is responsible for developing, improving and ensuring market needs are met when developing these standards.

Contents

  • What is the purpose of 19770? 1
  • ISO/IEC 19770-1: processes 2
    • Updates to 19770-1 2.1
    • Preview of 19770-1 2.2
  • ISO/IEC 19770-2: software identification tag 3
    • Overview of SWID tags in use 3.1
    • Standards development information 3.2
    • Non-profit organizational support 3.3
    • Commercial organizational support 3.4
    • Governmental support 3.5
    • Standards development organization support 3.6
    • Preview of ISO 19770-2:2015 3.7
  • ISO/IEC 19770-3: software entitlement schema (ENT) 4
    • Standards development information 4.1
    • Principles 4.2
      • Maximum possible usability with legacy entitlement information 4.2.1
      • Maximum possible alignment with the software identification tag specification (ISO/IEC 19770-2) 4.2.2
    • Stakeholder benefits 4.3
  • ISO/IEC 19770-4: resource utilization measurement 5
  • ISO/IEC 19770-5: overview and vocabulary 6
    • Free copy of ISO/IEC 19770-5 6.1
  • References 7
  • External links 8

What is the purpose of 19770?

The ISO 19770 standard is a concept of ITAM standardization within an organization incorporating ISO/IEC standards.

The objective of the standard is to give organizations of all sizes information and assistance to assist at the risk and cost minimization of ITAM assets. Through implementation, these same organizations will acquire a competitive advantage through:

  • Management of the risk of interrupted IT service delivery, breach of legal agreements and audit;
  • Reducing overall software costs through the implementation of various processes; and
  • Better information availability leading to improved decision-making based on accurate data.

The major parts of this ITAM standard are detailed below.

  1. ISO/IEC 19770-1 is a process framework to enable an organization to prove that it is performing ITAM to a standard sufficient to satisfy corporate governance requirements and ensure effective support for IT service management overall.
  2. ISO/IEC 19770-2 provides an ITAM data standard for software identification tags ("SWID").
  3. ISO/IEC 19770-3 provides a technical definition of a schema that can encapsulate the details of software entitlements, including usage rights, limitations and metrics ("ENT").
  4. ISO/IEC 19770-5 provides the overview and vocabulary.
19770 Family Block Diagram

ISO/IEC 19770-1: processes

ISO/IEC 19770-1 is a framework of ITAM processes to enable an organization to prove that it is performing software asset management to a standard sufficient to satisfy corporate governance requirements and ensure effective support for IT service management overall. ISO/IEC 19770-1 is aligned to Service Management (ISO/IEC 20000-1), and contains 27 process areas, with objectives and detailed outcomes defined for each.

Updates to 19770-1

The first generation was published in 2006. The second generation was published in 2012. It retains the original content (with only minor changes), but splits the standard up into four tiers which can be attained sequentially. These tiers are:

  • Tier 1: Trustworthy Data
  • Tier 2: Practical Management
  • Tier 3: Operational Integration
  • Tier 4: Full ISO/IEC ITAM Conformance

This revised standard is designed to allow the implementation of ITAM processes to be "accomplished in multiple increments and to that increment most suited to the needs of the organization."[4]

Preview of 19770-1

An overview of the standard is available from ISO and is available in English[5] and French.[6]

ISO/IEC 19770-2: software identification tag

ISO/IEC 19770-2 provides an ITAM data standard for software identification (SWID) tags. Software ID tags provide authoritative identifying information for installed software or other licensable item (such as fonts or copyrighted papers).

Overview of SWID tags in use

There are three primary methods that may be used to ensure SWID tags are available on devices with installed software:

  • SWID tags created by a software creator or publisher which are installed with the software are the most authoritative for identification purposes.
  • Organizations can create their own SWID tags for any software title that does not include a tag, allowing the organization to more accurately track software installations in their network environment
  • Third party discovery tools may optionally add tags to a device as software titles are discovered

Providing accurate software identification data improves organizational security, and lowers the cost and increases the capability of many IT processes such as patch management, desktop management, help desk management, software policy compliance, etc.

Discovery tools, or processes that utilize SWID tag data to determine the normalized names and values that are associated with a software application and ensure that all tools and processes used by an organization refer to software products with the same exact names and values.

Standards development information

This standard was first published in November 2009.[7] A revision of this standard was published in October 2015.[8]

Steve Klos[9] is the editor of 19770-2.

Non-profit organizational support

In 2009, a non-profit organization called TagVault.org[10] was formed under IEEE-ISTO[11] to evangelize the use of SWID tags. TagVault.org acts as a registration and certification authority for ISO/IEC 19770-2 software identification tags (SWID tags) and will provide tools and services allowing all SAM ecosystem members to take advantage of SWID tags faster, with a lower cost and with more industry compatibility than would otherwise be possible. SWID tags can be created by anyone, so individuals and organizations are not required to be part of TagVault.org to create or distribute tags.

Commercial organizational support

Numerous Windows installation packaging tools utilize SWID tags including:

Many software discovery tools already utilize SWID tags, including Altiris, Aspera License Management, Belarc's BelManage, Snow Inventory, CA Technologies discovery tools, Eracent's EnterpriseAM, Flexera Software's FlexNet Manager Platform, HP's Universal Discovery, IBM Endpoint Manager, and Microsoft's System Center 2012 R2 Configuration Manager.

Adobe has released multiple versions of their Creative Suites products with SWID tags.

Symantec has also released multiple products that include SWID tags and is committed to helping move the software community to a more consistent and normalized approach to software identification and eventually to a more automated approach to compliance.[12]

Microsoft Corporation has been adding SWID tags to all new releases of software products since Windows 8 was released.[13]

IBM started shipping tags with some software products in early 2014, but as of November, all releases of IBM software include SWID tags. This equates to approximately 300 product releases a month that include SWID tags.

Governmental support

The US federal government has identified 19770-2 SWID tags as an important aspect of the efforts necessary to manage compliance, logistics and security software processes. The 19770-2 standard is included on the US Department of Defense Information Standards Registry (DISR) as an emerging standard as of September 2012. The National Institute of Standards and Technology (NIST) and the National Cybersecurity Center of Excellence (NCCoE) recently discussed the need for SWIDs in the marketplace.[14]

Standards development organization support

The Distributed Management Task Force (DMTF) has developed a Software ID Tag Profile[15] that defines how SWID tags are utilized in the Common Information Model.[16]

The Trusted Computing Group (TCG) is developing a standard TNC SWID Messages and Attributes for IF-M Specification[17] that utilizes tag data for security purposes.

The National Cybersecurity Center of Excellence (NCCoE) has documented the Software Asset Management Continuous Monitoring building block[18] that specifies how SWID tags are used for the near real-time identification of software.

Department of Homeland Security. David Waltermire presented information describing the NIST Security Automation Program[19] and how SWID tags can support that effort.

Preview of ISO 19770-2:2015

An overview of the standard is available from ISO and is available in English [20]

ISO/IEC 19770-3: software entitlement schema (ENT)

This part of ISO/IEC 19770, currently in draft, provides a technical definition of an XML schema that can encapsulate the details of software entitlements, including usage rights, limitations and metrics.

The primary intentions of 19770-3 are:

  1. To provide a basis for common terminology to be used when describing entitlement rights, limitations and metrics
  2. To provide a schema which allows effective description of rights, limitations and metrics attaching to a software license.

The specific information provided by an entitlement schema (ENT) may be used to help ensure compliance with license rights and limits, to optimize license usage and to control costs. Though ENT creators are encouraged to provide the data that allow for the automatic processing, it is not mandated that data be automatically measurable. The data structure is intended to be capable of containing any kind of terms and conditions included in a software license agreement.

This part of ISO/IEC 19770 supports ITAM processes as defined in ISO/IEC 19770-1[21] It is also designed to work together with software identification tags as defined in ISO/IEC 19770-2.[22] Standardization in the field of software entitlements provides uniform, measurable data for both the license compliance, and license optimization, processes of SAM practice.

This part of ISO/IEC 19770 does not provide requirements or recommendations for processes related to software asset management or ENTs. The software asset management processes are in the scope of ISO/IEC 19770-1.

Standards development information

The ISO/IEC 19770-3 Other Working Group ("OWG")[23] was convened by teleconference call on 9 September 2008.

John Tomeny of Sassafras Software Inc was appointed as the first convener of the ISO/IEC 19770-3 Other Working Group by Working Group 21 (ISO/IEC JTC 1/SC 7/WG 21), followed by Krzysztof (Chris) Baczkiewicz for Eracent. In addition to WG21 members, other participants in the 19770-3 OWG may be any "individuals considered to have relevant expertise by the Convener".[24]

Jason Keogh[25] of Alcurian and part of the delegation from Ireland is current convener of 19770-3. It is expected that 19770-3 will be published in 2015.

Principles

This part of ISO/IEC 19770 has been developed with the following practical principles in mind:

Maximum possible usability with legacy entitlement information

The ENT, or software entitlement schema, is intended to provide the maximum possible usability with existing entitlement information, including all historical licensing transactions. While the specifications provide many opportunities for improvement in entitlement processes and practices, they must be able to handle existing licensing transactions without imposing requirements which would prevent such transactions being codified into Ent records.

Maximum possible alignment with the software identification tag specification (ISO/IEC 19770-2)

This part of ISO/IEC 19770 (entitlement schema) is intended to align closely with part 2 of the standard (software identification tags). This should facilitate both understanding and their joint use. Furthermore, any of the elements, attributes, or other specifications of part 2 which the ENT creator may wish to utilize may be used in this part as well.

Stakeholder benefits

It is intended that this standardized schema will be of benefit to all stakeholders involved in the creation, licensing, distribution, release, installation, and ongoing management of software and software entitlements.

  • Benefits to software licensors who provide ENTs include, but are not limited to:
    • Immediate software customer recognition of details of the usage rights derived from their software entitlement.
    • Ability to specify details to customers that allow software assets to be measured and reported for license compliance purposes.
    • Increased awareness of software license compliance issues on the part of end-customers.
    • Improved software customer relationships through quicker and more effective license compliance audits.
  • Benefits to SAM tool providers, deployment tool providers, re-sellers, value-added re-sellers, packagers and release managers include, but are not limited to:
    • Receipt of consistent and uniform data from software licensors and ENT creators.
    • More consistent and structured entitlement information, supporting the use of automated techniques to determine the need for remediation of software licensing.
    • Improved reporting from additional categorization made possible by the use of ENTs.
    • Improved SAM tool entitlement reconciliation capabilities resulting from standardization in location and format of software entitlement data.
    • Ability to deliver value-added functionality for compliance management through the consumption of entitlement data.
  • The benefits for software customers, SAM practitioners, IT support professionals and end users of a given software configuration item include, but are not limited to:
    • Receipt of consistent and uniform data from software licensors, resellers and SAM tools providers.
    • More consistent and structured entitlement information supporting the use of automated techniques to determine the need for remediation of software licensing.
    • Improved reporting from additional categorization made possible by the use of ENTs.
    • Improved SAM and software license compliance capabilities stemming from standardized, software licensor-supplied, ISO/IEC 19770-2 software identification tags to reconcile with these ENTs.
    • Improved ability to avoid software license under-procurement or over-procurement with subsequent cost optimization.
    • Standardized usage across multiple platforms, rendering heterogeneous computing environments more manageable.

ISO/IEC 19770-4: resource utilization measurement

ISO/IEC 19770 4 provides a standard for resource utilization measurement information (RUM) structures. The RUM incorporates a standardized structure containing authoritative usage information about consumption of resources related to the use of a software asset. The structure will be created in a manner that is consistent with the identification information defined in ISO/IEC 19770-2, and with the entitlement information defined in ISO/IEC 19770-3, and when used together these three types of information have the capability to significantly enhance and automate the processes of IT asset management.

ISO/IEC 19770-5: overview and vocabulary

ISO/IEC 19770-5:2015 provides an overview of ITAM, which is the subject of the ISO/IEC 19770 family of standards, and defines related terms.[26] ISO/IEC 19770-5:2015 is applicable to all types of organization (e.g. commercial enterprises, government agencies, non-profit organizations).

ISO/IEC 19770-5:2015 contains:

  1. an overview of the ISO/IEC 19770 family of standards;
  2. an introduction to SAM;
  3. a brief description of the foundation principles and approaches on which SAM is based; and
  4. consistent terms and definitions for use throughout the ISO/IEC 19770 family of standards.

Free copy of ISO/IEC 19770-5

A free copy of the overview and vocabulary is available here.

References


-- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p-------------------------------------------------------------------------------- -- Module:Hatnote -- -- -- -- This module produces hatnote links and links to related articles. It -- -- implements the and meta-templates and includes -- -- helper functions for other Lua hatnote modules. --


local libraryUtil = require('libraryUtil') local checkType = libraryUtil.checkType local mArguments -- lazily initialise Module:Arguments local yesno -- lazily initialise Module:Yesno

local p = {}


-- Helper functions


local function getArgs(frame) -- Fetches the arguments from the parent frame. Whitespace is trimmed and -- blanks are removed. mArguments = require('Module:Arguments') return mArguments.getArgs(frame, {parentOnly = true}) end

local function removeInitialColon(s) -- Removes the initial colon from a string, if present. return s:match('^:?(.*)') end

function p.findNamespaceId(link, removeColon) -- Finds the namespace id (namespace number) of a link or a pagename. This -- function will not work if the link is enclosed in double brackets. Colons -- are trimmed from the start of the link by default. To skip colon -- trimming, set the removeColon parameter to true. checkType('findNamespaceId', 1, link, 'string') checkType('findNamespaceId', 2, removeColon, 'boolean', true) if removeColon ~= false then link = removeInitialColon(link) end local namespace = link:match('^(.-):') if namespace then local nsTable = mw.site.namespaces[namespace] if nsTable then return nsTable.id end end return 0 end

function p.formatPages(...) -- Formats a list of pages using formatLink and returns it as an array. Nil -- values are not allowed. local pages = {...} local ret = {} for i, page in ipairs(pages) do ret[i] = p._formatLink(page) end return ret end

function p.formatPageTables(...) -- Takes a list of page/display tables and returns it as a list of -- formatted links. Nil values are not allowed. local pages = {...} local links = {} for i, t in ipairs(pages) do checkType('formatPageTables', i, t, 'table') local link = t[1] local display = t[2] links[i] = p._formatLink(link, display) end return links end

function p.makeWikitextError(msg, helpLink, addTrackingCategory) -- Formats an error message to be returned to wikitext. If -- addTrackingCategory is not false after being returned from -- Module:Yesno, and if we are not on a talk page, a tracking category -- is added. checkType('makeWikitextError', 1, msg, 'string') checkType('makeWikitextError', 2, helpLink, 'string', true) yesno = require('Module:Yesno') local title = mw.title.getCurrentTitle() -- Make the help link text. local helpText if helpLink then helpText = ' (help)' else helpText = end -- Make the category text. local category if not title.isTalkPage and yesno(addTrackingCategory) ~= false then category = 'Hatnote templates with errors' category = string.format( '%s:%s', mw.site.namespaces[14].name, category ) else category = end return string.format( '%s', msg, helpText, category ) end


-- Format link -- -- Makes a wikilink from the given link and display values. Links are escaped -- with colons if necessary, and links to sections are detected and displayed -- with " § " as a separator rather than the standard MediaWiki "#". Used in -- the template.


function p.formatLink(frame) local args = getArgs(frame) local link = args[1] local display = args[2] if not link then return p.makeWikitextError( 'no link specified', 'Template:Format hatnote link#Errors', args.category ) end return p._formatLink(link, display) end

function p._formatLink(link, display) -- Find whether we need to use the colon trick or not. We need to use the -- colon trick for categories and files, as otherwise category links -- categorise the page and file links display the file. checkType('_formatLink', 1, link, 'string') checkType('_formatLink', 2, display, 'string', true) link = removeInitialColon(link) local namespace = p.findNamespaceId(link, false) local colon if namespace == 6 or namespace == 14 then colon = ':' else colon = end -- Find whether a faux display value has been added with the | magic -- word. if not display then local prePipe, postPipe = link:match('^(.-)|(.*)$') link = prePipe or link display = postPipe end -- Find the display value. if not display then local page, section = link:match('^(.-)#(.*)$') if page then display = page .. ' § ' .. section end end -- Assemble the link. if display then return string.format('%s', colon, link, display) else return string.format('%s%s', colon, link) end end


-- Hatnote -- -- Produces standard hatnote text. Implements the template.


function p.hatnote(frame) local args = getArgs(frame) local s = args[1] local options = {} if not s then return p.makeWikitextError( 'no text specified', 'Template:Hatnote#Errors', args.category ) end options.extraclasses = args.extraclasses options.selfref = args.selfref return p._hatnote(s, options) end

function p._hatnote(s, options) checkType('_hatnote', 1, s, 'string') checkType('_hatnote', 2, options, 'table', true) local classes = {'hatnote'} local extraclasses = options.extraclasses local selfref = options.selfref if type(extraclasses) == 'string' then classes[#classes + 1] = extraclasses end if selfref then classes[#classes + 1] = 'selfref' end return string.format( '
%s
', table.concat(classes, ' '), s )

end

return p
  1. ^ ISO/IEC 19770
  2. ^ Roger Cummings
  3. ^ Peter Beruk
  4. ^
  5. ^ English
  6. ^ French
  7. ^ ISO/IEC 19770-2:2009(en)
  8. ^ http://www.iso.org/iso/home/store/catalogue_tc/catalogue_detail.htm?csnumber=65666
  9. ^ Steve Klos
  10. ^ Web site for TagVault.org
  11. ^ Website for IEEE-ISTO
  12. ^ see [1]
  13. ^ Microsoft SWID Tagging Information Page
  14. ^ A copy of that presentation is available here
  15. ^ Software ID Tag Profile
  16. ^ Common Information Model
  17. ^ TNC SWID Messages and Attributes for IF-M Specification
  18. ^ Software Asset Management Continuous Monitoring building block
  19. ^ information describing the NIST Security Automation Program
  20. ^ [2]
  21. ^ ISO/IEC 19770-1
  22. ^ ISO/IEC 19770-2
  23. ^ Web site from the working group developing the 19770-3 standard
  24. ^ W21N0805 (revision 2): Terms of Reference for ISO/IEC 19770-3 Software Entitlement Tag Other Working Group
  25. ^ Jason Keogh
  26. ^ ISO.

External links

  • Official WG21 web site (temporary site)
  • Business Software Alliance
  • Distributed Management Task Force
  • International Association of Information Technology Asset Managers
  • National Cybersecurity Center of Excellence
  • National Institute for Standards and Technology
  • Trusted Computing Group
  • ITAM.ORG - Organization for IT Asset Management Professionals and ITAM Providers
  • Australian Software Asset Management Association (ASAMA)
This article was sourced from Creative Commons Attribution-ShareAlike License; additional terms may apply. World Heritage Encyclopedia content is assembled from numerous content providers, Open Access Publishing, and in compliance with The Fair Access to Science and Technology Research Act (FASTR), Wikimedia Foundation, Inc., Public Library of Science, The Encyclopedia of Life, Open Book Publishers (OBP), PubMed, U.S. National Library of Medicine, National Center for Biotechnology Information, U.S. National Library of Medicine, National Institutes of Health (NIH), U.S. Department of Health & Human Services, and USA.gov, which sources content from all federal, state, local, tribal, and territorial government publication portals (.gov, .mil, .edu). Funding for USA.gov and content contributors is made possible from the U.S. Congress, E-Government Act of 2002.
 
Crowd sourced content that is contributed to World Heritage Encyclopedia is peer reviewed and edited by our editorial staff to ensure quality scholarly research articles.
 
By using this site, you agree to the Terms of Use and Privacy Policy. World Heritage Encyclopedia™ is a registered trademark of the World Public Library Association, a non-profit organization.
 



Copyright © World Library Foundation. All rights reserved. eBooks from World eBook Library are sponsored by the World Library Foundation,
a 501c(4) Member's Support Non-Profit Organization, and is NOT affiliated with any governmental agency or department.