{"version":3,"file":"winghei-ng-select.mjs","sources":["../../../src/ng-select/lib/ng-dropdown-panel.service.ts","../../../src/ng-select/lib/id.ts","../../../src/ng-select/lib/search-helper.ts","../../../src/ng-select/lib/value-utils.ts","../../../src/ng-select/lib/items-list.ts","../../../src/ng-select/lib/selection-model.ts","../../../src/ng-select/lib/ng-select-ext-model.ts","../../../src/ng-select/lib/ng-templates.directive.ts","../../../src/ng-select/lib/ng-select.types.ts","../../../src/ng-select/lib/ng-dropdown-panel.component.ts","../../../src/ng-select/lib/ng-option.component.ts","../../../src/ng-select/lib/config.service.ts","../../../src/ng-select/lib/console.service.ts","../../../src/ng-select/lib/ng-select.component.ts","../../../src/ng-select/lib/ng-select.component.html","../../../src/ng-select/lib/ng-select-ext.component.ts","../../../src/ng-select/lib/ng-select-ext.component.html","../../../src/ng-select/lib/ng-select.module.ts","../../../src/ng-select/public-api.ts","../../../src/ng-select/winghei-ng-select.ts"],"sourcesContent":["import { Injectable } from '@angular/core';\nexport interface ItemsRangeResult {\n    scrollHeight: number;\n    topPadding: number;\n    start: number;\n    end: number;\n}\n\nexport interface PanelDimensions {\n    itemHeight: number;\n    panelHeight: number;\n    itemsPerViewport: number;\n}\n\n@Injectable()\nexport class NgDropdownPanelService {\n\n    private _dimensions: PanelDimensions = {\n        itemHeight: 0,\n        panelHeight: 0,\n        itemsPerViewport: 0\n    };\n\n    get dimensions() {\n        return this._dimensions;\n    }\n\n    calculateItems(scrollPos: number, itemsLength: number, buffer: number): ItemsRangeResult {\n        const d = this._dimensions;\n        const scrollHeight = d.itemHeight * itemsLength;\n\n        const scrollTop = Math.max(0, scrollPos);\n        const indexByScrollTop = scrollTop / scrollHeight * itemsLength;\n        let end = Math.min(itemsLength, Math.ceil(indexByScrollTop) + (d.itemsPerViewport + 1));\n\n        const maxStartEnd = end;\n        const maxStart = Math.max(0, maxStartEnd - d.itemsPerViewport);\n        let start = Math.min(maxStart, Math.floor(indexByScrollTop));\n\n        let topPadding = d.itemHeight * Math.ceil(start) - (d.itemHeight * Math.min(start, buffer));\n        topPadding = !isNaN(topPadding) ? topPadding : 0;\n        start = !isNaN(start) ? start : -1;\n        end = !isNaN(end) ? end : -1;\n        start -= buffer;\n        start = Math.max(0, start);\n        end += buffer;\n        end = Math.min(itemsLength, end);\n\n        return {\n            topPadding,\n            scrollHeight,\n            start,\n            end\n        }\n    }\n\n    setDimensions(itemHeight: number, panelHeight: number) {\n        const itemsPerViewport = Math.max(1, Math.floor(panelHeight / itemHeight));\n        this._dimensions = {\n            itemHeight,\n            panelHeight,\n            itemsPerViewport\n        };\n    }\n\n    getScrollTo(itemTop: number, itemHeight: number, lastScroll: number) {\n        const { panelHeight } = this.dimensions;\n        const itemBottom = itemTop + itemHeight;\n        const top = lastScroll;\n        const bottom = top + panelHeight;\n\n        if (panelHeight >= itemBottom && lastScroll === itemTop) {\n            return null;\n        }\n\n        if (itemBottom > bottom) {\n            return top + itemBottom - bottom;\n        } else if (itemTop <= top) {\n            return itemTop;\n        }\n\n        return null;\n    }\n}\n","export function newId() {\n    // First character is an 'a', it's good practice to tag id to begin with a letter\n    return 'axxxxxxxxxxx'.replace(/[x]/g, function (_) {\n        // tslint:disable-next-line:no-bitwise\n        const val = Math.random() * 16 | 0;\n        return val.toString(16);\n    });\n}\n","const diacritics = {\n    '\\u24B6': 'A',\n    '\\uFF21': 'A',\n    '\\u00C0': 'A',\n    '\\u00C1': 'A',\n    '\\u00C2': 'A',\n    '\\u1EA6': 'A',\n    '\\u1EA4': 'A',\n    '\\u1EAA': 'A',\n    '\\u1EA8': 'A',\n    '\\u00C3': 'A',\n    '\\u0100': 'A',\n    '\\u0102': 'A',\n    '\\u1EB0': 'A',\n    '\\u1EAE': 'A',\n    '\\u1EB4': 'A',\n    '\\u1EB2': 'A',\n    '\\u0226': 'A',\n    '\\u01E0': 'A',\n    '\\u00C4': 'A',\n    '\\u01DE': 'A',\n    '\\u1EA2': 'A',\n    '\\u00C5': 'A',\n    '\\u01FA': 'A',\n    '\\u01CD': 'A',\n    '\\u0200': 'A',\n    '\\u0202': 'A',\n    '\\u1EA0': 'A',\n    '\\u1EAC': 'A',\n    '\\u1EB6': 'A',\n    '\\u1E00': 'A',\n    '\\u0104': 'A',\n    '\\u023A': 'A',\n    '\\u2C6F': 'A',\n    '\\uA732': 'AA',\n    '\\u00C6': 'AE',\n    '\\u01FC': 'AE',\n    '\\u01E2': 'AE',\n    '\\uA734': 'AO',\n    '\\uA736': 'AU',\n    '\\uA738': 'AV',\n    '\\uA73A': 'AV',\n    '\\uA73C': 'AY',\n    '\\u24B7': 'B',\n    '\\uFF22': 'B',\n    '\\u1E02': 'B',\n    '\\u1E04': 'B',\n    '\\u1E06': 'B',\n    '\\u0243': 'B',\n    '\\u0182': 'B',\n    '\\u0181': 'B',\n    '\\u24B8': 'C',\n    '\\uFF23': 'C',\n    '\\u0106': 'C',\n    '\\u0108': 'C',\n    '\\u010A': 'C',\n    '\\u010C': 'C',\n    '\\u00C7': 'C',\n    '\\u1E08': 'C',\n    '\\u0187': 'C',\n    '\\u023B': 'C',\n    '\\uA73E': 'C',\n    '\\u24B9': 'D',\n    '\\uFF24': 'D',\n    '\\u1E0A': 'D',\n    '\\u010E': 'D',\n    '\\u1E0C': 'D',\n    '\\u1E10': 'D',\n    '\\u1E12': 'D',\n    '\\u1E0E': 'D',\n    '\\u0110': 'D',\n    '\\u018B': 'D',\n    '\\u018A': 'D',\n    '\\u0189': 'D',\n    '\\uA779': 'D',\n    '\\u01F1': 'DZ',\n    '\\u01C4': 'DZ',\n    '\\u01F2': 'Dz',\n    '\\u01C5': 'Dz',\n    '\\u24BA': 'E',\n    '\\uFF25': 'E',\n    '\\u00C8': 'E',\n    '\\u00C9': 'E',\n    '\\u00CA': 'E',\n    '\\u1EC0': 'E',\n    '\\u1EBE': 'E',\n    '\\u1EC4': 'E',\n    '\\u1EC2': 'E',\n    '\\u1EBC': 'E',\n    '\\u0112': 'E',\n    '\\u1E14': 'E',\n    '\\u1E16': 'E',\n    '\\u0114': 'E',\n    '\\u0116': 'E',\n    '\\u00CB': 'E',\n    '\\u1EBA': 'E',\n    '\\u011A': 'E',\n    '\\u0204': 'E',\n    '\\u0206': 'E',\n    '\\u1EB8': 'E',\n    '\\u1EC6': 'E',\n    '\\u0228': 'E',\n    '\\u1E1C': 'E',\n    '\\u0118': 'E',\n    '\\u1E18': 'E',\n    '\\u1E1A': 'E',\n    '\\u0190': 'E',\n    '\\u018E': 'E',\n    '\\u24BB': 'F',\n    '\\uFF26': 'F',\n    '\\u1E1E': 'F',\n    '\\u0191': 'F',\n    '\\uA77B': 'F',\n    '\\u24BC': 'G',\n    '\\uFF27': 'G',\n    '\\u01F4': 'G',\n    '\\u011C': 'G',\n    '\\u1E20': 'G',\n    '\\u011E': 'G',\n    '\\u0120': 'G',\n    '\\u01E6': 'G',\n    '\\u0122': 'G',\n    '\\u01E4': 'G',\n    '\\u0193': 'G',\n    '\\uA7A0': 'G',\n    '\\uA77D': 'G',\n    '\\uA77E': 'G',\n    '\\u24BD': 'H',\n    '\\uFF28': 'H',\n    '\\u0124': 'H',\n    '\\u1E22': 'H',\n    '\\u1E26': 'H',\n    '\\u021E': 'H',\n    '\\u1E24': 'H',\n    '\\u1E28': 'H',\n    '\\u1E2A': 'H',\n    '\\u0126': 'H',\n    '\\u2C67': 'H',\n    '\\u2C75': 'H',\n    '\\uA78D': 'H',\n    '\\u24BE': 'I',\n    '\\uFF29': 'I',\n    '\\u00CC': 'I',\n    '\\u00CD': 'I',\n    '\\u00CE': 'I',\n    '\\u0128': 'I',\n    '\\u012A': 'I',\n    '\\u012C': 'I',\n    '\\u0130': 'I',\n    '\\u00CF': 'I',\n    '\\u1E2E': 'I',\n    '\\u1EC8': 'I',\n    '\\u01CF': 'I',\n    '\\u0208': 'I',\n    '\\u020A': 'I',\n    '\\u1ECA': 'I',\n    '\\u012E': 'I',\n    '\\u1E2C': 'I',\n    '\\u0197': 'I',\n    '\\u24BF': 'J',\n    '\\uFF2A': 'J',\n    '\\u0134': 'J',\n    '\\u0248': 'J',\n    '\\u24C0': 'K',\n    '\\uFF2B': 'K',\n    '\\u1E30': 'K',\n    '\\u01E8': 'K',\n    '\\u1E32': 'K',\n    '\\u0136': 'K',\n    '\\u1E34': 'K',\n    '\\u0198': 'K',\n    '\\u2C69': 'K',\n    '\\uA740': 'K',\n    '\\uA742': 'K',\n    '\\uA744': 'K',\n    '\\uA7A2': 'K',\n    '\\u24C1': 'L',\n    '\\uFF2C': 'L',\n    '\\u013F': 'L',\n    '\\u0139': 'L',\n    '\\u013D': 'L',\n    '\\u1E36': 'L',\n    '\\u1E38': 'L',\n    '\\u013B': 'L',\n    '\\u1E3C': 'L',\n    '\\u1E3A': 'L',\n    '\\u0141': 'L',\n    '\\u023D': 'L',\n    '\\u2C62': 'L',\n    '\\u2C60': 'L',\n    '\\uA748': 'L',\n    '\\uA746': 'L',\n    '\\uA780': 'L',\n    '\\u01C7': 'LJ',\n    '\\u01C8': 'Lj',\n    '\\u24C2': 'M',\n    '\\uFF2D': 'M',\n    '\\u1E3E': 'M',\n    '\\u1E40': 'M',\n    '\\u1E42': 'M',\n    '\\u2C6E': 'M',\n    '\\u019C': 'M',\n    '\\u24C3': 'N',\n    '\\uFF2E': 'N',\n    '\\u01F8': 'N',\n    '\\u0143': 'N',\n    '\\u00D1': 'N',\n    '\\u1E44': 'N',\n    '\\u0147': 'N',\n    '\\u1E46': 'N',\n    '\\u0145': 'N',\n    '\\u1E4A': 'N',\n    '\\u1E48': 'N',\n    '\\u0220': 'N',\n    '\\u019D': 'N',\n    '\\uA790': 'N',\n    '\\uA7A4': 'N',\n    '\\u01CA': 'NJ',\n    '\\u01CB': 'Nj',\n    '\\u24C4': 'O',\n    '\\uFF2F': 'O',\n    '\\u00D2': 'O',\n    '\\u00D3': 'O',\n    '\\u00D4': 'O',\n    '\\u1ED2': 'O',\n    '\\u1ED0': 'O',\n    '\\u1ED6': 'O',\n    '\\u1ED4': 'O',\n    '\\u00D5': 'O',\n    '\\u1E4C': 'O',\n    '\\u022C': 'O',\n    '\\u1E4E': 'O',\n    '\\u014C': 'O',\n    '\\u1E50': 'O',\n    '\\u1E52': 'O',\n    '\\u014E': 'O',\n    '\\u022E': 'O',\n    '\\u0230': 'O',\n    '\\u00D6': 'O',\n    '\\u022A': 'O',\n    '\\u1ECE': 'O',\n    '\\u0150': 'O',\n    '\\u01D1': 'O',\n    '\\u020C': 'O',\n    '\\u020E': 'O',\n    '\\u01A0': 'O',\n    '\\u1EDC': 'O',\n    '\\u1EDA': 'O',\n    '\\u1EE0': 'O',\n    '\\u1EDE': 'O',\n    '\\u1EE2': 'O',\n    '\\u1ECC': 'O',\n    '\\u1ED8': 'O',\n    '\\u01EA': 'O',\n    '\\u01EC': 'O',\n    '\\u00D8': 'O',\n    '\\u01FE': 'O',\n    '\\u0186': 'O',\n    '\\u019F': 'O',\n    '\\uA74A': 'O',\n    '\\uA74C': 'O',\n    '\\u01A2': 'OI',\n    '\\uA74E': 'OO',\n    '\\u0222': 'OU',\n    '\\u24C5': 'P',\n    '\\uFF30': 'P',\n    '\\u1E54': 'P',\n    '\\u1E56': 'P',\n    '\\u01A4': 'P',\n    '\\u2C63': 'P',\n    '\\uA750': 'P',\n    '\\uA752': 'P',\n    '\\uA754': 'P',\n    '\\u24C6': 'Q',\n    '\\uFF31': 'Q',\n    '\\uA756': 'Q',\n    '\\uA758': 'Q',\n    '\\u024A': 'Q',\n    '\\u24C7': 'R',\n    '\\uFF32': 'R',\n    '\\u0154': 'R',\n    '\\u1E58': 'R',\n    '\\u0158': 'R',\n    '\\u0210': 'R',\n    '\\u0212': 'R',\n    '\\u1E5A': 'R',\n    '\\u1E5C': 'R',\n    '\\u0156': 'R',\n    '\\u1E5E': 'R',\n    '\\u024C': 'R',\n    '\\u2C64': 'R',\n    '\\uA75A': 'R',\n    '\\uA7A6': 'R',\n    '\\uA782': 'R',\n    '\\u24C8': 'S',\n    '\\uFF33': 'S',\n    '\\u1E9E': 'S',\n    '\\u015A': 'S',\n    '\\u1E64': 'S',\n    '\\u015C': 'S',\n    '\\u1E60': 'S',\n    '\\u0160': 'S',\n    '\\u1E66': 'S',\n    '\\u1E62': 'S',\n    '\\u1E68': 'S',\n    '\\u0218': 'S',\n    '\\u015E': 'S',\n    '\\u2C7E': 'S',\n    '\\uA7A8': 'S',\n    '\\uA784': 'S',\n    '\\u24C9': 'T',\n    '\\uFF34': 'T',\n    '\\u1E6A': 'T',\n    '\\u0164': 'T',\n    '\\u1E6C': 'T',\n    '\\u021A': 'T',\n    '\\u0162': 'T',\n    '\\u1E70': 'T',\n    '\\u1E6E': 'T',\n    '\\u0166': 'T',\n    '\\u01AC': 'T',\n    '\\u01AE': 'T',\n    '\\u023E': 'T',\n    '\\uA786': 'T',\n    '\\uA728': 'TZ',\n    '\\u24CA': 'U',\n    '\\uFF35': 'U',\n    '\\u00D9': 'U',\n    '\\u00DA': 'U',\n    '\\u00DB': 'U',\n    '\\u0168': 'U',\n    '\\u1E78': 'U',\n    '\\u016A': 'U',\n    '\\u1E7A': 'U',\n    '\\u016C': 'U',\n    '\\u00DC': 'U',\n    '\\u01DB': 'U',\n    '\\u01D7': 'U',\n    '\\u01D5': 'U',\n    '\\u01D9': 'U',\n    '\\u1EE6': 'U',\n    '\\u016E': 'U',\n    '\\u0170': 'U',\n    '\\u01D3': 'U',\n    '\\u0214': 'U',\n    '\\u0216': 'U',\n    '\\u01AF': 'U',\n    '\\u1EEA': 'U',\n    '\\u1EE8': 'U',\n    '\\u1EEE': 'U',\n    '\\u1EEC': 'U',\n    '\\u1EF0': 'U',\n    '\\u1EE4': 'U',\n    '\\u1E72': 'U',\n    '\\u0172': 'U',\n    '\\u1E76': 'U',\n    '\\u1E74': 'U',\n    '\\u0244': 'U',\n    '\\u24CB': 'V',\n    '\\uFF36': 'V',\n    '\\u1E7C': 'V',\n    '\\u1E7E': 'V',\n    '\\u01B2': 'V',\n    '\\uA75E': 'V',\n    '\\u0245': 'V',\n    '\\uA760': 'VY',\n    '\\u24CC': 'W',\n    '\\uFF37': 'W',\n    '\\u1E80': 'W',\n    '\\u1E82': 'W',\n    '\\u0174': 'W',\n    '\\u1E86': 'W',\n    '\\u1E84': 'W',\n    '\\u1E88': 'W',\n    '\\u2C72': 'W',\n    '\\u24CD': 'X',\n    '\\uFF38': 'X',\n    '\\u1E8A': 'X',\n    '\\u1E8C': 'X',\n    '\\u24CE': 'Y',\n    '\\uFF39': 'Y',\n    '\\u1EF2': 'Y',\n    '\\u00DD': 'Y',\n    '\\u0176': 'Y',\n    '\\u1EF8': 'Y',\n    '\\u0232': 'Y',\n    '\\u1E8E': 'Y',\n    '\\u0178': 'Y',\n    '\\u1EF6': 'Y',\n    '\\u1EF4': 'Y',\n    '\\u01B3': 'Y',\n    '\\u024E': 'Y',\n    '\\u1EFE': 'Y',\n    '\\u24CF': 'Z',\n    '\\uFF3A': 'Z',\n    '\\u0179': 'Z',\n    '\\u1E90': 'Z',\n    '\\u017B': 'Z',\n    '\\u017D': 'Z',\n    '\\u1E92': 'Z',\n    '\\u1E94': 'Z',\n    '\\u01B5': 'Z',\n    '\\u0224': 'Z',\n    '\\u2C7F': 'Z',\n    '\\u2C6B': 'Z',\n    '\\uA762': 'Z',\n    '\\u24D0': 'a',\n    '\\uFF41': 'a',\n    '\\u1E9A': 'a',\n    '\\u00E0': 'a',\n    '\\u00E1': 'a',\n    '\\u00E2': 'a',\n    '\\u1EA7': 'a',\n    '\\u1EA5': 'a',\n    '\\u1EAB': 'a',\n    '\\u1EA9': 'a',\n    '\\u00E3': 'a',\n    '\\u0101': 'a',\n    '\\u0103': 'a',\n    '\\u1EB1': 'a',\n    '\\u1EAF': 'a',\n    '\\u1EB5': 'a',\n    '\\u1EB3': 'a',\n    '\\u0227': 'a',\n    '\\u01E1': 'a',\n    '\\u00E4': 'a',\n    '\\u01DF': 'a',\n    '\\u1EA3': 'a',\n    '\\u00E5': 'a',\n    '\\u01FB': 'a',\n    '\\u01CE': 'a',\n    '\\u0201': 'a',\n    '\\u0203': 'a',\n    '\\u1EA1': 'a',\n    '\\u1EAD': 'a',\n    '\\u1EB7': 'a',\n    '\\u1E01': 'a',\n    '\\u0105': 'a',\n    '\\u2C65': 'a',\n    '\\u0250': 'a',\n    '\\uA733': 'aa',\n    '\\u00E6': 'ae',\n    '\\u01FD': 'ae',\n    '\\u01E3': 'ae',\n    '\\uA735': 'ao',\n    '\\uA737': 'au',\n    '\\uA739': 'av',\n    '\\uA73B': 'av',\n    '\\uA73D': 'ay',\n    '\\u24D1': 'b',\n    '\\uFF42': 'b',\n    '\\u1E03': 'b',\n    '\\u1E05': 'b',\n    '\\u1E07': 'b',\n    '\\u0180': 'b',\n    '\\u0183': 'b',\n    '\\u0253': 'b',\n    '\\u24D2': 'c',\n    '\\uFF43': 'c',\n    '\\u0107': 'c',\n    '\\u0109': 'c',\n    '\\u010B': 'c',\n    '\\u010D': 'c',\n    '\\u00E7': 'c',\n    '\\u1E09': 'c',\n    '\\u0188': 'c',\n    '\\u023C': 'c',\n    '\\uA73F': 'c',\n    '\\u2184': 'c',\n    '\\u24D3': 'd',\n    '\\uFF44': 'd',\n    '\\u1E0B': 'd',\n    '\\u010F': 'd',\n    '\\u1E0D': 'd',\n    '\\u1E11': 'd',\n    '\\u1E13': 'd',\n    '\\u1E0F': 'd',\n    '\\u0111': 'd',\n    '\\u018C': 'd',\n    '\\u0256': 'd',\n    '\\u0257': 'd',\n    '\\uA77A': 'd',\n    '\\u01F3': 'dz',\n    '\\u01C6': 'dz',\n    '\\u24D4': 'e',\n    '\\uFF45': 'e',\n    '\\u00E8': 'e',\n    '\\u00E9': 'e',\n    '\\u00EA': 'e',\n    '\\u1EC1': 'e',\n    '\\u1EBF': 'e',\n    '\\u1EC5': 'e',\n    '\\u1EC3': 'e',\n    '\\u1EBD': 'e',\n    '\\u0113': 'e',\n    '\\u1E15': 'e',\n    '\\u1E17': 'e',\n    '\\u0115': 'e',\n    '\\u0117': 'e',\n    '\\u00EB': 'e',\n    '\\u1EBB': 'e',\n    '\\u011B': 'e',\n    '\\u0205': 'e',\n    '\\u0207': 'e',\n    '\\u1EB9': 'e',\n    '\\u1EC7': 'e',\n    '\\u0229': 'e',\n    '\\u1E1D': 'e',\n    '\\u0119': 'e',\n    '\\u1E19': 'e',\n    '\\u1E1B': 'e',\n    '\\u0247': 'e',\n    '\\u025B': 'e',\n    '\\u01DD': 'e',\n    '\\u24D5': 'f',\n    '\\uFF46': 'f',\n    '\\u1E1F': 'f',\n    '\\u0192': 'f',\n    '\\uA77C': 'f',\n    '\\u24D6': 'g',\n    '\\uFF47': 'g',\n    '\\u01F5': 'g',\n    '\\u011D': 'g',\n    '\\u1E21': 'g',\n    '\\u011F': 'g',\n    '\\u0121': 'g',\n    '\\u01E7': 'g',\n    '\\u0123': 'g',\n    '\\u01E5': 'g',\n    '\\u0260': 'g',\n    '\\uA7A1': 'g',\n    '\\u1D79': 'g',\n    '\\uA77F': 'g',\n    '\\u24D7': 'h',\n    '\\uFF48': 'h',\n    '\\u0125': 'h',\n    '\\u1E23': 'h',\n    '\\u1E27': 'h',\n    '\\u021F': 'h',\n    '\\u1E25': 'h',\n    '\\u1E29': 'h',\n    '\\u1E2B': 'h',\n    '\\u1E96': 'h',\n    '\\u0127': 'h',\n    '\\u2C68': 'h',\n    '\\u2C76': 'h',\n    '\\u0265': 'h',\n    '\\u0195': 'hv',\n    '\\u24D8': 'i',\n    '\\uFF49': 'i',\n    '\\u00EC': 'i',\n    '\\u00ED': 'i',\n    '\\u00EE': 'i',\n    '\\u0129': 'i',\n    '\\u012B': 'i',\n    '\\u012D': 'i',\n    '\\u00EF': 'i',\n    '\\u1E2F': 'i',\n    '\\u1EC9': 'i',\n    '\\u01D0': 'i',\n    '\\u0209': 'i',\n    '\\u020B': 'i',\n    '\\u1ECB': 'i',\n    '\\u012F': 'i',\n    '\\u1E2D': 'i',\n    '\\u0268': 'i',\n    '\\u0131': 'i',\n    '\\u24D9': 'j',\n    '\\uFF4A': 'j',\n    '\\u0135': 'j',\n    '\\u01F0': 'j',\n    '\\u0249': 'j',\n    '\\u24DA': 'k',\n    '\\uFF4B': 'k',\n    '\\u1E31': 'k',\n    '\\u01E9': 'k',\n    '\\u1E33': 'k',\n    '\\u0137': 'k',\n    '\\u1E35': 'k',\n    '\\u0199': 'k',\n    '\\u2C6A': 'k',\n    '\\uA741': 'k',\n    '\\uA743': 'k',\n    '\\uA745': 'k',\n    '\\uA7A3': 'k',\n    '\\u24DB': 'l',\n    '\\uFF4C': 'l',\n    '\\u0140': 'l',\n    '\\u013A': 'l',\n    '\\u013E': 'l',\n    '\\u1E37': 'l',\n    '\\u1E39': 'l',\n    '\\u013C': 'l',\n    '\\u1E3D': 'l',\n    '\\u1E3B': 'l',\n    '\\u017F': 'l',\n    '\\u0142': 'l',\n    '\\u019A': 'l',\n    '\\u026B': 'l',\n    '\\u2C61': 'l',\n    '\\uA749': 'l',\n    '\\uA781': 'l',\n    '\\uA747': 'l',\n    '\\u01C9': 'lj',\n    '\\u24DC': 'm',\n    '\\uFF4D': 'm',\n    '\\u1E3F': 'm',\n    '\\u1E41': 'm',\n    '\\u1E43': 'm',\n    '\\u0271': 'm',\n    '\\u026F': 'm',\n    '\\u24DD': 'n',\n    '\\uFF4E': 'n',\n    '\\u01F9': 'n',\n    '\\u0144': 'n',\n    '\\u00F1': 'n',\n    '\\u1E45': 'n',\n    '\\u0148': 'n',\n    '\\u1E47': 'n',\n    '\\u0146': 'n',\n    '\\u1E4B': 'n',\n    '\\u1E49': 'n',\n    '\\u019E': 'n',\n    '\\u0272': 'n',\n    '\\u0149': 'n',\n    '\\uA791': 'n',\n    '\\uA7A5': 'n',\n    '\\u01CC': 'nj',\n    '\\u24DE': 'o',\n    '\\uFF4F': 'o',\n    '\\u00F2': 'o',\n    '\\u00F3': 'o',\n    '\\u00F4': 'o',\n    '\\u1ED3': 'o',\n    '\\u1ED1': 'o',\n    '\\u1ED7': 'o',\n    '\\u1ED5': 'o',\n    '\\u00F5': 'o',\n    '\\u1E4D': 'o',\n    '\\u022D': 'o',\n    '\\u1E4F': 'o',\n    '\\u014D': 'o',\n    '\\u1E51': 'o',\n    '\\u1E53': 'o',\n    '\\u014F': 'o',\n    '\\u022F': 'o',\n    '\\u0231': 'o',\n    '\\u00F6': 'o',\n    '\\u022B': 'o',\n    '\\u1ECF': 'o',\n    '\\u0151': 'o',\n    '\\u01D2': 'o',\n    '\\u020D': 'o',\n    '\\u020F': 'o',\n    '\\u01A1': 'o',\n    '\\u1EDD': 'o',\n    '\\u1EDB': 'o',\n    '\\u1EE1': 'o',\n    '\\u1EDF': 'o',\n    '\\u1EE3': 'o',\n    '\\u1ECD': 'o',\n    '\\u1ED9': 'o',\n    '\\u01EB': 'o',\n    '\\u01ED': 'o',\n    '\\u00F8': 'o',\n    '\\u01FF': 'o',\n    '\\u0254': 'o',\n    '\\uA74B': 'o',\n    '\\uA74D': 'o',\n    '\\u0275': 'o',\n    '\\u01A3': 'oi',\n    '\\u0223': 'ou',\n    '\\uA74F': 'oo',\n    '\\u24DF': 'p',\n    '\\uFF50': 'p',\n    '\\u1E55': 'p',\n    '\\u1E57': 'p',\n    '\\u01A5': 'p',\n    '\\u1D7D': 'p',\n    '\\uA751': 'p',\n    '\\uA753': 'p',\n    '\\uA755': 'p',\n    '\\u24E0': 'q',\n    '\\uFF51': 'q',\n    '\\u024B': 'q',\n    '\\uA757': 'q',\n    '\\uA759': 'q',\n    '\\u24E1': 'r',\n    '\\uFF52': 'r',\n    '\\u0155': 'r',\n    '\\u1E59': 'r',\n    '\\u0159': 'r',\n    '\\u0211': 'r',\n    '\\u0213': 'r',\n    '\\u1E5B': 'r',\n    '\\u1E5D': 'r',\n    '\\u0157': 'r',\n    '\\u1E5F': 'r',\n    '\\u024D': 'r',\n    '\\u027D': 'r',\n    '\\uA75B': 'r',\n    '\\uA7A7': 'r',\n    '\\uA783': 'r',\n    '\\u24E2': 's',\n    '\\uFF53': 's',\n    '\\u00DF': 's',\n    '\\u015B': 's',\n    '\\u1E65': 's',\n    '\\u015D': 's',\n    '\\u1E61': 's',\n    '\\u0161': 's',\n    '\\u1E67': 's',\n    '\\u1E63': 's',\n    '\\u1E69': 's',\n    '\\u0219': 's',\n    '\\u015F': 's',\n    '\\u023F': 's',\n    '\\uA7A9': 's',\n    '\\uA785': 's',\n    '\\u1E9B': 's',\n    '\\u24E3': 't',\n    '\\uFF54': 't',\n    '\\u1E6B': 't',\n    '\\u1E97': 't',\n    '\\u0165': 't',\n    '\\u1E6D': 't',\n    '\\u021B': 't',\n    '\\u0163': 't',\n    '\\u1E71': 't',\n    '\\u1E6F': 't',\n    '\\u0167': 't',\n    '\\u01AD': 't',\n    '\\u0288': 't',\n    '\\u2C66': 't',\n    '\\uA787': 't',\n    '\\uA729': 'tz',\n    '\\u24E4': 'u',\n    '\\uFF55': 'u',\n    '\\u00F9': 'u',\n    '\\u00FA': 'u',\n    '\\u00FB': 'u',\n    '\\u0169': 'u',\n    '\\u1E79': 'u',\n    '\\u016B': 'u',\n    '\\u1E7B': 'u',\n    '\\u016D': 'u',\n    '\\u00FC': 'u',\n    '\\u01DC': 'u',\n    '\\u01D8': 'u',\n    '\\u01D6': 'u',\n    '\\u01DA': 'u',\n    '\\u1EE7': 'u',\n    '\\u016F': 'u',\n    '\\u0171': 'u',\n    '\\u01D4': 'u',\n    '\\u0215': 'u',\n    '\\u0217': 'u',\n    '\\u01B0': 'u',\n    '\\u1EEB': 'u',\n    '\\u1EE9': 'u',\n    '\\u1EEF': 'u',\n    '\\u1EED': 'u',\n    '\\u1EF1': 'u',\n    '\\u1EE5': 'u',\n    '\\u1E73': 'u',\n    '\\u0173': 'u',\n    '\\u1E77': 'u',\n    '\\u1E75': 'u',\n    '\\u0289': 'u',\n    '\\u24E5': 'v',\n    '\\uFF56': 'v',\n    '\\u1E7D': 'v',\n    '\\u1E7F': 'v',\n    '\\u028B': 'v',\n    '\\uA75F': 'v',\n    '\\u028C': 'v',\n    '\\uA761': 'vy',\n    '\\u24E6': 'w',\n    '\\uFF57': 'w',\n    '\\u1E81': 'w',\n    '\\u1E83': 'w',\n    '\\u0175': 'w',\n    '\\u1E87': 'w',\n    '\\u1E85': 'w',\n    '\\u1E98': 'w',\n    '\\u1E89': 'w',\n    '\\u2C73': 'w',\n    '\\u24E7': 'x',\n    '\\uFF58': 'x',\n    '\\u1E8B': 'x',\n    '\\u1E8D': 'x',\n    '\\u24E8': 'y',\n    '\\uFF59': 'y',\n    '\\u1EF3': 'y',\n    '\\u00FD': 'y',\n    '\\u0177': 'y',\n    '\\u1EF9': 'y',\n    '\\u0233': 'y',\n    '\\u1E8F': 'y',\n    '\\u00FF': 'y',\n    '\\u1EF7': 'y',\n    '\\u1E99': 'y',\n    '\\u1EF5': 'y',\n    '\\u01B4': 'y',\n    '\\u024F': 'y',\n    '\\u1EFF': 'y',\n    '\\u24E9': 'z',\n    '\\uFF5A': 'z',\n    '\\u017A': 'z',\n    '\\u1E91': 'z',\n    '\\u017C': 'z',\n    '\\u017E': 'z',\n    '\\u1E93': 'z',\n    '\\u1E95': 'z',\n    '\\u01B6': 'z',\n    '\\u0225': 'z',\n    '\\u0240': 'z',\n    '\\u2C6C': 'z',\n    '\\uA763': 'z',\n    '\\u0386': '\\u0391',\n    '\\u0388': '\\u0395',\n    '\\u0389': '\\u0397',\n    '\\u038A': '\\u0399',\n    '\\u03AA': '\\u0399',\n    '\\u038C': '\\u039F',\n    '\\u038E': '\\u03A5',\n    '\\u03AB': '\\u03A5',\n    '\\u038F': '\\u03A9',\n    '\\u03AC': '\\u03B1',\n    '\\u03AD': '\\u03B5',\n    '\\u03AE': '\\u03B7',\n    '\\u03AF': '\\u03B9',\n    '\\u03CA': '\\u03B9',\n    '\\u0390': '\\u03B9',\n    '\\u03CC': '\\u03BF',\n    '\\u03CD': '\\u03C5',\n    '\\u03CB': '\\u03C5',\n    '\\u03B0': '\\u03C5',\n    '\\u03C9': '\\u03C9',\n    '\\u03C2': '\\u03C3'\n};\n\nexport function stripSpecialChars(text: string): string {\n    const match = (a: string): string => {\n        return diacritics[a] || a;\n    };\n    return text.replace(/[^\\u0000-\\u007E]/g, match);\n}\n","const unescapedHTMLExp = /[&<>\"']/g;\nconst hasUnescapedHTMLExp = RegExp(unescapedHTMLExp.source);\nconst htmlEscapes = {\n    '&': '&amp;',\n    '<': '&lt;',\n    '>': '&gt;',\n    '\"': '&quot;',\n    '\\'': '&#39;'\n};\n\nexport function escapeHTML(string: string) {\n    return (string && hasUnescapedHTMLExp.test(string)) ?\n        string.replace(unescapedHTMLExp, chr => htmlEscapes[chr]) :\n        string;\n}\n\nexport function isDefined(value: any) {\n    return value !== undefined && value !== null;\n}\n\nexport function isObject(value: any) {\n    return typeof value === 'object' && isDefined(value);\n}\n\nexport function isPromise(value: any) {\n    return value instanceof Promise;\n}\n\nexport function isFunction(value: any) {\n    return value instanceof Function;\n}\n","import { newId } from './id';\nimport { NgSelectComponent } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport * as searchHelper from './search-helper';\nimport { SelectionModel } from './selection-model';\nimport { isDefined, isFunction, isObject } from './value-utils';\n\ntype OptionGroups = Map<string | NgOption, NgOption[]>;\n\nexport class ItemsList {\n  private _groups: OptionGroups;\n\n  constructor(private _ngSelect: NgSelectComponent, private _selectionModel: SelectionModel) {}\n\n  private _items: NgOption[] = [];\n\n  get items(): NgOption[] {\n    return this._items;\n  }\n\n  private _filteredItems: NgOption[] = [];\n\n  get filteredItems(): NgOption[] {\n    return this._filteredItems;\n  }\n\n  private _markedIndex = -1;\n\n  get markedIndex(): number {\n    return this._markedIndex;\n  }\n\n  get selectedItems() {\n    return this._selectionModel.value;\n  }\n\n  get markedItem(): NgOption {\n    return this._filteredItems[this._markedIndex];\n  }\n\n  get noItemsToSelect(): boolean {\n    return this._ngSelect.hideSelected && this._items.length === this.selectedItems.length;\n  }\n\n  get maxItemsSelected(): boolean {\n    return this._ngSelect.multiple && this._ngSelect.maxSelectedItems <= this.selectedItems.length;\n  }\n\n  get lastSelectedItem() {\n    let i = this.selectedItems.length - 1;\n    for (; i >= 0; i--) {\n      let item = this.selectedItems[i];\n      if (!item.disabled) {\n        return item;\n      }\n    }\n    return null;\n  }\n\n  setItems(items: any[]) {\n    this._items = items.map((item, index) => this.mapItem(item, index));\n\n    if (this._ngSelect.groupBy) {\n      this._groups = this._groupBy(this._items, this._ngSelect.groupBy);\n      this._items = this._flatten(this._groups);\n    } else {\n      this._groups = new Map();\n      this._groups.set(undefined, this._items);\n    }\n\n    if (this._ngSelect.hideDisabled) {\n      this._filteredItems = [...this._items.filter((x) => !x.disabled)];\n    } else {\n      this._filteredItems = [...this._items];\n    }\n  }\n\n  select(item: NgOption) {\n    if (item.selected || this.maxItemsSelected) {\n      return;\n    }\n    const multiple = this._ngSelect.multiple;\n    if (!multiple) {\n      this.clearSelected();\n    }\n\n    this._selectionModel.select(item, multiple, this._ngSelect.selectableGroupAsModel);\n    if (this._ngSelect.hideSelected) {\n      this._hideSelected(item);\n    }\n  }\n\n  unselect(item: NgOption) {\n    if (!item.selected) {\n      return;\n    }\n    this._selectionModel.unselect(item, this._ngSelect.multiple);\n    if (this._ngSelect.hideSelected && isDefined(item.index) && this._ngSelect.multiple) {\n      this._showSelected(item);\n    }\n  }\n\n  findItem(value: any): NgOption {\n    let findBy: (item: NgOption) => boolean;\n    if (this._ngSelect.compareWith) {\n      findBy = (item) => this._ngSelect.compareWith(item.value, value);\n    } else if (this._ngSelect.bindValue) {\n      findBy = (item) => !item.children && this.resolveNested(item.value, this._ngSelect.bindValue) === value;\n    } else {\n      findBy = (item) =>\n        item.value === value || (!item.children && item.label && item.label === this.resolveNested(value, this._ngSelect.bindLabel));\n    }\n    return this._items.find((item) => findBy(item));\n  }\n\n  addItem(item: any) {\n    const option = this.mapItem(item, this._items.length);\n    this._items.push(option);\n    this._filteredItems.push(option);\n    return option;\n  }\n\n  clearSelected(keepDisabled = false) {\n    this._selectionModel.clear(keepDisabled);\n    this._items.forEach((item) => {\n      item.selected = keepDisabled && item.selected && item.disabled;\n      item.marked = false;\n    });\n    if (this._ngSelect.hideSelected) {\n      this.resetFilteredItems();\n    }\n  }\n\n  findByLabel(term: string) {\n    term = searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n    return this.filteredItems.find((item) => {\n      const label = searchHelper.stripSpecialChars(item.label).toLocaleLowerCase();\n      return label.substr(0, term.length) === term;\n    });\n  }\n\n  filter(term: string): void {\n    if (!term) {\n      this.resetFilteredItems();\n      return;\n    }\n\n    this._filteredItems = [];\n    term = this._ngSelect.searchFn ? term : searchHelper.stripSpecialChars(term).toLocaleLowerCase();\n    const match = this._ngSelect.searchFn || this._defaultSearchFn;\n    const hideSelected = this._ngSelect.hideSelected;\n    const hideDisabled = this._ngSelect.hideDisabled;\n\n    for (const key of Array.from(this._groups.keys())) {\n      const matchedItems = [];\n      for (const item of this._groups.get(key)) {\n        if (hideSelected && ((item.parent && item.parent.selected) || item.selected)) {\n          continue;\n        }\n        if (hideDisabled && ((item.parent && item.parent.disabled) || item.disabled)) {\n          continue;\n        }\n        const searchItem = this._ngSelect.searchFn ? item.value : item;\n        if (match(term, searchItem)) {\n          matchedItems.push(item);\n        }\n      }\n      if (matchedItems.length > 0) {\n        const [last] = matchedItems.slice(-1);\n        if (last.parent) {\n          const head = this._items.find((x) => x === last.parent);\n          this._filteredItems.push(head);\n        }\n        this._filteredItems.push(...matchedItems);\n      }\n    }\n  }\n\n  resetFilteredItems() {\n    if (this._filteredItems.length === this._items.length) {\n      return;\n    }\n\n    if (this._ngSelect.hideSelected && this.selectedItems.length > 0) {\n      this._filteredItems = this._items.filter((x) => !x.selected);\n    } else {\n      this._filteredItems = this._items;\n    }\n  }\n\n  unmarkItem() {\n    this._markedIndex = -1;\n  }\n\n  markNextItem() {\n    this._stepToItem(+1);\n  }\n\n  markPreviousItem() {\n    this._stepToItem(-1);\n  }\n\n  markItem(item: NgOption) {\n    this._markedIndex = this._filteredItems.indexOf(item);\n  }\n\n  markSelectedOrDefault(markDefault?: boolean) {\n    if (this._filteredItems.length === 0) {\n      return;\n    }\n\n    const lastMarkedIndex = this._getLastMarkedIndex();\n    if (lastMarkedIndex > -1) {\n      this._markedIndex = lastMarkedIndex;\n    } else {\n      this._markedIndex = markDefault ? this.filteredItems.findIndex((x) => !x.disabled) : -1;\n    }\n  }\n\n  resolveNested(option: any, key: string): any {\n    if (!isObject(option)) {\n      return option;\n    }\n    if (key.indexOf('.') === -1) {\n      return option[key];\n    } else {\n      let keys: string[] = key.split('.');\n      let value = option;\n      for (let i = 0, len = keys.length; i < len; ++i) {\n        if (value == null) {\n          return null;\n        }\n        value = value[keys[i]];\n      }\n      return value;\n    }\n  }\n\n  mapItem(item: any, index: number): NgOption {\n    const label = isDefined(item.$ngOptionLabel) ? item.$ngOptionLabel : this.resolveNested(item, this._ngSelect.bindLabel);\n    const value = isDefined(item.$ngOptionValue) ? item.$ngOptionValue : item;\n    return {\n      index: index,\n      label: isDefined(label) ? label.toString() : '',\n      value: value,\n      disabled: item.disabled,\n      title: item.title,\n      htmlId: `${this._ngSelect.dropdownId}-${index}`,\n    };\n  }\n\n  mapSelectedItems() {\n    const multiple = this._ngSelect.multiple;\n    for (const selected of this.selectedItems) {\n      const value = this._ngSelect.bindValue ? this.resolveNested(selected.value, this._ngSelect.bindValue) : selected.value;\n      const item = isDefined(value) ? this.findItem(value) : null;\n      this._selectionModel.unselect(selected, multiple);\n      this._selectionModel.select(item || selected, multiple, this._ngSelect.selectableGroupAsModel);\n    }\n\n    if (this._ngSelect.hideSelected) {\n      this._filteredItems = this.filteredItems.filter((x) => this.selectedItems.indexOf(x) === -1);\n    }\n  }\n\n  private _showSelected(item: NgOption) {\n    this._filteredItems.push(item);\n    if (item.parent) {\n      const parent = item.parent;\n      const parentExists = this._filteredItems.find((x) => x === parent);\n      if (!parentExists) {\n        this._filteredItems.push(parent);\n      }\n    } else if (item.children) {\n      for (const child of item.children) {\n        child.selected = false;\n        this._filteredItems.push(child);\n      }\n    }\n    this._filteredItems = [...this._filteredItems.sort((a, b) => a.index - b.index)];\n  }\n\n  private _hideSelected(item: NgOption) {\n    this._filteredItems = this._filteredItems.filter((x) => x !== item);\n    if (item.parent) {\n      const children = item.parent.children;\n      if (children.every((x) => x.selected)) {\n        this._filteredItems = this._filteredItems.filter((x) => x !== item.parent);\n      }\n    } else if (item.children) {\n      this._filteredItems = this.filteredItems.filter((x) => x.parent !== item);\n    }\n  }\n\n  private _defaultSearchFn(search: string, opt: NgOption) {\n    const label = searchHelper.stripSpecialChars(opt.label).toLocaleLowerCase();\n    return label.indexOf(search) > -1;\n  }\n\n  private _getNextItemIndex(steps: number) {\n    if (steps > 0) {\n      return this._markedIndex === this._filteredItems.length - 1 ? 0 : this._markedIndex + 1;\n    }\n    return this._markedIndex <= 0 ? this._filteredItems.length - 1 : this._markedIndex - 1;\n  }\n\n  private _stepToItem(steps: number) {\n    if (this._filteredItems.length === 0 || this._filteredItems.every((x) => x.disabled)) {\n      return;\n    }\n\n    this._markedIndex = this._getNextItemIndex(steps);\n    if (this.markedItem.disabled) {\n      this._stepToItem(steps);\n    }\n  }\n\n  private _getLastMarkedIndex() {\n    if (this._ngSelect.hideSelected) {\n      return -1;\n    }\n\n    if (this._markedIndex > -1 && this.markedItem === undefined) {\n      return -1;\n    }\n\n    const selectedIndex = this._filteredItems.indexOf(this.lastSelectedItem);\n    if (this.lastSelectedItem && selectedIndex < 0) {\n      return -1;\n    }\n\n    return Math.max(this.markedIndex, selectedIndex);\n  }\n\n  private _groupBy(items: NgOption[], prop: string | Function): OptionGroups {\n    const groups = new Map<string | NgOption, NgOption[]>();\n    if (items.length === 0) {\n      return groups;\n    }\n\n    // Check if items are already grouped by given key.\n    if (Array.isArray(items[0].value[<string>prop])) {\n      for (const item of items) {\n        const children = (item.value[<string>prop] || []).map((x, index) => this.mapItem(x, index));\n        groups.set(item, children);\n      }\n      return groups;\n    }\n\n    const isFnKey = isFunction(this._ngSelect.groupBy);\n    const keyFn = (item: NgOption) => {\n      let key = isFnKey ? (<Function>prop)(item.value) : item.value[<string>prop];\n      return isDefined(key) ? key : undefined;\n    };\n\n    // Group items by key.\n    for (const item of items) {\n      let key = keyFn(item);\n      const group = groups.get(key);\n      if (group) {\n        group.push(item);\n      } else {\n        groups.set(key, [item]);\n      }\n    }\n    return groups;\n  }\n\n  private _flatten(groups: OptionGroups) {\n    const isGroupByFn = isFunction(this._ngSelect.groupBy);\n    const items = [];\n    for (const key of Array.from(groups.keys())) {\n      let i = items.length;\n      if (key === undefined) {\n        const withoutGroup = groups.get(undefined) || [];\n        items.push(...withoutGroup.map((x) => ({ ...x, index: i++ })));\n        continue;\n      }\n\n      const isObjectKey = isObject(key);\n      const parent: NgOption = {\n        label: isObjectKey ? '' : String(key),\n        children: undefined,\n        parent: null,\n        index: i++,\n        disabled: !this._ngSelect.selectableGroup,\n        htmlId: newId(),\n      };\n      const groupKey = isGroupByFn ? this._ngSelect.bindLabel : <string>this._ngSelect.groupBy;\n      const groupValue =\n        this._ngSelect.groupValue ||\n        (() => {\n          if (isObjectKey) {\n            return (<NgOption>key).value;\n          }\n          return { [groupKey]: key };\n        });\n      const children = groups.get(key).map((x) => {\n        x.parent = parent;\n        x.children = undefined;\n        x.index = i++;\n        return x;\n      });\n      parent.children = children;\n      parent.value = groupValue(\n        key,\n        children.map((x) => x.value)\n      );\n      items.push(parent);\n      items.push(...children);\n    }\n    return items;\n  }\n}\n","import { NgOption } from './ng-select.types';\n\nexport type SelectionModelFactory = () => SelectionModel;\n\nexport function DefaultSelectionModelFactory() {\n    return new DefaultSelectionModel();\n}\n\nexport interface SelectionModel {\n    value: NgOption[];\n    select(item: NgOption, multiple: boolean, selectableGroupAsModel: boolean);\n    unselect(item: NgOption, multiple: boolean);\n    clear(keepDisabled: boolean);\n}\n\nexport class DefaultSelectionModel implements SelectionModel {\n    protected _selected: NgOption[] = [];\n\n    get value(): NgOption[] {\n        return this._selected;\n    }\n\n    select(item: NgOption, multiple: boolean, groupAsModel: boolean) {\n        item.selected = true;\n        if (!item.children || (!multiple && groupAsModel)) {\n            this._selected.push(item);\n        }\n        if (multiple) {\n            if (item.parent) {\n                const childrenCount = item.parent.children.length;\n                const selectedCount = item.parent.children.filter(x => x.selected).length;\n                item.parent.selected = childrenCount === selectedCount;\n            } else if (item.children) {\n                this._setChildrenSelectedState(item.children, true);\n                this._removeChildren(item);\n                if (groupAsModel && this._activeChildren(item)) {\n                    this._selected = [...this._selected.filter(x => x.parent !== item), item]\n                } else {\n                    this._selected = [...this._selected, ...item.children.filter(x => !x.disabled)];\n                }\n            }\n        }\n    }\n\n    unselect(item: NgOption, multiple: boolean) {\n        this._selected = this._selected.filter(x => x !== item);\n        item.selected = false;\n        if (multiple) {\n            if (item.parent && item.parent.selected) {\n                const children = item.parent.children;\n                this._removeParent(item.parent);\n                this._removeChildren(item.parent);\n                this._selected.push(...children.filter(x => x !== item && !x.disabled));\n                item.parent.selected = false;\n            } else if (item.children) {\n                this._setChildrenSelectedState(item.children, false);\n                this._removeChildren(item);\n            }\n        }\n    }\n\n    clear(keepDisabled: boolean) {\n        this._selected = keepDisabled ? this._selected.filter(x => x.disabled) : [];\n    }\n\n    private _setChildrenSelectedState(children: NgOption[], selected: boolean) {\n        for (const child of children) {\n            if (child.disabled) {\n                continue;\n            }\n            child.selected = selected;\n        };\n    }\n\n    private _removeChildren(parent: NgOption) {\n        this._selected = [\n            ...this._selected.filter(x => x.parent !== parent), \n            ...parent.children.filter(x => x.parent === parent && x.disabled && x.selected)\n        ];\n    }\n\n    private _removeParent(parent: NgOption) {\n        this._selected = this._selected.filter(x => x !== parent)\n    }\n\n    private _activeChildren(item: NgOption): boolean {\n        return item.children.every(x => !x.disabled || x.selected);\n    }\n}\n","import { ItemsList } from './items-list';\nimport { NgSelectComponent } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport { DefaultSelectionModel, SelectionModel } from './selection-model';\n\nexport function DefaultSelectionModelExtFactory() {\n  return new DefaultSelectionModelExt();\n}\n\nexport class DefaultSelectionModelExt extends DefaultSelectionModel {\n  constructor() {\n    super();\n  }\n\n  get value() {\n    return this._selected;\n  }\n  set value(items: NgOption[]) {\n    this._selected = items;\n  }\n}\n\nexport class ItemsListExt extends ItemsList {\n  private __selectionModel: SelectionModel;\n  constructor(_ngSelect: NgSelectComponent, _selectionModel: SelectionModel) {\n    super(_ngSelect, _selectionModel);\n    this.__selectionModel = _selectionModel;\n  }\n  get selectedItems() {\n    return this.__selectionModel.value;\n  }\n  set selectedItems(items: NgOption[]) {\n    this.__selectionModel.value = items;\n  }\n}\n","import { Directive, ElementRef, Input, OnChanges, SimpleChanges, TemplateRef } from '@angular/core';\nimport { escapeHTML } from './value-utils';\n\n@Directive({ selector: '[ngItemLabel]' })\nexport class NgItemLabelDirective implements OnChanges {\n    @Input() ngItemLabel: string;\n    @Input() escape = true;\n\n    constructor(private element: ElementRef<HTMLElement>) { }\n\n    ngOnChanges(changes: SimpleChanges) {\n        this.element.nativeElement.innerHTML = this.escape ?\n            escapeHTML(this.ngItemLabel) :\n            this.ngItemLabel;\n    }\n}\n\n@Directive({ selector: '[ng-option-tmp]' })\nexport class NgOptionTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-optgroup-tmp]' })\nexport class NgOptgroupTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-label-tmp]' })\nexport class NgLabelTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-multi-label-tmp]' })\nexport class NgMultiLabelTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-header-tmp]' })\nexport class NgHeaderTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-footer-tmp]' })\nexport class NgFooterTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-notfound-tmp]' })\nexport class NgNotFoundTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-typetosearch-tmp]' })\nexport class NgTypeToSearchTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-loadingtext-tmp]' })\nexport class NgLoadingTextTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-tag-tmp]' })\nexport class NgTagTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n\n@Directive({ selector: '[ng-loadingspinner-tmp]' })\nexport class NgLoadingSpinnerTemplateDirective {\n    constructor(public template: TemplateRef<any>) { }\n}\n","export interface NgOption {\n  [name: string]: any;\n  index?: number;\n  htmlId?: string;\n  selected?: boolean;\n  disabled?: boolean;\n  marked?: boolean;\n  label?: string;\n  value?: string | Object;\n  parent?: NgOption;\n  children?: NgOption[];\n  title?: string;\n}\n\nexport enum KeyCode {\n  Tab = 9,\n  Enter = 13,\n  Esc = 27,\n  Space = 32,\n  ArrowUp = 38,\n  ArrowDown = 40,\n  Backspace = 8,\n}\n","import { CommonModule, DOCUMENT } from '@angular/common';\nimport {\n    AfterViewInit,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    EventEmitter,\n    HostListener,\n    Inject,\n    Input,\n    NgZone,\n    OnChanges,\n    OnDestroy,\n    OnInit,\n    Optional,\n    Output,\n    Renderer2,\n    SimpleChanges,\n    TemplateRef,\n    ViewChild,\n    ViewEncapsulation\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\nimport { animationFrameScheduler, asapScheduler, fromEvent, merge, Subject } from 'rxjs';\nimport { auditTime, takeUntil, throttle } from 'rxjs/operators';\nimport { NgDropdownPanelService, PanelDimensions } from './ng-dropdown-panel.service';\n\n\nimport { NgOption } from './ng-select.types';\nimport { isDefined } from './value-utils';\n\nconst TOP_CSS_CLASS = 'ng-select-top';\nconst BOTTOM_CSS_CLASS = 'ng-select-bottom';\nconst SCROLL_SCHEDULER = typeof requestAnimationFrame !== 'undefined' ? animationFrameScheduler : asapScheduler;\n\n@Component({\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    encapsulation: ViewEncapsulation.None,\n    selector: 'ng-dropdown-panel',\n    template: `\n        <div *ngIf=\"headerTemplate\" class=\"ng-dropdown-header\">\n            <ng-container [ngTemplateOutlet]=\"headerTemplate\" [ngTemplateOutletContext]=\"{context, searchTerm: filterValue }\"></ng-container>\n        </div>\n        <div #scroll class=\"ng-dropdown-panel-items scroll-host\">\n            <div #padding [class.total-padding]=\"virtualScroll\"></div>\n            <div #content [class.scrollable-content]=\"virtualScroll && items.length\">\n                <ng-content></ng-content>\n            </div>\n        </div>\n        <div *ngIf=\"footerTemplate\" class=\"ng-dropdown-footer\">\n            <ng-container [ngTemplateOutlet]=\"footerTemplate\" [ngTemplateOutletContext]=\"{context, searchTerm: filterValue }\"></ng-container>\n        </div>\n    `\n})\nexport class NgDropdownPanelComponent implements OnInit, OnChanges, OnDestroy, AfterViewInit {\n\n    @Input() items: NgOption[] = [];\n    @Input() markedItem: NgOption;\n    @Input() position: string = 'auto';\n    @Input() appendTo: string;\n    @Input() bufferAmount;\n    @Input() virtualScroll = false;\n    @Input() headerTemplate: TemplateRef<any>;\n    @Input() footerTemplate: TemplateRef<any>;\n    @Input() filterValue: string = null;\n    @Input() context: any;\n\n    @Output() update = new EventEmitter<any[]>();\n    @Output() scroll = new EventEmitter<{ start: number; end: number }>();\n    @Output() scrollToEnd = new EventEmitter<void>();\n    @Output() outsideClick = new EventEmitter<void>();\n\n    @ViewChild('content', { read: ElementRef, static: true }) contentElementRef: ElementRef;\n    @ViewChild('scroll', { read: ElementRef, static: true }) scrollElementRef: ElementRef;\n    @ViewChild('inlineSearchInput') inlineSearchInput: ElementRef<HTMLInputElement>;\n    @ViewChild('padding', { read: ElementRef, static: true }) paddingElementRef: ElementRef;\n\n    private readonly _destroy$ = new Subject<void>();\n    private readonly _dropdown: HTMLElement;\n    private _virtualPadding: HTMLElement;\n    private _scrollablePanel: HTMLElement;\n    private _contentPanel: HTMLElement;\n    private _select: HTMLElement;\n    private _parent: HTMLElement;\n    private _scrollToEndFired = false;\n    private _updateScrollHeight = false;\n    private _lastScrollPosition = 0;\n\n    constructor(\n        private _renderer: Renderer2,\n        private _zone: NgZone,\n        private _panelService: NgDropdownPanelService,\n        _elementRef: ElementRef,\n        @Optional() @Inject(DOCUMENT) private _document: any\n    ) {\n        this._dropdown = _elementRef.nativeElement;\n    }\n\n    private _currentPosition: string;\n\n    get currentPosition(): string {\n        return this._currentPosition;\n    }\n\n    private _itemsLength: number;\n\n    private get itemsLength() {\n        return this._itemsLength;\n    }\n\n    private set itemsLength(value: number) {\n        if (value !== this._itemsLength) {\n            this._itemsLength = value;\n            this._onItemsLengthChanged();\n        }\n    }\n\n    private get _startOffset() {\n        if (this.markedItem) {\n            const { itemHeight, panelHeight } = this._panelService.dimensions;\n            const offset = this.markedItem.index * itemHeight;\n            return panelHeight > offset ? 0 : offset;\n        }\n        return 0;\n    }\n\n\n\n    @HostListener('mousedown', ['$event'])\n    handleMousedown($event: MouseEvent) {\n        const target = $event.target as HTMLElement;\n        if (target.tagName === 'INPUT') {\n            return;\n        }\n        $event.preventDefault();\n    }\n\n    @HostListener('window:resize', ['event'])\n    windowResize($event: any) {\n        this.scrollEvent($event);\n    }\n\n\n    scrollDebounce: any;\n    time = Date.now();\n    scrollEvent = ($event) => {\n        // do nothing if is mobile or no event\n        if (this.context.isMobile || !$event || $event.target == this.scrollElementRef.nativeElement)\n            return;\n        this.throttle(() => {\n            this.resetScrollHeight(this._panelService.dimensions.itemHeight);\n            if (this.scrollElementRef && this.isSelectVisible())\n                this.adjustPosition();\n            else\n                this.context.close()\n        }, this.time, 1)()\n    }\n\n    // Set up the throttler \n    throttle = (fn, time, delay) => {\n        // Capture the current time \n        // Here's our logic \n        return () => {\n            if ((time + delay - Date.now()) <= 0) {\n                // Run the function we've passed to our throttler, \n                // and reset the `time` variable (so we can check again). \n                fn();\n                this.time = Date.now();\n            }\n        }\n    }\n\n    ngOnInit() {\n        if (this.context.appendTo == 'body')\n            window.addEventListener('scroll', this.scrollEvent,true); //third parameter\n        this._select = this._dropdown.parentElement;\n        this._virtualPadding = this.paddingElementRef.nativeElement;\n        this._scrollablePanel = this.scrollElementRef.nativeElement;\n        this._contentPanel = this.contentElementRef.nativeElement;\n        this._handleScroll();\n        this._handleOutsideClick();\n        this._appendDropdown();\n    }\n\n    ngAfterViewInit(): void {\n        const searchInput = window.document.getElementById('labelForId')\n        if (searchInput) {\n            const input = searchInput;\n            const attributes = {\n                type: 'text',\n                autocorrect: 'off',\n                autocapitalize: 'off',\n                autocomplete: 'off',\n                ...this.context.inputAttrs,\n            };\n\n            for (const key of Object.keys(attributes)) {\n                input.setAttribute(key, attributes[key]);\n            }\n\n            setTimeout(() => searchInput.focus({ preventScroll: true }), 100);\n        }\n\n    }\n\n\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.items) {\n            const change = changes.items;\n            this._onItemsChange(change.currentValue, change.firstChange);\n        }\n    }\n\n    ngOnDestroy() {\n        if (this.context.appendTo == 'body')\n            window.removeEventListener('scroll', this.scrollEvent, true);\n        this._destroy$.next();\n        this._destroy$.complete();\n        this._destroy$.unsubscribe();\n        if (this.appendTo) {\n            this._renderer.removeChild(this._dropdown.parentNode, this._dropdown);\n        }\n    }\n\n    scrollTo(option: NgOption, startFromOption = false) {\n        if (!option) {\n            return;\n        }\n\n        const index = this.items.indexOf(option);\n        if (index < 0 || index >= this.itemsLength) {\n            return;\n        }\n\n        let scrollTo;\n        if (this.virtualScroll) {\n            const itemHeight = this._panelService.dimensions.itemHeight;\n            scrollTo = this._panelService.getScrollTo(index * itemHeight, itemHeight, this._lastScrollPosition);\n        } else {\n            const item: HTMLElement = this._dropdown.querySelector(`#${option.htmlId}`);\n            const lastScroll = startFromOption ? item.offsetTop : this._lastScrollPosition;\n            scrollTo = this._panelService.getScrollTo(item.offsetTop, item.clientHeight, lastScroll);\n        }\n\n        if (isDefined(scrollTo)) {\n            this._scrollablePanel.scrollTop = scrollTo;\n        }\n    }\n\n    scrollToTag() {\n        const panel = this._scrollablePanel;\n        panel.scrollTop = panel.scrollHeight - panel.clientHeight;\n    }\n\n    adjustPosition() {\n        this._updateYPosition();\n    }\n\n    private _handleDropdownPosition() {\n\n        this._currentPosition = this._calculateCurrentPosition(this._dropdown);\n        if (this._currentPosition === 'top') {\n            this._renderer.addClass(this._dropdown, TOP_CSS_CLASS);\n            this._renderer.removeClass(this._dropdown, BOTTOM_CSS_CLASS);\n            this._renderer.addClass(this._select, TOP_CSS_CLASS);\n            this._renderer.removeClass(this._select, BOTTOM_CSS_CLASS)\n        } else {\n            this._renderer.addClass(this._dropdown, BOTTOM_CSS_CLASS);\n            this._renderer.removeClass(this._dropdown, TOP_CSS_CLASS);\n            this._renderer.addClass(this._select, BOTTOM_CSS_CLASS);\n            this._renderer.removeClass(this._select, TOP_CSS_CLASS);\n        }\n\n        if (this.appendTo) {\n            this._updateYPosition();\n        }\n\n        this._dropdown.style.opacity = '1';\n    }\n\n    private _handleScroll() {\n        this._zone.runOutsideAngular(() => {\n            fromEvent(this.scrollElementRef.nativeElement, 'scroll')\n                .pipe(takeUntil(this._destroy$), auditTime(0, SCROLL_SCHEDULER))\n                .subscribe((e: { path, composedPath, target }) => {\n                    const path = e.path || (e.composedPath && e.composedPath());\n                    const scrollTop = path.length === 0 ? e.target.scrollTop : path[0].scrollTop\n                    this._onContentScrolled(scrollTop);\n                });\n        });\n    }\n\n    private _handleOutsideClick() {\n        if (!this._document) {\n            return;\n        }\n\n        this._zone.runOutsideAngular(() => {\n            merge(\n                fromEvent(this._document, 'touchstart', { capture: true }),\n                fromEvent(this._document, 'mousedown', { capture: true })\n            ).pipe(takeUntil(this._destroy$))\n                .subscribe($event => this._checkToClose($event));\n        });\n    }\n\n    private _checkToClose($event: any) {\n        if (this._select.contains($event.target) || this._dropdown.contains($event.target)) {\n            return;\n        }\n\n        const path = $event.path || ($event.composedPath && $event.composedPath());\n        if ($event.target && $event.target.shadowRoot && path && path[0] && this._select.contains(path[0])) {\n            return;\n        }\n\n        this._zone.run(() => this.outsideClick.emit());\n    }\n\n    private _onItemsChange(items: NgOption[], firstChange: boolean) {\n        this.items = items || [];\n        this._scrollToEndFired = false;\n        this.itemsLength = items.length;\n\n        if (this.virtualScroll) {\n            this._updateItemsRange(firstChange);\n        } else {\n            this._setVirtualHeight();\n            this._updateItems(firstChange);\n        }\n    }\n\n    private _updateItems(firstChange: boolean) {\n        this.update.emit(this.items);\n        if (firstChange === false) {\n            return;\n        }\n\n        this._zone.runOutsideAngular(() => {\n            Promise.resolve().then(() => {\n                const panelHeight = this._scrollablePanel.clientHeight;\n\n                this._panelService.setDimensions(0, panelHeight);\n                this._handleDropdownPosition();\n                this.scrollTo(this.markedItem, firstChange);\n            });\n        });\n    }\n\n    private _updateItemsRange(firstChange: boolean) {\n        this._zone.runOutsideAngular(() => {\n            this._measureDimensions().then(() => {\n\n                if (firstChange) {\n                    this._renderItemsRange(this._startOffset);\n                    this._handleDropdownPosition();\n                } else {\n                    this._renderItemsRange();\n                }\n            });\n        });\n    }\n\n\n\n\n    isSelectVisible(): boolean {\n        let el: any = this._select;\n        // get list of parent nodes\n        let parents = [];\n        for (parents = []; el; el = el.parentNode) {\n            if (el == document)\n                parents.push(null)\n            else if (el.scrollHeight > el.clientHeight)\n                parents.push(el);\n        }\n        // exclude the parent container\n\n        let is_hidden = false;\n        parents.find(el => {\n            is_hidden = !this.isElementVisible(this._select, el)\n            return is_hidden\n        })\n        return !is_hidden\n    }\n\n    isElementVisible(el, holder): boolean {\n        holder = holder || document.body\n        const { top, bottom, height } = el.getBoundingClientRect()\n        const holderRect = holder.getBoundingClientRect()\n\n        return top <= holderRect.top\n            ? holderRect.top - top <= height /2\n            : bottom - holderRect.bottom <= height /2\n    }\n\n    private _onContentScrolled(scrollTop: number) {\n        if (this.virtualScroll) {\n            this._renderItemsRange(scrollTop);\n        }\n        this._lastScrollPosition = scrollTop;\n        this._fireScrollToEnd(scrollTop);\n    }\n\n    private _updateVirtualHeight(height: number) {\n        if (this._updateScrollHeight) {\n            this._virtualPadding.style.height = `${height}px`;\n            this._updateScrollHeight = false;\n        }\n    }\n\n    private _setVirtualHeight() {\n\n        if (!this._virtualPadding) {\n            return;\n        }\n\n        this._virtualPadding.style.height = `0px`;\n    }\n\n    private _onItemsLengthChanged() {\n        this._updateScrollHeight = true;\n    }\n\n    private _renderItemsRange(scrollTop = null) {\n        if (scrollTop && this._lastScrollPosition === scrollTop) {\n            return;\n        }\n\n        scrollTop = scrollTop || this._scrollablePanel.scrollTop;\n        const range = this._panelService.calculateItems(scrollTop, this.itemsLength, this.bufferAmount);\n        this._updateVirtualHeight(range.scrollHeight);\n        this._contentPanel.style.transform = `translateY(${range.topPadding}px)`;\n\n        this._zone.run(() => {\n            this.update.emit(this.items.slice(range.start, range.end));\n            this.scroll.emit({ start: range.start, end: range.end });\n        });\n\n        if (isDefined(scrollTop) && this._lastScrollPosition === 0) {\n            this._scrollablePanel.scrollTop = scrollTop;\n            this._lastScrollPosition = scrollTop;\n        }\n    }\n\n    private resetScrollHeight(optionHeight: number): void {\n        this._scrollablePanel.style.maxHeight = '100vh'\n        this._virtualPadding.style.height = `${optionHeight * this.itemsLength}px`\n        let panelHeight = this._scrollablePanel.clientHeight;\n        const control_height = this._dropdown.clientHeight - panelHeight;\n        const parentBound = this._select.getBoundingClientRect();\n        const documentBound = document.body.getBoundingClientRect();\n        const bottom_space = documentBound.height - parentBound.bottom - control_height - 10;\n        const top_space = parentBound.top - control_height - 10\n        if (panelHeight > bottom_space && top_space < documentBound.height / 2) {\n            this._scrollablePanel.style.maxHeight = bottom_space + 'px';\n            panelHeight = this._scrollablePanel.clientHeight;\n        } else if (panelHeight < (bottom_space)) {\n\n        } else if (panelHeight > top_space && bottom_space < top_space) {\n            this._scrollablePanel.style.maxHeight = top_space + 'px';\n            panelHeight = this._scrollablePanel.clientHeight;\n        }\n\n        this._panelService.setDimensions(optionHeight, panelHeight);\n    }\n\n    private _measureDimensions(): Promise<PanelDimensions> {\n        if (this._panelService.dimensions.itemHeight > 0 || this.itemsLength === 0) {\n            return Promise.resolve().then(() => {\n                this.resetScrollHeight(this._panelService.dimensions.itemHeight);\n                return this._panelService.dimensions\n            });\n        }\n        const [first] = this.items;\n        this.update.emit([first]);\n\n        return Promise.resolve().then(() => {\n            const option = this._dropdown.querySelector(`#${this.items[0].htmlId}`);\n            const optionHeight = option.clientHeight;\n\n            this.resetScrollHeight(optionHeight);\n\n            return this._panelService.dimensions;\n        });\n    }\n\n    private _fireScrollToEnd(scrollTop: number) {\n        if (this._scrollToEndFired || scrollTop === 0) {\n            return;\n        }\n\n        const padding = this.virtualScroll ?\n            this._virtualPadding :\n            this._contentPanel;\n\n        if (scrollTop + this._dropdown.clientHeight >= padding.clientHeight) {\n            this._zone.run(() => this.scrollToEnd.emit());\n            this._scrollToEndFired = true;\n        }\n    }\n\n    private _calculateCurrentPosition(dropdownEl: HTMLElement) {\n\n        if (this.position !== 'auto') {\n            return this.position;\n        }\n        const selectRect: ClientRect = this._select.getBoundingClientRect();\n        const scrollTop = document.documentElement.scrollTop || document.body.scrollTop;\n        const offsetTop = selectRect.top + window.pageYOffset;\n        const height = selectRect.height;\n        const dropdownHeight = dropdownEl.getBoundingClientRect().height;\n        if (offsetTop + height + dropdownHeight > scrollTop + document.documentElement.clientHeight) {\n            return 'top';\n        } else {\n            return 'bottom';\n        }\n    }\n\n    private _appendDropdown() {\n        if (!this.appendTo) {\n            return;\n        }\n\n        this._parent = document.querySelector(this.appendTo);\n        if (!this._parent) {\n            throw new Error(`appendTo selector ${this.appendTo} did not found any parent element`);\n        }\n        this._updateXPosition();\n        this._parent.appendChild(this._dropdown);\n    }\n\n    _updateXPosition() {\n        const select = this._select.getBoundingClientRect();\n        const parent = this._parent.getBoundingClientRect();\n        const offsetLeft = select.left - parent.left;\n\n        this._dropdown.style.left = offsetLeft + 'px';\n        this._dropdown.style.width = select.width + 'px';\n        this._dropdown.style.minWidth = select.width + 'px';\n    }\n\n    private _updateYPosition() {\n        const select = this._select.getBoundingClientRect();\n        const parent = this._parent.getBoundingClientRect();\n        const delta = select.height;\n\n        if (this._currentPosition === 'top') {\n            const offsetBottom = parent.bottom - select.bottom;\n            this._dropdown.style.bottom = offsetBottom + delta - 1 + 'px';\n            this._dropdown.style.top = 'auto';\n        } else if (this._currentPosition === 'bottom') {\n            const offsetTop = select.top - parent.top;\n            this._dropdown.style.top = offsetTop + delta - 1 + 'px';\n            this._dropdown.style.bottom = 'auto';\n        }\n    }\n}\n","import {\n    AfterViewChecked,\n    ChangeDetectionStrategy,\n    Component,\n    ElementRef,\n    Input,\n    OnChanges,\n    OnDestroy,\n    SimpleChanges\n} from '@angular/core';\nimport { Subject } from 'rxjs';\n\n@Component({\n    selector: 'ng-option',\n    changeDetection: ChangeDetectionStrategy.OnPush,\n    template: `<ng-content></ng-content>`\n})\nexport class NgOptionComponent implements OnChanges, AfterViewChecked, OnDestroy {\n\n    @Input() value: any;\n    @Input()\n    get disabled() { return this._disabled; }\n    set disabled(value: any) { this._disabled = this._isDisabled(value) }\n\n    readonly stateChange$ = new Subject<{ value: any, disabled: boolean, label?: string }>();\n\n    private _disabled = false;\n    private _previousLabel: string;\n\n    constructor(public elementRef: ElementRef<HTMLElement>) { }\n\n    get label(): string {\n        return (this.elementRef.nativeElement.textContent || '').trim();\n    }\n\n    ngOnChanges(changes: SimpleChanges) {\n        if (changes.disabled) {\n            this.stateChange$.next({\n                value: this.value,\n                disabled: this._disabled\n            });\n        }\n    }\n\n    ngAfterViewChecked() {\n        if (this.label !== this._previousLabel) {\n            this._previousLabel = this.label;\n            this.stateChange$.next({\n                value: this.value,\n                disabled: this._disabled,\n                label: this.elementRef.nativeElement.innerHTML\n            });\n        }\n    }\n\n    ngOnDestroy() {\n        this.stateChange$.complete();\n    }\n\n    private _isDisabled(value) {\n        return value != null && `${value}` !== 'false';\n    }\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class NgSelectConfig {\n    placeholder: string;\n    notFoundText = 'No items found';\n    typeToSearchText = 'Type to search';\n    addTagText = 'Add item';\n    loadingText = 'Loading...';\n    clearAllText = 'Clear all';\n    disableVirtualScroll = true;\n    openOnEnter = true;\n    appendTo: string;\n    bindValue: string;\n    appearance = 'underline';\n}\n","import { Injectable } from '@angular/core';\n\n@Injectable({ providedIn: 'root' })\nexport class ConsoleService {\n    warn(message: string) {\n        console.warn(message)\n    }\n}\n","import {\n  Component,\n  OnDestroy,\n  OnChanges,\n  AfterViewInit,\n  forwardRef,\n  ChangeDetectorRef,\n  Input,\n  Output,\n  EventEmitter,\n  ContentChild,\n  TemplateRef,\n  ViewEncapsulation,\n  HostListener,\n  HostBinding,\n  ViewChild,\n  ElementRef,\n  ChangeDetectionStrategy,\n  Inject,\n  SimpleChanges,\n  ContentChildren,\n  QueryList,\n  InjectionToken,\n  Attribute,\n} from '@angular/core';\nimport { ControlValueAccessor, NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil, startWith, tap, debounceTime, map, filter } from 'rxjs/operators';\nimport { Subject, merge } from 'rxjs';\n\nimport {\n  NgOptionTemplateDirective,\n  NgLabelTemplateDirective,\n  NgHeaderTemplateDirective,\n  NgFooterTemplateDirective,\n  NgOptgroupTemplateDirective,\n  NgNotFoundTemplateDirective,\n  NgTypeToSearchTemplateDirective,\n  NgLoadingTextTemplateDirective,\n  NgMultiLabelTemplateDirective,\n  NgTagTemplateDirective,\n  NgLoadingSpinnerTemplateDirective,\n} from './ng-templates.directive';\n\nimport { ConsoleService } from './console.service';\nimport { isDefined, isFunction, isPromise, isObject } from './value-utils';\nimport { ItemsList } from './items-list';\nimport { NgOption, KeyCode } from './ng-select.types';\nimport { newId } from './id';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgOptionComponent } from './ng-option.component';\nimport { SelectionModelFactory } from './selection-model';\nimport { NgSelectConfig } from './config.service';\nimport { NgDropdownPanelService } from './ng-dropdown-panel.service';\n\nexport const SELECTION_MODEL_FACTORY = new InjectionToken<SelectionModelFactory>('ng-select-selection-model');\nexport type DropdownPosition = 'bottom' | 'top' | 'auto';\nexport type AddTagFn = (term: string) => any | Promise<any>;\nexport type CompareWithFn = (a: any, b: any) => boolean;\nexport type GroupValueFn = (key: string | object, children: any[]) => string | object;\n\n@Component({\n  selector: 'ng-select',\n    templateUrl: './ng-select.component.html',\n    styleUrls: ['./ng-select.component.scss'],\n    providers: [{\n    provide: NG_VALUE_ACCESSOR,\n    useExisting: forwardRef(() => NgSelectComponent),\n    multi: true\n    }, NgDropdownPanelService],\n    encapsulation: ViewEncapsulation.None,\n    changeDetection: ChangeDetectionStrategy.OnPush  \n})\nexport class NgSelectComponent implements OnDestroy, OnChanges, AfterViewInit, ControlValueAccessor {\n  @Input() bindLabel: string;\n  @Input() bindValue: string;\n  @Input() markFirst = true;\n  @Input() placeholder: string;\n  @Input() notFoundText: string;\n  @Input() typeToSearchText: string;\n  @Input() addTagText: string;\n  @Input() loadingText: string;\n  @Input() clearAllText: string;\n  @Input() appearance: string;\n  @Input() dropdownPosition: DropdownPosition = 'auto';\n  @Input() appendTo: string;\n  @Input() loading = false;\n  @Input() closeOnSelect = true;\n  @Input() hideSelected = false;\n  @Input() selectOnTab = false;\n  @Input() openOnEnter: boolean;\n  @Input() maxSelectedItems: number;\n  @Input() groupBy: string | Function;\n  @Input() groupValue: GroupValueFn;\n  @Input() bufferAmount = 4;\n  @Input() virtualScroll: boolean;\n  @Input() selectableGroup = false;\n  @Input() selectableGroupAsModel = true;\n  @Input() searchFn = null;\n  @Input() trackByFn = null;\n  @Input() clearOnBackspace = true;\n  @Input() labelForId = null;\n  @Input() inputAttrs: { [key: string]: string } = {};\n  @Input() tabIndex: number;\n  @Input() readonly = false;\n  @Input() searchWhileComposing = true;\n  @Input() minTermLength = 0;\n  @Input() editableSearchTerm = false;\n  @Input() keyDownFn = (_: KeyboardEvent) => true;\n  @Input() disableSort = true;\n  @Input() hideDisabled = false;\n\n  @Input() @HostBinding('class.ng-select-typeahead') typeahead: Subject<string>;\n  @Input() @HostBinding('class.ng-select-multiple') multiple = false;\n  @Input() @HostBinding('class.ng-select-taggable') addTag: boolean | AddTagFn = false;\n  @Input() @HostBinding('class.ng-select-searchable') searchable = true;\n  @Input() @HostBinding('class.ng-select-clearable') clearable = true;\n  @Input() @HostBinding('class.ng-select-opened') isOpen = false;\n\n  @Input()\n  get items() {\n    return this._items;\n  }\n\n  set items(value: any[]) {\n    let _value = value.concat();\n    this._itemsAreUsed = true;\n\n    if (!this.disableSort) {\n      _value = _value.sort((a, b) => {\n        return (a[this.bindLabel] || '').localeCompare(b[this.bindLabel] || '');\n      });\n    }\n\n    this._items = _value;\n  }\n\n  @Input()\n  get compareWith() {\n    return this._compareWith;\n  }\n\n  set compareWith(fn: CompareWithFn) {\n    if (!isFunction(fn)) {\n      throw Error('`compareWith` must be a function.');\n    }\n    this._compareWith = fn;\n  }\n\n  @Input()\n  get clearSearchOnAdd() {\n    return isDefined(this._clearSearchOnAdd) ? this._clearSearchOnAdd : this.closeOnSelect;\n  }\n\n  set clearSearchOnAdd(value) {\n    this._clearSearchOnAdd = value;\n  }\n\n  // output events\n  @Output('blur') blurEvent = new EventEmitter();\n  @Output('focus') focusEvent = new EventEmitter();\n  @Output('change') changeEvent = new EventEmitter();\n  @Output('open') openEvent = new EventEmitter();\n  @Output('close') closeEvent = new EventEmitter();\n  @Output('search') searchEvent = new EventEmitter<{ term: string; items: any[] }>();\n  @Output('clear') clearEvent = new EventEmitter();\n  @Output('add') addEvent = new EventEmitter();\n  @Output('remove') removeEvent = new EventEmitter();\n  @Output('scroll') scroll = new EventEmitter<{ start: number; end: number }>();\n  @Output('scrollToEnd') scrollToEnd = new EventEmitter();\n\n  // custom templates\n  @ContentChild(NgOptionTemplateDirective, { read: TemplateRef }) optionTemplate: TemplateRef<any>;\n  @ContentChild(NgOptgroupTemplateDirective, { read: TemplateRef }) optgroupTemplate: TemplateRef<any>;\n  @ContentChild(NgLabelTemplateDirective, { read: TemplateRef }) labelTemplate: TemplateRef<any>;\n  @ContentChild(NgMultiLabelTemplateDirective, { read: TemplateRef }) multiLabelTemplate: TemplateRef<any>;\n  @ContentChild(NgHeaderTemplateDirective, { read: TemplateRef }) headerTemplate: TemplateRef<any>;\n  @ContentChild(NgFooterTemplateDirective, { read: TemplateRef }) footerTemplate: TemplateRef<any>;\n  @ContentChild(NgNotFoundTemplateDirective, { read: TemplateRef }) notFoundTemplate: TemplateRef<any>;\n  @ContentChild(NgTypeToSearchTemplateDirective, { read: TemplateRef }) typeToSearchTemplate: TemplateRef<any>;\n  @ContentChild(NgLoadingTextTemplateDirective, { read: TemplateRef }) loadingTextTemplate: TemplateRef<any>;\n  @ContentChild(NgTagTemplateDirective, { read: TemplateRef }) tagTemplate: TemplateRef<any>;\n  @ContentChild(NgLoadingSpinnerTemplateDirective, { read: TemplateRef }) loadingSpinnerTemplate: TemplateRef<any>;\n\n  @ViewChild(forwardRef(() => NgDropdownPanelComponent)) dropdownPanel: NgDropdownPanelComponent;\n  @ViewChild('searchInput', { static: true }) searchInput: ElementRef<HTMLInputElement>;\n  @ContentChildren(NgOptionComponent, { descendants: true }) ngOptions: QueryList<NgOptionComponent>;\n\n\n  @HostBinding('class.ng-select') useDefaultClass = true;\n\n  @HostBinding('class.ng-select-disabled') get disabled() { return this.readonly || this._disabled };\n\n  @HostBinding('class.ng-select-filtered') get filtered() { return (!!this.searchTerm && this.searchable || this._isComposing) };\n\n  @HostBinding('class.ng-select-single') get single() { return !this.multiple };\n\n\n \n\n  itemsList: ItemsList;\n  viewPortItems: NgOption[] = [];\n  searchTerm: string = null;\n  dropdownId = newId();\n  element: HTMLElement;\n  focused: boolean;\n  @Input() escapeHTML = true;\n  \n\n  private _items = [];\n  private _itemsAreUsed: boolean;\n  private _defaultLabel = 'label';\n  private _primitive;\n  private _manualOpen: boolean;\n  private _disabled: boolean;\n  private _pressedKeys: string[] = [];\n  private _compareWith: CompareWithFn;\n  private _clearSearchOnAdd: boolean;\n  private _isComposing = false;\n\n  private get _editableSearchTerm(): boolean {\n    return this.editableSearchTerm && !this.multiple;\n  }\n\n  protected readonly _destroy$ = new Subject<void>();\n  protected readonly _keyPress$ = new Subject<string>();\n  protected _onChange = (_: any) => { };\n  private _onTouched = () => { };\n\n  clearItem = (item: any) => {\n    const option = this.selectedItems.find((x) => x.value === item);\n    this.unselect(option);\n  };\n\n  constructor(\n    @Attribute('class') public classes: string,\n    @Attribute('autofocus') private autoFocus: any,\n    config: NgSelectConfig,\n    @Inject(SELECTION_MODEL_FACTORY) newSelectionModel: SelectionModelFactory,\n    _elementRef: ElementRef<HTMLElement>,\n    protected _cd: ChangeDetectorRef,\n    private _console: ConsoleService\n  ) {\n    this._mergeGlobalConfig(config);\n    this.itemsList = new ItemsList(this, newSelectionModel());\n    this.element = _elementRef.nativeElement;\n  }\n\n  get selectedItems(): NgOption[] {\n    return this.itemsList.selectedItems;\n  }\n\n  get selectedValues() {\n    return this.selectedItems.map((x) => x.value);\n  }\n\n  get hasValue() {\n    return this.selectedItems.length > 0;\n  }\n\n  get currentPanelPosition(): any {\n    if (this.dropdownPanel) {\n      return this.dropdownPanel.currentPosition;\n    }\n    return undefined;\n  }\n\n  ngOnInit() {\n    this._handleKeyPresses();\n    this._setInputAttributes();\n  }\n\n  ngOnChanges(changes: SimpleChanges) {\n    if (changes.multiple) {\n      this.itemsList.clearSelected();\n    }\n    if (changes.items) {\n      this._setItems(changes.items.currentValue || []);\n    }\n    if (changes.isOpen) {\n      this._manualOpen = isDefined(changes.isOpen.currentValue);\n    }\n  }\n\n  ngAfterViewInit() {\n    if (!this._itemsAreUsed) {\n      this.escapeHTML = false;\n      this._setItemsFromNgOptions();\n    }\n\n    if (isDefined(this.autoFocus)) {\n      this.focus();\n    }\n  }\n\n  ngOnDestroy() {\n    this._destroy$.next();\n    this._destroy$.complete();\n  }\n\n  @HostListener('keydown', ['$event'])\n  handleKeyDown($event: KeyboardEvent) {\n    const keyCode = KeyCode[$event.which];\n    if (keyCode) {\n      if (this.keyDownFn($event) === false) {\n        return;\n      }\n      this.handleKeyCode($event);\n    } else if ($event.key && $event.key.length === 1) {\n      this._keyPress$.next($event.key.toLocaleLowerCase());\n    }\n  }\n\n  handleKeyCode($event: KeyboardEvent) {\n    switch ($event.which) {\n      case KeyCode.ArrowDown:\n        this._handleArrowDown($event);\n        break;\n      case KeyCode.ArrowUp:\n        this._handleArrowUp($event);\n        break;\n      case KeyCode.Space:\n        this._handleSpace($event);\n        break;\n      case KeyCode.Enter:\n        this._handleEnter($event);\n        break;\n      case KeyCode.Tab:\n        this._handleTab($event);\n        break;\n      case KeyCode.Esc:\n        this.close();\n        $event.preventDefault();\n        break;\n      case KeyCode.Backspace:\n        this._handleBackspace();\n        break;\n    }\n  }\n\n  handleMousedown($event: MouseEvent) {\n    const target = $event.target as HTMLElement;\n    if (target.tagName !== 'INPUT') {\n      $event.preventDefault();\n    }\n\n    if (target.classList.contains('ng-clear-wrapper')) {\n      this.handleClearClick();\n      return;\n    }\n\n    if (target.classList.contains('ng-arrow-wrapper')) {\n      this.handleArrowClick();\n      return;\n    }\n\n    if (target.classList.contains('ng-value-icon')) {\n      return;\n    }\n\n    if (!this.focused) {\n      this.focus();\n    }\n\n    if (this.searchable) {\n      this.open();\n    } else {\n      this.toggle();\n    }\n  }\n\n  handleArrowClick() {\n    if (this.isOpen) {\n      this.close();\n    } else {\n      this.open();\n    }\n  }\n\n  handleClearClick() {\n    if (this.hasValue) {\n      this.itemsList.clearSelected(true);\n      this._updateNgModel();\n    }\n    this._clearSearch();\n    this.focus();\n    this.clearEvent.emit();\n\n    this._onSelectionChanged();\n  }\n\n  clearModel() {\n    if (!this.clearable) {\n      return;\n    }\n    this.itemsList.clearSelected();\n    this._updateNgModel();\n  }\n\n  writeValue(value: any | any[]): void {\n    this.itemsList.clearSelected();\n    this._handleWriteValue(value);\n    this._cd.markForCheck();\n  }\n\n  registerOnChange(fn: any): void {\n    this._onChange = fn;\n  }\n\n  registerOnTouched(fn: any): void {\n    this._onTouched = fn;\n  }\n\n  setDisabledState(state: boolean): void {\n    this._disabled = state;\n    this._cd.markForCheck();\n  }\n\n  toggle() {\n    if (!this.isOpen) {\n      this.open();\n    } else {\n      this.close();\n    }\n  }\n\n  open(escapeFocus?) {\n    if (this.disabled || this.isOpen || this.itemsList.maxItemsSelected || this._manualOpen) {\n      return;\n    }\n\n    if (!this._isTypeahead && !this.addTag && this.itemsList.noItemsToSelect) {\n      return;\n    }\n\n    this.isOpen = true;\n    this.itemsList.markSelectedOrDefault(this.markFirst);\n    this.openEvent.emit();\n    if (!this.searchTerm && !escapeFocus) {\n      this.focus();\n    }\n    this.detectChanges();\n  }\n\n  close() {\n    if (!this.isOpen || this._manualOpen) {\n      return;\n    }\n    this.isOpen = false;\n    this._isComposing = false;\n    if (!this._editableSearchTerm) {\n      this._clearSearch();\n    } else {\n      this.itemsList.resetFilteredItems();\n    }\n    this.itemsList.unmarkItem();\n    this._onTouched();\n    this.closeEvent.emit();\n    this._cd.markForCheck();\n  }\n\n  toggleItem(item: NgOption) {\n    if (!item || item.disabled || this.disabled) {\n      return;\n    }\n\n    if (this.multiple && item.selected) {\n      this.unselect(item);\n    } else {\n      this.select(item);\n    }\n\n    if (this._editableSearchTerm) {\n      this._setSearchTermFromItems();\n    }\n\n    this._onSelectionChanged();\n  }\n\n  select(item: NgOption) {\n    if (!item.selected) {\n      this.itemsList.select(item);\n      if (this.clearSearchOnAdd && !this._editableSearchTerm) {\n        this._clearSearch();\n      }\n\n      this._updateNgModel();\n      if (this.multiple) {\n        this.addEvent.emit(item.value);\n      }\n    }\n\n    if (this.closeOnSelect || this.itemsList.noItemsToSelect) {\n      this.close();\n    }\n  }\n\n  focus() {\n    var scrollTop = window.document.body.scrollTop; // save position\n    this.searchInput.nativeElement.focus({ preventScroll: true });\n    window.document.body.scrollTop = scrollTop;\n  }\n\n  blur() {\n    this.searchInput.nativeElement.blur();\n  }\n\n  unselect(item: NgOption) {\n    if (!item) {\n      return;\n    }\n\n    this.itemsList.unselect(item);\n    this.focus();\n    this._updateNgModel();\n    this.removeEvent.emit(item);\n  }\n\n  selectTag() {\n    let tag;\n    if (isFunction(this.addTag)) {\n      tag = (<AddTagFn>this.addTag)(this.searchTerm);\n    } else {\n      tag = this._primitive ? this.searchTerm : { [this.bindLabel]: this.searchTerm };\n    }\n\n    const handleTag = (item) => (this._isTypeahead || !this.isOpen ? this.itemsList.mapItem(item, null) : this.itemsList.addItem(item));\n    if (isPromise(tag)) {\n      tag.then((item) => this.select(handleTag(item))).catch(() => { });\n    } else if (tag) {\n      this.select(handleTag(tag));\n    }\n  }\n\n  showClear() {\n    return this.clearable && (this.hasValue || this.searchTerm) && !this.disabled;\n  }\n\n  trackByOption = (_: number, item: NgOption) => {\n    if (this.trackByFn) {\n      return this.trackByFn(item.value);\n    }\n\n    return item;\n  };\n\n  get showAddTag() {\n    if (!this._validTerm) {\n      return false;\n    }\n\n    const term = this.searchTerm.toLowerCase().trim();\n    return (\n      this.addTag &&\n      !this.itemsList.filteredItems.some((x) => x.label.toLowerCase() === term) &&\n      ((!this.hideSelected && this.isOpen) || !this.selectedItems.some((x) => x.label.toLowerCase() === term)) &&\n      !this.loading\n    );\n  }\n\n  showNoItemsFound() {\n    const empty = this.itemsList.filteredItems.length === 0;\n    return (\n      ((empty && !this._isTypeahead && !this.loading) || (empty && this._isTypeahead && this._validTerm && !this.loading)) &&\n      !this.showAddTag\n    );\n  }\n\n  showTypeToSearch() {\n    const empty = this.itemsList.filteredItems.length === 0;\n    return empty && this._isTypeahead && !this._validTerm && !this.loading;\n  }\n\n  onCompositionStart() {\n    this._isComposing = true;\n  }\n\n  onCompositionEnd(term: string) {\n    this._isComposing = false;\n    if (this.searchWhileComposing) {\n      return;\n    }\n\n    this.filter(term);\n  }\n\n  filter(term: string) {\n    if (this._isComposing && !this.searchWhileComposing) {\n      return;\n    }\n\n    this.searchTerm = term;\n    if (this._isTypeahead && (this._validTerm || this.minTermLength === 0)) {\n      this.typeahead.next(term);\n    }\n\n    if (!this._isTypeahead) {\n      this.itemsList.filter(this.searchTerm);\n      if (this.isOpen) {\n        this.itemsList.markSelectedOrDefault(this.markFirst);\n      }\n    }\n\n    this.searchEvent.emit({ term, items: this.itemsList.filteredItems.map((x) => x.value) });\n    this.open();\n  }\n\n  onInputFocus($event) {\n    if (this.focused) {\n      return;\n    }\n\n    if (this._editableSearchTerm) {\n      this._setSearchTermFromItems();\n    }\n\n    this.element.classList.add('ng-select-focused');\n    this.focusEvent.emit($event);\n    this.focused = true;\n  }\n\n  onInputBlur($event) {\n    this.element.classList.remove('ng-select-focused');\n    this.blurEvent.emit($event);\n    if (!this.isOpen && !this.disabled) {\n      this._onTouched();\n    }\n    if (this._editableSearchTerm) {\n      this._setSearchTermFromItems();\n    }\n    this.focused = false;\n  }\n\n  onItemHover(item: NgOption) {\n    if (item.disabled) {\n      return;\n    }\n    this.itemsList.markItem(item);\n  }\n\n  detectChanges() {\n    if (!(<any>this._cd).destroyed) {\n      this._cd.detectChanges();\n    }\n  }\n\n  private _setSearchTermFromItems() {\n    const selected = this.selectedItems && this.selectedItems[0];\n    this.searchTerm = (selected && selected.label) || null;\n  }\n\n  private _setItems(items: any[]) {\n    const firstItem = items[0];\n    this.bindLabel = this.bindLabel || this._defaultLabel;\n    this._primitive = isDefined(firstItem) ? !isObject(firstItem) : this._primitive || this.bindLabel === this._defaultLabel;\n    if (!this.disableSort) {\n      items = items.sort((a, b) => {\n        return (a[this.bindLabel] || '').localeCompare(b[this.bindLabel] || '');\n      });\n    }\n    this.itemsList.setItems(items);\n    if (items.length > 0 && this.hasValue) {\n      this.itemsList.mapSelectedItems();\n    }\n    if (this.isOpen && isDefined(this.searchTerm) && !this._isTypeahead) {\n      this.itemsList.filter(this.searchTerm);\n    }\n    if (this._isTypeahead || this.isOpen) {\n      this.itemsList.markSelectedOrDefault(this.markFirst);\n    }\n  }\n\n  private _setItemsFromNgOptions() {\n    const mapNgOptions = (options: QueryList<NgOptionComponent>) => {\n      this.items = options.map((option) => ({\n        $ngOptionValue: option.value,\n        $ngOptionLabel: option.elementRef.nativeElement.innerHTML,\n        disabled: option.disabled,\n      }));\n      this.itemsList.setItems(this.items);\n      if (this.hasValue) {\n        this.itemsList.mapSelectedItems();\n      }\n      this.detectChanges();\n    };\n\n    const handleOptionChange = () => {\n      const changedOrDestroyed = merge(this.ngOptions.changes, this._destroy$);\n      merge(...this.ngOptions.map((option) => option.stateChange$))\n        .pipe(takeUntil(changedOrDestroyed))\n        .subscribe((option) => {\n          const item = this.itemsList.findItem(option.value);\n          item.disabled = option.disabled;\n          item.label = option.label || item.label;\n          this._cd.detectChanges();\n        });\n    };\n\n    this.ngOptions.changes.pipe(startWith(this.ngOptions), takeUntil(this._destroy$)).subscribe((options) => {\n      this.bindLabel = this._defaultLabel;\n      mapNgOptions(options);\n      handleOptionChange();\n    });\n  }\n\n  protected _isValidWriteValue(value: any): boolean {\n    if (!isDefined(value) || (this.multiple && value === '') || (Array.isArray(value) && value.length === 0)) {\n      return false;\n    }\n\n    const validateBinding = (item: any): boolean => {\n      if (!isDefined(this.compareWith) && isObject(item) && this.bindValue) {\n        this._console.warn(\n          `Setting object(${JSON.stringify(item)}) as your model with bindValue is not allowed unless [compareWith] is used.`\n        );\n        return false;\n      }\n      return true;\n    };\n\n    if (this.multiple) {\n      if (!Array.isArray(value)) {\n        this._console.warn('Multiple select ngModel should be array.');\n        return false;\n      }\n      return value.every((item) => validateBinding(item));\n    } else {\n      return validateBinding(value);\n    }\n  }\n\n  protected _handleWriteValue(ngModel: any | any[]) {\n    if (!this._isValidWriteValue(ngModel)) {\n      return;\n    }\n\n    const select = (val: any) => {\n      let item = this.itemsList.findItem(val);\n      if (item) {\n        this.itemsList.select(item);\n      } else {\n        const isValObject = isObject(val);\n        const isPrimitive = !isValObject && !this.bindValue;\n        if (isValObject || isPrimitive) {\n          this.itemsList.select(this.itemsList.mapItem(val, null));\n        } else if (this.bindValue) {\n          item = {\n            [this.bindLabel]: null,\n            [this.bindValue]: val,\n          };\n          this.itemsList.select(this.itemsList.mapItem(item, null));\n        }\n      }\n    };\n\n    if (this.multiple) {\n      (<any[]>ngModel).forEach((item) => select(item));\n    } else {\n      select(ngModel);\n    }\n  }\n\n  private _handleKeyPresses() {\n    if (this.searchable) {\n      return;\n    }\n\n    this._keyPress$\n      .pipe(\n        takeUntil(this._destroy$),\n        tap((letter) => this._pressedKeys.push(letter)),\n        debounceTime(200),\n        filter(() => this._pressedKeys.length > 0),\n        map(() => this._pressedKeys.join(''))\n      )\n      .subscribe((term) => {\n        const item = this.itemsList.findByLabel(term);\n        if (item) {\n          if (this.isOpen) {\n            this.itemsList.markItem(item);\n            this._cd.markForCheck();\n          } else {\n            this.select(item);\n          }\n        }\n        this._pressedKeys = [];\n      });\n  }\n\n  private _setInputAttributes() {\n    const input = this.searchInput.nativeElement;\n    const attributes = {\n      type: 'text',\n      autocorrect: 'off',\n      autocapitalize: 'off',\n      autocomplete: this.labelForId ? 'off' : this.dropdownId,\n      ...this.inputAttrs,\n    };\n\n    for (const key of Object.keys(attributes)) {\n      input.setAttribute(key, attributes[key]);\n    }\n  }\n\n  protected _updateNgModel() {\n    const model = [];\n    for (const item of this.selectedItems) {\n      if (this.bindValue) {\n        let value = null;\n        if (item.children) {\n          const groupKey = this.groupValue ? this.bindValue : <string>this.groupBy;\n          value = item.value[groupKey || <string>this.groupBy];\n        } else {\n          value = this.itemsList.resolveNested(item.value, this.bindValue);\n        }\n        model.push(value);\n      } else {\n        model.push(item.value);\n      }\n    }\n\n    const selected = this.selectedItems.map((x) => x.value);\n    if (this.multiple) {\n      this._onChange(model);\n      this.changeEvent.emit(selected);\n    } else {\n      this._onChange(isDefined(model[0]) ? model[0] : null);\n      this.changeEvent.emit(selected[0]);\n    }\n\n    this._cd.markForCheck();\n  }\n\n  private _clearSearch() {\n    if (!this.searchTerm) {\n      return;\n    }\n\n    this._changeSearch(null);\n    this.itemsList.resetFilteredItems();\n  }\n\n  private _changeSearch(searchTerm: string) {\n    this.searchTerm = searchTerm;\n    if (this._isTypeahead) {\n      this.typeahead.next(searchTerm);\n    }\n  }\n\n  private _scrollToMarked() {\n    if (!this.isOpen || !this.dropdownPanel) {\n      return;\n    }\n    this.dropdownPanel.scrollTo(this.itemsList.markedItem);\n  }\n\n  private _scrollToTag() {\n    if (!this.isOpen || !this.dropdownPanel) {\n      return;\n    }\n    this.dropdownPanel.scrollToTag();\n  }\n\n  private _onSelectionChanged() {\n    if (this.isOpen && this.multiple && this.appendTo) {\n      // Make sure items are rendered.\n      this._cd.detectChanges();\n      this.dropdownPanel.adjustPosition();\n    }\n  }\n\n  private _handleTab($event: KeyboardEvent) {\n    if (this.isOpen === false && !this.addTag) {\n      return;\n    }\n\n    if (this.selectOnTab) {\n      if (this.itemsList.markedItem) {\n        this.toggleItem(this.itemsList.markedItem);\n        $event.preventDefault();\n      } else if (this.showAddTag) {\n        this.selectTag();\n        $event.preventDefault();\n      } else {\n        this.close();\n      }\n    } else {\n      this.close();\n    }\n  }\n\n  private _handleEnter($event: KeyboardEvent) {\n    if (this.isOpen || this._manualOpen) {\n      if (this.itemsList.markedItem) {\n        this.toggleItem(this.itemsList.markedItem);\n      } else if (this.showAddTag) {\n        this.selectTag();\n      }\n    } else if (this.openOnEnter) {\n      this.open();\n    } else {\n      return;\n    }\n\n    $event.preventDefault();\n  }\n\n  private _handleSpace($event: KeyboardEvent) {\n    if (this.isOpen || this._manualOpen) {\n      return;\n    }\n    this.open();\n    $event.preventDefault();\n  }\n\n  private _handleArrowDown($event: KeyboardEvent) {\n    if (this._nextItemIsTag(+1)) {\n      this.itemsList.unmarkItem();\n      this._scrollToTag();\n    } else {\n      this.itemsList.markNextItem();\n      this._scrollToMarked();\n    }\n    this.open();\n    $event.preventDefault();\n  }\n\n  private _handleArrowUp($event: KeyboardEvent) {\n    if (!this.isOpen) {\n      return;\n    }\n\n    if (this._nextItemIsTag(-1)) {\n      this.itemsList.unmarkItem();\n      this._scrollToTag();\n    } else {\n      this.itemsList.markPreviousItem();\n      this._scrollToMarked();\n    }\n    $event.preventDefault();\n  }\n\n  private _nextItemIsTag(nextStep: number): boolean {\n    const nextIndex = this.itemsList.markedIndex + nextStep;\n    return (\n      this.addTag && this.searchTerm && this.itemsList.markedItem && (nextIndex < 0 || nextIndex === this.itemsList.filteredItems.length)\n    );\n  }\n\n  private _handleBackspace() {\n    if (this.searchTerm || !this.clearable || !this.clearOnBackspace || !this.hasValue) {\n      return;\n    }\n\n    if (this.multiple) {\n      this.unselect(this.itemsList.lastSelectedItem);\n    } else {\n      this.clearModel();\n    }\n  }\n\n  private get _isTypeahead() {\n    return this.typeahead && this.typeahead.observers.length > 0;\n  }\n\n  private get _validTerm() {\n    const term = this.searchTerm && this.searchTerm.trim();\n    return term && term.length >= this.minTermLength;\n  }\n\n  private _mergeGlobalConfig(config: NgSelectConfig) {\n    this.placeholder = this.placeholder || config.placeholder;\n    this.notFoundText = this.notFoundText || config.notFoundText;\n    this.typeToSearchText = this.typeToSearchText || config.typeToSearchText;\n    this.addTagText = this.addTagText || config.addTagText;\n    this.loadingText = this.loadingText || config.loadingText;\n    this.clearAllText = this.clearAllText || config.clearAllText;\n    this.virtualScroll = isDefined(this.virtualScroll)\n      ? this.virtualScroll\n      : isDefined(config.disableVirtualScroll)\n        ? !config.disableVirtualScroll\n        : false;\n    this.openOnEnter = isDefined(this.openOnEnter) ? this.openOnEnter : config.openOnEnter;\n    this.appendTo = this.appendTo || config.appendTo;\n    this.bindValue = this.bindValue || config.bindValue;\n    this.appearance = this.appearance || config.appearance;\n  }\n}\n","<div\n    (mousedown)=\"handleMousedown($event)\"\n    [class.ng-appearance-outline]=\"appearance === 'outline'\"\n    [class.ng-has-value]=\"hasValue\"\n    class=\"ng-select-container\">\n\n    <div class=\"ng-value-container\">\n        <div class=\"ng-placeholder\">{{placeholder}}</div>\n\n        <ng-container *ngIf=\"!multiLabelTemplate && selectedItems.length > 0\">\n            <div [class.ng-value-disabled]=\"item.disabled\" class=\"ng-value\" *ngFor=\"let item of selectedItems; trackBy: trackByOption\">\n                <ng-template #defaultLabelTemplate>\n                    <span class=\"ng-value-icon left\" (click)=\"unselect(item);\" aria-hidden=\"true\">×</span>\n                    <span class=\"ng-value-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n                </ng-template>\n\n                <ng-template\n                    [ngTemplateOutlet]=\"labelTemplate || defaultLabelTemplate\"\n                    [ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n                </ng-template>\n            </div>\n        </ng-container>\n\n        <ng-template *ngIf=\"multiLabelTemplate && selectedValues.length > 0\"\n                [ngTemplateOutlet]=\"multiLabelTemplate\"\n                [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n        </ng-template>\n\n        <div class=\"ng-input\">\n            <input #searchInput\n                   [attr.id]=\"labelForId\"\n                   [attr.tabindex]=\"tabIndex\"\n                   [readOnly]=\"!searchable || itemsList.maxItemsSelected\"\n                   [disabled]=\"disabled\"\n                   [value]=\"searchTerm ? searchTerm : ''\"\n                   (input)=\"filter(searchInput.value)\"\n                   (compositionstart)=\"onCompositionStart()\"\n                   (compositionend)=\"onCompositionEnd(searchInput.value)\"\n                   (focus)=\"onInputFocus($event)\"\n                   (blur)=\"onInputBlur($event)\"\n                   (change)=\"$event.stopPropagation()\"\n                   role=\"combobox\"\n                   [attr.aria-expanded]=\"isOpen\"\n                   [attr.aria-owns]=\"isOpen ? dropdownId : null\"\n                   [attr.aria-activedescendant]=\"isOpen ? itemsList?.markedItem?.htmlId : null\">\n        </div>\n    </div>\n\n    <ng-container *ngIf=\"loading\">\n        <ng-template #defaultLoadingSpinnerTemplate>\n            <div class=\"ng-spinner-loader\"></div>\n        </ng-template>\n\n        <ng-template\n            [ngTemplateOutlet]=\"loadingSpinnerTemplate || defaultLoadingSpinnerTemplate\">\n        </ng-template>\n    </ng-container>\n\n    <span *ngIf=\"showClear()\" class=\"ng-clear-wrapper\" title=\"{{clearAllText}}\">\n        <span class=\"ng-clear\" aria-hidden=\"true\">×</span>\n    </span>\n\n    <span class=\"ng-arrow-wrapper\">\n        <span class=\"ng-arrow\"></span>\n    </span>\n</div>\n\n<ng-dropdown-panel *ngIf=\"isOpen\"\n                   class=\"ng-dropdown-panel\"\n                   [virtualScroll]=\"virtualScroll\"\n                   [bufferAmount]=\"bufferAmount\"\n                   [appendTo]=\"appendTo\"\n                   [context]=\"this\"\n                   [position]=\"dropdownPosition\"\n                   [headerTemplate]=\"headerTemplate\"\n                   [footerTemplate]=\"footerTemplate\"\n                   [filterValue]=\"searchTerm\"\n                   [items]=\"itemsList.filteredItems\"\n                   [markedItem]=\"itemsList.markedItem\"\n                   (update)=\"viewPortItems = $event\"\n                   (scroll)=\"scroll.emit($event)\"\n                   (scrollToEnd)=\"scrollToEnd.emit($event)\"\n                   (outsideClick)=\"close()\"\n                   [class.ng-select-multiple]=\"multiple\"\n                   [ngClass]=\"appendTo ? classes : null\"\n                   [id]=\"dropdownId\">\n\n    <ng-container>\n        <div class=\"ng-option\" [attr.role]=\"item.children ? 'group' : 'option'\" (click)=\"toggleItem(item)\" (mouseover)=\"onItemHover(item)\"\n                *ngFor=\"let item of viewPortItems; trackBy: trackByOption\"\n                [class.ng-option-disabled]=\"item.disabled\"\n                [class.ng-option-selected]=\"item.selected\"\n                [class.ng-optgroup]=\"item.children\"\n                [class.ng-option]=\"!item.children\"\n                [class.ng-option-child]=\"!!item.parent\"\n                [class.ng-option-marked]=\"item === itemsList.markedItem\"\n                [attr.aria-selected]=\"item.selected\"\n                [attr.id]=\"item?.htmlId\">\n\n            <ng-template #defaultOptionTemplate>\n                <span class=\"ng-option-label\" [ngItemLabel]=\"item.label\" [escape]=\"escapeHTML\"></span>\n            </ng-template>\n\n            <ng-template\n                [ngTemplateOutlet]=\"item.children ? (optgroupTemplate || defaultOptionTemplate) : (optionTemplate || defaultOptionTemplate)\"\n                [ngTemplateOutletContext]=\"{ item: item.value, item$:item, index: item.index, searchTerm: searchTerm }\">\n            </ng-template>\n        </div>\n\n        <div class=\"ng-option\" [class.ng-option-marked]=\"!itemsList.markedItem\" (mouseover)=\"itemsList.unmarkItem()\" role=\"option\" (click)=\"selectTag()\" *ngIf=\"showAddTag\">\n            <ng-template #defaultTagTemplate>\n                <span><span class=\"ng-tag-label\">{{addTagText}}</span>\"{{searchTerm}}\"</span>\n            </ng-template>\n\n            <ng-template\n                [ngTemplateOutlet]=\"tagTemplate || defaultTagTemplate\"\n                [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n            </ng-template>\n        </div>\n    </ng-container>\n\n    <ng-container *ngIf=\"showNoItemsFound()\">\n        <ng-template #defaultNotFoundTemplate>\n            <div class=\"ng-option ng-option-disabled\">{{notFoundText}}</div>\n        </ng-template>\n\n        <ng-template\n            [ngTemplateOutlet]=\"notFoundTemplate || defaultNotFoundTemplate\"\n            [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n        </ng-template>\n    </ng-container>\n\n    <ng-container *ngIf=\"showTypeToSearch()\">\n        <ng-template #defaultTypeToSearchTemplate>\n            <div class=\"ng-option ng-option-disabled\">{{typeToSearchText}}</div>\n        </ng-template>\n\n        <ng-template\n            [ngTemplateOutlet]=\"typeToSearchTemplate || defaultTypeToSearchTemplate\">\n        </ng-template>\n    </ng-container>\n\n    <ng-container *ngIf=\"loading && itemsList.filteredItems.length === 0\">\n        <ng-template #defaultLoadingTextTemplate>\n            <div class=\"ng-option ng-option-disabled\">{{loadingText}}</div>\n        </ng-template>\n\n        <ng-template\n            [ngTemplateOutlet]=\"loadingTextTemplate || defaultLoadingTextTemplate\"\n            [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n        </ng-template>\n    </ng-container>\n\n</ng-dropdown-panel>\n","import {\n  Attribute,\n  ChangeDetectionStrategy,\n  ChangeDetectorRef,\n  Component,\n  ElementRef,\n  EventEmitter,\n  forwardRef,\n  HostListener,\n  Inject,\n  Input,\n  Output,\n  ViewChild,\n  ViewEncapsulation,\n} from '@angular/core';\nimport { NG_VALUE_ACCESSOR } from '@angular/forms';\nimport { takeUntil, tap } from 'rxjs/operators';\nimport { NgSelectConfig } from './config.service';\nimport { ConsoleService } from './console.service';\nimport { NgDropdownPanelService } from './ng-dropdown-panel.service';\nimport { DefaultSelectionModelExtFactory, ItemsListExt } from './ng-select-ext-model';\nimport { NgSelectComponent, SELECTION_MODEL_FACTORY } from './ng-select.component';\nimport { NgOption } from './ng-select.types';\nimport { SelectionModelFactory } from './selection-model';\n\nimport { isDefined, isObject } from './value-utils';\n\n@Component({\n  selector: 'ng-select-ext',\n  templateUrl: './ng-select-ext.component.html',\n  styleUrls: ['./ng-select-ext.component.scss'],\n  providers: [\n    {\n      provide: NG_VALUE_ACCESSOR,\n      useExisting: forwardRef(() => NgSelectExtComponent),\n      multi: true,\n    },\n    {\n      provide: SELECTION_MODEL_FACTORY,\n      useValue: DefaultSelectionModelExtFactory,\n    },\n    NgDropdownPanelService,\n  ],\n  encapsulation: ViewEncapsulation.None,\n  changeDetection: ChangeDetectionStrategy.OnPush,\n\n})\nexport class NgSelectExtComponent extends NgSelectComponent {\n  // integrated select all header. Will be replaced if header template is used. Only available if fastSelection is enabled\n  @Input() displaySelectAll = true;\n  // number of selections allowed, otherwise show  n / Total\n  @Input() displayLimit = 3;\n  // allow excluded items as value model if total unselected is lower than selected\n  @Input() isExclusive = true;\n  // ignore isExclusive and will use selected as value model\n  @Input() exclusionTreshold = 100;\n  // directly manipulate selected property of item items and set selection based on selected items. It will ignore\n  @Input() fastSelection = true;\n  // integrated cancel/ok buttons as footer. Only trigger model update if 'OK' is clicked or clicked outside\n  @Input() displayActionButtons = true;\n  // change layout to mobile\n  @Input() searchPlaceholder = ''\n  @Input() isMobile = false;\n  // data change event will only emit if selection changed.\n  @Input() emitDataChange = true;\n  @Input() hideDisabled = true;\n  @Input() bindLabel = 'name';\n  @Input() bindValue = 'id';\n\n  @Output('dataChange') dataChangeEvent = new EventEmitter();\n\n  selected_all = false;\n  commit_changes = true;\n  initial_state: any;\n\n\n  itemsList: ItemsListExt;\n  __console: ConsoleService;\n\n\n  @HostListener('window:resize', ['$event'])\n  onResize(event) {\n    if (this.isOpen) {\n      this.dropdownPanel.adjustPosition();\n      this.dropdownPanel._updateXPosition();\n    }\n  }\n  constructor(\n    @Attribute('class') classes: string,\n    config: NgSelectConfig,\n    @Attribute('autofocus') autoFocus: any,\n    @Inject(SELECTION_MODEL_FACTORY)\n    newSelectionModel: SelectionModelFactory,\n    _elementRef: ElementRef<HTMLElement>,\n    _cd: ChangeDetectorRef,\n    _console: ConsoleService\n  ) {\n    super(classes, autoFocus, config, newSelectionModel, _elementRef, _cd, _console);\n    this.__console = _console;\n    this.itemsList = new ItemsListExt(this, newSelectionModel());\n    this.searchable = false;\n    this.clearOnBackspace = false;\n    this.virtualScroll = true;\n    this.appendTo = 'body';\n    this.hideDisabled = true;\n    this.disableSort = false;\n  }\n\n  ngOnInit() {\n    super.ngOnInit();\n    if (!this.multiple) {\n      this.displaySelectAll = false;\n      this.displayActionButtons = false;\n    } else {\n      this.closeOnSelect = false;\n    }\n    if (!this.fastSelection) {\n      this.displaySelectAll = false;\n    }\n\n    this._keyPress$.pipe(takeUntil(this._destroy$)).subscribe((term) => {\n      if (!this.isOpen) {\n        this.open();\n      }\n    });\n  }\n\n  selectAll($event) {\n    const selected = $event.target.checked;\n    this.itemsList.filteredItems.forEach((item) => {\n      item.selected = selected;\n    });\n    this.itemsList.selectedItems = this.itemsList.items.filter(({ selected }) => selected);\n  }\n\n  open() {\n    super.open();\n\n    if (this.disabled) {\n      return;\n    }\n\n\n    if (this.displayActionButtons) {\n      this.commit_changes = false;\n    }\n  }\n\n  close() {\n    super.close();\n  \n    if (this.displayActionButtons) {\n      if (!this.commit_changes) {\n        this._handleWriteValue(this.initial_state);\n      } else {\n        this._updateNgModel();\n      }\n    }\n  }\n\n  toggleItem(item: NgOption) {\n    super.toggleItem(item);\n    this.selected_all = this.itemsList.filteredItems.length === this.itemsList.filteredItems.filter(({ selected }) => selected).length;\n  }\n\n  _updateNgModel() {\n    if (!this.commit_changes && this.displayActionButtons && this.isOpen) {\n      return;\n    }\n\n    let model: any = [];\n    if (this.fastSelection) {\n      if (this.bindValue) {\n        model = this.selectedItems.map(({ value }) => value[this.bindValue]);\n      } else {\n        model = this.selectedItems.map(({ value }) => value);\n      }\n    } else {\n      for (const item of this.selectedItems) {\n        if (this.bindValue) {\n          let value = null;\n          if (item.children) {\n            const groupKey = this.groupValue ? this.bindValue : <string>this.groupBy;\n            value = item.value[groupKey || <string>this.groupBy];\n          } else {\n            value = this.itemsList.resolveNested(item.value, this.bindValue);\n          }\n          model.push(value);\n        } else {\n          model.push(item.value);\n        }\n      }\n    }\n    model = model.sort();\n    const selected = this.selectedItems.map((x) => x.value);\n\n    if (this.isExclusive) {\n      if (\n        this.selectedItems.length > this.exclusionTreshold &&\n        this.itemsList.items.length - this.selectedItems.length < this.selectedItems.length\n      ) {\n        let unselected_items = [];\n        if (this.bindValue) {\n          unselected_items = this.itemsList.items.filter(({ selected }) => !selected).map(({ value }) => value[this.bindValue]);\n        } else {\n          unselected_items = this.itemsList.items.filter(({ selected }) => !selected).map(({ value }) => value);\n        }\n\n        model = {\n          exclude: 1,\n          items: unselected_items.sort(),\n        };\n      }\n    }\n\n    if (this.multiple) {\n      this._onChange(model);\n      this.changeEvent.emit(selected);\n    } else {\n      this._onChange(isDefined(model[0]) ? model[0] : null);\n      this.changeEvent.emit(selected[0]);\n    }\n    if (this.emitDataChange) {\n      const current_selection_str = JSON.stringify(model);\n      const initial_selection_str = JSON.stringify(this.initial_state);\n      if (current_selection_str !== initial_selection_str) {\n        this.dataChangeEvent.emit(selected);\n      }\n    }\n\n    this.initial_state = model;\n    this._cd.markForCheck();\n  }\n  protected _isValidWriteValueExt(value: any): boolean {\n    if (this.multiple) {\n      if (!Array.isArray(value) && value.items.length) {\n        return this._isValidWriteValue(value.items);\n      }\n      if (!Array.isArray(value) && value.items.length === 0) {\n        return true;\n      }\n    }\n    return this._isValidWriteValue(value);\n  }\n\n  writeValue(value: any | any[]): void {\n    this.itemsList.clearSelected();\n    this._handleWriteValue(value);\n    this.initial_state = value;\n    this._cd.markForCheck();\n  }\n\n  protected _handleWriteValue(ngModel: any | any[]) {\n    if (ngModel == undefined || !this._isValidWriteValueExt(ngModel)) {\n      return;\n    }\n\n    const select = (val: any) => {\n      let item = this.itemsList.findItem(val);\n      if (item) {\n        this.itemsList.select(item);\n      } else {\n        const isValObject = isObject(val);\n        const isPrimitive = !isValObject && !this.bindValue;\n        if (isValObject || isPrimitive) {\n          this.itemsList.select(this.itemsList.mapItem(val, null));\n        } else if (this.bindValue) {\n          item = {\n            [this.bindLabel]: null,\n            [this.bindValue]: val,\n          };\n          this.itemsList.select(this.itemsList.mapItem(item, null));\n        }\n      }\n    };\n\n    if (this.fastSelection && this.multiple) {\n      let exclude = 0;\n      let items: any[] = ngModel;\n      if (!Array.isArray(ngModel)) {\n        items = ngModel.items;\n        exclude = ngModel.exclude;\n      }\n      if (this.bindValue) {\n        this.itemsList.items.forEach((item) => {\n          if (exclude) {\n            item.selected = !items.includes(item.value[this.bindValue]);\n          } else {\n            item.selected = items.includes(item.value[this.bindValue]);\n          }\n        });\n      } else {\n        this.itemsList.items.forEach((item) => {\n          if (exclude) {\n            item.selected = !items.includes(item.value);\n          } else {\n            item.selected = items.includes(item.value);\n          }\n        });\n      }\n\n      this.itemsList.selectedItems = this.itemsList.selectedItems = this.itemsList.items.filter(({ selected }) => selected);\n    } else if (this.multiple) {\n      (<any[]>ngModel).forEach((item) => select(item));\n    } else {\n      select(ngModel);\n    }\n  }\n}\n","<div (mousedown)=\"handleMousedown($event)\"\n     [class.ng-appearance-outline]=\"appearance === 'outline'\"\n     [class.ng-has-value]=\"hasValue\"\n     class=\"ng-select-container\">\n  <div class=\"ng-value-container\">\n    <div class=\"ng-placeholder\">{{ placeholder }}</div>\n\n    <ng-container\n                  *ngIf=\"!multiLabelTemplate && selectedItems.length > 0 && (displayLimit >= selectedItems.length || !multiple)\">\n      <div [class.ng-value-disabled]=\"item.disabled\"\n           class=\"ng-value\"\n           *ngFor=\"let item of selectedItems; trackBy: trackByOption\">\n        <ng-template #defaultLabelTemplate>\n          <span class=\"ng-value-icon left\"\n                (click)=\"unselect(item)\"\n                aria-hidden=\"true\">×</span>\n          <span class=\"ng-value-label\"\n                [title]=\"item.label\"\n                [ngItemLabel]=\"item.label\"\n                [escape]=\"escapeHTML\"></span>\n        </ng-template>\n        <ng-template [ngTemplateOutlet]=\"labelTemplate || defaultLabelTemplate\"\n                     [ngTemplateOutletContext]=\"{ item: item.value, clear: clearItem, label: item.label }\">\n        </ng-template>\n      </div>\n    </ng-container>\n    <ng-container\n                  *ngIf=\"!multiLabelTemplate && selectedItems.length > 0 && displayLimit < selectedItems.length && multiple\">\n      <span class=\"ng-value-label\">{{ selectedItems.length }} / {{ itemsList.items.length }} selected</span>\n    </ng-container>\n    <ng-template *ngIf=\"multiLabelTemplate && selectedValues.length > 0\"\n                 [ngTemplateOutlet]=\"multiLabelTemplate\"\n                 [ngTemplateOutletContext]=\"{ items: selectedValues, clear: clearItem }\">\n    </ng-template>\n\n    <div class=\"ng-input\">\n      <input #searchInput\n             [attr.id]=\"labelForId\"\n             [attr.tabindex]=\"tabIndex\"\n             [readOnly]=\"!searchable || itemsList.maxItemsSelected\"\n             [disabled]=\"disabled\"\n             [value]=\"searchTerm ? searchTerm : ''\"\n             (input)=\"filter(searchInput.value)\"\n             (compositionstart)=\"onCompositionStart()\"\n             (compositionend)=\"onCompositionEnd(searchInput.value)\"\n             (focus)=\"onInputFocus($event)\"\n             (blur)=\"onInputBlur($event)\"\n             (change)=\"$event.stopPropagation()\"\n             role=\"combobox\"\n             [attr.aria-expanded]=\"isOpen\"\n             [attr.aria-owns]=\"isOpen ? dropdownId : null\"\n             [attr.aria-activedescendant]=\"isOpen ? itemsList?.markedItem?.htmlId : null\" />\n    </div>\n  </div>\n\n  <ng-container *ngIf=\"loading\">\n    <ng-template #defaultLoadingSpinnerTemplate>\n      <div class=\"ng-spinner-loader\"></div>\n    </ng-template>\n    <ng-template [ngTemplateOutlet]=\"loadingSpinnerTemplate || defaultLoadingSpinnerTemplate\"></ng-template>\n  </ng-container>\n\n  <span *ngIf=\"showClear()\"\n        class=\"ng-clear-wrapper\"\n        title=\"{{ clearAllText }}\"> <span class=\"ng-clear\"\n          aria-hidden=\"true\">×</span></span>\n\n  <span class=\"ng-arrow-wrapper\"> <span class=\"ng-arrow\"></span></span>\n</div>\n\n<ng-template #defaultHeaderTemplate\n             let-context=\"context\">\n  <div *ngIf=\"context.isMobile\"\n       class=\"mobile-header\">\n    <div class=\"placeholder\">{{ context.placeholder }}</div>\n    <span class=\"ng-value-icon\"\n          (click)=\"context.close()\"\n          aria-hidden=\"true\">×</span>\n  </div>\n  <div class=\"ng-input ng-search-input\">\n    <input style=\"width: 100%\"\n           #inlineSearchInput\n           id=\"labelForId\"\n           [readOnly]=\"context.itemsList.maxItemsSelected\"\n           [disabled]=\"context.disabled\"\n           [value]=\"context.searchTerm ? context.searchTerm : ''\"\n           (input)=\"context.filter(inlineSearchInput.value)\"\n           (compositionstart)=\"context.onCompositionStart()\"\n           [placeholder]=\"context.searchPlaceholder\"\n           (compositionend)=\"context.onCompositionEnd(inlineSearchInput.value)\"\n           (change)=\"$event.stopPropagation()\"\n           (blur)=\"context.focus()\"\n           role=\"combobox\"\n           [attr.aria-expanded]=\"context.isOpen\"\n           [attr.aria-owns]=\"context.isOpen ? context.dropdownId : null\"\n           [attr.aria-activedescendant]=\"context.isOpen ? context.itemsList?.markedItem?.htmlId : null\" />\n  </div>\n  <div class=\"select-all\"\n       *ngIf=\"context.displaySelectAll && context.viewPortItems.length\">\n    <input id=\"selectAll\"\n           type=\"checkbox\"\n           [checked]=\"context.selected_all\"\n           (change)=\"context.selectAll($event)\" />\n    <label for=\"selectAll\"> Select all {{ context.searchTerm ? 'search results' : '' }} </label>\n  </div>\n</ng-template>\n\n<ng-template #actionButtonsTemplate>\n  <div class=\"ng-option-action-buttons\">\n    <button (click)=\"close()\">Cancel</button>\n    <button (click)=\"commit_changes = true; close()\">OK</button>\n  </div>\n</ng-template>\n\n<ng-dropdown-panel *ngIf=\"isOpen\"\n                   class=\"ng-dropdown-panel {{ isMobile ? 'ng-select-mobile' : '' }}\"\n                   [context]=\"this\"\n                   [virtualScroll]=\"virtualScroll\"\n                   [bufferAmount]=\"bufferAmount\"\n                   [appendTo]=\"appendTo\"\n                   [position]=\"dropdownPosition\"\n                   [headerTemplate]=\"headerTemplate || defaultHeaderTemplate\"\n                   [footerTemplate]=\"displayActionButtons ? footerTemplate || actionButtonsTemplate : footerTemplate\"\n                   [filterValue]=\"searchTerm\"\n                   [items]=\"itemsList.filteredItems\"\n                   [markedItem]=\"itemsList.markedItem\"\n                   (update)=\"viewPortItems = $event\"\n                   (scroll)=\"scroll.emit($event)\"\n                   (keydown)=\"handleKeyDown($event)\"\n                   (scrollToEnd)=\"scrollToEnd.emit($event)\"\n                   (outsideClick)=\"displayActionButtons ? commit_changes = false: commit_changes = true ;close()\"\n                   [class.ng-select-multiple]=\"multiple\"\n                   [ngClass]=\"appendTo ? classes : null\"\n                   [id]=\"dropdownId\">\n  <ng-container>\n    <div class=\"ng-option\"\n         [attr.role]=\"item.children ? 'group' : 'option'\"\n         (click)=\"toggleItem(item)\"\n         (mouseover)=\"onItemHover(item)\"\n         *ngFor=\"let item of viewPortItems; trackBy: trackByOption\"\n         [class.ng-option-disabled]=\"item.disabled\"\n         [class.ng-option-selected]=\"item.selected\"\n         [class.ng-optgroup]=\"item.children\"\n         [class.ng-option]=\"!item.children\"\n         [class.ng-option-child]=\"!!item.parent\"\n         [class.ng-option-marked]=\"item === itemsList.markedItem\"\n         [attr.aria-selected]=\"item.selected\"\n         [attr.id]=\"item?.htmlId\">\n      <ng-template #defaultOptionTemplate>\n        <span class=\"ng-option-checkbox\"\n              *ngIf=\"displaySelectAll\">\n          <input readonly\n                 type=\"checkbox\"\n                 [checked]=\"item.selected\" />\n        </span>\n        <span class=\"ng-option-label\"\n              [title]=\"item.title || item.label\"\n              [ngItemLabel]=\"item.label || '&nbsp;'\"\n              [escape]=\"escapeHTML\"></span>\n      </ng-template>\n\n      <ng-template [ngTemplateOutlet]=\"item.children ? optgroupTemplate || defaultOptionTemplate : optionTemplate || defaultOptionTemplate\"\n                   [ngTemplateOutletContext]=\"{\n          item: item.value,\n          item$: item,\n          index: item.index,\n          searchTerm: searchTerm\n        }\">\n      </ng-template>\n    </div>\n\n    <div class=\"ng-option\"\n         [class.ng-option-marked]=\"!itemsList.markedItem\"\n         (mouseover)=\"itemsList.unmarkItem()\"\n         role=\"option\"\n         (click)=\"selectTag()\"\n         *ngIf=\"showAddTag\">\n      <ng-template #defaultTagTemplate>\n        <span>\n          <span class=\"ng-tag-label\">{{ addTagText }}</span>\"{{ searchTerm }}\"</span>\n      </ng-template>\n\n      <ng-template [ngTemplateOutlet]=\"tagTemplate || defaultTagTemplate\"\n                   [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n      </ng-template>\n    </div>\n  </ng-container>\n\n  <ng-container *ngIf=\"showNoItemsFound()\">\n    <ng-template #defaultNotFoundTemplate>\n      <div class=\"ng-option ng-option-disabled\">{{ notFoundText }}</div>\n    </ng-template>\n    <ng-template [ngTemplateOutlet]=\"notFoundTemplate || defaultNotFoundTemplate\"\n                 [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n    </ng-template>\n  </ng-container>\n\n  <ng-container *ngIf=\"showTypeToSearch()\">\n    <ng-template #defaultTypeToSearchTemplate>\n      <div class=\"ng-option ng-option-disabled\">{{ typeToSearchText }}</div>\n    </ng-template>\n    <ng-template [ngTemplateOutlet]=\"typeToSearchTemplate || defaultTypeToSearchTemplate\"></ng-template>\n  </ng-container>\n\n  <ng-container *ngIf=\"loading && itemsList.filteredItems.length === 0\">\n    <ng-template #defaultLoadingTextTemplate>\n      <div class=\"ng-option ng-option-disabled\">{{ loadingText }}</div>\n    </ng-template>\n    <ng-template [ngTemplateOutlet]=\"loadingTextTemplate || defaultLoadingTextTemplate\"\n                 [ngTemplateOutletContext]=\"{ searchTerm: searchTerm }\">\n    </ng-template>\n  </ng-container>\n</ng-dropdown-panel>","import { CommonModule } from '@angular/common';\nimport { NgModule } from '@angular/core';\nimport { NgDropdownPanelComponent } from './ng-dropdown-panel.component';\nimport { NgOptionComponent } from './ng-option.component';\nimport { NgSelectComponent, SELECTION_MODEL_FACTORY } from './ng-select.component';\nimport {\n    NgFooterTemplateDirective,\n    NgHeaderTemplateDirective,\n    NgLabelTemplateDirective,\n    NgLoadingSpinnerTemplateDirective,\n    NgLoadingTextTemplateDirective,\n    NgMultiLabelTemplateDirective,\n    NgNotFoundTemplateDirective,\n    NgOptgroupTemplateDirective,\n    NgOptionTemplateDirective,\n    NgTagTemplateDirective,\n    NgItemLabelDirective,\n    NgTypeToSearchTemplateDirective\n} from './ng-templates.directive';\nimport { DefaultSelectionModelFactory } from './selection-model';\nimport { NgSelectExtComponent } from './ng-select-ext.component';\n\n@NgModule({\n    declarations: [\n        NgDropdownPanelComponent,\n        NgOptionComponent,\n        NgSelectComponent,\n        NgOptgroupTemplateDirective,\n        NgOptionTemplateDirective,\n        NgLabelTemplateDirective,\n        NgMultiLabelTemplateDirective,\n        NgHeaderTemplateDirective,\n        NgFooterTemplateDirective,\n        NgNotFoundTemplateDirective,\n        NgTypeToSearchTemplateDirective,\n        NgLoadingTextTemplateDirective,\n        NgTagTemplateDirective,\n        NgLoadingSpinnerTemplateDirective,\n        NgItemLabelDirective,\n        NgSelectExtComponent\n    ],\n    imports: [\n        CommonModule\n    ],\n    exports: [\n        NgSelectComponent,\n        NgOptionComponent,\n        NgOptgroupTemplateDirective,\n        NgOptionTemplateDirective,\n        NgLabelTemplateDirective,\n        NgMultiLabelTemplateDirective,\n        NgHeaderTemplateDirective,\n        NgFooterTemplateDirective,\n        NgNotFoundTemplateDirective,\n        NgTypeToSearchTemplateDirective,\n        NgLoadingTextTemplateDirective,\n        NgTagTemplateDirective,\n        NgLoadingSpinnerTemplateDirective,\n        NgSelectExtComponent\n    ],\n    providers: [\n        { provide: SELECTION_MODEL_FACTORY, useValue: DefaultSelectionModelFactory }\n    ]\n})\nexport class NgSelectModule {}\n","/*\n * Public API Surface of ng-select\n */\n\n\nexport { NgSelectExtComponent } from './lib/ng-select-ext.component';\n\nexport { NgSelectComponent, SELECTION_MODEL_FACTORY } from './lib/ng-select.component';\nexport { NgSelectModule } from './lib/ng-select.module';\nexport { NgOption } from './lib/ng-select.types';\nexport { SelectionModel } from './lib/selection-model';\nexport { NgSelectConfig } from './lib/config.service';\nexport { NgOptionComponent } from './lib/ng-option.component';\nexport {\n    NgOptgroupTemplateDirective,\n    NgOptionTemplateDirective,\n    NgFooterTemplateDirective,\n    NgHeaderTemplateDirective,\n    NgItemLabelDirective,\n    NgLabelTemplateDirective,\n    NgLoadingSpinnerTemplateDirective,\n    NgLoadingTextTemplateDirective,\n    NgMultiLabelTemplateDirective,\n    NgNotFoundTemplateDirective,\n    NgTagTemplateDirective,\n    NgTypeToSearchTemplateDirective\n} from './lib/ng-templates.directive';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["searchHelper.stripSpecialChars","i2","i2.ConsoleService","i4.NgDropdownPanelComponent","i5.NgItemLabelDirective","i1.NgSelectConfig"],"mappings":"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Q,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,IAAI;AACd,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAAQ,EAAE,GAAG;AACb,IAAA,QAA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"}