{"version":3,"sources":["webpack:///./node_modules/vue-excel-editor/src/PanelSetting.vue?30be","webpack:///./node_modules/vue-excel-editor/src/VueExcelEditor.vue?6f79","webpack:///./src/components/ExcelTable.vue?e770","webpack:///./node_modules/vue-excel-editor/src/VueExcelEditor.vue?424b","webpack:///./node_modules/vue-excel-editor/src/VueExcelFilter.vue?a50f","webpack:///node_modules/vue-excel-editor/src/VueExcelFilter.vue","webpack:///./node_modules/vue-excel-editor/src/VueExcelFilter.vue?e210","webpack:///./node_modules/vue-excel-editor/src/VueExcelFilter.vue","webpack:///./node_modules/vue-excel-editor/src/PanelFilter.vue?2e7e","webpack:///node_modules/vue-excel-editor/src/PanelFilter.vue","webpack:///./node_modules/vue-excel-editor/src/PanelFilter.vue?f10b","webpack:///./node_modules/vue-excel-editor/src/PanelFilter.vue","webpack:///./node_modules/vue-excel-editor/src/PanelSetting.vue?266f","webpack:///node_modules/vue-excel-editor/src/PanelSetting.vue","webpack:///./node_modules/vue-excel-editor/src/PanelSetting.vue?3846","webpack:///./node_modules/vue-excel-editor/src/PanelSetting.vue","webpack:///./node_modules/vue-excel-editor/src/PanelFind.vue?0573","webpack:///node_modules/vue-excel-editor/src/PanelFind.vue","webpack:///./node_modules/vue-excel-editor/src/PanelFind.vue?5476","webpack:///./node_modules/vue-excel-editor/src/PanelFind.vue","webpack:///./node_modules/date-format-parse/es/util.js","webpack:///./node_modules/date-format-parse/es/locale/en.js","webpack:///./node_modules/date-format-parse/es/format.js","webpack:///./node_modules/date-format-parse/es/parse.js","webpack:///./node_modules/vue2-datepicker/index.esm.js","webpack:///./node_modules/xlsx/xlsx.mjs","webpack:///node_modules/vue-excel-editor/src/VueExcelEditor.vue","webpack:///./node_modules/vue-excel-editor/src/VueExcelEditor.vue?1dd3","webpack:///./node_modules/vue-excel-editor/src/VueExcelEditor.vue","webpack:///./node_modules/vue-excel-editor/src/VueExcelColumn.vue?34b9","webpack:///node_modules/vue-excel-editor/src/VueExcelColumn.vue","webpack:///./node_modules/vue-excel-editor/src/VueExcelColumn.vue?a218","webpack:///./node_modules/vue-excel-editor/src/VueExcelColumn.vue","webpack:///src/components/ExcelTable.vue","webpack:///./src/components/ExcelTable.vue?624f","webpack:///./src/components/ExcelTable.vue","webpack:///./node_modules/vue-excel-editor/src/PanelFind.vue?078d","webpack:///./node_modules/vue-excel-editor/src/VueExcelFilter.vue?3a54","webpack:///./node_modules/vue-excel-editor/src/PanelFilter.vue?11dc"],"names":["render","_vm","this","_h","$createElement","_c","_self","attrs","ref","filterRow","on","onSelect","model","value","callback","$$v","table","expression","_l","h","i","key","refInFor","text","columnWidth","getOptions","getFieldType","staticStyle","$event","addRow","_v","staticRenderFns","staticClass","style","display","width","localizedLabel","noRecordIndicator","pagingTable","length","bottom","noFooter","_s","_e","class","tableScroll","mouseOver","mouseOut","noNumCol","item","p","directives","name","rawName","invisible","vScroller","buttonHeight","height","hide","type","indexOf","_k","keyCode","button","selectAllClick","preventDefault","settingClick","selectedCount","sortPos","sortDir","sticky","left","fields","headerClick","panelFilterClick","columnFilter","noHeaderEdit","domProps","headerLabel","label","colSepMouseDown","colSepMouseOver","colSepMouseOut","top","calCellTop2","Object","keys","$set","mouseDown","record","rowPos","select","selected","pageTop","rowStyle","error","rowerr","numcolMouseOver","rowLabelClick","recordLabel","readonly","errmsg","link","options","datepick","assign","cellStyle","renderColumnCellStyle","cellMouseOver","cellMouseMove","toText","summaryRow","field","summary","_t","tip","inputSquareClick","opacity","inputBoxShow","spellcheck","inputBoxBlur","inputBoxMouseMove","inputBoxMouseDown","datepickerClick","inputDateTime","vsMouseDown","marginTop","vsbMouseDown","runner","focused","autocompleteInputs","autocompleteSelect","inputAutocompleteText","target","textContent","ftMouseDown","sbMouseDown","noPaging","footerLeft","pageBottom","processing","disabled","firstPage","first","prevPage","previous","pageSize","nextPage","next","lastPage","last","showSelectedOnly","toggleSelectView","footerRight","color","columnFilterString","toggleFilterView","filtered","filteredValue","loaded","componentTabInto","doImport","nFilterCount","_g","uid","onFocus","onBlur","ctrlKey","shiftKey","altKey","metaKey","keyWest","keyEast","keyEnter","keyDelete","mouseMove","listeners","props","interactive","data","cell","row","colPos","rect","computed","err","validate","filterRowTop","watch","newVal","$el","mounted","_uid","$refs","parentNode","thead","Array","from","children","colLabel","methods","updateValue","content","onInput","setTimeout","document","execCommand","e","classList","remove","sel","toString","focusOffset","td","previousSibling","tagName","focus","nextSibling","cursor","offsetWidth","offsetX","component","clickOutside","hidePanel","sortingAndFiltering","sort","sortAscending","sortDescending","showDropdown","symbol","show","setFilterCondition","near","exactMatch","notMatch","greaterThan","greaterThanOrEqualTo","lessThan","lessThanOrEqualTo","regularExpression","customFilter","doInputFilter","doFilter","filteredSortedUniqueValueList","slice","k","filterPanelSelect","listFirstNValuesOnly","apply","default","columnFilterRef","inputFilter","inputFilterCondition","sortedUniqueValueList","filter","id","$parent","direction","choice","freezePanelSizeAfterShown","setAttribute","removePanelSizeAfterHide","removeAttribute","window","delay","clearTimeout","opt","$emit","showPanel","calTable","tableSetting","exportTable","exportExcel","importTable","importExcel","columnLabelClick","reset","back","components","get","set","resetColumn","calStickyLeft","format","doFind","inputFind","composing","isDate","Date","prototype","call","toDate","getTime","NaN","isValidDate","isNaN","startOfWeek","firstDayOfWeek","arguments","undefined","RangeError","date","day","getDay","diff","setDate","getDate","setHours","startOfWeekYear","_ref","_ref$firstDayOfWeek","_ref$firstWeekContain","firstWeekContainsDate","year","getFullYear","firstDateOfFirstWeek","setFullYear","getWeek","_ref2","_ref2$firstDayOfWeek","_ref2$firstWeekContai","firstDateOfThisWeek","Math","round","months","monthsShort","weekdays","weekdaysShort","weekdaysMin","REGEX_FORMAT","pad","val","len","output","concat","abs","sign","formatTimezone","offset","delimeter","absOffset","hours","floor","minutes","meridiem","_","isLowercase","word","toLocaleLowerCase","formatFlags","Y","y","YY","substr","YYYY","M","getMonth","MM","MMM","locale","MMMM","D","DD","H","getHours","HH","hh","m","getMinutes","mm","s","getSeconds","ss","S","getMilliseconds","SS","SSS","d","dd","ddd","dddd","A","meridiemFunc","a","Z","getTimezoneOffset","ZZ","X","x","w","ww","str","formatStr","String","replace","match","p1","_toConsumableArray","arr","_arrayWithoutHoles","_iterableToArray","_nonIterableSpread","TypeError","iter","Symbol","iterator","isArray","arr2","ownKeys","object","enumerableOnly","getOwnPropertySymbols","symbols","sym","getOwnPropertyDescriptor","enumerable","push","_objectSpread","source","forEach","_defineProperty","getOwnPropertyDescriptors","defineProperties","defineProperty","_slicedToArray","_arrayWithHoles","_iterableToArrayLimit","_nonIterableRest","_arr","_n","_d","_i","done","obj","configurable","writable","formattingTokens","match1","match2","match3","match4","match1to2","matchShortOffset","matchSigned","matchTimestamp","YEAR","MONTH","DAY","HOUR","MINUTE","SECOND","MILLISECOND","parseFlags","addParseFlag","token","regex","func","tokens","input","parseInt","escapeStringRegExp","matchWordRegExp","localeKey","array","Error","RegExp","map","join","matchWordCallback","index","matchMeridiem","meridiemParse","defaultIsPM","toLowerCase","charAt","offsetFromString","_ref8","_ref9","hour","minute","to24hour","isPM","getFullInputArray","backupDate","result","backupArr","useBackup","createUTCDate","_len","args","_key","UTC","isFinite","getUTCFullYear","setUTCFullYear","makeParser","dateString","mark","parseTo","parser","exec","parse","_options$locale","_locale","_options$backupDate","parseResult","month","second","millisecond","weekday","week","inputArray","firstDate","utcDate","offsetMilliseconds","parsedDate","_typeof","constructor","_extends","hasOwnProperty","_objectSpread2","_objectWithoutPropertiesLoose","excluded","sourceKeys","_objectWithoutProperties","sourceSymbolKeys","propertyIsEnumerable","_unsupportedIterableToArray","o","minLen","_arrayLikeToArray","n","test","_extends$1","b","c","cent","parseFloat","normalMerge","toArrayMerge","functionalMerge","mergeJsxProps","reduce","f","g","mergeFn","helper","createDate","ms","isValidRangeDate","every","isValidDates","dates","getValidDate","backup","startOfYear","setMonth","startOfMonth","startOfDay","getCalendar","calendar","lastDayInLastMonth","firstDayInLastMonth","lastDayInCurrentMonth","lastMonthLength","nextMonthLength","_i2","dirtyDate","dirtyMonth","Number","daysInMonth","min","assignTime","time","chunk","size","isObject","pick","res","prop","mergeDeep","unwrapExports","__esModule","createCommonjsModule","fn","module","exports","_default","en$1","lang","formatLocale","yearFormat","monthFormat","monthBeforeYear","defaultLocale","locales","isLocal","l","getLocale","rafThrottle","isRunning","_this","requestAnimationFrame","getPopupElementSize","element","originalDisplay","originalVisibility","visibility","styles","getComputedStyle","marginLeft","marginRight","offsetHeight","marginBottom","getRelativePosition","el","targetWidth","targetHeight","fixed","offsetY","relativeRect","getBoundingClientRect","dw","documentElement","clientWidth","dh","clientHeight","pageXOffset","pageYOffset","right","getScrollParent","node","until","body","getPropertyValue","scroll","script","inject","prefixClass","visible","Boolean","appendToBody","immediate","handler","$nextTick","displayPopup","_this2","appendChild","_clickoutEvent","addEventListener","handleClickOutside","relativeElement","_displayPopup","_scrollParent","beforeDestroy","removeChild","removeEventListener","evt","contains","popup","_popupRect","_this$_popupRect","_getRelativePosition","normalizeComponent","template","scopeId","isFunctionalTemplate","moduleIdentifier","shadowMode","createInjector","createInjectorSSR","createInjectorShadow","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","originalRender","existing","beforeCreate","scrollBarWidth","__vue_script__","__vue_render__","position","__vue_staticRenderFns__","__vue_inject_styles__","__vue_scope_id__","__vue_module_identifier__","__vue_is_functional_template__","__vue_component__","__vue_render__$1","__vue_staticRenderFns__$1","__vue_inject_styles__$1","__vue_scope_id__$1","__vue_module_identifier__$1","__vue_is_functional_template__$1","__vue_component__$1","__vue_render__$2","__vue_staticRenderFns__$2","__vue_inject_styles__$2","__vue_scope_id__$2","__vue_module_identifier__$2","__vue_is_functional_template__$2","__vue_component__$2","script$1","__vue_script__$1","__vue_render__$3","$listeners","__vue_staticRenderFns__$3","__vue_inject_styles__$3","__vue_scope_id__$3","__vue_module_identifier__$3","__vue_is_functional_template__$3","__vue_component__$3","script$2","IconButton","onDateMouseEnter","onDateMouseLeave","showWeekNumber","titleFormat","getRowClasses","Function","getCellClasses","yearMonth","_this$getLocale","_this$getLocale$month","yearLabel","panel","formatDate","monthLabel","days","getNextCalendar","diffMonth","handleIconLeftClick","handleIconRightClick","handleIconDoubleLeftClick","handleIconDoubleRightClick","handlePanelChange","handleMouseEnter","handleMouseLeave","handleCellClick","toUpperCase","getAttribute","_index$split$map","split","v","_index$split$map2","col","fmt","getCellTitle","getWeekNumber","__vue_script__$2","__vue_render__$4","j","__vue_staticRenderFns__$4","__vue_inject_styles__$4","__vue_scope_id__$4","__vue_module_identifier__$4","__vue_is_functional_template__$4","__vue_component__$4","script$3","calendarYear","monthsLocale","diffYear","handleClick","__vue_script__$3","__vue_render__$5","__vue_staticRenderFns__$5","__vue_inject_styles__$5","__vue_scope_id__$5","__vue_module_identifier__$5","__vue_is_functional_template__$5","__vue_component__$5","script$4","getYearPanel","years","getYears","firstYear","lastYear","__vue_script__$4","__vue_render__$6","__vue_staticRenderFns__$6","__vue_inject_styles__$6","__vue_scope_id__$6","__vue_module_identifier__$6","__vue_is_functional_template__$6","__vue_component__$6","CalendarPanel","dispatchDatePicker","defaultValue","defaultPanel","disabledDate","getClasses","partialUpdate","panels","max","innerCalendar","innerValue","start","calendarMonth","initCalendar","calendarDate","isDisabled","emitDate","handleCalendarChange","oldCalendar","handelPanelChange","oldPanel","handleSelectYear","getYearCellDate","_date","handleSelectMonth","getMonthCellDate","_date2","handleSelectDate","getDateClasses","cellDate","notCurrentMonth","classes","state","getStateClass","getMonthClasses","getYearClasses","some","getWeekState","end","active","CalendarRange","provide","calendars","hoveredValue","calendarMinDiff","calendarMaxDiff","Infinity","defaultValues","updateCalendars","handleSelect","_this$innerValue","startValue","endValue","updateStartCalendar","updateEndCalendar","adjustIndex","gap","getCalendarGap","_calendars","calendarLeft","calendarRight","yearDiff","monthDiff","getRangeClasses","currentDates","classnames","inRange","range","_range$map","_range$map2","calendarRange","$props","getScrollbarWidth","outer","createElement","overflow","inner","script$5","scrollbarWidth","thumbTop","thumbHeight","created","handleDragend","getThumbSize","wrap","heightPercentage","scrollHeight","handleScroll","currentTarget","scrollTop","handleDragstart","stopImmediatePropagation","_draggable","offsetTop","thumb","_prevY","clientY","handleDraging","__vue_script__$5","__vue_render__$7","__vue_staticRenderFns__$7","__vue_inject_styles__$7","__vue_scope_id__$7","__vue_module_identifier__$7","__vue_is_functional_template__$7","__vue_component__$7","padNumber","generateOptions","step","scrollTo","to","duration","difference","tick","script$6","ScrollbarVertical","scrollDuration","hourOptions","minuteOptions","secondOptions","showHour","showMinute","showSecond","hourStep","minuteStep","secondStep","use12h","columns","cols","list","getHoursList","getMinutesList","getSecondsList","getAMPMList","scrollToSelected","num","_this3","setMinutes","_this4","setSeconds","_this5","elements","querySelectorAll","scrollElement","colIndex","cellIndex","__vue_script__$6","__vue_render__$8","__vue_staticRenderFns__$8","__vue_inject_styles__$8","__vue_scope_id__$8","__vue_module_identifier__$8","__vue_is_functional_template__$8","__vue_component__$8","parseOption","values","scrollTo$1","script$7","startMinutes","endMinutes","stepMinutes","timeMinutes","querySelector","__vue_script__$7","__vue_render__$9","__vue_staticRenderFns__$9","__vue_inject_styles__$9","__vue_scope_id__$9","__vue_module_identifier__$9","__vue_is_functional_template__$9","__vue_component__$9","script$8","ListColumns","ListOptions","timeTitleFormat","showTimeHeader","disabledTime","timePickerOptions","title","innerForamt","ShowHourMinuteSecondAMPM","defaultProps","handleClickTitle","__vue_script__$8","__vue_render__$a","_b","__vue_staticRenderFns__$a","__vue_inject_styles__$a","__vue_scope_id__$a","__vue_module_identifier__$a","__vue_is_functional_template__$a","__vue_component__$a","TimeRange","_this$value","emitChange","handleSelectStart","handleSelectEnd","disabledStartTime","disabledEndTime","DatetimePanel","emits","showTimePanel","defaultTimeVisible","currentValue","timeVisible","closeTimePanel","openTimePanel","datetime","calendarProps","timeProps","clicktitle","DatetimeRange","datetimes","componentMap","componentRangeMap","DatePicker","bind","valueType","formatter","multiple","rangeSeparator","placeholder","editable","clearable","inputClass","inputAttr","open","popupClass","popupStyle","inline","confirm","confirmText","renderInputText","shortcuts","validator","onClick","userInput","defaultOpen","popupVisible","innerRangeSeparator","innerFormat","validMultipleType","value2date","isValidValue","showClearIcon","types","console","warn","handleClickOutSide","closePopup","getFormatter","parseDate","date2value","emitValue","afterEmitValue","isValidValueAndNotDisabled","handleMultipleDates","nextDates","clear","handleClear","stopPropagation","handleConfirmDate","handleSelectShortcut","openPopup","blur","handleInputChange","trim","handleInputInput","handleInputKeydown","handleInputBlur","handleInputFocus","hasSlot","$slots","$scopedSlots","renderSlot","fallback","slotFn","renderInput","autocomplete","className","events","keydown","change","renderContent","Component","emit","renderSidebar","renderHeader","renderFooter","_class","sidedar","install","Vue","TimePanel","XLSX","current_codepage","current_ansi","VALID_ANSI","CS2CP","0","1","2","77","128","129","130","134","136","161","162","163","177","178","186","204","222","238","255","69","set_ansi","cp","set_cp","utf16leread","fromCharCode","charCodeAt","utf16beread","debom","c1","c2","_getchar","_getansi","DENSE","DIF_XL","Base64","encode","c3","e1","e2","e3","e4","decode","has_buf","Buffer","process","versions","Buffer_from","nbfs","buf","enc","alloc","allocUnsafe","new_raw_buf","new_unsafe_buf","s2a","a2s","ab2a","ArrayBuffer","Uint8Array","bconcat","bufs","chr0","chr1","SSF","make_ssf","_strrev","fill","pad0","t","pad_","rpad_","pad0r1","pad0r2","version","p2_32","pow","pad0r","isgeneral","init_table","table_fmt","default_map","defi","default_str","frac","mixed","sgn","B","P_2","P_1","P","Q_2","Q_1","Q","q","parse_date_code","opts","b2","dow","dout","out","T","u","date1904","fix_hijri","basedate","dnthresh","base1904","datenum_local","epoch","general_fmt_int","_general_int","general_fmt_num","trailing_zeroes_and_decimal","strip_decimal","mantissa_zeroes_and_decimal","exp_with_single_digit","normalize_exp","small_exp","toFixed","toPrecision","toExponential","large_exp","general_fmt_num_base","V","log","LOG10E","general_fmt","write_date","ss0","tt","outl","outstr","commaify","_general_num","_general","write_num","pct1","write_num_pct","sfmt","mul","write_num_cm","idx","write_num_exp","period","ee","fakee","$$","$1","$2","$3","frac1","write_num_f1","r","aval","den","rr","base","myn","myd","write_num_f2","dec1","closeparen","phone","hashq","cc","rnd","dec","_frac","carry","flr","write_num_flt","ffmt","ri","ff","oa","lres","rres","write_num_cm2","write_num_pct2","write_num_exp2","write_num_int","lastIndexOf","split_fmt","in_str","_split","abstime","fmt_is_date","eval_fmt","flen","dt","lst","hr","ssm","bt","jj","nstr","myv","ostr","vv","decpt","lasti","retval","is_date","_eval","cfregex","cfregex2","chkcond","thresh","choose_fmt","lat","m1","m2","dateNF","load_entry","load","_table","get_table","load_table","tbl","SSFImplicit","dateNFregex","dateNF_regex","dateNF_fix","datestr","timestr","CRC32","DO_NOT_EXPORT_CFB","factory","signed_crc_table","Int32Array","crc32_bstr","bstr","seed","C","L","crc32_buf","crc32_buf_8","crc32_str","CFB","fs","namecmp","R","dirname","filename","write_dos_date","hms","write_shift","ymd","parse_dos_date","read_shift","setMilliseconds","parse_extra_field","blob","prep_blob","flags","sz","tgt","mtime","atime","ctime","mt","get_fs","file","parse_zip","mver","ssz","nmfs","difat_sec_cnt","dir_start","minifat_start","difat_start","fat_addrs","mv","check_get_mver","header","check_shifts","dir_cnt","chk","sectors","sectorify","sleuth_fat","sector_list","make_sector_list","ENDOFCHAIN","files","Paths","FileIndex","FullPaths","read_directory","build_full_paths","shift","raw","HEADER_SIGNATURE","nsectors","ceil","FI","FP","pl","dad","get_mfat_entry","entry","payload","mini","MSSZ","__readInt32LE","new_buf","cnt","sector","get_sector_list","chkd","buf_chain","modulus","addr","nodes","__toBuffer","sl","seen","minifat_store","namelen","__utf16le","clsid","ct","read_date","storage","__readUInt32LE","read_file","readFileSync","read","init_cfb","cfb","root","CLSID","seed_cfb","nm","find","rebuild_cfb","gc","_file","pop","now","HEADER_CLSID","elt","_write","_opts","fileType","write_zip","mini_size","fat_size","mini_cnt","mfat_cnt","fat_base","fat_cnt","difat_cnt","HEADER_SIG","chainit","consts","DIFSECT","FATSECT","_nm","path","UCFullPaths","UCPaths","UCPath","_zlib","MAXREGSECT","FREESECT","HEADER_MINOR_VERSION","MAXREGSID","NOSTREAM","EntryTypes","write_file","writeFileSync","write","use_zlib","zlib","InflateRaw","InflRaw","_processChunk","_finishFlushFlag","bytesRead","message","_inflateRawSync","usz","_inflate","_deflateRawSync","deflateRawSync","_deflate","CLEN_ORDER","LEN_LN","DST_LN","bit_swap_8","use_typed_arrays","bitswap8","bit_swap_n","rev","read_bits_2","bl","read_bits_3","read_bits_4","read_bits_5","read_bits_7","read_bits_n","realloc","copy","zero_fill_array","_deflateRaw","boff","off","build_tree","clens","cmap","MAX","maxlen","ccode","bl_count","Uint16Array","ctree","cleni","fix_lmap","fix_dmap","dlens","dyn_lmap","dyn_dmap","dyn_cmap","dyn_len_1","dyn_len_2","dyn","_HLIT","_HDIST","_HCLEN","next_code","hcodes","h1","h2","inflate","outbuf","woff","OL","max_len_1","max_len_2","bits","code","len_eb","dst_eb","dst","warn_or_throw","wrn","msg","fcnt","start_cd","csz","efsz","fcsz","EF","parse_local_file","meth","crc32","_csz","_usz","ef","_crc32","cfb_add","unsafe","cdirs","method","compression","desc","fp","fi","crcs","sz_cd","namebuf","cfb_new","fpath","utils","cfb_gc","cfb_del","splice","cfb_mov","old_name","new_name","writeFile","ReadShift","CheckField","_inflateRaw","require","ks","o2","evert_key","K","evert","evert_num","evert_arr","datenum","refdate","refoffset","numdate","setTime","parse_isodur","sec","good_pd_date","good_pd","fixdate","cc2str","dup","JSON","stringify","fuzzynum","wt","fuzzydate","getYear","safe_split_regex","split_regex","re","def","getdatastr","asNodeBuffer","asBinary","_data","getContent","safegetzipfile","zip","getzipfile","getzipstr","safe","zip_read","XML_HEADER","attregexg","tagregex","nsregex2","parsexmltag","tag","skip_root","skip_LC","z","eq","quot","strip_ns","encodings","rencoding","unescapexml","encregex","coderegex","decregex","charegex","escapexml","htmlcharegex","escapehtml","entregex","entrepl","parsexmlbool","utf8read","orig","utf8readb","corpus","utf8readc","matchtag","mtcache","htmldecode","entities","vt_cache","wtregex","wxt_helper","writextag","XMLNS","read_double_le","write_double_le","bs","av","LN2","__lpp4","___lpp4","___toBuffer","__readUInt16LE","___utf16le","__hexlify","___hexlify","__utf8","__readUInt8","___utf8","__lpstr","___lpstr","__cpstr","___cpstr","__lpwstr","___lpwstr","__double","___double","__8lpp4","___8lpp4","isBuffer","readUInt32LE","readDoubleLE","cptable","__readInt16LE","__readInt32BE","oI","oR","loc","oo","lens","__writeUInt32LE","__writeInt32LE","__writeUInt16LE","WriteShift","cppayload","hexstr","fld","pos","parsenoop","buf_array","blksz","newblk","curbuf","endbuf","_bufs","shift_cell_xls","cRel","rRel","biff","shift_range_xls","encode_cell_xls","encode_cell","fix_col","fix_row","encode_range_xls","encode_row","encode_col","decode_row","rowstr","unfix_row","cstr","decode_col","colstr","unfix_col","split_cell","decode_cell","decode_range","encode_range","cs","ce","safe_decode_range","safe_format_cell","XF","numFmtId","format_cell","BErr","sheet_to_workbook","sheet","sheets","SheetNames","Sheets","sheet_add_aoa","_ws","dense","ws","_R","_C","origin","_origin","_range","__R","__C","nullError","sheetStubs","cellDates","cell_ref","aoa_to_sheet","parse_XLWideString","cchCharacters","parse_StrRun","ich","ifnt","parse_RichStr","rgsStrRun","dwSizeStrRun","parse_BrtCommentText","parse_XLSBCell","iStyleRef","parse_XLSBShortCell","parse_XLSBCodeName","parse_XLNullableWideString","parse_XLNameWideString","parse_RelID","parse_RkNumber","fX100","fInt","RK","parse_RfX","parse_UncheckedRfX","parse_Xnum","parse_BrtColor","xColorType","nTS","bR","bG","bB","auto","icv","XLSIcv","rgb","rgb2Hex","theme","tint","parse_FontFlags","fBold","fItalic","fUnderline","fStrikeout","fOutline","fShadow","fCondense","fExtend","VT_I2","VT_I4","VT_BOOL","VT_VARIANT","VT_UI4","VT_LPSTR","VT_FILETIME","VT_BLOB","VT_CF","VT_VECTOR","VT_STRING","DocSummaryPIDDSI","SummaryPIDSI","SpecialProperties","CountryEnum","XLSFillPattern","rgbify","_XLSIcv","RBErr","ct2type","type2ct","workbooks","xlsx","xlsm","xlsb","xlam","xltx","strs","comments","charts","dialogs","macros","CT","xsd","xsi","rels","RELS","WB","SHEET","HLINK","VML","XPATH","XMISS","XLINK","CXML","CXMLP","VBA","write_meta_ods","CORE_PROPS","dc","dcterms","dcmitype","EXT_PROPS","PseudoPropsPairs","vt","CUST_PROPS","XLMLDocPropsMap","Title","Subject","Author","Keywords","Comments","LastAuthor","RevNumber","Application","LastPrinted","CreatedDate","ModifiedDate","Category","Manager","Company","AppVersion","ContentStatus","Identifier","Language","parse_FILETIME","dwLowDateTime","dwHighDateTime","toISOString","parsenoop2","parslurp","cb","parsebool","parseuint16","parseuint16a","parse_Bes","parse_ShortXLUnicodeString","cch","encoding","fHighByte","parse_XLUnicodeRichExtendedString","cbExtRst","fExtSt","fRichSt","cRun","parse_XLUnicodeStringNoCch","parse_XLUnicodeString","parse_XLUnicodeString2","parse_ControlInfo","accel","parse_URLMoniker","extra","url","parse_FileMoniker","cAnti","preamble","ansiPath","bytes","unicodePath","parse_HyperlinkMoniker","parse_HyperlinkString","parse_Hyperlink","sVer","displayName","targetFrameName","moniker","oleMoniker","guid","fileTime","Loc","Target","Tooltip","parse_LongRGBA","parse_LongRGB","parse_XLSCell","rw","ixfe","parse_frtHeader","rt","parse_OptXLUnicodeString","parse_XTI","iSupBook","itabFirst","itabLast","parse_RkRec","parse_AddinUdf","udfName","parse_Ref8U","rwFirst","rwLast","colFirst","colLast","parse_RefU","parse_Ref","parse_FtCmo","ot","parse_FtNts","fSharedNote","parse_FtCf","cf","parse_FtSkip","FtTab","parse_FtArray","fts","ft","parse_BOF","BIFFVer","parse_InterfaceHdr","parse_WriteAccess","UserName","parse_WsBool","fDialog","fBelow","fRight","parse_BoundSheet8","hidden","hs","parse_SST","ucnt","Count","Unique","parse_ExtSST","extsst","dsst","parse_Row","miyRw","level","hpt","parse_ForceFullCalculation","fullcalc","parse_RecalcId","parse_DefaultRowHeight","fl","Unsynced","DyZero","ExAsc","ExDsc","parse_Window1","xWn","yWn","dxWn","dyWn","iTabCur","iTabFirst","ctabSel","wTabRatio","Pos","Dim","Flags","CurTab","FirstTab","Selected","TabRatio","parse_Window2","RTL","parse_Pane","parse_Font","dyHeight","parse_LabelSst","isst","parse_Label","biffguess","parse_Format","fmtstr","parse_BIFF2Format","parse_Dimensions","parse_RK","rkrec","rknum","parse_MulRk","rkrecs","lastcol","parse_MulBlank","ixfes","parse_CellStyleXF","patternType","cellStyles","alc","fWrap","alcV","fJustLast","trot","cIndent","fShrinkToFit","iReadOrder","fAtrNum","fAtrFnt","fAtrAlc","fAtrBdr","fAtrPat","fAtrProt","dgLeft","dgRight","dgTop","dgBottom","icvLeft","icvRight","grbitDiag","icvTop","icvBottom","icvDiag","dgDiag","icvFore","icvBack","fsxButton","parse_XF","fStyle","parse_Guts","parse_BoolErr","parse_Number","xnum","parse_XLHeaderFooter","parse_SupBook","ctab","sbcch","virtPath","rgst","parse_ExternName","fBuiltIn","fWantAdvise","fWantPict","fOle","fOleLink","fIcon","Name","XLSLblBuiltIn","parse_Lbl","chKey","cce","itab","npflen","rgce","parse_NameParsedFormula","parse_ExternSheet","parse_BIFF5ExternSheet","parse_NameCmt","cchName","cchComment","comment","parse_ShrFmla","cUse","parse_SharedParsedFormula","parse_Array","parse_ArrayParsedFormula","parse_MTRSettings","fMTREnabled","fUserSetThreadCount","cUserThreadCount","parse_NoteSh","idObj","stAuthor","parse_Note","parse_MergeCells","merges","cmcs","parse_Obj","parse_BIFF5Obj","cmo","parse_BIFF5OT","grbit","parse_TxO","texts","lastobj","cchText","hdr","parse_HLink","hlink","parse_HLinkTooltip","wzTooltip","parse_Country","parse_ClrtClient","ccv","parse_Palette","parse_XFCRC","cxfs","crc","parse_ColInfo","coldx","parse_Setup","footer","parse_ShtProps","area","parse_Blank","parse_Scl","parse_String","parse_ImData","env","lcb","parse_BIFF2STR","parse_BIFF2NUM","parse_BIFF2INT","parse_BIFF2STRING","parse_BIFF2FONTXTRA","parse_RString","DBF","dbf_codepage_map","dbf_reverse_map","DBF_SUPPORTED_VERSIONS","dbf_to_aoa","memo","vfp","l7","nrow","fpos","rlen","current_cp","codepage","hend","WTF","sheetRows","dbf_to_sheet","dbf_to_workbook","_RLEN","sheet_to_dbf","ba","aoa","sheet_to_json","headers","hcnt","coltypes","guess","_guess","hf","_f","hb","rout","to_workbook","to_sheet","from_sheet","SYLK","sylk_escapes","AA","BA","CA","DA","HA","JA","AE","BE","CE","HE","AI","BI","CI","HI","AO","BO","CO","DO","HO","AU","BU","CU","HU","Aa","Ba","Ca","Da","Ha","Ja","Ae","Be","Ce","He","Ai","Bi","Ci","Hi","Ao","Bo","Co","Do","Ho","Au","Bu","Cu","Hu","KC","Kc","DN","Dn","Hy","3","5","6","7","sylk_char_regex","sylk_char_fn","decode_sylk_char","newcc","sylk_to_aoa","sylk_to_aoa_str","records","rj","formats","next_cell_format","sht","rowinfo","colinfo","cw","Mval","rstr","RT","C_seen_K","C_seen_X","C_seen_S","C_seen_E","formula","rc_to_a1","shrbase","shift_formula_str","F_seen","wch","process_col","hpx","pt2px","sylk_to_sheet","aoasht","sylk_to_workbook","write_ws_cell_sylk","F","a1_to_rc","write_ws_cols_sylk","rec","wpx","width2px","px2char","write_ws_rows_sylk","rows","px2pt","sheet_to_sylk","RS","coord","DIF","dif_to_aoa","dif_to_aoa_str","metadata","dif_to_sheet","dif_to_workbook","sheet_to_dif","push_field","topic","push_value","ETH","eth_to_aoa","eth_to_sheet","eth_to_workbook","sep","meta","sheet_to_eth_data","sheet_to_eth","PRN","set_text_arr","prn_to_aoa_str","lines","guess_seps","guess_sep_weights","guess_sep","instr","dsv_to_sheet_str","sepcc","startcc","_re","finish_cell","fuzzyfmla","cellText","cellNF","prn_to_sheet_str","prn_to_sheet","firstbyte","prn_to_workbook","sheet_to_prn","lotushopper","Enum","WK1Enum","lotus_to_workbook","lotus_to_workbook_buf","sidx","snames","refguess","WK3Enum","qpro","Rn","vers","parse_RANGE","parse_cell","parse_LABEL","parse_INTEGER","parse_NUMBER","parse_FORMULA","parse_cell_3","parse_LABEL_16","parse_NUMBER_18","parse_NUMBER_17","v1","v2","parse_FORMULA_19","parse_NUMBER_25","parse_NUMBER_27","parse_FORMULA_28","parse_rpr","rpr","font","pass","shadow","outline","strike","uval","family","valign","parse_rs","tregex","rpregex","parse_r","rregex","rend","rs","rs_to_html","nlregex","parse_rpr2","intro","outro","align","r_to_html","terms","sitregex","sirregex","sirphregex","parse_si","html","cellHTML","SST","parse_BrtBeginSst","_JS2ANSI","parse_CRYPTOVersion","Major","Minor","parse_EncryptionHeader","AlgID","valid","AlgIDHash","KeySize","ProviderType","CSPName","parse_EncryptionVerifier","Salt","Verifier","VerifierHash","parse_RC4CryptoHeader","EncryptionVersionInfo","EncryptionHeader","EncryptionVerifier","parse_RC4Header","EncryptedVerifier","EncryptedVerifierHash","crypto_CreatePasswordVerifier_Method1","Password","PasswordArray","PasswordByte","Intermediate1","Intermediate2","Intermediate3","PasswordDecoded","crypto_CreateXorArray_Method1","PadArray","InitialCode","XorMatrix","Ror","Byte","XorRor","byte1","byte2","CreateXorKey_Method1","XorKey","CurrentElement","Char","password","Temp","PasswordLastChar","PadIndex","Index","ObfuscationArray","crypto_DecryptData_Method1","Data","XorArrayIndex","XorArray","O","Value","crypto_MakeXorDecryptor","parse_XORObfuscation","verificationBytes","verifier","insitu","parse_FilePassHeader","Info","parse_FilePass","Type","RTF","rtf_to_sheet","rtf_to_sheet_str","rowtf","rtfre","last_index","lastIndex","rtf_to_workbook","sheet_to_rtf","hex2RGB","rgb2HSL","G","H6","L2","hsl2RGB","hsl","h6","rgb_tint","hex","DEF_MDW","MDW","px","char2width","chr","coll","customWidth","DEF_PPI","PPI","pt","parse_borders","themes","Borders","border","diagonalUp","diagonalDown","parse_fills","Fills","bgColor","indexed","fgColor","parse_fonts","Fonts","bold","italic","underline","condense","extend","vertAlign","scheme","themeElements","clrScheme","parse_numFmts","NumberFmt","formatCode","cellXF_uint","cellXF_bool","parse_cellXfs","xf","CellXf","alignment","vertical","horizontal","textRotation","indent","wrapText","numFmtRegex","cellXfRegex","fillsRegex","fontsRegex","bordersRegex","main","parse_BrtFmt","stFmtCode","parse_BrtFont","bls","bCharSet","charset","STY","XLSBFillPTNames","parse_BrtFill","parse_BrtXF","ixfeParent","ifmt","parse_BrtBorder","THEME","XLSXThemeClrScheme","parse_clrScheme","lastClr","parse_fontScheme","parse_fmtScheme","clrsregex","fntsregex","fmtsregex","parse_themeElements","themeltregex","parse_theme_xml","write_theme","Themes","themeXLSX","parse_Theme","dwThemeVersion","themeXML","parse_ColorTheme","parse_FullColorExt","xclrType","nTintShade","xclrValue","parse_IcvXF","parse_XFExtGradient","parse_ExtProp","extType","parse_XFExt","cexts","ext","parse_BrtCalcChainItem$","IMG","DRAW","CMNT","parse_BrtBeginComment","iauthor","rfx","parse_BrtCommentAuthor","DS","MS","rcregex","rcbase","rcfunc","fstr","crefregex","$0","$4","$5","delta","shift_formula_xlsx","_xlfn","parseread1","parse_ColRelU","parse_RgceArea","parse_RgceArea_BIFF2","parse_RgceAreaRel","parse_RgceLoc","parse_RgceLoc_BIFF2","parse_RgceElfLoc","fQuoted","parse_RgceLocRel","parse_RgceLocRel_BIFF2","cl","rl","parse_PtgArea","parse_PtgArea3d","ixti","parse_PtgAreaErr","parse_PtgAreaErr3d","parse_PtgAreaN","parse_PtgArray","parse_PtgAttrBaxcel","bitSemi","bitBaxcel","parse_PtgAttrChoose","parse_PtgAttrGoto","bitGoto","parse_PtgAttrIf","bitIf","parse_PtgAttrIfError","parse_PtgAttrSemi","parse_PtgAttrSpaceType","parse_PtgAttrSpace","parse_PtgAttrSpaceSemi","parse_PtgRef","parse_PtgRefN","parse_PtgRef3d","parse_PtgFunc","iftab","FtabArgc","Ftab","parse_PtgFuncVar","cparams","tab","parsetab","Cetab","parse_PtgAttrSum","parse_PtgExp","parse_PtgErr","parse_PtgInt","parse_PtgBool","parse_PtgNum","parse_PtgStr","parse_SerAr","parse_PtgExtraMem","count","parse_PtgExtraArray","parse_PtgName","nameindex","parse_PtgNameX","parse_PtgNameX_BIFF5","parse_PtgMemArea","parse_PtgMemFunc","parse_PtgRefErr","parse_PtgRefErr3d","parse_PtgMemErr","parse_PtgMemNoMem","parse_PtgTbl","parse_PtgElfLoc","parse_PtgElfNoop","parse_PtgElfCol","parse_PtgElfColS","parse_PtgElfColSV","parse_PtgElfColV","parse_PtgElfLel","parse_PtgElfRadical","parse_PtgElfRadicalLel","parse_PtgElfRadicalS","parse_PtgElfRw","parse_PtgElfRwV","PtgListRT","parse_PtgList","coltype","parse_PtgSxName","parse_PtgSheet","parse_PtgEndSheet","parse_PtgMemAreaN","parse_PtgMemNoMemN","parse_PtgAttrNoop","PtgTypes","PtgDupes","Ptg18","Ptg19","parse_RgbExtra","parse_Rgce","ptgs","stringify_array","PtgBinOp","PtgAdd","PtgConcat","PtgDiv","PtgEq","PtgGe","PtgGt","PtgLe","PtgLt","PtgMul","PtgNe","PtgPower","PtgSub","quoteCharacters","formula_quote_sheet_name","sname","get_ixti_raw","supbooks","XTI","SID","get_ixti","ixtiraw","stringify_formula","stack","nameidx","last_sp","sp","fflen","argc","lbl","names","XLSXFutureFunctions","externbook","bookidx","ixtidata","lp","rp","sharedf","parsedf","fnd","arrayf","PtgNonDisp","_left","rgcb","parse_XLSCellParsedFormula","parse_FormulaValue","parse_Formula","cbf","shared","parse_XLSBParsedFormula","parse_XLSBArrayParsedFormula","parse_XLSBCellParsedFormula","parse_XLSBNameParsedFormula","parse_XLSBSharedParsedFormula","ods_to_csf_formula","csf_to_ods_formula","ods_to_csf_3D","csf_to_ods_3D","_ssfopts","WS","safe_format","fmtid","fillid","raw_rgb","cellregex","rowregex","isregex","refregex","match_v","match_f","parse_BrtRowHdr","parse_BrtWsDim","parse_BrtWsFmtInfo","parse_BrtWsProp","above","parse_BrtCellBlank","parse_BrtShortBlank","parse_BrtCellBool","fBool","parse_BrtShortBool","parse_BrtCellError","bError","parse_BrtShortError","parse_BrtCellIsst","parse_BrtShortIsst","parse_BrtCellReal","parse_BrtShortReal","parse_BrtCellRk","parse_BrtShortRk","parse_BrtCellSt","parse_BrtShortSt","parse_BrtFmlaBool","cellFormula","parse_BrtFmlaError","parse_BrtFmlaNum","parse_BrtFmlaString","parse_BrtMergeCell","parse_BrtHLink","relId","tooltip","parse_BrtPane","parse_BrtArrFmla","fAlwaysCalc","parse_BrtShrFmla","BrtMarginKeys","parse_BrtMargins","margins","parse_BrtBeginWsView","parse_BrtDVal","parse_BrtDVal14","CHART","CHARTEX","CS","parse_BrtCsProp","badchars","check_ws_name","_good","parse_BrtBundleSh","Hidden","iTabID","strRelID","parse_BrtWbProp","defaultThemeVersion","strName","CodeName","autoCompressPictures","backupFile","checkCompatibility","filterPrivacy","hidePivotFieldList","promptedSolutions","publishItems","refreshAllConnections","saveExternalLinkValues","showBorderUnselectedTables","showInkAnnotation","showObjects","showPivotChartFilter","updateLinks","parse_BrtName","Ptg","Sheet","Comment","xlml_normalize","xlmlregex","XLSBRecordEnum","XLSBRE","XLSRecordEnum","HTML_","html_to_sheet","mtch","mtch2","hd","cells","midx","_merge","colspan","rowspan","html_to_book","make_html_row","make_html_preamble","_BEGIN","_END","sheet_to_html","_row","BEGIN","END","_preamble","sheet_add_dom","or_R","or_C","getElementsByTagName","is_dom_element_hidden","elts","hasAttribute","innerHTML","Aelts","Aelti","parse_dom_table","table_to_book","get_computed_style","get_get_computed_style_function","ownerDocument","defaultView","parse_text_p","number_formats","seconds","era","quarter","write_text_p","null_cell_xml","covered_cell_xml","write_ws","wb","marr","mi","ods","ROWS","skip","textp","_Fref","text_p","_tgt","write_automatic_styles_ods","cidx","colobj","ridx","write_sheet_index","write_obj_str","sheet_to_csv","sheet_to_txt","fix_opts_func","defaults","make_json_row","defval","isempty","__rowNum__","rawNumbers","outi","counter","CC","blankrows","qreg","make_csv_row","FS","txt","forceQuotes","endregex","skipHidden","strip","sheet_to_formulae","cmds","sheet_add_json","js","skipHeader","JS","sheet_get_cell","json_to_sheet","get_formulae","make_csv","make_json","make_formulae","table_to_sheet","sheet_to_row_object_array","add_consts","get_default","ws_get_cell_stub","RC","wb_sheet_idx","sh","book_new","book_append_sheet","book_set_sheet_visibility","vis","Workbook","cell_set_number_format","cell_set_hyperlink","cell_set_internal_link","cell_add_comment","author","sheet_set_array_formula","rng","rngstr","VueExcelFilter","PanelFilter","PanelSetting","PanelFind","disablePanelFilter","noFinding","noFindingNext","freeSelect","page","enterToSouth","autocompleteCount","readonlyStyle","remember","register","allowAddCol","addColumn","newIfBottom","noRecordIsRead","readonlyColumnDetected","columnHasValidationError","rowHasValidationError","noMatchedColumnName","invalidInputValue","missingKeyColumn","recordFilter","tableContent","systable","colgroupTr","labelTr","filterTr","recordBody","prevSelect","rowIndex","currentRecord","currentRowPos","currentColPos","currentField","currentCell","inputBox","inputSquare","colHash","mousein","inputBoxChanged","calCellLeft","calCellTop","frontdrop","redo","lazyTimeout","lazyBuffer","hScroller","leftMost","showDatePicker","lastFilterTime","showFilteredOnly","dataset","setting","setter","current","local","newFields","$forceUpdate","lazy","deep","winResize","winPaste","winKeydown","winKeyup","winScroll","saved","moveInputSquare","refresh","registerColumn","hashCode","insertColumn","colname","keyField","allowKeys","mandatory","lengthLimit","textTransform","initStyle","toValue","colDef","newColumn","autoRegisterAllColumns","widths","tabStop","refreshPageSize","$id","filterColumnList","includes","endsWith","startsWith","reviseSelectedAfterTableChange","calSummary","th","localeDate","getKeys","setFilter","filterText","clearFilter","columnSuppress","showCols","columnAutoWidth","doFields","showDatePickerDiv","dpContainer","innerHeight","innerWidth","inputCellWrite","calVScroll","fullHeight","ratio","buttonTop","vScrollButton","mouseY","saveButtonTop","vsbMouseMove","vsbMouseUp","buttons","scrollLeft","recPos","fullWidth","viewWidth","mouseX","sleft","fleft","clientX","sbMouseMove","sbMouseUp","hScroll","tableUnseenWidth","lastTop","lastLeft","selectionStart","moveWest","showTop","moveNorth","moveEast","moveSouth","selectionEnd","inputBoxComplete","calAutocompleteList","elm","css","curCol","parentElement","pageX","getStyleVal","padLeft","padRight","curColWidth","padding","colSepMouseMove","colSepMouseUp","borderRight","addColBtnTimeout","localStorage","location","pathname","doFindNext","findPageTop","contentEditable","completeHeaderChange","which","sorting","scrollerUnseenWidth","scrollerWidth","footerRow","controlHeight","getSetting","colWidth","disablePanelSetting","importFile","click","importCallback","importErrorCallback","errCb","clearAllSelected","fileReader","onload","onerror","readAsBinaryString","selectedOnly","conv","ws1","getSelectedRecords","getSelection","removeAllRanges","selectRecord","toggleSelectAllRecords","temp","toggleSelectRecord","unSelectRecord","selectRecordByKeys","selectRecordById","moveTo","moveToNorthWest","goColPos","moveToNorthEast","moveToSouthWest","goRowPos","moveToSouthEast","moveToWest","moveToEast","newRecord","tipTimeout","cellMouseOut","squareSavedLeft","zIndex","cellRect","boundRect","recalAutoCompleteList","undoTransaction","transaction","valueRowPos","selectAfterDone","noLastPage","deleteSelectedRecords","deleteRecord","isUndo","updateSelectedRows","tempKey","lazyBuf","hash","textAlign","init","_autocomplete","self","_readonly","data_object","editData","editRec","selectedRows","items","fldType","grid","VBtn","VContainer","VIcon"],"mappings":"kHAAA,yBAA6Z,EAAG,G,sFCAha,yBAA+Z,EAAG,G,6FCAla,IAAIA,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,cAAc,CAACE,MAAM,CAAC,MAAQ,KAAK,CAACF,EAAG,mBAAmB,CAACG,IAAI,OAAOD,MAAM,CAAC,gBAAgB,GAAG,aAAaN,EAAIQ,WAAWC,GAAG,CAAC,OAAST,EAAIU,UAAUC,MAAM,CAACC,MAAOZ,EAAS,MAAEa,SAAS,SAAUC,GAAMd,EAAIe,MAAMD,GAAKE,WAAW,UAAU,CAAChB,EAAIiB,GAAIjB,EAAW,SAAE,SAASkB,EAAEC,GAAG,OAAOf,EAAG,mBAAmB,CAACgB,IAAI,UAAYD,EAAEZ,IAAI,WAAWc,UAAS,EAAKf,MAAM,CAAC,MAAQY,EAAEN,MAAM,MAAQM,EAAEI,KAAK,MAAQtB,EAAIuB,YAAY,QAAUvB,EAAIwB,WAAWN,GAAG,KAAOlB,EAAIyB,aAAaP,SAAQd,EAAG,QAAQ,CAACsB,YAAY,GAAGpB,MAAM,CAAC,KAAO,GAAG,UAAU,GAAG,MAAQ,UAAUG,GAAG,CAAC,MAAQ,SAASkB,GAAQ,OAAO3B,EAAI4B,YAAY,CAACxB,EAAG,SAAS,CAACE,MAAM,CAAC,MAAQ,SAAS,CAACN,EAAI6B,GAAG,mBAAmB,IAAI,IAAI,IAC/vBC,EAAkB,G,YCDlB,EAAS,WAAa,IAAI9B,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAC2B,YAAY,mBAAmBC,MAAM,CAAEC,QAAS,eAAgB,YAAajC,EAAIkC,QAAS,CAAC9B,EAAG,MAAM,CAAC2B,YAAY,qBAAqB,CAAE/B,EAAImC,eAAeC,mBAA+C,GAA1BpC,EAAIqC,YAAYC,OAAalC,EAAG,MAAM,CAAC2B,YAAY,WAAWC,MAAM,CAAEO,OAAQvC,EAAIwC,SAAU,OAAS,SAAU,CAACxC,EAAI6B,GAAG,IAAI7B,EAAIyC,GAAGzC,EAAImC,eAAeC,mBAAmB,OAAOpC,EAAI0C,KAAKtC,EAAG,MAAM,CAACG,IAAI,eAAewB,YAAY,gBAAgBY,MAAM,CAAC,YAAa3C,EAAIwC,UAAU/B,GAAG,CAAC,OAAST,EAAI4C,YAAY,UAAY5C,EAAI6C,UAAU,SAAW7C,EAAI8C,WAAW,CAAC1C,EAAG,QAAQ,CAACG,IAAI,WAAWwB,YAAY,WAAWY,MAAM,CAAC,YAAa3C,EAAI+C,UAAUrB,YAAY,CAAC,eAAe,QAAQ,MAAQ,KAAKpB,MAAM,CAAC,GAAK,WAAW,YAAc,iEAAiE,WAAa,mEAAmE,CAACF,EAAG,WAAW,CAACA,EAAG,MAAM,CAACsB,YAAY,CAAC,MAAQ,UAAU1B,EAAIiB,GAAIjB,EAAU,QAAE,SAASgD,EAAKC,GAAG,OAAO7C,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,OAAQoC,EAAKK,UAAWrC,WAAW,oBAAoBI,IAAI6B,EAAEjB,MAAM,CAAEE,MAAOc,EAAKd,YAAalC,EAAIsD,UAAUC,aAAevD,EAAIsD,UAAUE,OAAQpD,EAAG,MAAM,CAACsB,YAAY,CAAC,MAAQ,UAAU1B,EAAI0C,MAAM,GAAGtC,EAAG,QAAQ,CAAC2B,YAAY,eAAe,CAAC3B,EAAG,KAAK,CAACA,EAAG,KAAK,CAAC2B,YAAY,mCAAmCY,MAAM,CAACc,KAAMzD,EAAI+C,UAAUrB,YAAY,CAAC,IAAM,KAAKjB,GAAG,CAAC,UAAY,SAASkB,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,OAAO,GAAGlC,EAAOP,IAAI,CAAC,OAAO,eAAiC,WAAYO,GAA4B,IAAlBA,EAAOmC,OAAvC,KAA2E9D,EAAI+D,eAAepC,IAAS,YAAc,SAASA,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIiE,aAAatC,MAAW,CAACvB,EAAG,OAAO,CAACsB,YAAY,CAAC,MAAQ,SAAS,CAAE1B,EAAIkE,cAAc,EAAG9D,EAAG,MAAM,CAAC2B,YAAY,+CAA+CzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,eAAe,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,+XAA+XF,EAAG,MAAM,CAAC2B,YAAY,uCAAuCzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,OAAO,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,iWAAiWN,EAAIiB,GAAIjB,EAAU,QAAE,SAASgD,EAAKC,GAAG,OAAO7C,EAAG,KAAK,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,OAAQoC,EAAKK,UAAWrC,WAAW,oBAAoBI,IAAK,MAAQ6B,EAAGN,MAAM,CAAC,gBAAiB3C,EAAImE,SAASlB,GAAkB,GAAbjD,EAAIoE,QACzwG,gBAAiBpE,EAAImE,SAASlB,IAAmB,GAAdjD,EAAIoE,QACvC,gBAAiBpB,EAAKqB,QAAQrC,MAAM,CAAEsC,KAAMtB,EAAKsB,MAAOhE,MAAM,CAAC,QAAU2C,IAAMjD,EAAIuE,OAAOjC,OAAS,GAAKtC,EAAIsD,UAAUC,aAAevD,EAAIsD,UAAUE,OAAS,EAAG,GAAG/C,GAAG,CAAC,UAAY,SAASkB,GAAQ,OAAO3B,EAAIwE,YAAY7C,EAAQsB,IAAI,YAAc,SAAStB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIyE,iBAAiBzB,MAAS,CAAC5C,EAAG,MAAM,CAACuC,MAAM,CAAC,cAAe3C,EAAI0E,aAAazB,KAAK,CAAC7C,EAAG,OAAO,CAACuC,MAAM,CAAC,oBAAqB3C,EAAI2E,cAAcC,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAI6E,YAAY7B,EAAK8B,MAAO9B,SAAY5C,EAAG,MAAM,CAAC2B,YAAY,UAAUtB,GAAG,CAAC,UAAYT,EAAI+E,gBAAgB,UAAY/E,EAAIgF,gBAAgB,SAAWhF,EAAIiF,iBAAiB,CAAC7E,EAAG,MAAM,CAAC2B,YAAY,eAAe,CAAC/B,EAAI6B,GAAG,iBAAgB,GAAGzB,EAAG,KAAK,CAACuC,MAAM,CAACc,MAAOzD,EAAIQ,YAAY,CAACJ,EAAG,KAAK,CAAC2B,YAAY,kCAAkCY,MAAM,CAACc,KAAMzD,EAAI+C,UAAUrB,YAAY,CAAC,iBAAiB,SAAS,QAAU,KAAKM,MAAM,CAAEkD,IAAKlF,EAAImF,YAAc,MAAO1E,GAAG,CAAC,MAAQ,SAASkB,GAAQ3B,EAAI0E,aAAe,MAAM,CAAEU,OAAOC,KAAKrF,EAAI0E,cAAcpC,OAAS,EAAGlC,EAAG,OAAO,CAACA,EAAG,MAAM,CAAC2B,YAAY,yCAAyCzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,SAAS,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,0VAA0VN,EAAI0C,OAAO1C,EAAIiB,GAAIjB,EAAU,QAAE,SAASgD,EAAKC,GAAG,OAAO7C,EAAG,mBAAmB,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,OAAQoC,EAAKK,UAAWrC,WAAW,oBAAoBI,IAAK,OAAS6B,EAAG1C,IAAK,UAAayC,EAAS,KAAG3B,UAAS,EAAKU,YAAY,gBAAgBY,MAAM,CAAC,gBAAiBK,EAAKqB,QAAQrC,MAAM,CAAEsC,KAAMtB,EAAKsB,MAAOhE,MAAM,CAAC,QAAU2C,IAAMjD,EAAIuE,OAAOjC,OAAS,EAAG,EAAG,GAAG3B,MAAM,CAACC,MAAOZ,EAAI0E,aAAazB,GAAIpC,SAAS,SAAUC,GAAMd,EAAIsF,KAAKtF,EAAI0E,aAAczB,EAAGnC,IAAME,WAAW,yBAAwB,KAAKZ,EAAG,QAAQ,CAACK,GAAG,CAAC,UAAYT,EAAIuF,YAAY,CAAEvF,EAAImC,eAAeC,mBAA+C,GAA1BpC,EAAIqC,YAAYC,OAAalC,EAAG,KAAK,CAACA,EAAG,KAAK,CAACsB,YAAY,CAAC,OAAS,OAAO,iBAAiB,SAAS,aAAa,UAAUpB,MAAM,CAAC,QAAU,YAAYN,EAAIiB,GAAIjB,EAAe,aAAE,SAASwF,EAAOC,GAAQ,OAAOrF,EAAG,KAAK,CAACgB,IAAIqE,EAAO9C,MAAM,CAAC+C,OAAsD,qBAAvC1F,EAAI2F,SAAS3F,EAAI4F,QAAUH,IAAyBzD,MAAOhC,EAAI6F,SAASL,IAAU,CAACpF,EAAG,KAAK,CAAC2B,YAAY,wBAAwBY,MAAM,CAC5kFc,KAAMzD,EAAI+C,SACV+C,MAAO9F,EAAI+F,OAAQ,OAAUP,EAAU,MACvClF,MAAM,CAAC,GAAM,OAAUkF,EAAU,IAAG,IAAMC,GAAQhF,GAAG,CAAC,UAAYT,EAAIgG,gBAAgB,MAAQhG,EAAIiG,gBAAgB,CAAC7F,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAIkG,YAAYlG,EAAI4F,QAAUH,EAAS,EAAGD,SAAcxF,EAAIiB,GAAIjB,EAAU,QAAE,SAASgD,EAAKC,GAAG,MAAO,CAAC7C,EAAG,KAAK,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,OAAQoC,EAAKK,UAAWrC,WAAW,oBAAoBI,IAAI6B,EAAEN,MAAM,CACpXwD,SAAUnD,EAAKmD,SACfL,MAAO9F,EAAIoG,OAAQ,MAASZ,EAAU,IAAI,IAAOxC,EAAS,MAC1DqD,KAAMrD,EAAKqD,KACXX,OAAQ1C,EAAKsD,QACbC,SAAuB,QAAbvD,EAAKU,KACf,gBAAiBV,EAAKqB,QACtBrC,MAAOoD,OAAOoB,OAAOxG,EAAIyG,UAAUjB,EAAQxC,GAAOhD,EAAI0G,sBAAsB1D,IAAQ1C,MAAM,CAAC,GAAM,MAASkF,EAAU,IAAI,IAAOxC,EAAS,KAAG,UAAWyC,EAAS,IAAOzC,EAAS,MAAIvC,GAAG,CAAC,UAAYT,EAAI2G,cAAc,UAAY3G,EAAI4G,gBAAgB,CAAC5G,EAAI6B,GAAG7B,EAAIyC,GAAGO,EAAK6D,OAAOrB,EAAOxC,EAAKG,eAAenD,EAAIsD,UAAUC,aAAevD,EAAIsD,UAAUE,OAAQpD,EAAG,KAAK,CAAC2B,YAAY,aAAa/B,EAAI0C,MAAM,OAAM,GAAGtC,EAAG,QAAQ,CAACA,EAAG,KAAK,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAIqC,YAAYC,QAAUtC,EAAI8G,WAAY9F,WAAW,sCAAsC,CAACZ,EAAG,KAAK,CAAC2B,YAAY,0BAA0B/B,EAAIiB,GAAIjB,EAAU,QAAE,SAAS+G,EAAM9D,GAAG,MAAO,CAAC7C,EAAG,KAAK,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,OAAQmG,EAAM1D,UAAWrC,WAAW,qBAAqBI,IAAK,IAAM6B,EAAGlB,YAAY,cAAcY,MAAM,CAC5yB,gBAAiBoE,EAAM1C,OACvB,kBAAmBpB,EAAE,EAAIjD,EAAIuE,OAAOjC,QAAUtC,EAAIuE,OAAOtB,EAAE,GAAG+D,QAC9D,kBAAmBD,EAAMC,SACzBhF,MAAOhC,EAAI0G,sBAAsBK,GAAQzG,MAAM,CAAC,QAAU2C,IAAMjD,EAAIuE,OAAOjC,OAAS,GAAKtC,EAAIsD,UAAUC,aAAevD,EAAIsD,UAAUE,OAAS,EAAG,IAAI,CAACxD,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAIgH,QAAQD,EAAM5D,eAAc,KAAKnD,EAAIiH,GAAG,YAAY,GAAG7G,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAO,IAAEgB,WAAW,QAAQT,IAAI,UAAUwB,YAAY,YAAY,CAAC/B,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAIkH,QAAQ9G,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAW,QAAEgB,WAAW,YAAYT,IAAI,cAAcwB,YAAY,eAAetB,GAAG,CAAC,UAAYT,EAAImH,mBAAmB,CAAC/G,EAAG,MAAM,CAACsB,YAAY,CAAC,SAAW,WAAW,OAAS,OAAO,QAAU,gBAAgB,CAACtB,EAAG,MAAM,CAAC2B,YAAY,cAAc3B,EAAG,WAAW,CAACG,IAAI,WAAWwB,YAAY,YAAYC,MAAM,CAAEoF,QAASpH,EAAIqH,cAAe/G,MAAM,CAAC,GAAK,WAAW,KAAO,GAAG,aAAe,MAAM,YAAc,MAAM,eAAiB,MAAM,WAAaN,EAAIsH,YAAY7G,GAAG,CAAC,KAAOT,EAAIuH,aAAa,UAAYvH,EAAIwH,kBAAkB,UAAYxH,EAAIyH,yBAAyBrH,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAkB,eAAEgB,WAAW,mBAAmBT,IAAI,cAAcmB,YAAY,CAAC,UAAU,KAAK,SAAW,UAAU,CAACtB,EAAG,cAAc,CAACG,IAAI,aAAaD,MAAM,CAAC,OAAS,GAAG,UAAY,UAAUG,GAAG,CAAC,MAAQT,EAAI0H,iBAAiB/G,MAAM,CAACC,MAAOZ,EAAiB,cAAEa,SAAS,SAAUC,GAAMd,EAAI2H,cAAc7G,GAAKE,WAAW,oBAAoB,GAAGZ,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAc,WAAEgB,WAAW,eAAeT,IAAI,YAAYwB,YAAY,cAAc,CAAC3B,EAAG,MAAM,CAAC2B,YAAY,kDAAkDzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,UAAU,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,8kBAA+kBN,EAAIsD,UAAUC,aAAevD,EAAIsD,UAAUE,OAAQpD,EAAG,MAAM,CAACG,IAAI,UAAUwB,YAAY,WAAWC,MAAM,CAAEkD,IAAOlF,EAAIsD,UAAa,IAAI,KAAOE,OAAUxD,EAAIsD,UAAgB,OAAI,MAAQ7C,GAAG,CAAC,UAAYT,EAAI4H,cAAc,CAACxH,EAAG,MAAM,CAACG,IAAI,gBAAgBwB,YAAY,kBAAkBC,MAAM,CAAE6F,UAAa7H,EAAIsD,UAAmB,UAAI,KAAOE,OAAUxD,EAAIsD,UAAsB,aAAI,MAAQ7C,GAAG,CAAC,UAAYT,EAAI8H,eAAe,CAAC1H,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAIsD,UAAgB,OAAEtC,WAAW,qBAAqBe,YAAY,SAAS6C,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAIsD,UAAUyE,eAAe/H,EAAI0C,KAAKtC,EAAG,KAAK,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAIgI,SAAWhI,EAAIiI,mBAAmB3F,OAAQtB,WAAW,yCAAyCT,IAAI,eAAewB,YAAY,wBAAwB/B,EAAIiB,GAAIjB,EAAsB,oBAAE,SAASgD,EAAK7B,GAAG,OAAOf,EAAG,KAAK,CAACgB,IAAID,EAAEY,YAAY,sBAAsBY,MAAM,CAAC+C,OAAQ1F,EAAIkI,qBAAuB/G,GAAGV,GAAG,CAAC,UAAY,SAASkB,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,OAAO,GAAGlC,EAAOP,IAAI,CAAC,OAAO,eAAiC,WAAYO,GAA4B,IAAlBA,EAAOmC,OAAvC,MAAoEnC,EAAOqC,iBAAwBhE,EAAImI,sBAAsBxG,EAAOyG,OAAOC,YAAa1G,OAAW,CAAC3B,EAAI6B,GAAG7B,EAAIyC,GAAGO,SAAW,GAAG5C,EAAG,MAAM,CAACG,IAAI,SAASwB,YAAY,qBAAqBY,MAAM,CAACc,KAAMzD,EAAIwC,UAAUd,YAAY,CAAC,SAAW,YAAYjB,GAAG,CAAC,UAAYT,EAAIsI,cAAc,CAAClI,EAAG,MAAM,CAACG,IAAI,UAAUwB,YAAY,WAAWtB,GAAG,CAAC,UAAYT,EAAIuI,eAAenI,EAAG,OAAO,CAAC2B,YAAY,eAAe3B,EAAG,OAAO,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,OAAQZ,EAAIwI,SAAUxH,WAAW,cAAcU,YAAY,CAAC,SAAW,WAAW,KAAO,SAAS,CAACtB,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAesG,WAAWzI,EAAI4F,QAAU,EAAG5F,EAAI0I,WAAY1I,EAAIe,MAAMuB,cAAclC,EAAG,OAAO,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,OAAQZ,EAAIwI,UAAYxI,EAAI0I,WAAa1I,EAAI4F,QAAU5F,EAAIe,MAAMuB,OAAQtB,WAAW,sDAAsD,CAAEhB,EAAc,WAAE,CAACI,EAAG,MAAM,CAAC2B,YAAY,kDAAkDzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,UAAU,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,0kBAA0kBN,EAAI6B,GAAG,KAAKzB,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAewG,gBAAgB,CAACvI,EAAG,IAAI,CAACuC,MAAM,CAACiG,SAAU5I,EAAI4F,SAAW,GAAGnF,GAAG,CAAC,UAAYT,EAAI6I,YAAY,CAACzI,EAAG,MAAM,CAAC2B,YAAY,gDAAgDzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,gBAAgB,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,8LAA8LN,EAAI6B,GAAG,KAAKzB,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe2G,YAAY9I,EAAI6B,GAAG,OAAOzB,EAAG,IAAI,CAACuC,MAAM,CAACiG,SAAU5I,EAAI4F,SAAW,GAAGnF,GAAG,CAAC,UAAYT,EAAI+I,WAAW,CAAC3I,EAAG,MAAM,CAAC2B,YAAY,2CAA2CzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,WAAW,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,2OAA2ON,EAAI6B,GAAG,KAAKzB,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe6G,eAAehJ,EAAI6B,GAAG,OAAOzB,EAAG,IAAI,CAACuC,MAAM,CAACiG,SAAU5I,EAAI4F,QAAU5F,EAAIiJ,UAAYjJ,EAAIe,MAAMuB,QAAQ7B,GAAG,CAAC,UAAYT,EAAIkJ,WAAW,CAAC9I,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAegH,SAASnJ,EAAI6B,GAAG,KAAKzB,EAAG,MAAM,CAAC2B,YAAY,0CAA0CzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,UAAU,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,sOAAsON,EAAI6B,GAAG,OAAOzB,EAAG,IAAI,CAACuC,MAAM,CAACiG,SAAU5I,EAAI4F,QAAU5F,EAAIiJ,UAAYjJ,EAAIe,MAAMuB,QAAQ7B,GAAG,CAAC,UAAYT,EAAIoJ,WAAW,CAAChJ,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAekH,SAASrJ,EAAI6B,GAAG,KAAKzB,EAAG,MAAM,CAAC2B,YAAY,+CAA+CzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,eAAe,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,mMAAmM,GAAGF,EAAG,OAAO,CAACsB,YAAY,CAAC,SAAW,WAAW,MAAQ,QAAQ,CAACtB,EAAG,IAAI,CAACuC,MAAM,CAACiG,UAAW5I,EAAIsJ,kBAAoBtJ,EAAIkE,eAAiB,GAAGzD,GAAG,CAAC,UAAYT,EAAIuJ,mBAAmB,CAACnJ,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeqH,YAAY7D,aAAavF,EAAG,OAAO,CAAC4B,MAAM,CAAEyH,MAAOzJ,EAAIkE,cAAc,EAAI,MAAO,YAAa,CAAClE,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAIkE,oBAAoBlE,EAAI6B,GAAG,OAAOzB,EAAG,IAAI,CAACuC,MAAM,CAACiG,SAAqC,OAA3B5I,EAAI0J,oBAA6BjJ,GAAG,CAAC,UAAYT,EAAI2J,mBAAmB,CAACvJ,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeqH,YAAYI,aAAaxJ,EAAG,OAAO,CAAC4B,MAAM,CAAEyH,MAAOzJ,EAAIe,MAAMuB,SAAWtC,EAAI6J,cAAcvH,OAAS,MAAO,YAAa,CAACtC,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAIe,MAAMuB,aAAatC,EAAI6B,GAAG,OAAOzB,EAAG,IAAI,CAACuC,MAAM,CAACiG,UAAU,IAAO,CAACxI,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeqH,YAAYM,WAAW1J,EAAG,OAAO,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAI6J,cAAcvH,iBAAiBlC,EAAG,QAAQ,CAACG,IAAI,aAAamB,YAAY,CAAC,SAAW,WAAW,IAAM,IAAI,KAAO,IAAI,MAAQ,IAAI,OAAS,IAAI,QAAU,IAAI,UAAU,MAAMpB,MAAM,CAAC,KAAO,OAAO,OAAS,2BAA2BG,GAAG,CAAC,MAAQT,EAAI+J,iBAAiB,OAAS/J,EAAIgK,YAAY5J,EAAG,eAAe,CAACG,IAAI,cAAcD,MAAM,CAAC,iBAAiBN,EAAIiK,aAAa,kBAAkBjK,EAAImC,kBAAkB/B,EAAG,gBAAgB,CAACG,IAAI,eAAeD,MAAM,CAAC,kBAAkBN,EAAImC,gBAAgBxB,MAAM,CAACC,MAAOZ,EAAU,OAAEa,SAAS,SAAUC,GAAMd,EAAIuE,OAAOzD,GAAKE,WAAW,YAAYZ,EAAG,aAAa,CAACG,IAAI,YAAYD,MAAM,CAAC,kBAAkBN,EAAImC,mBAAmB,MACp9S,EAAkB,G,qWCjBlB,EAAS,WAAa,IAAInC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,KAAKJ,EAAIkK,GAAG,CAAC3J,IAAI,OAAOwB,YAAY,qBAAqBC,MAAOhC,EAAgB,aAAEM,MAAM,CAAC,GAAKN,EAAImK,IAAI,gBAAkB,GAAG,YAAc,iEAAiE,WAAa,iEAAiE,aAAe,MAAM,YAAc,MAAM,eAAiB,MAAM,WAAa,QAAQ,SAAW,MAAM1J,GAAG,CAAC,MAAQT,EAAIoK,QAAQ,KAAOpK,EAAIqK,OAAO,QAAU,CAAC,SAAS1I,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAyB,KAAjBhC,EAAOkC,QAAgClC,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAiB,KAAczK,EAAI0K,QAAQ/I,GAA5G,MAAqH,SAASA,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAyB,KAAjBhC,EAAOkC,QAAgClC,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAiB,KAAczK,EAAI2K,QAAQhJ,GAA5G,MAAqH,SAASA,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,QAAQ,GAAGlC,EAAOP,IAAI,UAA4BO,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAjE,KAAgGzK,EAAI4K,SAASjJ,KAAU,MAAQ,SAASA,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,SAAS,CAAC,EAAE,IAAIlC,EAAOP,IAAI,CAAC,YAAY,SAAS,SAA2BO,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAjE,KAAgGzK,EAAI6K,UAAUlJ,IAAS,UAAY3B,EAAI8K,UAAU,UAAY9K,EAAIuF,YAAYvF,EAAI+K,aACh8C,EAAkB,G,YCsBtB,GACEC,MAAO,CACLpK,MAAO,CAAX,wBACIqK,YAAa,CAAjB,0BAEEC,KALF,WAMI,MAAO,CACLf,IAAK,GACLpJ,MAAO,KACPoK,KAAM,KACNC,IAAK,KACLC,OAAQ,EACRC,KAAM,OAGVC,SAAU,CACRR,UADJ,WAEM,OAAO,iCACb,iBADA,IACQ,MAAR,gBAGIS,IANJ,WAOM,OAAIvL,KAAKwL,SACf,0BACa,IAETC,aAXJ,WAYM,OAAIzL,KAAKkL,KAAa,CAA5B,8BACA,KAGEQ,MAAO,CACL/K,MADJ,SACA,GACUgL,IAAW3L,KAAK4L,IAAIxD,cAC9B,iCAGEyD,QArCF,WAsCI7L,KAAKkK,IAAM,MAAQlK,KAAK8L,KAIxB9L,KAAKkL,KAAOlL,KAAK+L,MAAMb,KACvBlL,KAAKkL,KAAK9C,YAAcpI,KAAKW,MAG7BX,KAAKmL,IAAMnL,KAAKkL,KAAKc,WACrBhM,KAAKiM,MAAQjM,KAAKmL,IAAIa,WACtBhM,KAAKoL,OAASc,MAAMC,KAAKnM,KAAKmL,IAAIiB,UAAU1I,QAAQ1D,KAAKkL,MAAQ,EACjElL,KAAKqM,SAAWrM,KAAKiM,MAAMG,SAAS,GAAGA,SAASpM,KAAKoL,OAAS,IAEhEkB,QAAS,CACPC,YADJ,SACA,GACM,IAAN,uBACUvM,KAAKW,QAAU6L,GACzB,uBAEIC,QANJ,SAMA,GACUzM,KAAKgL,aACf,qBAEIb,QAVJ,WAUA,WACMuC,YAAW,WACT,EAAR,gCACQC,SAASC,YAAY,aAAa,EAAO,MACzC,EAAR,+BACQ,EAAR,yBACQ,EAAR,6EACA,IAEIxC,OAnBJ,SAmBA,GACMpK,KAAKuM,YAAYM,GACjB7M,KAAKqM,SAASS,UAAUC,OAAO,SAC/BF,EAAE1E,OAAO2E,UAAUC,OAAO,SAE5BtC,QAxBJ,SAwBA,GACM,IAAN,0BACM,GAAIoC,EAAE1E,OAAOC,cAAgB4E,EAAIC,YAAkC,IAApBD,EAAIE,YAAmB,CACpE,IAAR,2BAEQ,OADIC,GAAMA,EAAGpL,OAA8B,SAArBoL,EAAGpL,MAAMC,UAAoBmL,EAAKA,EAAGC,iBACtDD,GACAA,EAAGE,UAASF,EAAKA,EAAGC,iBACrBD,EAAGG,OAAOH,EAAGG,QACVH,GAHSA,IAMpBzC,QAnCJ,SAmCA,GACM,IAAN,0BACM,GAAImC,EAAE1E,OAAOC,cAAgB4E,EAAIC,YAAcD,EAAIE,aAAeL,EAAE1E,OAAOC,YAAY/F,OAAQ,CAC7F,IAAR,uBAEQ,OADI8K,GAAMA,EAAGpL,OAA8B,SAArBoL,EAAGpL,MAAMC,UAAoBmL,EAAKA,EAAGI,aACtDJ,GACAA,EAAGE,UAASF,EAAKA,EAAGI,aACrBJ,EAAGG,OAAOH,EAAGG,QACVH,GAHSA,EAKlB,OAAON,EAAE1E,QAEXwC,SA/CJ,SA+CA,GACMkC,EAAE9I,iBACF4I,SAASC,YAAY,aAAa,EAAO,MAEzC5M,KAAKuM,YAAYM,IAEnBjC,UArDJ,SAqDA,GACmC,KAAzBiC,EAAE1E,OAAOC,aACnB,mCAEIyC,UAzDJ,SAyDA,GACM7K,KAAKkL,KAAKnJ,MAAMyL,OAASxN,KAAKkL,KAAKuC,YAAcZ,EAAEa,QAAU,GAAK,UAAY,QAEhFpI,UA5DJ,SA4DA,cACuB,IAAbuH,EAAEhJ,QAAgB7D,KAAKkL,KAAKuC,YAAcZ,EAAEa,QAAU,KACxDb,EAAE9I,iBACF2I,YAAW,WAET,EAAV,yCACA,OC5IuR,I,wBCQnRiB,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,MAIa,EAAAA,E,QCnBX,EAAS,WAAa,IAAI5N,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAQ,KAAEgB,WAAW,SAASe,YAAY,cAAczB,MAAM,CAAC,GAAK,cAAcG,GAAG,CAAC,MAAQT,EAAI6N,aAAa,QAAU,SAASlM,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,MAAM,GAAGlC,EAAOP,IAAI,CAAC,MAAM,YAA8BO,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAjE,KAAgGzK,EAAI8N,UAAUnM,MAAW,CAACvB,EAAG,MAAM,CAACG,IAAI,cAAcwB,YAAY,cAAc,CAAC3B,EAAG,MAAM,CAAC2B,YAAY,eAAe,CAAC3B,EAAG,MAAM,CAAC2B,YAAY,mDAAmDzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,mBAAmB,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,qiBAAqiBF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe4L,0BAA0B3N,EAAG,MAAM,CAAC2B,YAAY,iBAAiB,CAAC3B,EAAG,MAAM,CAAC2B,YAAY,gBAAgB,CAAC3B,EAAG,SAAS,CAAC2B,YAAY,0BAA0BtB,GAAG,CAAC,MAAQ,SAASkB,GAAQ,OAAO3B,EAAIgO,KAAK,MAAM,CAAC5N,EAAG,MAAM,CAAC2B,YAAY,4CAA4CzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,kBAAkB,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,mnBAAmnBF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe8L,oBAAoB7N,EAAG,SAAS,CAAC2B,YAAY,2BAA2BtB,GAAG,CAAC,MAAQ,SAASkB,GAAQ,OAAO3B,EAAIgO,MAAM,MAAM,CAAC5N,EAAG,MAAM,CAAC2B,YAAY,8CAA8CzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,oBAAoB,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,inBAAinBF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe+L,uBAAuB9N,EAAG,MAAM,CAAC2B,YAAY,gBAAgB,CAAC3B,EAAG,MAAM,CAACA,EAAG,SAAS,CAAC2B,YAAY,qBAAqBtB,GAAG,CAAC,MAAQ,SAASkB,GAAQ3B,EAAImO,cAAgBnO,EAAImO,gBAAgB,CAACnO,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAIoO,WAAWhO,EAAG,MAAM,CAAC2B,YAAY,iBAAiBY,MAAM,CAAC0L,KAAMrO,EAAImO,eAAe,CAAC/N,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,OAAO,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeoM,WAAWnO,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,QAAQ,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeqM,iBAAiBpO,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,SAAS,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAesM,eAAerO,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,QAAQ,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeuM,kBAAkBtO,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,SAAS,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAewM,2BAA2BvO,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,QAAQ,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeyM,eAAexO,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,SAAS,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe0M,wBAAwBzO,EAAG,MAAM,CAAC2B,YAAY,sBAAsBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIsO,mBAAmB,QAAQ,CAAClO,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe2M,0BAA0B1O,EAAG,OAAO,CAAC2B,YAAY,iBAAiB,CAAC3B,EAAG,QAAQ,CAACG,IAAI,cAAcwB,YAAY,cAAczB,MAAM,CAAC,KAAO,OAAO,YAAcN,EAAImC,eAAe4M,aAAa,KAAO,GAAG,aAAe,MAAM,YAAc,MAAM,eAAiB,MAAM,WAAa,SAAStO,GAAG,CAAC,MAAQT,EAAIgP,cAAc,QAAU,SAASrN,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,QAAQ,GAAGlC,EAAOP,IAAI,UAA4BO,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAjE,KAAgGzK,EAAIiP,SAAStN,aAAkBvB,EAAG,MAAM,CAACA,EAAG,MAAM,CAACG,IAAI,YAAYwB,YAAY,cAAc/B,EAAIiB,GAAIjB,EAAIkP,8BAA8BC,MAAM,EAAGnP,EAAIiK,eAAe,SAASjH,EAAKoM,GAAG,OAAOhP,EAAG,MAAM,CAACgB,IAAIgO,EAAErN,YAAY,kBAAkBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIqP,kBAAkBrM,MAAS,CAAC5C,EAAG,QAAQ,CAAC2B,YAAY,iBAAiBzB,MAAM,CAAC,KAAO,cAAcF,EAAG,OAAO,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAGO,WAAa,GAAIhD,EAAIkP,8BAA8B5M,OAAO,IAAKlC,EAAG,MAAM,CAAC2B,YAAY,cAAcL,YAAY,CAAC,MAAQ,UAAU,CAACtB,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAemN,qBAAqBtP,EAAIiK,oBAAoBjK,EAAI0C,SAAStC,EAAG,MAAM,CAAC2B,YAAY,gBAAgB,CAAC3B,EAAG,SAAS,CAAC2B,YAAY,eAAetB,GAAG,CAAC,MAAQT,EAAIiP,WAAW,CAAC7O,EAAG,MAAM,CAAC2B,YAAY,oDAAoDzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,cAAc,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,wVAAwVF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeoN,mBAChlP,EAAkB,GCoFtB,GACEvE,MAAO,CACLf,aAAc,CAAlB,yBACI9H,eAAgB,CACduB,KAAM0B,OACNoK,QAFN,WAGQ,MAAO,CACLzB,oBAAqB,wBACrBE,cAAe,iBACfC,eAAgB,kBAChBK,KAAM,SACNC,WAAY,gBACZC,SAAU,cACVC,YAAa,oBACbC,qBAAsB,6BACtBC,SAAU,iBACVC,kBAAmB,0BACnBC,kBAAmB,uBACnBC,aAAc,gBACdO,qBAAsB,SAAhC,iDACUC,MAAO,YAKfrE,KAzBF,WA0BI,MAAO,CACLmD,MAAM,EACNF,cAAc,EACdxF,YAAY,EACZ8G,gBAAiB,KACjBC,YAAa,GACbC,qBAAsB,GACtBC,sBAAuB,KAG3BrE,SAAU,CACR2D,8BADJ,WAEM,IAAN,iCACM,OAAOjP,KAAK2P,sBAAsBC,QAAO,SAA/C,4CAEIzB,OALJ,WAMM,OAAN,2BACQ,IAAK,GACH,MAAO,IACT,IAAK,KACH,MAAO,IACT,IAAK,KACH,MAAO,IACT,IAAK,KACH,MAAO,IACT,QACE,OAAOnO,KAAK0P,wBAIpBpD,QAAS,CACPsB,aADJ,SACA,GAC0B,eAAhBf,EAAE1E,OAAO0H,IAAqB7P,KAAK6N,aAEzCE,KAJJ,SAIA,GACM/N,KAAK6N,YACL7N,KAAK8P,QAAQ/B,KAAKgC,EAAW/P,KAAKwP,gBAAgBpE,SAEpDiD,mBARJ,SAQA,GACMrO,KAAKkO,cAAe,EACpBlO,KAAK0P,qBAAuBM,EAC5BhQ,KAAK+L,MAAM0D,YAAYnC,SAEzB2C,0BAbJ,WAcM,IAAN,uBACA,4BACM9H,EAAO+H,aAAa,QAAS,SAAnC,uDAEIC,yBAlBJ,WAmBM,IAAN,uBACMhI,EAAOiI,gBAAgB,UAEzBrB,cAtBJ,WAsBA,WACUsB,OAAOC,OAAOC,aAAaF,OAAOC,OACtCD,OAAOC,MAAQ5D,YAAW,WACxB,EAAR,wCACA,MAEIsC,SA5BJ,WA6BM,IAAN,yDACMhP,KAAKwP,gBAAgB5D,IAAIxD,YAAcoI,EACvCxQ,KAAKwP,gBAAgBiB,MAAM,QAASD,GACpCxQ,KAAK6N,aAEPuB,kBAlCJ,SAkCA,GAEMpP,KAAKwP,gBAAgB5D,IAAIxD,YAAc,IAAMoI,EAC7CxQ,KAAKwP,gBAAgBiB,MAAM,QAAS,IAAMD,GAC1CxQ,KAAK6N,aAEP6C,UAxCJ,SAwCA,cACM1Q,KAAKwP,gBAAkBlP,EACvBN,KAAKyP,YAAc,GACnBzP,KAAK0P,qBAAuB,GAC5B1P,KAAK2P,sBAAwB,GAC7B3P,KAAK+L,MAAM0D,YAAY9O,MAAQ,GACa,IAAxCX,KAAKwP,gBAAgB5D,IAAIxD,cAC3BpI,KAAKwP,gBAAgB5D,IAAIxD,YAAc,GACvCpI,KAAKwP,gBAAgBiB,MAAM,QAAS,IACpCzQ,KAAK8P,QAAQa,YAEfjE,YAAW,WACT,EAAR,QACQA,YAAW,WAAnB,sCAEQ,IAAR,KACA,kCACQ,EAAR,wDACQ,IAAR,iBACQtH,EAAK2I,OACD3I,EAAK/C,OAAS,GAAiB,KAAZ+C,EAAK,KAAWA,EAAK,GAAK,KACjD,EAAR,wBACQsH,YAAW,WAAnB,4CAGImB,UAjEJ,WAiEA,WACM7N,KAAKoO,MAAO,EACZpO,KAAKmQ,2BACLzD,YAAW,WACT,EAAR,2BACA,MCnNoR,ICQhR,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCnBX,EAAS,WAAa,IAAI3M,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAQ,KAAEgB,WAAW,SAASe,YAAY,cAAczB,MAAM,CAAC,GAAK,cAAcG,GAAG,CAAC,MAAQT,EAAI6N,aAAa,QAAU,SAASlM,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,MAAM,GAAGlC,EAAOP,IAAI,CAAC,MAAM,YAA8BO,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAjE,KAAgGzK,EAAI8N,UAAUnM,MAAW,CAACvB,EAAG,MAAM,CAACG,IAAI,eAAewB,YAAY,cAAc,CAAC3B,EAAG,MAAM,CAAC2B,YAAY,eAAe,CAAC3B,EAAG,MAAM,CAAC2B,YAAY,uCAAuCzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,OAAO,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,6VAA6VF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe0O,mBAAmBzQ,EAAG,MAAM,CAAC2B,YAAY,iBAAiB,CAAC3B,EAAG,MAAM,CAAC2B,YAAY,gBAAgB,CAAC3B,EAAG,SAAS,CAAC2B,YAAY,oCAAoCtB,GAAG,CAAC,MAAQ,SAASkB,GAAQ,OAAO3B,EAAI8Q,YAAY,YAAY,CAAC1Q,EAAG,MAAM,CAAC2B,YAAY,uCAAuCzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,aAAa,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,0jBAA0jBF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe4O,kBAAkB3Q,EAAG,SAAS,CAAC2B,YAAY,qCAAqCtB,GAAG,CAAC,MAAQT,EAAIgR,cAAc,CAAC5Q,EAAG,MAAM,CAAC2B,YAAY,qCAAqCzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,WAAW,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,ohCAAohCF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAe8O,oBAAoB7Q,EAAG,MAAM,CAACA,EAAG,MAAM,CAACG,IAAI,YAAYwB,YAAY,cAAc,CAAC3B,EAAG,YAAY,CAACE,MAAM,CAAC,UAAY,oBAAoBK,MAAM,CAACC,MAAOZ,EAAU,OAAEa,SAAS,SAAUC,GAAMd,EAAIuE,OAAOzD,GAAKE,WAAW,WAAWhB,EAAIiB,GAAIjB,EAAU,QAAE,SAASgD,EAAKoM,GAAG,OAAOhP,EAAG,MAAM,CAACgB,IAAIgO,EAAErN,YAAY,kBAAkBtB,GAAG,CAAC,MAAQ,SAASkB,GAAgC,OAAxBA,EAAOqC,iBAAwBhE,EAAIkR,iBAAiBvP,EAAQqB,MAAS,CAAC5C,EAAG,QAAQ,CAAC2B,YAAY,iBAAiBzB,MAAM,CAAC,KAAO,WAAW,UAAW,GAAMsE,SAAS,CAAC,SAAW5B,EAAKK,aAAajD,EAAG,OAAO,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAGO,EAAK8B,eAAc,IAAI,OAAO1E,EAAG,MAAM,CAAC2B,YAAY,gBAAgB,CAAC3B,EAAG,SAAS,CAACG,IAAI,SAASwB,YAAY,eAAetB,GAAG,CAAC,MAAQT,EAAImR,QAAQ,CAAC/Q,EAAG,MAAM,CAAC2B,YAAY,6CAA6CzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,OAAO,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,icAAicF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAegP,YAAY/Q,EAAG,SAAS,CAACG,IAAI,SAASwB,YAAY,eAAetB,GAAG,CAAC,MAAQT,EAAI8N,YAAY,CAAC1N,EAAG,MAAM,CAAC2B,YAAY,oDAAoDzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,cAAc,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,wVAAwVF,EAAG,OAAO,CAACwE,SAAS,CAAC,UAAY5E,EAAIyC,GAAGzC,EAAImC,eAAeiP,kBAC/hM,EAAkB,G,qBCiDtB,GACEC,WAAY,CACV,UAAa,EAAjB,GAEErG,MAAO,CACLpK,MAAOuL,MACPhK,eAAgB,CACduB,KAAM0B,OACNoK,QAFN,WAGQ,MAAO,CACLqB,aAAc,gBACdE,YAAa,eACbE,YAAa,eACbG,KAAM,OACND,MAAO,cAKfjG,KAnBF,WAoBI,MAAO,CACLmD,MAAM,EACN1F,YAAY,IAGhB4C,SAAU,CACRhH,OAAQ,CACN+M,IAAK,WACH,OAAOrR,KAAKW,OAEd2Q,IAAK,SAAX,GACQtR,KAAKyQ,MAAM,QAAS9E,MAI1BW,QAAS,CACP4E,MADJ,WAEMlR,KAAK8P,QAAQyB,cACbvR,KAAK6N,aAEPD,aALJ,SAKA,GAC0B,eAAhBf,EAAE1E,OAAO0H,IAAqB7P,KAAK6N,aAEzCoD,iBARJ,SAQA,KACMlO,EAAKK,WAAaL,EAAKK,UACvBsJ,WAAW1M,KAAK8P,QAAQ0B,gBAE1BvB,0BAZJ,WAaM,IAAN,uBACA,4BACM9H,EAAO+H,aAAa,QAAS,SAAnC,uDAEIC,yBAjBJ,WAkBM,IAAN,uBACMhI,EAAOiI,gBAAgB,UAEzBS,YArBJ,SAqBA,GACM7Q,KAAK6N,YACL7N,KAAK8P,QAAQe,YAAYY,IAE3BV,YAzBJ,WA0BM/Q,KAAK6N,YACL7N,KAAK8P,QAAQiB,eAEfL,UA7BJ,WA6BA,WACM1Q,KAAKoO,MAAO,EACZ1B,YAAW,WAAjB,iCACMA,YAAW,WAAjB,yCAEImB,UAlCJ,WAmCM7N,KAAKoO,MAAO,EACZpO,KAAKmQ,8BCzH0Q,ICQjR,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCnBX,EAAS,WAAa,IAAIpQ,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAAC8C,WAAW,CAAC,CAACC,KAAK,OAAOC,QAAQ,SAASxC,MAAOZ,EAAQ,KAAEgB,WAAW,SAASe,YAAY,cAAczB,MAAM,CAAC,GAAK,cAAcG,GAAG,CAAC,MAAQT,EAAI6N,aAAa,QAAU,SAASlM,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,MAAM,GAAGlC,EAAOP,IAAI,CAAC,MAAM,YAA8BO,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAjE,KAAgGzK,EAAI8N,UAAUnM,MAAW,CAACvB,EAAG,MAAM,CAACG,IAAI,YAAYwB,YAAY,cAAc,CAAC3B,EAAG,MAAM,CAACA,EAAG,OAAO,CAAC2B,YAAY,iBAAiB,CAAC3B,EAAG,QAAQ,CAAC8C,WAAW,CAAC,CAACC,KAAK,QAAQC,QAAQ,UAAUxC,MAAOZ,EAAa,UAAEgB,WAAW,cAAcT,IAAI,YAAYwB,YAAY,cAAczB,MAAM,CAAC,KAAO,OAAO,KAAO,GAAG,aAAe,MAAM,YAAc,MAAM,eAAiB,MAAM,WAAa,SAASsE,SAAS,CAAC,MAAS5E,EAAa,WAAGS,GAAG,CAAC,QAAU,SAASkB,GAAQ,OAAIA,EAAO+B,KAAKC,QAAQ,QAAQ3D,EAAI4D,GAAGjC,EAAOkC,QAAQ,QAAQ,GAAGlC,EAAOP,IAAI,UAA4BO,EAAO2I,SAAS3I,EAAO4I,UAAU5I,EAAO6I,QAAQ7I,EAAO8I,QAAjE,KAAgGzK,EAAI2R,OAAO3R,EAAI4R,UAAWjQ,IAAS,MAAQ,SAASA,GAAWA,EAAOyG,OAAOyJ,YAAqB7R,EAAI4R,UAAUjQ,EAAOyG,OAAOxH,aAAYR,EAAG,SAAS,CAAC2B,YAAY,qBAAqBtB,GAAG,CAAC,MAAQ,SAASkB,GAAQ,OAAO3B,EAAI2R,OAAO3R,EAAI4R,cAAc,CAACxR,EAAG,MAAM,CAAC2B,YAAY,yCAAyCzB,MAAM,CAAC,cAAc,OAAO,UAAY,QAAQ,cAAc,MAAM,YAAY,SAAS,KAAO,MAAM,MAAQ,6BAA6B,QAAU,gBAAgB,CAACF,EAAG,OAAO,CAACE,MAAM,CAAC,KAAO,eAAe,EAAI,0WACznD,EAAkB,GCoBtB,GACE0K,MAAO,CACL7I,eAAgB,CACduB,KAAM0B,OACNoK,QAFN,WAGQ,MAAO,MAKbtE,KAVF,WAWI,MAAO,CACLmD,MAAM,EACN1F,YAAY,EACZiJ,UAAW,KAGfrF,QAAS,CACPsB,aADJ,SACA,GAC0B,eAAhBf,EAAE1E,OAAO0H,IAAqB7P,KAAK6N,aAEzC6D,OAJJ,SAIA,KACU7E,GAAGA,EAAE9I,iBACT/D,KAAK6N,YACL7N,KAAK8P,QAAQ4B,OAAO1R,KAAK2R,YAE3BjB,UATJ,WASA,WACM1Q,KAAKoO,MAAO,EACZ1B,YAAW,WAAjB,qCAEImB,UAbJ,WAcM7N,KAAKoO,MAAO,KCpDgQ,ICQ9Q,G,UAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,OAIa,I,QCnBR,SAASyD,EAAOlR,GACrB,OAAOA,aAAiBmR,MAAkD,kBAA1C3M,OAAO4M,UAAU9E,SAAS+E,KAAKrR,GAE1D,SAASsR,EAAOtR,GACrB,OAAIkR,EAAOlR,GACF,IAAImR,KAAKnR,EAAMuR,WAGX,MAATvR,EACK,IAAImR,KAAKK,KAGX,IAAIL,KAAKnR,GAEX,SAASyR,EAAYzR,GAC1B,OAAOkR,EAAOlR,KAAW0R,MAAM1R,EAAMuR,WAEhC,SAASI,EAAY3R,GAC1B,IAAI4R,EAAiBC,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EAEzF,KAAMD,GAAkB,GAAKA,GAAkB,GAC7C,MAAM,IAAIG,WAAW,wCAGvB,IAAIC,EAAOV,EAAOtR,GACdiS,EAAMD,EAAKE,SACXC,GAAQF,EAAM,EAAIL,GAAkB,EAGxC,OAFAI,EAAKI,QAAQJ,EAAKK,UAAYF,GAC9BH,EAAKM,SAAS,EAAG,EAAG,EAAG,GAChBN,EAEF,SAASO,EAAgBvS,GAC9B,IAAIwS,EAAOX,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAC3EY,EAAsBD,EAAKZ,eAC3BA,OAAyC,IAAxBa,EAAiC,EAAIA,EACtDC,EAAwBF,EAAKG,sBAC7BA,OAAkD,IAA1BD,EAAmC,EAAIA,EAEnE,KAAMC,GAAyB,GAAKA,GAAyB,GAC3D,MAAM,IAAIZ,WAAW,iDAOvB,IAJA,IAAIC,EAAOV,EAAOtR,GACd4S,EAAOZ,EAAKa,cACZC,EAAuB,IAAI3B,KAAK,GAE3B5Q,EAAIqS,EAAO,EAAGrS,GAAKqS,EAAO,EAAGrS,IAKpC,GAJAuS,EAAqBC,YAAYxS,EAAG,EAAGoS,GACvCG,EAAqBR,SAAS,EAAG,EAAG,EAAG,GACvCQ,EAAuBnB,EAAYmB,EAAsBlB,GAErDI,EAAKT,WAAauB,EAAqBvB,UACzC,MAIJ,OAAOuB,EAEF,SAASE,EAAQhT,GACtB,IAAIiT,EAAQpB,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAC5EqB,EAAuBD,EAAMrB,eAC7BA,OAA0C,IAAzBsB,EAAkC,EAAIA,EACvDC,EAAwBF,EAAMN,sBAC9BA,OAAkD,IAA1BQ,EAAmC,EAAIA,EAE/DnB,EAAOV,EAAOtR,GACdoT,EAAsBzB,EAAYK,EAAMJ,GACxCkB,EAAuBP,EAAgBP,EAAM,CAC/CJ,eAAgBA,EAChBe,sBAAuBA,IAErBR,EAAOiB,EAAoB7B,UAAYuB,EAAqBvB,UAChE,OAAO8B,KAAKC,MAAMnB,EAAO,QAA0B,ECxErD,IAAI,EAAS,CACXoB,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvHC,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,SAAU,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAC7EC,cAAe,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC1DC,YAAa,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAClD/B,eAAgB,EAChBe,sBAAuB,GAEV,ICPXiB,EAAe,sGAEnB,SAASC,EAAIC,GACX,IAAIC,EAAMlC,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EAC1EmC,EAAS,GAAGC,OAAOZ,KAAKa,IAAIJ,IAC5BK,EAAOL,EAAM,EAAI,IAAM,GAE3B,MAAOE,EAAOtS,OAASqS,EACrBC,EAAS,IAAIC,OAAOD,GAGtB,OAAOG,EAAOH,EAGhB,SAASI,EAAeC,GACtB,IAAIC,EAAYzC,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAChFsC,EAAOE,EAAS,EAAI,IAAM,IAC1BE,EAAYlB,KAAKa,IAAIG,GACrBG,EAAQnB,KAAKoB,MAAMF,EAAY,IAC/BG,EAAUH,EAAY,GAC1B,OAAOJ,EAAON,EAAIW,EAAO,GAAKF,EAAYT,EAAIa,EAAS,GAGzD,IAAIC,EAAW,SAAkBrU,EAAGsU,EAAGC,GACrC,IAAIC,EAAOxU,EAAI,GAAK,KAAO,KAC3B,OAAOuU,EAAcC,EAAKC,oBAAsBD,GAG9CE,EAAc,CAChBC,EAAG,SAAWjD,GACZ,IAAIkD,EAAIlD,EAAKa,cACb,OAAOqC,GAAK,KAAO,GAAGjB,OAAOiB,GAAK,IAAIjB,OAAOiB,IAG/CC,GAAI,SAAYnD,GACd,OAAO6B,EAAI7B,EAAKa,cAAe,GAAGuC,OAAO,IAG3CC,KAAM,SAAcrD,GAClB,OAAO6B,EAAI7B,EAAKa,cAAe,IAGjCyC,EAAG,SAAWtD,GACZ,OAAOA,EAAKuD,WAAa,GAG3BC,GAAI,SAAYxD,GACd,OAAO6B,EAAI7B,EAAKuD,WAAa,EAAG,IAElCE,IAAK,SAAazD,EAAM0D,GACtB,OAAOA,EAAOlC,YAAYxB,EAAKuD,aAEjCI,KAAM,SAAc3D,EAAM0D,GACxB,OAAOA,EAAOnC,OAAOvB,EAAKuD,aAG5BK,EAAG,SAAW5D,GACZ,OAAOA,EAAKK,WAGdwD,GAAI,SAAY7D,GACd,OAAO6B,EAAI7B,EAAKK,UAAW,IAG7ByD,EAAG,SAAW9D,GACZ,OAAOA,EAAK+D,YAGdC,GAAI,SAAYhE,GACd,OAAO6B,EAAI7B,EAAK+D,WAAY,IAG9BzV,EAAG,SAAW0R,GACZ,IAAIwC,EAAQxC,EAAK+D,WAEjB,OAAc,IAAVvB,EACK,GAGLA,EAAQ,GACHA,EAAQ,GAGVA,GAGTyB,GAAI,WACF,IAAIzB,EAAQQ,EAAY1U,EAAEqO,MAAMqG,EAAanD,WAC7C,OAAOgC,EAAIW,EAAO,IAGpB0B,EAAG,SAAWlE,GACZ,OAAOA,EAAKmE,cAGdC,GAAI,SAAYpE,GACd,OAAO6B,EAAI7B,EAAKmE,aAAc,IAGhCE,EAAG,SAAWrE,GACZ,OAAOA,EAAKsE,cAGdC,GAAI,SAAYvE,GACd,OAAO6B,EAAI7B,EAAKsE,aAAc,IAGhCE,EAAG,SAAWxE,GACZ,OAAOqB,KAAKoB,MAAMzC,EAAKyE,kBAAoB,MAG7CC,GAAI,SAAY1E,GACd,OAAO6B,EAAIR,KAAKoB,MAAMzC,EAAKyE,kBAAoB,IAAK,IAGtDE,IAAK,SAAa3E,GAChB,OAAO6B,EAAI7B,EAAKyE,kBAAmB,IAGrCG,EAAG,SAAW5E,GACZ,OAAOA,EAAKE,UAGd2E,GAAI,SAAY7E,EAAM0D,GACpB,OAAOA,EAAO/B,YAAY3B,EAAKE,WAGjC4E,IAAK,SAAa9E,EAAM0D,GACtB,OAAOA,EAAOhC,cAAc1B,EAAKE,WAGnC6E,KAAM,SAAc/E,EAAM0D,GACxB,OAAOA,EAAOjC,SAASzB,EAAKE,WAG9B8E,EAAG,SAAWhF,EAAM0D,GAClB,IAAIuB,EAAevB,EAAOf,UAAYA,EACtC,OAAOsC,EAAajF,EAAK+D,WAAY/D,EAAKmE,cAAc,IAG1De,EAAG,SAAWlF,EAAM0D,GAClB,IAAIuB,EAAevB,EAAOf,UAAYA,EACtC,OAAOsC,EAAajF,EAAK+D,WAAY/D,EAAKmE,cAAc,IAG1DgB,EAAG,SAAWnF,GACZ,OAAOoC,EAAepC,EAAKoF,oBAAqB,MAGlDC,GAAI,SAAYrF,GACd,OAAOoC,EAAepC,EAAKoF,sBAG7BE,EAAG,SAAWtF,GACZ,OAAOqB,KAAKoB,MAAMzC,EAAKT,UAAY,MAGrCgG,EAAG,SAAWvF,GACZ,OAAOA,EAAKT,WAEdiG,EAAG,SAAWxF,EAAM0D,GAClB,OAAO1C,EAAQhB,EAAM,CACnBJ,eAAgB8D,EAAO9D,eACvBe,sBAAuB+C,EAAO/C,yBAGlC8E,GAAI,SAAYzF,EAAM0D,GACpB,OAAO7B,EAAImB,EAAYwC,EAAExF,EAAM0D,GAAS,KAI5C,SAAS,EAAO5B,EAAK4D,GACnB,IAAIhS,EAAUmM,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAC9E8F,EAAYD,EAAME,OAAOF,GAAO,2BAChC1F,EAAOV,EAAOwC,GAElB,IAAKrC,EAAYO,GACf,MAAO,eAGT,IAAI0D,EAAShQ,EAAQgQ,QAAU,EAC/B,OAAOiC,EAAUE,QAAQjE,GAAc,SAAUkE,EAAOC,GACtD,OAAIA,IAI8B,oBAAvB/C,EAAY8C,GACd,GAAG7D,OAAOe,EAAY8C,GAAO9F,EAAM0D,IAGrCoC,MAII,QCpMf,SAASE,EAAmBC,GAAO,OAAOC,GAAmBD,IAAQE,GAAiBF,IAAQG,KAE9F,SAASA,KAAuB,MAAM,IAAIC,UAAU,mDAEpD,SAASF,GAAiBG,GAAQ,GAAIC,OAAOC,YAAYhU,OAAO8T,IAAkD,uBAAzC9T,OAAO4M,UAAU9E,SAAS+E,KAAKiH,GAAgC,OAAO/M,MAAMC,KAAK8M,GAE1J,SAASJ,GAAmBD,GAAO,GAAI1M,MAAMkN,QAAQR,GAAM,CAAE,IAAK,IAAI1X,EAAI,EAAGmY,EAAO,IAAInN,MAAM0M,EAAIvW,QAASnB,EAAI0X,EAAIvW,OAAQnB,IAAOmY,EAAKnY,GAAK0X,EAAI1X,GAAM,OAAOmY,GAE7J,SAASC,GAAQC,EAAQC,GAAkB,IAAIpU,EAAOD,OAAOC,KAAKmU,GAAS,GAAIpU,OAAOsU,sBAAuB,CAAE,IAAIC,EAAUvU,OAAOsU,sBAAsBF,GAAaC,IAAgBE,EAAUA,EAAQ9J,QAAO,SAAU+J,GAAO,OAAOxU,OAAOyU,yBAAyBL,EAAQI,GAAKE,eAAgBzU,EAAK0U,KAAKxK,MAAMlK,EAAMsU,GAAY,OAAOtU,EAE9U,SAAS2U,GAAc5R,GAAU,IAAK,IAAIjH,EAAI,EAAGA,EAAIsR,UAAUnQ,OAAQnB,IAAK,CAAE,IAAI8Y,EAAyB,MAAhBxH,UAAUtR,GAAasR,UAAUtR,GAAK,GAAQA,EAAI,EAAKoY,GAAQU,GAAQ,GAAMC,SAAQ,SAAU9Y,GAAO+Y,GAAgB/R,EAAQhH,EAAK6Y,EAAO7Y,OAAsBgE,OAAOgV,0BAA6BhV,OAAOiV,iBAAiBjS,EAAQhD,OAAOgV,0BAA0BH,IAAmBV,GAAQU,GAAQC,SAAQ,SAAU9Y,GAAOgE,OAAOkV,eAAelS,EAAQhH,EAAKgE,OAAOyU,yBAAyBI,EAAQ7Y,OAAe,OAAOgH,EAE7f,SAASmS,GAAe1B,EAAK1X,GAAK,OAAOqZ,GAAgB3B,IAAQ4B,GAAsB5B,EAAK1X,IAAMuZ,KAElG,SAASA,KAAqB,MAAM,IAAIzB,UAAU,wDAElD,SAASwB,GAAsB5B,EAAK1X,GAAK,GAAMgY,OAAOC,YAAYhU,OAAOyT,IAAgD,uBAAxCzT,OAAO4M,UAAU9E,SAAS+E,KAAK4G,GAAvE,CAAmH,IAAI8B,EAAO,GAAQC,GAAK,EAAUC,GAAK,EAAWnY,OAAKgQ,EAAW,IAAM,IAAK,IAAiCjQ,EAA7BqY,EAAKjC,EAAIM,OAAOC,cAAmBwB,GAAMnY,EAAKqY,EAAG3R,QAAQ4R,MAAOH,GAAK,EAA6B,GAArBD,EAAKZ,KAAKtX,EAAG7B,OAAYO,GAAKwZ,EAAKrY,SAAWnB,EAAG,MAAW,MAAOqK,GAAOqP,GAAK,EAAMnY,EAAK8I,EAAO,QAAU,IAAWoP,GAAsB,MAAhBE,EAAG,WAAmBA,EAAG,YAAe,QAAU,GAAID,EAAI,MAAMnY,GAAQ,OAAOiY,GAErgB,SAASH,GAAgB3B,GAAO,GAAI1M,MAAMkN,QAAQR,GAAM,OAAOA,EAE/D,SAASsB,GAAgBa,EAAK5Z,EAAKR,GAAiK,OAApJQ,KAAO4Z,EAAO5V,OAAOkV,eAAeU,EAAK5Z,EAAK,CAAER,MAAOA,EAAOkZ,YAAY,EAAMmB,cAAc,EAAMC,UAAU,IAAkBF,EAAI5Z,GAAOR,EAAgBoa,EAI3M,IAAIG,GAAmB,6FACnBC,GAAS,KAETC,GAAS,OAETC,GAAS,QAETC,GAAS,QAETC,GAAY,QAEZC,GAAmB,iBAEnBC,GAAc,WAEdC,GAAiB,uBAGjBC,GAAO,OACPC,GAAQ,QACRC,GAAM,MACNC,GAAO,OACPC,GAAS,SACTC,GAAS,SACTC,GAAc,cACdC,GAAa,GAEbC,GAAe,SAAsBC,EAAOC,EAAOzb,GACrD,IACI0b,EADAC,EAASrQ,MAAMkN,QAAQgD,GAASA,EAAQ,CAACA,GAI3CE,EADsB,kBAAb1b,EACF,SAAc4b,GACnB,IAAI7b,EAAQ8b,SAASD,EAAO,IAC5B,OAAOtC,GAAgB,GAAItZ,EAAUD,IAGhCC,EAGT2b,EAAOtC,SAAQ,SAAU9Y,GACvB+a,GAAW/a,GAAO,CAACkb,EAAOC,OAI1BI,GAAqB,SAA4BrE,GACnD,OAAOA,EAAIG,QAAQ,sBAAuB,SAGxCmE,GAAkB,SAAyBC,GAC7C,OAAO,SAAUvG,GACf,IAAIwG,EAAQxG,EAAOuG,GAEnB,IAAK1Q,MAAMkN,QAAQyD,GACjB,MAAM,IAAIC,MAAM,UAAUlI,OAAOgI,EAAW,oBAG9C,OAAO,IAAIG,OAAOF,EAAMG,IAAIN,IAAoBO,KAAK,QAIrDC,GAAoB,SAA2BN,EAAWzb,GAC5D,OAAO,SAAUqb,EAAOnG,GACtB,IAAIwG,EAAQxG,EAAOuG,GAEnB,IAAK1Q,MAAMkN,QAAQyD,GACjB,MAAM,IAAIC,MAAM,UAAUlI,OAAOgI,EAAW,oBAG9C,IAAIO,EAAQN,EAAMnZ,QAAQ8Y,GAE1B,GAAIW,EAAQ,EACV,MAAM,IAAIL,MAAM,gBAGlB,OAAO5C,GAAgB,GAAI/Y,EAAKgc,KAqCpC,SAASC,GAAc/G,GACrB,OAAOA,EAAOgH,eAAiB,gBAGjC,SAASC,GAAYd,GACnB,MAAoD,MAA7C,GAAG5H,OAAO4H,GAAOe,cAAcC,OAAO,GAU/C,SAASC,GAAiBpF,GACxB,IAAIqF,EAAQrF,EAAII,MAAM,iBAAmB,CAAC,IAAK,IAAK,KAChDkF,EAAQrD,GAAeoD,EAAO,GAC9BvP,EAASwP,EAAM,GACfC,EAAOD,EAAM,GACbE,EAASF,EAAM,GAEftI,EAA+B,GAArBoH,SAASmB,EAAM,IAAWnB,SAASoB,EAAQ,IAEzD,OAAgB,IAAZxI,EACK,EAGS,MAAXlH,GAAkBkH,GAAWA,EAyBtC,SAASyI,GAASF,EAAMG,GACtB,QAAatL,IAATmL,QAA+BnL,IAATsL,EACxB,GAAIA,GACF,GAAIH,EAAO,GACT,OAAOA,EAAO,QAEX,GAAa,KAATA,EACT,OAAO,EAIX,OAAOA,EAGT,SAASI,GAAkBxB,GAMzB,IALA,IAAIyB,EAAazL,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,IAAIV,KACrFoM,EAAS,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAC5BC,EAAY,CAACF,EAAWzK,cAAeyK,EAAW/H,WAAY+H,EAAWjL,UAAWiL,EAAWvH,WAAYuH,EAAWnH,aAAcmH,EAAWhH,aAAcgH,EAAW7G,mBACxKgH,GAAY,EAEPld,EAAI,EAAGA,EAAI,EAAGA,SACJuR,IAAb+J,EAAMtb,GACRgd,EAAOhd,GAAKkd,EAAYD,EAAUjd,GAAKgd,EAAOhd,IAE9Cgd,EAAOhd,GAAKsb,EAAMtb,GAClBkd,GAAY,GAIhB,OAAOF,EAGT,SAASG,KAGP,IAFA,IAAI1L,EAEK2L,EAAO9L,UAAUnQ,OAAQkc,EAAO,IAAIrS,MAAMoS,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQhM,UAAUgM,GAGzB,IAAI3I,EAAI0I,EAAK,GAab,OAXI1I,EAAI,KAAOA,GAAK,GAClB0I,EAAK,IAAM,IACX5L,EAAO,IAAIb,KAAKA,KAAK2M,IAAInP,MAAMwC,KAAMyM,IAEjCG,SAAS/L,EAAKgM,mBAChBhM,EAAKiM,eAAe/I,IAGtBlD,EAAO,IAAIb,KAAKA,KAAK2M,IAAInP,MAAMwC,KAAMyM,IAGhC5L,EAGT,SAASkM,GAAWC,EAAYrN,EAAQ4E,GACtC,IAAIkG,EAAS9K,EAAOgH,MAAMyC,IAE1B,IAAKqB,EACH,MAAM,IAAIO,MAMZ,IAHA,IAAIza,EAASka,EAAOla,OAChB0c,EAAO,GAEF7d,EAAI,EAAGA,EAAImB,EAAQnB,GAAK,EAAG,CAClC,IAAIkb,EAAQG,EAAOrb,GACf8d,EAAU9C,GAAWE,GAEzB,GAAK4C,EAQE,CACL,IAAI3C,EAA8B,oBAAf2C,EAAQ,GAAoBA,EAAQ,GAAG3I,GAAU2I,EAAQ,GACxEC,EAASD,EAAQ,GACjBre,GAAS0b,EAAM6C,KAAKJ,IAAe,IAAI,GACvC/D,EAAMkE,EAAOte,EAAO0V,GACxB0I,EAAOhF,GAAc,GAAIgF,EAAM,GAAIhE,GACnC+D,EAAaA,EAAWtG,QAAQ7X,EAAO,QAd3B,CACZ,IAAI8U,EAAO2G,EAAM5D,QAAQ,WAAY,IAErC,GAAiC,IAA7BsG,EAAWpb,QAAQ+R,GAGrB,MAAM,IAAIqH,MAAM,aAFhBgC,EAAaA,EAAW/I,OAAON,EAAKpT,SAc1C,OAAO0c,EAGM,SAASI,GAAM9G,EAAK5G,GACjC,IAAIpL,EAAUmM,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAElF,IACE,IAAI4M,EAAkB/Y,EAAQgQ,OAC1BgJ,OAA8B,IAApBD,EAA6B,EAAgBA,EACvDE,EAAsBjZ,EAAQ4X,WAC9BA,OAAqC,IAAxBqB,EAAiC,IAAIxN,KAASwN,EAE3DC,EAAcV,GAAWxG,EAAK5G,EAAQ4N,GACtC9L,EAAOgM,EAAYhM,KACnBiM,EAAQD,EAAYC,MACpB5M,EAAM2M,EAAY3M,IAClBgL,EAAO2B,EAAY3B,KACnBC,EAAS0B,EAAY1B,OACrB4B,EAASF,EAAYE,OACrBC,EAAcH,EAAYG,YAC1B3B,EAAOwB,EAAYxB,KACnBpL,EAAO4M,EAAY5M,KACnBqC,EAASuK,EAAYvK,OACrB2K,EAAUJ,EAAYI,QACtBC,EAAOL,EAAYK,KAEvB,GAAIjN,EACF,OAAOA,EAGT,IAAIkN,EAAa,CAACtM,EAAMiM,EAAO5M,EAAKgL,EAAMC,EAAQ4B,EAAQC,GAG1D,GAFAG,EAAW,GAAK/B,GAAS+B,EAAW,GAAI9B,QAE3BtL,IAATmN,QAAgCnN,IAAV+M,QAA+B/M,IAARG,EAAmB,CAElE,IAAIkN,EAAY5M,OAAyBT,IAATc,EAAqB0K,EAAa,IAAInM,KAAKyB,EAAM,GAAI,CACnFhB,eAAgB8M,EAAQ9M,eACxBe,sBAAuB+L,EAAQ/L,wBAEjC,OAAO,IAAIxB,KAAKgO,EAAU5N,UAAyB,GAAZ0N,EAAO,GAAS,GAAK,KAAO,KAGrE,IAAIG,EAAU1B,GAAc/O,WAAM,EAAQqJ,EAAmBqF,GAAkB6B,EAAY5B,KACvF+B,EAAqF,SAApDvN,IAAXuC,EAAuB+K,EAAQhI,oBAAsB/C,GAAe,IAC1FiL,EAAa,IAAInO,KAAKiO,EAAQ7N,UAAY8N,GAE9C,YAAgBvN,IAAZkN,GAAyBM,EAAWpN,WAAa8M,EAC5C,IAAI7N,KAAKK,KAGX8N,EACP,MAAOpT,GACP,OAAO,IAAIiF,KAAKK,MCtUpB,SAAS+N,GAAQnF,GAaf,OATEmF,GADoB,oBAAXhH,QAAoD,kBAApBA,OAAOC,SACtC,SAAU4B,GAClB,cAAcA,GAGN,SAAUA,GAClB,OAAOA,GAAyB,oBAAX7B,QAAyB6B,EAAIoF,cAAgBjH,QAAU6B,IAAQ7B,OAAOnH,UAAY,gBAAkBgJ,GAItHmF,GAAQnF,GAGjB,SAAS,GAAgBA,EAAK5Z,EAAKR,GAYjC,OAXIQ,KAAO4Z,EACT5V,OAAOkV,eAAeU,EAAK5Z,EAAK,CAC9BR,MAAOA,EACPkZ,YAAY,EACZmB,cAAc,EACdC,UAAU,IAGZF,EAAI5Z,GAAOR,EAGNoa,EAGT,SAASqF,KAeP,OAdAA,GAAWjb,OAAOoB,QAAU,SAAU4B,GACpC,IAAK,IAAIjH,EAAI,EAAGA,EAAIsR,UAAUnQ,OAAQnB,IAAK,CACzC,IAAI8Y,EAASxH,UAAUtR,GAEvB,IAAK,IAAIC,KAAO6Y,EACV7U,OAAO4M,UAAUsO,eAAerO,KAAKgI,EAAQ7Y,KAC/CgH,EAAOhH,GAAO6Y,EAAO7Y,IAK3B,OAAOgH,GAGFiY,GAAS9Q,MAAMtP,KAAMwS,WAG9B,SAAS,GAAQ+G,EAAQC,GACvB,IAAIpU,EAAOD,OAAOC,KAAKmU,GAEvB,GAAIpU,OAAOsU,sBAAuB,CAChC,IAAIC,EAAUvU,OAAOsU,sBAAsBF,GACvCC,IAAgBE,EAAUA,EAAQ9J,QAAO,SAAU+J,GACrD,OAAOxU,OAAOyU,yBAAyBL,EAAQI,GAAKE,eAEtDzU,EAAK0U,KAAKxK,MAAMlK,EAAMsU,GAGxB,OAAOtU,EAGT,SAASkb,GAAenY,GACtB,IAAK,IAAIjH,EAAI,EAAGA,EAAIsR,UAAUnQ,OAAQnB,IAAK,CACzC,IAAI8Y,EAAyB,MAAhBxH,UAAUtR,GAAasR,UAAUtR,GAAK,GAE/CA,EAAI,EACN,GAAQiE,OAAO6U,IAAS,GAAMC,SAAQ,SAAU9Y,GAC9C,GAAgBgH,EAAQhH,EAAK6Y,EAAO7Y,OAE7BgE,OAAOgV,0BAChBhV,OAAOiV,iBAAiBjS,EAAQhD,OAAOgV,0BAA0BH,IAEjE,GAAQ7U,OAAO6U,IAASC,SAAQ,SAAU9Y,GACxCgE,OAAOkV,eAAelS,EAAQhH,EAAKgE,OAAOyU,yBAAyBI,EAAQ7Y,OAKjF,OAAOgH,EAGT,SAASoY,GAA8BvG,EAAQwG,GAC7C,GAAc,MAAVxG,EAAgB,MAAO,GAC3B,IAEI7Y,EAAKD,EAFLiH,EAAS,GACTsY,EAAatb,OAAOC,KAAK4U,GAG7B,IAAK9Y,EAAI,EAAGA,EAAIuf,EAAWpe,OAAQnB,IACjCC,EAAMsf,EAAWvf,GACbsf,EAAS9c,QAAQvC,IAAQ,IAC7BgH,EAAOhH,GAAO6Y,EAAO7Y,IAGvB,OAAOgH,EAGT,SAASuY,GAAyB1G,EAAQwG,GACxC,GAAc,MAAVxG,EAAgB,MAAO,GAE3B,IAEI7Y,EAAKD,EAFLiH,EAASoY,GAA8BvG,EAAQwG,GAInD,GAAIrb,OAAOsU,sBAAuB,CAChC,IAAIkH,EAAmBxb,OAAOsU,sBAAsBO,GAEpD,IAAK9Y,EAAI,EAAGA,EAAIyf,EAAiBte,OAAQnB,IACvCC,EAAMwf,EAAiBzf,GACnBsf,EAAS9c,QAAQvC,IAAQ,GACxBgE,OAAO4M,UAAU6O,qBAAqB5O,KAAKgI,EAAQ7Y,KACxDgH,EAAOhH,GAAO6Y,EAAO7Y,IAIzB,OAAOgH,EAGT,SAAS,GAAeyQ,EAAK1X,GAC3B,OAAO,GAAgB0X,IAAQ,GAAsBA,EAAK1X,IAAM2f,GAA4BjI,EAAK1X,IAAM,KAGzG,SAAS,GAAgB0X,GACvB,GAAI1M,MAAMkN,QAAQR,GAAM,OAAOA,EAGjC,SAAS,GAAsBA,EAAK1X,GAClC,GAAsB,qBAAXgY,QAA4BA,OAAOC,YAAYhU,OAAOyT,GAAjE,CACA,IAAI8B,EAAO,GACPC,GAAK,EACLC,GAAK,EACLnY,OAAKgQ,EAET,IACE,IAAK,IAAiCjQ,EAA7BqY,EAAKjC,EAAIM,OAAOC,cAAmBwB,GAAMnY,EAAKqY,EAAG3R,QAAQ4R,MAAOH,GAAK,EAG5E,GAFAD,EAAKZ,KAAKtX,EAAG7B,OAETO,GAAKwZ,EAAKrY,SAAWnB,EAAG,MAE9B,MAAOqK,GACPqP,GAAK,EACLnY,EAAK8I,EACL,QACA,IACOoP,GAAsB,MAAhBE,EAAG,WAAmBA,EAAG,YACpC,QACA,GAAID,EAAI,MAAMnY,GAIlB,OAAOiY,GAGT,SAASmG,GAA4BC,EAAGC,GACtC,GAAKD,EAAL,CACA,GAAiB,kBAANA,EAAgB,OAAOE,GAAkBF,EAAGC,GACvD,IAAIE,EAAI9b,OAAO4M,UAAU9E,SAAS+E,KAAK8O,GAAG5R,MAAM,GAAI,GAEpD,MADU,WAAN+R,GAAkBH,EAAEX,cAAac,EAAIH,EAAEX,YAAYjd,MAC7C,QAAN+d,GAAqB,QAANA,EAAoB/U,MAAMC,KAAK8U,GACxC,cAANA,GAAqB,2CAA2CC,KAAKD,GAAWD,GAAkBF,EAAGC,QAAzG,GAGF,SAASC,GAAkBpI,EAAKlE,IACnB,MAAPA,GAAeA,EAAMkE,EAAIvW,UAAQqS,EAAMkE,EAAIvW,QAE/C,IAAK,IAAInB,EAAI,EAAGmY,EAAO,IAAInN,MAAMwI,GAAMxT,EAAIwT,EAAKxT,IAAKmY,EAAKnY,GAAK0X,EAAI1X,GAEnE,OAAOmY,EAGT,SAAS,KACP,MAAM,IAAIL,UAAU,6IAGtB,SAASmI,KACP,OAAOA,GAAahc,OAAOoB,QAAU,SAAUsR,GAC7C,IAAK,IAAIuJ,EAAGC,EAAI,EAAGA,EAAI7O,UAAUnQ,OAAQgf,IACvC,IAAK,IAAI9J,KAAK6J,EAAI5O,UAAU6O,GAAID,EAC9Bjc,OAAO4M,UAAUsO,eAAerO,KAAKoP,EAAG7J,KAAOM,EAAEN,GAAK6J,EAAE7J,IAI5D,OAAOM,GACNsJ,GAAW7R,MAAMtP,KAAMwS,WDnF5B2J,GAAa,IAAKV,GAAaE,IAC/BQ,GAAa,KAAMf,IAAQ,SAAUoB,GACnC,IAAIjJ,GAAO,IAAIzB,MAAO0B,cAClB8N,EAAOtN,KAAKoB,MAAM7B,EAAO,KACzB5S,EAAQ8b,SAASD,EAAO,IAE5B,OADA7b,EAAyC,KAAhCA,EAAQ,GAAK2gB,EAAO,EAAIA,GAAc3gB,EACxCuZ,GAAgB,GAAIyB,GAAMhb,MAEnCwb,GAAa,OAAQb,GAAQK,IAC7BQ,GAAa,IAAKZ,IAAW,SAAUiB,GACrC,OAAOtC,GAAgB,GAAI0B,GAAOa,SAASD,EAAO,IAAM,MAE1DL,GAAa,KAAMf,IAAQ,SAAUoB,GACnC,OAAOtC,GAAgB,GAAI0B,GAAOa,SAASD,EAAO,IAAM,MAE1DL,GAAa,MAAOQ,GAAgB,eAAgBO,GAAkB,cAAetB,KACrFO,GAAa,OAAQQ,GAAgB,UAAWO,GAAkB,SAAUtB,KAC5EO,GAAa,IAAKZ,GAAWM,IAC7BM,GAAa,KAAMf,GAAQS,IAC3BM,GAAa,CAAC,IAAK,KAAMZ,GAAWO,IACpCK,GAAa,CAAC,KAAM,MAAOf,GAAQU,IACnCK,GAAa,IAAKZ,GAAWQ,IAC7BI,GAAa,KAAMf,GAAQW,IAC3BI,GAAa,IAAKZ,GAAWS,IAC7BG,GAAa,KAAMf,GAAQY,IAC3BG,GAAa,IAAKhB,IAAQ,SAAUqB,GAClC,OAAOtC,GAAgB,GAAI+B,GAAmC,IAAtBQ,SAASD,EAAO,QAE1DL,GAAa,KAAMf,IAAQ,SAAUoB,GACnC,OAAOtC,GAAgB,GAAI+B,GAAmC,GAAtBQ,SAASD,EAAO,QAE1DL,GAAa,MAAOd,GAAQY,IAU5BE,GAAa,CAAC,IAAK,KAAMiB,IAAe,SAAUZ,EAAOnG,GACvD,IAAI0H,EAA8B,oBAAhB1H,EAAO0H,KAAsB1H,EAAO0H,KAAKvB,GAASc,GAAYd,GAChF,MAAO,CACLuB,KAAMA,MAoBV5B,GAAa,CAAC,IAAK,MAAOX,IAAkB,SAAUgB,GACpD,MAAO,CACLxH,OAAQyI,GAAiBjB,OAG7BL,GAAa,IAAKV,IAAa,SAAUe,GACvC,MAAO,CACL7J,KAAM,IAAIb,KAAK2K,SAASD,EAAO,SAGnCL,GAAa,IAAKT,IAAgB,SAAUc,GAC1C,MAAO,CACL7J,KAAM,IAAIb,KAAyB,IAApByP,WAAW/E,QAG9BL,GAAa,IAAKhB,GAAQ,WAC1BgB,GAAa,KAAMQ,GAAgB,eAAgBO,GAAkB,cAAe,YACpFf,GAAa,MAAOQ,GAAgB,iBAAkBO,GAAkB,gBAAiB,YACzFf,GAAa,OAAQQ,GAAgB,YAAaO,GAAkB,WAAY,YAChFf,GAAa,IAAKZ,GAAW,QAC7BY,GAAa,KAAMf,GAAQ,QCE3B,IAAIoG,GAAc,CAAC,QAAS,QAAS,YACjCC,GAAe,CAAC,QAAS,QAAS,cAClCC,GAAkB,CAAC,KAAM,YACzBC,GAAgB,SAAuB9J,GACzC,OAAOA,EAAE+J,QAAO,SAAUP,EAAGxJ,GAC3B,IAAK,IAAIuJ,KAAKvJ,EACZ,GAAKwJ,EAAED,GAAqB,IAAK,IAAMI,GAAY9d,QAAQ0d,GAAIC,EAAED,GAAKD,GAAW,GAAIE,EAAED,GAAIvJ,EAAEuJ,SAAS,IAAK,IAAMK,GAAa/d,QAAQ0d,GAAI,CACxI,IAAI7J,EAAI8J,EAAED,aAAclV,MAAQmV,EAAED,GAAK,CAACC,EAAED,IACtCvU,EAAIgL,EAAEuJ,aAAclV,MAAQ2L,EAAEuJ,GAAK,CAACvJ,EAAEuJ,IAC1CC,EAAED,GAAK7J,EAAE3C,OAAO/H,QACX,IAAK,IAAM6U,GAAgBhe,QAAQ0d,GACxC,IAAK,IAAIS,KAAKhK,EAAEuJ,GACd,GAAIC,EAAED,GAAGS,GAAI,CACX,IAAIC,EAAIT,EAAED,GAAGS,aAAc3V,MAAQmV,EAAED,GAAGS,GAAK,CAACR,EAAED,GAAGS,IAC/C5gB,EAAI4W,EAAEuJ,GAAGS,aAAc3V,MAAQ2L,EAAEuJ,GAAGS,GAAK,CAAChK,EAAEuJ,GAAGS,IACnDR,EAAED,GAAGS,GAAKC,EAAElN,OAAO3T,QACdogB,EAAED,GAAGS,GAAKhK,EAAEuJ,GAAGS,QAEnB,GAAI,QAAUT,EAAG,IAAK,IAAIlgB,KAAK2W,EAAEuJ,GACtCC,EAAED,GAAGlgB,GAAKmgB,EAAED,GAAGlgB,GAAK6gB,GAAQV,EAAED,GAAGlgB,GAAI2W,EAAEuJ,GAAGlgB,IAAM2W,EAAEuJ,GAAGlgB,QAChDmgB,EAAED,GAAKvJ,EAAEuJ,QAdLC,EAAED,GAAKvJ,EAAEuJ,GAiBtB,OAAOC,IACN,KAEDU,GAAU,SAAiBlK,EAAGuJ,GAChC,OAAO,WACLvJ,GAAKA,EAAEvI,MAAMtP,KAAMwS,WAAY4O,GAAKA,EAAE9R,MAAMtP,KAAMwS,aAIlDwP,GAASL,GAGb,SAASM,GAAWpM,GAClB,IAAII,EAAIzD,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EACxE+E,EAAI/E,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EACxEvR,EAAIuR,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EACxEqE,EAAIrE,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EACxEwE,EAAIxE,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EACxE0P,EAAK1P,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EACzEG,EAAO,IAAIb,KAAK+D,EAAGI,EAAGsB,EAAGtW,EAAG4V,EAAGG,EAAGkL,GAMtC,OAJIrM,EAAI,KAAOA,GAAK,GAClBlD,EAAKe,YAAYmC,GAGZlD,EAET,SAAS,GAAYA,GACnB,OAAOA,aAAgBb,OAASO,MAAMM,GAExC,SAASwP,GAAiBxP,GACxB,OAAOzG,MAAMkN,QAAQzG,IAAyB,IAAhBA,EAAKtQ,QAAgBsQ,EAAKyP,MAAM,KAAgBzP,EAAK,IAAMA,EAAK,GAEhG,SAAS0P,GAAaC,GACpB,OAAOpW,MAAMkN,QAAQkJ,IAAUA,EAAMF,MAAM,IAE7C,SAASG,GAAa5hB,GACpB,IAAIgS,EAAO,IAAIb,KAAKnR,GAEpB,GAAI,GAAYgS,GACd,OAAOA,EAGT,IAAK,IAAI2L,EAAO9L,UAAUnQ,OAAQmgB,EAAS,IAAItW,MAAMoS,EAAO,EAAIA,EAAO,EAAI,GAAIE,EAAO,EAAGA,EAAOF,EAAME,IACpGgE,EAAOhE,EAAO,GAAKhM,UAAUgM,GAG/B,OAAIgE,EAAOngB,OACFkgB,GAAajT,WAAM,EAAQkT,GAG7B,IAAI1Q,KAEb,SAAS2Q,GAAY9hB,GACnB,IAAIgS,EAAO,IAAIb,KAAKnR,GAGpB,OAFAgS,EAAK+P,SAAS,EAAG,GACjB/P,EAAKM,SAAS,EAAG,EAAG,EAAG,GAChBN,EAET,SAASgQ,GAAahiB,GACpB,IAAIgS,EAAO,IAAIb,KAAKnR,GAGpB,OAFAgS,EAAKI,QAAQ,GACbJ,EAAKM,SAAS,EAAG,EAAG,EAAG,GAChBN,EAET,SAASiQ,GAAWjiB,GAClB,IAAIgS,EAAO,IAAIb,KAAKnR,GAEpB,OADAgS,EAAKM,SAAS,EAAG,EAAG,EAAG,GAChBN,EAET,SAASkQ,GAAY1P,GAWnB,IAVA,IAAIZ,EAAiBY,EAAKZ,eACtBgB,EAAOJ,EAAKI,KACZiM,EAAQrM,EAAKqM,MACb5G,EAAM,GAENkK,EAAWb,GAAW1O,EAAMiM,EAAO,GACnCuD,EAAqBD,EAAS9P,UAE9BgQ,EAAsBD,GAAsBD,EAASjQ,SAAW,EAAIN,GAAkB,EAEjFrR,EAAI8hB,EAAqB9hB,GAAK6hB,EAAoB7hB,IACzD0X,EAAIkB,KAAKmI,GAAW1O,EAAMiM,EAAOte,EAAI6hB,IAIvCD,EAASJ,SAASlD,EAAQ,EAAG,GAG7B,IAFA,IAAIyD,EAAwBH,EAAS9P,UAE5B6H,EAAK,EAAGA,GAAMoI,EAAuBpI,IAC5CjC,EAAIkB,KAAKmI,GAAW1O,EAAMiM,EAAO3E,IAMnC,IAHA,IAAIqI,EAAkBH,EAAqBC,EAAsB,EAC7DG,EAAkB,GAAQD,EAAkBD,EAEvCG,EAAM,EAAGA,GAAOD,EAAiBC,IACxCxK,EAAIkB,KAAKmI,GAAW1O,EAAMiM,EAAOyD,EAAwBG,IAG3D,OAAOxK,EAET,SAAS8J,GAASW,EAAWC,GAC3B,IAAI3Q,EAAO,IAAIb,KAAKuR,GAChB7D,EAAQ+D,OAAOD,GACf/P,EAAOZ,EAAKa,cACZgQ,EAAcvB,GAAW1O,EAAMiM,EAAQ,EAAG,GAAGxM,UAC7CJ,EAAMD,EAAKK,UAEf,OADAL,EAAK+P,SAASlD,EAAOxL,KAAKyP,IAAI7Q,EAAK4Q,IAC5B7Q,EAET,SAAS+Q,GAAWvb,EAAQ6R,GAC1B,IAAIrH,EAAO,IAAIb,KAAK3J,GAChBwb,EAAO,IAAI7R,KAAKkI,GAEpB,OADArH,EAAKM,SAAS0Q,EAAKjN,WAAYiN,EAAK7M,aAAc6M,EAAK1M,cAChDtE,EAQT,SAASiR,GAAMhL,EAAKiL,GAClB,IAAK3X,MAAMkN,QAAQR,GACjB,MAAO,GAGT,IAAIsF,EAAS,GACTxJ,EAAMkE,EAAIvW,OACVnB,EAAI,EACR2iB,EAAOA,GAAQnP,EAEf,MAAOxT,EAAIwT,EACTwJ,EAAOpE,KAAKlB,EAAI1J,MAAMhO,EAAGA,GAAK2iB,IAGhC,OAAO3F,EAQT,SAAS4F,GAAS/I,GAChB,MAA+C,oBAAxC5V,OAAO4M,UAAU9E,SAAS+E,KAAK+I,GAQxC,SAASgJ,GAAKhJ,EAAKhQ,GACjB,IAAK+Y,GAAS/I,GAAM,MAAO,GAEtB7O,MAAMkN,QAAQrO,KACjBA,EAAQ,CAACA,IAGX,IAAIiZ,EAAM,GAMV,OALAjZ,EAAMkP,SAAQ,SAAUgK,GAClBA,KAAQlJ,IACViJ,EAAIC,GAAQlJ,EAAIkJ,OAGbD,EAQT,SAASE,GAAU/b,EAAQ6R,GACzB,IAAK8J,GAAS3b,GACZ,MAAO,GAGT,IAAI+V,EAAS/V,EAcb,OAZI2b,GAAS9J,IACX7U,OAAOC,KAAK4U,GAAQC,SAAQ,SAAU9Y,GACpC,IAAIR,EAAQqZ,EAAO7Y,GAEf2iB,GAASnjB,IAAUmjB,GAAS3b,EAAOhH,MACrCR,EAAQujB,GAAU/b,EAAOhH,GAAMR,IAGjCud,EAASoC,GAAe,GAAIpC,EAAQ,GAAgB,GAAI/c,EAAKR,OAI1Dud,EAGT,SAASiG,GAAejM,GACvB,OAAOA,GAAKA,EAAEkM,YAAcjf,OAAO4M,UAAUsO,eAAerO,KAAKkG,EAAG,WAAaA,EAAE,WAAaA,EAGjG,SAASmM,GAAqBC,EAAIC,GACjC,OAAOA,EAAS,CAAEC,QAAS,IAAMF,EAAGC,EAAQA,EAAOC,SAAUD,EAAOC,QAGrE,IAAI,GAAKH,IAAqB,SAAUE,EAAQC,GAEhDrf,OAAOkV,eAAemK,EAAS,aAAc,CAC3C7jB,OAAO,IAET6jB,EAAQ,gBAAa,EACrB,IAAInO,EAAS,CACXnC,OAAQ,CAAC,UAAW,WAAY,QAAS,QAAS,MAAO,OAAQ,OAAQ,SAAU,YAAa,UAAW,WAAY,YACvHC,YAAa,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC3FC,SAAU,CAAC,SAAU,SAAU,UAAW,YAAa,WAAY,SAAU,YAC7EC,cAAe,CAAC,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAC1DC,YAAa,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAClD/B,eAAgB,EAChBe,sBAAuB,GAErBmR,EAAWpO,EACfmO,EAAQ,WAAaC,EACrBF,EAAOC,QAAUA,EAAQjV,WAGrBmV,GAAOP,GAAc,IAErBQ,GAAO,CACTC,aAAcF,GACdG,WAAY,OACZC,YAAa,MACbC,iBAAiB,GAGfC,GAAgB,KAChBC,GAAU,GAEd,SAAS,GAAO/hB,EAAMqW,EAAQ2L,GAC5B,GAAoB,kBAAThiB,EAAmB,OAAO+hB,GAAQD,IAC7C,IAAIG,EAAIH,GAeR,OAbIC,GAAQ/hB,KACViiB,EAAIjiB,GAGFqW,IACF0L,GAAQ/hB,GAAQqW,EAChB4L,EAAIjiB,GAGDgiB,IACHF,GAAgBG,GAGXF,GAAQ/hB,IAAS+hB,GAAQD,IAOlC,SAASI,GAAUliB,GACjB,OAAO,GAAOA,EAAM,MAAM,GAI5B,SAASmiB,GAAYf,GACnB,IAAIgB,GAAY,EAChB,OAAO,WAGL,IAFA,IAAIC,EAAQvlB,KAEHse,EAAO9L,UAAUnQ,OAAQkc,EAAO,IAAIrS,MAAMoS,GAAOE,EAAO,EAAGA,EAAOF,EAAME,IAC/ED,EAAKC,GAAQhM,UAAUgM,GAGrB8G,IACJA,GAAY,EACZE,uBAAsB,WACpBF,GAAY,EACZhB,EAAGhV,MAAMiW,EAAOhH,QAStB,SAASkH,GAAoBC,GAC3B,IAAIC,EAAkBD,EAAQ3jB,MAAMC,QAChC4jB,EAAqBF,EAAQ3jB,MAAM8jB,WACvCH,EAAQ3jB,MAAMC,QAAU,QACxB0jB,EAAQ3jB,MAAM8jB,WAAa,SAC3B,IAAIC,EAASzV,OAAO0V,iBAAiBL,GACjCzjB,EAAQyjB,EAAQjY,YAAcgP,SAASqJ,EAAOE,WAAY,IAAMvJ,SAASqJ,EAAOG,YAAa,IAC7F1iB,EAASmiB,EAAQQ,aAAezJ,SAASqJ,EAAOle,UAAW,IAAM6U,SAASqJ,EAAOK,aAAc,IAGnG,OAFAT,EAAQ3jB,MAAMC,QAAU2jB,EACxBD,EAAQ3jB,MAAM8jB,WAAaD,EACpB,CACL3jB,MAAOA,EACPsB,OAAQA,GAWZ,SAAS6iB,GAAoBC,EAAIC,EAAaC,EAAcC,GAC1D,IAAIniB,EAAO,EACPY,EAAM,EACNyI,EAAU,EACV+Y,EAAU,EACVC,EAAeL,EAAGM,wBAClBC,EAAKja,SAASka,gBAAgBC,YAC9BC,EAAKpa,SAASka,gBAAgBG,aAuBlC,OArBIR,IACF9Y,EAAU2C,OAAO4W,YAAcP,EAAariB,KAC5CoiB,EAAUpW,OAAO6W,YAAcR,EAAazhB,KAI5CZ,EADEuiB,EAAKF,EAAariB,KAAOiiB,GAAeI,EAAaS,MAAQb,EACxD5Y,EAAUgZ,EAAariB,KAAO,EAC5BqiB,EAAariB,KAAOqiB,EAAazkB,MAAQ,GAAK2kB,EAAK,EACrDlZ,EAEAA,EAAUgZ,EAAazkB,MAAQqkB,EAItCrhB,EADEyhB,EAAazhB,KAAOshB,GAAgBQ,EAAKL,EAAapkB,QAAUikB,EAC5DE,EAAUM,EAAKL,EAAazhB,IAAMshB,EAC/BG,EAAazhB,IAAMyhB,EAAanjB,OAAS,GAAKwjB,EAAK,EACtDN,EAAUC,EAAanjB,OAEvBkjB,EAAUF,EAGX,CACLliB,KAAM,GAAGuQ,OAAOvQ,EAAM,MACtBY,IAAK,GAAG2P,OAAO3P,EAAK,OAGxB,SAASmiB,GAAgBC,GACvB,IAAIC,EAAQ9U,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK7F,SAAS4a,KAEzF,IAAKF,GAAQA,IAASC,EACpB,OAAO,KAGT,IAAIvlB,EAAQ,SAAepB,EAAOsjB,GAChC,OAAO8B,iBAAiBplB,EAAO,MAAM6mB,iBAAiBvD,IAGpD5H,EAAQ,gBACRoL,EAASpL,EAAM6E,KAAKnf,EAAMslB,EAAM,YAActlB,EAAMslB,EAAM,cAAgBtlB,EAAMslB,EAAM,eAC1F,OAAOI,EAASJ,EAAOD,GAAgBC,EAAKrb,WAAYsb,GA3H1DrC,GAAQD,IAAiBL,GA+HzB,IAAI+C,GAAS,CACXxkB,KAAM,QACNykB,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGbxE,MAAO,CACL8c,QAAS,CACPpkB,KAAMqkB,QACNvY,SAAS,GAEXwY,aAAc,CACZtkB,KAAMqkB,QACNvY,SAAS,IAGbtE,KAAM,WACJ,MAAO,CACLhG,IAAK,GACLZ,KAAM,KAGVqH,MAAO,CACLmc,QAAS,CACPG,WAAW,EACXC,QAAS,SAAiBxT,GACxB,IAAI8Q,EAAQvlB,KAEZA,KAAKkoB,WAAU,WACTzT,GACF8Q,EAAM4C,qBAMhBtc,QAAS,WACP,IAAIuc,EAASpoB,KAETA,KAAK+nB,cACPpb,SAAS4a,KAAKc,YAAYroB,KAAK4L,KAGjC5L,KAAKsoB,eAAiB,eAAgB3b,SAAW,aAAe,YAChEA,SAAS4b,iBAAiBvoB,KAAKsoB,eAAgBtoB,KAAKwoB,oBAEpD,IAAIC,EAAkBzoB,KAAK8P,QAAQlE,IACnC5L,KAAK0oB,cAAgBrD,IAAY,WAC/B,OAAO+C,EAAOD,kBAEhBnoB,KAAK2oB,cAAgBvB,GAAgBqB,IAAoBpY,OAEzDrQ,KAAK2oB,cAAcJ,iBAAiB,SAAUvoB,KAAK0oB,eAEnDrY,OAAOkY,iBAAiB,SAAUvoB,KAAK0oB,gBAEzCE,cAAe,WACT5oB,KAAK+nB,cAAgB/nB,KAAK4L,IAAII,YAChChM,KAAK4L,IAAII,WAAW6c,YAAY7oB,KAAK4L,KAGvCe,SAASmc,oBAAoB9oB,KAAKsoB,eAAgBtoB,KAAKwoB,oBAEvDxoB,KAAK2oB,cAAcG,oBAAoB,SAAU9oB,KAAK0oB,eAEtDrY,OAAOyY,oBAAoB,SAAU9oB,KAAK0oB,gBAE5Cpc,QAAS,CACPkc,mBAAoB,SAA4BO,GAC9C,GAAK/oB,KAAK6nB,QAAV,CACA,IAAI1f,EAAS4gB,EAAI5gB,OACbke,EAAKrmB,KAAK4L,IAEVya,IAAOA,EAAG2C,SAAS7gB,IACrBnI,KAAKyQ,MAAM,eAAgBsY,KAG/BZ,aAAc,WACZ,GAAKnoB,KAAK6nB,QAAV,CACA,IAAIoB,EAAQjpB,KAAK4L,IACb6c,EAAkBzoB,KAAK8P,QAAQlE,IAC/Bmc,EAAe/nB,KAAK+nB,aAEnB/nB,KAAKkpB,aACRlpB,KAAKkpB,WAAazD,GAAoBwD,IAGxC,IAAIE,EAAmBnpB,KAAKkpB,WACxBjnB,EAAQknB,EAAiBlnB,MACzBsB,EAAS4lB,EAAiB5lB,OAE1B6lB,EAAuBhD,GAAoBqC,EAAiBxmB,EAAOsB,EAAQwkB,GAC3E1jB,EAAO+kB,EAAqB/kB,KAC5BY,EAAMmkB,EAAqBnkB,IAE/BjF,KAAKqE,KAAOA,EACZrE,KAAKiF,IAAMA,MAKjB,SAASokB,GAAmBC,EAAUvnB,EAAO2lB,EAAQ6B,EAASC,EAAsBC,EAElFC,EAAYC,EAAgBC,EAAmBC,GACrB,mBAAfH,IACTE,EAAoBD,EACpBA,EAAiBD,EACjBA,GAAa,GAIf,IAiBII,EAjBAzjB,EAA4B,oBAAXqhB,EAAwBA,EAAOrhB,QAAUqhB,EAsD9D,GApDI4B,GAAYA,EAASxpB,SACvBuG,EAAQvG,OAASwpB,EAASxpB,OAC1BuG,EAAQxE,gBAAkBynB,EAASznB,gBACnCwE,EAAQ0jB,WAAY,EAEhBP,IACFnjB,EAAQ2jB,YAAa,IAKrBT,IACFljB,EAAQ4jB,SAAWV,GAKjBE,GAEFK,EAAO,SAAcI,GAEnBA,EAAUA,GACVlqB,KAAKmqB,QAAUnqB,KAAKmqB,OAAOC,YAC3BpqB,KAAKqqB,QAAUrqB,KAAKqqB,OAAOF,QAAUnqB,KAAKqqB,OAAOF,OAAOC,WAGnDF,GAA0C,qBAAxBI,sBACrBJ,EAAUI,qBAIRvoB,GACFA,EAAMiQ,KAAKhS,KAAM4pB,EAAkBM,IAIjCA,GAAWA,EAAQK,uBACrBL,EAAQK,sBAAsBC,IAAIf,IAMtCpjB,EAAQokB,aAAeX,GACd/nB,IACT+nB,EAAOJ,EAAa,SAAUQ,GAC5BnoB,EAAMiQ,KAAKhS,KAAM6pB,EAAqBK,EAASlqB,KAAK0qB,MAAMC,SAASC,cACjE,SAAUV,GACZnoB,EAAMiQ,KAAKhS,KAAM2pB,EAAeO,MAIhCJ,EACF,GAAIzjB,EAAQ2jB,WAAY,CAEtB,IAAIa,EAAiBxkB,EAAQvG,OAE7BuG,EAAQvG,OAAS,SAAkCmB,EAAGipB,GAEpD,OADAJ,EAAK9X,KAAKkY,GACHW,EAAe5pB,EAAGipB,QAEtB,CAEL,IAAIY,EAAWzkB,EAAQ0kB,aACvB1kB,EAAQ0kB,aAAeD,EAAW,GAAGlW,OAAOkW,EAAUhB,GAAQ,CAACA,GAInE,OAAOpC,EAIT,IAuxCIsD,GAvxCAC,GAAiBvD,GAGjBwD,GAAiB,WACnB,IAAInrB,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,aAAc,CACtBE,MAAO,CACL,KAAQN,EAAI6nB,YAAc,kBAE3B,CAAC7nB,EAAI8nB,QAAU1nB,EAAG,MAAO,CAC1BuC,MAAO3C,EAAI6nB,YAAc,oBAAsB7nB,EAAI6nB,YAAc,oBACjE7lB,MAAO,CACLkD,IAAKlF,EAAIkF,IACTZ,KAAMtE,EAAIsE,KACV8mB,SAAU,aAEX,CAACprB,EAAIiH,GAAG,YAAa,GAAKjH,EAAI0C,QAG/B2oB,GAA0B,GAG1BC,QAAwB5Y,EAGxB6Y,QAAmB7Y,EAGnB8Y,QAA4B9Y,EAG5B+Y,IAAiC,EAOjCC,GAAoBpC,GAAmB,CACzCvpB,OAAQorB,GACRrpB,gBAAiBupB,IAChBC,GAAuBJ,GAAgBK,GAAkBE,GAAgCD,IAA2B,OAAO9Y,OAAWA,OAAWA,GAKhJiZ,GAAmB,WACrB,IAAI3rB,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfE,MAAO,CACL,MAAS,6BACT,QAAW,gBACX,MAAS,MACT,OAAU,QAEX,CAACF,EAAG,OAAQ,CACbE,MAAO,CACL,EAAK,ykBAKPsrB,GAA4B,GAG5BC,QAA0BnZ,EAG1BoZ,QAAqBpZ,EAGrBqZ,QAA8BrZ,EAG9BsZ,IAAmC,EAOnCC,GAAsB3C,GAAmB,CAC3CvpB,OAAQ4rB,GACR7pB,gBAAiB8pB,IAChBC,GAAyB,GAAIC,GAAoBE,GAAkCD,IAA6B,OAAOrZ,OAAWA,OAAWA,GAK5IwZ,GAAmB,WACrB,IAAIlsB,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfE,MAAO,CACL,MAAS,6BACT,QAAW,gBACX,MAAS,MACT,OAAU,QAEX,CAACF,EAAG,OAAQ,CACbE,MAAO,CACL,EAAK,6QAKP6rB,GAA4B,GAG5BC,QAA0B1Z,EAG1B2Z,QAAqB3Z,EAGrB4Z,QAA8B5Z,EAG9B6Z,IAAmC,EAOnCC,GAAsBlD,GAAmB,CAC3CvpB,OAAQmsB,GACRpqB,gBAAiBqqB,IAChBC,GAAyB,GAAIC,GAAoBE,GAAkCD,IAA6B,OAAO5Z,OAAWA,OAAWA,GAY5I+Z,GAAW,CACbzhB,MAAO,CACLtH,KAAM8U,QAERoP,OAAQ,CACNC,YAAa,CACXrY,QAAS,QAMXkd,GAAmBD,GAGnBE,GAAmB,WACrB,IAAI3sB,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,SAAUJ,EAAIkK,GAAG,CACzBvH,MAAO3C,EAAI6nB,YAAc,QAAU7nB,EAAI6nB,YAAc,aAAe7nB,EAAI6nB,YAAc,aAAe7nB,EAAI0D,KACzGpD,MAAO,CACL,KAAQ,WAETN,EAAI4sB,YAAa,CAACxsB,EAAG,IAAK,CAC3BuC,MAAO3C,EAAI6nB,YAAc,SAAW7nB,EAAI0D,UAIxCmpB,GAA4B,GAG5BC,QAA0Bpa,EAG1Bqa,QAAqBra,EAGrBsa,QAA8Bta,EAG9Bua,IAAmC,EAOnCC,GAAsB5D,GAAmB,CAC3CvpB,OAAQ4sB,GACR7qB,gBAAiB+qB,IAChBC,GAAyBJ,GAAkBK,GAAoBE,GAAkCD,IAA6B,OAAOta,OAAWA,OAAWA,GAE1Jya,GAAW,CACbhqB,KAAM,YACNkO,WAAY,CACV+b,WAAYF,IAEdtF,OAAQ,CACNvC,UAAW,CACT7V,QAAS,WACP,OAAO6V,KAGXzR,QAAS,CACPpE,QAAS,WACP,OAAOoE,IAGXiU,YAAa,CACXrY,QAAS,MAEX6d,iBAAkB,CAChB7d,aAASkD,GAEX4a,iBAAkB,CAChB9d,aAASkD,IAGb1H,MAAO,CACL+X,SAAU,CACRrf,KAAMqO,KACNvC,QAAS,WACP,OAAO,IAAIuC,OAGfwb,eAAgB,CACd7pB,KAAMqkB,QACNvY,SAAS,GAEXge,YAAa,CACX9pB,KAAM8U,OACNhJ,QAAS,cAEXie,cAAe,CACb/pB,KAAMgqB,SACNle,QAAS,WACP,MAAO,KAGXme,eAAgB,CACdjqB,KAAMgqB,SACNle,QAAS,WACP,MAAO,MAIbjE,SAAU,CACRiH,eAAgB,WACd,OAAOvS,KAAKolB,YAAYR,aAAarS,gBAAkB,GAEzDob,UAAW,WACT,IAAIC,EAAkB5tB,KAAKolB,YACvBP,EAAa+I,EAAgB/I,WAC7BE,EAAkB6I,EAAgB7I,gBAClC8I,EAAwBD,EAAgB9I,YACxCA,OAAwC,IAA1B+I,EAAmC,MAAQA,EAEzDC,EAAY,CACdC,MAAO,OACPlpB,MAAO7E,KAAKguB,WAAWhuB,KAAK8iB,SAAU+B,IAEpCoJ,EAAa,CACfF,MAAO,QACPlpB,MAAO7E,KAAKguB,WAAWhuB,KAAK8iB,SAAUgC,IAExC,OAAOC,EAAkB,CAACkJ,EAAYH,GAAa,CAACA,EAAWG,IAEjEC,KAAM,WACJ,IAAI7X,EAASrW,KAAKolB,YACd8I,EAAO7X,EAAO6X,MAAQ7X,EAAOuO,aAAatQ,YAC9C,OAAO4Z,EAAKtZ,OAAOsZ,GAAMhf,MAAMlP,KAAKuS,eAAgBvS,KAAKuS,eAAiB,IAE5E+P,MAAO,WACL,IAAI/O,EAAOvT,KAAK8iB,SAAStP,cACrBgM,EAAQxf,KAAK8iB,SAAS5M,WACtB0C,EAAMiK,GAAY,CACpBtQ,eAAgBvS,KAAKuS,eACrBgB,KAAMA,EACNiM,MAAOA,IAET,OAAOoE,GAAMhL,EAAK,KAGtBtM,QAAS,CACP6hB,gBAAiB,SAAyBC,GACxC,IAAI7a,EAAOvT,KAAK8iB,SAAStP,cACrBgM,EAAQxf,KAAK8iB,SAAS5M,WAC1B,OAAO+L,GAAW1O,EAAMiM,EAAQ4O,IAElCC,oBAAqB,WACnBruB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,iBAAiB,GAAI,eAEzDG,qBAAsB,WACpBtuB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,gBAAgB,GAAI,eAExDI,0BAA2B,WACzBvuB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,iBAAiB,IAAK,cAE1DK,2BAA4B,WAC1BxuB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,gBAAgB,IAAK,cAEzDM,kBAAmB,SAA2BV,GAC5C/tB,KAAKyQ,MAAM,cAAesd,IAE5BW,iBAAkB,SAA0BxjB,GACL,oBAA1BlL,KAAKotB,kBACdptB,KAAKotB,iBAAiBliB,IAG1ByjB,iBAAkB,SAA0BzjB,GACL,oBAA1BlL,KAAKqtB,kBACdrtB,KAAKqtB,iBAAiBniB,IAG1B0jB,gBAAiB,SAAyB7F,GACxC,IAAI5gB,EAAS4gB,EAAI5gB,OAEoB,QAAjCA,EAAOkF,QAAQwhB,gBACjB1mB,EAASA,EAAO6D,YAGlB,IAAImR,EAAQhV,EAAO2mB,aAAa,gBAEhC,GAAI3R,EAAO,CACT,IAAI4R,EAAmB5R,EAAM6R,MAAM,KAAKhS,KAAI,SAAUiS,GACpD,OAAOxS,SAASwS,EAAG,OAEjBC,EAAoB,GAAeH,EAAkB,GACrD5jB,EAAM+jB,EAAkB,GACxBC,EAAMD,EAAkB,GAExBvc,EAAO3S,KAAKsiB,MAAMnX,GAAKgkB,GAC3BnvB,KAAKyQ,MAAM,SAAU,IAAIqB,KAAKa,MAGlCqb,WAAY,SAAoBrb,EAAMyc,GACpC,OAAO,EAAOzc,EAAMyc,EAAK,CACvB/Y,OAAQrW,KAAKolB,YAAYR,gBAG7ByK,aAAc,SAAsB1c,GAClC,IAAIyc,EAAMpvB,KAAKutB,YACf,OAAOvtB,KAAKguB,WAAWrb,EAAMyc,IAE/BE,cAAe,SAAuB3c,GACpC,OAAO3S,KAAK2T,QAAQhB,EAAM3S,KAAKolB,YAAYR,iBAM7C2K,GAAmBrC,GAGnBsC,GAAmB,WACrB,IAAIzvB,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfuC,MAAO3C,EAAI6nB,YAAc,aAAe7nB,EAAI6nB,YAAc,wBACzD,CAACznB,EAAG,MAAO,CACZuC,MAAO3C,EAAI6nB,YAAc,oBACxB,CAACznB,EAAG,cAAe,CACpBE,MAAO,CACL,KAAQ,eAEVG,GAAI,CACF,MAAST,EAAIwuB,6BAEbxuB,EAAI6B,GAAG,KAAMzB,EAAG,cAAe,CACjCE,MAAO,CACL,KAAQ,QAEVG,GAAI,CACF,MAAST,EAAIsuB,uBAEbtuB,EAAI6B,GAAG,KAAMzB,EAAG,cAAe,CACjCE,MAAO,CACL,KAAQ,gBAEVG,GAAI,CACF,MAAST,EAAIyuB,8BAEbzuB,EAAI6B,GAAG,KAAMzB,EAAG,cAAe,CACjCE,MAAO,CACL,KAAQ,SAEVG,GAAI,CACF,MAAST,EAAIuuB,wBAEbvuB,EAAI6B,GAAG,KAAMzB,EAAG,OAAQ,CAC1BuC,MAAO3C,EAAI6nB,YAAc,0BACxB7nB,EAAIiB,GAAGjB,EAAI4tB,WAAW,SAAU5qB,GACjC,OAAO5C,EAAG,SAAU,CAClBgB,IAAK4B,EAAKgrB,MACVrrB,MAAO3C,EAAI6nB,YAAc,QAAU7nB,EAAI6nB,YAAc,aAAe7nB,EAAI6nB,YAAc,gBAAkB7kB,EAAKgrB,MAC7G1tB,MAAO,CACL,KAAQ,UAEVG,GAAI,CACF,MAAS,SAAekB,GACtB,OAAO3B,EAAI0uB,kBAAkB1rB,EAAKgrB,UAGrC,CAAChuB,EAAI6B,GAAG,aAAe7B,EAAIyC,GAAGO,EAAK8B,OAAS,iBAC7C,IAAK,GAAI9E,EAAI6B,GAAG,KAAMzB,EAAG,MAAO,CAClCuC,MAAO3C,EAAI6nB,YAAc,qBACxB,CAACznB,EAAG,QAAS,CACduC,MAAO3C,EAAI6nB,YAAc,UAAY7nB,EAAI6nB,YAAc,eACtD,CAACznB,EAAG,QAAS,CAACA,EAAG,KAAM,CAACJ,EAAIutB,eAAiBntB,EAAG,KAAM,CACvDuC,MAAO3C,EAAI6nB,YAAc,wBACtB7nB,EAAI0C,KAAM1C,EAAI6B,GAAG,KAAM7B,EAAIiB,GAAGjB,EAAImuB,MAAM,SAAUtb,GACrD,OAAOzS,EAAG,KAAM,CACdgB,IAAKyR,GACJ,CAAC7S,EAAI6B,GAAG7B,EAAIyC,GAAGoQ,UACf,KAAM7S,EAAI6B,GAAG,KAAMzB,EAAG,QAAS,CAClCK,GAAI,CACF,MAAST,EAAI6uB,kBAEd7uB,EAAIiB,GAAGjB,EAAIuiB,OAAO,SAAUnX,EAAKjK,GAClC,OAAOf,EAAG,KAAM,CACdgB,IAAKD,EACLwB,MAAO,CAAC3C,EAAI6nB,YAAc,YAAa7nB,EAAIytB,cAAcriB,KACxD,CAACpL,EAAIutB,eAAiBntB,EAAG,KAAM,CAChCuC,MAAO3C,EAAI6nB,YAAc,eACzBvnB,MAAO,CACL,eAAgBa,EAAI,OAErB,CAACnB,EAAI6B,GAAG,iBAAmB7B,EAAIyC,GAAGzC,EAAIuvB,cAAcnkB,EAAI,KAAO,kBAAoBpL,EAAI0C,KAAM1C,EAAI6B,GAAG,KAAM7B,EAAIiB,GAAGmK,GAAK,SAAUD,EAAMukB,GACvI,OAAOtvB,EAAG,KAAM,CACdgB,IAAKsuB,EACL3tB,YAAa,OACbY,MAAO3C,EAAI2tB,eAAexiB,GAC1B7K,MAAO,CACL,eAAgBa,EAAI,IAAMuuB,EAC1B,MAAS1vB,EAAIsvB,aAAankB,IAE5B1K,GAAI,CACF,WAAc,SAAoBkB,GAChC,OAAO3B,EAAI2uB,iBAAiBxjB,IAE9B,WAAc,SAAoBxJ,GAChC,OAAO3B,EAAI4uB,iBAAiBzjB,MAG/B,CAAC/K,EAAG,MAAO,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAG0I,EAAK8H,oBAC/B,MACH,UAGF0c,GAA4B,GAG5BC,QAA0Bld,EAG1Bmd,QAAqBnd,EAGrBod,QAA8Bpd,EAG9Bqd,IAAmC,EAOnCC,GAAsB1G,GAAmB,CAC3CvpB,OAAQ0vB,GACR3tB,gBAAiB6tB,IAChBC,GAAyBJ,GAAkBK,GAAoBE,GAAkCD,IAA6B,OAAOpd,OAAWA,OAAWA,GAG1Jud,GAAW,CACb9sB,KAAM,aACNkO,WAAY,CACV+b,WAAYF,IAEdtF,OAAQ,CACNvC,UAAW,CACT7V,QAAS,WACP,OAAO6V,KAGXwC,YAAa,CACXrY,QAAS,OAGbxE,MAAO,CACL+X,SAAU,CACRrf,KAAMqO,KACNvC,QAAS,WACP,OAAO,IAAIuC,OAGf4b,eAAgB,CACdjqB,KAAMgqB,SACNle,QAAS,WACP,MAAO,MAIbjE,SAAU,CACR2kB,aAAc,WACZ,OAAOjwB,KAAK8iB,SAAStP,eAEvBU,OAAQ,WACN,IAAImC,EAASrW,KAAKolB,YACd8K,EAAe7Z,EAAOnC,QAAUmC,EAAOuO,aAAazQ,YACpDD,EAASgc,EAAalT,KAAI,SAAU3b,EAAMme,GAC5C,MAAO,CACLne,KAAMA,EACNme,MAAOA,MAGX,OAAOoE,GAAM1P,EAAQ,KAGzB5H,QAAS,CACP6hB,gBAAiB,SAAyBgC,GACxC,IAAI5c,EAAOvT,KAAK8iB,SAAStP,cACrBgM,EAAQxf,KAAK8iB,SAAS5M,WAC1B,OAAO+L,GAAW1O,EAAO4c,EAAU3Q,IAErC+O,0BAA2B,WACzBvuB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,iBAAiB,GAAI,cAEzDK,2BAA4B,WAC1BxuB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,gBAAgB,GAAI,cAExDM,kBAAmB,WACjBzuB,KAAKyQ,MAAM,cAAe,SAE5B2f,YAAa,SAAqBrH,GAChC,IAAI5gB,EAAS4gB,EAAI5gB,OAEoB,QAAjCA,EAAOkF,QAAQwhB,gBACjB1mB,EAASA,EAAO6D,YAGlB,IAAIwT,EAAQrX,EAAO2mB,aAAa,cAE5BtP,GACFxf,KAAKyQ,MAAM,SAAUgM,SAAS+C,EAAO,QAOzC6Q,GAAmBL,GAGnBM,GAAmB,WACrB,IAAIvwB,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfuC,MAAO3C,EAAI6nB,YAAc,aAAe7nB,EAAI6nB,YAAc,yBACzD,CAACznB,EAAG,MAAO,CACZuC,MAAO3C,EAAI6nB,YAAc,oBACxB,CAACznB,EAAG,cAAe,CACpBE,MAAO,CACL,KAAQ,eAEVG,GAAI,CACF,MAAST,EAAIwuB,6BAEbxuB,EAAI6B,GAAG,KAAMzB,EAAG,cAAe,CACjCE,MAAO,CACL,KAAQ,gBAEVG,GAAI,CACF,MAAST,EAAIyuB,8BAEbzuB,EAAI6B,GAAG,KAAMzB,EAAG,OAAQ,CAC1BuC,MAAO3C,EAAI6nB,YAAc,0BACxB,CAACznB,EAAG,SAAU,CACfuC,MAAO3C,EAAI6nB,YAAc,QAAU7nB,EAAI6nB,YAAc,YACrDvnB,MAAO,CACL,KAAQ,UAEVG,GAAI,CACF,MAAST,EAAI0uB,oBAEd,CAAC1uB,EAAI6B,GAAG,aAAe7B,EAAIyC,GAAGzC,EAAIkwB,cAAgB,iBAAkB,GAAIlwB,EAAI6B,GAAG,KAAMzB,EAAG,MAAO,CAChGuC,MAAO3C,EAAI6nB,YAAc,qBACxB,CAACznB,EAAG,QAAS,CACduC,MAAO3C,EAAI6nB,YAAc,UAAY7nB,EAAI6nB,YAAc,eACvDpnB,GAAI,CACF,MAAST,EAAIqwB,cAEdrwB,EAAIiB,GAAGjB,EAAImU,QAAQ,SAAU/I,EAAKjK,GACnC,OAAOf,EAAG,KAAM,CACdgB,IAAKD,GACJnB,EAAIiB,GAAGmK,GAAK,SAAUD,EAAMukB,GAC7B,OAAOtvB,EAAG,KAAM,CACdgB,IAAKsuB,EACL3tB,YAAa,OACbY,MAAO3C,EAAI2tB,eAAexiB,EAAKsU,OAC/Bnf,MAAO,CACL,aAAc6K,EAAKsU,QAEpB,CAACrf,EAAG,MAAO,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAG0I,EAAK7J,cAChC,MACF,QAGFkvB,GAA4B,GAG5BC,QAA0B/d,EAG1Bge,QAAqBhe,EAGrBie,QAA8Bje,EAG9Bke,IAAmC,EAOnCC,GAAsBvH,GAAmB,CAC3CvpB,OAAQwwB,GACRzuB,gBAAiB0uB,IAChBC,GAAyBH,GAAkBI,GAAoBE,GAAkCD,IAA6B,OAAOje,OAAWA,OAAWA,GAG1Joe,GAAW,CACb3tB,KAAM,YACNkO,WAAY,CACV+b,WAAYF,IAEdtF,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGbxE,MAAO,CACL+X,SAAU,CACRrf,KAAMqO,KACNvC,QAAS,WACP,OAAO,IAAIuC,OAGf4b,eAAgB,CACdjqB,KAAMgqB,SACNle,QAAS,WACP,MAAO,KAGXuhB,aAAc,CACZrtB,KAAMgqB,WAGVniB,SAAU,CACRylB,MAAO,WACL,IAAIjO,EAAW,IAAIhR,KAAK9R,KAAK8iB,UAE7B,MAAiC,oBAAtB9iB,KAAK8wB,aACP9wB,KAAK8wB,aAAahO,GAGpB9iB,KAAKgxB,SAASlO,IAEvBmO,UAAW,WACT,OAAOjxB,KAAK+wB,MAAM,GAAG,IAEvBG,SAAU,WACR,IAAI9nB,EAAO,SAAcwP,GACvB,OAAOA,EAAIA,EAAIvW,OAAS,IAG1B,OAAO+G,EAAKA,EAAKpJ,KAAK+wB,UAG1BzkB,QAAS,CACP0kB,SAAU,SAAkBlO,GAI1B,IAHA,IAAImO,EAAsD,GAA1Cjd,KAAKoB,MAAM0N,EAAStP,cAAgB,IAChDud,EAAQ,GAEH7vB,EAAI,EAAGA,EAAI,GAAIA,IACtB6vB,EAAMjX,KAAKmX,EAAY/vB,GAGzB,OAAO0iB,GAAMmN,EAAO,IAEtB5C,gBAAiB,SAAyBgC,GACxC,IAAI5c,EAAOvT,KAAK8iB,SAAStP,cACrBgM,EAAQxf,KAAK8iB,SAAS5M,WAC1B,OAAO+L,GAAW1O,EAAO4c,EAAU3Q,IAErC+O,0BAA2B,WACzBvuB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,iBAAiB,IAAK,gBAE1DK,2BAA4B,WAC1BxuB,KAAKyQ,MAAM,iBAAkBzQ,KAAKmuB,gBAAgB,IAAK,gBAEzDiC,YAAa,SAAqBrH,GAChC,IAAI5gB,EAAS4gB,EAAI5gB,OAEoB,QAAjCA,EAAOkF,QAAQwhB,gBACjB1mB,EAASA,EAAO6D,YAGlB,IAAIuH,EAAOpL,EAAO2mB,aAAa,aAE3Bvb,GACFvT,KAAKyQ,MAAM,SAAUgM,SAASlJ,EAAM,QAOxC4d,GAAmBN,GAGnBO,GAAmB,WACrB,IAAIrxB,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfuC,MAAO3C,EAAI6nB,YAAc,aAAe7nB,EAAI6nB,YAAc,wBACzD,CAACznB,EAAG,MAAO,CACZuC,MAAO3C,EAAI6nB,YAAc,oBACxB,CAACznB,EAAG,cAAe,CACpBE,MAAO,CACL,KAAQ,eAEVG,GAAI,CACF,MAAST,EAAIwuB,6BAEbxuB,EAAI6B,GAAG,KAAMzB,EAAG,cAAe,CACjCE,MAAO,CACL,KAAQ,gBAEVG,GAAI,CACF,MAAST,EAAIyuB,8BAEbzuB,EAAI6B,GAAG,KAAMzB,EAAG,OAAQ,CAC1BuC,MAAO3C,EAAI6nB,YAAc,0BACxB,CAACznB,EAAG,OAAQ,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAIkxB,cAAelxB,EAAI6B,GAAG,KAAMzB,EAAG,OAAQ,CACvEuC,MAAO3C,EAAI6nB,YAAc,+BACvB7nB,EAAI6B,GAAG,KAAMzB,EAAG,OAAQ,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAGzC,EAAImxB,gBAAiB,GAAInxB,EAAI6B,GAAG,KAAMzB,EAAG,MAAO,CACzFuC,MAAO3C,EAAI6nB,YAAc,qBACxB,CAACznB,EAAG,QAAS,CACduC,MAAO3C,EAAI6nB,YAAc,UAAY7nB,EAAI6nB,YAAc,cACvDpnB,GAAI,CACF,MAAST,EAAIqwB,cAEdrwB,EAAIiB,GAAGjB,EAAIgxB,OAAO,SAAU5lB,EAAKjK,GAClC,OAAOf,EAAG,KAAM,CACdgB,IAAKD,GACJnB,EAAIiB,GAAGmK,GAAK,SAAUD,EAAMukB,GAC7B,OAAOtvB,EAAG,KAAM,CACdgB,IAAKsuB,EACL3tB,YAAa,OACbY,MAAO3C,EAAI2tB,eAAexiB,GAC1B7K,MAAO,CACL,YAAa6K,IAEd,CAAC/K,EAAG,MAAO,CAACJ,EAAI6B,GAAG7B,EAAIyC,GAAG0I,WAC3B,MACF,QAGFmmB,GAA4B,GAG5BC,QAA0B7e,EAG1B8e,QAAqB9e,EAGrB+e,QAA8B/e,EAG9Bgf,IAAmC,EAOnCC,GAAsBrI,GAAmB,CAC3CvpB,OAAQsxB,GACRvvB,gBAAiBwvB,IAChBC,GAAyBH,GAAkBI,GAAoBE,GAAkCD,IAA6B,OAAO/e,OAAWA,OAAWA,GAE1Jkf,GAAgB,CAClBzuB,KAAM,gBACNykB,OAAQ,CACNC,YAAa,CACXrY,QAAS,MAEXqiB,mBAAoB,CAClBriB,QAAS,WACP,OAAO,gBAIbxE,MAAO,CACLpK,MAAO,GACPkxB,aAAc,CACZtiB,QAAS,WACP,IAAIoD,EAAO,IAAIb,KAEf,OADAa,EAAKM,SAAS,EAAG,EAAG,EAAG,GAChBN,IAGXmf,aAAc,CACZruB,KAAM8U,QAERwZ,aAAc,CACZtuB,KAAMgqB,SACNle,QAAS,WACP,OAAO,IAGX9L,KAAM,CACJA,KAAM8U,OACNhJ,QAAS,QAEXyiB,WAAY,CACVvuB,KAAMgqB,SACNle,QAAS,WACP,MAAO,KAGX+d,eAAgB,CACd7pB,KAAMqkB,QACNvY,aAASkD,GAEXqe,aAAc,CACZrtB,KAAMgqB,UAERF,YAAa,CACX9pB,KAAM8U,OACNhJ,QAAS,cAEXuT,SAAUhR,KAEVmgB,cAAe,CACbxuB,KAAMqkB,QACNvY,SAAS,IAGbtE,KAAM,WACJ,IAAIinB,EAAS,CAAC,OAAQ,QAAS,QAC3B/U,EAAQnJ,KAAKme,IAAID,EAAOxuB,QAAQ1D,KAAKyD,MAAOyuB,EAAOxuB,QAAQ1D,KAAK8xB,eAChE/D,GAAmB,IAAX5Q,EAAe+U,EAAO/U,GAAS,OAC3C,MAAO,CACL4Q,MAAOA,EACPqE,cAAe,IAAItgB,OAGvBxG,SAAU,CACR+mB,WAAY,WACV,IAAI1xB,EAAQuL,MAAMkN,QAAQpZ,KAAKW,OAASX,KAAKW,MAAQ,CAACX,KAAKW,OACvDqc,EAAM,CACRzJ,KAAMkP,GACNjD,MAAOmD,GACPhQ,KAAMiQ,IAEJ0P,EAAQtV,EAAIhd,KAAKyD,OAASuZ,EAAIrK,KAClC,OAAOhS,EAAMiP,OAAO,IAAaoN,KAAI,SAAUiS,GAC7C,OAAOqD,EAAMrD,OAGjBgB,aAAc,WACZ,OAAOjwB,KAAKoyB,cAAc5e,eAE5B+e,cAAe,WACb,OAAOvyB,KAAKoyB,cAAclc,aAG9BxK,MAAO,CACL/K,MAAO,CACLqnB,WAAW,EACXC,QAAS,gBAEXnF,SAAU,CACRmF,QAAS,gBAEX4J,aAAc,CACZ5J,QAAS,iBAGb3b,QAAS,CACPkmB,aAAc,WACZ,IAAIC,EAAezyB,KAAK8iB,SAExB,IAAK,GAAY2P,GAAe,CAC9B,IAAIpwB,EAASrC,KAAKqyB,WAAWhwB,OAC7BowB,EAAelQ,GAAalgB,EAAS,EAAIrC,KAAKqyB,WAAWhwB,EAAS,GAAKrC,KAAK6xB,cAG9E7xB,KAAKoyB,cAAgBzP,GAAa8P,IAEpCC,WAAY,SAAoB/f,GAC9B,OAAO3S,KAAK+xB,aAAa,IAAIjgB,KAAKa,GAAO3S,KAAKqyB,aAEhDM,SAAU,SAAkBhgB,EAAMlP,GAC3BzD,KAAK0yB,WAAW/f,KACnB3S,KAAKyQ,MAAM,SAAUkC,EAAMlP,EAAMzD,KAAKqyB,YAEtCryB,KAAK4xB,mBAAmB,OAAQjf,EAAMlP,KAG1CmvB,qBAAsB,SAA8B9P,EAAUrf,GAC5D,IAAIovB,EAAc,IAAI/gB,KAAK9R,KAAKoyB,eAChCpyB,KAAKoyB,cAAgBtP,EACrB9iB,KAAKyQ,MAAM,kBAAmBqS,GAC9B9iB,KAAK4xB,mBAAmB,kBAAmB9O,EAAU+P,EAAapvB,IAEpEqvB,kBAAmB,SAA2B/E,GAC5C,IAAIgF,EAAW/yB,KAAK+tB,MACpB/tB,KAAK+tB,MAAQA,EACb/tB,KAAK4xB,mBAAmB,eAAgB7D,EAAOgF,IAEjDC,iBAAkB,SAA0Bzf,GAC1C,GAAkB,SAAdvT,KAAKyD,KAAiB,CACxB,IAAIkP,EAAO3S,KAAKizB,gBAAgB1f,GAChCvT,KAAK2yB,SAAShgB,EAAM,aAKpB,GAHA3S,KAAK4yB,qBAAqB3Q,GAAW1O,EAAMvT,KAAKuyB,eAAgB,QAChEvyB,KAAK8yB,kBAAkB,SAEnB9yB,KAAKiyB,eAA4C,IAA3BjyB,KAAKqyB,WAAWhwB,OAAc,CACtD,IAAI6wB,EAAQ,IAAIphB,KAAK9R,KAAKqyB,WAAW,IAErCa,EAAMxf,YAAYH,GAElBvT,KAAK2yB,SAASO,EAAO,UAI3BC,kBAAmB,SAA2B3T,GAC5C,GAAkB,UAAdxf,KAAKyD,KAAkB,CACzB,IAAIkP,EAAO3S,KAAKozB,iBAAiB5T,GACjCxf,KAAK2yB,SAAShgB,EAAM,cAKpB,GAHA3S,KAAK4yB,qBAAqB3Q,GAAWjiB,KAAKiwB,aAAczQ,GAAQ,SAChExf,KAAK8yB,kBAAkB,QAEnB9yB,KAAKiyB,eAA4C,IAA3BjyB,KAAKqyB,WAAWhwB,OAAc,CACtD,IAAIgxB,EAAS,IAAIvhB,KAAK9R,KAAKqyB,WAAW,IAEtCgB,EAAO3f,YAAY1T,KAAKiwB,cAExBjwB,KAAK2yB,SAASjQ,GAAS2Q,EAAQ7T,GAAQ,WAI7C8T,iBAAkB,SAA0B3gB,GAC1C3S,KAAK2yB,SAAShgB,EAAoB,SAAd3S,KAAKyD,KAAkB,OAAS,SAEtD2vB,iBAAkB,SAA0B5T,GAC1C,OAAOyC,GAAWjiB,KAAKiwB,aAAczQ,IAEvCyT,gBAAiB,SAAyB1f,GACxC,OAAO0O,GAAW1O,EAAM,IAE1BggB,eAAgB,SAAwBC,GACtC,IAAIC,EAAkBD,EAAStd,aAAelW,KAAKuyB,cAC/CmB,EAAU,GAEVF,EAASthB,aAAc,IAAIJ,MAAOmB,SAAS,EAAG,EAAG,EAAG,IACtDygB,EAAQ5Z,KAAK,SAGX2Z,GACFC,EAAQ5Z,KAAK,qBAGf,IAAI6Z,EAAQ3zB,KAAK4zB,cAAcJ,GAM/B,MAJgB,WAAVG,GAAsBF,GAC1BC,EAAQ5Z,KAAK6Z,GAGRD,EAAQ9e,OAAO5U,KAAKgyB,WAAWwB,EAAUxzB,KAAKqyB,WAAYqB,EAAQzW,KAAK,QAEhF4W,gBAAiB,SAAyBrU,GACxC,GAAkB,UAAdxf,KAAKyD,KACP,OAAOzD,KAAKuyB,gBAAkB/S,EAAQ,SAAW,GAGnD,IAAIkU,EAAU,GACVF,EAAWxzB,KAAKozB,iBAAiB5T,GAErC,OADAkU,EAAQ5Z,KAAK9Z,KAAK4zB,cAAcJ,IACzBE,EAAQ9e,OAAO5U,KAAKgyB,WAAWwB,EAAUxzB,KAAKqyB,WAAYqB,EAAQzW,KAAK,QAEhF6W,eAAgB,SAAwBvgB,GACtC,GAAkB,SAAdvT,KAAKyD,KACP,OAAOzD,KAAKiwB,eAAiB1c,EAAO,SAAW,GAGjD,IAAImgB,EAAU,GACVF,EAAWxzB,KAAKizB,gBAAgB1f,GAEpC,OADAmgB,EAAQ5Z,KAAK9Z,KAAK4zB,cAAcJ,IACzBE,EAAQ9e,OAAO5U,KAAKgyB,WAAWwB,EAAUxzB,KAAKqyB,WAAYqB,EAAQzW,KAAK,QAEhF2W,cAAe,SAAuBJ,GACpC,OAAIxzB,KAAK0yB,WAAWc,GACX,WAGLxzB,KAAKqyB,WAAW0B,MAAK,SAAU9E,GACjC,OAAOA,EAAE/c,YAAcshB,EAASthB,aAEzB,SAGF,IAET8hB,aAAc,SAAsB7oB,GAClC,GAAkB,SAAdnL,KAAKyD,KAAiB,MAAO,GACjC,IAAI6uB,EAAQnnB,EAAI,GAAG+G,UACf+hB,EAAM9oB,EAAI,GAAG+G,UACbgiB,EAASl0B,KAAKqyB,WAAW0B,MAAK,SAAU9E,GAC1C,IAAItL,EAAOsL,EAAE/c,UACb,OAAOyR,GAAQ2O,GAAS3O,GAAQsQ,KAElC,OAAOC,EAAS,GAAGtf,OAAO5U,KAAK4nB,YAAa,gBAAkB,KAGlE9nB,OAAQ,WACN,IAAImB,EAAIuR,UAAU,GACdub,EAAQ/tB,KAAK+tB,MACbqE,EAAgBpyB,KAAKoyB,cAEzB,MAAc,SAAVrE,EACK9sB,EAAEywB,GAAqB,CAC5B,MAAS,CACP,SAAYU,EACZ,eAAkBpyB,KAAK8zB,eACvB,aAAgB9zB,KAAK8wB,cAEvB,GAAM,CACJ,OAAU9wB,KAAKgzB,iBACf,eAAkBhzB,KAAK4yB,wBAKf,UAAV7E,EACK9sB,EAAE2vB,GAAqB,CAC5B,MAAS,CACP,SAAYwB,EACZ,eAAkBpyB,KAAK6zB,iBAEzB,GAAM,CACJ,OAAU7zB,KAAKmzB,kBACf,YAAenzB,KAAK8yB,kBACpB,eAAkB9yB,KAAK4yB,wBAKtB3xB,EAAE8uB,GAAqB,CAC5B,MAAS,GAAgB,GAAI,GAAGnb,OAAO5U,KAAK4nB,YAAa,uBAAsC,SAAd5nB,KAAKyD,MACtF,MAAS,CACP,SAAY2uB,EACZ,eAAkBpyB,KAAKuzB,eACvB,cAAiBvzB,KAAKg0B,aACtB,YAAeh0B,KAAKutB,YACpB,eAAiD,mBAAxBvtB,KAAKstB,eAA+BttB,KAAKstB,eAA+B,SAAdttB,KAAKyD,MAE1F,GAAM,CACJ,OAAUzD,KAAKszB,iBACf,YAAetzB,KAAK8yB,kBACpB,eAAkB9yB,KAAK4yB,0BAM3BuB,GAAgB,CAClBjxB,KAAM,gBACNkO,WAAY,CACVugB,cAAeA,IAEjByC,QAAS,WACP,MAAO,CACLhH,iBAAkBptB,KAAKotB,iBACvBC,iBAAkBrtB,KAAKqtB,mBAG3B1F,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGbxE,MAAOuV,GAAe,GAAIqR,GAAc5mB,OACxCE,KAAM,WACJ,MAAO,CACLonB,WAAY,GACZgC,UAAW,GACXC,aAAc,OAGlBhpB,SAAU,CAERipB,gBAAiB,WACf,IAAIvX,EAAM,CACRrK,KAAM,EAEN6M,MAAO,GAEPjM,KAAM,KAGR,OAAOyJ,EAAIhd,KAAKyD,OAASuZ,EAAIrK,MAE/B6hB,gBAAiB,WACf,OAAOC,KAETC,cAAe,WACb,OAAOxoB,MAAMkN,QAAQpZ,KAAK6xB,cAAgB7xB,KAAK6xB,aAAe,CAAC7xB,KAAK6xB,aAAc7xB,KAAK6xB,gBAG3FnmB,MAAO,CACL/K,MAAO,CACLqnB,WAAW,EACXC,QAAS,WACP,IAAI1C,EAAQvlB,KAEZA,KAAKqyB,WAAalQ,GAAiBniB,KAAKW,OAASX,KAAKW,MAAQ,CAAC,IAAImR,KAAKK,KAAM,IAAIL,KAAKK,MACvF,IAAIkiB,EAAYr0B,KAAKqyB,WAAWrV,KAAI,SAAUiS,EAAG/tB,GAC/C,OAAOyhB,GAAaJ,GAAa0M,EAAG1J,EAAMmP,cAAcxzB,QAE1DlB,KAAK20B,gBAAgBN,MAI3B/nB,QAAS,CACPsoB,aAAc,SAAsBjiB,EAAMlP,GACxC,IAAIoxB,EAAmB,GAAe70B,KAAKqyB,WAAY,GACnDyC,EAAaD,EAAiB,GAC9BE,EAAWF,EAAiB,GAE5B,GAAYC,KAAgB,GAAYC,IACtCD,EAAW5iB,UAAYS,EAAKT,UAC9BlS,KAAKqyB,WAAa,CAAC1f,EAAMmiB,GAEzB90B,KAAKqyB,WAAa,CAACyC,EAAYniB,GAGjC3S,KAAK2yB,SAAS3yB,KAAKqyB,WAAY5uB,IAE/BzD,KAAKqyB,WAAa,CAAC1f,EAAM,IAAIb,KAAKK,OAGtCib,iBAAkB,SAA0BliB,GAC1ClL,KAAKs0B,aAAeppB,GAEtBmiB,iBAAkB,WAChBrtB,KAAKs0B,aAAe,MAEtB3B,SAAU,SAAkBrQ,EAAO7e,GACjCzD,KAAKyQ,MAAM,SAAU6R,EAAO7e,IAE9BuxB,oBAAqB,SAA6Br0B,GAChDX,KAAK20B,gBAAgB,CAACh0B,EAAOX,KAAKq0B,UAAU,IAAK,IAEnDY,kBAAmB,SAA2Bt0B,GAC5CX,KAAK20B,gBAAgB,CAAC30B,KAAKq0B,UAAU,GAAI1zB,GAAQ,IAEnDg0B,gBAAiB,SAAyBN,GACxC,IAAIa,EAAc1iB,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EAClF2iB,EAAMn1B,KAAKo1B,eAAef,GAE9B,GAAIc,EAAK,CACP,IAAIrS,EAAW,IAAIhR,KAAKuiB,EAAUa,IAClCpS,EAASJ,SAASI,EAAS5M,YAA8B,IAAhBgf,GAAqBC,EAAMA,IACpEd,EAAUa,GAAepS,EAG3B9iB,KAAKq0B,UAAYA,GAEnBe,eAAgB,SAAwBf,GACtC,IAAIgB,EAAa,GAAehB,EAAW,GACvCiB,EAAeD,EAAW,GAC1BE,EAAgBF,EAAW,GAE3BG,EAAWD,EAAc/hB,cAAgB8hB,EAAa9hB,cACtDiiB,EAAYF,EAAcrf,WAAaof,EAAapf,WACpDpD,EAAkB,GAAX0iB,EAAgBC,EACvBhS,EAAMzjB,KAAKu0B,gBACXpC,EAAMnyB,KAAKw0B,gBAEf,OAAI1hB,EAAO2Q,EACFA,EAAM3Q,EAGXA,EAAOqf,EACFA,EAAMrf,EAGR,GAET4iB,gBAAiB,SAAyBlC,EAAUmC,EAAcC,GAChE,IAAIlC,EAAU,GAAG9e,OAAO5U,KAAKgyB,WAAWwB,EAAUmC,EAAcC,IAChE,GAAI,kBAAkB1U,KAAK0U,GAAa,OAAOlC,EAE/C,IAAImC,EAAU,SAAiB5qB,EAAM6qB,GACnC,IAAIxR,EAAK9R,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,SAAUyc,GACrF,OAAOA,EAAE/c,WAEPvR,EAAQ2jB,EAAGrZ,GAEX8qB,EAAaD,EAAM9Y,IAAIsH,GACvB0R,EAAc,GAAeD,EAAY,GACzCtS,EAAMuS,EAAY,GAClB7D,EAAM6D,EAAY,GAEtB,GAAIvS,EAAM0O,EAAK,CACb,IAAIhf,EAAO,CAACgf,EAAK1O,GACjBA,EAAMtQ,EAAK,GACXgf,EAAMhf,EAAK,GAGb,OAAOxS,EAAQ8iB,GAAO9iB,EAAQwxB,GAGhC,OAA4B,IAAxBwD,EAAatzB,QAAgBwzB,EAAQrC,EAAUmC,GAC1CjC,EAAQ9e,OAAO,YAGI,IAAxB+gB,EAAatzB,QAAgBrC,KAAKs0B,cAAgBuB,EAAQrC,EAAU,CAACmC,EAAa,GAAI31B,KAAKs0B,eACtFZ,EAAQ9e,OAAO,kBAGjB8e,IAGX5zB,OAAQ,WACN,IAAIsoB,EAASpoB,KAETiB,EAAIuR,UAAU,GACdyjB,EAAgBj2B,KAAKq0B,UAAUrX,KAAI,SAAU8F,EAAU3F,GACzD,IAAIpS,EAAQuV,GAAe,GAAI8H,EAAO8N,OAAQ,CAC5CpT,SAAUA,EACVniB,MAAOynB,EAAOiK,WACdR,aAAczJ,EAAOsM,cAAcvX,GACnC6U,WAAY5J,EAAOsN,gBAEnBzD,eAAe,IAGbzxB,EAAK,CACPiF,OAAQ2iB,EAAOwM,aACf,kBAA6B,IAAVzX,EAAciL,EAAO4M,oBAAsB5M,EAAO6M,mBAEvE,OAAOh0B,EAAE,iBAAkB,CACzB,MAASqf,GAAe,GAAIvV,GAC5B,GAAMuV,GAAe,GAAI9f,QAGzBonB,EAAc5nB,KAAK4nB,YACvB,OAAO3mB,EAAE,MAAO,CACd,MAAS,GAAG2T,OAAOgT,EAAa,mBAC/B,CAACqO,MAKR,SAASE,KACP,GAAsB,qBAAX9lB,OAAwB,OAAO,EAC1C,QAAuBoC,IAAnBuY,GAA8B,OAAOA,GACzC,IAAIoL,EAAQzpB,SAAS0pB,cAAc,OACnCD,EAAMr0B,MAAM8jB,WAAa,SACzBuQ,EAAMr0B,MAAMu0B,SAAW,SACvBF,EAAMr0B,MAAME,MAAQ,QACpBm0B,EAAMr0B,MAAMopB,SAAW,WACvBiL,EAAMr0B,MAAMkD,IAAM,UAClB0H,SAAS4a,KAAKc,YAAY+N,GAC1B,IAAIG,EAAQ5pB,SAAS0pB,cAAc,OAKnC,OAJAE,EAAMx0B,MAAME,MAAQ,OACpBm0B,EAAM/N,YAAYkO,GAClBvL,GAAiBoL,EAAM3oB,YAAc8oB,EAAM9oB,YAC3C2oB,EAAMpqB,WAAW6c,YAAYuN,GACtBpL,GAIT,IAAIwL,GAAW,CACb7O,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGbtE,KAAM,WACJ,MAAO,CACLwrB,eAAgB,EAChBC,SAAU,GACVC,YAAa,KAGjBC,QAAS,WACP52B,KAAKy2B,eAAiBN,KACtBxpB,SAAS4b,iBAAiB,UAAWvoB,KAAK62B,gBAE5CjO,cAAe,WACbjc,SAAS4b,iBAAiB,UAAWvoB,KAAK62B,gBAE5ChrB,QAAS,WACP7L,KAAKkoB,UAAUloB,KAAK82B,eAEtBxqB,QAAS,CACPwqB,aAAc,WACZ,IAAIC,EAAO/2B,KAAK+L,MAAMgrB,KACtB,GAAKA,EAAL,CACA,IAAIC,EAAuC,IAApBD,EAAK/P,aAAqB+P,EAAKE,aACtDj3B,KAAK22B,YAAcK,EAAmB,IAAM,GAAGpiB,OAAOoiB,EAAkB,KAAO,KAEjFE,aAAc,SAAsBnO,GAClC,IAAI1C,EAAK0C,EAAIoO,cACTF,EAAe5Q,EAAG4Q,aAClBG,EAAY/Q,EAAG+Q,UACnBp3B,KAAK02B,SAAW,GAAG9hB,OAAmB,IAAZwiB,EAAkBH,EAAc,MAE5DI,gBAAiB,SAAyBtO,GACxCA,EAAIuO,2BACJt3B,KAAKu3B,YAAa,EAClB,IAAIC,EAAYx3B,KAAK+L,MAAM0rB,MAAMD,UACjCx3B,KAAK03B,OAAS3O,EAAI4O,QAAUH,EAC5B7qB,SAAS4b,iBAAiB,YAAavoB,KAAK43B,gBAE9CA,cAAe,SAAuB7O,GACpC,GAAK/oB,KAAKu3B,WAAV,CACA,IAAII,EAAU5O,EAAI4O,QACdZ,EAAO/2B,KAAK+L,MAAMgrB,KAClBE,EAAeF,EAAKE,aACpBjQ,EAAe+P,EAAK/P,aACpBP,EAAUkR,EAAU33B,KAAK03B,OACzBzyB,EAAMwhB,EAAUwQ,EAAejQ,EACnC+P,EAAKK,UAAYnyB,IAEnB4xB,cAAe,WACT72B,KAAKu3B,aACPv3B,KAAKu3B,YAAa,EAClB5qB,SAASmc,oBAAoB,YAAa9oB,KAAK43B,mBAOnDC,GAAmBrB,GAGnBsB,GAAmB,WACrB,IAAI/3B,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfuC,MAAO3C,EAAI6nB,YAAc,aACzB7lB,MAAO,CACLopB,SAAU,WACVmL,SAAU,WAEX,CAACn2B,EAAG,MAAO,CACZG,IAAK,OACLoC,MAAO3C,EAAI6nB,YAAc,kBACzB7lB,MAAO,CACLkkB,YAAa,IAAMlmB,EAAI02B,eAAiB,MAE1Cj2B,GAAI,CACF,OAAUT,EAAIm3B,eAEf,CAACn3B,EAAIiH,GAAG,YAAa,GAAIjH,EAAI6B,GAAG,KAAMzB,EAAG,MAAO,CACjDuC,MAAO3C,EAAI6nB,YAAc,oBACxB,CAACznB,EAAG,MAAO,CACZG,IAAK,QACLoC,MAAO3C,EAAI6nB,YAAc,mBACzB7lB,MAAO,CACLwB,OAAQxD,EAAI42B,YACZ1xB,IAAKlF,EAAI22B,UAEXl2B,GAAI,CACF,UAAaT,EAAIs3B,wBAKnBU,GAA4B,GAG5BC,QAA0BvlB,EAG1BwlB,QAAqBxlB,EAGrBylB,QAA8BzlB,EAG9B0lB,IAAmC,EAOnCC,GAAsB/O,GAAmB,CAC3CvpB,OAAQg4B,GACRj2B,gBAAiBk2B,IAChBC,GAAyBH,GAAkBI,GAAoBE,GAAkCD,IAA6B,OAAOzlB,OAAWA,OAAWA,GAI1J4lB,GAAY,SAAmB13B,GAEjC,OADAA,EAAQ8b,SAAS9b,EAAO,IACjBA,EAAQ,GAAK,IAAIiU,OAAOjU,GAAS,GAAGiU,OAAOjU,IAGhD23B,GAAkB,SAAyBj2B,EAAQk2B,EAAMlyB,GAC3D,GAAI6F,MAAMkN,QAAQ/S,GAChB,OAAOA,EAAQuJ,QAAO,SAAUqf,GAC9B,OAAOA,GAAK,GAAKA,EAAI5sB,KAIrBk2B,GAAQ,IACVA,EAAO,GAKT,IAFA,IAAI3f,EAAM,GAED1X,EAAI,EAAGA,EAAImB,EAAQnB,GAAKq3B,EAC/B3f,EAAIkB,KAAK5Y,GAGX,OAAO0X,GAGL4f,GAAW,SAASA,EAAS9S,EAAS+S,GACxC,IAAIC,EAAWlmB,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,EAGnF,GAAIkmB,GAAY,EACdlT,uBAAsB,WACpBE,EAAQ0R,UAAYqB,SAFxB,CAOA,IAAIE,EAAaF,EAAK/S,EAAQ0R,UAC1BwB,EAAOD,EAAaD,EAAW,GACnClT,uBAAsB,WACpB,IAAI4R,EAAY1R,EAAQ0R,UAAYwB,EAEhCxB,GAAaqB,EACf/S,EAAQ0R,UAAYqB,GAItB/S,EAAQ0R,UAAYA,EACpBoB,EAAS9S,EAAS+S,EAAIC,EAAW,UAIjCG,GAAW,CACb31B,KAAM,cACNkO,WAAY,CACV0nB,kBAAmBV,IAErBzQ,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGbxE,MAAO,CACL4H,KAAMb,KACNinB,eAAgB,CACdt1B,KAAM8f,OACNhU,QAAS,KAEXyiB,WAAY,CACVvuB,KAAMgqB,SACNle,QAAS,WACP,MAAO,KAGXypB,YAAa9sB,MACb+sB,cAAe/sB,MACfgtB,cAAehtB,MACfitB,SAAU,CACR11B,KAAMqkB,QACNvY,SAAS,GAEX6pB,WAAY,CACV31B,KAAMqkB,QACNvY,SAAS,GAEX8pB,WAAY,CACV51B,KAAMqkB,QACNvY,SAAS,GAEX+pB,SAAU,CACR71B,KAAM8f,OACNhU,QAAS,GAEXgqB,WAAY,CACV91B,KAAM8f,OACNhU,QAAS,GAEXiqB,WAAY,CACV/1B,KAAM8f,OACNhU,QAAS,GAEXkqB,OAAQ,CACNh2B,KAAMqkB,QACNvY,SAAS,IAGbjE,SAAU,CACRouB,QAAS,WACP,IAAIC,EAAO,GAiBX,OAhBI35B,KAAKm5B,UAAUQ,EAAK7f,KAAK,CAC3BrW,KAAM,OACNm2B,KAAM55B,KAAK65B,iBAET75B,KAAKo5B,YAAYO,EAAK7f,KAAK,CAC7BrW,KAAM,SACNm2B,KAAM55B,KAAK85B,mBAET95B,KAAKq5B,YAAYM,EAAK7f,KAAK,CAC7BrW,KAAM,SACNm2B,KAAM55B,KAAK+5B,mBAET/5B,KAAKy5B,QAAQE,EAAK7f,KAAK,CACzBrW,KAAM,OACNm2B,KAAM55B,KAAKg6B,gBAENL,EAAK/pB,QAAO,SAAUqf,GAC3B,OAAOA,EAAE2K,KAAKv3B,OAAS,OAI7BqJ,MAAO,CACLiH,KAAM,CACJsV,QAAS,WACP,IAAI1C,EAAQvlB,KAEZA,KAAKkoB,WAAU,WACb3C,EAAM0U,iBAAiB1U,EAAMwT,sBAKrCltB,QAAS,WACP7L,KAAKi6B,iBAAiB,IAExB3tB,QAAS,CACPutB,aAAc,WACZ,IAAIzR,EAASpoB,KAEb,OAAOs4B,GAAgBt4B,KAAKy5B,OAAS,GAAK,GAAIz5B,KAAKs5B,SAAUt5B,KAAKg5B,aAAahc,KAAI,SAAUkd,GAC3F,IAAIvnB,EAAO,IAAIb,KAAKsW,EAAOzV,MACvBtR,EAAOg3B,GAAU6B,GAEjB9R,EAAOqR,SACG,IAARS,IACF74B,EAAO,MAGLsR,EAAK+D,YAAc,KACrBwjB,GAAO,KAIX,IAAIv5B,EAAQgS,EAAKM,SAASinB,GAC1B,MAAO,CACLv5B,MAAOA,EACPU,KAAMA,OAIZy4B,eAAgB,WACd,IAAIK,EAASn6B,KAEb,OAAOs4B,GAAgB,GAAIt4B,KAAKu5B,WAAYv5B,KAAKi5B,eAAejc,KAAI,SAAUkd,GAC5E,IAAIv5B,EAAQ,IAAImR,KAAKqoB,EAAOxnB,MAAMynB,WAAWF,GAC7C,MAAO,CACLv5B,MAAOA,EACPU,KAAMg3B,GAAU6B,QAItBH,eAAgB,WACd,IAAIM,EAASr6B,KAEb,OAAOs4B,GAAgB,GAAIt4B,KAAKw5B,WAAYx5B,KAAKk5B,eAAelc,KAAI,SAAUkd,GAC5E,IAAIv5B,EAAQ,IAAImR,KAAKuoB,EAAO1nB,MAAM2nB,WAAWJ,GAC7C,MAAO,CACLv5B,MAAOA,EACPU,KAAMg3B,GAAU6B,QAItBF,YAAa,WACX,IAAIO,EAASv6B,KAEb,MAAO,CAAC,KAAM,MAAMgd,KAAI,SAAU3b,EAAMH,GACtC,IAAIyR,EAAO,IAAIb,KAAKyoB,EAAO5nB,MACvBhS,EAAQgS,EAAKM,SAASN,EAAK+D,WAAa,GAAS,GAAJxV,GACjD,MAAO,CACLG,KAAMA,EACNV,MAAOA,OAIbs5B,iBAAkB,SAA0BvB,GAG1C,IAFA,IAAI8B,EAAWx6B,KAAK4L,IAAI6uB,iBAAiB,WAEhCv5B,EAAI,EAAGA,EAAIs5B,EAASn4B,OAAQnB,IAAK,CACxC,IAAIwkB,EAAU8U,EAASt5B,GACnBw5B,EAAgBtT,GAAgB1B,EAAS1lB,KAAK4L,KAElD,GAAI8uB,EAAe,CACjB,IAAIjC,EAAK/S,EAAQ8R,UACjBgB,GAASkC,EAAejC,EAAIC,MAIlC9D,aAAc,SAAsB7L,GAClC,IAAI5gB,EAAS4gB,EAAI5gB,OACbgvB,EAAgBpO,EAAIoO,cACxB,GAAqC,OAAjChvB,EAAOkF,QAAQwhB,cAAnB,CACA,IAAIprB,EAAO0zB,EAAcrI,aAAa,aAClC6L,EAAWle,SAAS0a,EAAcrI,aAAa,cAAe,IAC9D8L,EAAYne,SAAStU,EAAO2mB,aAAa,cAAe,IACxDnuB,EAAQX,KAAK05B,QAAQiB,GAAUf,KAAKgB,GAAWj6B,MACnDX,KAAKyQ,MAAM,SAAU9P,EAAO8C,OAM9Bo3B,GAAmBhC,GAGnBiC,GAAmB,WACrB,IAAI/6B,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfuC,MAAO3C,EAAI6nB,YAAc,iBACxB7nB,EAAIiB,GAAGjB,EAAI25B,SAAS,SAAUvK,EAAKjuB,GACpC,OAAOf,EAAG,qBAAsB,CAC9BgB,IAAKD,EACLwB,MAAO3C,EAAI6nB,YAAc,gBACxB,CAACznB,EAAG,KAAM,CACXuC,MAAO3C,EAAI6nB,YAAc,aACzBvnB,MAAO,CACL,YAAa8uB,EAAI1rB,KACjB,aAAcvC,GAEhBV,GAAI,CACF,MAAST,EAAI60B,eAEd70B,EAAIiB,GAAGmuB,EAAIyK,MAAM,SAAU72B,EAAM0sB,GAClC,OAAOtvB,EAAG,KAAM,CACdgB,IAAK4B,EAAKpC,MACV+B,MAAO,CAAC3C,EAAI6nB,YAAc,aAAc7nB,EAAIiyB,WAAWjvB,EAAKpC,QAC5DN,MAAO,CACL,aAAcovB,IAEf,CAAC1vB,EAAI6B,GAAG,aAAe7B,EAAIyC,GAAGO,EAAK1B,MAAQ,iBAC5C,QACF,IAGF05B,GAA4B,GAG5BC,QAA0BvoB,EAG1BwoB,QAAqBxoB,EAGrByoB,QAA8BzoB,EAG9B0oB,IAAmC,EAOnCC,GAAsB/R,GAAmB,CAC3CvpB,OAAQg7B,GACRj5B,gBAAiBk5B,IAChBC,GAAyBH,GAAkBI,GAAoBE,GAAkCD,IAA6B,OAAOzoB,OAAWA,OAAWA,GAI9J,SAAS4oB,KACP,IAAI1X,EAAOnR,UAAUnQ,OAAS,QAAsBoQ,IAAjBD,UAAU,GAAmBA,UAAU,GAAK,GAC3E8oB,EAAS3X,EAAKqL,MAAM,KAExB,GAAIsM,EAAOj5B,QAAU,EAAG,CACtB,IAAI8S,EAAQsH,SAAS6e,EAAO,GAAI,IAC5BjmB,EAAUoH,SAAS6e,EAAO,GAAI,IAClC,MAAO,CACLnmB,MAAOA,EACPE,QAASA,GAIb,OAAO,KAGT,IAAIkmB,GAAa,SAAkB7V,EAAS+S,GACtC/S,IACFA,EAAQ0R,UAAYqB,IAIpB+C,GAAW,CACbt4B,KAAM,cACNkO,WAAY,CACV0nB,kBAAmBV,IAErBzQ,OAAQ,CACNvC,UAAW,CACT7V,QAAS,WACP,OAAO6V,KAGXwC,YAAa,CACXrY,QAAS,OAGbxE,MAAO,CACL4H,KAAMb,KACNzL,QAAS,CACP5C,KAAM,CAAC0B,OAAQsoB,UACfle,QAAS,WACP,MAAO,KAGXkC,OAAQ,CACNhO,KAAM8U,OACNhJ,QAAS,YAEXyiB,WAAY,CACVvuB,KAAMgqB,SACNle,QAAS,WACP,MAAO,MAIbjE,SAAU,CACRsuB,KAAM,WACJ,IAAI1b,EAAS,GACT7X,EAAUrG,KAAKqG,QAEnB,GAAuB,oBAAZA,EACT,OAAOA,KAAa,GAGtB,IAAIisB,EAAQ+I,GAAYh1B,EAAQisB,OAC5B2B,EAAMoH,GAAYh1B,EAAQ4tB,KAC1BsE,EAAO8C,GAAYh1B,EAAQkyB,MAC3BnJ,EAAM/oB,EAAQoL,QAAUzR,KAAKyR,OAEjC,GAAI6gB,GAAS2B,GAAOsE,EAMlB,IALA,IAAIkD,EAAenJ,EAAMjd,QAAwB,GAAdid,EAAMnd,MACrCumB,EAAazH,EAAI5e,QAAsB,GAAZ4e,EAAI9e,MAC/BwmB,EAAcpD,EAAKljB,QAAuB,GAAbkjB,EAAKpjB,MAClCT,EAAMV,KAAKoB,OAAOsmB,EAAaD,GAAgBE,GAE1Cz6B,EAAI,EAAGA,GAAKwT,EAAKxT,IAAK,CAC7B,IAAI06B,EAAcH,EAAev6B,EAAIy6B,EACjCxmB,EAAQnB,KAAKoB,MAAMwmB,EAAc,IACjCvmB,EAAUumB,EAAc,GACxBj7B,EAAQ,IAAImR,KAAK9R,KAAK2S,MAAMM,SAASkC,EAAOE,EAAS,GACzD6I,EAAOpE,KAAK,CACVnZ,MAAOA,EACPU,KAAMrB,KAAKguB,WAAWrtB,EAAOyuB,KAKnC,OAAOlR,IAGXrS,QAAS,WACP7L,KAAKi6B,oBAEP3tB,QAAS,CACP0hB,WAAY,SAAoBrb,EAAMyc,GACpC,OAAO,EAAOzc,EAAMyc,EAAK,CACvB/Y,OAAQrW,KAAKolB,YAAYR,gBAG7BqV,iBAAkB,WAChB,IAAIvU,EAAU1lB,KAAK4L,IAAIiwB,cAAc,WACrC,GAAKnW,EAAL,CACA,IAAIgV,EAAgBtT,GAAgB1B,EAAS1lB,KAAK4L,KAClD,GAAK8uB,EAAL,CACA,IAAIjC,EAAK/S,EAAQ8R,UACjB+D,GAAWb,EAAejC,MAE5B7D,aAAc,SAAsBj0B,GAClCX,KAAKyQ,MAAM,SAAU9P,EAAO,WAM9Bm7B,GAAmBN,GAGnBO,GAAmB,WACrB,IAAIh8B,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,qBAAsBJ,EAAIiB,GAAGjB,EAAI65B,MAAM,SAAU72B,GACzD,OAAO5C,EAAG,MAAO,CACfgB,IAAK4B,EAAKpC,MACV+B,MAAO,CAAC3C,EAAI6nB,YAAc,eAAgB7nB,EAAIiyB,WAAWjvB,EAAKpC,QAC9DH,GAAI,CACF,MAAS,SAAekB,GACtB,OAAO3B,EAAI60B,aAAa7xB,EAAKpC,UAGhC,CAACZ,EAAI6B,GAAG,SAAW7B,EAAIyC,GAAGO,EAAK1B,MAAQ,aACxC,IAGF26B,GAA4B,GAG5BC,QAA0BxpB,EAG1BypB,QAAqBzpB,EAGrB0pB,QAA8B1pB,EAG9B2pB,IAAmC,EAOnCC,GAAsBhT,GAAmB,CAC3CvpB,OAAQi8B,GACRl6B,gBAAiBm6B,IAChBC,GAAyBH,GAAkBI,GAAoBE,GAAkCD,IAA6B,OAAO1pB,OAAWA,OAAWA,GAG1J6pB,GAAW,CACbp5B,KAAM,YACNkO,WAAY,CACVmrB,YAAanB,GACboB,YAAaH,IAEf1U,OAAQ,CACNvC,UAAW,CACT7V,QAAS,WACP,OAAO6V,KAGXwC,YAAa,CACXrY,QAAS,OAGbxE,MAAO,CACLpK,MAAO,GACPkxB,aAAc,CACZtiB,QAAS,WACP,IAAIoD,EAAO,IAAIb,KAEf,OADAa,EAAKM,SAAS,EAAG,EAAG,EAAG,GAChBN,IAGXlB,OAAQ,CACNlC,QAAS,YAEXktB,gBAAiB,CACfh5B,KAAM8U,OACNhJ,QAAS,cAEXmtB,eAAgB,CACdj5B,KAAMqkB,QACNvY,SAAS,GAEXotB,aAAc,CACZl5B,KAAMgqB,SACNle,QAAS,WACP,OAAO,IAGXqtB,kBAAmB,CACjBn5B,KAAM,CAAC0B,OAAQsoB,UACfle,QAAS,WACP,OAAO,OAGXypB,YAAa9sB,MACb+sB,cAAe/sB,MACfgtB,cAAehtB,MACfotB,SAAU,CACR71B,KAAM8f,OACNhU,QAAS,GAEXgqB,WAAY,CACV91B,KAAM8f,OACNhU,QAAS,GAEXiqB,WAAY,CACV/1B,KAAM8f,OACNhU,QAAS,GAEX4pB,SAAU,CACR11B,KAAMqkB,QACNvY,aAASkD,GAEX2mB,WAAY,CACV31B,KAAMqkB,QACNvY,aAASkD,GAEX4mB,WAAY,CACV51B,KAAMqkB,QACNvY,aAASkD,GAEXgnB,OAAQ,CACNh2B,KAAMqkB,QACNvY,aAASkD,GAEXsmB,eAAgB,CACdt1B,KAAM8f,OACNhU,QAAS,MAGbjE,SAAU,CACR+mB,WAAY,WACV,OAAO9P,GAAaviB,KAAKW,MAAOX,KAAK6xB,eAEvCgL,MAAO,WACL,IAAItP,EAAcvtB,KAAKy8B,gBACnB9pB,EAAO,IAAIb,KAAK9R,KAAKqyB,YACzB,OAAOryB,KAAKguB,WAAWrb,EAAM4a,IAE/BuP,YAAa,WACX,MAA8B,kBAAhB98B,KAAKyR,OAAsBzR,KAAKyR,OAAS,YAEzDsrB,yBAA0B,WACxB,IAAIxX,EAAQvlB,KAERovB,EAAMpvB,KAAK88B,YACXE,EAAe,CACjB7D,SAAU,SAASjY,KAAKkO,GACxBgK,WAAY,IAAIlY,KAAKkO,GACrBiK,WAAY,IAAInY,KAAKkO,GACrBqK,OAAQ,KAAKvY,KAAKkO,IAEhBrU,EAAM,GAIV,OAHA5V,OAAOC,KAAK43B,GAAc/iB,SAAQ,SAAU9Y,GAC1C4Z,EAAI5Z,GAA6B,mBAAfokB,EAAMpkB,GAAqBokB,EAAMpkB,GAAO67B,EAAa77B,MAElE4Z,IAGXzO,QAAS,CACP0hB,WAAY,SAAoBrb,EAAMyc,GACpC,OAAO,EAAOzc,EAAMyc,EAAK,CACvB/Y,OAAQrW,KAAKolB,YAAYR,gBAG7B8N,WAAY,SAAoB/f,GAC9B,OAAO3S,KAAK28B,aAAa,IAAI7qB,KAAKa,KAEpCiiB,aAAc,SAAsBj0B,EAAO8C,GACzC,IAAIkP,EAAO,IAAIb,KAAKnR,GAEfX,KAAK0yB,WAAW/xB,IACnBX,KAAKyQ,MAAM,SAAUkC,EAAMlP,IAG/Bw5B,iBAAkB,WAChBj9B,KAAKyQ,MAAM,eAEbuhB,WAAY,SAAoBrxB,GAC9B,IAAI6yB,EAAW,IAAI1hB,KAAKnR,GAExB,OAAIX,KAAK0yB,WAAW/xB,GACX,WAGL6yB,EAASthB,YAAclS,KAAKqyB,WAAWngB,UAClC,SAGF,MAMTgrB,GAAmBZ,GAGnBa,GAAmB,WACrB,IAAIp9B,EAAMC,KAENC,EAAKF,EAAIG,eAETC,EAAKJ,EAAIK,MAAMD,IAAMF,EAEzB,OAAOE,EAAG,MAAO,CACfuC,MAAO3C,EAAI6nB,YAAc,SACxB,CAAC7nB,EAAI28B,eAAiBv8B,EAAG,MAAO,CACjCuC,MAAO3C,EAAI6nB,YAAc,gBACxB,CAACznB,EAAG,SAAU,CACfuC,MAAO3C,EAAI6nB,YAAc,QAAU7nB,EAAI6nB,YAAc,aAAe7nB,EAAI6nB,YAAc,qBACtFvnB,MAAO,CACL,KAAQ,UAEVG,GAAI,CACF,MAAST,EAAIk9B,mBAEd,CAACl9B,EAAI6B,GAAG,WAAa7B,EAAIyC,GAAGzC,EAAI88B,OAAS,cAAgB98B,EAAI0C,KAAM1C,EAAI6B,GAAG,KAAMzB,EAAG,MAAO,CAC3FuC,MAAO3C,EAAI6nB,YAAc,iBACxB,CAAC7nB,EAAI68B,kBAAoBz8B,EAAG,eAAgB,CAC7CE,MAAO,CACL,KAAQN,EAAIsyB,WACZ,cAAetyB,EAAIiyB,WACnB,QAAWjyB,EAAI68B,kBACf,OAAU78B,EAAI+8B,aAEhBt8B,GAAI,CACF,OAAUT,EAAI60B,gBAEbz0B,EAAG,eAAgBJ,EAAIq9B,GAAG,CAC7B/8B,MAAO,CACL,KAAQN,EAAIsyB,WACZ,cAAetyB,EAAIiyB,WACnB,eAAgBjyB,EAAIi5B,YACpB,iBAAkBj5B,EAAIk5B,cACtB,iBAAkBl5B,EAAIm5B,cACtB,YAAan5B,EAAIu5B,SACjB,cAAev5B,EAAIw5B,WACnB,cAAex5B,EAAIy5B,WACnB,kBAAmBz5B,EAAIg5B,gBAEzBv4B,GAAI,CACF,OAAUT,EAAI60B,eAEf,eAAgB70B,EAAIg9B,0BAA0B,KAAU,MAGzDM,GAA4B,GAG5BC,QAA0B7qB,EAG1B8qB,QAAqB9qB,EAGrB+qB,QAA8B/qB,EAG9BgrB,IAAmC,EAOnCC,GAAsBrU,GAAmB,CAC3CvpB,OAAQq9B,GACRt7B,gBAAiBw7B,IAChBC,GAAyBJ,GAAkBK,GAAoBE,GAAkCD,IAA6B,OAAO/qB,OAAWA,OAAWA,GAE1JkrB,GAAY,CACdz6B,KAAM,YACNykB,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGbxE,MAAOuV,GAAe,GAAIod,GAAoB3yB,OAC9CE,KAAM,WACJ,MAAO,CACL6pB,WAAY,IAAIhjB,KAAKK,KACrB4iB,SAAU,IAAIjjB,KAAKK,OAGvBzG,MAAO,CACL/K,MAAO,CACLqnB,WAAW,EACXC,QAAS,WACP,GAAI9F,GAAiBniB,KAAKW,OAAQ,CAChC,IAAIi9B,EAAc,GAAe59B,KAAKW,MAAO,GACzCm0B,EAAa8I,EAAY,GACzB7I,EAAW6I,EAAY,GAE3B59B,KAAK80B,WAAaA,EAClB90B,KAAK+0B,SAAWA,OAEhB/0B,KAAK80B,WAAa,IAAIhjB,KAAKK,KAC3BnS,KAAK+0B,SAAW,IAAIjjB,KAAKK,QAKjC7F,QAAS,CACPuxB,WAAY,SAAoBp6B,EAAM0Z,GACpC,IAAIxK,EAAO,CAAC3S,KAAK80B,WAAY90B,KAAK+0B,UAClC/0B,KAAKyQ,MAAM,SAAUkC,EAAe,SAATlP,EAAkB,aAAeA,EAAM0Z,IAEpE2gB,kBAAmB,SAA2BnrB,EAAMlP,GAClDzD,KAAK80B,WAAaniB,EAEZ3S,KAAK+0B,SAAS7iB,WAAaS,EAAKT,YACpClS,KAAK+0B,SAAWpiB,GAGlB3S,KAAK69B,WAAWp6B,EAAM,IAExBs6B,gBAAiB,SAAyBprB,EAAMlP,GAE9CzD,KAAK+0B,SAAWpiB,EAEV3S,KAAK80B,WAAW5iB,WAAaS,EAAKT,YACtClS,KAAK80B,WAAaniB,GAGpB3S,KAAK69B,WAAWp6B,EAAM,IAExBu6B,kBAAmB,SAA2BrrB,GAC5C,OAAO3S,KAAK28B,aAAahqB,EAAM,IAEjCsrB,gBAAiB,SAAyBtrB,GACxC,OAAOA,EAAKT,UAAYlS,KAAK80B,WAAW5iB,WAAalS,KAAK28B,aAAahqB,EAAM,KAGjF7S,OAAQ,WACN,IAAImB,EAAIuR,UAAU,GACdkiB,EAAgBxoB,MAAMkN,QAAQpZ,KAAK6xB,cAAgB7xB,KAAK6xB,aAAe,CAAC7xB,KAAK6xB,aAAc7xB,KAAK6xB,cAChGjK,EAAc5nB,KAAK4nB,YACvB,OAAO3mB,EAAE,MAAO,CACd,MAAS,GAAG2T,OAAOgT,EAAa,mBAC/B,CAAC3mB,EAAEy8B,GAAqB,CACzB,MAASpd,GAAe,GAAIA,GAAe,GAAItgB,KAAKk2B,OAAQ,CAC1Dv1B,MAAOX,KAAK80B,WACZjD,aAAc6C,EAAc,GAC5BiI,aAAc38B,KAAKg+B,qBAErB,GAAM1d,GAAe,GAAIA,GAAe,GAAItgB,KAAK2sB,WAAY,CAC3DlnB,OAAQzF,KAAK89B,uBAEb78B,EAAEy8B,GAAqB,CACzB,MAASpd,GAAe,GAAIA,GAAe,GAAItgB,KAAKk2B,OAAQ,CAC1Dv1B,MAAOX,KAAK+0B,SACZlD,aAAc6C,EAAc,GAC5BiI,aAAc38B,KAAKi+B,mBAErB,GAAM3d,GAAe,GAAIA,GAAe,GAAItgB,KAAK2sB,WAAY,CAC3DlnB,OAAQzF,KAAK+9B,yBAMjBG,GAAgB,CAClBh7B,KAAM,gBACNykB,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGb4uB,MAAO,CAAC,SAAU,0BAClBpzB,MAAOuV,GAAe,GAAIqR,GAAc5mB,MAAO,GAAI2yB,GAAoB3yB,MAAO,CAC5EqzB,cAAe,CACb36B,KAAMqkB,QACNvY,aAASkD,KAGbxH,KAAM,WACJ,MAAO,CACLozB,oBAAoB,EACpBC,aAAct+B,KAAKW,QAGvB2K,SAAU,CACRizB,YAAa,WACX,MAAqC,mBAAvBv+B,KAAKo+B,cAA8Bp+B,KAAKo+B,cAAgBp+B,KAAKq+B,qBAG/E3yB,MAAO,CACL/K,MAAO,SAAe8T,GACpBzU,KAAKs+B,aAAe7pB,GAEtB4pB,mBAAoB,SAA4B5pB,GAC9CzU,KAAKyQ,MAAM,yBAA0BgE,KAGzCnI,QAAS,CACPkyB,eAAgB,WACdx+B,KAAKq+B,oBAAqB,GAE5BI,cAAe,WACbz+B,KAAKq+B,oBAAqB,GAE5B1L,SAAU,SAAkBhgB,EAAMlP,GAChCzD,KAAKyQ,MAAM,SAAUkC,EAAMlP,IAE7BmxB,aAAc,SAAsBjiB,EAAMlP,GAC3B,SAATA,GACFzD,KAAKy+B,gBAGP,IAAIC,EAAWhb,GAAW/Q,EAAM4P,GAAaviB,KAAKW,MAAOX,KAAK6xB,eAE1D7xB,KAAK28B,aAAa,IAAI7qB,KAAK4sB,MAE7BA,EAAWhb,GAAW/Q,EAAM3S,KAAK6xB,cAE7B7xB,KAAK28B,aAAa,IAAI7qB,KAAK4sB,KAE7B1+B,KAAKs+B,aAAeI,EAKxB1+B,KAAK2yB,SAAS+L,EAAUj7B,KAG5B3D,OAAQ,WACN,IAAImB,EAAIuR,UAAU,GACdmsB,EAAgB,CAClB5zB,MAAOuV,GAAe,GAAIyD,GAAK/jB,KAAKk2B,OAAQ/wB,OAAOC,KAAKusB,GAAc5mB,QAAS,CAC7EtH,KAAM,OACN9C,MAAOX,KAAKs+B,eAEd99B,GAAI,CACFiF,OAAQzF,KAAK40B,eAGbgK,EAAY,CACd7zB,MAAOuV,GAAe,GAAIyD,GAAK/jB,KAAKk2B,OAAQ/wB,OAAOC,KAAKs4B,GAAoB3yB,QAAS,CACnF2xB,gBAAgB,EAChB/7B,MAAOX,KAAKs+B,eAEd99B,GAAI,CACFiF,OAAQzF,KAAK2yB,SACbkM,WAAY7+B,KAAKw+B,iBAGjB5W,EAAc5nB,KAAK4nB,YACvB,OAAO3mB,EAAE,MAAO,CAACA,EAAE0wB,GAAe3P,GAAO,CAAC,GAAI2c,KAAkB3+B,KAAKu+B,aAAet9B,EAAEy8B,GAAqB1b,GAAO,CAAC,CACjH,MAAS,GAAGpN,OAAOgT,EAAa,mBAC/BgX,SAIHE,GAAgB,CAClB57B,KAAM,gBACNykB,OAAQ,CACNC,YAAa,CACXrY,QAAS,OAGb4uB,MAAO,CAAC,SAAU,0BAClBpzB,MAAOuV,GAAe,GAAI6T,GAAcppB,MAAO,GAAI4yB,GAAU5yB,MAAO,CAClEqzB,cAAe,CACb36B,KAAMqkB,QACNvY,aAASkD,KAGbxH,KAAM,WACJ,MAAO,CACLozB,oBAAoB,EACpBC,aAAct+B,KAAKW,QAGvB2K,SAAU,CACRizB,YAAa,WACX,MAAqC,mBAAvBv+B,KAAKo+B,cAA8Bp+B,KAAKo+B,cAAgBp+B,KAAKq+B,qBAG/E3yB,MAAO,CACL/K,MAAO,SAAe8T,GACpBzU,KAAKs+B,aAAe7pB,GAEtB4pB,mBAAoB,SAA4B5pB,GAC9CzU,KAAKyQ,MAAM,yBAA0BgE,KAGzCnI,QAAS,CACPkyB,eAAgB,WACdx+B,KAAKq+B,oBAAqB,GAE5BI,cAAe,WACbz+B,KAAKq+B,oBAAqB,GAE5B1L,SAAU,SAAkBrQ,EAAO7e,GACjCzD,KAAKyQ,MAAM,SAAU6R,EAAO7e,IAE9BmxB,aAAc,SAAsBtS,EAAO7e,GACzC,IAAI8hB,EAAQvlB,KAEC,SAATyD,GACFzD,KAAKy+B,gBAGP,IAAI/J,EAAgBxoB,MAAMkN,QAAQpZ,KAAK6xB,cAAgB7xB,KAAK6xB,aAAe,CAAC7xB,KAAK6xB,aAAc7xB,KAAK6xB,cAChGkN,EAAYzc,EAAMtF,KAAI,SAAUrK,EAAMzR,GACxC,IAAIyiB,EAAOxB,GAAiBoD,EAAM5kB,OAAS4kB,EAAM5kB,MAAMO,GAAKwzB,EAAcxzB,GAC1E,OAAOwiB,GAAW/Q,EAAMgR,MAGtBob,EAAU,GAAG7sB,UAAY6sB,EAAU,GAAG7sB,YACxC6sB,EAAY,CAACA,EAAU,GAAIA,EAAU,KAGnCA,EAAUhL,KAAK/zB,KAAK28B,gBACtBoC,EAAYzc,EAAMtF,KAAI,SAAUrK,EAAMzR,GACpC,OAAOwiB,GAAW/Q,EAAM+hB,EAAcxzB,OAGpC69B,EAAUhL,KAAK/zB,KAAK28B,eACtB38B,KAAKs+B,aAAeS,EAKxB/+B,KAAK2yB,SAASoM,EAAWt7B,KAG7B3D,OAAQ,WACN,IAAImB,EAAIuR,UAAU,GACdmsB,EAAgB,CAClB5zB,MAAOuV,GAAe,GAAIyD,GAAK/jB,KAAKk2B,OAAQ/wB,OAAOC,KAAK+uB,GAAcppB,QAAS,CAC7EtH,KAAM,OACN9C,MAAOX,KAAKs+B,eAEd99B,GAAI,CACFiF,OAAQzF,KAAK40B,eAGbgK,EAAY,CACd7zB,MAAOuV,GAAe,GAAIyD,GAAK/jB,KAAKk2B,OAAQ/wB,OAAOC,KAAKu4B,GAAU5yB,QAAS,CACzEpK,MAAOX,KAAKs+B,aACZ5B,gBAAgB,IAElBl8B,GAAI,CACFiF,OAAQzF,KAAK2yB,SACbkM,WAAY7+B,KAAKw+B,iBAGjB5W,EAAc5nB,KAAK4nB,YACvB,OAAO3mB,EAAE,MAAO,CAACA,EAAEkzB,GAAenS,GAAO,CAAC,GAAI2c,KAAkB3+B,KAAKu+B,aAAet9B,EAAE08B,GAAW3b,GAAO,CAAC,CACvG,MAAS,GAAGpN,OAAOgT,EAAa,mBAC/BgX,SAIHI,GAAe,CACjBzvB,QAASoiB,GACThO,KAAM+Z,GACNgB,SAAUR,IAERe,GAAoB,CACtB1vB,QAAS4kB,GACTxQ,KAAMga,GACNe,SAAUI,IAERI,GAAa,CACfh8B,KAAM,aACNkxB,QAAS,WACP,IAAI7O,EAAQvlB,KAEZ,MAAO,CAELolB,UAAW,WACT,OAAOG,EAAMlP,QAEf1C,QAAS3T,KAAK2T,QACdiU,YAAa5nB,KAAK4nB,YAClBgK,mBAAoB5xB,KAAKyQ,MAAM0uB,KAAKn/B,QAGxC+K,MAAOuV,GAAe,GAAI4d,GAAcnzB,MAAO,CAC7CpK,MAAO,GACPy+B,UAAW,CACT37B,KAAM8U,OACNhJ,QAAS,QAGX9L,KAAM,CACJA,KAAM8U,OAENhJ,QAAS,QAEXkC,OAAQ,CACNhO,KAAM8U,QAER8mB,UAAW,CACT57B,KAAM0B,QAER2wB,MAAO,CACLryB,KAAMqkB,QACNvY,SAAS,GAEX+vB,SAAU,CACR77B,KAAMqkB,QACNvY,SAAS,GAEXgwB,eAAgB,CACd97B,KAAM8U,QAERoM,KAAM,CACJlhB,KAAM,CAAC8U,OAAQpT,SAEjBq6B,YAAa,CACX/7B,KAAM8U,OACNhJ,QAAS,IAEXkwB,SAAU,CACRh8B,KAAMqkB,QACNvY,SAAS,GAEX5G,SAAU,CACRlF,KAAMqkB,QACNvY,SAAS,GAEXmwB,UAAW,CACTj8B,KAAMqkB,QACNvY,SAAS,GAEXqY,YAAa,CACXnkB,KAAM8U,OACNhJ,QAAS,MAEXowB,WAAY,GACZC,UAAW,CACTn8B,KAAM0B,OACNoK,QAAS,WACP,MAAO,KAGXwY,aAAc,CACZtkB,KAAMqkB,QACNvY,SAAS,GAEXswB,KAAM,CACJp8B,KAAMqkB,QACNvY,aAASkD,GAEXqtB,WAAY,GACZC,WAAY,CACVt8B,KAAM0B,OACNoK,QAAS,WACP,MAAO,KAGXywB,OAAQ,CACNv8B,KAAMqkB,QACNvY,SAAS,GAEX0wB,QAAS,CACPx8B,KAAMqkB,QACNvY,SAAS,GAEX2wB,YAAa,CACXz8B,KAAM8U,OACNhJ,QAAS,MAEX4wB,gBAAiB,CACf18B,KAAMgqB,UAER2S,UAAW,CACT38B,KAAMyI,MACNm0B,UAAW,SAAmB1/B,GAC5B,OAAOuL,MAAMkN,QAAQzY,IAAUA,EAAMyhB,OAAM,SAAU6M,GACnD,OAAOnL,GAASmL,IAAwB,kBAAXA,EAAE5tB,MAA0C,oBAAd4tB,EAAEqR,YAGjE/wB,QAAS,WACP,MAAO,OAIbtE,KAAM,WACJ,MAAO,CAELqzB,aAAc,KACdiC,UAAW,KACXC,aAAa,IAGjBl1B,SAAU,CACRm1B,aAAc,WACZ,OAAQzgC,KAAK2I,WAAkC,mBAAd3I,KAAK6/B,KAAqB7/B,KAAK6/B,KAAO7/B,KAAKwgC,cAE9EE,oBAAqB,WACnB,OAAO1gC,KAAKu/B,iBAAmBv/B,KAAKs/B,SAAW,IAAM,QAEvDqB,YAAa,WACX,IAAI3jB,EAAM,CACRrK,KAAM,aACN+rB,SAAU,sBACVnrB,KAAM,OACNiM,MAAO,UACPmE,KAAM,WACN/D,KAAM,KAER,OAAO5f,KAAKyR,QAAUuL,EAAIhd,KAAKyD,OAASuZ,EAAIrK,MAE9C0f,WAAY,WACV,IAAI1xB,EAAQX,KAAKW,MAEjB,OAAIX,KAAK4gC,mBACPjgC,EAAQuL,MAAMkN,QAAQzY,GAASA,EAAQ,GAChCA,EAAMqc,IAAIhd,KAAK6gC,aAGpB7gC,KAAK81B,OACPn1B,EAAQuL,MAAMkN,QAAQzY,GAASA,EAAMuO,MAAM,EAAG,GAAK,CAAC,KAAM,MACnDvO,EAAMqc,IAAIhd,KAAK6gC,aAGjB7gC,KAAK6gC,WAAWlgC,IAEzBU,KAAM,WACJ,IAAI+mB,EAASpoB,KAEb,OAAuB,OAAnBA,KAAKugC,UACAvgC,KAAKugC,UAGsB,oBAAzBvgC,KAAKmgC,gBACPngC,KAAKmgC,gBAAgBngC,KAAKqyB,YAG9BryB,KAAK8gC,aAAa9gC,KAAKqyB,YAIxBnmB,MAAMkN,QAAQpZ,KAAKqyB,YACdryB,KAAKqyB,WAAWrV,KAAI,SAAUiS,GACnC,OAAO7G,EAAO4F,WAAWiB,MACxBhS,KAAKjd,KAAK0gC,qBAGR1gC,KAAKguB,WAAWhuB,KAAKqyB,YATnB,IAWX0O,cAAe,WACb,OAAQ/gC,KAAK2I,UAAY3I,KAAK0/B,WAAa1/B,KAAKqB,MAElDgV,OAAQ,WACN,OAAIyN,GAAS9jB,KAAK2kB,MACTT,GAAUkB,KAAaplB,KAAK2kB,MAG9BS,GAAUplB,KAAK2kB,OAExBic,kBAAmB,WACjB,IAAII,EAAQ,CAAC,OAAQ,QAAS,QAC9B,OAAOhhC,KAAKs/B,WAAat/B,KAAK81B,QAAuC,IAA9BkL,EAAMt9B,QAAQ1D,KAAKyD,QAG9DiI,MAAO,CACL2mB,WAAY,CACVrK,WAAW,EACXC,QAAS,SAAiBxT,GACxBzU,KAAKs+B,aAAe7pB,KAI1BmiB,QAAS,WACsB,WAAzB1W,GAAQlgB,KAAKyR,SACfwvB,QAAQC,KAAK,2HAGjB50B,QAAS,CACP60B,mBAAoB,SAA4BpY,GAC9C,IAAI5gB,EAAS4gB,EAAI5gB,OAEZnI,KAAK4L,IAAIod,SAAS7gB,IACrBnI,KAAKohC,cAGTC,aAAc,SAAsBlgC,GAClC,OAAO2iB,GAAS9jB,KAAKq/B,YAAcr/B,KAAKq/B,UAAUl+B,IAAQ2iB,GAAS9jB,KAAKyR,SAAWzR,KAAKyR,OAAOtQ,IAEjGwS,QAAS,SAAmBhB,EAAMtM,GAChC,MAA4C,oBAAjCrG,KAAKqhC,aAAa,WACpBrhC,KAAKqhC,aAAa,UAAlBrhC,CAA6B2S,EAAMtM,GAGrCsN,EAAQhB,EAAMtM,IAEvBi7B,UAAW,SAAmB3gC,EAAOyuB,GAGnC,GAFAA,EAAMA,GAAOpvB,KAAK2gC,YAEwB,oBAA/B3gC,KAAKqhC,aAAa,SAC3B,OAAOrhC,KAAKqhC,aAAa,QAAlBrhC,CAA2BW,EAAOyuB,GAG3C,IAAInR,EAAa,IAAInM,KACrB,OAAOqN,GAAMxe,EAAOyuB,EAAK,CACvB/Y,OAAQrW,KAAKqW,OAAOuO,aACpB3G,WAAYA,KAGhB+P,WAAY,SAAoBrb,EAAMyc,GAGpC,OAFAA,EAAMA,GAAOpvB,KAAK2gC,YAE4B,oBAAnC3gC,KAAKqhC,aAAa,aACpBrhC,KAAKqhC,aAAa,YAAlBrhC,CAA+B2S,EAAMyc,GAGvC,EAAOzc,EAAMyc,EAAK,CACvB/Y,OAAQrW,KAAKqW,OAAOuO,gBAIxBic,WAAY,SAAoBlgC,GAC9B,OAAQX,KAAKo/B,WACX,IAAK,OACH,OAAOz+B,aAAiBmR,KAAO,IAAIA,KAAKnR,EAAMuR,WAAa,IAAIJ,KAAKK,KAEtE,IAAK,YACH,MAAwB,kBAAVxR,EAAqB,IAAImR,KAAKnR,GAAS,IAAImR,KAAKK,KAEhE,IAAK,SACH,MAAwB,kBAAVxR,EAAqBX,KAAKshC,UAAU3gC,GAAS,IAAImR,KAAKK,KAEtE,QACE,MAAwB,kBAAVxR,EAAqBX,KAAKshC,UAAU3gC,EAAOX,KAAKo/B,WAAa,IAAIttB,KAAKK,OAI1FovB,WAAY,SAAoB5uB,GAC9B,IAAK,GAAYA,GAAO,OAAO,KAE/B,OAAQ3S,KAAKo/B,WACX,IAAK,OACH,OAAOzsB,EAET,IAAK,YACH,OAAOA,EAAKT,UAEd,IAAK,SACH,OAAOlS,KAAKguB,WAAWrb,GAEzB,QACE,OAAO3S,KAAKguB,WAAWrb,EAAM3S,KAAKo/B,aAGxCoC,UAAW,SAAmB7uB,EAAMlP,GAElCzD,KAAKugC,UAAY,KACjB,IAAI5/B,EAAQuL,MAAMkN,QAAQzG,GAAQA,EAAKqK,IAAIhd,KAAKuhC,YAAcvhC,KAAKuhC,WAAW5uB,GAI9E,OAHA3S,KAAKyQ,MAAM,QAAS9P,GACpBX,KAAKyQ,MAAM,SAAU9P,EAAO8C,GAC5BzD,KAAKyhC,eAAeh+B,GACb9C,GAET8gC,eAAgB,SAAwBh+B,GAEjCA,GAAQA,IAASzD,KAAKyD,MAAiB,SAATA,GACjCzD,KAAKohC,cAGTN,aAAc,SAAsBngC,GAClC,OAAIX,KAAK4gC,kBACAve,GAAa1hB,GAGlBX,KAAK81B,MACA3T,GAAiBxhB,GAGnB,GAAYA,IAErB+gC,2BAA4B,SAAoC/gC,GAC9D,IAAKX,KAAK8gC,aAAangC,GACrB,OAAO,EAGT,IAAIoxB,EAA4C,oBAAtB/xB,KAAK+xB,aAA8B/xB,KAAK+xB,aAAe,WAC/E,OAAO,GAEL4K,EAA4C,oBAAtB38B,KAAK28B,aAA8B38B,KAAK28B,aAAe,WAC/E,OAAO,GAOT,OAJKzwB,MAAMkN,QAAQzY,KACjBA,EAAQ,CAACA,IAGJA,EAAMyhB,OAAM,SAAU6M,GAC3B,OAAQ8C,EAAa9C,KAAO0N,EAAa1N,OAG7C0S,oBAAqB,SAA6BhvB,EAAM2P,GACtD,GAAItiB,KAAK4gC,mBAAqBte,EAAO,CACnC,IAAIsf,EAAYtf,EAAM1S,QAAO,SAAUqf,GACrC,OAAOA,EAAE/c,YAAcS,EAAKT,aAO9B,OAJI0vB,EAAUv/B,SAAWigB,EAAMjgB,QAC7Bu/B,EAAU9nB,KAAKnH,GAGVivB,EAGT,OAAOjvB,GAET2gB,iBAAkB,SAA0B7e,EAAKhR,EAAM6e,GACrD7N,EAAMzU,KAAK2hC,oBAAoBltB,EAAK6N,GAEhCtiB,KAAKigC,QACPjgC,KAAKs+B,aAAe7pB,EAEpBzU,KAAKwhC,UAAU/sB,EAAKzU,KAAK4gC,kBAAoB,YAAYhsB,OAAOnR,GAAQA,IAG5Eo+B,MAAO,WACL7hC,KAAKwhC,UAAUxhC,KAAK81B,MAAQ,CAAC,KAAM,MAAQ,MAC3C91B,KAAKyQ,MAAM,UAEbqxB,YAAa,SAAqB/Y,GAChCA,EAAIgZ,kBACJ/hC,KAAK6hC,SAEPG,kBAAmB,WACjB,IAAIrhC,EAAQX,KAAKwhC,UAAUxhC,KAAKs+B,cAChCt+B,KAAKyQ,MAAM,UAAW9P,IAExBshC,qBAAsB,SAA8BlZ,GAClD,IAAI5L,EAAQ4L,EAAIoO,cAAcrI,aAAa,cACvC/rB,EAAO/C,KAAKogC,UAAU3jB,SAASU,EAAO,KAE1C,GAAI2G,GAAS/gB,IAAiC,oBAAjBA,EAAKu9B,QAAwB,CACxD,IAAI3tB,EAAO5P,EAAKu9B,QAAQtgC,MAEpB2S,GACF3S,KAAKwhC,UAAU7uB,KAIrBuvB,UAAW,SAAmBnZ,GACxB/oB,KAAKygC,eACTzgC,KAAKwgC,aAAc,EACnBxgC,KAAKyQ,MAAM,OAAQsY,GACnB/oB,KAAKyQ,MAAM,eAAe,KAE5B2wB,WAAY,WACLphC,KAAKygC,eACVzgC,KAAKwgC,aAAc,EACnBxgC,KAAKyQ,MAAM,SACXzQ,KAAKyQ,MAAM,eAAe,KAE5B0xB,KAAM,WAEAniC,KAAK+L,MAAMyQ,OACbxc,KAAK+L,MAAMyQ,MAAM2lB,QAGrB70B,MAAO,WACDtN,KAAK+L,MAAMyQ,OACbxc,KAAK+L,MAAMyQ,MAAMlP,SAGrB80B,kBAAmB,WACjB,IAAIjI,EAASn6B,KAEb,GAAKA,KAAKy/B,UAA+B,OAAnBz/B,KAAKugC,UAA3B,CACA,IAAIl/B,EAAOrB,KAAKugC,UAAU8B,OAG1B,GAFAriC,KAAKugC,UAAY,KAEJ,KAATl/B,EAAJ,CAKA,IAAIsR,EAEJ,GAAI3S,KAAK4gC,kBACPjuB,EAAOtR,EAAK2tB,MAAMhvB,KAAK0gC,qBAAqB1jB,KAAI,SAAUiS,GACxD,OAAOkL,EAAOmH,UAAUrS,EAAEoT,gBAEvB,GAAIriC,KAAK81B,MAAO,CACrB,IAAIld,EAAMvX,EAAK2tB,MAAMhvB,KAAK0gC,qBAEP,IAAf9nB,EAAIvW,SAGNuW,EAAMvX,EAAK2tB,MAAMhvB,KAAK0gC,oBAAoB2B,SAG5C1vB,EAAOiG,EAAIoE,KAAI,SAAUiS,GACvB,OAAOkL,EAAOmH,UAAUrS,EAAEoT,gBAG5B1vB,EAAO3S,KAAKshC,UAAUjgC,GAGpBrB,KAAK0hC,2BAA2B/uB,IAClC3S,KAAKwhC,UAAU7uB,GACf3S,KAAKmiC,QAELniC,KAAKyQ,MAAM,cAAepP,QA9B1BrB,KAAK6hC,UAiCTS,iBAAkB,SAA0BvZ,GAE1C/oB,KAAKugC,UAA2B,kBAARxX,EAAmBA,EAAMA,EAAI5gB,OAAOxH,OAE9D4hC,mBAAoB,SAA4BxZ,GAC9C,IAAInlB,EAAUmlB,EAAInlB,QAEF,IAAZA,EACF5D,KAAKohC,aACgB,KAAZx9B,GACT5D,KAAKoiC,qBAGTI,gBAAiB,SAAyBzZ,GAExC/oB,KAAKyQ,MAAM,OAAQsY,IAErB0Z,iBAAkB,SAA0B1Z,GAC1C/oB,KAAKkiC,UAAUnZ,GACf/oB,KAAKyQ,MAAM,QAASsY,IAEtB2Z,QAAS,SAAiBx/B,GACxB,SAAUlD,KAAK2iC,OAAOz/B,KAASlD,KAAK4iC,aAAa1/B,KAEnD2/B,WAAY,SAAoB3/B,EAAM4/B,EAAU/3B,GAC9C,IAAIg4B,EAAS/iC,KAAK4iC,aAAa1/B,GAE/B,OAAI6/B,EACKA,EAAOh4B,IAAU+3B,EAGnB9iC,KAAK2iC,OAAOz/B,IAAS4/B,GAE9BE,YAAa,WACX,IAAI/hC,EAAIjB,KAAKE,eACT0nB,EAAc5nB,KAAK4nB,YAEnB7c,EAAQuV,GAAe,CACzBpd,KAAM,OACNO,KAAM,OACNw/B,aAAc,MACdtiC,MAAOX,KAAKqB,KACZqB,MAAO1C,KAAK2/B,YAAc,GAAG/qB,OAAO5U,KAAK4nB,YAAa,UACtD1hB,UAAWlG,KAAKy/B,SAChB92B,SAAU3I,KAAK2I,SACf62B,YAAax/B,KAAKw/B,aACjBx/B,KAAK4/B,WAEJj/B,EAAQoK,EAAMpK,MACduiC,EAAYn4B,EAAMrI,MAClBrC,EAAQqgB,GAAyB3V,EAAO,CAAC,QAAS,UAElDo4B,EAAS,CACXC,QAASpjC,KAAKuiC,mBACdj1B,MAAOtN,KAAKyiC,iBACZN,KAAMniC,KAAKwiC,gBACXhmB,MAAOxc,KAAKsiC,iBACZe,OAAQrjC,KAAKoiC,mBAEX5lB,EAAQxc,KAAK6iC,WAAW,QAAS5hC,EAAE,QAAS,CAC9C,SAAY,CACV,MAASN,GAEX,MAASuiC,EACT,MAAS5iB,GAAe,GAAIjgB,GAC5B,GAAMigB,GAAe,GAAI6iB,GACzB,IAAO,UACL,CACFp4B,MAAOA,EACPo4B,OAAQA,IAEV,OAAOliC,EAAE,MAAO,CACd,MAAS,GAAG2T,OAAOgT,EAAa,kBAChC,GAAM,CACJ,UAAa5nB,KAAKkiC,YAEnB,CAAC1lB,EAAOxc,KAAK+gC,cAAgB9/B,EAAE,IAAK,CACrC,MAAS,GAAG2T,OAAOgT,EAAa,eAChC,GAAM,CACJ,UAAa5nB,KAAK8hC,cAEnB,CAAC9hC,KAAK6iC,WAAW,aAAc5hC,EAAEsrB,OAA0B,KAAMtrB,EAAE,IAAK,CACzE,MAAS,GAAG2T,OAAOgT,EAAa,mBAC/B,CAAC5nB,KAAK6iC,WAAW,gBAAiB5hC,EAAE+qB,UAEzCsX,cAAe,WACb,IAAIriC,EAAIjB,KAAKE,eACT8c,EAAMhd,KAAK81B,MAAQmJ,GAAoBD,GACvCuE,EAAYvmB,EAAIhd,KAAKyD,OAASuZ,EAAIzN,QAElCxE,EAAQuV,GAAe,GAAIyD,GAAK/jB,KAAKk2B,OAAQ/wB,OAAOC,KAAKm+B,EAAUx4B,QAAS,CAC9EpK,MAAOX,KAAKs+B,eAGV99B,EAAK8f,GAAe,GAAIyD,GAAK/jB,KAAK2sB,WAAY4W,EAAUpF,OAAS,IAAK,CACxE14B,OAAQzF,KAAKszB,mBAGX9mB,EAAUvL,EAAEsiC,EAAWvhB,GAAO,CAAC,GAAI,CACrCjX,MAAOA,EACPvK,GAAIA,EACJF,IAAK,aAEP,OAAOW,EAAE,MAAO,CACd,MAAS,GAAG2T,OAAO5U,KAAK4nB,YAAa,qBACpC,CAAC5nB,KAAK6iC,WAAW,UAAWr2B,EAAS,CACtC7L,MAAOX,KAAKs+B,aACZkF,KAAMxjC,KAAKszB,sBAGfmQ,cAAe,WACb,IAAIpJ,EAASr6B,KAETiB,EAAIjB,KAAKE,eACT0nB,EAAc5nB,KAAK4nB,YACvB,OAAO3mB,EAAE,MAAO,CACd,MAAS,GAAG2T,OAAOgT,EAAa,wBAC/B,CAAC5nB,KAAK6iC,WAAW,UAAW,KAAM,CACnCliC,MAAOX,KAAKs+B,aACZkF,KAAMxjC,KAAKszB,mBACTtzB,KAAKogC,UAAUpjB,KAAI,SAAUiS,EAAG/tB,GAClC,OAAOD,EAAE,SAAU,CACjB,IAAOC,EACP,MAAS,CACP,aAAcA,EACd,KAAQ,UAEV,MAAS,GAAG0T,OAAOgT,EAAa,SAAShT,OAAOgT,EAAa,cAAchT,OAAOgT,EAAa,iBAC/F,GAAM,CACJ,MAASyS,EAAO4H,uBAEjB,CAAChT,EAAE5tB,aAGVqiC,aAAc,WACZ,IAAIziC,EAAIjB,KAAKE,eACb,OAAOe,EAAE,MAAO,CACd,MAAS,GAAG2T,OAAO5U,KAAK4nB,YAAa,uBACpC,CAAC5nB,KAAK6iC,WAAW,SAAU,KAAM,CAClCliC,MAAOX,KAAKs+B,aACZkF,KAAMxjC,KAAKszB,sBAGfqQ,aAAc,WACZ,IAAI1iC,EAAIjB,KAAKE,eACT0nB,EAAc5nB,KAAK4nB,YACvB,OAAO3mB,EAAE,MAAO,CACd,MAAS,GAAG2T,OAAOgT,EAAa,uBAC/B,CAAC5nB,KAAK6iC,WAAW,SAAU,KAAM,CAClCliC,MAAOX,KAAKs+B,aACZkF,KAAMxjC,KAAKszB,mBACTtzB,KAAKigC,QAAUh/B,EAAE,SAAU,CAC7B,MAAS,CACP,KAAQ,UAEV,MAAS,GAAG2T,OAAOgT,EAAa,SAAShT,OAAOgT,EAAa,2BAC7D,GAAM,CACJ,MAAS5nB,KAAKgiC,oBAEf,CAAChiC,KAAKkgC,cAAgB,SAG7BpgC,OAAQ,WACN,IAAI8jC,EAEA3iC,EAAIuR,UAAU,GACdoV,EAAc5nB,KAAK4nB,YACnBoY,EAAShgC,KAAKggC,OACdr3B,EAAW3I,KAAK2I,SAChBk7B,EAAU7jC,KAAK0iC,QAAQ,YAAc1iC,KAAKogC,UAAU/9B,OAASrC,KAAKyjC,gBAAkB,KACpFj3B,EAAUvL,EAAE,MAAO,CACrB,MAAS,GAAG2T,OAAOgT,EAAa,wBAC/B,CAAC5nB,KAAK0iC,QAAQ,UAAY1iC,KAAK0jC,eAAiB,KAAM1jC,KAAKsjC,gBAAiBtjC,KAAK0iC,QAAQ,WAAa1iC,KAAKigC,QAAUjgC,KAAK2jC,eAAiB,OAC9I,OAAO1iC,EAAE,MAAO,CACd,OAAU2iC,EAAS,GAAI,GAAgBA,EAAQ,GAAGhvB,OAAOgT,EAAa,gBAAgB,GAAO,GAAgBgc,EAAQ,GAAGhvB,OAAOgT,EAAa,qBAAsB5nB,KAAK81B,OAAQ,GAAgB8N,EAAQ,GAAGhvB,OAAOgT,EAAa,sBAAuBoY,GAAS,GAAgB4D,EAAQ,WAAYj7B,GAAWi7B,IAC5S,CAAE5D,EAA8B,KAArBhgC,KAAKgjC,cAAuBhD,EAWjB/+B,EAAE,MAAO,CAChC,MAAS,GAAG2T,OAAOgT,EAAa,qBAC/B,CAACic,EAASr3B,IAbsCvL,EAAEwqB,GAAmB,CACtE,IAAO,QACP,MAASzrB,KAAK8/B,WACd,MAAS9/B,KAAK+/B,WACd,MAAS,CACP,QAAW//B,KAAKygC,aAChB,aAAgBzgC,KAAK+nB,cAEvB,GAAM,CACJ,aAAgB/nB,KAAKmhC,qBAEtB,CAAC0C,EAASr3B,QAMjB0yB,GAAW7oB,OAAS,GAEpB6oB,GAAW4E,QAAU,SAAiBC,GACpCA,EAAIp2B,UAAUuxB,GAAWh8B,KAAMg8B,KAGX,qBAAX7uB,QAA0BA,OAAO0zB,KAC1C7E,GAAW4E,QAAQzzB,OAAO0zB,KAG5B3jB,GAAS8e,GAAY,CACnBvN,cAAeA,GACfwC,cAAeA,GACf6P,UAAWtG,GACXC,UAAWA,GACXO,cAAeA,GACfY,cAAeA,KCrvHjB,IDwvHe,UC7vHXmF,GAAO,CACX,QAAe,UACXC,GAAmB,KAAMC,GAAe,KAExCC,GAAa,CAAE,IAAK,IAAK,IAAK,IAAK,KAC/B,GAAI;8DAAG,IAAK,IAAK,GAAGA,GAAWtqB,KAAK,KAAO,IAEnD,IAAIuqB,GAAQ,CACJC,EAAa,KACbC,EAAY,MACZC,EAAY,MACZC,GAAY,IACZC,IAAc,IACdC,IAAc,IACdC,IAAa,KACbC,IAAc,IACdC,IAAc,IACdC,IAAa,KACbC,IAAa,KACbC,IAAa,KACbC,IAAa,KACbC,IAAa,KACbC,IAAa,KACbC,IAAa,KACbC,IAAc,IACdC,IAAa,KACbC,IAAa,KACbC,GAAa,MAGjBC,GAAW,SAASC,IAA+C,GAA3BvB,GAAW1gC,QAAQiiC,KAAmBxB,GAAeE,GAAM,GAAKsB,IAG5G,IAAIC,GAAS,SAASD,GAAiBzB,GAAmByB,EAAID,GAASC,IAKvE,SAASE,GAAY56B,GAEpB,IADA,IAAI6V,EAAsB,GAClB5f,EAAI,EAAGA,EAAK+J,EAAK5I,QAAQ,IAAMnB,EAAG4f,EAAE5f,GAAKqX,OAAOutB,aAAa76B,EAAK86B,WAAW,EAAE7kC,IAAM+J,EAAK86B,WAAW,EAAE7kC,EAAE,IAAI,IACrH,OAAO4f,EAAE7D,KAAK,IAEf,SAAS+oB,GAAY/6B,GAEpB,IADA,IAAI6V,EAAsB,GAClB5f,EAAI,EAAGA,EAAK+J,EAAK5I,QAAQ,IAAMnB,EAAG4f,EAAE5f,GAAKqX,OAAOutB,aAAa76B,EAAK86B,WAAW,EAAE7kC,EAAE,IAAM+J,EAAK86B,WAAW,EAAE7kC,IAAI,IACrH,OAAO4f,EAAE7D,KAAK,IAGf,IAAIgpB,GAAQ,SAASh7B,GACpB,IAAIi7B,EAAKj7B,EAAK86B,WAAW,GAAII,EAAKl7B,EAAK86B,WAAW,GAClD,OAAS,KAANG,GAAoB,KAANC,EAAmBN,GAAY56B,EAAKiE,MAAM,IAClD,KAANg3B,GAAoB,KAANC,EAAmBH,GAAY/6B,EAAKiE,MAAM,IAClD,OAANg3B,EAAqBj7B,EAAKiE,MAAM,GAC5BjE,GAGJm7B,GAAW,SAAcluB,GAA2B,OAAOK,OAAOutB,aAAa5tB,IAC/EmuB,GAAW,SAAcnuB,GAA2B,OAAOK,OAAOutB,aAAa5tB,IAC/EouB,GAAQ,KACRC,IAAS,EACTC,GAAS,WACZ,IAAIxpB,EAAM,oEACV,MAAO,CACNypB,OAAQ,SAASjqB,GAGhB,IAFA,IAAIsE,EAAI,GACJolB,EAAG,EAAGC,EAAG,EAAGO,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EACnC5lC,EAAI,EAAGA,EAAIsb,EAAMna,QACxB6jC,EAAK1pB,EAAMupB,WAAW7kC,KACtBylC,EAAMT,GAAM,EAEZC,EAAK3pB,EAAMupB,WAAW7kC,KACtB0lC,GAAY,EAALV,IAAW,EAAMC,GAAM,EAE9BO,EAAKlqB,EAAMupB,WAAW7kC,KACtB2lC,GAAY,GAALV,IAAY,EAAMO,GAAM,EAC/BI,EAAW,GAALJ,EACFr0B,MAAM8zB,GAAOU,EAAKC,EAAK,GAClBz0B,MAAMq0B,KAAOI,EAAK,IAC3BhmB,GAAK9D,EAAIQ,OAAOmpB,GAAM3pB,EAAIQ,OAAOopB,GAAM5pB,EAAIQ,OAAOqpB,GAAM7pB,EAAIQ,OAAOspB,GAEpE,OAAOhmB,GAERimB,OAAQ,SAAoBvqB,GAC3B,IAAIsE,EAAI,GACJolB,EAAG,EAAGC,EAAG,EAAGO,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAAGC,EAAG,EAC3CtqB,EAAQA,EAAMhE,QAAQ,eAAgB,IACtC,IAAI,IAAItX,EAAI,EAAGA,EAAIsb,EAAMna,QACxBskC,EAAK3pB,EAAItZ,QAAQ8Y,EAAMgB,OAAOtc,MAC9B0lC,EAAK5pB,EAAItZ,QAAQ8Y,EAAMgB,OAAOtc,MAC9BglC,EAAMS,GAAM,EAAMC,GAAM,EACxB9lB,GAAKvI,OAAOutB,aAAaI,GAEzBW,EAAK7pB,EAAItZ,QAAQ8Y,EAAMgB,OAAOtc,MAC9BilC,GAAY,GAALS,IAAY,EAAMC,GAAM,EACpB,KAAPA,IAAa/lB,GAAKvI,OAAOutB,aAAaK,IAE1CW,EAAK9pB,EAAItZ,QAAQ8Y,EAAMgB,OAAOtc,MAC9BwlC,GAAY,EAALG,IAAW,EAAKC,EACZ,KAAPA,IAAahmB,GAAKvI,OAAOutB,aAAaY,IAE3C,OAAO5lB,IAxCG,GA4CTkmB,GAA6B,qBAAXC,QAA6C,qBAAZC,SAAuD,qBAArBA,QAAQC,YAA8BD,QAAQC,SAAS9f,KAE5I+f,GAAqB,aAEzB,GAAqB,qBAAXH,OAAwB,CACjC,IAAII,IAAQJ,OAAO96B,KACnB,IAAIk7B,GAAM,IAAMJ,OAAO96B,KAAK,MAAO,QAAW,MAAMU,IAAKw6B,IAAO,EAChED,GAAcC,GAAO,SAASC,EAAKC,GAAO,OAAO,EAAQ,IAAIN,OAAOK,EAAKC,GAAO,IAAIN,OAAOK,IAAUL,OAAO96B,KAAKgzB,KAAK8H,QAElHA,OAAOO,QAAOP,OAAOO,MAAQ,SAASvmB,GAAK,OAAO,IAAIgmB,OAAOhmB,KAE7DgmB,OAAOQ,cAAaR,OAAOQ,YAAc,SAASxmB,GAAK,OAAO,IAAIgmB,OAAOhmB,KAG9E,SAASymB,GAAYhzB,GAEpB,OAAOsyB,GAAUC,OAAOO,MAAM9yB,GAAO,IAAIxI,MAAMwI,GAIhD,SAASizB,GAAejzB,GAEvB,OAAOsyB,GAAUC,OAAOQ,YAAY/yB,GAAO,IAAIxI,MAAMwI,GAItD,IAAIkzB,GAAM,SAAa5wB,GACtB,OAAGgwB,GAAgBI,GAAYpwB,EAAG,UAC3BA,EAAEgY,MAAM,IAAIhS,KAAI,SAAS9E,GAA0B,OAAyB,IAAlBA,EAAE6tB,WAAW,OAU/E,SAAS8B,GAAI58B,GACZ,GAAGiB,MAAMkN,QAAQnO,GAAO,OAAOA,EAAK+R,KAAI,SAASqE,GAAK,OAAO9I,OAAOutB,aAAazkB,MAAOpE,KAAK,IAC/D,IAA9B,IAAI6D,EAAsB,GAAY5f,EAAI,EAAGA,EAAI+J,EAAK5I,SAAUnB,EAAG4f,EAAE5f,GAAKqX,OAAOutB,aAAa76B,EAAK/J,IAAK,OAAO4f,EAAE7D,KAAK,IAQvH,SAAS6qB,GAAK78B,GACb,GAAyB,oBAAf88B,YAA4B,MAAM,IAAIjrB,MAAM,eACtD,GAAG7R,aAAgB88B,YAAa,OAAOD,GAAK,IAAIE,WAAW/8B,IAG3D,IADA,IAAI6V,EAAI,IAAI5U,MAAMjB,EAAK5I,QACfnB,EAAI,EAAGA,EAAI+J,EAAK5I,SAAUnB,EAAG4f,EAAE5f,GAAK+J,EAAK/J,GACjD,OAAO4f,EAGR,IAAImnB,GAAU,SAASC,GAAQ,MAAO,GAAGtzB,OAAOtF,MAAM,GAAI44B,IAEtDC,GAAO,UAAWC,GAAO,mBAsBzBC,GAAoB,GACpBC,GAAW,SAAkBD,GAEjC,SAASE,EAAQrwB,GAA2B,IAAI4I,EAAI,GAAI5f,EAAIgX,EAAE7V,OAAO,EAAG,MAAMnB,GAAG,EAAG4f,GAAK5I,EAAEsF,OAAOtc,KAAM,OAAO4f,EAC/G,SAAS0nB,EAAKnnB,EAAa8D,GAA2B,IAAIrE,EAAI,GAAI,MAAMA,EAAEze,OAAS8iB,EAAGrE,GAAGO,EAAG,OAAOP,EACnG,SAAS2nB,EAAKxZ,EAAU1X,GAAyB,IAAImxB,EAAE,GAAGzZ,EAAG,OAAOyZ,EAAErmC,QAAQkV,EAAEmxB,EAAEF,EAAK,IAAIjxB,EAAEmxB,EAAErmC,QAAQqmC,EACvG,SAASC,EAAK1Z,EAAU1X,GAAyB,IAAImxB,EAAE,GAAGzZ,EAAE,OAAOyZ,EAAErmC,QAAQkV,EAAEmxB,EAAEF,EAAK,IAAIjxB,EAAEmxB,EAAErmC,QAAQqmC,EACtG,SAASE,EAAM3Z,EAAU1X,GAAyB,IAAImxB,EAAE,GAAGzZ,EAAG,OAAOyZ,EAAErmC,QAAQkV,EAAEmxB,EAAEA,EAAEF,EAAK,IAAIjxB,EAAEmxB,EAAErmC,QAClG,SAASwmC,EAAO5Z,EAAU1X,GAAyB,IAAImxB,EAAE,GAAG10B,KAAKC,MAAMgb,GAAI,OAAOyZ,EAAErmC,QAAQkV,EAAEmxB,EAAEF,EAAK,IAAIjxB,EAAEmxB,EAAErmC,QAAQqmC,EACrH,SAASI,EAAO7Z,EAAU1X,GAAyB,IAAImxB,EAAE,GAAGzZ,EAAG,OAAOyZ,EAAErmC,QAAQkV,EAAEmxB,EAAEF,EAAK,IAAIjxB,EAAEmxB,EAAErmC,QAAQqmC,EAPzGL,EAAIU,QAAU,SAQd,IAAIC,EAAQh1B,KAAKi1B,IAAI,EAAE,IACvB,SAASC,EAAMja,EAAU1X,GAAyB,GAAG0X,EAAE+Z,GAAO/Z,GAAG+Z,EAAO,OAAOH,EAAO5Z,EAAE1X,GAAI,IAAIrW,EAAI8S,KAAKC,MAAMgb,GAAI,OAAO6Z,EAAO5nC,EAAEqW,GACnI,SAAS4xB,EAAUnyB,EAAc9V,GAAyC,OAAZA,EAAIA,GAAK,EAAU8V,EAAE3U,QAAU,EAAInB,GAA8B,OAAR,GAAhB8V,EAAE+uB,WAAW7kC,KAA6C,OAAR,GAAlB8V,EAAE+uB,WAAW7kC,EAAE,KAA6C,OAAR,GAAlB8V,EAAE+uB,WAAW7kC,EAAE,KAA6C,OAAR,GAAlB8V,EAAE+uB,WAAW7kC,EAAE,KAA6C,OAAR,GAAlB8V,EAAE+uB,WAAW7kC,EAAE,KAA6C,MAAR,GAAlB8V,EAAE+uB,WAAW7kC,EAAE,KAA4C,OAAR,GAAlB8V,EAAE+uB,WAAW7kC,EAAE,IAI/T,IAAIgtB,EAAiC,CACpC,CAAC,MAAO,UACR,CAAC,MAAO,UACR,CAAC,MAAO,WACR,CAAC,MAAO,aACR,CAAC,MAAO,YACR,CAAC,MAAO,UACR,CAAC,MAAO,aAELha,EAAmC,CACtC,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,SACb,CAAC,IAAK,MAAO,OACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,QACb,CAAC,IAAK,MAAO,UACb,CAAC,IAAK,MAAO,aACb,CAAC,IAAK,MAAO,WACb,CAAC,IAAK,MAAO,YACb,CAAC,IAAK,MAAO,aAEd,SAASk1B,EAAWV,GACnBA,EAAE,GAAK,UACPA,EAAE,GAAK,IACPA,EAAE,GAAK,OACPA,EAAE,GAAK,QACPA,EAAE,GAAK,WACPA,EAAE,GAAK,KACPA,EAAE,IAAK,QACPA,EAAE,IAAK,WACPA,EAAE,IAAK,QACPA,EAAE,IAAK,UACPA,EAAE,IAAK,SACPA,EAAE,IAAK,WACPA,EAAE,IAAK,QACPA,EAAE,IAAK,SACPA,EAAE,IAAK,aACPA,EAAE,IAAK,gBACPA,EAAE,IAAK,OACPA,EAAE,IAAK,UACPA,EAAE,IAAK,cACPA,EAAE,IAAK,iBACPA,EAAE,IAAK,sBACPA,EAAE,IAAK,sBACPA,EAAE,IAAK,2BACPA,EAAE,IAAK,QACPA,EAAE,IAAK,YACPA,EAAE,IAAK,SACPA,EAAE,IAAK,WACPA,EAAE,IAAK,IACPA,EAAE,IAAK,2BAGR,IAAIW,EAAY,GAChBD,EAAWC,GAIX,IAAIC,EAAgC,GAChCC,EAAO,EAGX,IAAIA,EAAO,EAAGA,GAAQ,IAAKA,EAAMD,EAAYC,GAAQ,GAAKA,EAG1D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQ,EAGvD,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQ,GAEvD,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQ,GAGvD,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAE9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAE9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAG9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAG9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAG9D,IAAIA,EAAO,GAAIA,GAAQ,KAAMA,EAAMD,EAAYC,GAAQA,EAAO,GAK9D,IAAIC,EAAgC,GAmBpC,SAASC,EAAKvxB,EAAc3B,EAAcmzB,GACzC,IAAIC,EAAMzxB,EAAI,GAAK,EAAI,EACnB0xB,EAAI1xB,EAAIyxB,EACRE,EAAM,EAAGC,EAAM,EAAGC,EAAI,EACtBC,EAAM,EAAGC,EAAM,EAAGC,EAAI,EACtBvyB,EAAI3D,KAAKoB,MAAMw0B,GACnB,MAAMK,EAAM1zB,EAAG,CAId,GAHAoB,EAAI3D,KAAKoB,MAAMw0B,GACfG,EAAIpyB,EAAImyB,EAAMD,EACdK,EAAIvyB,EAAIsyB,EAAMD,EACVJ,EAAIjyB,EAAK,KAAY,MACzBiyB,EAAI,GAAKA,EAAIjyB,GACbkyB,EAAMC,EAAKA,EAAMC,EACjBC,EAAMC,EAAKA,EAAMC,EAGlB,GADGA,EAAI3zB,IAAQ0zB,EAAM1zB,GAAK2zB,EAAIF,EAAKD,EAAIF,IAAcK,EAAID,EAAKF,EAAID,KAC9DJ,EAAO,MAAO,CAAC,EAAGC,EAAMI,EAAGG,GAC/B,IAAIC,EAAIn2B,KAAKoB,MAAMu0B,EAAMI,EAAEG,GAC3B,MAAO,CAACC,EAAGR,EAAII,EAAII,EAAED,EAAGA,GAEzB,SAASE,EAAgBnb,EAAaob,EAAcC,GACnD,GAAGrb,EAAI,SAAWA,EAAI,EAAG,OAAO,KAChC,IAAItc,EAAU,EAAFsc,EAAMtL,EAAO3P,KAAKoB,MAAM,OAAS6Z,EAAItc,IAAQ43B,EAAI,EACzDC,EAAK,GACLC,EAAI,CAACl0B,EAAE5D,EAAM+3B,EAAE/mB,EAAMgnB,EAAE,OAAO1b,EAAEtc,GAAMgR,EAAK9N,EAAE,EAAEgB,EAAE,EAAEU,EAAE,EAAEd,EAAE,EAAER,EAAE,EAAEkB,EAAE,EAAEgzB,EAAE,GAOzE,GANGn2B,KAAKa,IAAI41B,EAAIE,GAAK,OAAMF,EAAIE,EAAI,GAChCN,GAAQA,EAAKO,WAAUj4B,GAAQ,MAC/B83B,EAAIE,EAAI,QACVF,EAAIE,EAAI,EACK,SAARhnB,IAAiB8mB,EAAIC,EAAI/mB,EAAO,IAAKhR,IAAQ83B,EAAIl0B,IAE3C,KAAT5D,EAAc63B,EAAOF,EAAK,CAAC,KAAK,GAAG,IAAM,CAAC,KAAK,EAAE,IAAKC,EAAI,OACxD,GAAY,IAAT53B,EAAa63B,EAAOF,EAAK,CAAC,KAAK,EAAE,IAAM,CAAC,KAAK,EAAE,GAAIC,EAAI,MAC1D,CACD53B,EAAO,MAAMA,EAEhB,IAAI4E,EAAI,IAAIzF,KAAK,KAAM,EAAG,GAC1ByF,EAAExE,QAAQwE,EAAEvE,UAAYL,EAAO,GAC/B63B,EAAO,CAACjzB,EAAE/D,cAAe+D,EAAErB,WAAW,EAAEqB,EAAEvE,WAC1Cu3B,EAAMhzB,EAAE1E,SACLF,EAAO,KAAI43B,GAAOA,EAAM,GAAK,GAC7BD,IAAIC,EAAMM,EAAUtzB,EAAGizB,IAO3B,OALAC,EAAI50B,EAAI20B,EAAK,GAAIC,EAAI5zB,EAAI2zB,EAAK,GAAIC,EAAIlzB,EAAIizB,EAAK,GAC/CC,EAAItzB,EAAIwM,EAAO,GAAIA,EAAO3P,KAAKoB,MAAMuO,EAAO,IAC5C8mB,EAAIx0B,EAAI0N,EAAO,GAAIA,EAAO3P,KAAKoB,MAAMuO,EAAO,IAC5C8mB,EAAIh0B,EAAIkN,EACR8mB,EAAIN,EAAII,EACDE,EAhERjB,EAAY,GAAKA,EAAY,IAAM,4BAEnCA,EAAY,GAAKA,EAAY,IAAM,iCAEnCA,EAAY,GAAKA,EAAY,IAAM,kCAEnCA,EAAY,GAAKA,EAAY,IAAM,uCAGnCA,EAAY,IAAM,8CAElBA,EAAY,IAAM,uDAElBA,EAAY,IAAM,sDAElBA,EAAY,IAAM,+DAmDlBnB,EAAI+B,gBAAkBA,EACtB,IAAIU,EAAW,IAAIh5B,KAAK,KAAM,GAAI,GAAI,EAAG,EAAG,GACxCi5B,EAAWD,EAAS54B,UACpB84B,EAAW,IAAIl5B,KAAK,KAAM,EAAG,EAAG,EAAG,EAAG,GAC1C,SAASm5B,EAAchc,EAAY2b,GAClC,IAAIM,EAAQjc,EAAE/c,UAGd,OAFG04B,EAAUM,GAAS,UACdjc,GAAK+b,IAAUE,GAAS,QACxBA,GAASH,EAAoE,KAAxD9b,EAAElX,oBAAsB+yB,EAAS/yB,uBAAiC,MAGhG,SAASozB,EAAgBlc,GAA2B,OAAOA,EAAEhiB,SAAS,IACtEo7B,EAAI+C,aAAeD,EAInB,IAAIE,EAAkB,WACrB,IAAIC,EAA8B,2BAClC,SAASC,EAAczqB,GACtB,OAA2B,GAAnBA,EAAEpd,QAAQ,KAAcod,EAAIA,EAAEtI,QAAQ8yB,EAA6B,MAI5E,IAAIE,EAA8B,8BAC9BC,EAAwB,eAC5B,SAASC,EAAc5qB,GACtB,OAAsB,GAAnBA,EAAEpd,QAAQ,KAAmBod,EACzBA,EAAEtI,QAAQgzB,EAA4B,OAAOhzB,QAAQizB,EAAsB,SAInF,SAASE,EAAU1c,GAClB,IAAI9W,EAAK8W,EAAE,EAAE,GAAG,GACZnO,EAAIyqB,EAActc,EAAE2c,QAAQ,KAAM,OAAG9qB,EAAEze,QAAU8V,EAAU2I,GAC/DA,EAAImO,EAAE4c,YAAY,IAAQ/qB,EAAEze,QAAU8V,EAAU2I,EACzCmO,EAAE6c,cAAc,IAIxB,SAASC,EAAU9c,GAClB,IAAInO,EAAIyqB,EAActc,EAAE2c,QAAQ,KAChC,OAAQ9qB,EAAEze,QAAU4sB,EAAE,EAAE,GAAG,KAAa,MAANnO,GAAmB,OAANA,EAAcmO,EAAE4c,YAAY,GAAK/qB,EAGjF,SAASkrB,EAAqB/c,GAC7B,IAAuDnO,EAAnDmrB,EAAIj4B,KAAKoB,MAAMpB,KAAKk4B,IAAIl4B,KAAKa,IAAIoa,IAAIjb,KAAKm4B,QAO9C,OALuBrrB,EAApBmrB,IAAM,GAAKA,IAAM,EAAOhd,EAAE4c,YAAY,GAAGI,GACpCj4B,KAAKa,IAAIo3B,IAAM,EAAON,EAAU1c,GAC1B,KAANgd,EAAchd,EAAE2c,QAAQ,IAAI71B,OAAO,EAAE,IACpCg2B,EAAU9c,GAEZsc,EAAcG,EAAc5qB,EAAE+N,gBAGtC,OAAOmd,EAvCc,GAoDtB,SAASI,EAAYnd,EAAWob,GAC/B,cAAcpb,GACb,IAAK,SAAU,OAAOA,EACtB,IAAK,UAAW,OAAOA,EAAI,OAAS,QACpC,IAAK,SAAU,OAAU,EAAFA,KAASA,EAAIA,EAAEhiB,SAAS,IAAMo+B,EAAgBpc,GACrE,IAAK,YAAa,MAAO,GACzB,IAAK,SACJ,GAAQ,MAALA,EAAW,MAAO,GACrB,GAAGA,aAAand,KAAM,OAAOL,EAAO,GAAIw5B,EAAchc,EAAGob,GAAQA,EAAKO,UAAWP,GAEnF,MAAM,IAAIvtB,MAAM,wCAA0CmS,GAG3D,SAAS4b,EAAUl4B,EAAemO,GAEhCA,EAAE,IAAM,IACR,IAAIypB,EAAM53B,EAAKE,SAEf,OADGF,EAAO,KAAI43B,GAAOA,EAAM,GAAK,GACzBA,EAIT,SAAS8B,EAAW5oC,EAAiB2rB,EAAgB3a,EAAK63B,GACzD,IAAiC7B,EAA7B3pB,EAAE,GAAI5J,EAAG,EAAGq1B,EAAG,EAAG12B,EAAIpB,EAAIoB,EAAQ22B,EAAO,EAC7C,OAAO/oC,GACN,KAAK,GACJoS,EAAIpB,EAAIoB,EAAI,IAEb,KAAK,IACL,OAAOuZ,EAAI/sB,QACV,KAAK,EAAG,KAAK,EAAGooC,EAAM50B,EAAI,IAAK22B,EAAO,EAAG,MACzC,QAAS/B,EAAM50B,EAAI,IAAO22B,EAAO,EAAG,MACnC,MACF,KAAK,IACL,OAAOpd,EAAI/sB,QACV,KAAK,EAAG,KAAK,EAAGooC,EAAMh2B,EAAIoC,EAAG21B,EAAOpd,EAAI/sB,OAAQ,MAChD,KAAK,EAAG,OAAO6R,EAAOO,EAAIoC,EAAE,GAAG,GAC/B,KAAK,EAAG,OAAO3C,EAAOO,EAAIoC,EAAE,GAAG,GAC/B,QAAS,OAAO3C,EAAOO,EAAIoC,EAAE,GAAG,GAC/B,MACF,KAAK,IACL,OAAOuY,EAAI/sB,QACV,KAAK,EAAG,KAAK,EAAGooC,EAAMh2B,EAAI8C,EAAGi1B,EAAOpd,EAAI/sB,OAAQ,MAChD,KAAK,EAAG,OAAO6rB,EAAKzZ,EAAI01B,GAAG,GAC3B,QAAS,OAAOjc,EAAKzZ,EAAI01B,GAAG,GAC3B,MACF,KAAK,IACL,OAAO/a,EAAI/sB,QACV,KAAK,EAAG,KAAK,EAAGooC,EAAM,GAAGh2B,EAAIgC,EAAE,IAAI,GAAI+1B,EAAOpd,EAAI/sB,OAAQ,MAC1D,QAAS,KAAM,oBAAsB+sB,EACpC,MACF,KAAK,GACL,OAAOA,EAAI/sB,QACV,KAAK,EAAG,KAAK,EAAGooC,EAAMh2B,EAAIgC,EAAG+1B,EAAOpd,EAAI/sB,OAAQ,MAChD,QAAS,KAAM,oBAAsB+sB,EACpC,MACF,KAAK,GACL,OAAOA,EAAI/sB,QACV,KAAK,EAAG,KAAK,EAAGooC,EAAMh2B,EAAIwB,EAAGu2B,EAAOpd,EAAI/sB,OAAQ,MAChD,QAAS,KAAM,sBAAwB+sB,EACtC,MACF,KAAK,IACJ,GAAU,KAAPA,GAAqB,MAAPA,GAAsB,MAAPA,GAAsB,OAAPA,GAAuB,QAAPA,EAAe,KAAM,sBAAwBA,EAC5G,OAAa,IAAV3a,EAAIk2B,GAAmB,KAAPvb,GAAqB,MAAPA,GAEpBmd,EAAVD,GAAO,EAAgB,IAARA,EAAY,IAAO,IACnB,IAARA,EAAY,GAAK,EAC3Bp1B,EAAKlD,KAAKC,MAAM,GAAMQ,EAAI0C,EAAI1C,EAAIk2B,IAC/BzzB,GAAM,GAAGq1B,IAAIr1B,EAAK,GACV,MAARkY,EAA2B,IAAPlY,EAAW,IAAM,GAAGA,EAAGq1B,GAC9CzrB,EAAI2nB,EAAKvxB,EAAG,EAAIo1B,GACL,OAARld,EAAqBtO,EAAE/K,OAAO,EAAE,GAC5B,IAAM+K,EAAE/K,OAAO,EAAEqZ,EAAI/sB,OAAO,KATmBomC,EAAKh0B,EAAI0C,EAAGiY,EAAI/sB,QAUvE,KAAK,GACL,OAAO+sB,GACN,IAAK,MAAO,IAAK,OAAQqb,EAAY,GAANh2B,EAAI8B,EAAK9B,EAAIgC,EAAG,MAC/C,IAAK,MAAO,IAAK,OAAQg0B,EAAuB,IAAV,GAANh2B,EAAI8B,EAAK9B,EAAIgC,GAAMhC,EAAIwB,EAAG,MAC1D,IAAK,MAAO,IAAK,OAAQw0B,EAAkC,IAAV,IAAV,GAANh2B,EAAI8B,EAAK9B,EAAIgC,GAAMhC,EAAIwB,GAAMjC,KAAKC,MAAMQ,EAAI0C,EAAE1C,EAAIk2B,GAAI,MACvF,QAAS,KAAM,uBAAyBvb,EACvCod,EAAsB,IAAfpd,EAAI/sB,OAAe,EAAI,EAAG,MACnC,KAAK,IACJooC,EAAM50B,EAAG22B,EAAO,EAAG,MAErB,IAAIC,EAASD,EAAO,EAAI/D,EAAKgC,EAAK+B,GAAQ,GAC1C,OAAOC,EAGR,SAASC,EAAS11B,GACjB,IAAImB,EAAI,EACR,GAAGnB,EAAE3U,QAAU8V,EAAG,OAAOnB,EAEzB,IADA,IAAIyY,EAAKzY,EAAE3U,OAAS8V,EAAI2I,EAAI9J,EAAEjB,OAAO,EAAE0Z,GACjCA,GAAGzY,EAAE3U,OAAQotB,GAAGtX,EAAG2I,IAAIA,EAAEze,OAAS,EAAI,IAAM,IAAM2U,EAAEjB,OAAO0Z,EAAEtX,GACnE,OAAO2I,EAvGRunB,EAAIsE,aAAetB,EAuBnBhD,EAAIuE,SAAWR,EAkFf,IAAIS,EAA8B,WAClC,IAAIC,EAAO,KACX,SAASC,EAActpC,EAAiB2rB,EAAgB3a,GACvD,IAAIu4B,EAAO5d,EAAI5W,QAAQs0B,EAAK,IAAKG,EAAM7d,EAAI/sB,OAAS2qC,EAAK3qC,OACzD,OAAOwqC,EAAUppC,EAAMupC,EAAMv4B,EAAMT,KAAKi1B,IAAI,GAAG,EAAEgE,IAAQzE,EAAK,IAAIyE,GAEnE,SAASC,EAAazpC,EAAiB2rB,EAAgB3a,GACtD,IAAI04B,EAAM/d,EAAI/sB,OAAS,EACvB,MAAgC,KAA1B+sB,EAAI2W,WAAWoH,EAAI,KAAaA,EACtC,OAAON,EAAUppC,EAAM2rB,EAAIrZ,OAAO,EAAEo3B,GAAM14B,EAAMT,KAAKi1B,IAAI,GAAG,GAAG7Z,EAAI/sB,OAAO8qC,KAE3E,SAASC,EAAche,EAAgB3a,GACtC,IAAIqM,EACAqsB,EAAM/d,EAAI1rB,QAAQ,KAAO0rB,EAAI1rB,QAAQ,KAAO,EAChD,GAAG0rB,EAAI3W,MAAM,eAAgB,CAC5B,GAAU,GAAPhE,EAAU,MAAO,SACf,GAAGA,EAAM,EAAG,MAAO,IAAM24B,EAAche,GAAM3a,GAClD,IAAI44B,EAASje,EAAI1rB,QAAQ,MAAqB,IAAZ2pC,IAAeA,EAAOje,EAAI1rB,QAAQ,MACpE,IAAI4pC,EAAKt5B,KAAKoB,MAAMpB,KAAKk4B,IAAIz3B,GAAKT,KAAKm4B,QAAQkB,EAG/C,GAFGC,EAAK,IAAGA,GAAMD,GACjBvsB,GAAKrM,EAAIT,KAAKi1B,IAAI,GAAGqE,IAAKzB,YAAYsB,EAAI,GAAGE,EAAOC,GAAID,IACjC,IAApBvsB,EAAEpd,QAAQ,KAAa,CACzB,IAAI6pC,EAAQv5B,KAAKoB,MAAMpB,KAAKk4B,IAAIz3B,GAAKT,KAAKm4B,SACnB,IAApBrrB,EAAEpd,QAAQ,KAAaod,EAAIA,EAAEtD,OAAO,GAAK,IAAMsD,EAAE/K,OAAO,GAAK,MAAQw3B,EAAQzsB,EAAEze,OAAOirC,GACpFxsB,GAAK,MAAQysB,EAAQD,GAC1B,MAAwB,OAAlBxsB,EAAE/K,OAAO,EAAE,GAChB+K,EAAIA,EAAEtD,OAAO,GAAKsD,EAAE/K,OAAO,EAAEs3B,GAAU,IAAMvsB,EAAE/K,OAAO,EAAEs3B,GACxDvsB,EAAIA,EAAEtI,QAAQ,aAAa,MAAMA,QAAQ,QAAQ,MAElDsI,EAAIA,EAAEtI,QAAQ,MAAM,KAErBsI,EAAIA,EAAEtI,QAAQ,4BAA2B,SAASg1B,EAAGC,EAAGC,EAAGC,GAAM,OAAOF,EAAKC,EAAKC,EAAG53B,OAAO,GAAGs3B,EAAOC,GAAID,GAAU,IAAMM,EAAG53B,OAAOu3B,GAAM,YACpIxsB,EAAIrM,EAAIq3B,cAAcqB,GAG7B,OAFG/d,EAAI3W,MAAM,WAAaqI,EAAErI,MAAM,cAAaqI,EAAIA,EAAE/K,OAAO,EAAE+K,EAAEze,OAAO,GAAK,IAAMye,EAAEtD,OAAOsD,EAAEze,OAAO,IACjG+sB,EAAI3W,MAAM,QAAUqI,EAAErI,MAAM,SAAQqI,EAAIA,EAAEtI,QAAQ,MAAM,MACpDsI,EAAEtI,QAAQ,IAAI,KAEtB,IAAIo1B,EAAQ,yBACZ,SAASC,EAAaC,EAAqBC,EAAiBj5B,GAC3D,IAAIk5B,EAAMvxB,SAASqxB,EAAE,GAAG,IAAKG,EAAKj6B,KAAKC,MAAM85B,EAAOC,GAAME,EAAOl6B,KAAKoB,MAAM64B,EAAGD,GAC3EG,EAAOF,EAAKC,EAAKF,EAAMI,EAAMJ,EACjC,OAAOl5B,GAAiB,IAATo5B,EAAa,GAAK,GAAGA,GAAQ,KAAe,IAARC,EAAY3F,EAAK,IAAKsF,EAAE,GAAGzrC,OAAS,EAAIyrC,EAAE,GAAGzrC,QAAUsmC,EAAKwF,EAAIL,EAAE,GAAGzrC,QAAUyrC,EAAE,GAAK,IAAMA,EAAE,GAAKrF,EAAK2F,EAAIN,EAAE,GAAGzrC,SAErK,SAASgsC,EAAaP,EAAqBC,EAAiBj5B,GAC3D,OAAOA,GAAiB,IAATi5B,EAAa,GAAK,GAAGA,GAAQvF,EAAK,IAAKsF,EAAE,GAAGzrC,OAAS,EAAIyrC,EAAE,GAAGzrC,QAE9E,IAAIisC,EAAO,iBACPC,EAAa,WACbC,EAAQ,sBACZ,SAASC,EAAMp2B,GAEd,IADA,IAAYq2B,EAAR5tB,EAAI,GACA5f,EAAI,EAAGA,GAAKmX,EAAIhW,SAAUnB,EAAG,OAAQwtC,EAAGr2B,EAAI0tB,WAAW7kC,IAC9D,KAAK,GAAI,MACT,KAAK,GAAI4f,GAAI,IAAK,MAClB,KAAK,GAAIA,GAAI,IAAK,MAClB,QAASA,GAAIvI,OAAOutB,aAAa4I,GAElC,OAAO5tB,EAER,SAAS6tB,EAAIl6B,EAAgB8C,GAA2B,IAAIC,EAAKxD,KAAKi1B,IAAI,GAAG1xB,GAAI,MAAO,GAAIvD,KAAKC,MAAMQ,EAAM+C,GAAIA,EACjH,SAASo3B,EAAIn6B,EAAgB8C,GAC5B,IAAIs3B,EAAQp6B,EAAMT,KAAKoB,MAAMX,GAAM+C,EAAKxD,KAAKi1B,IAAI,GAAG1xB,GACpD,OAAIA,GAAK,GAAKvD,KAAKC,MAAM46B,EAAQr3B,IAAKnV,OAAe,EAC9C2R,KAAKC,MAAM46B,EAAQr3B,GAE3B,SAASs3B,EAAMr6B,EAAgB8C,GAC9B,OAAIA,GAAK,GAAKvD,KAAKC,OAAOQ,EAAIT,KAAKoB,MAAMX,IAAMT,KAAKi1B,IAAI,GAAG1xB,KAAKlV,OACxD,EAED,EAER,SAAS0sC,EAAIt6B,GACZ,OAAGA,EAAM,YAAcA,GAAO,WAAmB,IAAIA,GAAO,EAAS,EAAJA,EAAUA,EAAI,EAAE,GAC1E,GAAGT,KAAKoB,MAAMX,GAEtB,SAASu6B,EAAcvrC,EAAiB2rB,EAAgB3a,GACvD,GAA0B,KAAvBhR,EAAKsiC,WAAW,KAAc3W,EAAI3W,MAAM81B,GAAa,CACvD,IAAIU,EAAO7f,EAAI5W,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,IACjE,OAAG/D,GAAO,EAAUu6B,EAAc,IAAKC,EAAMx6B,GACtC,IAAMu6B,EAAc,IAAKC,GAAOx6B,GAAO,IAE/C,GAAsC,KAAnC2a,EAAI2W,WAAW3W,EAAI/sB,OAAS,GAAW,OAAO6qC,EAAazpC,EAAM2rB,EAAK3a,GACzE,IAAyB,IAAtB2a,EAAI1rB,QAAQ,KAAa,OAAOqpC,EAActpC,EAAM2rB,EAAK3a,GAC5D,IAAyB,IAAtB2a,EAAI1rB,QAAQ,KAAa,OAAO0pC,EAAche,EAAK3a,GACtD,GAAyB,KAAtB2a,EAAI2W,WAAW,GAAW,MAAO,IAAIiJ,EAAcvrC,EAAK2rB,EAAIrZ,OAAsB,KAAfqZ,EAAI5R,OAAO,GAAQ,EAAE,GAAG/I,GAC9F,IAAIqM,EACAgtB,EAAsBoB,EAAIC,EAAIpB,EAAO/5B,KAAKa,IAAIJ,GAAMK,EAAOL,EAAM,EAAI,IAAM,GAC/E,GAAG2a,EAAI3W,MAAM,SAAU,OAAO3D,EAAOo0B,EAAM6E,EAAK3e,EAAI/sB,QACpD,GAAG+sB,EAAI3W,MAAM,WAEZ,OADAqI,EAAIooB,EAAMz0B,EAAI,GAAa,MAANqM,IAAWA,EAAI,IAC7BA,EAAEze,OAAS+sB,EAAI/sB,OAASye,EAAI2tB,EAAMrf,EAAIrZ,OAAO,EAAEqZ,EAAI/sB,OAAOye,EAAEze,SAAWye,EAE/E,GAAIgtB,EAAI1e,EAAI3W,MAAMm1B,GAAS,OAAOC,EAAaC,EAAGC,EAAMj5B,GACxD,GAAGsa,EAAI3W,MAAM,UAAW,OAAO3D,EAAOo0B,EAAM6E,EAAK3e,EAAI/sB,OAAS+sB,EAAI1rB,QAAQ,MAC1E,GAAIoqC,EAAI1e,EAAI3W,MAAM61B,GAEjB,OADAxtB,EAAI6tB,EAAIl6B,EAAKq5B,EAAE,GAAGzrC,QAAQmW,QAAQ,aAAa,MAAMi2B,EAAMX,EAAE,KAAKt1B,QAAQ,MAAM,IAAIi2B,EAAMX,EAAE,KAAKt1B,QAAQ,YAAW,SAASg1B,EAAIC,GAAM,MAAO,IAAMA,EAAKjF,EAAK,IAAKiG,EAAaX,EAAe,IAAIzrC,OAAOorC,EAAGprC,YAC/K,IAAvB+sB,EAAI1rB,QAAQ,MAAeod,EAAIA,EAAEtI,QAAQ,OAAO,KAGxD,GADA4W,EAAMA,EAAI5W,QAAQ,YAAa,MAC3Bs1B,EAAI1e,EAAI3W,MAAM,gBACjB,OAAO3D,EAAO65B,EAAIZ,EAAMD,EAAE,GAAGzrC,QAAQmW,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAOs1B,EAAE,GAAGzrC,OAAO,KAAK,KAElI,GAAIyrC,EAAI1e,EAAI3W,MAAM,qBAAuB,OAAO3D,EAAO43B,EAASxD,EAAM6E,EAAK,IAC3E,GAAID,EAAI1e,EAAI3W,MAAM,qBACjB,OAAOhE,EAAM,EAAI,IAAMu6B,EAAcvrC,EAAM2rB,GAAM3a,GAAOi4B,EAAS,IAAI14B,KAAKoB,MAAMX,GAAOq6B,EAAMr6B,EAAKq5B,EAAE,GAAGzrC,UAAY,IAAMomC,EAAKmG,EAAIn6B,EAAKq5B,EAAE,GAAGzrC,QAAQyrC,EAAE,GAAGzrC,QAE1J,GAAIyrC,EAAI1e,EAAI3W,MAAM,YAAc,OAAOu2B,EAAcvrC,EAAK2rB,EAAI5W,QAAQ,SAAS,IAAI/D,GACnF,GAAIq5B,EAAI1e,EAAI3W,MAAM,2BAGjB,OAFAqI,EAAIynB,EAAQyG,EAAcvrC,EAAM2rB,EAAI5W,QAAQ,SAAS,IAAK/D,IAC1Dy6B,EAAK,EACE3G,EAAQA,EAAQnZ,EAAI5W,QAAQ,MAAM,KAAKA,QAAQ,SAAQ,SAASN,GAAG,OAAOg3B,EAAGpuB,EAAEze,OAAOye,EAAEtD,OAAO0xB,KAAU,MAAJh3B,EAAQ,IAAI,OAEzH,GAAGkX,EAAI3W,MAAM+1B,GAEZ,OADA1tB,EAAIkuB,EAAcvrC,EAAM,aAAcgR,GAC/B,IAAMqM,EAAE/K,OAAO,EAAE,GAAK,KAAO+K,EAAE/K,OAAO,EAAG,GAAK,IAAM+K,EAAE/K,OAAO,GAErE,IAAIq5B,EAAK,GACT,GAAItB,EAAI1e,EAAI3W,MAAM,+BAUjB,OATAy2B,EAAKl7B,KAAKyP,IAAiBqqB,EAAE,GAAUzrC,OAAO,GAC9C8sC,EAAK1F,EAAKsE,EAAM/5B,KAAKi1B,IAAI,GAAGiG,GAAI,GAAG,GACnCpuB,EAAI,GAAKhM,EACTs6B,EAAKvC,EAAU,IAAkBiB,EAAE,GAAWqB,EAAG,IACpB,KAA1BC,EAAG5xB,OAAO4xB,EAAG/sC,OAAO,KAAW+sC,EAAKA,EAAGr5B,OAAO,EAAEq5B,EAAG/sC,OAAO,GAAK,KAClEye,GAAKsuB,EAAkBtB,EAAE,GAAY,IAAmBA,EAAE,GAC1DsB,EAAKxG,EAAMuG,EAAG,GAAGD,GACdE,EAAG/sC,OAASyrC,EAAE,GAAGzrC,SAAQ+sC,EAAKX,EAAMX,EAAE,GAAG/3B,OAAO+3B,EAAE,GAAGzrC,OAAO+sC,EAAG/sC,SAAW+sC,GAC7EtuB,GAAKsuB,EACEtuB,EAER,GAAIgtB,EAAI1e,EAAI3W,MAAM,iCAGjB,OAFAy2B,EAAKl7B,KAAKyP,IAAIzP,KAAKme,IAAI2b,EAAE,GAAGzrC,OAAQyrC,EAAE,GAAGzrC,QAAQ,GACjD8sC,EAAK1F,EAAKsE,EAAM/5B,KAAKi1B,IAAI,GAAGiG,GAAI,GAAG,GAC5Bp6B,GAAQq6B,EAAG,KAAKA,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAKxG,EAAKwG,EAAG,GAAGD,GAAMpB,EAAE,GAAK,IAAMA,EAAE,GAAKlF,EAAMuG,EAAG,GAAGD,GAAK1G,EAAK,IAAK,EAAE0G,EAAG,EAAIpB,EAAE,GAAGzrC,OAASyrC,EAAE,GAAGzrC,SAExJ,GAAIyrC,EAAI1e,EAAI3W,MAAM,YAEjB,OADAqI,EAAIooB,EAAMz0B,EAAK,GACZ2a,EAAI/sB,QAAUye,EAAEze,OAAeye,EAC3B2tB,EAAMrf,EAAIrZ,OAAO,EAAEqZ,EAAI/sB,OAAOye,EAAEze,SAAWye,EAEnD,GAAIgtB,EAAI1e,EAAI3W,MAAM,uBAAyB,CAC1CqI,EAAI,GAAKrM,EAAIm3B,QAAQ53B,KAAKyP,IAAIqqB,EAAE,GAAGzrC,OAAO,KAAKmW,QAAQ,YAAY,MACnE02B,EAAKpuB,EAAEpd,QAAQ,KACf,IAAI2rC,EAAOjgB,EAAI1rB,QAAQ,KAAOwrC,EAAII,EAAOlgB,EAAI/sB,OAASye,EAAEze,OAASgtC,EACjE,OAAOZ,EAAMrf,EAAIrZ,OAAO,EAAEs5B,GAAQvuB,EAAIsO,EAAIrZ,OAAOqZ,EAAI/sB,OAAOitC,IAE7D,GAAIxB,EAAI1e,EAAI3W,MAAM,sBAEjB,OADAy2B,EAAKN,EAAIn6B,EAAKq5B,EAAE,GAAGzrC,QACZoS,EAAM,EAAI,IAAMu6B,EAAcvrC,EAAM2rB,GAAM3a,GAAOi4B,EAASqC,EAAIt6B,IAAM+D,QAAQ,aAAa,OAAOA,QAAQ,SAAQ,SAASg1B,GAAM,MAAO,OAASA,EAAGnrC,OAAS,EAAIomC,EAAK,EAAE,EAAE+E,EAAGnrC,QAAU,IAAMmrC,KAAS,IAAM/E,EAAKyG,EAAGpB,EAAE,GAAGzrC,QAE/N,OAAO+sB,GACN,IAAK,aAAc,OAAO4f,EAAcvrC,EAAM,WAAYgR,GAC1D,IAAK,UACL,IAAK,SACL,IAAK,QAAS,IAAIyD,EAAIw0B,EAASxD,EAAM6E,EAAK,IAAK,MAAa,MAAN71B,EAAYpD,EAAOoD,EAAI,GAC7E,IAAK,aAAc,OAAO82B,EAAcvrC,EAAM,aAAagR,GAAK+D,QAAQ,OAAO,KAC/E,IAAK,WAAY,OAAOw2B,EAAcvrC,EAAM,WAAWgR,GAAK+D,QAAQ,OAAO,KAC3E,SAED,MAAM,IAAIsE,MAAM,uBAAyBsS,EAAM,KAEhD,SAASmgB,EAAc9rC,EAAiB2rB,EAAgB3a,GACvD,IAAI04B,EAAM/d,EAAI/sB,OAAS,EACvB,MAAgC,KAA1B+sB,EAAI2W,WAAWoH,EAAI,KAAaA,EACtC,OAAON,EAAUppC,EAAM2rB,EAAIrZ,OAAO,EAAEo3B,GAAM14B,EAAMT,KAAKi1B,IAAI,GAAG,GAAG7Z,EAAI/sB,OAAO8qC,KAE3E,SAASqC,EAAe/rC,EAAiB2rB,EAAgB3a,GACxD,IAAIu4B,EAAO5d,EAAI5W,QAAQs0B,EAAK,IAAKG,EAAM7d,EAAI/sB,OAAS2qC,EAAK3qC,OACzD,OAAOwqC,EAAUppC,EAAMupC,EAAMv4B,EAAMT,KAAKi1B,IAAI,GAAG,EAAEgE,IAAQzE,EAAK,IAAIyE,GAEnE,SAASwC,EAAergB,EAAgB3a,GACvC,IAAIqM,EACAqsB,EAAM/d,EAAI1rB,QAAQ,KAAO0rB,EAAI1rB,QAAQ,KAAO,EAChD,GAAG0rB,EAAI3W,MAAM,eAAgB,CAC5B,GAAU,GAAPhE,EAAU,MAAO,SACf,GAAGA,EAAM,EAAG,MAAO,IAAMg7B,EAAergB,GAAM3a,GACnD,IAAI44B,EAASje,EAAI1rB,QAAQ,MAAqB,IAAZ2pC,IAAeA,EAAOje,EAAI1rB,QAAQ,MACpE,IAAI4pC,EAAKt5B,KAAKoB,MAAMpB,KAAKk4B,IAAIz3B,GAAKT,KAAKm4B,QAAQkB,EAG/C,GAFGC,EAAK,IAAGA,GAAMD,GACjBvsB,GAAKrM,EAAIT,KAAKi1B,IAAI,GAAGqE,IAAKzB,YAAYsB,EAAI,GAAGE,EAAOC,GAAID,IACpDvsB,EAAErI,MAAM,QAAS,CACpB,IAAI80B,EAAQv5B,KAAKoB,MAAMpB,KAAKk4B,IAAIz3B,GAAKT,KAAKm4B,SACnB,IAApBrrB,EAAEpd,QAAQ,KAAaod,EAAIA,EAAEtD,OAAO,GAAK,IAAMsD,EAAE/K,OAAO,GAAK,MAAQw3B,EAAQzsB,EAAEze,OAAOirC,GACpFxsB,GAAK,MAAQysB,EAAQD,GAC1BxsB,EAAIA,EAAEtI,QAAQ,MAAM,KAErBsI,EAAIA,EAAEtI,QAAQ,4BAA2B,SAASg1B,EAAGC,EAAGC,EAAGC,GAAM,OAAOF,EAAKC,EAAKC,EAAG53B,OAAO,GAAGs3B,EAAOC,GAAID,GAAU,IAAMM,EAAG53B,OAAOu3B,GAAM,YACpIxsB,EAAIrM,EAAIq3B,cAAcqB,GAG7B,OAFG/d,EAAI3W,MAAM,WAAaqI,EAAErI,MAAM,cAAaqI,EAAIA,EAAE/K,OAAO,EAAE+K,EAAEze,OAAO,GAAK,IAAMye,EAAEtD,OAAOsD,EAAEze,OAAO,IACjG+sB,EAAI3W,MAAM,QAAUqI,EAAErI,MAAM,SAAQqI,EAAIA,EAAEtI,QAAQ,MAAM,MACpDsI,EAAEtI,QAAQ,IAAI,KAEtB,SAASk3B,EAAcjsC,EAAiB2rB,EAAgB3a,GACvD,GAA0B,KAAvBhR,EAAKsiC,WAAW,KAAc3W,EAAI3W,MAAM81B,GAAa,CACvD,IAAIU,EAAO7f,EAAI5W,QAAQ,OAAO,IAAIA,QAAQ,MAAM,IAAIA,QAAQ,KAAK,IACjE,OAAG/D,GAAO,EAAUi7B,EAAc,IAAKT,EAAMx6B,GACtC,IAAMi7B,EAAc,IAAKT,GAAOx6B,GAAO,IAE/C,GAAsC,KAAnC2a,EAAI2W,WAAW3W,EAAI/sB,OAAS,GAAW,OAAOktC,EAAc9rC,EAAM2rB,EAAK3a,GAC1E,IAAyB,IAAtB2a,EAAI1rB,QAAQ,KAAa,OAAO8rC,EAAe/rC,EAAM2rB,EAAK3a,GAC7D,IAAyB,IAAtB2a,EAAI1rB,QAAQ,KAAa,OAAO+rC,EAAergB,EAAK3a,GACvD,GAAyB,KAAtB2a,EAAI2W,WAAW,GAAW,MAAO,IAAI2J,EAAcjsC,EAAK2rB,EAAIrZ,OAAsB,KAAfqZ,EAAI5R,OAAO,GAAQ,EAAE,GAAG/I,GAC9F,IAAIqM,EACAgtB,EAAsBoB,EAAIC,EAAIpB,EAAO/5B,KAAKa,IAAIJ,GAAMK,EAAOL,EAAM,EAAI,IAAM,GAC/E,GAAG2a,EAAI3W,MAAM,SAAU,OAAO3D,EAAO2zB,EAAKsF,EAAK3e,EAAI/sB,QACnD,GAAG+sB,EAAI3W,MAAM,WAEZ,OADAqI,EAAK,GAAGrM,EAAiB,IAARA,IAAWqM,EAAI,IACzBA,EAAEze,OAAS+sB,EAAI/sB,OAASye,EAAI2tB,EAAMrf,EAAIrZ,OAAO,EAAEqZ,EAAI/sB,OAAOye,EAAEze,SAAWye,EAE/E,GAAIgtB,EAAI1e,EAAI3W,MAAMm1B,GAAS,OAAOS,EAAaP,EAAGC,EAAMj5B,GACxD,GAAGsa,EAAI3W,MAAM,UAAW,OAAO3D,EAAO2zB,EAAKsF,EAAK3e,EAAI/sB,OAAS+sB,EAAI1rB,QAAQ,MACzE,GAAIoqC,EAAI1e,EAAI3W,MAAM61B,GAMjB,OAJAxtB,GAAK,GAAGrM,GAAK+D,QAAQ,aAAa,MAAMi2B,EAAMX,EAAE,KAAKt1B,QAAQ,MAAM,IAAIi2B,EAAMX,EAAE,KAC/EhtB,EAAIA,EAAEtI,QAAQ,YAAW,SAASg1B,EAAIC,GAErC,MAAO,IAAMA,EAAKjF,EAAK,IAAKiG,EAAMX,EAAE,IAAIzrC,OAAOorC,EAAGprC,YACrB,IAAvB+sB,EAAI1rB,QAAQ,MAAeod,EAAIA,EAAEtI,QAAQ,OAAO,KAGxD,GADA4W,EAAMA,EAAI5W,QAAQ,YAAa,MAC3Bs1B,EAAI1e,EAAI3W,MAAM,gBACjB,OAAO3D,GAAQ,GAAGi5B,GAAMv1B,QAAQ,kBAAkB,OAAOA,QAAQ,YAAY,OAAOA,QAAQ,OAAOs1B,EAAE,GAAGzrC,OAAO,KAAK,KAErH,GAAIyrC,EAAI1e,EAAI3W,MAAM,qBAAuB,OAAO3D,EAAO43B,EAAU,GAAGqB,GACpE,GAAID,EAAI1e,EAAI3W,MAAM,qBACjB,OAAOhE,EAAM,EAAI,IAAMi7B,EAAcjsC,EAAM2rB,GAAM3a,GAAOi4B,EAAU,GAAGj4B,GAAQ,IAAM+zB,EAAK,IAAIsF,EAAE,GAAGzrC,QAElG,GAAIyrC,EAAI1e,EAAI3W,MAAM,YAAc,OAAOi3B,EAAcjsC,EAAK2rB,EAAI5W,QAAQ,SAAS,IAAI/D,GACnF,GAAIq5B,EAAI1e,EAAI3W,MAAM,2BAGjB,OAFAqI,EAAIynB,EAAQmH,EAAcjsC,EAAM2rB,EAAI5W,QAAQ,SAAS,IAAK/D,IAC1Dy6B,EAAK,EACE3G,EAAQA,EAAQnZ,EAAI5W,QAAQ,MAAM,KAAKA,QAAQ,SAAQ,SAASN,GAAG,OAAOg3B,EAAGpuB,EAAEze,OAAOye,EAAEtD,OAAO0xB,KAAU,MAAJh3B,EAAQ,IAAI,OAEzH,GAAGkX,EAAI3W,MAAM+1B,GAEZ,OADA1tB,EAAI4uB,EAAcjsC,EAAM,aAAcgR,GAC/B,IAAMqM,EAAE/K,OAAO,EAAE,GAAK,KAAO+K,EAAE/K,OAAO,EAAG,GAAK,IAAM+K,EAAE/K,OAAO,GAErE,IAAIq5B,EAAK,GACT,GAAItB,EAAI1e,EAAI3W,MAAM,+BAUjB,OATAy2B,EAAKl7B,KAAKyP,IAAiBqqB,EAAE,GAAUzrC,OAAO,GAC9C8sC,EAAK1F,EAAKsE,EAAM/5B,KAAKi1B,IAAI,GAAGiG,GAAI,GAAG,GACnCpuB,EAAI,GAAKhM,EACTs6B,EAAKvC,EAAU,IAAkBiB,EAAE,GAAWqB,EAAG,IACpB,KAA1BC,EAAG5xB,OAAO4xB,EAAG/sC,OAAO,KAAW+sC,EAAKA,EAAGr5B,OAAO,EAAEq5B,EAAG/sC,OAAO,GAAK,KAClEye,GAAKsuB,EAAkBtB,EAAE,GAAY,IAAmBA,EAAE,GAC1DsB,EAAKxG,EAAMuG,EAAG,GAAGD,GACdE,EAAG/sC,OAASyrC,EAAE,GAAGzrC,SAAQ+sC,EAAKX,EAAMX,EAAE,GAAG/3B,OAAO+3B,EAAE,GAAGzrC,OAAO+sC,EAAG/sC,SAAW+sC,GAC7EtuB,GAAKsuB,EACEtuB,EAER,GAAIgtB,EAAI1e,EAAI3W,MAAM,iCAGjB,OAFAy2B,EAAKl7B,KAAKyP,IAAIzP,KAAKme,IAAI2b,EAAE,GAAGzrC,OAAQyrC,EAAE,GAAGzrC,QAAQ,GACjD8sC,EAAK1F,EAAKsE,EAAM/5B,KAAKi1B,IAAI,GAAGiG,GAAI,GAAG,GAC5Bp6B,GAAQq6B,EAAG,KAAKA,EAAG,GAAK,GAAK,MAAQ,KAAOA,EAAG,GAAKxG,EAAKwG,EAAG,GAAGD,GAAMpB,EAAE,GAAK,IAAMA,EAAE,GAAKlF,EAAMuG,EAAG,GAAGD,GAAK1G,EAAK,IAAK,EAAE0G,EAAG,EAAIpB,EAAE,GAAGzrC,OAASyrC,EAAE,GAAGzrC,SAExJ,GAAIyrC,EAAI1e,EAAI3W,MAAM,YAEjB,OADAqI,EAAI,GAAKrM,EACN2a,EAAI/sB,QAAUye,EAAEze,OAAeye,EAC3B2tB,EAAMrf,EAAIrZ,OAAO,EAAEqZ,EAAI/sB,OAAOye,EAAEze,SAAWye,EAEnD,GAAIgtB,EAAI1e,EAAI3W,MAAM,sBAAwB,CACzCqI,EAAI,GAAKrM,EAAIm3B,QAAQ53B,KAAKyP,IAAIqqB,EAAE,GAAGzrC,OAAO,KAAKmW,QAAQ,YAAY,MACnE02B,EAAKpuB,EAAEpd,QAAQ,KACf,IAAI2rC,EAAOjgB,EAAI1rB,QAAQ,KAAOwrC,EAAII,EAAOlgB,EAAI/sB,OAASye,EAAEze,OAASgtC,EACjE,OAAOZ,EAAMrf,EAAIrZ,OAAO,EAAEs5B,GAAQvuB,EAAIsO,EAAIrZ,OAAOqZ,EAAI/sB,OAAOitC,IAE7D,GAAIxB,EAAI1e,EAAI3W,MAAM,sBACjB,OAAOhE,EAAM,EAAI,IAAMi7B,EAAcjsC,EAAM2rB,GAAM3a,GAAOi4B,EAAS,GAAGj4B,GAAK+D,QAAQ,aAAa,OAAOA,QAAQ,SAAQ,SAASg1B,GAAM,MAAO,OAASA,EAAGnrC,OAAS,EAAIomC,EAAK,EAAE,EAAE+E,EAAGnrC,QAAU,IAAMmrC,KAAS,IAAM/E,EAAK,EAAEqF,EAAE,GAAGzrC,QAE5N,OAAO+sB,GACN,IAAK,UACL,IAAK,SACL,IAAK,QAAS,IAAIlX,EAAIw0B,EAAS,GAAGqB,GAAO,MAAa,MAAN71B,EAAYpD,EAAOoD,EAAI,GACvE,QACC,GAAGkX,EAAI3W,MAAM,aAAc,OAAOi3B,EAAcjsC,EAAM2rB,EAAIlgB,MAAM,EAAEkgB,EAAIugB,YAAY,MAAOl7B,GAAOg6B,EAAMrf,EAAIlgB,MAAMkgB,EAAIugB,YAAY,OAElI,MAAM,IAAI7yB,MAAM,uBAAyBsS,EAAM,KAEhD,OAAO,SAAmB3rB,EAAiB2rB,EAAgB3a,GAC1D,OAAY,EAAJA,KAAWA,EAAMi7B,EAAcjsC,EAAM2rB,EAAK3a,GAAOu6B,EAAcvrC,EAAM2rB,EAAK3a,IAtRjD,GAwRlC,SAASm7B,EAAUxgB,GAGlB,IAFA,IAAIqb,EAAwB,GACxBoF,GAAS,EACL3uC,EAAI,EAAGuuB,EAAI,EAAGvuB,EAAIkuB,EAAI/sB,SAAUnB,EAAG,OAAekuB,EAAI2W,WAAW7kC,IACxE,KAAK,GACJ2uC,GAAUA,EAAQ,MACnB,KAAK,GAAI,KAAK,GAAI,KAAK,KACpB3uC,EAAG,MACN,KAAK,GACJupC,EAAIA,EAAIpoC,QAAU+sB,EAAIrZ,OAAO0Z,EAAEvuB,EAAEuuB,GACjCA,EAAIvuB,EAAE,EAGR,GADAupC,EAAIA,EAAIpoC,QAAU+sB,EAAIrZ,OAAO0Z,IACf,IAAXogB,EAAiB,MAAM,IAAI/yB,MAAM,WAAasS,EAAM,0BACvD,OAAOqb,EAERpC,EAAIyH,OAASF,EACb,IAAIG,EAAU,kCACd,SAASC,EAAY5gB,GACpB,IAAIluB,EAAI,EAAemgB,EAAI,GAAIP,EAAI,GACnC,MAAM5f,EAAIkuB,EAAI/sB,OACb,OAAQgf,EAAI+N,EAAI5R,OAAOtc,IACtB,IAAK,IAAQioC,EAAU/Z,EAAKluB,KAAIA,GAAI,GAAGA,IAAK,MAC5C,IAAK,IAAK,KAAsC,KAAzBkuB,EAAI2W,aAAa7kC,IAAcA,EAAIkuB,EAAI/sB,WAAsBnB,EAAG,MACvF,IAAK,KAAMA,GAAG,EAAG,MACjB,IAAK,IAAKA,GAAG,EAAG,MAChB,IAAK,MAAOA,EAAG,MACf,IAAK,IAAK,IAAK,IACd,GAAuB,MAApBkuB,EAAI5R,OAAOtc,EAAE,IAAkC,MAApBkuB,EAAI5R,OAAOtc,EAAE,GAAY,OAAO,EAE/D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAEvD,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,OAAO,EAC7E,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,GAAsC,QAAnCkuB,EAAIrZ,OAAO7U,EAAG,GAAG2tB,cAAyB,OAAO,EACpD,GAAsC,UAAnCO,EAAIrZ,OAAO7U,EAAG,GAAG2tB,cAA2B,OAAO,EACtD,GAAsC,UAAnCO,EAAIrZ,OAAO7U,EAAG,GAAG2tB,cAA2B,OAAO,IACpD3tB,EAAG,MACN,IAAK,IACJ4f,EAAIO,EACJ,MAA0B,MAApB+N,EAAI5R,OAAOtc,MAAgBA,EAAIkuB,EAAI/sB,OAAQye,GAAKsO,EAAI5R,OAAOtc,GACjE,GAAG4f,EAAErI,MAAMs3B,GAAU,OAAO,EAC5B,MACD,IAAK,IAEL,IAAK,IAAK,IAAK,IACd,MAAM7uC,EAAIkuB,EAAI/sB,SAAW,YAAYqB,QAAQ2d,EAAE+N,EAAI5R,SAAStc,KAAO,GAAS,MAAHmgB,GAA8B,KAAnB+N,EAAI5R,OAAOtc,EAAE,IAAa,KAAKwC,QAAQ0rB,EAAI5R,OAAOtc,EAAE,KAAK,IAC7I,MACD,IAAK,IAAK,MAAMkuB,EAAI5R,SAAStc,KAAOmgB,GAAgB,MACpD,IAAK,MAAOngB,EAAuB,KAAjBkuB,EAAI5R,OAAOtc,IAA8B,KAAjBkuB,EAAI5R,OAAOtc,MAAaA,EAAG,MACrE,IAAK,IAAK,IAAK,MAAOA,EAAG,MACzB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpF,MAAMA,EAAIkuB,EAAI/sB,QAAU,aAAaqB,QAAQ0rB,EAAI5R,SAAStc,KAAO,GAAgB,MAClF,IAAK,MAAOA,EAAG,MACf,UAAWA,EAAG,MAGhB,OAAO,EAGR,SAAS+uC,EAAS7gB,EAAgBH,EAAWob,EAAc6F,GAC1D,IAA8CC,EAAI1gB,EAAGif,EAAjDjE,EAAM,GAAI3pB,EAAI,GAAI5f,EAAI,EAAGmgB,EAAI,GAAI+uB,EAAI,IACrCC,EAAG,IAEP,MAAMnvC,EAAIkuB,EAAI/sB,OACb,OAAQgf,EAAI+N,EAAI5R,OAAOtc,IACtB,IAAK,IACJ,IAAIioC,EAAU/Z,EAAKluB,GAAI,MAAM,IAAI4b,MAAM,0BAA4BuE,EAAI,OAAQ+N,GAC/Eqb,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAE,WAAY/tB,GAAG,EAAG,MAC/C,IAAK,IACJ,IAAI4f,EAAE,GAAgC,MAA5B4tB,EAAGtf,EAAI2W,aAAa7kC,KAAcA,EAAIkuB,EAAI/sB,QAASye,GAAKvI,OAAOutB,aAAa4I,GACtFjE,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAEnO,KAAM5f,EAAG,MACtC,IAAK,KAAM,IAAIiX,EAAIiX,EAAI5R,SAAStc,GAAIwnC,EAAW,MAANvwB,GAAmB,MAANA,EAAaA,EAAI,IACtEsyB,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAEA,EAAGzZ,EAAE9W,KAAMjX,EAAG,MACpC,IAAK,IAAKupC,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAE,KAAM/tB,GAAG,EAAG,MAClD,IAAK,IACJupC,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAEA,KAAM/tB,EAAG,MACtC,IAAK,IAAK,IAAK,IACd,GAAuB,MAApBkuB,EAAI5R,OAAOtc,EAAE,IAAkC,MAApBkuB,EAAI5R,OAAOtc,EAAE,GAAY,CACtD,GAAO,MAAJivC,IAAYA,EAAG/F,EAAgBnb,EAAGob,EAA0B,MAApBjb,EAAI5R,OAAOtc,EAAE,IAAoB,MAAJivC,GAAU,MAAO,GACzF1F,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAEG,EAAIrZ,OAAO7U,EAAE,IAAKkvC,EAAM/uB,EAAGngB,GAAG,EAAG,MAG/D,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtDmgB,EAAIA,EAAE9D,cAEP,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAChE,GAAG0R,EAAI,EAAG,MAAO,GACjB,GAAO,MAAJkhB,IAAYA,EAAG/F,EAAgBnb,EAAGob,GAAc,MAAJ8F,GAAU,MAAO,GAChErvB,EAAIO,EAAG,QAAQngB,EAAIkuB,EAAI/sB,QAAU+sB,EAAI5R,OAAOtc,GAAGqc,gBAAkB8D,EAAGP,GAAGO,EAC9D,MAANA,GAAmC,MAAtB+uB,EAAI7yB,gBAAuB8D,EAAI,KACtC,MAANA,IAAWA,EAAIgvB,GAClB5F,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAErnB,EAAG4N,EAAEnO,GAAIsvB,EAAM/uB,EAAG,MACxC,IAAK,IAAK,IAAK,IAAK,IAAK,IACxB,IAAI8oB,EAAE,CAACzB,EAAErnB,EAAG4N,EAAE5N,GAMd,GALO,MAAJ8uB,IAAUA,EAAG/F,EAAgBnb,EAAGob,IACG,QAAnCjb,EAAIrZ,OAAO7U,EAAG,GAAG2tB,eAAkC,MAAJshB,IAAUhG,EAAElb,EAAIkhB,EAAG15B,GAAK,GAAK,IAAM,KAAK0zB,EAAEzB,EAAI,IAAK2H,EAAG,IAAInvC,GAAG,GACrE,UAAlCkuB,EAAIrZ,OAAO7U,EAAE,GAAG2tB,eAAoC,MAAJshB,IAAUhG,EAAElb,EAAIkhB,EAAG15B,GAAK,GAAK,KAAO,MAAM0zB,EAAEzB,EAAI,IAAKxnC,GAAG,EAAGmvC,EAAG,KAC5E,UAAlCjhB,EAAIrZ,OAAO7U,EAAE,GAAG2tB,eAAoC,MAAJshB,IAAUhG,EAAElb,EAAIkhB,EAAG15B,GAAK,GAAK,KAAO,MAAM0zB,EAAEzB,EAAI,IAAKxnC,GAAG,EAAGmvC,EAAG,MAC/GlG,EAAEzB,EAAI,MAAOxnC,GACb,MAAJivC,GAAoB,MAARhG,EAAEzB,EAAW,MAAO,GACnC+B,EAAIA,EAAIpoC,QAAU8nC,EAAGiG,EAAM/uB,EAAG,MAC/B,IAAK,IACJP,EAAIO,EACJ,MAA0B,MAApB+N,EAAI5R,OAAOtc,MAAgBA,EAAIkuB,EAAI/sB,OAAQye,GAAKsO,EAAI5R,OAAOtc,GACjE,GAAmB,MAAhB4f,EAAE5R,OAAO,GAAY,KAAM,4BAA8B4R,EAAI,IAChE,GAAGA,EAAErI,MAAMs3B,GAAU,CACpB,GAAO,MAAJI,IAAYA,EAAG/F,EAAgBnb,EAAGob,GAAc,MAAJ8F,GAAU,MAAO,GAChE1F,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAEnO,EAAEvD,eAC9B6yB,EAAMtvB,EAAEtD,OAAO,QACNsD,EAAEpd,QAAQ,MAAQ,IAC3Bod,GAAKA,EAAErI,MAAM,kBAAkB,IAAI,IAAI,IACnCu3B,EAAY5gB,KAAMqb,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAIzZ,EAAEnO,KAElD,MAED,IAAK,IACJ,GAAS,MAANqvB,EAAY,CACdrvB,EAAIO,EAAG,QAAQngB,EAAIkuB,EAAI/sB,QAAgC,OAArBgf,EAAE+N,EAAI5R,OAAOtc,IAAa4f,GAAKO,EACjEopB,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAEnO,GAAI,MAGlC,IAAK,IAAK,IAAK,IACdA,EAAIO,EAAG,QAAQngB,EAAIkuB,EAAI/sB,QAAU,YAAYqB,QAAQ2d,EAAE+N,EAAI5R,OAAOtc,KAAO,EAAG4f,GAAKO,EACjFopB,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAEnO,GAAI,MACjC,IAAK,IACJA,EAAIO,EAAG,MAAM+N,EAAI5R,SAAStc,KAAOmgB,EAAGP,GAAGO,EACvCopB,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAErnB,EAAG4N,EAAEnO,GAAIsvB,EAAM/uB,EAAG,MACxC,IAAK,MAAOngB,EAAuB,KAAjBkuB,EAAI5R,OAAOtc,IAA8B,KAAjBkuB,EAAI5R,OAAOtc,MAAaA,EAAG,MACrE,IAAK,IAAK,IAAK,IAAKupC,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAU,IAAPwH,EAAS,IAAI7uB,EAAI4N,EAAE5N,KAAMngB,EAAG,MACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACpF4f,EAAIO,EAAG,MAAMngB,EAAIkuB,EAAI/sB,QAAU,aAAaqB,QAAQ0rB,EAAI5R,SAAStc,KAAO,EAAG4f,GAAGsO,EAAI5R,OAAOtc,GACzFupC,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAEnO,GAAI,MACjC,IAAK,IAAK2pB,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAErnB,EAAG4N,EAAE5N,KAAMngB,EAAG,MAC7C,IAAK,IAAKupC,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAE,OAAQ/tB,EAAG,MACjD,QACC,IAA2D,IAAxD,wCAAwCwC,QAAQ2d,GAAW,MAAM,IAAIvE,MAAM,0BAA4BuE,EAAI,OAAS+N,GACvHqb,EAAIA,EAAIpoC,QAAU,CAACqmC,EAAE,IAAKzZ,EAAE5N,KAAMngB,EAAG,MAKxC,IAAqBovC,EAAjBC,EAAK,EAAGjE,EAAM,EAClB,IAAIprC,EAAEupC,EAAIpoC,OAAO,EAAG+tC,EAAI,IAAKlvC,GAAK,IAAKA,EACtC,OAAOupC,EAAIvpC,GAAGwnC,GACb,IAAK,IAAK,IAAK,IAAK+B,EAAIvpC,GAAGwnC,EAAI2H,EAAID,EAAI,IAAQG,EAAK,IAAGA,EAAK,GAAG,MAC/D,IAAK,KACAD,EAAI7F,EAAIvpC,GAAG+tB,EAAExW,MAAM,YAAW6zB,EAAIt4B,KAAKme,IAAIma,EAAIgE,EAAI,GAAGjuC,OAAO,IAC9DkuC,EAAK,IAAGA,EAAK,GAEjB,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAKH,EAAI3F,EAAIvpC,GAAGwnC,EAAG,MACtD,IAAK,IAAgB,MAAR0H,IAAe3F,EAAIvpC,GAAGwnC,EAAI,IAAQ6H,EAAK,IAAGA,EAAK,IAAK,MACjE,IAAK,IACJ,MACD,IAAK,IACDA,EAAK,GAAK9F,EAAIvpC,GAAG+tB,EAAExW,MAAM,UAAS83B,EAAK,GACvCA,EAAK,GAAK9F,EAAIvpC,GAAG+tB,EAAExW,MAAM,UAAS83B,EAAK,GACvCA,EAAK,GAAK9F,EAAIvpC,GAAG+tB,EAAExW,MAAM,UAAS83B,EAAK,GAI7C,OAAOA,GACN,KAAK,EAAG,MACR,KAAK,EAEDJ,EAAGxF,GAAK,KAAOwF,EAAGxF,EAAI,IAAKwF,EAAGh5B,GAC9Bg5B,EAAGh5B,GAAM,KAAMg5B,EAAGh5B,EAAI,IAAKg5B,EAAGl6B,GAC9Bk6B,EAAGl6B,GAAM,KAAMk6B,EAAGl6B,EAAI,IAAKk6B,EAAG15B,GACjC,MACD,KAAK,EAED05B,EAAGxF,GAAK,KAAOwF,EAAGxF,EAAI,IAAKwF,EAAGh5B,GAC9Bg5B,EAAGh5B,GAAM,KAAMg5B,EAAGh5B,EAAI,IAAKg5B,EAAGl6B,GACjC,MAIF,IAAeu6B,EAAXC,EAAO,GACX,IAAIvvC,EAAE,EAAGA,EAAIupC,EAAIpoC,SAAUnB,EAC1B,OAAOupC,EAAIvpC,GAAGwnC,GACb,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,MACxC,IAAK,IAAK+B,EAAIvpC,GAAG+tB,EAAI,GAAIwb,EAAIvpC,GAAGwnC,EAAI,IAAK,MACzC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAE9F+B,EAAIvpC,GAAG+tB,EAAIod,EAAW5B,EAAIvpC,GAAGwnC,EAAE3C,WAAW,GAAI0E,EAAIvpC,GAAG+tB,EAAGkhB,EAAI7D,GAC5D7B,EAAIvpC,GAAGwnC,EAAI,IAAK,MACjB,IAAK,IAAK,IAAK,IACd8H,EAAKtvC,EAAE,EACP,MAAiB,MAAXupC,EAAI+F,KACS,OAAjBnvB,EAAEopB,EAAI+F,GAAI9H,IAAoB,MAANrnB,IACjB,MAANA,GAAmB,MAANA,IAA2B,MAAbopB,EAAI+F,EAAG,KAA+B,MAAhB/F,EAAI+F,EAAG,GAAG9H,GAA6B,MAAhB+B,EAAI+F,EAAG,GAAG9H,GAA6B,MAAhB+B,EAAI+F,EAAG,GAAGvhB,IAC7F,MAAbwb,EAAIvpC,GAAGwnC,IAAoB,MAANrnB,GAAmB,MAANA,GAAmB,MAANA,IACzC,MAANA,IAA4B,MAAdopB,EAAI+F,GAAIvhB,GAA2B,MAAdwb,EAAI+F,GAAIvhB,GAA0B,MAAbwb,EAAI+F,EAAG,IAA6B,KAAf/F,EAAI+F,EAAG,GAAG9H,IAExF+B,EAAIvpC,GAAG+tB,GAAKwb,EAAI+F,GAAIvhB,EACpBwb,EAAI+F,GAAM,CAACvhB,EAAE,GAAIyZ,EAAE,OAAQ8H,EAE5BC,GAAQhG,EAAIvpC,GAAG+tB,EACf/tB,EAAIsvC,EAAG,EAAG,MACX,IAAK,IAAK/F,EAAIvpC,GAAGwnC,EAAI,IAAK+B,EAAIvpC,GAAG+tB,EAAImd,EAAYnd,EAAEob,GAAO,MAG5D,IAAaqG,EAAKC,EAAdC,EAAK,GACT,GAAGH,EAAKpuC,OAAS,EAAG,CACM,IAAtBouC,EAAK1K,WAAW,IAClB2K,EAAOzhB,EAAE,GAA0B,KAAvBwhB,EAAK1K,WAAW,IAAa9W,EAAIA,EAC7C0hB,EAAO9D,EAAU,IAAK4D,EAAMC,KAE5BA,EAAOzhB,EAAE,GAAKihB,EAAO,GAAKjhB,EAAIA,EAC9B0hB,EAAO9D,EAAU,IAAK4D,EAAMC,GACzBA,EAAM,GAAKjG,EAAI,IAAkB,KAAZA,EAAI,GAAG/B,IAC9BiI,EAAOA,EAAK56B,OAAO,GACnB00B,EAAI,GAAGxb,EAAI,IAAMwb,EAAI,GAAGxb,IAG1BuhB,EAAGG,EAAKtuC,OAAO,EACf,IAAIwuC,EAAQpG,EAAIpoC,OAChB,IAAInB,EAAE,EAAGA,EAAIupC,EAAIpoC,SAAUnB,EAAG,GAAa,MAAVupC,EAAIvpC,IAA0B,KAAZupC,EAAIvpC,GAAGwnC,GAAY+B,EAAIvpC,GAAG+tB,EAAEvrB,QAAQ,MAAQ,EAAG,CAAEmtC,EAAQ3vC,EAAG,MAC/G,IAAI4vC,EAAMrG,EAAIpoC,OACd,GAAGwuC,IAAUpG,EAAIpoC,SAAiC,IAAvBsuC,EAAKjtC,QAAQ,KAAa,CACpD,IAAIxC,EAAEupC,EAAIpoC,OAAO,EAAGnB,GAAI,IAAIA,EACd,MAAVupC,EAAIvpC,KAA0C,IAA5B,KAAKwC,QAAQ+mC,EAAIvpC,GAAGwnC,KACtC8H,GAAI/F,EAAIvpC,GAAG+tB,EAAE5sB,OAAO,GAAKmuC,GAAM/F,EAAIvpC,GAAG+tB,EAAE5sB,OAAQooC,EAAIvpC,GAAG+tB,EAAI0hB,EAAK56B,OAAOy6B,EAAG,EAAG/F,EAAIvpC,GAAG+tB,EAAE5sB,SACjFmuC,EAAK,EAAG/F,EAAIvpC,GAAG+tB,EAAI,IACpBwb,EAAIvpC,GAAG+tB,EAAI0hB,EAAK56B,OAAO,EAAGy6B,EAAG,GAAIA,GAAM,GAC9C/F,EAAIvpC,GAAGwnC,EAAI,IACXoI,EAAQ5vC,GAENsvC,GAAI,GAAKM,EAAMrG,EAAIpoC,SAAQooC,EAAIqG,GAAO7hB,EAAI0hB,EAAK56B,OAAO,EAAEy6B,EAAG,GAAK/F,EAAIqG,GAAO7hB,QAE1E,GAAG4hB,IAAUpG,EAAIpoC,SAAiC,IAAvBsuC,EAAKjtC,QAAQ,KAAa,CAEzD,IADA8sC,EAAKG,EAAKjtC,QAAQ,KAAK,EACnBxC,EAAE2vC,EAAO3vC,GAAI,IAAKA,EACrB,GAAa,MAAVupC,EAAIvpC,KAA0C,IAA5B,KAAKwC,QAAQ+mC,EAAIvpC,GAAGwnC,GAAzC,CAGA,IAFAjZ,EAAEgb,EAAIvpC,GAAG+tB,EAAEvrB,QAAQ,MAAM,GAAGxC,IAAI2vC,EAAMpG,EAAIvpC,GAAG+tB,EAAEvrB,QAAQ,KAAK,EAAE+mC,EAAIvpC,GAAG+tB,EAAE5sB,OAAO,EAC9EuuC,EAAKnG,EAAIvpC,GAAG+tB,EAAElZ,OAAO0Z,EAAE,GACjBA,GAAG,IAAKA,EACV+gB,GAAI,IAA6B,MAAvB/F,EAAIvpC,GAAG+tB,EAAEzR,OAAOiS,IAAqC,MAAvBgb,EAAIvpC,GAAG+tB,EAAEzR,OAAOiS,MAAamhB,EAAKD,EAAKnzB,OAAOgzB,KAAQI,GAElGnG,EAAIvpC,GAAG+tB,EAAI2hB,EACXnG,EAAIvpC,GAAGwnC,EAAI,IACXoI,EAAQ5vC,EAIT,IAFGsvC,GAAI,GAAKM,EAAMrG,EAAIpoC,SAAQooC,EAAIqG,GAAO7hB,EAAI0hB,EAAK56B,OAAO,EAAEy6B,EAAG,GAAK/F,EAAIqG,GAAO7hB,GAC9EuhB,EAAKG,EAAKjtC,QAAQ,KAAK,EACnBxC,EAAE2vC,EAAO3vC,EAAEupC,EAAIpoC,SAAUnB,EAC5B,GAAa,MAAVupC,EAAIvpC,MAA4C,IAA7B,MAAMwC,QAAQ+mC,EAAIvpC,GAAGwnC,IAAaxnC,IAAM2vC,GAA9D,CAGA,IAFAphB,EAAEgb,EAAIvpC,GAAG+tB,EAAEvrB,QAAQ,MAAM,GAAGxC,IAAI2vC,EAAMpG,EAAIvpC,GAAG+tB,EAAEvrB,QAAQ,KAAK,EAAE,EAC9DktC,EAAKnG,EAAIvpC,GAAG+tB,EAAElZ,OAAO,EAAE0Z,GACjBA,EAAEgb,EAAIvpC,GAAG+tB,EAAE5sB,SAAUotB,EACvB+gB,EAAGG,EAAKtuC,SAAQuuC,GAAMD,EAAKnzB,OAAOgzB,MAEtC/F,EAAIvpC,GAAG+tB,EAAI2hB,EACXnG,EAAIvpC,GAAGwnC,EAAI,IACXoI,EAAQ5vC,IAIX,IAAIA,EAAE,EAAGA,EAAEupC,EAAIpoC,SAAUnB,EAAgB,MAAVupC,EAAIvpC,IAAc,KAAKwC,QAAQ+mC,EAAIvpC,GAAGwnC,IAAI,IACxEgI,EAAOR,EAAM,GAAKjhB,EAAI,GAAK/tB,EAAE,GAAoB,MAAfupC,EAAIvpC,EAAE,GAAG+tB,GAAaA,EAAEA,EAC1Dwb,EAAIvpC,GAAG+tB,EAAI4d,EAAUpC,EAAIvpC,GAAGwnC,EAAG+B,EAAIvpC,GAAG+tB,EAAGyhB,GACzCjG,EAAIvpC,GAAGwnC,EAAI,KAEZ,IAAIqI,EAAS,GACb,IAAI7vC,EAAE,EAAGA,IAAMupC,EAAIpoC,SAAUnB,EAAgB,MAAVupC,EAAIvpC,KAAY6vC,GAAUtG,EAAIvpC,GAAG+tB,GACpE,OAAO8hB,EA9MR1I,EAAI2I,QAAUhB,EAgNd3H,EAAI4I,MAAQhB,EACZ,IAAIiB,EAAU,UACVC,EAAW,wCACf,SAASC,EAAQniB,EAAGgf,GACnB,GAAS,MAANA,EAAY,OAAO,EACtB,IAAIoD,EAAS9vB,WAAW0sB,EAAG,IAC3B,OAAOA,EAAG,IACT,IAAK,IAAM,GAAGhf,GAAKoiB,EAAQ,OAAO,EAAM,MACxC,IAAK,IAAM,GAAGpiB,EAAKoiB,EAAQ,OAAO,EAAM,MACxC,IAAK,IAAM,GAAGpiB,EAAKoiB,EAAQ,OAAO,EAAM,MACxC,IAAK,KAAM,GAAGpiB,GAAKoiB,EAAQ,OAAO,EAAM,MACxC,IAAK,KAAM,GAAGpiB,GAAKoiB,EAAQ,OAAO,EAAM,MACxC,IAAK,KAAM,GAAGpiB,GAAKoiB,EAAQ,OAAO,EAAM,MAEzC,OAAO,EAER,SAASC,EAAWzvB,EAAcoN,GACjC,IAAIG,EAAMwgB,EAAU/tB,GAChBsD,EAAIiK,EAAI/sB,OAAQkvC,EAAMniB,EAAIjK,EAAE,GAAGzhB,QAAQ,KAE3C,GADGyhB,EAAE,GAAKosB,GAAK,KAAKpsB,EACjBiK,EAAI/sB,OAAS,EAAG,MAAM,IAAIya,MAAM,iCAAmCsS,EAAInS,KAAK,KAAO,KACtF,GAAgB,kBAANgS,EAAgB,MAAO,CAAC,EAAkB,IAAfG,EAAI/sB,QAAgBkvC,GAAK,EAAEniB,EAAIA,EAAI/sB,OAAO,GAAG,KAClF,OAAO+sB,EAAI/sB,QACV,KAAK,EAAG+sB,EAAMmiB,GAAK,EAAI,CAAC,UAAW,UAAW,UAAWniB,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAAM,MAClG,KAAK,EAAGA,EAAMmiB,GAAK,EAAI,CAACniB,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAAM,MACzF,KAAK,EAAGA,EAAMmiB,GAAK,EAAI,CAACniB,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAIA,EAAI,IAAM,CAACA,EAAI,GAAIA,EAAI,GAAIA,EAAI,GAAI,KAAM,MACzF,KAAK,EAAG,MAET,IAAI+f,EAAKlgB,EAAI,EAAIG,EAAI,GAAKH,EAAI,EAAIG,EAAI,GAAKA,EAAI,GAC/C,IAA4B,IAAzBA,EAAI,GAAG1rB,QAAQ,OAAwC,IAAzB0rB,EAAI,GAAG1rB,QAAQ,KAAa,MAAO,CAACyhB,EAAGgqB,GACxE,GAA4B,MAAzB/f,EAAI,GAAG3W,MAAMy4B,IAA6C,MAAzB9hB,EAAI,GAAG3W,MAAMy4B,GAAkB,CAClE,IAAIM,EAAKpiB,EAAI,GAAG3W,MAAM04B,GAClBM,EAAKriB,EAAI,GAAG3W,MAAM04B,GACtB,OAAOC,EAAQniB,EAAGuiB,GAAM,CAACrsB,EAAGiK,EAAI,IAAMgiB,EAAQniB,EAAGwiB,GAAM,CAACtsB,EAAGiK,EAAI,IAAM,CAACjK,EAAGiK,EAAU,MAANoiB,GAAoB,MAANC,EAAa,EAAI,IAE7G,MAAO,CAACtsB,EAAGgqB,GAEZ,SAAS19B,EAAO2d,EAAsBH,EAAUnO,GACvC,MAALA,IAAWA,EAAI,IAClB,IAAIksB,EAAO,GACX,cAAc5d,GACb,IAAK,SAC4B4d,EAAtB,UAAP5d,GAAmBtO,EAAE4wB,OAAe5wB,EAAE4wB,OAC7BtiB,EACZ,MACD,IAAK,SACsB4d,EAAhB,IAAP5d,GAAatO,EAAE4wB,OAAe5wB,EAAE4wB,QACX,MAAX5wB,EAAEhgB,MAAiBggB,EAAe,MAAIuoB,GAAWja,GACnD,MAAR4d,IAAcA,EAAQlsB,EAAEhgB,OAASggB,EAAEhgB,MAAMwoC,EAAYla,KAAUia,EAAUC,EAAYla,KAC7E,MAAR4d,IAAcA,EAAOxD,EAAYpa,IAAQ,WAC5C,MAEF,GAAG+Z,EAAU6D,EAAK,GAAI,OAAOZ,EAAYnd,EAAGnO,GACzCmO,aAAand,OAAMmd,EAAIgc,EAAchc,EAAGnO,EAAE8pB,WAC7C,IAAI/oB,EAAIyvB,EAAWtE,EAAM/d,GACzB,GAAGka,EAAUtnB,EAAE,IAAK,OAAOuqB,EAAYnd,EAAGnO,GAC1C,IAAS,IAANmO,EAAYA,EAAI,YAAa,IAAS,IAANA,EAAaA,EAAI,aAC/C,GAAS,KAANA,GAAiB,MAALA,EAAW,MAAO,GACtC,OAAOghB,EAASpuB,EAAE,GAAIoN,EAAGnO,EAAGe,EAAE,IAE/B,SAAS8vB,EAAWviB,EAAgB+d,GACnC,GAAiB,iBAAPA,EAAiB,CAC1BA,GAAOA,IAAQ,EAEf,IAAI,IAAIjsC,EAAI,EAAGA,EAAI,MAAUA,EAE5B,QAAmBuR,GAAhB42B,EAAUnoC,IACb,GAAGmoC,EAAUnoC,IAAMkuB,EAAK,CAAE+d,EAAMjsC,EAAG,YADAisC,EAAM,IAAGA,EAAMjsC,GAIhDisC,EAAM,IAAGA,EAAM,KAInB,OADA9D,EAAU8D,GAAO/d,EACV+d,EAER9E,EAAIuJ,KAAOD,EACXtJ,EAAIwJ,OAASxI,EACbhB,EAAIyJ,UAAY,WAAoC,OAAOzI,GAC3DhB,EAAI0J,WAAa,SAAoBC,GACpC,IAAI,IAAI9wC,EAAE,EAAM,KAAHA,IAAaA,OACXuR,IAAXu/B,EAAI9wC,IAAkBywC,EAAWK,EAAI9wC,GAAIA,IAE9CmnC,EAAIe,WAAaA,EACjBf,EAAI52B,OAASA,GAEb62B,GAASD,IAIQA,GAAIwJ,OAAO,IAEZxJ,GAAIwJ,OAAO,IACZxJ,GAAIwJ,OAAO,IACZxJ,GAAIwJ,OAAO,IACTxJ,GAAIwJ,OAAO,IACZxJ,GAAIwJ,OAAO,IAEhBxJ,GAAIwJ,OAAO,GACRxJ,GAAIwJ,OAAO,GACZxJ,GAAIwJ,OAAO,IACRxJ,GAAIwJ,OAAO,IAb1B,IAmBII,GAAmC,CACtC,EAAK,4BACL,EAAK,iCACL,EAAK,kCACL,EAAK,uCACL,GAAM,UAAW,GAAM,UAAW,GAAM,UAAW,GAAM,UACzD,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtE,GAAM,UAAW,GAAM,UAAW,GAAM,UAAW,GAAM,UACzD,GAAM,SACN,GAAM,0CACN,GAAM,mDACN,GAAM,kDACN,GAAM,2DACN,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtE,GAAM,SAAU,GAAM,SAAU,GAAM,SAAU,GAAM,SACtD,GAAM,IACN,GAAM,OACN,GAAM,QACN,GAAM,WACN,GAAM,4BACN,GAAM,iCACN,GAAM,kCACN,GAAM,uCACN,GAAM,KACN,GAAM,QACN,GAAM,QACN,GAAM,UACN,GAAM,SACN,GAAM,SACN,GAAM,WACN,GAAM,QACN,GAAM,SACN,GAAM,OACN,GAAM,UACN,GAAM,cACN,GAAM,QACN,GAAM,YACN,GAAM,UAIHC,GAAc,mCAClB,SAASC,GAAaT,GACrB,IAAItiB,EAAuB,iBAAVsiB,EAAqBrJ,GAAIwJ,OAAOH,GAAUA,EAE3D,OADAtiB,EAAMA,EAAI5W,QAAQ05B,GAAa,UACxB,IAAIn1B,OAAO,IAAMqS,EAAM,KAE/B,SAASgjB,GAAW/5B,EAAgBq5B,EAAmBj5B,GACtD,IAAI7C,GAAK,EAAGiB,GAAK,EAAGU,GAAK,EAAGd,GAAK,EAAGR,GAAK,EAAGkB,GAAK,GAChDu6B,EAAOj5B,MAAMy5B,KAAc,IAAIj4B,SAAQ,SAASgH,EAAG/f,GACnD,IAAI+tB,EAAIxS,SAAShE,EAAMvX,EAAE,GAAI,IAC7B,OAAO+f,EAAE1D,cAAcC,OAAO,IAC7B,IAAK,IAAK5H,EAAIqZ,EAAG,MAAO,IAAK,IAAK1X,EAAI0X,EAAG,MACzC,IAAK,IAAKxY,EAAIwY,EAAG,MAAO,IAAK,IAAK9X,EAAI8X,EAAG,MACzC,IAAK,IAAQxY,GAAK,EAAGR,EAAIgZ,EAAQpY,EAAIoY,EAAG,UAGvC9X,GAAK,IAAW,GAANlB,GAAWY,GAAK,IAAKZ,EAAIY,EAAGA,GAAK,GAC9C,IAAIw7B,GAAY,IAAMz8B,GAAG,EAAEA,GAAG,IAAI9D,MAAO0B,gBAAgBtE,OAAO,GAAK,KAAO,MAAQ2H,GAAG,EAAEA,EAAE,IAAI3H,OAAO,GAAK,KAAO,MAAQqI,GAAG,EAAEA,EAAE,IAAIrI,OAAO,GACvH,GAAlBmjC,EAAQhwC,SAAagwC,EAAU,IAAMA,GACnB,GAAlBA,EAAQhwC,SAAagwC,EAAU,KAAOA,GACzC,IAAIC,GAAY,MAAQ77B,GAAG,EAAEA,EAAE,IAAIvH,OAAO,GAAK,KAAO,MAAQ+G,GAAG,EAAEA,EAAE,IAAI/G,OAAO,GAAK,KAAO,MAAQiI,GAAG,EAAEA,EAAE,IAAIjI,OAAO,GACtH,OAAS,GAANuH,IAAiB,GAANR,IAAiB,GAANkB,EAAgBk7B,GAChC,GAANz8B,IAAiB,GAANiB,IAAiB,GAANU,EAAgB+6B,EAClCD,EAAU,IAAMC,EAGxB,IA2CIC,GA3CAC,IAAoB,GA4CvB,SAAUC,GAGVA,EAAQF,GAAQ,KAHjB,EAME,SAASA,GAIX,SAASG,IAGR,IAFA,IAAIrxB,EAAI,EAAGvgB,EAA0B,IAAIoL,MAAM,KAEvC+U,EAAG,EAAQ,KAALA,IAAYA,EACzBI,EAAIJ,EACJI,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CA,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CA,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CA,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CA,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CA,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CA,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CA,EAAQ,EAAFA,GAAS,UAAaA,IAAM,EAAOA,IAAM,EAC/CvgB,EAAMmgB,GAAKI,EAGZ,MAA6B,qBAAfsxB,WAA6B,IAAIA,WAAW7xC,GAASA,EAnBpEyxC,EAAMxJ,QAAU,QAsBhB,IAAI2B,EAAIgI,IACR,SAASE,EAAWC,EAAiBC,GAEpC,IADA,IAAIC,GAAY,EAARD,EAAWE,EAAIH,EAAKxwC,OAAS,EAC7BnB,EAAI,EAAGA,EAAI8xC,GAClBD,EAAKA,IAAI,EAAKrI,EAA2B,KAAxBqI,EAAEF,EAAK9M,WAAW7kC,OACnC6xC,EAAKA,IAAI,EAAKrI,EAA2B,KAAxBqI,EAAEF,EAAK9M,WAAW7kC,OAGpC,OADGA,IAAM8xC,IAAGD,EAAKA,IAAI,EAAKrI,EAA2B,KAAxBqI,EAAIF,EAAK9M,WAAW7kC,OACrC,EAAL6xC,EAGR,SAASE,EAAU3L,EAAkCwL,GACpD,GAAGxL,EAAIjlC,OAAS,IAAO,OAAO6wC,EAAY5L,EAAKwL,GAE/C,IADA,IAAIC,GAAY,EAARD,EAAWE,EAAI1L,EAAIjlC,OAAS,EAC5BnB,EAAI,EAAGA,EAAI8xC,GAClBD,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OAExB,MAAMA,EAAI8xC,EAAE,EAAGD,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACtC,OAAY,EAAL6xC,EAGR,SAASG,EAAY5L,EAAkCwL,GAEtD,IADA,IAAIC,GAAY,EAARD,EAAWE,EAAI1L,EAAIjlC,OAAS,EAC5BnB,EAAI,EAAGA,EAAI8xC,GAClBD,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACvB6xC,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OAExB,MAAMA,EAAI8xC,EAAE,EAAGD,EAAKA,IAAI,EAAKrI,EAAe,KAAZqI,EAAEzL,EAAIpmC,OACtC,OAAY,EAAL6xC,EAGR,SAASI,EAAU96B,EAAgBy6B,GAElC,IADA,IAC6BzxB,EAAG9J,EAD5Bw7B,GAAY,EAARD,EACA5xC,EAAI,EAAG8xC,EAAE36B,EAAIhW,OAAcnB,EAAI8xC,GACtC3xB,EAAIhJ,EAAI0tB,WAAW7kC,KAChBmgB,EAAI,IACN0xB,EAAKA,IAAI,EAAKrI,EAAU,KAAPqI,EAAI1xB,IACZA,EAAI,MACb0xB,EAAKA,IAAI,EAAKrI,EAA0B,KAAvBqI,GAAK,IAAM1xB,GAAG,EAAG,MAClC0xB,EAAKA,IAAI,EAAKrI,EAAqB,KAAlBqI,GAAK,IAAO,GAAF1xB,MAClBA,GAAK,OAAUA,EAAI,OAC5BA,EAAa,IAAN,KAAFA,GAAY9J,EAAwB,KAApBc,EAAI0tB,WAAW7kC,KACpC6xC,EAAKA,IAAI,EAAKrI,EAAyB,KAAtBqI,GAAK,IAAM1xB,GAAG,EAAG,KAClC0xB,EAAKA,IAAI,EAAKrI,EAA0B,KAAvBqI,GAAK,IAAM1xB,GAAG,EAAG,MAClC0xB,EAAKA,IAAI,EAAKrI,EAAqC,KAAlCqI,GAAK,IAAMx7B,GAAG,EAAG,IAAQ,EAAF8J,IAAM,KAC9C0xB,EAAKA,IAAI,EAAKrI,EAAqB,KAAlBqI,GAAK,IAAO,GAAFx7B,OAE3Bw7B,EAAKA,IAAI,EAAKrI,EAA2B,KAAxBqI,GAAK,IAAM1xB,GAAG,GAAI,MACnC0xB,EAAKA,IAAI,EAAKrI,EAA0B,KAAvBqI,GAAK,IAAM1xB,GAAG,EAAG,MAClC0xB,EAAKA,IAAI,EAAKrI,EAAqB,KAAlBqI,GAAK,IAAO,GAAF1xB,MAG7B,OAAY,EAAL0xB,EAERR,EAAMzxC,MAAQ4pC,EACd6H,EAAMM,KAAOD,EACbL,EAAMjL,IAAM2L,EACZV,EAAMl6B,IAAM86B,KAGZ,IAAIC,GAAM,WACV,IAuFIC,EAvFA7uB,EAA+B,GAGnC,SAAS8uB,EAAQnuB,EAAc2oB,GAE9B,IADA,IAAIkF,EAAI7tB,EAAE6J,MAAM,KAAMukB,EAAIzF,EAAE9e,MAAM,KAC1B9tB,EAAI,EAAGmgB,EAAI,EAAGvJ,EAAI9D,KAAKyP,IAAIuvB,EAAE3wC,OAAQkxC,EAAElxC,QAASnB,EAAI4W,IAAK5W,EAAG,CACnE,GAAImgB,EAAI2xB,EAAE9xC,GAAGmB,OAASkxC,EAAEryC,GAAGmB,OAAS,OAAOgf,EAC3C,GAAG2xB,EAAE9xC,IAAMqyC,EAAEryC,GAAI,OAAO8xC,EAAE9xC,GAAKqyC,EAAEryC,IAAM,EAAI,EAE5C,OAAO8xC,EAAE3wC,OAASkxC,EAAElxC,OAErB,SAASmxC,EAAQxwC,GAChB,GAA6B,KAA1BA,EAAEwa,OAAOxa,EAAEX,OAAS,GAAW,OAAwC,IAAhCW,EAAEkM,MAAM,GAAG,GAAGxL,QAAQ,KAAeV,EAAIwwC,EAAQxwC,EAAEkM,MAAM,GAAI,IACvG,IAAImS,EAAIre,EAAE2sC,YAAY,KACtB,OAAe,IAAPtuB,EAAYre,EAAIA,EAAEkM,MAAM,EAAGmS,EAAE,GAGtC,SAASoyB,EAASzwC,GACjB,GAA6B,KAA1BA,EAAEwa,OAAOxa,EAAEX,OAAS,GAAW,OAAOoxC,EAASzwC,EAAEkM,MAAM,GAAI,IAC9D,IAAImS,EAAIre,EAAE2sC,YAAY,KACtB,OAAe,IAAPtuB,EAAYre,EAAIA,EAAEkM,MAAMmS,EAAE,GAUnC,SAASqyB,EAAepM,EAAgB30B,GACpB,kBAATA,IAAmBA,EAAO,IAAIb,KAAKa,IAC7C,IAAIghC,EAAiBhhC,EAAK+D,WAC1Bi9B,EAAMA,GAAO,EAAIhhC,EAAKmE,aACtB68B,EAAMA,GAAO,EAAKhhC,EAAKsE,eAAe,EACtCqwB,EAAIsM,YAAY,EAAGD,GACnB,IAAIE,EAAkBlhC,EAAKa,cAAgB,KAC3CqgC,EAAMA,GAAO,EAAKlhC,EAAKuD,WAAW,EAClC29B,EAAMA,GAAO,EAAIlhC,EAAKK,UACtBs0B,EAAIsM,YAAY,EAAGC,GAIpB,SAASC,EAAexM,GACvB,IAAIqM,EAA0B,MAApBrM,EAAIyM,WAAW,GACrBF,EAA0B,MAApBvM,EAAIyM,WAAW,GACrBt/B,EAAM,IAAI3C,KACVyF,EAAU,GAANs8B,EAAYA,KAAS,EAC7B,IAAIh9B,EAAU,GAANg9B,EAAYA,KAAS,EAC7Bp/B,EAAIu/B,gBAAgB,GACpBv/B,EAAIf,YAAYmgC,EAAM,MACtBp/B,EAAIiO,SAAS7L,EAAE,GACfpC,EAAI1B,QAAQwE,GACZ,IAAIJ,EAAU,GAANw8B,EAAYA,KAAS,EAC7B,IAAI19B,EAAU,GAAN09B,EAIR,OAJoBA,KAAS,EAC7Bl/B,EAAIxB,SAAS0gC,GACbl/B,EAAI2lB,WAAWnkB,GACfxB,EAAI6lB,WAAWnjB,GAAG,GACX1C,EAER,SAASw/B,EAAkBC,GAC1BC,GAAUD,EAAM,GAChB,IAAIpzB,EAAW,GACXszB,EAAQ,EACZ,MAAMF,EAAK/uB,GAAK+uB,EAAK7xC,OAAS,EAAG,CAChC,IAAIoB,EAAOywC,EAAKH,WAAW,GACvBM,EAAKH,EAAKH,WAAW,GAAIO,EAAMJ,EAAK/uB,EAAIkvB,EACxCrxC,EAAI,GACR,OAAOS,GAEN,KAAK,MACJ2wC,EAAQF,EAAKH,WAAW,GACb,EAARK,IAAWpxC,EAAEuxC,MAAQL,EAAKH,WAAW,IAErCM,EAAK,IACI,EAARD,IAAWpxC,EAAEwxC,MAAQN,EAAKH,WAAW,IAC7B,EAARK,IAAWpxC,EAAEyxC,MAAQP,EAAKH,WAAW,KAEtC/wC,EAAEuxC,QAAOvxC,EAAE0xC,GAAK,IAAI5iC,KAAa,IAAR9O,EAAEuxC,QAE/B,MAEDL,EAAK/uB,EAAImvB,EACTxzB,EAAErd,GAAQT,EAEX,OAAO8d,EAGR,SAAS6zB,IAAW,OAAOtB,IAAOA,EAAK,IACvC,SAASl0B,EAAMy1B,EAAmBvuC,GAClC,GAAc,IAAXuuC,EAAK,IAAyB,IAAXA,EAAK,GAAY,OAAOC,GAAUD,EAAMvuC,GAC9D,GAAGuuC,EAAKvyC,OAAS,IAAK,MAAM,IAAIya,MAAM,iBAAmB83B,EAAKvyC,OAAS,UACvE,IAAIyyC,EAAO,EACPC,EAAM,IACNC,EAAO,EACPC,EAAgB,EAChBC,EAAY,EACZC,EAAgB,EAChBC,EAAc,EAEdC,EAA8B,GAG9BnB,EAAyBU,EAAK1lC,MAAM,EAAE,KAC1CilC,GAAUD,EAAM,GAGhB,IAAIoB,EAAKC,EAAerB,GAExB,OADAY,EAAOQ,EAAG,GACHR,GACN,KAAK,EAAGC,EAAM,IAAK,MAAO,KAAK,EAAGA,EAAM,KAAM,MAC9C,KAAK,EAAG,GAAY,GAATO,EAAG,GAAS,OAAOT,GAAUD,EAAMvuC,GAE9C,QAAS,MAAM,IAAIyW,MAAM,sCAAwCg4B,GAIvD,MAARC,IAAeb,EAAcU,EAAK1lC,MAAM,EAAE6lC,GAAkBZ,GAAUD,EAAM,KAE/E,IAAIsB,EAAsBZ,EAAK1lC,MAAM,EAAE6lC,GAEvCU,EAAavB,EAAMY,GAGnB,IAAIY,EAAqBxB,EAAKH,WAAW,EAAG,KAC5C,GAAY,IAATe,GAA0B,IAAZY,EAAe,MAAM,IAAI54B,MAAM,uCAAyC44B,GAGzFxB,EAAK/uB,GAAK,EAGV+vB,EAAYhB,EAAKH,WAAW,EAAG,KAG/BG,EAAK/uB,GAAK,EAGV+uB,EAAKyB,IAAI,WAAY,6BAGrBR,EAAgBjB,EAAKH,WAAW,EAAG,KAGnCiB,EAAOd,EAAKH,WAAW,EAAG,KAG1BqB,EAAclB,EAAKH,WAAW,EAAG,KAGjCkB,EAAgBf,EAAKH,WAAW,EAAG,KAGnC,IAAI,IAAI5J,GAAK,EAAG1a,EAAI,EAAGA,EAAI,MAAOA,EAAG,CAEpC,GADA0a,EAAI+J,EAAKH,WAAW,EAAG,KACpB5J,EAAE,EAAG,MACRkL,EAAU5lB,GAAK0a,EAIhB,IAAIyL,EAA8BC,EAAUjB,EAAMG,GAElDe,EAAWV,EAAaH,EAAeW,EAASb,EAAKM,GAGrD,IAAIU,EAA6BC,EAAiBJ,EAASV,EAAWG,EAAWN,GAEjFgB,EAAYb,GAAWhyC,KAAO,aAC3B8xC,EAAO,GAAKG,IAAkBc,IAAYF,EAAYZ,GAAejyC,KAAO,YAC/E6yC,EAAYV,EAAU,IAAInyC,KAAO,OACjC6yC,EAAYV,UAAYA,EACxBU,EAAYhB,IAAMA,EAGlB,IAAImB,EAAqB,GAAIC,EAA0B,GAAIC,EAA6B,GAAIC,EAA8B,GAC1HC,EAAepB,EAAWa,EAAaH,EAASO,EAAOnB,EAAMkB,EAAOE,EAAWjB,GAE/EoB,EAAiBH,EAAWC,EAAWF,GACvCA,EAAMK,QAEN,IAAI11B,EAAI,CACPs1B,UAAWA,EACXC,UAAWA,GAKZ,OADGhwC,GAAWA,EAAQowC,MAAK31B,EAAE21B,IAAM,CAACjB,OAAQA,EAAQI,QAASA,IACtD90B,EAIP,SAASy0B,EAAerB,GACvB,GAAmB,IAAhBA,EAAKA,EAAK/uB,IAAkC,IAApB+uB,EAAKA,EAAK/uB,EAAI,GAAY,MAAO,CAAC,EAAG,GAEhE+uB,EAAKyB,IAAIe,EAAkB,sBAI3BxC,EAAK/uB,GAAK,GAGV,IAAI2vB,EAAkBZ,EAAKH,WAAW,EAAG,KAEzC,MAAO,CAACG,EAAKH,WAAW,EAAE,KAAMe,GAEjC,SAASW,EAAavB,EAAiBY,GACtC,IAAI0B,EAAQ,EAOZ,OAHAtC,EAAK/uB,GAAK,EAGFqxB,EAAQtC,EAAKH,WAAW,IAC/B,KAAK,EAAM,GAAW,GAARe,EAAW,MAAM,IAAIh4B,MAAM,gCAAkC05B,GAAQ,MACnF,KAAK,GAAM,GAAW,GAAR1B,EAAW,MAAM,IAAIh4B,MAAM,iCAAmC05B,GAAQ,MACpF,QAAS,MAAM,IAAI15B,MAAM,sCAAwC05B,GAIlEtC,EAAKyB,IAAI,OAAQ,uBAGjBzB,EAAKyB,IAAI,eAAgB,cAI1B,SAASE,EAAUjB,EAAmBG,GAGrC,IAFA,IAAI4B,EAAW3iC,KAAK4iC,KAAKhC,EAAKvyC,OAAO0yC,GAAK,EACtCa,EAA8B,GAC1B10C,EAAE,EAAGA,EAAIy1C,IAAYz1C,EAAG00C,EAAQ10C,EAAE,GAAK0zC,EAAK1lC,MAAMhO,EAAE6zC,GAAK7zC,EAAE,GAAG6zC,GAEtE,OADAa,EAAQe,EAAS,GAAK/B,EAAK1lC,MAAMynC,EAAS5B,GACnCa,EAIR,SAASW,EAAiBM,EAAqBC,EAAsBX,GAIpE,IAHA,IAAIj1C,EAAI,EAAG8xC,EAAI,EAAGO,EAAI,EAAGR,EAAI,EAAGtjB,EAAI,EAAGsnB,EAAKZ,EAAM9zC,OAC9C20C,EAAwB,GAAI7M,EAAsB,GAEhDjpC,EAAI61C,IAAM71C,EAAK81C,EAAI91C,GAAGipC,EAAEjpC,GAAGA,EAAG41C,EAAG51C,GAAGi1C,EAAMj1C,GAEhD,KAAMuuB,EAAI0a,EAAE9nC,SAAUotB,EACrBvuB,EAAIipC,EAAE1a,GACNujB,EAAI6D,EAAG31C,GAAG8xC,EAAGO,EAAIsD,EAAG31C,GAAGqyC,EAAGR,EAAI8D,EAAG31C,GAAG6xC,EACjCiE,EAAI91C,KAAOA,KACH,IAAP8xC,GAAyBgE,EAAIhE,KAAOA,IAAGgE,EAAI91C,GAAK81C,EAAIhE,KAC7C,IAAPO,GAAYyD,EAAIzD,KAAOA,IAAGyD,EAAI91C,GAAK81C,EAAIzD,MAEjC,IAAPR,IAAuBiE,EAAIjE,GAAK7xC,IACzB,IAAP8xC,GAAY9xC,GAAK81C,EAAI91C,KAAM81C,EAAIhE,GAAKgE,EAAI91C,GAAOipC,EAAEwF,YAAYqD,GAAKvjB,GAAG0a,EAAErwB,KAAKk5B,KACrE,IAAPO,GAAYryC,GAAK81C,EAAI91C,KAAM81C,EAAIzD,GAAKyD,EAAI91C,GAAOipC,EAAEwF,YAAY4D,GAAK9jB,GAAG0a,EAAErwB,KAAKy5B,IAEhF,IAAIryC,EAAE,EAAGA,EAAI61C,IAAM71C,EAAM81C,EAAI91C,KAAOA,KACzB,IAAPqyC,GAAyByD,EAAIzD,KAAOA,EAAGyD,EAAI91C,GAAK81C,EAAIzD,IACxC,IAAPP,GAAYgE,EAAIhE,KAAOA,IAAGgE,EAAI91C,GAAK81C,EAAIhE,KAGhD,IAAI9xC,EAAE,EAAGA,EAAI61C,IAAM71C,EAClB,GAAkB,IAAf21C,EAAG31C,GAAGuC,KAAT,CAEA,GADAgsB,EAAIvuB,EACDuuB,GAAKunB,EAAIvnB,GAAI,GACfA,EAAIunB,EAAIvnB,GACRqnB,EAAG51C,GAAK41C,EAAGrnB,GAAK,IAAMqnB,EAAG51C,SACX,IAANuuB,IAAY,IAAMunB,EAAIvnB,IAAMA,GAAKunB,EAAIvnB,IAC9CunB,EAAI91C,IAAM,EAIX,IADA41C,EAAG,IAAM,IACL51C,EAAE,EAAGA,EAAI61C,IAAM71C,EACA,IAAf21C,EAAG31C,GAAGuC,OAAyBqzC,EAAG51C,IAAM,KAI7C,SAAS+1C,EAAeC,EAAoBC,EAAsBC,GACjE,IAAI9kB,EAAQ4kB,EAAM5kB,MAAOzO,EAAOqzB,EAAMrzB,KAElC/C,EAAI,GACJqsB,EAAM7a,EACV,MAAM8kB,GAAQvzB,EAAO,GAAKspB,GAAO,EAChCrsB,EAAEhH,KAAKq9B,EAAQjoC,MAAMi+B,EAAMkK,EAAMlK,EAAMkK,EAAOA,IAC9CxzB,GAAQwzB,EACRlK,EAAMmK,GAAcF,EAAY,EAANjK,GAE3B,OAAgB,IAAbrsB,EAAEze,OAAsBk1C,GAAQ,GAC3BtP,GAAQnnB,GAAG5R,MAAM,EAAGgoC,EAAMrzB,MAKnC,SAASiyB,EAAW3I,EAAgBqK,EAAgB5B,EAA6Bb,EAAgBM,GAChG,IAAIlL,EAAe8L,EACnB,GAAG9I,IAAQ8I,GACV,GAAW,IAARuB,EAAW,MAAM,IAAI16B,MAAM,0CACxB,IAAY,IAATqwB,EAAyB,CAClC,IAAIsK,EAAS7B,EAAQzI,GAAMt2B,GAAKk+B,IAAM,GAAG,EACzC,IAAI0C,EAAQ,OACZ,IAAI,IAAIv2C,EAAI,EAAGA,EAAI2V,IAAK3V,EAAG,CAC1B,IAAIipC,EAAImN,GAAcG,EAAS,EAAFv2C,MAAU+0C,EAAY,MACnDZ,EAAUv7B,KAAKqwB,GAEhB2L,EAAWwB,GAAcG,EAAO1C,EAAI,GAAGyC,EAAM,EAAG5B,EAASb,EAAKM,IAKhE,SAASqC,EAAgB9B,EAA6BtjB,EAAkB+iB,EAA6BN,EAAgB4C,GACpH,IAAIrQ,EAAwB,GAAIsQ,EAA2B,GACvDD,IAAMA,EAAO,IACjB,IAAIE,EAAU9C,EAAM,EAAGtlB,EAAI,EAAG+gB,EAAK,EACnC,IAAI/gB,EAAE6C,EAAO7C,GAAG,GAAI,CACnBkoB,EAAKloB,IAAK,EACV6X,EAAIA,EAAIjlC,QAAUotB,EAClBmoB,EAAU99B,KAAK87B,EAAQnmB,IACvB,IAAIqoB,EAAOzC,EAAUrhC,KAAKoB,MAAQ,EAAFqa,EAAIslB,IAEpC,GADAvE,EAAS,EAAF/gB,EAAOooB,EACX9C,EAAM,EAAIvE,EAAI,MAAM,IAAI1zB,MAAM,yBAA2B2S,EAAI,MAAMslB,GACtE,IAAIa,EAAQkC,GAAO,MACnBroB,EAAI6nB,GAAc1B,EAAQkC,GAAOtH,GAElC,MAAO,CAACuH,MAAOzQ,EAAKr8B,KAAK+sC,GAAW,CAACJ,KAItC,SAAS5B,EAAiBJ,EAA6BV,EAAsBG,EAA6BN,GACzG,IAAIkD,EAAKrC,EAAQvzC,OAAQ0zC,EAA6B,GAClD4B,EAA0B,GAAIrQ,EAAwB,GAAIsQ,EAAgC,GAC1FC,EAAU9C,EAAM,EAAG7zC,EAAE,EAAGuuB,EAAE,EAAGtgB,EAAE,EAAGqhC,EAAG,EACzC,IAAItvC,EAAE,EAAGA,EAAI+2C,IAAM/2C,EAGlB,GAFAomC,EAAM,GACNn4B,EAAKjO,EAAIg0C,EAAe/lC,GAAK8oC,IAAI9oC,GAAG8oC,IACjCN,EAAKxoC,GAAR,CACAyoC,EAAY,GACZ,IAAIM,EAAO,GACX,IAAIzoB,EAAEtgB,EAAGsgB,GAAG,GAAI,CACfyoB,EAAKzoB,IAAK,EACVkoB,EAAKloB,IAAK,EACV6X,EAAIA,EAAIjlC,QAAUotB,EAClBmoB,EAAU99B,KAAK87B,EAAQnmB,IACvB,IAAIqoB,EAAkBzC,EAAUrhC,KAAKoB,MAAQ,EAAFqa,EAAIslB,IAE/C,GADAvE,EAAS,EAAF/gB,EAAOooB,EACX9C,EAAM,EAAIvE,EAAI,MAAM,IAAI1zB,MAAM,yBAA2B2S,EAAI,MAAMslB,GACtE,IAAIa,EAAQkC,GAAO,MAEnB,GADAroB,EAAI6nB,GAAc1B,EAAQkC,GAAOtH,GAC9B0H,EAAKzoB,GAAI,MAEbsmB,EAAY5mC,GAAK,CAAE4oC,MAAOzQ,EAAKr8B,KAAK+sC,GAAW,CAACJ,KAEjD,OAAO7B,EAIR,SAASO,EAAepB,EAAsBa,EAA4BH,EAA6BO,EAAyBnB,EAAMkB,EAAOE,EAAWgB,GAIvJ,IAHA,IAEwBl0C,EAFpBi1C,EAAgB,EAAGpB,EAAMZ,EAAM9zC,OAAO,EAAE,EACxCo1C,EAAS1B,EAAYb,GAAWjqC,KAChC/J,EAAI,EAAGk3C,EAAU,EACfl3C,EAAIu2C,EAAOp1C,OAAQnB,GAAI,IAAK,CACjC,IAAIgzC,EAAyBuD,EAAOvoC,MAAMhO,EAAGA,EAAE,KAC/CizC,GAAUD,EAAM,IAChBkE,EAAUlE,EAAKH,WAAW,GAC1B7wC,EAAOm1C,GAAUnE,EAAK,EAAEkE,EAAQrB,GAChCZ,EAAMr8B,KAAK5W,GACX,IAAI4d,EAAiB,CACpB5d,KAAOA,EACPO,KAAOywC,EAAKH,WAAW,GACvBvqC,MAAO0qC,EAAKH,WAAW,GACvBf,EAAOkB,EAAKH,WAAW,EAAG,KAC1BR,EAAOW,EAAKH,WAAW,EAAG,KAC1BhB,EAAOmB,EAAKH,WAAW,EAAG,KAC1BuE,MAAOpE,EAAKH,WAAW,IACvBpgB,MAAOugB,EAAKH,WAAW,EAAG,KAC1BzhB,MAAO,EACPzO,KAAM,GAEH4wB,EAAmBP,EAAKH,WAAW,GAAKG,EAAKH,WAAW,GAAKG,EAAKH,WAAW,GAAKG,EAAKH,WAAW,GACzF,IAAVU,IAAa3zB,EAAEy3B,GAAKC,EAAUtE,EAAMA,EAAK/uB,EAAE,IAC9C,IAAIovB,EAAmBL,EAAKH,WAAW,GAAKG,EAAKH,WAAW,GAAKG,EAAKH,WAAW,GAAKG,EAAKH,WAAW,GACzF,IAAVQ,IAAazzB,EAAE4zB,GAAK8D,EAAUtE,EAAMA,EAAK/uB,EAAE,IAC9CrE,EAAEwR,MAAQ4hB,EAAKH,WAAW,EAAG,KAC7BjzB,EAAE+C,KAAOqwB,EAAKH,WAAW,EAAG,KACzBjzB,EAAE+C,KAAO,GAAK/C,EAAEwR,MAAQ,IAAKxR,EAAE+C,KAAO/C,EAAErd,KAAO,EAAGqd,EAAEwR,MAAQ2jB,EAAYn1B,EAAE5d,KAAO,IACtE,IAAX4d,EAAErd,MACJ00C,EAAgBr3B,EAAEwR,MACf0iB,EAAO,GAAKmD,IAAkBlC,IAAYF,EAAYoC,GAAej1C,KAAO,gBAEtE4d,EAAE+C,MAAQ,MACnB/C,EAAE23B,QAAU,WACgBhmC,IAAzBsjC,EAAYj1B,EAAEwR,SAAsByjB,EAAYj1B,EAAEwR,OAASolB,EAAgB9B,EAAS90B,EAAEwR,MAAOyjB,EAAYV,UAAWU,EAAYhB,MACnIgB,EAAYj1B,EAAEwR,OAAOpvB,KAAO4d,EAAE5d,KAC9B4d,EAAEtU,QAAWupC,EAAYj1B,EAAEwR,OAAOrnB,KAAKiE,MAAM,EAAE4R,EAAE+C,QAEjD/C,EAAE23B,QAAU,UACT33B,EAAE+C,KAAO,EAAG/C,EAAE+C,KAAO,EAChBs0B,IAAkBlC,GAAcn1B,EAAEwR,QAAU2jB,GAAcF,EAAYoC,KAC7Er3B,EAAEtU,QAAUyqC,EAAen2B,EAAGi1B,EAAYoC,GAAeltC,MAAO8qC,EAAYqB,IAAO,IAAInsC,QAGtF6V,EAAEtU,SAAS2nC,GAAUrzB,EAAEtU,QAAS,GACnC0pC,EAAMhzC,GAAQ4d,EACds1B,EAAUt8B,KAAKgH,IAIjB,SAAS03B,EAAUtE,EAA0Bl/B,GAC5C,OAAO,IAAIlD,KAA6G,KAAnG4mC,GAAexE,EAAKl/B,EAAO,GAAG,IAAKhB,KAAKi1B,IAAI,EAAE,IAAIyP,GAAexE,EAAKl/B,GAAQ,IAAQ,cAG5G,SAAS2jC,EAAUlF,EAAqBptC,GAEvC,OADAsuC,IACOx1B,EAAMk0B,EAAGuF,aAAanF,GAAWptC,GAGzC,SAASwyC,EAAK3E,EAA0B7tC,GACvC,OAAOA,GAAWA,EAAQ5C,MAAQ,UACjC,IAAK,OAA2F,OAAOk1C,EAAUzE,EAAM7tC,GACvH,IAAK,SAAiH,OAAO8Y,EAAMyoB,GAAIpB,GAAOO,OAAOmN,IAAQ7tC,GAC7J,IAAK,SAAkG,OAAO8Y,EAAMyoB,GAAIsM,GAAO7tC,GAEhI,OAAO8Y,EAAkE+0B,EAAM7tC,GAGhF,SAASyyC,EAASC,EAAsB1O,GACvC,IAAIvpB,EAAIupB,GAAQ,GAAI2O,EAAOl4B,EAAEk4B,MAAQ,aAGrC,GAFID,EAAI1C,YAAW0C,EAAI1C,UAAY,IAC/B0C,EAAI3C,YAAW2C,EAAI3C,UAAY,IAChC2C,EAAI1C,UAAUh0C,SAAW02C,EAAI3C,UAAU/zC,OAAQ,MAAM,IAAIya,MAAM,8BACtC,IAAzBi8B,EAAI1C,UAAUh0C,SAChB02C,EAAI1C,UAAU,GAAK2C,EAAO,IAC1BD,EAAI3C,UAAU,GAAK,CAAGlzC,KAAM81C,EAAMv1C,KAAM,IAEtCqd,EAAEm4B,QAAOF,EAAI3C,UAAU,GAAGkC,MAAQx3B,EAAEm4B,OACvCC,EAASH,GAEV,SAASG,EAASH,GACjB,IAAII,EAAK,WACT,IAAG/F,GAAIgG,KAAKL,EAAK,IAAMI,GAAvB,CACA,IAAIn2C,EAAIu0C,GAAQ,GAAIv0C,EAAE,GAAK,GAAIA,EAAE,GAAKA,EAAE,GAAK,GAAIA,EAAE,GAAK,GACxD+1C,EAAI3C,UAAUt8B,KAAK,CAAG5W,KAAMi2C,EAAI11C,KAAM,EAAG+I,QAAQxJ,EAAG6gB,KAAK,EAAGmvB,EAAE,GAAIO,EAAE,GAAIR,EAAE,KAC1EgG,EAAI1C,UAAUv8B,KAAKi/B,EAAI1C,UAAU,GAAK8C,GACtCE,EAAYN,IAEb,SAASM,EAAYN,EAAsBl3B,GAC1Ci3B,EAASC,GAET,IADA,IAAIO,GAAK,EAAOtiC,GAAI,EACZ9V,EAAI63C,EAAI1C,UAAUh0C,OAAS,EAAGnB,GAAK,IAAKA,EAAG,CAClD,IAAIq4C,EAAQR,EAAI3C,UAAUl1C,GAC1B,OAAOq4C,EAAM91C,MACZ,KAAK,EACDuT,EAAGsiC,GAAK,GACJP,EAAI3C,UAAUoD,MAAOT,EAAI1C,UAAUmD,OAC1C,MACD,KAAK,EAAG,KAAK,EAAG,KAAK,EACpBxiC,GAAI,EACD3E,MAAMknC,EAAMhG,EAAIgG,EAAMvG,EAAIuG,EAAMxG,KAAIuG,GAAK,GACzCC,EAAMhG,GAAK,GAAKgG,EAAMvG,GAAK,GAAKuG,EAAMhG,GAAKgG,EAAMvG,IAAGsG,GAAK,GAC5D,MACD,QAASA,GAAK,EAAM,OAGtB,GAAIA,GAAOz3B,EAAX,CAEA,IAAI43B,EAAM,IAAI3nC,KAAK,KAAM,EAAG,IAAK2d,EAAI,EACjCxkB,EAAqC,GACzC,IAAI/J,EAAI,EAAGA,EAAI63C,EAAI1C,UAAUh0C,SAAUnB,EACT,IAA1B63C,EAAI3C,UAAUl1C,GAAGuC,MACpBwH,EAAK6O,KAAK,CAACi/B,EAAI1C,UAAUn1C,GAAI63C,EAAI3C,UAAUl1C,KAE5C,IAAIA,EAAI,EAAGA,EAAI+J,EAAK5I,SAAUnB,EAAG,CAChC,IAAI81C,EAAMxD,EAAQvoC,EAAK/J,GAAG,IAE1B,IADA8V,GAAI,EACAyY,EAAI,EAAGA,EAAIxkB,EAAK5I,SAAUotB,EAAMxkB,EAAKwkB,GAAG,KAAOunB,IAAKhgC,GAAI,GACxDA,GAAG/L,EAAK6O,KAAK,CAACk9B,EAAK,CACtB9zC,KAAMuwC,EAASuD,GAAKx+B,QAAQ,IAAI,IAChC/U,KAAM,EACN60C,MAAOoB,EACPnB,GAAIkB,EAAK/E,GAAI+E,EACbjtC,QAAS,QAMX,IAFAvB,EAAK8C,MAAK,SAASmK,EAAErC,GAAK,OAAOy9B,EAAQp7B,EAAE,GAAIrC,EAAE,OACjDkjC,EAAI1C,UAAY,GAAI0C,EAAI3C,UAAY,GAChCl1C,EAAI,EAAGA,EAAI+J,EAAK5I,SAAUnB,EAAK63C,EAAI1C,UAAUn1C,GAAK+J,EAAK/J,GAAG,GAAI63C,EAAI3C,UAAUl1C,GAAK+J,EAAK/J,GAAG,GAC7F,IAAIA,EAAI,EAAGA,EAAI+J,EAAK5I,SAAUnB,EAAG,CAChC,IAAIy4C,EAAMZ,EAAI3C,UAAUl1C,GACpBi4C,EAAKJ,EAAI1C,UAAUn1C,GAOvB,GALAy4C,EAAIz2C,KAAQuwC,EAAS0F,GAAI3gC,QAAQ,IAAI,IACrCmhC,EAAI3G,EAAI2G,EAAIpG,EAAIoG,EAAI5G,IAAM4G,EAAInwC,MAAQ,GACtCmwC,EAAI91B,KAAO81B,EAAIntC,QAAUmtC,EAAIntC,QAAQnK,OAAS,EAC9Cs3C,EAAIrnB,MAAQ,EACZqnB,EAAIrB,MAASqB,EAAIrB,OAASoB,EACjB,IAANx4C,EACFy4C,EAAI5G,EAAI9nC,EAAK5I,OAAS,EAAI,GAAK,EAC/Bs3C,EAAI91B,KAAO,EACX81B,EAAIl2C,KAAO,OACL,GAAmB,KAAhB01C,EAAGjqC,OAAO,GAAW,CAC9B,IAAIugB,EAAEvuB,EAAE,EAAEuuB,EAAIxkB,EAAK5I,SAAUotB,EAAG,GAAG+jB,EAAQuF,EAAI1C,UAAU5mB,KAAK0pB,EAAI,MAElE,IADAQ,EAAI5G,EAAItjB,GAAKxkB,EAAK5I,QAAU,EAAIotB,EAC5BA,EAAEvuB,EAAE,EAAEuuB,EAAIxkB,EAAK5I,SAAUotB,EAAG,GAAG+jB,EAAQuF,EAAI1C,UAAU5mB,KAAK+jB,EAAQ2F,GAAK,MAC3EQ,EAAIpG,EAAI9jB,GAAKxkB,EAAK5I,QAAU,EAAIotB,EAChCkqB,EAAIl2C,KAAO,OAER+vC,EAAQuF,EAAI1C,UAAUn1C,EAAE,IAAI,KAAOsyC,EAAQ2F,KAAKQ,EAAIpG,EAAIryC,EAAI,GAC/Dy4C,EAAIl2C,KAAO,IAMd,SAASm2C,EAAOb,EAAsB1yC,GACrC,IAAIwzC,EAAQxzC,GAAW,GAEvB,GADAgzC,EAAYN,GACS,OAAlBc,EAAMC,SAAmB,OAAOC,GAAUhB,EAAKc,GAClD,IAAI7G,EAAI,SAAU+F,GAEjB,IADA,IAAIiB,EAAY,EAAGC,EAAW,EACtB/4C,EAAI,EAAGA,EAAI63C,EAAI3C,UAAU/zC,SAAUnB,EAAG,CAC7C,IAAI0zC,EAAOmE,EAAI3C,UAAUl1C,GACzB,GAAI0zC,EAAKpoC,QAAT,CAEA,IAAI0jC,EAAO0E,EAAKpoC,QAAQnK,OACrB6tC,EAAO,IACNA,EAAO,KAAQ8J,GAAc9J,EAAO,IAAS,EAC3C+J,GAAa/J,EAAO,KAAW,IAGtC,IAAIwF,EAAWqD,EAAI1C,UAAUh0C,OAAQ,GAAM,EACvC63C,EAAYF,EAAY,GAAM,EAC9BG,EAAYH,EAAY,KAAS,EACjCI,EAAWF,EAAWD,EAAWvE,EAAUyE,EAC3CE,EAAWD,EAAW,KAAS,EAC/BE,EAAYD,GAAW,IAAM,EAAIrmC,KAAK4iC,MAAMyD,EAAQ,KAAK,KAC7D,MAAQD,EAAWC,EAAUC,EAAY,KAAS,EAAKD,EAASC,IAAcD,GAAW,IAAM,EAAIrmC,KAAK4iC,MAAMyD,EAAQ,KAAK,KAC3H,IAAIrH,EAAK,CAAC,EAAGsH,EAAWD,EAASF,EAAUzE,EAASuE,EAAUD,EAAW,GAGzE,OAFAjB,EAAI3C,UAAU,GAAGvyB,KAAOm2B,GAAa,EACrChH,EAAE,IAAM+F,EAAI3C,UAAU,GAAG9jB,MAAM0gB,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,GAAGA,EAAE,KAAMA,EAAE,GAAG,GAAM,GACpEA,EAtBA,CAuBL+F,GACCj4B,EAAIy2B,GAAQvE,EAAE,IAAM,GACpB9xC,EAAI,EAAGwpC,EAAI,EAEd,IAAIxpC,EAAI,EAAGA,EAAI,IAAKA,EAAG4f,EAAE8yB,YAAY,EAAG2G,EAAWr5C,IACnD,IAAIA,EAAI,EAAGA,EAAI,IAAKA,EAAG4f,EAAE8yB,YAAY,EAAG,GAMxC,IALA9yB,EAAE8yB,YAAY,EAAG,IACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,OACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,GACb1yC,EAAI,EAAGA,EAAI,IAAKA,EAAG4f,EAAE8yB,YAAY,EAAG,GAUxC,IATA9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAGZ,EAAE,IACnBlyB,EAAE8yB,YAAY,EAAGZ,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAK,GAC7ClyB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,MACjB9yB,EAAE8yB,YAAY,EAAGZ,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAKA,EAAE,GAAK,EAAGiD,GAChDn1B,EAAE8yB,YAAY,EAAGZ,EAAE,IACnBlyB,EAAE8yB,aAAa,EAAGZ,EAAE,GAAKA,EAAE,GAAK,EAAGiD,GACnCn1B,EAAE8yB,YAAY,EAAGZ,EAAE,IACf9xC,EAAI,EAAGA,EAAI,MAAOA,EAAG4f,EAAE8yB,aAAa,EAAG1yC,EAAI8xC,EAAE,GAAKA,EAAE,GAAK9xC,GAAK,GAEnE,GAAG8xC,EAAE,GACJ,IAAItI,EAAI,EAAGA,EAAIsI,EAAE,KAAMtI,EAAG,CACzB,KAAMxpC,EAAI,IAAU,IAAJwpC,IAAWxpC,EAAG4f,EAAE8yB,aAAa,EAAG1yC,EAAI8xC,EAAE,GAAKA,EAAE,GAAK9xC,GAAK,GACvE4f,EAAE8yB,aAAa,EAAGlJ,IAAMsI,EAAE,GAAK,EAAIiD,EAAavL,EAAI,GAGtD,IAAI8P,EAAU,SAASriC,GACtB,IAAIuyB,GAAKvyB,EAAGjX,EAAEwpC,EAAE,IAAKxpC,EAAG4f,EAAE8yB,aAAa,EAAG1yC,EAAE,GACzCiX,MAAOjX,EAAG4f,EAAE8yB,aAAa,EAAGqC,KAGhC,IADAvL,EAAIxpC,EAAI,EACJwpC,GAAGsI,EAAE,GAAI9xC,EAAEwpC,IAAKxpC,EAAG4f,EAAE8yB,aAAa,EAAG6G,EAAOC,SAChD,IAAIhQ,GAAGsI,EAAE,GAAI9xC,EAAEwpC,IAAKxpC,EAAG4f,EAAE8yB,aAAa,EAAG6G,EAAOE,SAChDH,EAAQxH,EAAE,IACVwH,EAAQxH,EAAE,IAGV,IAFA,IAAIvjB,EAAe,EAAGygB,EAAkB,EACpC0E,EAAoBmE,EAAI3C,UAAU,GAChC3mB,EAAIspB,EAAI3C,UAAU/zC,SAAUotB,EACjCmlB,EAAOmE,EAAI3C,UAAU3mB,GACjBmlB,EAAKpoC,UAET0jC,EAAO0E,EAAKpoC,QAAQnK,OACjB6tC,EAAO,OACV0E,EAAKtiB,MAAQoY,EACb8P,EAAStK,EAAO,KAAW,KAE5BsK,EAASxH,EAAE,GAAK,GAAM,GACtB,MAAY,IAANlyB,EAAEqE,EAAWrE,EAAE8yB,aAAa,EAAG6G,EAAOxE,YAE5C,IADAvL,EAAIxpC,EAAI,EACJuuB,EAAI,EAAGA,EAAIspB,EAAI3C,UAAU/zC,SAAUotB,EACtCmlB,EAAOmE,EAAI3C,UAAU3mB,GACjBmlB,EAAKpoC,UAET0jC,EAAO0E,EAAKpoC,QAAQnK,QAChB6tC,GAAQA,GAAQ,OACpB0E,EAAKtiB,MAAQoY,EACb8P,EAAStK,EAAO,IAAS,KAE1B,MAAY,IAANpvB,EAAEqE,EAAWrE,EAAE8yB,aAAa,EAAG6G,EAAOxE,YAC5C,IAAI/0C,EAAI,EAAGA,EAAI8xC,EAAE,IAAI,IAAK9xC,EAAG,CAC5B,IAAIi4C,EAAKJ,EAAI1C,UAAUn1C,GACvB,GAAIi4C,GAAoB,IAAdA,EAAG92C,OAAb,CAMAuyC,EAAOmE,EAAI3C,UAAUl1C,GACZ,IAANA,IAAS0zC,EAAKtiB,MAAQsiB,EAAK/wB,KAAO+wB,EAAKtiB,MAAQ,EAAI2jB,GACtD,IAAI2E,EAAwB,IAAN15C,GAAW24C,EAAMb,MAASpE,EAAK1xC,KASrD,GARAgtC,EAAO,GAAG0K,EAAIv4C,OAAO,GACrBye,EAAE8yB,YAAY,GAAIgH,EAAK,WACvB95B,EAAE8yB,YAAY,EAAG1D,GACjBpvB,EAAE8yB,YAAY,EAAGgB,EAAKnxC,MACtBqd,EAAE8yB,YAAY,EAAGgB,EAAKprC,OACtBsX,EAAE8yB,aAAa,EAAGgB,EAAK5B,GACvBlyB,EAAE8yB,aAAa,EAAGgB,EAAKrB,GACvBzyB,EAAE8yB,aAAa,EAAGgB,EAAK7B,GACnB6B,EAAK0D,MACJx3B,EAAE8yB,YAAY,GAAIgB,EAAK0D,MAAO,YADnB,IAAI7oB,EAAI,EAAGA,EAAI,IAAKA,EAAG3O,EAAE8yB,YAAY,EAAG,GAExD9yB,EAAE8yB,YAAY,EAAGgB,EAAKjhB,OAAS,GAC/B7S,EAAE8yB,YAAY,EAAG,GAAI9yB,EAAE8yB,YAAY,EAAG,GACtC9yB,EAAE8yB,YAAY,EAAG,GAAI9yB,EAAE8yB,YAAY,EAAG,GACtC9yB,EAAE8yB,YAAY,EAAGgB,EAAKtiB,OACtBxR,EAAE8yB,YAAY,EAAGgB,EAAK/wB,MAAO/C,EAAE8yB,YAAY,EAAG,OAvB9C,CACC,IAAInkB,EAAI,EAAGA,EAAI,KAAMA,EAAG3O,EAAE8yB,YAAY,EAAG,GACzC,IAAInkB,EAAI,EAAGA,EAAI,IAAKA,EAAG3O,EAAE8yB,YAAY,GAAI,GACzC,IAAInkB,EAAI,EAAGA,EAAI,KAAMA,EAAG3O,EAAE8yB,YAAY,EAAG,IAsB3C,IAAI1yC,EAAI,EAAGA,EAAI63C,EAAI3C,UAAU/zC,SAAUnB,EAGtC,GAFA0zC,EAAOmE,EAAI3C,UAAUl1C,GAElB0zC,EAAK/wB,MAAQ,KAAQ,CAEvB,IADA/C,EAAEqE,EAAKyvB,EAAKtiB,MAAM,GAAM,EACpB7C,EAAI,EAAGA,EAAImlB,EAAK/wB,OAAQ4L,EAAG3O,EAAE8yB,YAAY,EAAGgB,EAAKpoC,QAAQijB,IAC7D,KAAU,IAAJA,IAAaA,EAAG3O,EAAE8yB,YAAY,EAAG,GAGzC,IAAI1yC,EAAI,EAAGA,EAAI63C,EAAI3C,UAAU/zC,SAAUnB,EAGtC,GAFA0zC,EAAOmE,EAAI3C,UAAUl1C,GAElB0zC,EAAK/wB,KAAO,GAAK+wB,EAAK/wB,KAAO,KAAQ,CACvC,IAAI4L,EAAI,EAAGA,EAAImlB,EAAK/wB,OAAQ4L,EAAG3O,EAAE8yB,YAAY,EAAGgB,EAAKpoC,QAAQijB,IAC7D,KAAU,GAAJA,IAAYA,EAAG3O,EAAE8yB,YAAY,EAAG,GAGxC,MAAM9yB,EAAEqE,EAAIrE,EAAEze,OAAQye,EAAE8yB,YAAY,EAAG,GACvC,OAAO9yB,EAGR,SAASs4B,EAAKL,EAAsB8B,GACnC,IAAIC,EAAgC/B,EAAI1C,UAAUr5B,KAAI,SAAS9E,GAAK,OAAOA,EAAE2W,iBACzEksB,EAA4BD,EAAY99B,KAAI,SAAS9E,GAAK,IAAIrC,EAAIqC,EAAE8W,MAAM,KAAM,OAAOnZ,EAAEA,EAAExT,QAAyB,KAAf6V,EAAEhJ,OAAO,GAAY,EAAI,OAC9HC,GAAgB,EACM,KAAvB0rC,EAAK9U,WAAW,IAAuB52B,GAAI,EAAM0rC,EAAOC,EAAY,GAAG5rC,MAAM,GAAI,GAAK2rC,GACpF1rC,GAA2B,IAAvB0rC,EAAKn3C,QAAQ,KACtB,IAAIs3C,EAAoBH,EAAKhsB,cACzB1W,GAAqB,IAANhJ,EAAa2rC,EAAYp3C,QAAQs3C,GAAUD,EAAQr3C,QAAQs3C,GAC9E,IAAU,IAAP7iC,EAAU,OAAO4gC,EAAI3C,UAAUj+B,GAElC,IAAItB,GAAKmkC,EAAOviC,MAAM2vB,IAGtB,IAFA4S,EAASA,EAAOxiC,QAAQ2vB,GAAK,IAC1BtxB,IAAGmkC,EAASA,EAAOxiC,QAAQ4vB,GAAK,MAC/BjwB,EAAI,EAAGA,EAAI2iC,EAAYz4C,SAAU8V,EAAG,CACvC,IAAItB,EAAIikC,EAAY3iC,GAAGK,QAAQ4vB,GAAK,KAAO0S,EAAY3iC,IAAIK,QAAQ2vB,GAAK,KAAO6S,EAAQ,OAAOjC,EAAI3C,UAAUj+B,GAC5G,IAAItB,EAAIkkC,EAAQ5iC,GAAGK,QAAQ4vB,GAAK,KAAO2S,EAAQ5iC,IAAIK,QAAQ2vB,GAAK,KAAO6S,EAAQ,OAAOjC,EAAI3C,UAAUj+B,GAErG,OAAO,KAtpBRqM,EAAQukB,QAAU,QAypBlB,IAgDIkS,EAhDA5D,EAAO,GAGPpB,GAAc,EAEdS,EAAmB,mBACnB6D,EAAa,CAAC,IAAM,IAAM,GAAM,IAAM,IAAM,IAAM,GAAM,KACxDb,EAAe,mCACfe,EAAS,CAEZS,YAAa,EACbR,SAAU,EACVC,SAAU,EACV1E,WAAYA,EACZkF,UAAW,EAEXzE,iBAAkBA,EAClB0E,qBAAsB,OACtBC,WAAY,EACZC,UAAW,EACX5B,aAAcA,EAEd6B,WAAY,CAAC,UAAU,UAAU,SAAS,YAAY,WAAW,SAGlE,SAASC,EAAWzC,EAAsBtF,EAAqBptC,GAC9DsuC,IACA,IAAI7zB,EAAI84B,EAAOb,EAAK1yC,GAEpBgtC,EAAGoI,cAAchI,EAAU3yB,GAG5B,SAAS+mB,EAAI/mB,GAEZ,IADA,IAAI2pB,EAAM,IAAIv+B,MAAM4U,EAAEze,QACdnB,EAAI,EAAGA,EAAI4f,EAAEze,SAAUnB,EAAGupC,EAAIvpC,GAAKqX,OAAOutB,aAAahlB,EAAE5f,IACjE,OAAOupC,EAAIxtB,KAAK,IAGjB,SAASy+B,EAAM3C,EAAsB1yC,GACpC,IAAIya,EAAI84B,EAAOb,EAAK1yC,GACpB,OAAOA,GAAWA,EAAQ5C,MACzB,IAAK,OAAmE,OAA3DkxC,IAAUtB,EAAGoI,cAAcp1C,EAAQotC,SAAU,GAAqB3yB,EAC/E,IAAK,SAAU,OAAO+mB,EAAI/mB,GAC1B,IAAK,SAAU,OAAO0lB,GAAOC,OAAOoB,EAAI/mB,IAEzC,OAAOA,EAIR,SAAS66B,EAASC,GAAQ,IACzB,IAAIC,EAAaD,EAAKC,WAClBC,EAAU,IAAID,EAElB,GADAC,EAAQC,cAAc,IAAI/T,WAAW,CAAC,EAAG,IAAK8T,EAAQE,mBACnDF,EAAQG,UACN,MAAM,IAAIn/B,MAAM,kCADCm+B,EAAQW,EAE7B,MAAM/uC,IAAIo0B,QAAQp7B,MAAM,4BAA8BgH,GAAEqvC,SAAWrvC,MAErE,SAASsvC,EAAgBhF,EAASiF,GACjC,IAAInB,EAAO,OAAOoB,GAASlF,EAASiF,GACpC,IAAIP,EAAaZ,EAAMY,WACnBC,EAAU,IAAID,EACdpR,EAAMqR,EAAQC,cAAc5E,EAAQjoC,MAAMioC,EAAQhyB,GAAI22B,EAAQE,kBAElE,OADA7E,EAAQhyB,GAAK22B,EAAQG,UACdxR,EAGR,SAAS6R,EAAgBnF,GACxB,OAAO8D,EAAQA,EAAMsB,eAAepF,GAAWqF,GAASrF,GAEzD,IAAIsF,EAAa,CAAE,GAAI,GAAI,GAAI,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,GAAI,EAAG,IAG7EC,EAAS,CAAI,EAAK,EAAK,EAAK,EAAK,EAAK,EAAK,EAAI,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAK,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,KAGvJC,EAAS,CAAG,EAAI,EAAI,EAAI,EAAI,EAAI,EAAI,EAAG,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,MAAO,MAAO,OAE7J,SAASC,EAAW37B,GAAK,IAAIynB,EAA0B,QAAjBznB,GAAG,EAAIA,GAAG,IAAsC,QAAjBA,GAAG,EAAIA,GAAG,IAAmB,OAA6B,KAApBynB,GAAG,GAAOA,GAAG,EAAIA,GAK5H,IAHA,IAAImU,EAAyC,qBAAf7U,WAE1B8U,EAAWD,EAAmB,IAAI7U,WAAW,KAAQ,GACjDmC,EAAI,EAAGA,EAAI,MAAUA,EAAG2S,EAAS3S,GAAKyS,EAAWzS,GAEzD,SAAS4S,EAAW97B,EAAGG,GACtB,IAAI47B,EAAMF,EAAa,IAAJ77B,GACnB,OAAGG,GAAK,EAAU47B,IAAS,EAAE57B,GAC7B47B,EAAOA,GAAO,EAAKF,EAAU77B,GAAG,EAAG,KAChCG,GAAK,GAAW47B,IAAS,GAAG57B,GAC/B47B,EAAOA,GAAO,EAAKF,EAAU77B,GAAG,GAAI,KAC7B+7B,IAAS,GAAG57B,IAIpB,SAAS67B,EAAY3V,EAAK4V,GAAM,IAAI/kC,EAAQ,EAAH+kC,EAAOj8C,EAAKi8C,IAAK,EAAI,OAAS5V,EAAIrmC,IAAIkX,GAAK,EAAI,EAAImvB,EAAIrmC,EAAE,IAAI,MAAMkX,EAAI,EAChH,SAASglC,EAAY7V,EAAK4V,GAAM,IAAI/kC,EAAQ,EAAH+kC,EAAOj8C,EAAKi8C,IAAK,EAAI,OAAS5V,EAAIrmC,IAAIkX,GAAK,EAAI,EAAImvB,EAAIrmC,EAAE,IAAI,MAAMkX,EAAI,EAChH,SAASilC,EAAY9V,EAAK4V,GAAM,IAAI/kC,EAAQ,EAAH+kC,EAAOj8C,EAAKi8C,IAAK,EAAI,OAAS5V,EAAIrmC,IAAIkX,GAAK,EAAI,EAAImvB,EAAIrmC,EAAE,IAAI,MAAMkX,EAAI,GAChH,SAASklC,EAAY/V,EAAK4V,GAAM,IAAI/kC,EAAQ,EAAH+kC,EAAOj8C,EAAKi8C,IAAK,EAAI,OAAS5V,EAAIrmC,IAAIkX,GAAK,EAAI,EAAImvB,EAAIrmC,EAAE,IAAI,MAAMkX,EAAI,GAChH,SAASmlC,EAAYhW,EAAK4V,GAAM,IAAI/kC,EAAQ,EAAH+kC,EAAOj8C,EAAKi8C,IAAK,EAAI,OAAS5V,EAAIrmC,IAAIkX,GAAK,EAAI,EAAImvB,EAAIrmC,EAAE,IAAI,MAAMkX,EAAI,IAGhH,SAASolC,EAAYjW,EAAK4V,EAAIj8B,GAC7B,IAAI9I,EAAQ,EAAH+kC,EAAOj8C,EAAKi8C,IAAK,EAAIr7B,GAAM,GAAGZ,GAAG,EACtCgO,EAAIqY,EAAIrmC,KAAOkX,EACnB,OAAG8I,EAAI,EAAI9I,EAAU8W,EAAIpN,GACzBoN,GAAKqY,EAAIrmC,EAAE,IAAK,EAAEkX,EACf8I,EAAI,GAAK9I,EAAU8W,EAAIpN,GAC1BoN,GAAKqY,EAAIrmC,EAAE,IAAK,GAAGkX,EAChB8I,EAAI,GAAK9I,IACZ8W,GAAKqY,EAAIrmC,EAAE,IAAK,GAAGkX,GADG8W,EAAIpN,IAM3B,SAAS27B,GAAQp8B,EAAGizB,GACnB,IAAIrB,EAAI5xB,EAAE/e,OAAQ4T,EAAI,EAAE+8B,EAAIqB,EAAK,EAAErB,EAAIqB,EAAK,EAAGnzC,EAAI,EACnD,GAAG8xC,GAAKqB,EAAI,OAAOjzB,EACnB,GAAG4lB,GAAS,CACX,IAAIlmB,EAAI6mB,GAAe1xB,GAEvB,GAAGmL,EAAEq8B,KAAMr8B,EAAEq8B,KAAK38B,QACb,KAAM5f,EAAIkgB,EAAE/e,SAAUnB,EAAG4f,EAAE5f,GAAKkgB,EAAElgB,GACvC,OAAO4f,EACD,GAAG+7B,EAAkB,CAC3B,IAAIhlC,EAAI,IAAImwB,WAAW/xB,GACvB,GAAG4B,EAAEvG,IAAKuG,EAAEvG,IAAI8P,QACX,KAAMlgB,EAAIkgB,EAAE/e,SAAUnB,EAAG2W,EAAE3W,GAAKkgB,EAAElgB,GACvC,OAAO2W,EAGR,OADAuJ,EAAE/e,OAAS4T,EACJmL,EAIR,SAASs8B,GAAgBz8B,GAExB,IADA,IAAIH,EAAI,IAAI5U,MAAM+U,GACV/f,EAAI,EAAGA,EAAI+f,IAAK/f,EAAG4f,EAAE5f,GAAK,EAClC,OAAO4f,EACP,IAAI07B,GAAW,WAChB,IAAImB,EAAc,WACjB,OAAO,SAAoB1yC,EAAMw/B,GAChC,IAAImT,EAAO,EACX,MAAMA,EAAO3yC,EAAK5I,OAAQ,CACzB,IAAI2wC,EAAIh/B,KAAKyP,IAAI,MAAQxY,EAAK5I,OAASu7C,GACnC38C,EAAI28C,EAAO5K,GAAK/nC,EAAK5I,OAEzBooC,EAAImJ,YAAY,GAAI3yC,GACpBwpC,EAAImJ,YAAY,EAAGZ,GACnBvI,EAAImJ,YAAY,EAAU,OAALZ,GACrB,MAAMA,KAAM,EAAGvI,EAAIA,EAAItlB,KAAOla,EAAK2yC,KAEpC,OAAOnT,EAAItlB,GAZK,GAgBlB,OAAO,SAASla,GACf,IAAIq8B,EAAMiQ,GAAQ,GAAGvjC,KAAKoB,MAAkB,IAAZnK,EAAK5I,SACjCw7C,EAAMF,EAAY1yC,EAAMq8B,GAC5B,OAAOA,EAAIp4B,MAAM,EAAG2uC,IApBL,GA0BhB,SAASC,GAAWC,EAAOC,EAAMC,GAChC,IAAIC,EAAS,EAAG/lC,EAAI,EAAGjX,EAAI,EAAGuuB,EAAI,EAAG0uB,EAAQ,EAAGnL,EAAI+K,EAAM17C,OAEtD+7C,EAAYvB,EAAmB,IAAIwB,YAAY,IAAMX,GAAgB,IACzE,IAAIx8C,EAAI,EAAGA,EAAI,KAAMA,EAAGk9C,EAASl9C,GAAK,EAEtC,IAAIA,EAAI8xC,EAAG9xC,EAAI+8C,IAAO/8C,EAAG68C,EAAM78C,GAAK,EACpC8xC,EAAI+K,EAAM17C,OAEV,IAAIi8C,EAAQzB,EAAmB,IAAIwB,YAAYrL,GAAK0K,GAAgB1K,GAGpE,IAAI9xC,EAAI,EAAGA,EAAI8xC,IAAK9xC,EACnBk9C,EAAUjmC,EAAI4lC,EAAM78C,MACjBg9C,EAAS/lC,IAAG+lC,EAAS/lC,GACxBmmC,EAAMp9C,GAAK,EAGZ,IADAk9C,EAAS,GAAK,EACVl9C,EAAI,EAAGA,GAAKg9C,IAAUh9C,EAAGk9C,EAASl9C,EAAE,IAAOi9C,EAASA,EAAQC,EAASl9C,EAAE,IAAK,EAChF,IAAIA,EAAI,EAAGA,EAAI8xC,IAAK9xC,EACnBi9C,EAAQJ,EAAM78C,GACF,GAATi9C,IAAYG,EAAMp9C,GAAKk9C,EAASD,EAAM,OAI1C,IAAII,EAAQ,EACZ,IAAIr9C,EAAI,EAAGA,EAAI8xC,IAAK9xC,EAEnB,GADAq9C,EAAQR,EAAM78C,GACF,GAATq9C,EAEF,IADAJ,EAAQpB,EAAWuB,EAAMp9C,GAAIg9C,IAAUA,EAAOK,EAC1C9uB,GAAK,GAAIyuB,EAAS,EAAIK,GAAU,EAAG9uB,GAAG,IAAKA,EAC9CuuB,EAAKG,EAAO1uB,GAAG8uB,GAAiB,GAANA,EAAar9C,GAAG,EAG7C,OAAOg9C,EAGR,IAAIM,GAAW3B,EAAmB,IAAIwB,YAAY,KAAOX,GAAgB,KACrEe,GAAW5B,EAAmB,IAAIwB,YAAY,IAAOX,GAAgB,IACzE,IAAIb,EAAkB,CACrB,IAAI,IAAI37C,GAAI,EAAGA,GAAI,MAAOA,GAAGs9C,GAASt9C,IAAK,EAC3C,IAAIA,GAAI,EAAGA,GAAI,KAAMA,GAAGu9C,GAASv9C,IAAK,GAEvC,WAGC,IAFA,IAAIw9C,EAA0B,GAC1Bx9C,EAAI,EACHA,EAAE,GAAIA,IAAKw9C,EAAM5kC,KAAK,GAC3BgkC,GAAWY,EAAOD,GAAU,IAE5B,IAAIV,EAA0B,GAE9B,IADA78C,EAAI,EACEA,GAAG,IAAKA,IAAK68C,EAAMjkC,KAAK,GAC9B,KAAM5Y,GAAG,IAAKA,IAAK68C,EAAMjkC,KAAK,GAC9B,KAAM5Y,GAAG,IAAKA,IAAK68C,EAAMjkC,KAAK,GAC9B,KAAM5Y,GAAG,IAAKA,IAAK68C,EAAMjkC,KAAK,GAC9BgkC,GAAWC,EAAOS,GAAU,MAZ7B,GAeA,IAAIG,GAAW9B,EAAmB,IAAIwB,YAAY,OAASX,GAAgB,OACvEkB,GAAW/B,EAAmB,IAAIwB,YAAY,OAASX,GAAgB,OACvEmB,GAAWhC,EAAmB,IAAIwB,YAAY,KAASX,GAAgB,KACvEoB,GAAY,EAAGC,GAAY,EAG/B,SAASC,GAAI/zC,EAAM2yC,GAElB,IAAIqB,EAAQ5B,EAAYpyC,EAAM2yC,GAAQ,IAAKA,GAAQ,EACnD,IAAIsB,EAAS7B,EAAYpyC,EAAM2yC,GAAQ,EAAGA,GAAQ,EAClD,IAAIuB,EAAS/B,EAAYnyC,EAAM2yC,GAAQ,EAAGA,GAAQ,EAUlD,IATA,IAAIzlC,EAAI,EAGJ4lC,EAAQlB,EAAmB,IAAI7U,WAAW,IAAM0V,GAAgB,IAChEY,EAAQ,CAAE,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAChEJ,EAAS,EACTE,EAAYvB,EAAmB,IAAI7U,WAAW,GAAK0V,GAAgB,GACnE0B,EAAYvC,EAAmB,IAAI7U,WAAW,GAAK0V,GAAgB,GACnE1K,EAAI+K,EAAM17C,OACNnB,EAAI,EAAGA,EAAIi+C,IAAUj+C,EAC5B68C,EAAMtB,EAAWv7C,IAAMiX,EAAIglC,EAAYlyC,EAAM2yC,GAC1CM,EAAS/lC,IAAG+lC,EAAS/lC,GACxBimC,EAASjmC,KACTylC,GAAQ,EAIT,IAAIO,EAAQ,EAEZ,IADAC,EAAS,GAAK,EACVl9C,EAAI,EAAGA,GAAKg9C,IAAUh9C,EAAGk+C,EAAUl+C,GAAKi9C,EAASA,EAAQC,EAASl9C,EAAE,IAAK,EAC7E,IAAIA,EAAI,EAAGA,EAAI8xC,IAAK9xC,EAA4B,IAArBi9C,EAAQJ,EAAM78C,MAAUo9C,EAAMp9C,GAAKk+C,EAAUjB,MAExE,IAAII,EAAQ,EACZ,IAAIr9C,EAAI,EAAGA,EAAI8xC,IAAK9xC,EAEnB,GADAq9C,EAAQR,EAAM78C,GACF,GAATq9C,EAAY,CACdJ,EAAQrB,EAASwB,EAAMp9C,KAAM,EAAEq9C,EAC/B,IAAI,IAAI9uB,GAAK,GAAI,EAAE8uB,GAAQ,EAAG9uB,GAAG,IAAKA,EAAGovB,GAASV,EAAO1uB,GAAG8uB,GAAiB,EAANA,EAAYr9C,GAAG,EAKxF,IAAIm+C,EAA2B,GAE/B,IADAnB,EAAS,EACHmB,EAAOh9C,OAAS48C,EAAQC,GAG7B,OAFAf,EAAQU,GAASvB,EAAYryC,EAAM2yC,IACnCA,GAAgB,EAARO,EACAA,KAAW,GAClB,KAAK,GACJhmC,EAAI,EAAI8kC,EAAYhyC,EAAM2yC,GAAOA,GAAQ,EACzCO,EAAQkB,EAAOA,EAAOh9C,OAAS,GAC/B,MAAM8V,KAAM,EAAGknC,EAAOvlC,KAAKqkC,GAC3B,MACD,KAAK,GACJhmC,EAAI,EAAIglC,EAAYlyC,EAAM2yC,GAAOA,GAAQ,EACzC,MAAMzlC,KAAM,EAAGknC,EAAOvlC,KAAK,GAC3B,MACD,KAAK,GACJ3B,EAAI,GAAKmlC,EAAYryC,EAAM2yC,GAAOA,GAAQ,EAC1C,MAAMzlC,KAAO,EAAGknC,EAAOvlC,KAAK,GAC5B,MACD,QACCulC,EAAOvlC,KAAKqkC,GACTD,EAASC,IAAOD,EAASC,GAC5B,MAKH,IAAImB,EAAKD,EAAOnwC,MAAM,EAAG+vC,GAAQM,EAAKF,EAAOnwC,MAAM+vC,GACnD,IAAI/9C,EAAI+9C,EAAO/9C,EAAI,MAAOA,EAAGo+C,EAAGp+C,GAAK,EACrC,IAAIA,EAAIg+C,EAAQh+C,EAAI,KAAMA,EAAGq+C,EAAGr+C,GAAK,EAGrC,OAFA49C,GAAYhB,GAAWwB,EAAIX,GAAU,KACrCI,GAAYjB,GAAWyB,EAAIX,GAAU,IAC9BhB,EAIR,SAAS4B,GAAQv0C,EAAMmxC,GAEtB,GAAc,GAAXnxC,EAAK,MAAuB,EAAVA,EAAK,IAAa,MAAO,CAACy8B,GAAY0U,GAAM,GAGjE,IAAIwB,EAAO,EAGPpI,EAAS,EAETiK,EAAS9X,GAAeyU,GAAa,GAAG,IACxCsD,EAAO,EACPC,EAAKF,EAAOp9C,SAAS,EACrBu9C,EAAY,EAAGC,EAAY,EAE/B,MAAoB,IAAN,EAAPrK,GAEN,GADAA,EAAS2H,EAAYlyC,EAAM2yC,GAAOA,GAAQ,EACtCpI,IAAW,GAAM,EAuBrB,IATWA,IAAW,GAAM,GAE3BoK,EAAY,EAAGC,EAAY,IAG3BjC,EAAOoB,GAAI/zC,EAAM2yC,GACjBgC,EAAYd,GAAWe,EAAYd,KAEhC3C,GAAQuD,EAAKD,EAAO,QAAUD,EAASjC,GAAQiC,EAAQC,EAAO,OAAQC,EAAKF,EAAOp9C,UAC9E,CAEP,IAAIy9C,EAAOvC,EAAYtyC,EAAM2yC,EAAMgC,GAC/BG,EAAQvK,IAAS,GAAM,EAAIgJ,GAASsB,GAAQnB,GAASmB,GAGzD,GAFAlC,GAAe,GAAPmC,EAAWA,KAAU,EAEJ,KAApBA,IAAO,EAAG,KAAaN,EAAOC,KAAUK,MACxC,IAAW,KAARA,EAAa,MAEpBA,GAAQ,IACR,IAAIC,EAAUD,EAAO,EAAK,EAAMA,EAAK,GAAI,EAAOC,EAAS,IAAGA,EAAS,GACrE,IAAI1L,EAAMoL,EAAOhD,EAAOqD,GAErBC,EAAS,IACX1L,GAAOiJ,EAAYtyC,EAAM2yC,EAAMoC,GAC/BpC,GAAQoC,GAITF,EAAOvC,EAAYtyC,EAAM2yC,EAAMiC,GAC/BE,EAAQvK,IAAS,GAAM,EAAIiJ,GAASqB,GAAQlB,GAASkB,GACrDlC,GAAe,GAAPmC,EAAWA,KAAU,EAC7B,IAAIE,EAAUF,EAAO,EAAI,EAAKA,EAAK,GAAI,EACnCG,EAAMvD,EAAOoD,GAEdE,EAAS,IACXC,GAAO3C,EAAYtyC,EAAM2yC,EAAMqC,GAC/BrC,GAAQqC,IAIL7D,GAAOuD,EAAKrL,IAAOmL,EAASjC,GAAQiC,EAAQnL,GAAMqL,EAAKF,EAAOp9C,QAClE,MAAMq9C,EAAOpL,EAAOmL,EAAOC,GAAQD,EAAOC,EAAOQ,KAAQR,OAvD3D,CAEW,EAAP9B,IAAUA,GAAQ,GAAU,EAALA,IAE1B,IAAIvJ,EAAKppC,EAAK2yC,IAAO,GAAK3yC,EAAgB,GAAV2yC,IAAO,KAAO,EAI9C,GAHAA,GAAQ,IAEJxB,GAAOuD,EAAKD,EAAOrL,IAAMoL,EAASjC,GAAQiC,EAAQC,EAAOrL,GAAKsL,EAAKF,EAAOp9C,QACtD,oBAAd4I,EAAKwyC,KAEdxyC,EAAKwyC,KAAKgC,EAAQC,EAAM9B,IAAO,GAAIA,IAAO,GAAGvJ,GAC7CqL,GAAQrL,EAAIuJ,GAAQ,EAAEvJ,OAChB,MAAMA,KAAO,EAAKoL,EAAOC,KAAUz0C,EAAK2yC,IAAO,GAAIA,GAAQ,EA+CpE,MAAO,CAACxB,EAAMqD,EAASA,EAAOvwC,MAAM,EAAGwwC,GAAQ9B,EAAK,IAAK,GAG1D,SAASvB,GAASlF,EAASiF,GAC1B,IAAInxC,EAAOksC,EAAQjoC,MAAMioC,EAAQhyB,GAAG,GAChCslB,EAAM+U,GAAQv0C,EAAMmxC,GAExB,OADAjF,EAAQhyB,GAAKslB,EAAI,GACVA,EAAI,GAGZ,SAAS0V,GAAcC,EAAKC,GAC3B,IAAGD,EACE,MAAM,IAAItjC,MAAMujC,GADW,qBAAZpf,SAAyBA,QAAQp7B,MAAMw6C,GAI5D,SAASxL,GAAUD,EAAmBvuC,GACrC,IAAI6tC,EAAyBU,EAC7BT,GAAUD,EAAM,GAEhB,IAAIkC,EAA6B,GAAIC,EAA8B,GAC/Dv1B,EAAI,CACPs1B,UAAWA,EACXC,UAAWA,GAEZyC,EAASh4B,EAAG,CAAEk4B,KAAM3yC,EAAQ2yC,OAG5B,IAAI93C,EAAIgzC,EAAK7xC,OAAS,EACtB,OAAkB,IAAX6xC,EAAKhzC,IAA2B,IAAbgzC,EAAKhzC,EAAE,IAA2B,GAAbgzC,EAAKhzC,EAAE,IAA2B,GAAbgzC,EAAKhzC,EAAE,KAAeA,GAAK,IAAKA,EACpGgzC,EAAK/uB,EAAIjkB,EAAI,EAGbgzC,EAAK/uB,GAAK,EACV,IAAIm7B,EAAOpM,EAAKH,WAAW,GAC3BG,EAAK/uB,GAAK,EACV,IAAIo7B,EAAWrM,EAAKH,WAAW,GAK/B,IAFAG,EAAK/uB,EAAIo7B,EAELr/C,EAAI,EAAGA,EAAIo/C,IAAQp/C,EAAG,CAEzBgzC,EAAK/uB,GAAK,GACV,IAAIq7B,EAAMtM,EAAKH,WAAW,GACtBqI,EAAMlI,EAAKH,WAAW,GACtBqE,EAAUlE,EAAKH,WAAW,GAC1B0M,EAAOvM,EAAKH,WAAW,GACvB2M,EAAOxM,EAAKH,WAAW,GAC3BG,EAAK/uB,GAAK,EACV,IAAInQ,EAASk/B,EAAKH,WAAW,GACzB4M,EAAK1M,EAAyBC,EAAKhlC,MAAMglC,EAAK/uB,EAAEizB,EAASlE,EAAK/uB,EAAEizB,EAAQqI,IAC5EvM,EAAK/uB,GAAKizB,EAAUqI,EAAOC,EAE3B,IAAI1N,EAAIkB,EAAK/uB,EACb+uB,EAAK/uB,EAAInQ,EAAS,EAClB4rC,GAAiB1M,EAAMsM,EAAKpE,EAAKt7B,EAAG6/B,GACpCzM,EAAK/uB,EAAI6tB,EAGV,OAAOlyB,EAKR,SAAS8/B,GAAiB1M,EAAiBsM,EAAgBpE,EAAgBt7B,EAAoB6/B,GAE9FzM,EAAK/uB,GAAK,EACV,IAAIivB,EAAQF,EAAKH,WAAW,GACxB8M,EAAO3M,EAAKH,WAAW,GACvBphC,EAAOmhC,EAAeI,GAE1B,GAAW,KAARE,EAAgB,MAAM,IAAIt3B,MAAM,8BASpB,IARf,IAAIgkC,EAAQ5M,EAAKH,WAAW,GACxBgN,EAAO7M,EAAKH,WAAW,GACvBiN,EAAO9M,EAAKH,WAAW,GAEvBqE,EAAUlE,EAAKH,WAAW,GAC1B0M,EAAOvM,EAAKH,WAAW,GAGvB7wC,EAAO,GAAYhC,EAAI,EAAGA,EAAIk3C,IAAWl3C,EAAGgC,GAAQqV,OAAOutB,aAAaoO,EAAKA,EAAK/uB,MACtF,GAAGs7B,EAAM,CACR,IAAIQ,EAAKhN,EAAyBC,EAAKhlC,MAAMglC,EAAK/uB,EAAG+uB,EAAK/uB,EAAIs7B,KAC1DQ,EAAG,QAAS,IAAIvM,KAAI/hC,EAAOsuC,EAAG,OAAQvM,MACrCiM,GAAI,IAAI,QAAS,IAAIjM,KAAI/hC,EAAOguC,EAAG,OAAQjM,IAEjDR,EAAK/uB,GAAKs7B,EAKV,IAAIx1C,EAAOipC,EAAKhlC,MAAMglC,EAAK/uB,EAAG+uB,EAAK/uB,EAAI47B,GACvC,OAAOF,GACN,KAAK,EAAG51C,EAAOkxC,EAAgBjI,EAAM8M,GAAO,MAC5C,KAAK,EAAG,MACR,QAAS,MAAM,IAAIlkC,MAAM,sCAAwC+jC,GAIlE,IAAIT,GAAM,EACC,EAARhM,IACF0M,EAAQ5M,EAAKH,WAAW,GACZ,WAAT+M,IAAuBA,EAAQ5M,EAAKH,WAAW,GAAIqM,GAAM,GAC5DW,EAAO7M,EAAKH,WAAW,GACvBiN,EAAO9M,EAAKH,WAAW,IAGrBgN,GAAQP,GAAKL,GAAcC,EAAK,wBAA0BI,EAAM,OAASO,GACzEC,GAAQ5E,GAAK+D,GAAcC,EAAK,0BAA4BhE,EAAM,OAAS4E,GAC9E,IAAIE,EAAS3O,GAAMjL,IAAIr8B,EAAM,GACzB61C,GAAO,GAAOI,GAAQ,GAAIf,GAAcC,EAAK,uBAAyBU,EAAQ,OAASI,GAC3FC,GAAQrgC,EAAG5d,EAAM+H,EAAM,CAACm2C,QAAQ,EAAM1M,GAAI/hC,IAE3C,SAASonC,GAAUhB,EAAsB1yC,GACxC,IAAIwzC,EAAQxzC,GAAW,GACnBokC,EAAM,GAAI4W,EAAQ,GAClBvgC,EAAey2B,GAAQ,GACvB+J,EAAUzH,EAAM0H,YAAc,EAAI,EAAInN,EAAQ,EAC9CoN,GAAO,EACRA,IAAMpN,GAAS,GAClB,IAAIlzC,EAAI,EAAGuuB,EAAI,EAEX8wB,EAAW,EAAGD,EAAO,EACrBtH,EAAOD,EAAI1C,UAAU,GAAIoL,EAAKzI,EAAM0I,EAAK3I,EAAI3C,UAAU,GACvDuL,EAAO,GACPC,EAAQ,EAEZ,IAAI1gD,EAAI,EAAGA,EAAI63C,EAAI1C,UAAUh0C,SAAUnB,EAEtC,GADAugD,EAAK1I,EAAI1C,UAAUn1C,GAAGgO,MAAM8pC,EAAK32C,QAASq/C,EAAK3I,EAAI3C,UAAUl1C,GACzDwgD,EAAG79B,MAAS69B,EAAGl1C,SAAiB,YAANi1C,EAA9B,CACA,IAAInvB,EAAQiuB,EAGRsB,EAAUtK,GAAQkK,EAAGp/C,QACzB,IAAIotB,EAAI,EAAGA,EAAIgyB,EAAGp/C,SAAUotB,EAAGoyB,EAAQjO,YAAY,EAAsB,IAAnB6N,EAAG1b,WAAWtW,IACpEoyB,EAAUA,EAAQ3yC,MAAM,EAAG2yC,EAAQ18B,GACnCw8B,EAAKrB,GAAQ/N,GAAMjL,IAAYoa,EAAGl1C,QAAyB,GAE3D,IAAIizC,EAASiC,EAAGl1C,QACH,GAAV80C,IAAa7B,EAASnD,EAAgBmD,IAGzC3+B,EAAIy2B,GAAQ,IACZz2B,EAAE8yB,YAAY,EAAG,UACjB9yB,EAAE8yB,YAAY,EAAG,IACjB9yB,EAAE8yB,YAAY,EAAGQ,GACjBtzB,EAAE8yB,YAAY,EAAG0N,GAEdI,EAAGhN,GAAIhB,EAAe5yB,EAAG4gC,EAAGhN,IAC1B5zB,EAAE8yB,YAAY,EAAG,GACtB9yB,EAAE8yB,aAAa,EAAY,EAARQ,EAAa,EAAIuN,EAAKrB,IACzCx/B,EAAE8yB,YAAY,EAAa,EAARQ,EAAa,EAAIqL,EAAOp9C,QAC3Cye,EAAE8yB,YAAY,EAAa,EAARQ,EAAa,EAAWsN,EAAGl1C,QAAmBnK,QACjEye,EAAE8yB,YAAY,EAAGiO,EAAQx/C,QACzBye,EAAE8yB,YAAY,EAAG,GAEjB2M,GAAYz/B,EAAEze,OACdooC,EAAI3wB,KAAKgH,GACTy/B,GAAYsB,EAAQx/C,OACpBooC,EAAI3wB,KAAK+nC,GAGTtB,GAAYd,EAAOp9C,OACnBooC,EAAI3wB,KAAK2lC,GAGE,EAARrL,IACFtzB,EAAIy2B,GAAQ,IACZz2B,EAAE8yB,aAAa,EAAG+N,EAAKrB,IACvBx/B,EAAE8yB,YAAY,EAAG6L,EAAOp9C,QACxBye,EAAE8yB,YAAY,EAAU8N,EAAGl1C,QAAmBnK,QAC9Ck+C,GAAYz/B,EAAEqE,EACdslB,EAAI3wB,KAAKgH,IAIVA,EAAIy2B,GAAQ,IACZz2B,EAAE8yB,YAAY,EAAG,UACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,IACjB9yB,EAAE8yB,YAAY,EAAGQ,GACjBtzB,EAAE8yB,YAAY,EAAG0N,GACjBxgC,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,aAAa,EAAG+N,EAAKrB,IAEvBx/B,EAAE8yB,YAAY,EAAG6L,EAAOp9C,QACxBye,EAAE8yB,YAAY,EAAU8N,EAAGl1C,QAAmBnK,QAC9Cye,EAAE8yB,YAAY,EAAGiO,EAAQx/C,QACzBye,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAGthB,GAEjBsvB,GAAS9gC,EAAEqE,EACXk8B,EAAMvnC,KAAKgH,GACX8gC,GAASC,EAAQx/C,OACjBg/C,EAAMvnC,KAAK+nC,KACTvB,EAcH,OAVAx/B,EAAIy2B,GAAQ,IACZz2B,EAAE8yB,YAAY,EAAG,WACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG,GACjB9yB,EAAE8yB,YAAY,EAAG0M,GACjBx/B,EAAE8yB,YAAY,EAAG0M,GACjBx/B,EAAE8yB,YAAY,EAAGgO,GACjB9gC,EAAE8yB,YAAY,EAAG2M,GACjBz/B,EAAE8yB,YAAY,EAAG,GAEV3L,GAAQ,CAAEA,GAAQ,GAAgBA,GAAQoZ,GAAQvgC,IAE1D,SAASghC,GAAQzX,GAChB,IAAIvpB,EAAqB,GAEzB,OADAg4B,EAASh4B,EAAGupB,GACLvpB,EAGR,SAASqgC,GAAQpI,EAAsB71C,EAAiBsJ,EAAuB69B,GAC9E,IAAI+W,EAAS/W,GAAQA,EAAK+W,OACtBA,GAAQtI,EAASC,GACrB,IAAInE,GAAQwM,GAAUhO,GAAIgG,KAAKL,EAAK71C,GACpC,IAAI0xC,EAAM,CACT,IAAImN,EAAmBhJ,EAAI1C,UAAU,GAClCnzC,EAAKgM,MAAM,EAAG6yC,EAAM1/C,SAAW0/C,EAAOA,EAAQ7+C,GAE1B,KAAnB6+C,EAAM7yC,OAAO,KAAW6yC,GAAS,KACpCA,GAASA,EAAQ7+C,GAAMsV,QAAQ,KAAK,MAErCo8B,EAAO,CAAE1xC,KAAMuwC,EAASvwC,GAAOO,KAAM,GACrCs1C,EAAI3C,UAAUt8B,KAAK86B,GACnBmE,EAAI1C,UAAUv8B,KAAKioC,GACfX,GAAQhO,GAAI4O,MAAMC,OAAOlJ,GAU9B,OAPAnE,EAAKpoC,QAAU,EACfooC,EAAK/wB,KAAOrX,EAAUA,EAAQnK,OAAS,EACpCgoC,IACCA,EAAK4O,QAAOrE,EAAK0D,MAAQjO,EAAK4O,OAC9B5O,EAAKqK,KAAIE,EAAKF,GAAKrK,EAAKqK,IACxBrK,EAAKkO,KAAI3D,EAAK2D,GAAKlO,EAAKkO,KAErB3D,EAGR,SAASsN,GAAQnJ,EAAsB71C,GACtC41C,EAASC,GACT,IAAInE,EAAOxB,GAAIgG,KAAKL,EAAK71C,GACzB,GAAG0xC,EAAM,IAAI,IAAInlB,EAAI,EAAGA,EAAIspB,EAAI3C,UAAU/zC,SAAUotB,EAAG,GAAGspB,EAAI3C,UAAU3mB,IAAMmlB,EAG7E,OAFAmE,EAAI3C,UAAU+L,OAAO1yB,EAAG,GACxBspB,EAAI1C,UAAU8L,OAAO1yB,EAAG,IACjB,EAER,OAAO,EAGR,SAAS2yB,GAAQrJ,EAAsBsJ,EAAqBC,GAC3DxJ,EAASC,GACT,IAAInE,EAAOxB,GAAIgG,KAAKL,EAAKsJ,GACzB,GAAGzN,EAAM,IAAI,IAAInlB,EAAI,EAAGA,EAAIspB,EAAI3C,UAAU/zC,SAAUotB,EAAG,GAAGspB,EAAI3C,UAAU3mB,IAAMmlB,EAG7E,OAFAmE,EAAI3C,UAAU3mB,GAAGvsB,KAAOuwC,EAAS6O,GACjCvJ,EAAI1C,UAAU5mB,GAAK6yB,GACZ,EAER,OAAO,EAGR,SAASL,GAAOlJ,GAAiCM,EAAYN,GAAK,GAuBlE,OArBAv0B,EAAQ40B,KAAOA,EACf50B,EAAQq0B,KAAOA,EACfr0B,EAAQrF,MAAQA,EAChBqF,EAAQk3B,MAAQA,EAChBl3B,EAAQ+9B,UAAY/G,EACpBh3B,EAAQw9B,MAAQ,CACfF,QAASA,GACTX,QAASA,GACTe,QAASA,GACTE,QAASA,GACTH,OAAQA,GACRO,UAAWA,GACXC,WAAYA,GACZtO,UAAWA,GACXlM,QAASA,GACT0T,SAAUA,EACVgC,YAAanB,GACbkG,YAAarG,GACb5B,OAAQA,GAGFj2B,EAzzCG,GA4zCY,qBAAZm+B,SAA6C,qBAAXp+B,GAAuD,qBAAtBiuB,KAAqCjuB,EAAOC,QAAU4uB,IA6DnI,SAAS,GAAKtyB,GAEb,IADA,IAAI8hC,EAAKz9C,OAAOC,KAAK0b,GAAI+hC,EAAK,GACtB3hD,EAAI,EAAGA,EAAI0hD,EAAGvgD,SAAUnB,EAAMiE,OAAO4M,UAAUsO,eAAerO,KAAK8O,EAAG8hC,EAAG1hD,KAAK2hD,EAAG/oC,KAAK8oC,EAAG1hD,IACjG,OAAO2hD,EAGR,SAASC,GAAU/nC,EAAa5Z,GAE/B,IADA,IAAI2f,EAAI,GAAciiC,EAAI,GAAKhoC,GACvB7Z,EAAI,EAAGA,IAAM6hD,EAAE1gD,SAAUnB,EAA2B,MAArB4f,EAAE/F,EAAIgoC,EAAE7hD,IAAIC,MAAe2f,EAAE/F,EAAIgoC,EAAE7hD,IAAIC,IAAQ4hD,EAAE7hD,IACxF,OAAO4f,EAGR,SAASkiC,GAAMjoC,GAEd,IADA,IAAI+F,EAAI,GAAciiC,EAAI,GAAKhoC,GACvB7Z,EAAI,EAAGA,IAAM6hD,EAAE1gD,SAAUnB,EAAG4f,EAAE/F,EAAIgoC,EAAE7hD,KAAO6hD,EAAE7hD,GACrD,OAAO4f,EAGR,SAASmiC,GAAUloC,GAElB,IADA,IAAI+F,EAAI,GAAciiC,EAAI,GAAKhoC,GACvB7Z,EAAI,EAAGA,IAAM6hD,EAAE1gD,SAAUnB,EAAG4f,EAAE/F,EAAIgoC,EAAE7hD,KAAOub,SAASsmC,EAAE7hD,GAAG,IACjE,OAAO4f,EAGR,SAASoiC,GAAUnoC,GAElB,IADA,IAAI+F,EAAqB,GAAciiC,EAAI,GAAKhoC,GACxC7Z,EAAI,EAAGA,IAAM6hD,EAAE1gD,SAAUnB,EACb,MAAhB4f,EAAE/F,EAAIgoC,EAAE7hD,OAAc4f,EAAE/F,EAAIgoC,EAAE7hD,KAAO,IACxC4f,EAAE/F,EAAIgoC,EAAE7hD,KAAK4Y,KAAKipC,EAAE7hD,IAErB,OAAO4f,EAGR,IAAIgqB,GAAW,IAAIh5B,KAAK,KAAM,GAAI,GAAI,EAAG,EAAG,GAC5C,SAASqxC,GAAQl0B,EAAY2b,GAC5B,IAAIM,EAAQjc,EAAE/c,UACX04B,IAAUM,GAAS,WACtB,IAAIH,EAAWD,GAAS54B,UAAqE,KAAxD+c,EAAElX,oBAAsB+yB,GAAS/yB,qBACtE,OAAQmzB,EAAQH,GAAY,MAE7B,IAAIqY,GAAU,IAAItxC,KACdi5B,GAAWD,GAAS54B,UAA2E,KAA9DkxC,GAAQrrC,oBAAsB+yB,GAAS/yB,qBACxEsrC,GAAYD,GAAQrrC,oBACxB,SAASurC,GAAQr0B,GAChB,IAAIwb,EAAM,IAAI34B,KAKd,OAJA24B,EAAI8Y,QAAY,GAAJt0B,EAAS,GAAK,GAAK,IAAO8b,IAClCN,EAAI1yB,sBAAwBsrC,IAC/B5Y,EAAI8Y,QAAQ9Y,EAAIv4B,UAAoD,KAAvCu4B,EAAI1yB,oBAAsBsrC,KAEjD5Y,EAIR,SAAS+Y,GAAaxsC,GACrB,IAAIysC,EAAM,EAAG/O,EAAK,EAAG/wB,GAAO,EACxB9M,EAAIG,EAAEyB,MAAM,8EAChB,IAAI5B,EAAG,MAAM,IAAIiG,MAAM,IAAM9F,EAAI,gCACjC,IAAI,IAAI9V,EAAI,EAAGA,GAAK2V,EAAExU,SAAUnB,EAC/B,GAAI2V,EAAE3V,GAAN,CAGA,OAFAwzC,EAAK,EACFxzC,EAAI,IAAGyiB,GAAO,GACV9M,EAAE3V,GAAGgO,MAAM2H,EAAE3V,GAAGmB,OAAO,IAC7B,IAAK,IACJ,MAAM,IAAIya,MAAM,mCAAqCjG,EAAE3V,GAAGgO,MAAM2H,EAAE3V,GAAGmB,OAAO,IAC7E,IAAK,IAAKqyC,GAAM,GAEhB,IAAK,IAAKA,GAAM,GAEhB,IAAK,IACJ,IAAI/wB,EAAM,MAAM,IAAI7G,MAAM,qCACrB43B,GAAM,GAEZ,IAAK,IAAK,MAEX+O,GAAO/O,EAAKj4B,SAAS5F,EAAE3V,GAAI,IAE5B,OAAOuiD,EAGR,IAAIC,GAAe,IAAI5xC,KAAK,4BACzBO,MAAMqxC,GAAalwC,iBAAgBkwC,GAAe,IAAI5xC,KAAK,YAC9D,IAAI6xC,GAAwC,MAA9BD,GAAalwC,cAE3B,SAAS,GAAU6E,EAAqBurC,GACvC,IAAIrsC,EAAI,IAAIzF,KAAKuG,GACjB,GAAGsrC,GAIF,OAFGC,EAAU,EAAGrsC,EAAEgsC,QAAQhsC,EAAErF,UAAoC,GAAxBqF,EAAEQ,oBAA2B,KAC7D6rC,EAAU,GAAGrsC,EAAEgsC,QAAQhsC,EAAErF,UAAoC,GAAxBqF,EAAEQ,oBAA2B,KACnER,EAER,GAAGc,aAAevG,KAAM,OAAOuG,EAC/B,GAAiC,MAA9BqrC,GAAalwC,gBAA0BnB,MAAMkF,EAAE/D,eAAgB,CACjE,IAAIwD,EAAIO,EAAE/D,cACV,OAAG6E,EAAI3U,QAAQ,GAAKsT,IAAM,GAC1BO,EAAE7D,YAAY6D,EAAE/D,cAAgB,KADI+D,EAGrC,IAAI0J,EAAI5I,EAAII,MAAM,SAAS,CAAC,OAAO,IAAI,KAAK,IAAI,IAAI,KAChDgyB,EAAM,IAAI34B,MAAMmP,EAAE,IAAKA,EAAE,GAAK,GAAIA,EAAE,IAAMA,EAAE,IAAI,GAAMA,EAAE,IAAI,GAAMA,EAAE,IAAI,GAE5E,OADG5I,EAAI3U,QAAQ,MAAQ,IAAG+mC,EAAM,IAAI34B,KAAK24B,EAAIv4B,UAAsC,GAA1Bu4B,EAAI1yB,oBAA2B,MACjF0yB,EAGR,SAASoZ,GAAOjrC,GAEf,IADA,IAAIkI,EAAI,GACA5f,EAAI,EAAGA,GAAK0X,EAAIvW,SAAUnB,EAAG4f,GAAKvI,OAAOutB,aAAaltB,EAAI1X,IAClE,OAAO4f,EAGR,SAASgjC,GAAIhjC,GACZ,GAAkB,oBAARijC,OAAwB73C,MAAMkN,QAAQ0H,GAAI,OAAOijC,KAAK5kC,MAAM4kC,KAAKC,UAAUljC,IACrF,GAAe,iBAALA,GAAsB,MAALA,EAAW,OAAOA,EAC7C,GAAGA,aAAahP,KAAM,OAAO,IAAIA,KAAKgP,EAAE5O,WACxC,IAAIu4B,EAAM,GACV,IAAI,IAAIt7B,KAAK2R,EAAM3b,OAAO4M,UAAUsO,eAAerO,KAAK8O,EAAG3R,KAAIs7B,EAAIt7B,GAAK20C,GAAIhjC,EAAE3R,KAC9E,OAAOs7B,EAGR,SAASjC,GAAKnnB,EAAa8D,GAA2B,IAAIrE,EAAI,GAAI,MAAMA,EAAEze,OAAS8iB,EAAGrE,GAAGO,EAAG,OAAOP,EAGnG,SAASmjC,GAASjtC,GACjB,IAAIiY,EAAe1L,OAAOvM,GAC1B,GAAG0H,SAASuQ,GAAI,OAAOA,EACvB,IAAI5c,MAAM4c,GAAI,OAAO9c,IACrB,IAAI,KAAK+O,KAAKlK,GAAI,OAAOiY,EACzB,IAAIi1B,EAAK,EACLhtC,EAAKF,EAAEwB,QAAQ,iBAAiB,QAAQA,QAAQ,OAAO,IAAIA,QAAQ,QAAQ,WAAwB,OAAX0rC,GAAM,IAAY,MAC9G,OAAI7xC,MAAM4c,EAAI1L,OAAOrM,KACrBA,EAAKA,EAAGsB,QAAQ,cAAa,SAASg1B,EAAIC,GAAgB,OAAVyW,GAAMA,EAAWzW,KAC7Dp7B,MAAM4c,EAAI1L,OAAOrM,IACd+X,EAD2BA,EAAIi1B,GAFJj1B,EAAIi1B,EAKvC,SAASC,GAAUntC,GAClB,IAAI8J,EAAI,IAAIhP,KAAKkF,GAAIiK,EAAI,IAAInP,KAAKK,KAC9B0D,EAAIiL,EAAEsjC,UAAWvtC,EAAIiK,EAAE5K,WAAYqB,EAAIuJ,EAAE9N,UAC7C,OAAGX,MAAMkF,IACN1B,EAAI,GAAKA,EAAI,KADIoL,GAEhBpK,EAAI,GAAKU,EAAI,IAAW,KAAL1B,GACpBmB,EAAEuG,cAAc9E,MAAM,mDADeqI,EAErC9J,EAAEyB,MAAM,iBAAyBwI,EAC7BH,EAGR,IAAIujC,GAAuD,GAApC,UAAUr1B,MAAM,UAAU3sB,OACjD,SAASiiD,GAAYjsC,EAAgBksC,EAAIC,GACxC,GAAGH,IAAiC,iBAANE,EAAgB,OAAOlsC,EAAI2W,MAAMu1B,GAE/D,IADA,IAAIvhD,EAAIqV,EAAI2W,MAAMu1B,GAAKzjC,EAAI,CAAC9d,EAAE,IACtB9B,EAAI,EAAGA,EAAI8B,EAAEX,SAAUnB,EAAK4f,EAAEhH,KAAK0qC,GAAM1jC,EAAEhH,KAAK9W,EAAE9B,IAC1D,OAAO4f,EAER,SAAS2jC,GAAWx5C,GACnB,OAAIA,EACDA,EAAKA,KAAag7B,GAAMh7B,EAAKA,MAC7BA,EAAKy5C,cAAgB1d,GAAgBf,GAAMh7B,EAAKy5C,eAAez3C,SAAS,WACxEhC,EAAK05C,SAAiB1e,GAAMh7B,EAAK05C,YACjC15C,EAAK25C,OAAS35C,EAAK25C,MAAMC,WAAmB5e,GAAM4d,GAAO33C,MAAM6F,UAAU7C,MAAM8C,KAAK/G,EAAK25C,MAAMC,aAAa,KAC5G55C,EAAKuB,SAAWvB,EAAKxH,KAAawiC,GAAM4d,GAAO54C,EAAKuB,UAChD,KANU,KA0BlB,SAASs4C,GAAeC,EAAKnQ,GAG5B,IAFA,IAAIzlC,EAAI41C,EAAI1O,WAAa,GAAK0O,EAAI7O,OAC9Br0B,EAAI+yB,EAAKr3B,cAAc/E,QAAQ,QAAS,MAAOsJ,EAAID,EAAErJ,QAAQ,MAAM,KAC/DtX,EAAE,EAAGA,EAAEiO,EAAE9M,SAAUnB,EAAG,CAC7B,IAAI+f,EAAI9R,EAAEjO,GAAGsX,QAAQ,kBAAkB,IAAI+E,cAC3C,GAAGsE,GAAKZ,GAAKa,GAAKb,EAAG,OAAO8jC,EAAI7O,MAAQ6O,EAAI7O,MAAM/mC,EAAEjO,IAAM6jD,EAAI3O,UAAUl1C,GAEzE,OAAO,KAGR,SAAS8jD,GAAWD,EAAKnQ,GACxB,IAAI9zB,EAAIgkC,GAAeC,EAAKnQ,GAC5B,GAAQ,MAAL9zB,EAAW,MAAM,IAAIhE,MAAM,oBAAsB83B,EAAO,WAC3D,OAAO9zB,EASR,SAASmkC,GAAUF,EAAKnQ,EAAiBsQ,GACxC,IAAIA,EAAM,OAAOT,GAAWO,GAAWD,EAAKnQ,IAC5C,IAAIA,EAAM,OAAO,KACjB,IAAM,OAAOqQ,GAAUF,EAAKnQ,GAAS,MAAM/nC,IAAK,OAAO,MAoBxD,SAASs4C,GAAS5tC,EAAGuJ,GACpB,IAAIikC,EACJ,OAAOjkC,EAAErd,MACR,IAAK,SAAUshD,EAAM3R,GAAIyF,KAAKthC,EAAG,CAAE9T,KAAM,WAAa,MACtD,IAAK,SAAUshD,EAAM3R,GAAIyF,KAAKthC,EAAG,CAAE9T,KAAM,WAAa,MACtD,IAAK,SAAU,IAAK,QAASshD,EAAM3R,GAAIyF,KAAKthC,EAAG,CAAE9T,KAAM,WAAa,MACpE,QAAS,MAAM,IAAIqZ,MAAM,qBAAuBgE,EAAErd,MAEnD,OAAOshD,EAeR,IAAIK,GAAa,8DACbC,GAAU,yEACVC,GAAS,+FAERF,GAAW3sC,MAAM6sC,MAAYA,GAAW,YAC7C,IAAqBC,GAAW,aAChC,SAASC,GAAYC,EAAgBC,EAAwBC,GAG5D,IAFA,IAAIC,EAAI,GACJC,EAAK,EAAGxkC,EAAI,EACVwkC,IAAOJ,EAAIpjD,SAAUwjD,EAAI,GAAgC,MAA5BxkC,EAAIokC,EAAI1f,WAAW8f,KAAqB,KAANxkC,GAAkB,KAANA,EAAU,MAE3F,GADIqkC,IAAWE,EAAE,GAAKH,EAAIv2C,MAAM,EAAG22C,IAChCA,IAAOJ,EAAIpjD,OAAQ,OAAOujD,EAC7B,IAAI/uC,EAAI4uC,EAAIhtC,MAAM4sC,IAAY51B,EAAE,EAAGR,EAAE,GAAI/tB,EAAE,EAAGipC,EAAE,GAAIuE,EAAG,GAAIoX,EAAO,EAClE,GAAGjvC,EAAG,IAAI3V,EAAI,EAAGA,GAAK2V,EAAExU,SAAUnB,EAAG,CAEpC,IADAwtC,EAAK73B,EAAE3V,GACHmgB,EAAE,EAAGA,GAAKqtB,EAAGrsC,SAAUgf,EAAG,GAAwB,KAArBqtB,EAAG3I,WAAW1kB,GAAW,MAC1D8oB,EAAIuE,EAAGx/B,MAAM,EAAEmS,GAAGghB,OAClB,MAA4B,IAAtBqM,EAAG3I,WAAW1kB,EAAE,KAAYA,EAGlC,IAFAykC,EAAmC,KAA1BD,EAAGnX,EAAG3I,WAAW1kB,EAAE,KAAmB,IAANwkC,EAAY,EAAI,EACzD52B,EAAIyf,EAAGx/B,MAAMmS,EAAE,EAAEykC,EAAMpX,EAAGrsC,OAAOyjD,GAC7Br2B,EAAE,EAAEA,GAAG0a,EAAE9nC,SAASotB,EAAG,GAAuB,KAApB0a,EAAEpE,WAAWtW,GAAW,MACpD,GAAGA,IAAI0a,EAAE9nC,OACL8nC,EAAEzmC,QAAQ,KAAO,IAAGymC,EAAIA,EAAEj7B,MAAM,EAAGi7B,EAAEzmC,QAAQ,OAChDkiD,EAAEzb,GAAKlb,EACH02B,IAASC,EAAEzb,EAAE5sB,eAAiB0R,OAE9B,CACJ,IAAI9f,GAAS,IAAJsgB,GAAwB,UAAf0a,EAAEj7B,MAAM,EAAE,GAAa,QAAQ,IAAIi7B,EAAEj7B,MAAMugB,EAAE,GAC/D,GAAGm2B,EAAEz2C,IAAwB,OAAlBg7B,EAAEj7B,MAAMugB,EAAE,EAAEA,GAAa,SACpCm2B,EAAEz2C,GAAK8f,EACH02B,IAASC,EAAEz2C,EAAEoO,eAAiB0R,IAGpC,OAAO22B,EAER,SAASG,GAAS7tC,GAA2B,OAAOA,EAAEM,QAAQ+sC,GAAU,OAExE,IAAIS,GAAY,CACf,SAAU,IACV,SAAU,IACV,OAAQ,IACR,OAAQ,IACR,QAAS,KAENC,GAAYjD,GAAMgD,IAIlBE,GAA6B,WAEhC,IAAIC,EAAW,+CAAgDC,EAAY,uBAC3E,OAAO,SAASF,EAAY7kD,GAC3B,IAAI2V,EAAI3V,EAAO,GAAIH,EAAI8V,EAAEtT,QAAQ,aACjC,IAAS,GAANxC,EAAS,OAAO8V,EAAEwB,QAAQ2tC,GAAU,SAAS3Y,EAAIC,GAAM,OAAOuY,GAAUxY,IAAKj1B,OAAOutB,aAAarpB,SAASgxB,EAAGD,EAAG9pC,QAAQ,MAAM,EAAE,GAAG,MAAM8pC,KAAOh1B,QAAQ4tC,GAAU,SAASvvC,EAAEwK,GAAI,OAAO9I,OAAOutB,aAAarpB,SAAS4E,EAAE,QAC1N,IAAIoO,EAAIzY,EAAEtT,QAAQ,OAClB,OAAOwiD,EAAYlvC,EAAE9H,MAAM,EAAGhO,IAAM8V,EAAE9H,MAAMhO,EAAE,EAAEuuB,GAAKy2B,EAAYlvC,EAAE9H,MAAMugB,EAAE,KAP5C,GAW7B42B,GAAS,WAAYC,GAAW,gCACpC,SAASC,GAAUllD,GAClB,IAAI2V,EAAI3V,EAAO,GACf,OAAO2V,EAAEwB,QAAQ6tC,IAAU,SAASxwC,GAAK,OAAOowC,GAAUpwC,MAAO2C,QAAQ8tC,IAAS,SAAStvC,GAAK,MAAO,MAAQ,MAAMA,EAAE+uB,WAAW,GAAG94B,SAAS,KAAKiC,OAAO,GAAK,OAIhK,IAAIs3C,GAAe,mBACnB,SAASC,GAAWplD,GACnB,IAAI2V,EAAI3V,EAAO,GACf,OAAO2V,EAAEwB,QAAQ6tC,IAAU,SAASxwC,GAAK,OAAOowC,GAAUpwC,MAAO2C,QAAQ,MAAO,SAASA,QAAQguC,IAAa,SAASxvC,GAAK,MAAO,OAAS,MAAMA,EAAE+uB,WAAW,GAAG94B,SAAS,KAAKiC,OAAO,GAAK,QAS5J,WAChC,IAAIw3C,EAAW,YACf,SAASC,EAAQnZ,EAAcC,GAA4B,OAAOl1B,OAAOutB,aAAarpB,SAASgxB,EAAG,MAFlE,GASjC,SAASmZ,GAAajmD,GACrB,OAAOA,GACN,KAAK,EAAG,KAAK,EAAM,IAAK,IAAK,IAAK,OAAQ,IAAK,OAAQ,OAAO,EAE9D,QAAS,OAAO,GAIlB,IAAIkmD,GAA0B,SAAmBC,GAChD,IAAIrc,EAAM,GAAIvpC,EAAI,EAAGmgB,EAAI,EAAG9J,EAAI,EAAG1K,EAAI,EAAGgV,EAAI,EAAG1J,EAAI,EACrD,MAAOjX,EAAI4lD,EAAKzkD,OACfgf,EAAIylC,EAAK/gB,WAAW7kC,KAChBmgB,EAAI,IAAOopB,GAAOlyB,OAAOutB,aAAazkB,IAC1C9J,EAAIuvC,EAAK/gB,WAAW7kC,KAChBmgB,EAAE,KAAOA,EAAE,KAAOQ,GAAU,GAAJR,IAAW,EAAIQ,GAAU,GAAJtK,EAASkzB,GAAOlyB,OAAOutB,aAAajkB,KACrFhV,EAAIi6C,EAAK/gB,WAAW7kC,KAChBmgB,EAAI,IAAOopB,GAAOlyB,OAAOutB,cAAmB,GAAJzkB,IAAW,IAAY,GAAJ9J,IAAW,EAAU,GAAJ1K,IAChFgV,EAAIilC,EAAK/gB,WAAW7kC,KACpBiX,IAAW,EAAJkJ,IAAU,IAAY,GAAJ9J,IAAW,IAAY,GAAJ1K,IAAW,EAAU,GAAJgV,GAAS,MACtE4oB,GAAOlyB,OAAOutB,aAAa,OAAW3tB,IAAI,GAAI,OAC9CsyB,GAAOlyB,OAAOutB,aAAa,OAAY,KAAF3tB,OAEtC,OAAOsyB,GA6BR,GAAGzD,GAAS,CACX,IAAI+f,GAAY,SAAmB97C,GAClC,IAAuCkN,EAAGjX,EAAuBmgB,EAA7DopB,EAAMxD,OAAOO,MAAM,EAAEv8B,EAAK5I,QAAeotB,EAAI,EAAGtgB,EAAI,EAAGiJ,EAAG,EAC9D,IAAIlX,EAAI,EAAGA,EAAI+J,EAAK5I,OAAQnB,GAAGuuB,EAC9BA,EAAI,GACApO,EAAEpW,EAAK86B,WAAW7kC,IAAM,IAAKiX,EAAIkJ,EAC7BA,EAAI,KAAOlJ,EAAW,IAAJ,GAAFkJ,IAA+B,GAArBpW,EAAK86B,WAAW7kC,EAAE,IAAQuuB,EAAE,GACtDpO,EAAI,KAAOlJ,EAAS,MAAJ,GAAFkJ,GAAqC,IAAJ,GAArBpW,EAAK86B,WAAW7kC,EAAE,KAAgC,GAArB+J,EAAK86B,WAAW7kC,EAAE,IAAQuuB,EAAE,IACpFA,EAAI,EACVtX,EAAY,QAAH,EAAJkJ,GAAwC,MAAJ,GAArBpW,EAAK86B,WAAW7kC,EAAE,IAAsC,IAAJ,GAArB+J,EAAK86B,WAAW7kC,EAAE,KAAgC,GAArB+J,EAAK86B,WAAW7kC,EAAE,IAClGiX,GAAK,MAAOC,EAAK,OAAWD,IAAI,GAAI,MAAOA,EAAI,OAAY,KAAFA,IAEhD,IAAPC,IAAYqyB,EAAIt7B,KAAU,IAAHiJ,EAAQqyB,EAAIt7B,KAAOiJ,IAAK,EAAGA,EAAK,GAC1DqyB,EAAIt7B,KAAOgJ,EAAE,IAAKsyB,EAAIt7B,KAAOgJ,IAAI,EAElC,OAAOsyB,EAAIv7B,MAAM,EAAEC,GAAGlC,SAAS,SAE5B+5C,GAAS,qBACVH,GAASG,KAAWD,GAAUC,MAASH,GAAWE,IACrD,IAAIE,GAAY,SAAmBh8C,GAAQ,OAAOm8B,GAAYn8B,EAAM,UAAUgC,SAAS,SACpF45C,GAASG,KAAWC,GAAUD,MAASH,GAAWI,IAEzC,SAASh8C,GAAQ,OAAOm8B,GAAYn8B,EAAM,QAAQgC,SAAS,WAIxE,IAAIi6C,GAAW,WACd,IAAIC,EAAkC,GACtC,OAAO,SAAkBtlC,EAAaC,GACrC,IAAI4mB,EAAI7mB,EAAE,KAAKC,GAAG,IAClB,OAAGqlC,EAAQze,GAAWye,EAAQze,GACtBye,EAAQze,GAAK,IAAI3rB,OAAO,cAAc8E,EAAE,+DAA+DA,EAAE,IAAMC,GAAG,KAL7G,GASXslC,GAAqC,WACxC,IAAIC,EAAuC,CAC1C,CAAC,OAAQ,KAAM,CAAC,SAAU,KAC1B,CAAC,OAAQ,KAAM,CAAC,OAAQ,KAAM,CAAC,KAAQ,KAAM,CAAC,KAAQ,KAAM,CAAC,MAAQ,MACpErqC,KAAI,SAAS9E,GAA0B,MAAO,CAAC,IAAI6E,OAAO,IAAM7E,EAAE,GAAK,IAAK,MAAOA,EAAE,OACvF,OAAO,SAAoBG,GAc1B,IAbA,IAAIyI,EAAIzI,EAELG,QAAQ,cAAe,IAEvBA,QAAQ,cAAc,IAEtBA,QAAQ,QAAQ,KAAKA,QAAQ,QAAQ,KAErCA,QAAQ,cAAe,KAEvBA,QAAQ,uBAAuB,MAE/BA,QAAQ,WAAW,IACdtX,EAAI,EAAGA,EAAImmD,EAAShlD,SAAUnB,EAAG4f,EAAIA,EAAEtI,QAAQ6uC,EAASnmD,GAAG,GAAImmD,EAASnmD,GAAG,IACnF,OAAO4f,GApBgC,IAwB3B,WAAa,IAAIwmC,EAAW,IAA5B,GAsBd,IAAIC,GAAU,eAGd,SAASC,GAAWvmD,GAAgB,OAAO,GAAKA,GAAG+b,KAAI,SAAS7N,GAAK,MAAO,IAAMA,EAAI,KAAOlO,EAAEkO,GAAK,OAAO8N,KAAK,IAChH,SAASwqC,GAAU5lC,EAAaC,EAAc7gB,GAAK,MAAO,IAAM4gB,GAAW,MAAL5gB,EAAaumD,GAAWvmD,GAAK,KAAa,MAAL6gB,GAAcA,EAAErJ,MAAM8uC,IAAS,wBAA0B,IAAM,IAAMzlC,EAAI,KAAOD,EAAI,KAAO,IAiBtM,IAAI6lC,GAAQ,CACX,GAAM,mCACN,QAAW,4BACX,SAAY,+BACZ,GAAM,0DACN,EAAK,sEACL,IAAO,yEACP,GAAM,uEACN,IAAO,4CACP,IAAO,mCAGR,KAAa,CACZ,4DACA,gDACA,sDACA,qDAYD,SAASC,GAAevmC,EAAuB+rB,GAI9C,IAHA,IAAIn2B,EAAI,EAAI,GAAKoK,EAAE+rB,EAAM,KAAO,GAC5BtgC,IAAmB,IAAbuU,EAAE+rB,EAAM,KAAc,IAAO/rB,EAAE+rB,EAAM,KAAO,EAAK,IACvDt2B,EAAc,GAATuK,EAAE+rB,EAAI,GACPjsC,EAAI,EAAGA,GAAK,IAAKA,EAAG2V,EAAQ,IAAJA,EAAUuK,EAAE+rB,EAAMjsC,GAClD,OAAQ,MAAL2L,EAAwB,GAALgK,EAAUG,GAAIyd,KAAYtiB,KACxC,GAALtF,EAAQA,GAAK,MACTA,GAAK,KAAMgK,GAAK7C,KAAKi1B,IAAI,EAAE,KAC3BjyB,EAAIhD,KAAKi1B,IAAI,EAAGp8B,EAAI,IAAMgK,GAGlC,SAAS+wC,GAAgBxmC,EAAuB6N,EAAcke,GAC7D,IAAI0a,GAAS54B,EAAI,GAAO,EAAEA,IAAMwF,IAAa,EAAI,IAAM,EAAI5nB,EAAI,EAAGgK,EAAI,EAClEixC,EAAKD,GAAO54B,EAAKA,EACjBvQ,SAASopC,GACC,GAANA,EAASj7C,EAAIgK,EAAI,GAExBhK,EAAImH,KAAKoB,MAAMpB,KAAKk4B,IAAI4b,GAAM9zC,KAAK+zC,KACnClxC,EAAIixC,EAAK9zC,KAAKi1B,IAAI,EAAG,GAAKp8B,GACtBA,IAAM,QAAW6R,SAAS7H,IAAOA,EAAI7C,KAAKi1B,IAAI,EAAE,KAASp8B,GAAK,MAC3DgK,GAAK7C,KAAKi1B,IAAI,EAAE,IAAKp8B,GAAG,QANZA,EAAI,KAAOgK,EAAIxE,MAAM4c,GAAK,MAAS,GAQvD,IAAI,IAAI/tB,EAAI,EAAGA,GAAK,IAAKA,EAAG2V,GAAG,IAAKuK,EAAE+rB,EAAMjsC,GAAS,IAAJ2V,EACjDuK,EAAE+rB,EAAM,IAAW,GAAJtgC,IAAa,EAAU,GAAJgK,EAClCuK,EAAE+rB,EAAM,GAAMtgC,GAAK,EAAKg7C,EAGzB,IAcIG,GAAQC,GAdRjQ,GAAa,SAAS9P,GAAmE,IAAlB,IAAIhwB,EAAE,GAAGC,EAAE,MAAejX,EAAE,EAAEA,EAAEgnC,EAAK,GAAG7lC,SAASnB,EAAG,GAAGgnC,EAAK,GAAGhnC,GAAI,IAAI,IAAIuuB,EAAE,EAAEujB,EAAE9K,EAAK,GAAGhnC,GAAGmB,OAAOotB,EAAEujB,EAAEvjB,GAAGtX,EAAGD,EAAE4B,KAAKxK,MAAM4I,EAAGgwB,EAAK,GAAGhnC,GAAGgO,MAAMugB,EAAEA,EAAEtX,IAAK,OAAOD,GACrOgwC,GAAclQ,GACdK,GAAY,SAASj3B,EAAsBpK,EAAanK,GAAwD,IAA7B,IAAIqK,EAAqB,GAAYhW,EAAE8V,EAAG9V,EAAE2L,EAAG3L,GAAG,EAAGgW,EAAG4C,KAAKvB,OAAOutB,aAAaqiB,GAAe/mC,EAAElgB,KAAM,OAAOgW,EAAG+F,KAAK,IAAIzE,QAAQ2vB,GAAK,KAC3NigB,GAAa/P,GACbgQ,GAAY,SAASjnC,EAAsBpK,EAAamO,GAAwD,IAA7B,IAAIjO,EAAqB,GAAYhW,EAAE8V,EAAG9V,EAAE8V,EAAEmO,IAAKjkB,EAAGgW,EAAG4C,MAAM,IAAMsH,EAAElgB,GAAG+L,SAAS,KAAKiC,OAAO,IAAK,OAAOgI,EAAG+F,KAAK,KACtMqrC,GAAaD,GACbE,GAAS,SAASnnC,EAAsBpK,EAAanK,GAA2B,IAAX,IAAIqK,EAAG,GAAYhW,EAAE8V,EAAG9V,EAAE2L,EAAG3L,IAAKgW,EAAG4C,KAAKvB,OAAOutB,aAAa0iB,GAAYpnC,EAAElgB,KAAM,OAAOgW,EAAG+F,KAAK,KACtKwrC,GAAUF,GACVG,GAAU,SAAStnC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI6zC,GAAOnnC,EAAGlgB,EAAE,EAAEA,EAAE,EAAEwT,EAAI,GAAK,IACpIi0C,GAAWD,GACXE,GAAU,SAASxnC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI6zC,GAAOnnC,EAAGlgB,EAAE,EAAEA,EAAE,EAAEwT,EAAI,GAAK,IACpIm0C,GAAWD,GACXE,GAAW,SAAS1nC,EAAsBlgB,GAAgB,IAAIwT,EAAM,EAAEgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI6zC,GAAOnnC,EAAGlgB,EAAE,EAAEA,EAAE,EAAEwT,EAAI,GAAK,IACvIq0C,GAAYD,GAEhBd,GAASC,GAAU,SAAe7mC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI2jC,GAAUj3B,EAAGlgB,EAAE,EAAEA,EAAE,EAAEwT,GAAO,IACpJ,IAEIs0C,GAAUC,GAFVC,GAAU,SAAS9nC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI6zC,GAAOnnC,EAAGlgB,EAAE,EAAEA,EAAE,EAAEwT,GAAO,IAClIy0C,GAAWD,GAEfF,GAAWC,GAAY,SAAS7nC,EAAuB+rB,GAAkB,OAAOwa,GAAevmC,EAAG+rB,IAG/FnG,KACFqR,GAAY,SAASj3B,EAAsBpK,EAAanK,GAA2B,OAAIo6B,OAAOmiB,SAAShoC,GAAqEA,EAAEnU,SAAS,UAAU+J,EAAEnK,GAAG2L,QAAQ2vB,GAAK,IAAjEigB,GAAWhnC,EAAEpK,EAAEnK,IACjKw7C,GAAY,SAASjnC,EAAsBpK,EAAamO,GAA2B,OAAO8hB,OAAOmiB,SAAShoC,GAAkCA,EAAEnU,SAAS,MAAM+J,EAAEA,EAAEmO,GAAKmjC,GAAWlnC,EAAEpK,EAAEmO,IACrLujC,GAAU,SAAiBtnC,EAAuBlgB,GAAgB,IAAI+lC,OAAOmiB,SAAShoC,GAAoC,OAAOunC,GAASvnC,EAAGlgB,GAAI,IAAIwT,EAAM0M,EAAEioC,aAAanoD,GAAI,OAAOwT,EAAM,EAAI0M,EAAEnU,SAAS,OAAO/L,EAAE,EAAEA,EAAE,EAAEwT,EAAI,GAAK,IAClOk0C,GAAU,SAAiBxnC,EAAuBlgB,GAAgB,IAAI+lC,OAAOmiB,SAAShoC,GAAoC,OAAOynC,GAASznC,EAAGlgB,GAAI,IAAIwT,EAAM0M,EAAEioC,aAAanoD,GAAI,OAAOwT,EAAM,EAAI0M,EAAEnU,SAAS,OAAO/L,EAAE,EAAEA,EAAE,EAAEwT,EAAI,GAAK,IAClOo0C,GAAW,SAAkB1nC,EAAuBlgB,GAAgB,IAAI+lC,OAAOmiB,SAAShoC,GAAoC,OAAO2nC,GAAU3nC,EAAGlgB,GAAI,IAAIwT,EAAM,EAAE0M,EAAEioC,aAAanoD,GAAI,OAAOkgB,EAAEnU,SAAS,UAAU/L,EAAE,EAAEA,EAAE,EAAEwT,EAAI,IAC3NszC,GAAS,SAAgB5mC,EAAuBlgB,GAAgB,IAAI+lC,OAAOmiB,SAAShoC,GAAoC,OAAO6mC,GAAQ7mC,EAAGlgB,GAAI,IAAIwT,EAAM0M,EAAEioC,aAAanoD,GAAI,OAAOkgB,EAAEnU,SAAS,UAAU/L,EAAE,EAAEA,EAAE,EAAEwT,IAC/Mw0C,GAAU,SAAiB9nC,EAAuBlgB,GAAgB,IAAI+lC,OAAOmiB,SAAShoC,GAAoC,OAAO+nC,GAAS/nC,EAAGlgB,GAAI,IAAIwT,EAAM0M,EAAEioC,aAAanoD,GAAI,OAAOkgB,EAAEnU,SAAS,OAAO/L,EAAE,EAAEA,EAAE,EAAEwT,IAC/M6zC,GAAS,SAAgBnnC,EAAuBpK,EAAcnK,GAAgB,OAAQo6B,OAAOmiB,SAAShoC,GAAqCA,EAAEnU,SAAS,OAAO+J,EAAEnK,GAAK47C,GAAQrnC,EAAEpK,EAAEnK,IAChLmrC,GAAa,SAAS9P,GAAQ,OAAQA,EAAK,GAAG7lC,OAAS,GAAK4kC,OAAOmiB,SAASlhB,EAAK,GAAG,IAAOjB,OAAOryB,OAAOszB,EAAK,IAAMggB,GAAYhgB,IAChID,GAAU,SAASC,GAAQ,OAAOjB,OAAOmiB,SAASlhB,EAAK,IAAMjB,OAAOryB,OAAOszB,GAAQ,GAAGtzB,OAAOtF,MAAM,GAAI44B,IACvG8gB,GAAW,SAAiB5nC,EAAuBlgB,GAAgB,OAAG+lC,OAAOmiB,SAAShoC,GAAuCA,EAAEkoC,aAAapoD,GAAW+nD,GAAU7nC,EAAElgB,KAK9I,qBAAZqoD,UACTlR,GAAY,SAASj3B,EAAsBpK,EAAanK,GAAgB,OAAO08C,QAAQvH,MAAMjb,OAAO,KAAM3lB,EAAElS,MAAM8H,EAAEnK,IAAI2L,QAAQ2vB,GAAM,KACtIogB,GAAS,SAASnnC,EAAsBpK,EAAanK,GAAgB,OAAO08C,QAAQvH,MAAMjb,OAAO,MAAO3lB,EAAElS,MAAM8H,EAAEnK,KAClH67C,GAAU,SAAStnC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI60C,QAAQvH,MAAMjb,OAAO5C,GAAc/iB,EAAElS,MAAMhO,EAAE,EAAGA,EAAE,EAAEwT,EAAI,IAAM,IACvKk0C,GAAU,SAASxnC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI60C,QAAQvH,MAAMjb,OAAO7C,GAAkB9iB,EAAElS,MAAMhO,EAAE,EAAGA,EAAE,EAAEwT,EAAI,IAAM,IAC3Ko0C,GAAW,SAAS1nC,EAAsBlgB,GAAgB,IAAIwT,EAAM,EAAEgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI60C,QAAQvH,MAAMjb,OAAO,KAAM3lB,EAAElS,MAAMhO,EAAE,EAAEA,EAAE,EAAEwT,EAAI,IAAM,IACjKszC,GAAS,SAAS5mC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI60C,QAAQvH,MAAMjb,OAAO,KAAM3lB,EAAElS,MAAMhO,EAAE,EAAEA,EAAE,EAAEwT,IAAQ,IAC3Jw0C,GAAU,SAAS9nC,EAAsBlgB,GAAgB,IAAIwT,EAAMgkC,GAAet3B,EAAElgB,GAAI,OAAOwT,EAAM,EAAI60C,QAAQvH,MAAMjb,OAAO,MAAO3lB,EAAElS,MAAMhO,EAAE,EAAEA,EAAE,EAAEwT,IAAQ,KAG9J,IAAI8zC,GAAc,SAASpnC,EAAuB+rB,GAA6B,OAAO/rB,EAAE+rB,IACpFgb,GAAiB,SAAS/mC,EAAuB+rB,GAA6B,OAAiB,IAAT/rB,EAAE+rB,EAAI,GAAW/rB,EAAE+rB,IACzGqc,GAAgB,SAASpoC,EAAuB+rB,GAA6B,IAAIxC,EAAc,IAATvpB,EAAE+rB,EAAI,GAAW/rB,EAAE+rB,GAAM,OAAQxC,EAAI,MAAUA,GAAyB,GAAnB,MAASA,EAAI,IACxJ+N,GAAiB,SAASt3B,EAAuB+rB,GAA6B,OAAO/rB,EAAE+rB,EAAI,IAAI,GAAG,KAAK/rB,EAAE+rB,EAAI,IAAI,KAAK/rB,EAAE+rB,EAAI,IAAI,GAAG/rB,EAAE+rB,IACrImK,GAAgB,SAASl2B,EAAuB+rB,GAA6B,OAAQ/rB,EAAE+rB,EAAI,IAAI,GAAK/rB,EAAE+rB,EAAI,IAAI,GAAK/rB,EAAE+rB,EAAI,IAAI,EAAG/rB,EAAE+rB,IAClIsc,GAAgB,SAASroC,EAAuB+rB,GAA6B,OAAQ/rB,EAAE+rB,IAAM,GAAK/rB,EAAE+rB,EAAI,IAAI,GAAK/rB,EAAE+rB,EAAI,IAAI,EAAG/rB,EAAE+rB,EAAI,IAExI,SAASqV,GAAU3+B,EAAiB6kB,GACnC,IAAUghB,EAAsBC,EAAWxxC,EAAGy4B,EAAI1vC,EAAG0oD,EAAjD9oC,EAAE,GAA8B+oC,EAAG,GACvC,OAAOnhB,GACN,IAAK,OAEJ,GADAkhB,EAAM5pD,KAAKmlB,EACR6hB,IAAWC,OAAOmiB,SAASppD,MAAO8gB,EAAI9gB,KAAKkP,MAAMlP,KAAKmlB,EAAGnlB,KAAKmlB,EAAE,EAAEtB,GAAM5W,SAAS,gBAC/E,IAAI/L,EAAI,EAAGA,EAAI2iB,IAAQ3iB,EAAK4f,GAAGvI,OAAOutB,aAAaqiB,GAAenoD,KAAM4pD,IAAOA,GAAK,EACzF/lC,GAAQ,EACR,MAED,IAAK,OAAQ/C,EAAIynC,GAAOvoD,KAAMA,KAAKmlB,EAAGnlB,KAAKmlB,EAAItB,GAAO,MACtD,IAAK,UAAWA,GAAQ,EAAG/C,EAAIu3B,GAAUr4C,KAAMA,KAAKmlB,EAAGnlB,KAAKmlB,EAAItB,GAAO,MAEvE,IAAK,OACJ,GAAsB,qBAAZ0lC,QACL,OAAO/G,GAAUxwC,KAAKhS,KAAM6jB,EAAM,QADJ/C,EAAIyoC,QAAQvH,MAAMjb,OAAO7C,GAAkBlkC,KAAKkP,MAAMlP,KAAKmlB,EAAGnlB,KAAKmlB,EAAE,EAAEtB,IAE1GA,GAAO,EAAU,MAGlB,IAAK,aAAc/C,EAAI4nC,GAAQ1oD,KAAMA,KAAKmlB,GAAItB,EAAO,EAAI60B,GAAe14C,KAAMA,KAAKmlB,GAAI,MACvF,IAAK,WAAYrE,EAAI8nC,GAAQ5oD,KAAMA,KAAKmlB,GAAItB,EAAO,EAAI60B,GAAe14C,KAAMA,KAAKmlB,GAAI,MAErF,IAAK,SAAUrE,EAAIgoC,GAAS9oD,KAAMA,KAAKmlB,GAAItB,EAAO,EAAI,EAAI60B,GAAe14C,KAAMA,KAAKmlB,GAAI,MAExF,IAAK,OAAQtB,EAAO,EAAK60B,GAAe14C,KAAMA,KAAKmlB,GAAIrE,EAAIknC,GAAOhoD,KAAMA,KAAKmlB,GAAc,EAAPtB,IAAaA,GAAQ,GAAG,MAE5G,IAAK,QAASA,EAAO,EAAK60B,GAAe14C,KAAMA,KAAKmlB,GAAIrE,EAAIooC,GAAQlpD,KAAMA,KAAKmlB,GAAc,EAAPtB,IAAaA,GAAQ,GAAY,EAAPA,IAAc,MAE9H,IAAK,OAAQA,EAAO,EAAG/C,EAAI,GAC1B,MAA+C,KAAxC3I,EAAEqwC,GAAYxoD,KAAMA,KAAKmlB,EAAItB,MAAcgmC,EAAG/vC,KAAKssB,GAASjuB,IACnE2I,EAAI+oC,EAAG5sC,KAAK,IAAK,MAClB,IAAK,QAAS4G,EAAO,EAAG/C,EAAI,GAC3B,MAA8C,KAAvC3I,EAAEgwC,GAAenoD,KAAKA,KAAKmlB,EAAGtB,IAAYgmC,EAAG/vC,KAAKssB,GAASjuB,IAAI0L,GAAM,EAC5EA,GAAM,EAAG/C,EAAI+oC,EAAG5sC,KAAK,IAAK,MAG3B,IAAK,YACJ,IADiB6D,EAAI,GAAI8oC,EAAM5pD,KAAKmlB,EAChCjkB,EAAI,EAAGA,EAAI2iB,IAAQ3iB,EAAG,CACzB,GAAGlB,KAAK8pD,OAAoC,IAA5B9pD,KAAK8pD,KAAKpmD,QAAQkmD,GAIjC,OAHAzxC,EAAIqwC,GAAYxoD,KAAM4pD,GACtB5pD,KAAKmlB,EAAIykC,EAAM,EACfhZ,EAAK4R,GAAUxwC,KAAKhS,KAAM6jB,EAAK3iB,EAAGiX,EAAI,YAAc,aAC7C0xC,EAAG5sC,KAAK,IAAM2zB,EAEtBiZ,EAAG/vC,KAAKssB,GAAS+hB,GAAenoD,KAAM4pD,KACtCA,GAAK,EACJ9oC,EAAI+oC,EAAG5sC,KAAK,IAAK4G,GAAQ,EAAG,MAE/B,IAAK,QACJ,GAAsB,qBAAZ0lC,QAAyB,CAClCzoC,EAAIyoC,QAAQvH,MAAMjb,OAAO7C,GAAkBlkC,KAAKkP,MAAMlP,KAAKmlB,EAAGnlB,KAAKmlB,EAAItB,IACvE,MAGF,IAAK,YACJ,IADiB/C,EAAI,GAAI8oC,EAAM5pD,KAAKmlB,EAChCjkB,EAAI,EAAGA,GAAK2iB,IAAQ3iB,EAAG,CAC1B,GAAGlB,KAAK8pD,OAAoC,IAA5B9pD,KAAK8pD,KAAKpmD,QAAQkmD,GAIjC,OAHAzxC,EAAIqwC,GAAYxoD,KAAM4pD,GACtB5pD,KAAKmlB,EAAIykC,EAAM,EACfhZ,EAAK4R,GAAUxwC,KAAKhS,KAAM6jB,EAAK3iB,EAAGiX,EAAI,YAAc,aAC7C0xC,EAAG5sC,KAAK,IAAM2zB,EAEtBiZ,EAAG/vC,KAAKssB,GAASoiB,GAAYxoD,KAAM4pD,KACnCA,GAAK,EACJ9oC,EAAI+oC,EAAG5sC,KAAK,IAAK,MAEpB,QACD,OAAO4G,GACN,KAAK,EAA6C,OAA1C6lC,EAAKlB,GAAYxoD,KAAMA,KAAKmlB,GAAInlB,KAAKmlB,IAAYukC,EACzD,KAAK,EAAiF,OAA9EA,GAAY,MAANhhB,EAAY8gB,GAAgBrB,IAAgBnoD,KAAMA,KAAKmlB,GAAInlB,KAAKmlB,GAAK,EAAUukC,EAC7F,KAAK,EAAG,KAAM,EACb,MAAS,MAANhhB,GAAwC,KAAR,IAAjB1oC,KAAKA,KAAKmlB,EAAE,KAAmBukC,GAAO7lC,EAAO,EAAKyzB,GAAgBmS,IAAezpD,KAAMA,KAAKmlB,GAAInlB,KAAKmlB,GAAK,EAAUukC,IAC/HC,EAAKjR,GAAe14C,KAAMA,KAAKmlB,GAAInlB,KAAKmlB,GAAK,EAAYwkC,GACjE,KAAK,EAAG,KAAM,EACb,GAAS,MAANjhB,EAGW,OAFCihB,EAAH,GAAR9lC,EAAgBmlC,GAAShpD,KAAMA,KAAKmlB,GAC7B6jC,GAAS,CAAChpD,KAAKA,KAAKmlB,EAAE,GAAGnlB,KAAKA,KAAKmlB,EAAE,GAAGnlB,KAAKA,KAAKmlB,EAAE,GAAGnlB,KAAKA,KAAKmlB,EAAE,GAAGnlB,KAAKA,KAAKmlB,EAAE,GAAGnlB,KAAKA,KAAKmlB,EAAE,GAAGnlB,KAAKA,KAAKmlB,EAAE,GAAGnlB,KAAKA,KAAKmlB,EAAE,IAAK,GAC9InlB,KAAKmlB,GAAK,EAAUwkC,EACd9lC,EAAO,EAEf,KAAK,GAAI/C,EAAIunC,GAAUroD,KAAMA,KAAKmlB,EAAGtB,GAAO,OAE/B,OAAd7jB,KAAKmlB,GAAGtB,EAAa/C,EAGtB,IAAIipC,GAAkB,SAAS3oC,EAAuB3M,EAAgB04B,GAA2B/rB,EAAE+rB,GAAc,IAAN14B,EAAa2M,EAAE+rB,EAAI,GAAO14B,IAAQ,EAAK,IAAO2M,EAAE+rB,EAAI,GAAO14B,IAAQ,GAAM,IAAO2M,EAAE+rB,EAAI,GAAO14B,IAAQ,GAAM,KAClNu1C,GAAkB,SAAS5oC,EAAuB3M,EAAgB04B,GAA2B/rB,EAAE+rB,GAAc,IAAN14B,EAAa2M,EAAE+rB,EAAI,GAAO14B,GAAO,EAAK,IAAO2M,EAAE+rB,EAAI,GAAO14B,GAAO,GAAM,IAAO2M,EAAE+rB,EAAI,GAAO14B,GAAO,GAAM,KAC/Mw1C,GAAkB,SAAS7oC,EAAuB3M,EAAgB04B,GAA2B/rB,EAAE+rB,GAAc,IAAN14B,EAAa2M,EAAE+rB,EAAI,GAAO14B,IAAQ,EAAK,KAElJ,SAASy1C,GAAWxhB,EAAcj0B,EAAuBoN,GACxD,IAAIgC,EAAO,EAAG3iB,EAAI,EAClB,GAAS,SAAN2gB,EAAc,CAEhB,IAAI3gB,EAAI,EAAGA,GAAKuT,EAAIpS,SAAUnB,EAAG+oD,GAAgBjqD,KAAMyU,EAAIsxB,WAAW7kC,GAAIlB,KAAKmlB,EAAI,EAAIjkB,GACvF2iB,EAAO,EAAIpP,EAAIpS,YACT,GAAS,SAANwf,EAAc,CACvB,GAAsB,qBAAZ0nC,SAA2C,KAAhBplB,GAGpC,IAAIjjC,EAAI,EAAGA,GAAKuT,EAAIpS,SAAUnB,EAAG,CAChC,IAAIipD,EAAYZ,QAAQvH,MAAMvb,OAAOtC,GAAc1vB,EAAI+I,OAAOtc,IAC9DlB,KAAKA,KAAKmlB,EAAIjkB,GAAKipD,EAAU,QAM9B,IAFA11C,EAAMA,EAAI+D,QAAQ,gBAAiB,KAE/BtX,EAAI,EAAGA,GAAKuT,EAAIpS,SAAUnB,EAAGlB,KAAKA,KAAKmlB,EAAIjkB,GAA0B,IAApBuT,EAAIsxB,WAAW7kC,GAErE2iB,EAAOpP,EAAIpS,WACL,IAAS,QAANwf,EAAa,CACtB,KAAM3gB,EAAIwnC,IAAKxnC,EAEdlB,KAAKA,KAAKmlB,KAAQ1I,SAAShI,EAAIvF,MAAM,EAAEhO,EAAG,EAAEA,EAAE,GAAI,KAAK,EACtD,OAAOlB,KACH,GAAS,YAAN6hB,EAAiB,CAEzB,IAAIoS,EAAiBjgB,KAAKyP,IAAIzjB,KAAKmlB,EAAIujB,EAAG1oC,KAAKqC,QAC/C,IAAInB,EAAI,EAAGA,EAAI8S,KAAKyP,IAAIhP,EAAIpS,OAAQqmC,KAAMxnC,EAAG,CAC5C,IAAIwtC,EAAKj6B,EAAIsxB,WAAW7kC,GACxBlB,KAAKA,KAAKmlB,KAAa,IAALupB,EAClB1uC,KAAKA,KAAKmlB,KAAQupB,GAAM,EAEzB,MAAM1uC,KAAKmlB,EAAI8O,EAAKj0B,KAAKA,KAAKmlB,KAAO,EACrC,OAAOnlB,KACkC,OAAO0oC,GACjD,KAAM,EAAG7kB,EAAO,EAAG7jB,KAAKA,KAAKmlB,GAAS,IAAJ1Q,EAAU,MAC5C,KAAM,EAAGoP,EAAO,EAAG7jB,KAAKA,KAAKmlB,GAAS,IAAJ1Q,EAAUA,KAAS,EAAGzU,KAAKA,KAAKmlB,EAAE,GAAS,IAAJ1Q,EAAU,MACnF,KAAM,EAAGoP,EAAO,EAAG7jB,KAAKA,KAAKmlB,GAAS,IAAJ1Q,EAAUA,KAAS,EAAGzU,KAAKA,KAAKmlB,EAAE,GAAS,IAAJ1Q,EAAUA,KAAS,EAAGzU,KAAKA,KAAKmlB,EAAE,GAAS,IAAJ1Q,EAAU,MAC1H,KAAM,EAAGoP,EAAO,EAAGkmC,GAAgB/pD,KAAMyU,EAAKzU,KAAKmlB,GAAI,MACvD,KAAM,EAAa,GAAVtB,EAAO,EAAY,MAANhC,EAAW,CAAE+lC,GAAgB5nD,KAAMyU,EAAKzU,KAAKmlB,GAAI,MAEvE,KAAK,GAAI,MACT,KAAM,EAAGtB,EAAO,EAAGmmC,GAAehqD,KAAMyU,EAAKzU,KAAKmlB,GAAI,OAEvC,OAAhBnlB,KAAKmlB,GAAKtB,EAAa7jB,KAGxB,SAASyiD,GAAW2H,EAAmBC,GACtC,IAAIxzC,EAAIwxC,GAAUroD,KAAKA,KAAKmlB,EAAEilC,EAAO/nD,QAAQ,GAC7C,GAAGwU,IAAMuzC,EAAQ,MAAM,IAAIttC,MAAMutC,EAAM,YAAcD,EAAS,QAAUvzC,GACxE7W,KAAKmlB,GAAKilC,EAAO/nD,QAAQ,EAG1B,SAAS8xC,GAAUD,EAAMoW,GACxBpW,EAAK/uB,EAAImlC,EACTpW,EAAKH,WAAoByO,GACzBtO,EAAKyB,IAAM8M,GACXvO,EAAKN,YAAcsW,GAGpB,SAASK,GAAUrW,EAAM7xC,GAAoC6xC,EAAK/uB,GAAK9iB,EAEvE,SAASk1C,GAAQlD,GAChB,IAAIvzB,EAAI4mB,GAAY2M,GAEpB,OADAF,GAAUrzB,EAAG,GACNA,EAwBR,SAAS0pC,KACR,IAAItiB,EAAwB,GAAIuiB,EAAQzjB,GAAU,IAAM,KACpD0jB,EAAS,SAAmBrW,GAC/B,IAAIvzB,EAAey2B,GAAQlD,GAE3B,OADAF,GAAUrzB,EAAG,GACNA,GAGJ6pC,EAAmBD,EAAOD,GAE1BG,EAAS,WACRD,IACDA,EAAOtoD,OAASsoD,EAAOxlC,IAAKwlC,EAASA,EAAOz7C,MAAM,EAAGy7C,EAAOxlC,GAAIwlC,EAAOxlC,EAAIwlC,EAAOtoD,QAClFsoD,EAAOtoD,OAAS,GAAG6lC,EAAKpuB,KAAK6wC,GAChCA,EAAS,OAGNzhD,EAAO,SAAiBmrC,GAC3B,OAAGsW,GAAWtW,EAAMsW,EAAOtoD,OAASsoD,EAAOxlC,EAAYwlC,GACvDC,IACQD,EAASD,EAAO12C,KAAKme,IAAIkiB,EAAG,EAAGoW,MAGpCx2B,EAAM,WAET,OADA22B,IACO5S,GAAW,CAAC9P,KAGhBpuB,EAAO,SAAiBwtB,GAAOsjB,IAAUD,EAASrjB,EAAoB,MAAZqjB,EAAOxlC,IAAWwlC,EAAOxlC,EAAIwlC,EAAOtoD,QAAQ6G,EAAKuhD,IAE/G,MAAO,CAAGvhD,KAAKA,EAAM4Q,KAAKA,EAAMma,IAAIA,EAAK42B,MAAM3iB,GAsBhD,SAAS4iB,GAAe5/C,EAAsBopC,EAAajK,GAC1D,IAAII,EAAMqZ,GAAI54C,GAQd,GAPGopC,EAAIt9B,GACHyzB,EAAIsgB,OAAMtgB,EAAIppB,GAAKizB,EAAIt9B,EAAEqK,GACzBopB,EAAIugB,OAAMvgB,EAAIqD,GAAKwG,EAAIt9B,EAAE82B,KAEzBrD,EAAIsgB,OAAMtgB,EAAIppB,GAAKizB,EAAIjzB,GACvBopB,EAAIugB,OAAMvgB,EAAIqD,GAAKwG,EAAIxG,KAEvBzD,GAAQA,EAAK4gB,KAAO,GAAI,CAC3B,MAAMxgB,EAAIppB,GAAK,IAAOopB,EAAIppB,GAAK,IAC/B,MAAMopB,EAAIqD,GAAK,MAASrD,EAAIqD,GAAK,MAElC,OAAOrD,EAGR,SAASygB,GAAgBhgD,EAAM4qB,EAAOuU,GACrC,IAAII,EAAMqZ,GAAI54C,GAGd,OAFAu/B,EAAIzzB,EAAI8zC,GAAergB,EAAIzzB,EAAG8e,EAAM9e,EAAGqzB,GACvCI,EAAI59B,EAAIi+C,GAAergB,EAAI59B,EAAGipB,EAAM9e,EAAGqzB,GAChCI,EAGR,SAAS0gB,GAAgB9pC,EAAmB4pC,GAC3C,GAAG5pC,EAAE0pC,MAAQ1pC,EAAEA,EAAI,EAAG,CAAEA,EAAIyiC,GAAIziC,GAAI,MAAMA,EAAEA,EAAI,EAAGA,EAAEA,GAAM4pC,EAAO,EAAK,MAAS,IAChF,GAAG5pC,EAAE2pC,MAAQ3pC,EAAEysB,EAAI,EAAG,CAAEzsB,EAAIyiC,GAAIziC,GAAI,MAAMA,EAAEysB,EAAI,EAAGzsB,EAAEysB,GAAMmd,EAAO,EAAK,QAAaA,EAAO,EAAK,MAAU,MAC1G,IAAIj0C,EAAIo0C,GAAY/pC,GAGpB,OAFIA,EAAE0pC,MAAkB,MAAV1pC,EAAE0pC,OAAc/zC,EAAIq0C,GAAQr0C,IACtCqK,EAAE2pC,MAAkB,MAAV3pC,EAAE2pC,OAAch0C,EAAIs0C,GAAQt0C,IACnCA,EAGR,SAASu0C,GAAiBzd,EAAGzD,GAC5B,OAAY,GAATyD,EAAE92B,EAAE82B,GAAWA,EAAE92B,EAAEg0C,MAClBld,EAAEjhC,EAAEihC,IAAMzD,EAAK4gB,MAAQ,GAAK,QAAW5gB,EAAK4gB,MAAQ,EAAI,MAAU,QAAand,EAAEjhC,EAAEm+C,KAI3E,GAATld,EAAE92B,EAAEqK,GAAWysB,EAAE92B,EAAE+zC,MAClBjd,EAAEjhC,EAAEwU,IAAMgpB,EAAK4gB,MAAQ,GAAK,MAAS,MAAUnd,EAAEjhC,EAAEk+C,KAIhDI,GAAgBrd,EAAE92B,EAAGqzB,EAAK4gB,MAAQ,IAAME,GAAgBrd,EAAEjhC,EAAGw9B,EAAK4gB,OAH/Dnd,EAAE92B,EAAEg0C,KAAO,GAAK,KAAOQ,GAAW1d,EAAE92B,EAAE82B,GAAK,KAAOA,EAAEjhC,EAAEm+C,KAAO,GAAK,KAAOQ,GAAW1d,EAAEjhC,EAAEihC,IALxFA,EAAE92B,EAAE+zC,KAAO,GAAK,KAAOU,GAAW3d,EAAE92B,EAAEqK,GAAK,KAAOysB,EAAEjhC,EAAEk+C,KAAO,GAAK,KAAOU,GAAW3d,EAAEjhC,EAAEwU,GAUnG,SAASqqC,GAAWC,GAAgC,OAAOlvC,SAASmvC,GAAUD,GAAQ,IAAM,EAC5F,SAASH,GAAWrgD,GAA6B,MAAO,IAAMA,EAAM,GACpE,SAASmgD,GAAQO,GAA8B,OAAOA,EAAKrzC,QAAQ,kBAAkB,UACrF,SAASozC,GAAUC,GAA8B,OAAOA,EAAKrzC,QAAQ,WAAW,MAEhF,SAASszC,GAAWC,GAAyE,IAAzC,IAAI1qC,EAAI2qC,GAAUD,GAASx0C,EAAI,EAAGrW,EAAI,EAASA,IAAMmgB,EAAEhf,SAAUnB,EAAGqW,EAAI,GAAGA,EAAI8J,EAAE0kB,WAAW7kC,GAAK,GAAI,OAAOqW,EAAI,EACpK,SAASk0C,GAAWt8B,GAA6B,GAAGA,EAAM,EAAG,MAAM,IAAIrS,MAAM,kBAAoBqS,GAAM,IAAInY,EAAE,GAAI,MAAMmY,EAAKA,EAAKA,EAAInb,KAAKoB,OAAO+Z,EAAI,GAAG,IAAKnY,EAAIuB,OAAOutB,cAAe3W,EAAI,GAAG,GAAM,IAAMnY,EAAG,OAAOA,EACpN,SAASq0C,GAAQQ,GAA8B,OAAOA,EAAKrzC,QAAQ,WAAW,QAC9E,SAASwzC,GAAUH,GAA8B,OAAOA,EAAKrzC,QAAQ,aAAa,MAElF,SAASyzC,GAAWJ,GAAqC,OAAOA,EAAKrzC,QAAQ,sBAAsB,SAASwW,MAAM,KAElH,SAASk9B,GAAYL,GAEpB,IADA,IAAItY,EAAI,EAAGR,EAAI,EACP7xC,EAAI,EAAGA,EAAI2qD,EAAKxpD,SAAUnB,EAAG,CACpC,IAAIwtC,EAAKmd,EAAK9lB,WAAW7kC,GACtBwtC,GAAM,IAAMA,GAAM,GAAI6E,EAAI,GAAKA,GAAK7E,EAAK,IACpCA,GAAM,IAAMA,GAAM,KAAIqE,EAAI,GAAKA,GAAKrE,EAAK,KAElD,MAAO,CAAErtB,EAAG0xB,EAAI,EAAGjF,EAAEyF,EAAI,GAG1B,SAAS6X,GAAYlgD,GAGpB,IAFA,IAAIikB,EAAMjkB,EAAKmW,EAAI,EACfrK,EAAE,GACAmY,EAAKA,GAAMA,EAAI,GAAG,GAAI,EAAGnY,EAAIuB,OAAOutB,cAAe3W,EAAI,GAAG,GAAM,IAAMnY,EAC5E,OAAOA,GAAK9L,EAAK4iC,EAAI,GAEtB,SAASqe,GAAar2B,GACrB,IAAIqX,EAAMrX,EAAMpyB,QAAQ,KACxB,OAAW,GAARypC,EAAkB,CAAEn2B,EAAGk1C,GAAYp2B,GAAQjpB,EAAGq/C,GAAYp2B,IACtD,CAAE9e,EAAGk1C,GAAYp2B,EAAM5mB,MAAM,EAAGi+B,IAAOtgC,EAAGq/C,GAAYp2B,EAAM5mB,MAAMi+B,EAAM,KAGhF,SAASif,GAAaC,EAA0BC,GAC/C,MAAiB,qBAAPA,GAAoC,kBAAPA,EAE/BF,GAAaC,EAAGr1C,EAAGq1C,EAAGx/C,IAGb,kBAAPw/C,IAAiBA,EAAKjB,GAAY,IAC3B,kBAAPkB,IAAiBA,EAAKlB,GAAY,IAGrCiB,GAAMC,EAAKD,EAAKA,EAAK,IAAMC,GAGnC,SAASC,GAAkBz2B,GAC1B,IAAIhV,EAAI,CAAC9J,EAAE,CAACqK,EAAE,EAAEysB,EAAE,GAAGjhC,EAAE,CAACwU,EAAE,EAAEysB,EAAE,IAC1BX,EAAM,EAAGjsC,EAAI,EAAGwtC,EAAK,EACrBh6B,EAAMohB,EAAMzzB,OAChB,IAAI8qC,EAAM,EAAGjsC,EAAIwT,IAAOxT,EAAG,CAC1B,IAAIwtC,EAAG5Y,EAAMiQ,WAAW7kC,GAAG,IAAM,GAAKwtC,EAAK,GAAI,MAC/CvB,EAAM,GAAGA,EAAMuB,EAIhB,IAFA5tB,EAAE9J,EAAEqK,IAAM8rB,EAENA,EAAM,EAAGjsC,EAAIwT,IAAOxT,EAAG,CAC1B,IAAIwtC,EAAG5Y,EAAMiQ,WAAW7kC,GAAG,IAAM,GAAKwtC,EAAK,EAAG,MAC9CvB,EAAM,GAAGA,EAAMuB,EAIhB,GAFA5tB,EAAE9J,EAAE82B,IAAMX,EAEPjsC,IAAMwT,GAAiC,KAA1BohB,EAAMiQ,aAAa7kC,GAAuC,OAA1B4f,EAAEjU,EAAEwU,EAAEP,EAAE9J,EAAEqK,EAAGP,EAAEjU,EAAEihC,EAAEhtB,EAAE9J,EAAE82B,EAAUhtB,EAEjF,IAAIqsB,EAAM,EAAGjsC,GAAKwT,IAAOxT,EAAG,CAC3B,IAAIwtC,EAAG5Y,EAAMiQ,WAAW7kC,GAAG,IAAM,GAAKwtC,EAAK,GAAI,MAC/CvB,EAAM,GAAGA,EAAMuB,EAIhB,IAFA5tB,EAAEjU,EAAEwU,IAAM8rB,EAENA,EAAM,EAAGjsC,GAAKwT,IAAOxT,EAAG,CAC3B,IAAIwtC,EAAG5Y,EAAMiQ,WAAW7kC,GAAG,IAAM,GAAKwtC,EAAK,EAAG,MAC9CvB,EAAM,GAAGA,EAAMuB,EAGhB,OADA5tB,EAAEjU,EAAEihC,IAAMX,EACHrsB,EAGR,SAAS0rC,GAAiBthD,EAAe+jB,GACxC,IAAIkb,EAAe,KAAVj/B,EAAKw9B,GAAYzZ,aAAand,KACvC,GAAa,MAAV5G,EAAK06C,EAAW,IAAM,OAAQ16C,EAAKiN,EAAIkwB,GAAI52B,OAAOvG,EAAK06C,EAAGzb,EAAIgZ,GAAQl0B,GAAKA,GAAO,MAAMpiB,KAC3F,IAAM,OAAQ3B,EAAKiN,EAAIkwB,GAAI52B,QAAQvG,EAAKuhD,IAAI,IAAIC,WAAWviB,EAAI,GAAK,GAAKA,EAAIgZ,GAAQl0B,GAAKA,GAAO,MAAMpiB,IAAK,MAAO,GAAGoiB,GAGvH,SAAS09B,GAAYzhD,EAAe+jB,EAAWnO,GAC9C,OAAW,MAAR5V,GAA0B,MAAVA,EAAKw9B,GAAuB,KAAVx9B,EAAKw9B,EAAiB,QAC7Cj2B,IAAXvH,EAAKiN,EAAwBjN,EAAKiN,GACxB,KAAVjN,EAAKw9B,IAAax9B,EAAK06C,GAAK9kC,GAAKA,EAAE4wB,SAAQxmC,EAAK06C,EAAI9kC,EAAE4wB,QAC5C,KAAVxmC,EAAKw9B,EAAiBkkB,GAAK1hD,EAAK+jB,IAAM/jB,EAAK+jB,EACpBu9B,GAAiBthD,OAAnCuH,GAALwc,EAA8C/jB,EAAK+jB,EACxBA,IAG/B,SAAS49B,GAAkBC,EAAqBziB,GAC/C,IAAIppB,EAAIopB,GAAQA,EAAKyiB,MAAQziB,EAAKyiB,MAAQ,SACtCC,EAAS,GACb,OADiBA,EAAO9rC,GAAK6rC,EACtB,CAAEE,WAAY,CAAC/rC,GAAIgsC,OAAQF,GAGnC,SAASG,GAAcC,EAAoBliD,EAAco/B,GACxD,IAAIvpB,EAAIupB,GAAQ,GACZ+iB,EAAQD,EAAMjhD,MAAMkN,QAAQ+zC,GAAOrsC,EAAEssC,MAC7B,MAAT9mB,IAA0B,MAAT8mB,IAAeA,EAAQ9mB,IAC3C,IAAI+mB,EAAmBF,IAAQC,EAAQ,GAAe,IAClDE,EAAK,EAAGC,EAAK,EACjB,GAAGF,GAAkB,MAAZvsC,EAAE0sC,OAAgB,CAC1B,GAAsB,iBAAZ1sC,EAAE0sC,OAAoBF,EAAKxsC,EAAE0sC,WAClC,CACJ,IAAIC,EAA6C,iBAAZ3sC,EAAE0sC,OAAqBtB,GAAYprC,EAAE0sC,QAAU1sC,EAAE0sC,OACtFF,EAAKG,EAAQ3f,EAAGyf,EAAKE,EAAQpsC,EAE1BgsC,EAAG,UAASA,EAAG,QAAU,SAE9B,IAAIv3B,EAAkB,CAAE9e,EAAG,CAACqK,EAAE,IAAUysB,EAAE,KAAWjhC,EAAG,CAACwU,EAAE,EAAGysB,EAAE,IAChE,GAAGuf,EAAG,QAAS,CACd,IAAIK,EAASnB,GAAkBc,EAAG,SAClCv3B,EAAM9e,EAAEqK,EAAIqsC,EAAO12C,EAAEqK,EACrByU,EAAM9e,EAAE82B,EAAI4f,EAAO12C,EAAE82B,EACrBhY,EAAMjpB,EAAEwU,EAAIrN,KAAKme,IAAI2D,EAAMjpB,EAAEwU,EAAGqsC,EAAO7gD,EAAEwU,GACzCyU,EAAMjpB,EAAEihC,EAAI95B,KAAKme,IAAI2D,EAAMjpB,EAAEihC,EAAG4f,EAAO7gD,EAAEihC,IAC/B,GAAPwf,IAAUx3B,EAAMjpB,EAAEihC,EAAIwf,EAAKI,EAAO7gD,EAAEihC,EAAI,GAE5C,IAAI,IAAIyF,EAAI,EAAGA,GAAKtoC,EAAK5I,SAAUkxC,EAClC,GAAItoC,EAAKsoC,GAAT,CACA,IAAIrnC,MAAMkN,QAAQnO,EAAKsoC,IAAK,MAAM,IAAIz2B,MAAM,2CAC5C,IAAI,IAAIi2B,EAAI,EAAGA,GAAK9nC,EAAKsoC,GAAGlxC,SAAU0wC,EACrC,GAAyB,qBAAf9nC,EAAKsoC,GAAGR,GAAlB,CACA,IAAI7nC,EAAgB,CAAE+jB,EAAGhkB,EAAKsoC,GAAGR,IAC7B4a,EAAML,EAAK/Z,EAAGqa,EAAML,EAAKxa,EAK7B,GAJGjd,EAAM9e,EAAE82B,EAAI6f,IAAK73B,EAAM9e,EAAE82B,EAAI6f,GAC7B73B,EAAM9e,EAAEqK,EAAIusC,IAAK93B,EAAM9e,EAAEqK,EAAIusC,GAC7B93B,EAAMjpB,EAAEihC,EAAI6f,IAAK73B,EAAMjpB,EAAEihC,EAAI6f,GAC7B73B,EAAMjpB,EAAEwU,EAAIusC,IAAK93B,EAAMjpB,EAAEwU,EAAIusC,IAC7B3iD,EAAKsoC,GAAGR,IAA4B,kBAAf9nC,EAAKsoC,GAAGR,IAAoB7mC,MAAMkN,QAAQnO,EAAKsoC,GAAGR,KAAS9nC,EAAKsoC,GAAGR,aAAcjhC,KAGxG,GADG5F,MAAMkN,QAAQlO,EAAK+jB,KAAM/jB,EAAK2W,EAAI5W,EAAKsoC,GAAGR,GAAG,GAAI7nC,EAAK+jB,EAAI/jB,EAAK+jB,EAAE,IACtD,OAAX/jB,EAAK+jB,EACP,GAAG/jB,EAAK2W,EAAG3W,EAAKw9B,EAAI,SACf,GAAG5nB,EAAE+sC,UAAa3iD,EAAKw9B,EAAI,IAAKx9B,EAAK+jB,EAAI,MACzC,KAAInO,EAAEgtC,WAAY,SAClB5iD,EAAKw9B,EAAI,QAEW,kBAAXx9B,EAAK+jB,EAAgB/jB,EAAKw9B,EAAI,IACnB,mBAAXx9B,EAAK+jB,EAAiB/jB,EAAKw9B,EAAI,IACtCx9B,EAAK+jB,aAAand,MACzB5G,EAAK06C,EAAI9kC,EAAE4wB,QAAUrJ,GAAIwJ,OAAO,IAC7B/wB,EAAEitC,WAAa7iD,EAAKw9B,EAAI,IAAKx9B,EAAKiN,EAAIkwB,GAAI52B,OAAOvG,EAAK06C,EAAGzC,GAAQj4C,EAAK+jB,MAClE/jB,EAAKw9B,EAAI,IAAKx9B,EAAK+jB,EAAIk0B,GAAQj4C,EAAK+jB,GAAI/jB,EAAKiN,EAAIkwB,GAAI52B,OAAOvG,EAAK06C,EAAG16C,EAAK+jB,KAE5E/jB,EAAKw9B,EAAI,SAhBiGx9B,EAAOD,EAAKsoC,GAAGR,GAkB/H,GAAGqa,EACEC,EAAGM,KAAMN,EAAGM,GAAO,IACpBN,EAAGM,GAAKC,IAAQP,EAAGM,GAAKC,GAAKhI,IAAG16C,EAAK06C,EAAIyH,EAAGM,GAAKC,GAAKhI,GACzDyH,EAAGM,GAAKC,GAAO1iD,MACT,CACN,IAAI8iD,EAAW5C,GAAY,CAAE/pC,EAAEusC,EAAI9f,EAAE6f,IAClCN,EAAGW,IAAaX,EAAGW,GAAUpI,IAAG16C,EAAK06C,EAAIyH,EAAGW,GAAUpI,GACzDyH,EAAGW,GAAY9iD,IAKlB,OADG4qB,EAAM9e,EAAEqK,EAAI,MAAUgsC,EAAG,QAAUjB,GAAat2B,IAC5Cu3B,EAER,SAASY,GAAahjD,EAAco/B,GAA+B,OAAO6iB,GAAc,KAAMjiD,EAAMo/B,GASpG,SAAS6jB,GAAmBjjD,GAC3B,IAAIkjD,EAAgBljD,EAAK8oC,WAAW,GACpC,OAAyB,IAAlBoa,EAAsB,GAAKljD,EAAK8oC,WAAWoa,EAAe,QAgBlE,SAASC,GAAanjD,GACrB,MAAO,CAAEojD,IAAKpjD,EAAK8oC,WAAW,GAAIua,KAAMrjD,EAAK8oC,WAAW,IAUzD,SAASwa,GAActjD,EAAM5I,GAC5B,IAAIiwB,EAAQrnB,EAAKka,EACbivB,EAAQnpC,EAAK8oC,WAAW,GACxB17B,EAAM61C,GAAmBjjD,GACzBujD,EAAY,GACZ5I,EAAI,CAAGld,EAAGrwB,EAAKpX,EAAGoX,GACtB,GAAoB,KAAP,EAAR+7B,GAAkB,CAGtB,IADA,IAAIqa,EAAexjD,EAAK8oC,WAAW,GAC1B7yC,EAAI,EAAGA,GAAKutD,IAAgBvtD,EAAGstD,EAAU10C,KAAKs0C,GAAanjD,IACpE26C,EAAE9X,EAAI0gB,OAEF5I,EAAE9X,EAAI,CAAC,CAAEugB,IAAK,EAAGC,KAAM,IAK5B,OADArjD,EAAKka,EAAImN,EAAQjwB,EACVujD,EAUR,IAAI8I,GAAuBH,GAY3B,SAASI,GAAe1jD,GACvB,IAAIkkB,EAAMlkB,EAAK8oC,WAAW,GACtB6a,EAAY3jD,EAAK8oC,WAAW,GAGhC,OAFA6a,GAAa3jD,EAAK8oC,WAAW,IAAM,GACnC9oC,EAAKka,IACE,CAAE9D,EAAG8N,EAAKy/B,UAAWA,GAW7B,SAASC,GAAoB5jD,GAC5B,IAAI2jD,EAAY3jD,EAAK8oC,WAAW,GAGhC,OAFA6a,GAAa3jD,EAAK8oC,WAAW,IAAK,GAClC9oC,EAAKka,IACE,CAAE9D,GAAG,EAAGutC,UAAWA,GAU3B,IAAIE,GAAqBZ,GAIzB,SAASa,GAA2B9jD,GACnC,IAAIkjD,EAAgBljD,EAAK8oC,WAAW,GACpC,OAAyB,IAAlBoa,GAAyC,aAAlBA,EAA+B,GAAKljD,EAAK8oC,WAAWoa,EAAe,QAUlG,IAAIa,GAAyBd,GAIzBe,GAAcF,GAKlB,SAASG,GAAejkD,GACvB,IAAImW,EAAInW,EAAKiE,MAAMjE,EAAKka,EAAGla,EAAKka,EAAI,GAChCgqC,EAAgB,EAAP/tC,EAAE,GAASguC,EAAe,EAAPhuC,EAAE,GAClCnW,EAAKka,GAAK,EACV/D,EAAE,IAAM,IACR,IAAIiuC,EAAc,IAATD,EAAapG,GAAS,CAAC,EAAG,EAAG,EAAG,EAAG5nC,EAAE,GAAIA,EAAE,GAAIA,EAAE,GAAIA,EAAE,IAAK,GAAKk2B,GAAcl2B,EAAG,IAAM,EACjG,OAAO+tC,EAASE,EAAK,IAAOA,EAa7B,SAASC,GAAUrkD,GAClB,IAAIC,EAAiB,CAAG8L,EAAG,GAAInK,EAAG,IAKlC,OAJA3B,EAAK8L,EAAE82B,EAAI7iC,EAAK8oC,WAAW,GAC3B7oC,EAAK2B,EAAEihC,EAAI7iC,EAAK8oC,WAAW,GAC3B7oC,EAAK8L,EAAEqK,EAAIpW,EAAK8oC,WAAW,GAC3B7oC,EAAK2B,EAAEwU,EAAIpW,EAAK8oC,WAAW,GACpB7oC,EAYR,IAAIqkD,GAAqBD,GAyBzB,SAASE,GAAWvkD,GACnB,GAAGA,EAAK5I,OAAS4I,EAAKka,EAAI,EAAG,KAAM,4BACnC,OAAOla,EAAK8oC,WAAW,EAAG,KAK3B,SAAS0b,GAAexkD,GACvB,IAAIw/B,EAAM,GACNlzB,EAAItM,EAAK8oC,WAAW,GAGpB2b,EAAan4C,IAAM,EAEnB4F,EAAQlS,EAAK8oC,WAAW,GACxB4b,EAAM1kD,EAAK8oC,WAAW,EAAG,KACzB6b,EAAK3kD,EAAK8oC,WAAW,GACrB8b,EAAK5kD,EAAK8oC,WAAW,GACrB+b,EAAK7kD,EAAK8oC,WAAW,GAGzB,OAFA9oC,EAAKka,IAEGuqC,GACP,KAAK,EAAGjlB,EAAIslB,KAAO,EAAG,MACtB,KAAK,EACJtlB,EAAIttB,MAAQA,EACZ,IAAI6yC,EAAMC,GAAO9yC,GAEb6yC,IAAKvlB,EAAIylB,IAAMC,GAAQH,IAC3B,MACD,KAAK,EAEJvlB,EAAIylB,IAAMC,GAAQ,CAACP,EAAIC,EAAIC,IAC3B,MACD,KAAK,EAAGrlB,EAAI2lB,MAAQjzC,EAAO,MAI5B,OAFW,GAAPwyC,IAAUllB,EAAI4lB,KAAOV,EAAM,EAAIA,EAAM,MAAQA,EAAM,OAEhDllB,EAmCR,SAAS6lB,GAAgBrlD,GACxB,IAAIsM,EAAItM,EAAK8oC,WAAW,GACxB9oC,EAAKka,IACL,IAAIslB,EAAM,CACT8lB,MAAW,EAAJh5C,EACPi5C,QAAa,EAAJj5C,EACTk5C,WAAgB,EAAJl5C,EACZm5C,WAAgB,EAAJn5C,EACZo5C,SAAc,GAAJp5C,EACVq5C,QAAa,GAAJr5C,EACTs5C,UAAe,GAAJt5C,EACXu5C,QAAa,IAAJv5C,GAEV,OAAOkzB,EAmCR,IAAIsmB,GAAc,EACdC,GAAc,EAOdC,GAAc,GACdC,GAAc,GAKdC,GAAc,GAKdC,GAAc,GAEdC,GAAc,GACdC,GAAc,GAMdC,GAAc,GAGdC,GAAc,KAGdC,GAAc,GAKdC,GAAmB,CACf,EAAa,CAAEzwC,EAAG,WAAYynB,EAAGqoB,IACjC,EAAa,CAAE9vC,EAAG,WAAYynB,EAAG+oB,IACjC,EAAa,CAAExwC,EAAG,qBAAsBynB,EAAG+oB,IAC3C,EAAa,CAAExwC,EAAG,YAAaynB,EAAGsoB,IAClC,EAAa,CAAE/vC,EAAG,YAAaynB,EAAGsoB,IAClC,EAAa,CAAE/vC,EAAG,iBAAkBynB,EAAGsoB,IACvC,EAAa,CAAE/vC,EAAG,aAAcynB,EAAGsoB,IACnC,EAAa,CAAE/vC,EAAG,YAAaynB,EAAGsoB,IAClC,EAAa,CAAE/vC,EAAG,cAAeynB,EAAGsoB,IACpC,GAAa,CAAE/vC,EAAG,sBAAuBynB,EAAGsoB,IAC5C,GAAa,CAAE/vC,EAAG,YAAaynB,EAAGuoB,IAClC,GAAa,CAAEhwC,EAAG,eAAgBynB,EAAG8oB,GAAYN,IACjD,GAAa,CAAEjwC,EAAG,gBAAiBynB,EAAG8oB,GAAYJ,IAClD,GAAa,CAAEnwC,EAAG,UAAWynB,EAAG+oB,IAChC,GAAa,CAAExwC,EAAG,UAAWynB,EAAG+oB,IAChC,GAAa,CAAExwC,EAAG,gBAAiBynB,EAAGuoB,IACtC,GAAa,CAAEhwC,EAAG,iBAAkBynB,EAAGsoB,IACvC,GAAa,CAAE/vC,EAAG,YAAaynB,EAAGuoB,IAClC,GAAa,CAAEhwC,EAAG,oBAAqBynB,EAAGuoB,IAC1C,GAAa,CAAEhwC,EAAG,aAAcynB,EAAGsoB,GAAOhuD,EAAG,WAC7C,GAAa,CAAEie,EAAG,SAAUynB,EAAG4oB,IAC/B,GAAa,CAAErwC,EAAG,cAAeynB,EAAG+oB,IACpC,GAAa,CAAExwC,EAAG,gBAAiBynB,EAAG+oB,IACtC,GAAa,CAAExwC,EAAG,WAAYynB,EAAG+oB,IACjC,GAAa,CAAExwC,EAAG,UAAWynB,EAAG+oB,IAChC,IAAa,IAIjBE,GAAe,CACX,EAAa,CAAE1wC,EAAG,WAAYynB,EAAGqoB,IACjC,EAAa,CAAE9vC,EAAG,QAASynB,EAAG+oB,IAC9B,EAAa,CAAExwC,EAAG,UAAWynB,EAAG+oB,IAChC,EAAa,CAAExwC,EAAG,SAAUynB,EAAG+oB,IAC/B,EAAa,CAAExwC,EAAG,WAAYynB,EAAG+oB,IACjC,EAAa,CAAExwC,EAAG,WAAYynB,EAAG+oB,IACjC,EAAa,CAAExwC,EAAG,WAAYynB,EAAG+oB,IACjC,EAAa,CAAExwC,EAAG,aAAcynB,EAAG+oB,IACnC,EAAa,CAAExwC,EAAG,YAAaynB,EAAG+oB,IAClC,GAAa,CAAExwC,EAAG,WAAYynB,EAAG2oB,IACjC,GAAa,CAAEpwC,EAAG,cAAeynB,EAAG2oB,IACpC,GAAa,CAAEpwC,EAAG,cAAeynB,EAAG2oB,IACpC,GAAa,CAAEpwC,EAAG,eAAgBynB,EAAG2oB,IACrC,GAAa,CAAEpwC,EAAG,YAAaynB,EAAGsoB,IAClC,GAAa,CAAE/vC,EAAG,YAAaynB,EAAGsoB,IAClC,GAAa,CAAE/vC,EAAG,YAAaynB,EAAGsoB,IAClC,GAAa,CAAE/vC,EAAG,YAAaynB,EAAG6oB,IAClC,GAAa,CAAEtwC,EAAG,cAAeynB,EAAG+oB,IACpC,GAAa,CAAExwC,EAAG,cAAeynB,EAAGsoB,IACpC,IAAa,IAIjBY,GAAoB,CAChB,WAAmB,CAAE3wC,EAAG,SAAUynB,EAAGyoB,IACrC,WAAmB,CAAElwC,EAAG,WAAYynB,EAAGyoB,IACvC,WAAmB,KAG3B,WACC,IAAI,IAAIt7C,KAAK+7C,GAAsBzsD,OAAO4M,UAAUsO,eAAerO,KAAK4/C,GAAmB/7C,KAC3F67C,GAAiB77C,GAAK87C,GAAa97C,GAAK+7C,GAAkB/7C,KAF3D,GAK6CitC,GAAU4O,GAAkB,KAC/B5O,GAAU6O,GAAc,KADlE,IAIIE,GAAc,CACV,EAAe,KACf,EAAe,KACf,EAAe,GACf,EAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,GAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,IAAe,KACf,MAAe,MAInBC,GAAiB,CACpB,KACA,QACA,aACA,WACA,YACA,iBACA,eACA,WACA,SACA,WACA,cACA,kBACA,gBACA,YACA,UACA,YACA,eACA,UACA,YAGD,SAASC,GAAOn5C,GAA6D,OAAOA,EAAIoE,KAAI,SAAS9E,GAAK,MAAO,CAAEA,GAAG,GAAI,IAAKA,GAAG,EAAG,IAAM,IAAFA,MAIzI,IAAI85C,GAAUD,GAAO,CAEpB,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAGA,EACA,SACA,SACA,MACA,IACA,SACA,SACA,MAEA,QACA,MACA,IACA,QACA,QACA,MACA,SACA,QACA,SACA,SACA,SACA,SACA,QACA,SACA,MACA,SAEA,IACA,SACA,SACA,MACA,QACA,QACA,MACA,IACA,MACA,SACA,SACA,SACA,SACA,SACA,SACA,SAEA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,MACA,QACA,MACA,QACA,SACA,SACA,QACA,QAGA,SACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,EACA,IAEG9B,GAASnM,GAAIkO,IAGbpF,GAAO,CACHtoB,EAAa,SACb,EAAa,UACb,GAAa,UACb,GAAa,QACb,GAAa,SACb,GAAa,QACb,GAAa,OACb,GAAa,gBACb,IAAa,SAEjB2tB,GAAQhP,GAAU2J,IAKlBsF,GAA+B,CAElC,6EAA8E,YAG9E,sCAAuC,OAGvC,0CAA2C,OAC3C,sCAAuC,OAGvC,6DAA8D,YAC9D,sEAAuE,YACvE,wEAAyE,WAGzE,wEAAyE,OACzE,6EAA8E,OAG9E,sCAAuC,OACvC,6EAA8E,OAG9E,oEAAqE,OAGrE,gDAAiD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A,EAAEze,QAAc,gCAClBye,EAAEA,EAAEze,QAAc,sBAClBye,EAAEA,EAAEze,QAAc,sBAClBye,EAAEA,EAAEze,QAAc,8CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,wCAClBye,EAAEA,EAAEze,QAAc,0CAClBye,EAAEA,EAAEze,QAAc,qDAClBye,EAAEA,EAAEze,QAAc,qDAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,+CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,8CAClBye,EAAEA,EAAEze,QAAc,0DAClBye,EAAEA,EAAEze,QAAc,wDAClBye,EAAEA,EAAEze,QAAc,wDAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,uDAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,+CAClBye,EAAEA,EAAEze,QAAc,kDAClBye,EAAEA,EAAEze,QAAc,qDAClBye,EAAEA,EAAEze,QAAc,qDAClBye,EAAEA,EAAEze,QAAc,sDAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAa,iBACjBye,EAAEA,EAAEze,QAAa,gBACjBye,EAAEA,EAAEze,QAAc,gCAClBye,EAAEA,EAAEze,QAAc,sBAClBye,EAAEA,EAAEze,QAAc,sBAClBye,EAAEA,EAAEze,QAAc,8CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,wCAClBye,EAAEA,EAAEze,QAAc,0CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,8CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,8CAClBye,EAAEA,EAAEze,QAAc,0DAClBye,EAAEA,EAAEze,QAAc,wDAClBye,EAAEA,EAAEze,QAAc,wDAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,4CAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,uDAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAc,+CAClBye,EAAEA,EAAEze,QAAc,kDAClBye,EAAEA,EAAEze,QAAc,qDAClBye,EAAEA,EAAEze,QAAc,2CAClBye,EAAEA,EAAEze,QAAc,sDAClBye,EAAEA,EAAEze,QAAc,6CAClBye,EAAEA,EAAEze,QAAa,iBACjBye,EAAEA,EAAEze,QAAY,kBAEhBye,EAAEA,EAAEze,QAAY,8BAChBye,EAAEA,EAAEze,QAAa,mBACjBye,EAAEA,EAAEze,QAAc,wDAClBye,EAAEA,EAAEze,QAAc,gCAClBye,EAAEA,EAAEze,QAAe,YACnBye,EAAEA,EAAEze,QAAgB,4GACpBye,EAAEA,EAAEze,QAAgB,gHACpBye,EAAEA,EAAEze,QAAgB,iHACpBye,EAAEA,EAAEze,QAAe,aACnBye,EAAEA,EAAEze,QAAe,qCACnBye,EAAEA,EAAEze,QAAc,gBAClBye,EAAEA,EAAEze,QAAc,gCAClBye,EAAEA,EAAEze,QAAe,YACnBye,EAAEA,EAAEze,QAAgB,oIACpBye,EAAEA,EAAEze,QAAgB,wIACpBye,EAAEA,EAAEze,QAAe,aACnBye,EAAEA,EAAEze,QAAe,qCACnBye,EAAEA,EAAEze,QAAc,gBAClBye,EAAEA,EAAEze,QAAa,oBACjBye,EAAEA,EAAEze,QAAa,iBACjBye,EAAEA,EAAEze,QAAc,mMAClBye,EAAEA,EAAEze,QAAc,yIAClBye,EAAEA,EAAEze,QAAc,yIAClBye,EAAEA,EAAEze,QAAa,kBACjBye,EAAEA,EAAEze,QAAa,qBACjBye,EAAEA,EAAEze,QAAc,kBAClBye,EAAEA,EAAEze,QAAe,gBACnBye,EAAEA,EAAEze,QAAgB,oJACpBye,EAAEA,EAAEze,QAAe,iBACnBye,EAAEA,EAAEze,QAAc,mBAClBye,EAAEA,EAAEze,QAAc,kBAClBye,EAAEA,EAAEze,QAAe,gBACnBye,EAAEA,EAAEze,QAAgB,oJACpBye,EAAEA,EAAEze,QAAe,iBACnBye,EAAEA,EAAEze,QAAc,mBAClBye,EAAEA,EAAEze,QAAc,kBAClBye,EAAEA,EAAEze,QAAe,gBACnBye,EAAEA,EAAEze,QAAgB,oJACpBye,EAAEA,EAAEze,QAAe,iBACnBye,EAAEA,EAAEze,QAAe,6LACnBye,EAAEA,EAAEze,QAAe,mDACnBye,EAAEA,EAAEze,QAAc,mBAClBye,EAAEA,EAAEze,QAAa,sBACjBye,EAAEA,EAAEze,QAAa,qBACjBye,EAAEA,EAAEze,QAAc,wDAClBye,EAAEA,EAAEze,QAAc,gCAClBye,EAAEA,EAAEze,QAAe,YACnBye,EAAEA,EAAEze,QAAgB,4GACpBye,EAAEA,EAAEze,QAAgB,sIACpBye,EAAEA,EAAEze,QAAgB,kHACpBye,EAAEA,EAAEze,QAAe,aACnBye,EAAEA,EAAEze,QAAe,2FACnBye,EAAEA,EAAEze,QAAc,gBAClBye,EAAEA,EAAEze,QAAc,gCAClBye,EAAEA,EAAEze,QAAe,YACnBye,EAAEA,EAAEze,QAAgB,4GACpBye,EAAEA,EAAEze,QAAgB,kHACpBye,EAAEA,EAAEze,QAAe,aACnBye,EAAEA,EAAEze,QAAe,yFACnBye,EAAEA,EAAEze,QAAc,gBAClBye,EAAEA,EAAEze,QAAa,sBACjBye,EAAEA,EAAEze,QAAY,iBAChBye,EAAEA,EAAEze,QAAW,qBAEfye,EAAEA,EAA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GAAe,OACf,GAAe,MACf,GAAe,OACf,GAAe,QACf,GAAe,QACf,GAAe,gBACf,GAAe,cACf,GAAe,SACf,GAAe,aACf,GAAe,YACf,GAAe,cACf,GAAe,eACf,GAAe,eACf,GAAe,eACf,GAAe,mBACf,GAAe,mBACf,GAAe,eACf,GAAe,cACf,GAAe,iBACf,GAAe,eACf,GAAe,cACf,GAAe,kBACf,GAAe,cACf,GAAe,YACf,GAAe,cACf,GAAe,YACf,GAAe,gBACf,GAAe,OACf,GAAe,SACf,GAAe,cACf,GAAe,YACf,GAAe,eACf,GAAe,mBACf,GAAe,WACf,GAAe,aACf,GAAe,UACf,GAAe,QACf,GAAe,gBACf,GAAe,cACf,GAAe,cACf,GAAe,QACf,GAAe,UACf,GAAe,OACf,GAAe,SACf,GAAe,YACf,GAAe,UACf,GAAe,eACf,GAAe,gBACf,GAAe,iBACf,IAAe,iBACf,IAAe,oBACf,IAAe,oBACf,IAAe,WACf,IAAe,gBACf,IAAe,gBACf,IAAe,gBACf,IAAe,gBACf,IAAe,eACf,IAAe,SACf,IAAe,cACf,IAAe,gBACf,IAAe,QACf,IAAe,QACf,IAAe,QACf,IAAe,QACf,IAAe,UACf,IAAe,UACf,IAAe,QACf,IAAe,MACf,IAAe,cACf,IAAe,iBACf,IAAe,UACf,IAAe,aACf,IAAe,eACf,IAAe,eACf,IAAe,aACf,IAAe,cACf,IAAe,cACf,IAAe,kBACf,IAAe,YACf,IAAe,iBACf,IAAe,cACf,IAAe,eACf,IAAe,eACf,IAAe,YACf,IAAe,QACf,IAAe,YACf,IAAe,UACf,IAAe,gBACf,IAAe,UACf,IAAe,aACf,IAAe,aACf,IAAe,gBACf,IAAe,YACf,IAAe,aACf,IAAe,UACf,IAAe,OACf,IAAe,cACf,IAAe,UACf,IAAe,YACf,IAAe,iBACf,IAAe,cACf,IAAe,oBACf,IAAe,gBACf,IAAe,eACf,IAAe,iBACf,IAAe,kBACf,IAAe,cACf,IAAe,qBACf,IAAe,SACf,IAAe,cACf,IAAe,WACf,IAAe,WACf,IAAe,eACf,IAAe,eACf,IAAe,iBACf,IAAe,eACf,IAAe,kBACf,IAAe,qBACf,IAAe,aACf,IAAe,YACf,IAAe,YACf,IAAe,gBACf,IAAe,cACf,IAAe,eACf,IAAe,kBACf,IAAe,oBACf,IAAe,kBACf,IAAe,iBACf,IAAe,UACf,IAAe,YACf,IAAe,YACf,IAAe,aACf,IAAe,cACf,IAAe,UACf,IAAe,SACf,IAAe,cACf,IAAe,UACf,IAAe,oBACf,IAAe,kBACf,IAAe,QACf,IAAe,aACf,IAAe,YACf,IAAe,cACf,IAAe,mBACf,IAAe,oBACf,IAAe,cACf,IAAe,cACf,IAAe,mBACf,IAAe,eACf,IAAe,aACf,IAAe,eACf,IAAe,gBACf,IAAe,aACf,IAAe,cACf,IAAe,cACf,IAAe,iBACf,IAAe,YACf,IAAe,cACf,IAAe,eACf,IAAe,aACf,IAAe,aACf,IAAe,gBACf,IAAe,eACf,IAAe,kBACf,IAAe,gBACf,IAAe,qBACf,IAAe,WACf,IAAe,OACf,IAAe,gBACf,IAAe,kBACf,IAAe,aACf,IAAe,aACf,IAAe,eACf,IAAe,iBACf,IAAe,cACf,IAAe,iBACf,IAAe,qBACf,IAAe,YACf,IAAe,oBACf,IAAe,WACf,IAAe,cACf,IAAe,iBACf,IAAe,WACf,IAAe,eACf,IAAe,gBACf,IAAe,gBACf,IAAe,mBACf,IAAe,iBACf,IAAe,eACf,IAAe,cACf,IAAe,YACf,IAAe,kBACf,IAAe,oBACf,IAAe,iBACf,IAAe,YACf,IAAe,aACf,IAAe,oBACf,IAAe,aACf,IAAe,eACf,IAAe,iBACf,IAAe,kBACf,IAAe,eACf,IAAe,gBACf,IAAe,gBACf,IAAe,qBACf,IAAe,mBACf,IAAe,qBACf,IAAe,yBACf,IAAe,cACf,IAAe,aACf,IAAe,mBACf,IAAe,sBACf,IAAe,eACf,IAAe,eACf,IAAe,gBACf,IAAe,cACf,IAAe,kBACf,IAAe,cACf,IAAe,gBACf,IAAe,kBACf,IAAe,2BACf,IAAe,eACf,IAAe,iBACf,IAAe,aACf,IAAe,iBACf,IAAe,YACf,IAAe,mBACf,IAAe,cACf,IAAe,wBACf,IAAe,kBACf,IAAe,qBACf,IAAe,kBACf,IAAe,kBACf,IAAe,kBACf,IAAe,qBACf,IAAe,aACf,IAAe,iBACf,IAAe,eACf,IAAe,mBACf,IAAe,aACf,IAAe,eACf,IAAe,kBACf,IAAe,gBACf,IAAe,gBACf,IAAe,kBACf,IAAe,kBACf,IAAe,gBACf,IAAe,iBACf,IAAe,uBACf,IAAe,0BACf,IAAe,iBACf,IAAe,eACf,IAAe,YACf,IAAe,cACf,IAAe,aACf,IAAe,iBACf,IAAe,kBACf,IAAe,kBACf,IAAe,gBACf,IAAe,kBACf,IAAe,gBACf,IAAe,gBACf,IAAe,qBACf,IAAe,cACf,IAAe,mBACf,IAAe,uBACf,IAAe,mBACf,IAAe,kBACf,IAAe,mBACf,IAAe,cACf,IAAe,iBACf,IAAe,kBACf,IAAe,eACf,IAAe,eACf,IAAe,oBACf,IAAe,sBACf,IAAe,sBACf,IAAe,mBACf,IAAe,qBACf,IAAe,qBACf,IAAe,gBACf,IAAe,aACf,IAAe,YACf,IAAe,cACf,IAAe,mBACf,IAAe,gBACf,IAAe,wBACf,IAAe,qBACf,IAAe,SACf,IAAe,kBACf,IAAe,gBACf,IAAe,kBACf,IAAe,gBACf,IAAe,gBACf,IAAe,mBACf,IAAe,mBACf,IAAe,oBACf,IAAe,eACf,IAAe,oBACf,IAAe,uBACf,IAAe,cACf,IAAe,WACf,IAAe,WACf,IAAe,aACf,IAAe,aACf,IAAe,eACf,IAAe,eACf,IAAe,cACf,IAAe,qBACf,IAAe,yBACf,IAAe,mBACf,IAAe,WACf,IAAe,iBACf,IAAe,iBACf,IAAe,eACf,IAAe,YACf,IAAe,mBACf,IAAe,mBACf,IAAe,iBACf,IAAe,kBACf,IAAe,oBACf,IAAe,mBACf,IAAe,cACf,IAAe,gBACf,IAAe,WACf,IAAe,YACf,IAAe,cACf,IAAe,cACf,IAAe,mBACf,IAAe,oBACf,IAAe,iBACf,IAAe,YACf,IAAe,SACf,IAAe,SACf,IAAe,gBACf,IAAe,mBACf,IAAe,iBACf,IAAe,WACf,IAAe,gBACf,IAAe,gBACf,IAAe,cACf,IAAe,iBACf,IAAe,iBACf,IAAe,oBACf,IAAe,sBACf,IAAe,aACf,IAAe,cACf,IAAe,cACf,IAAe,oBACf,IAAe,eACf,IAAe,gBACf,IAAe,qBAKnB8/C,GAAO,CACH9/C,EAAe,QACf,EAAe,KACf,EAAe,OACf,EAAe,UACf,EAAe,MACf,EAAe,UACf,EAAe,MACf,EAAe,MACf,EAAe,MACf,EAAe,SACf,GAAe,KACf,GAAe,MACf,GAAe,QACf,GAAe,SACf,GAAe,QACf,GAAe,MACf,GAAe,MACf,GAAe,MACf,GAAe,OACf,GAAe,KACf,GAAe,OACf,GAAe,MACf,GAAe,KACf,GAAe,QACf,GAAe,MACf,GAAe,MACf,GAAe,OACf,GAAe,QACf,GAAe,SACf,GAAe,QACf,GAAe,OACf,GAAe,MACf,GAAe,MACf,GAAe,QACf,GAAe,OACf,GAAe,QACf,GAAe,MACf,GAAe,KACf,GAAe,MACf,GAAe,MACf,GAAe,SACf,GAAe,OACf,GAAe,WACf,GAAe,OACf,GAAe,OACf,GAAe,SACf,GAAe,MACf,GAAe,OACf,GAAe,OACf,GAAe,SACf,GAAe,QACf,GAAe,SACf,GAAe,SACf,GAAe,OACf,GAAe,OACf,GAAe,SACf,GAAe,KACf,GAAe,KACf,GAAe,OACf,GAAe,MACf,GAAe,OACf,GAAe,OACf,GAAe,MACf,GAAe,OACf,GAAe,QACf,GAAe,OACf,GAAe,OACf,GAAe,MACf,GAAe,QACf,GAAe,OACf,GAAe,UACf,GAAe,OACf,GAAe,SACf,GAAe,SACf,GAAe,MACf,GAAe,QACf,GAAe,OACf,GAAe,UACf,GAAe,SACf,GAAe,SACf,GAAe,SACf,GAAe,WACf,GAAe,SACf,GAAe,YACf,GAAe,QACf,GAAe,OACf,GAAe,OACf,GAAe,OACf,GAAe,WACf,GAAe,SACf,GAAe,QACf,GAAe,UACf,GAAe,SACf,GAAe,YACf,GAAe,cACf,GAAe,YACf,GAAe,SACf,GAAe,QACf,GAAe,OACf,GAAe,OACf,IAAe,SACf,IAAe,UACf,IAAe,UACf,IAAe,QACf,IAAe,QACf,IAAe,QACf,IAAe,cACf,IAAe,WACf,IAAe,YACf,IAAe,MACf,IAAe,OACf,IAAe,OACf,IAAe,QACf,IAAe,QACf,IAAe,SACf,IAAe,OACf,IAAe,QACf,IAAe,QACf,IAAe,OACf,IAAe,UACf,IAAe,aACf,IAAe,OACf,IAAe,QACf,IAAe,YACf,IAAe,OACf,IAAe,OACf,IAAe,QACf,IAAe,SACf,IAAe,WACf,IAAe,UACf,IAAe,IACf,IAAe,IACf,IAAe,QACf,IAAe,SACf,IAAe,QACf,IAAe,UACf,IAAe,QACf,IAAe,WACf,IAAe,SACf,IAAe,OACf,IAAe,YACf,IAAe,YACf,IAAe,MACf,IAAe,MACf,IAAe,MACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,WACf,IAAe,WACf,IAAe,OACf,IAAe,UACf,IAAe,WACf,IAAe,cACf,IAAe,iBACf,IAAe,gBACf,IAAe,iBACf,IAAe,WACf,IAAe,cACf,IAAe,iBACf,IAAe,iBACf,IAAe,aACf,IAAe,QACf,IAAe,UACf,IAAe,WACf,IAAe,QACf,IAAe,QACf,IAAe,OACf,IAAe,OACf,IAAe,SACf,IAAe,aACf,IAAe,MACf,IAAe,QACf,IAAe,QACf,IAAe,OACf,IAAe,WACf,IAAe,UACf,IAAe,OACf,IAAe,UACf,IAAe,YACf,IAAe,UACf,IAAe,OACf,IAAe,UACf,IAAe,UACf,IAAe,OACf,IAAe,WACf,IAAe,gBACf,IAAe,aACf,IAAe,eACf,IAAe,WACf,IAAe,YACf,IAAe,WACf,IAAe,OACf,IAAe,SACf,IAAe,OACf,IAAe,UACf,IAAe,QACf,IAAe,QACf,IAAe,YACf,IAAe,UACf,IAAe,aACf,IAAe,aACf,IAAe,WACf,IAAe,QACf,IAAe,UACf,IAAe,WACf,IAAe,QACf,IAAe,SACf,IAAe,OACf,IAAe,OACf,IAAe,UACf,IAAe,YACf,IAAe,MACf,IAAe,OACf,IAAe,OACf,IAAe,UACf,IAAe,UACf,IAAe,QACf,IAAe,MACf,IAAe,OACf,IAAe,UACf,IAAe,SACf,IAAe,WACf,IAAe,SACf,IAAe,aACf,IAAe,OACf,IAAe,OACf,IAAe,OACf,IAAe,QACf,IAAe,QACf,IAAe,QACf,IAAe,OACf,IAAe,gBACf,IAAe,WACf,IAAe,aACf,IAAe,cACf,IAAe,gBACf,IAAe,kBACf,IAAe,gBACf,IAAe,WACf,IAAe,OACf,IAAe,QACf,IAAe,aACf,IAAe,KACf,IAAe,QACf,IAAe,SACf,IAAe,YACf,IAAe,cACf,IAAe,iBACf,IAAe,OACf,IAAe,gBACf,IAAe,WACf,IAAe,cACf,IAAe,WACf,IAAe,iBACf,IAAe,aACf,IAAe,YACf,IAAe,eACf,IAAe,eACf,IAAe,cACf,IAAe,aACf,IAAe,cACf,IAAe,eACf,IAAe,SACf,IAAe,WACf,IAAe,UACf,IAAe,UACf,IAAe,YACf,IAAe,UACf,IAAe,SACf,IAAe,SACf,IAAe,aACf,IAAe,YACf,IAAe,OACf,IAAe,YACf,IAAe,QACf,IAAe,OACf,IAAe,SACf,IAAe,YACf,IAAe,QACf,IAAe,YACf,IAAe,WACf,IAAe,UACf,IAAe,cACf,IAAe,cACf,IAAe,SACf,IAAe,eACf,IAAe,WACf,IAAe,YACf,IAAe,UACf,IAAe,WACf,IAAe,cACf,IAAe,MACf,IAAe,SACf,IAAe,UACf,IAAe,QACf,IAAe,UACf,IAAe,UACf,IAAe,WACf,IAAe,WACf,IAAe,UACf,IAAe,SACf,IAAe,QACf,IAAe,WACf,IAAe,QACf,IAAe,YACf,IAAe,UACf,IAAe,MACf,IAAe,QACf,IAAe,QACf,IAAe,QACf,IAAe,OACf,IAAe,QACf,IAAe,UACf,IAAe,UACf,IAAe,QACf,IAAe,OACf,IAAe,OACf,IAAe,QACf,IAAe,QACf,IAAe,QACf,IAAe,WACf,IAAe,aACf,IAAe,cACf,IAAe,OACf,IAAe,WACf,IAAe,OACf,IAAe,gBACf,IAAe,YACf,IAAe,cACf,IAAe,QACf,IAAe,iBACf,IAAe,kBACf,IAAe,kBACf,IAAe,iBACf,IAAe,UACf,IAAe,UACf,IAAe,WACf,IAAe,QACf,IAAe,UACf,IAAe,aACf,IAAe,eACf,IAAe,oBACf,IAAe,QACf,IAAe,UACf,IAAe,aACf,IAAe,eACf,IAAe,QACf,IAAe,cACf,IAAe,cACf,IAAe,WACf,IAAe,eACf,IAAe,YACf,IAAe,WACf,IAAe,WACf,IAAe,OACf,IAAe,OACf,IAAe,UACf,IAAe,QACf,IAAe,SACf,IAAe,OACf,IAAe,WACf,IAAe,gBACf,IAAe,YACf,IAAe,kBACf,IAAe,eACf,IAAe,gBACf,IAAe,mBACf,IAAe,cACf,IAAe,gBACf,IAAe,cACf,IAAe,WACf,IAAe,MAEf,IAAe,YACf,IAAe,aACf,IAAe,qBACf,IAAe,mBACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,QACf,IAAe,QACf,IAAe,UACf,IAAe,QACf,IAAe,SACf,IAAe,OACf,IAAe,SACf,IAAe,UACf,IAAe,QACf,IAAe,QACf,IAAe,QACf,IAAe,aACf,IAAe,cACf,IAAe,YACf,IAAe,SACf,IAAe,UACf,IAAe,QACf,IAAe,YACf,IAAe,YACf,IAAe,aACf,IAAe,SACf,IAAe,WACf,IAAe,QACf,IAAe,SACf,IAAe,SACf,IAAe,QACf,IAAe,SACf,IAAe,MACf,IAAe,OACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,OACf,IAAe,OACf,IAAe,WACf,IAAe,WACf,IAAe,UACf,IAAe,WACf,IAAe,OACf,IAAe,YACf,IAAe,YACf,IAAe,UACf,IAAe,aACf,IAAe,aACf,IAAe,QACf,IAAe,QACf,IAAe,WACf,IAAe,WACf,IAAe,UACf,IAAe,SACf,IAAe,WACf,IAAe,UACf,IAAe,QACf,IAAe,UACf,IAAe,WACf,IAAe,YACf,IAAe,WACf,IAAe,aACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,WACf,IAAe,YACf,IAAe,YACf,IAAe,YACf,IAAe,YACf,IAAe,YACf,IAAe,cACf,IAAe,UACf,IAAe,YACf,IAAe,WACf,IAAe,UACf,IAAe,UACf,IAAe,UACf,IAAe,WACf,IAAe,UACf,IAAe,cACf,IAAe,MACf,IAAe,cACf,IAAe,MACf,IAAe,aACf,IAAe,gBACf,IAAe,UACf,IAAe,eACf,IAAe,UACf,IAAe,WACf,IAAe,SACf,IAAe,YACf,IAAe,cAEnB6/C,GAAW,CACP,EAAe,EACf,EAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,GAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf,IAAe,EACf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","file":"js/chunk-79b5266d.415fd141.js","sourcesContent":["import mod from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelSetting.vue?vue&type=style&index=0&id=59ad407e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelSetting.vue?vue&type=style&index=0&id=59ad407e&scoped=true&lang=css&\"","import mod from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./VueExcelEditor.vue?vue&type=style&index=0&id=6ac2ddbf&scoped=true&lang=css&\"; export default mod; export * from \"-!../../mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../vue-loader/lib/loaders/stylePostLoader.js!../../postcss-loader/src/index.js??ref--6-oneOf-1-2!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./VueExcelEditor.vue?vue&type=style&index=0&id=6ac2ddbf&scoped=true&lang=css&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-container',{attrs:{\"fluid\":\"\"}},[_c('vue-excel-editor',{ref:\"grid\",attrs:{\"new-if-bottom\":\"\",\"filter-row\":_vm.filterRow},on:{\"select\":_vm.onSelect},model:{value:(_vm.table),callback:function ($$v) {_vm.table=$$v},expression:\"table\"}},[_vm._l((_vm.headers),function(h,i){return _c('vue-excel-column',{key:'header_' + i,ref:\"grid_col\",refInFor:true,attrs:{\"field\":h.value,\"label\":h.text,\"width\":_vm.columnWidth,\"options\":_vm.getOptions(h),\"type\":_vm.getFieldType(h)}})}),_c('v-btn',{staticStyle:{},attrs:{\"text\":\"\",\"x-small\":\"\",\"color\":\"c0c0c0\"},on:{\"click\":function($event){return _vm.addRow()}}},[_c('v-icon',{attrs:{\"color\":\"info\"}},[_vm._v(\"mdi-plus-box\")])],1)],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"vue-excel-editor\",style:({display: 'inline-block', 'max-width': _vm.width})},[_c('div',{staticClass:\"component-content\"},[(_vm.localizedLabel.noRecordIndicator && _vm.pagingTable.length == 0)?_c('div',{staticClass:\"norecord\",style:({bottom: _vm.noFooter? '12px' : '37px'})},[_vm._v(\" \"+_vm._s(_vm.localizedLabel.noRecordIndicator)+\" \")]):_vm._e(),_c('div',{ref:\"tableContent\",staticClass:\"table-content\",class:{'no-footer': _vm.noFooter},on:{\"scroll\":_vm.tableScroll,\"mouseover\":_vm.mouseOver,\"mouseout\":_vm.mouseOut}},[_c('table',{ref:\"systable\",staticClass:\"systable\",class:{'no-number': _vm.noNumCol},staticStyle:{\"table-layout\":\"fixed\",\"width\":\"0\"},attrs:{\"id\":\"systable\",\"ondragenter\":\"event.preventDefault(); event.dataTransfer.dropEffect = 'none'\",\"ondragover\":\"event.preventDefault(); event.dataTransfer.dropEffect = 'none'\"}},[_c('colgroup',[_c('col',{staticStyle:{\"width\":\"40px\"}}),_vm._l((_vm.fields),function(item,p){return _c('col',{directives:[{name:\"show\",rawName:\"v-show\",value:(!item.invisible),expression:\"!item.invisible\"}],key:p,style:({width: item.width})})}),(_vm.vScroller.buttonHeight < _vm.vScroller.height)?_c('col',{staticStyle:{\"width\":\"12px\"}}):_vm._e()],2),_c('thead',{staticClass:\"center-text\"},[_c('tr',[_c('th',{staticClass:\"center-text first-col tl-setting\",class:{hide: _vm.noNumCol},staticStyle:{\"top\":\"0\"},on:{\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }return _vm.selectAllClick($event)},\"contextmenu\":function($event){$event.preventDefault();return _vm.settingClick($event)}}},[_c('span',{staticStyle:{\"width\":\"100%\"}},[(_vm.selectedCount>0)?_c('svg',{staticClass:\"svg-inline--fa fa-times-circle fa-w-16 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"times-circle\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm121.6 313.1c4.7 4.7 4.7 12.3 0 17L338 377.6c-4.7 4.7-12.3 4.7-17 0L256 312l-65.1 65.6c-4.7 4.7-12.3 4.7-17 0L134.4 338c-4.7-4.7-4.7-12.3 0-17l65.6-65-65.6-65.1c-4.7-4.7-4.7-12.3 0-17l39.6-39.6c4.7-4.7 12.3-4.7 17 0l65 65.7 65.1-65.6c4.7-4.7 12.3-4.7 17 0l39.6 39.6c4.7 4.7 4.7 12.3 0 17L312 256l65.6 65.1z\"}})]):_c('svg',{staticClass:\"svg-inline--fa fa-bars fa-w-14 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"bars\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 448 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"}})])])]),_vm._l((_vm.fields),function(item,p){return _c('th',{directives:[{name:\"show\",rawName:\"v-show\",value:(!item.invisible),expression:\"!item.invisible\"}],key:(\"th-\" + p),class:{'sort-asc-sign': _vm.sortPos==p && _vm.sortDir==1,\n 'sort-des-sign': _vm.sortPos==p && _vm.sortDir==-1,\n 'sticky-column': item.sticky},style:({left: item.left}),attrs:{\"colspan\":p === _vm.fields.length - 1 && _vm.vScroller.buttonHeight < _vm.vScroller.height ? 2: 1},on:{\"mousedown\":function($event){return _vm.headerClick($event, p)},\"contextmenu\":function($event){$event.preventDefault();return _vm.panelFilterClick(item)}}},[_c('div',{class:{'filter-sign': _vm.columnFilter[p]}},[_c('span',{class:{'table-col-header': !_vm.noHeaderEdit},domProps:{\"innerHTML\":_vm._s(_vm.headerLabel(item.label, item))}})]),_c('div',{staticClass:\"col-sep\",on:{\"mousedown\":_vm.colSepMouseDown,\"mouseover\":_vm.colSepMouseOver,\"mouseout\":_vm.colSepMouseOut}},[_c('div',{staticClass:\"add-col-btn\"},[_vm._v(\" + \")])])])})],2),_c('tr',{class:{hide: !_vm.filterRow}},[_c('td',{staticClass:\"center-text first-col tl-filter\",class:{hide: _vm.noNumCol},staticStyle:{\"vertical-align\":\"middle\",\"padding\":\"0\"},style:({top: _vm.calCellTop2 + 'px'}),on:{\"click\":function($event){_vm.columnFilter = {}}}},[(Object.keys(_vm.columnFilter).length > 0)?_c('span',[_c('svg',{staticClass:\"svg-inline--fa fa-eraser fa-w-16 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"eraser\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M497.941 273.941c18.745-18.745 18.745-49.137 0-67.882l-160-160c-18.745-18.745-49.136-18.746-67.883 0l-256 256c-18.745 18.745-18.745 49.137 0 67.882l96 96A48.004 48.004 0 0 0 144 480h356c6.627 0 12-5.373 12-12v-40c0-6.627-5.373-12-12-12H355.883l142.058-142.059zm-302.627-62.627l137.373 137.373L265.373 416H150.628l-80-80 124.686-124.686z\"}})])]):_vm._e()]),_vm._l((_vm.fields),function(item,p){return _c('vue-excel-filter',{directives:[{name:\"show\",rawName:\"v-show\",value:(!item.invisible),expression:\"!item.invisible\"}],key:(\"th2-\" + p),ref:(\"filter-\" + (item.name)),refInFor:true,staticClass:\"column-filter\",class:{'sticky-column': item.sticky},style:({left: item.left}),attrs:{\"colspan\":p === _vm.fields.length - 1? 2: 1},model:{value:(_vm.columnFilter[p]),callback:function ($$v) {_vm.$set(_vm.columnFilter, p, $$v)},expression:\"columnFilter[p]\"}})})],2)]),_c('tbody',{on:{\"mousedown\":_vm.mouseDown}},[(_vm.localizedLabel.noRecordIndicator && _vm.pagingTable.length == 0)?_c('tr',[_c('td',{staticStyle:{\"height\":\"40px\",\"vertical-align\":\"middle\",\"text-align\":\"center\"},attrs:{\"colspan\":\"100%\"}})]):_vm._l((_vm.pagingTable),function(record,rowPos){return _c('tr',{key:rowPos,class:{select: typeof _vm.selected[_vm.pageTop + rowPos] !== 'undefined'},style:(_vm.rowStyle(record))},[_c('td',{staticClass:\"center-text first-col\",class:{\n hide: _vm.noNumCol,\n error: _vm.rowerr[(\"rid-\" + (record.$id))]\n },attrs:{\"id\":(\"rid-\" + (record.$id)),\"pos\":rowPos},on:{\"mouseover\":_vm.numcolMouseOver,\"click\":_vm.rowLabelClick}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.recordLabel(_vm.pageTop + rowPos + 1, record))}})]),_vm._l((_vm.fields),function(item,p){return [_c('td',{directives:[{name:\"show\",rawName:\"v-show\",value:(!item.invisible),expression:\"!item.invisible\"}],key:p,class:{\n readonly: item.readonly,\n error: _vm.errmsg[(\"id-\" + (record.$id) + \"-\" + (item.name))],\n link: item.link,\n select: item.options,\n datepick: item.type == 'date',\n 'sticky-column': item.sticky\n },style:(Object.assign(_vm.cellStyle(record, item), _vm.renderColumnCellStyle(item))),attrs:{\"id\":(\"id-\" + (record.$id) + \"-\" + (item.name)),\"cell-RC\":(rowPos + \"-\" + (item.name))},on:{\"mouseover\":_vm.cellMouseOver,\"mousemove\":_vm.cellMouseMove}},[_vm._v(_vm._s(item.toText(record[item.name])))])]}),(_vm.vScroller.buttonHeight < _vm.vScroller.height)?_c('td',{staticClass:\"last-col\"}):_vm._e()],2)})],2),_c('tfoot',[_c('tr',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.pagingTable.length && _vm.summaryRow),expression:\"pagingTable.length && summaryRow\"}]},[_c('td',{staticClass:\"row-summary first-col\"}),_vm._l((_vm.fields),function(field,p){return [_c('td',{directives:[{name:\"show\",rawName:\"v-show\",value:(!field.invisible),expression:\"!field.invisible\"}],key:(\"f\" + p),staticClass:\"row-summary\",class:{\n 'sticky-column': field.sticky,\n 'summary-column1': p+1 < _vm.fields.length && _vm.fields[p+1].summary,\n 'summary-column2': field.summary\n },style:(_vm.renderColumnCellStyle(field)),attrs:{\"colspan\":p === _vm.fields.length - 1 && _vm.vScroller.buttonHeight < _vm.vScroller.height ? 2: 1}},[_vm._v(_vm._s(_vm.summary[field.name]))])]})],2)]),_vm._t(\"default\")],2),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.tip),expression:\"tip\"}],ref:\"tooltip\",staticClass:\"tool-tip\"},[_vm._v(_vm._s(_vm.tip))]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.focused),expression:\"focused\"}],ref:\"inputSquare\",staticClass:\"input-square\",on:{\"mousedown\":_vm.inputSquareClick}},[_c('div',{staticStyle:{\"position\":\"relative\",\"height\":\"100%\",\"padding\":\"2px 2px 1px\"}},[_c('div',{staticClass:\"rb-square\"}),_c('textarea',{ref:\"inputBox\",staticClass:\"input-box\",style:({opacity: _vm.inputBoxShow}),attrs:{\"id\":\"inputBox\",\"trim\":\"\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"autocompitaize\":\"off\",\"spellcheck\":_vm.spellcheck},on:{\"blur\":_vm.inputBoxBlur,\"mousemove\":_vm.inputBoxMouseMove,\"mousedown\":_vm.inputBoxMouseDown}})])]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showDatePicker),expression:\"showDatePicker\"}],ref:\"dpContainer\",staticStyle:{\"z-index\":\"20\",\"position\":\"fixed\"}},[_c('date-picker',{ref:\"datepicker\",attrs:{\"inline\":\"\",\"valueType\":\"format\"},on:{\"input\":_vm.datepickerClick},model:{value:(_vm.inputDateTime),callback:function ($$v) {_vm.inputDateTime=$$v},expression:\"inputDateTime\"}})],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.processing),expression:\"processing\"}],ref:\"frontdrop\",staticClass:\"front-drop\"},[_c('svg',{staticClass:\"svg-inline--fa fa-spinner fa-w-16 fa-spin fa-3x\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"spinner\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"}})])])]),(_vm.vScroller.buttonHeight < _vm.vScroller.height)?_c('div',{ref:\"vScroll\",staticClass:\"v-scroll\",style:({top: ((_vm.vScroller.top) + \"px\"), height: ((_vm.vScroller.height) + \"px\")}),on:{\"mousedown\":_vm.vsMouseDown}},[_c('div',{ref:\"vScrollButton\",staticClass:\"v-scroll-button\",style:({marginTop: ((_vm.vScroller.buttonTop) + \"px\"), height: ((_vm.vScroller.buttonHeight) + \"px\")}),on:{\"mousedown\":_vm.vsbMouseDown}},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.vScroller.runner),expression:\"vScroller.runner\"}],staticClass:\"runner\",domProps:{\"innerHTML\":_vm._s(_vm.vScroller.runner)}})])]):_vm._e(),_c('ul',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.focused && _vm.autocompleteInputs.length),expression:\"focused && autocompleteInputs.length\"}],ref:\"autocomplete\",staticClass:\"autocomplete-results\"},_vm._l((_vm.autocompleteInputs),function(item,i){return _c('li',{key:i,staticClass:\"autocomplete-result\",class:{select: _vm.autocompleteSelect === i},on:{\"mousedown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"left\",37,$event.key,[\"Left\",\"ArrowLeft\"])){ return null; }if('button' in $event && $event.button !== 0){ return null; }$event.preventDefault();return _vm.inputAutocompleteText($event.target.textContent, $event)}}},[_vm._v(_vm._s(item))])}),0),_c('div',{ref:\"footer\",staticClass:\"footer center-text\",class:{hide: _vm.noFooter},staticStyle:{\"position\":\"relative\"},on:{\"mousedown\":_vm.ftMouseDown}},[_c('div',{ref:\"hScroll\",staticClass:\"h-scroll\",on:{\"mousedown\":_vm.sbMouseDown}}),_c('span',{staticClass:\"left-block\"}),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.noPaging),expression:\"!noPaging\"}],staticStyle:{\"position\":\"absolute\",\"left\":\"46px\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.footerLeft(_vm.pageTop + 1, _vm.pageBottom, _vm.table.length))}})]),_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.noPaging && _vm.pageBottom - _vm.pageTop < _vm.table.length),expression:\"!noPaging && pageBottom - pageTop < table.length\"}]},[(_vm.processing)?[_c('svg',{staticClass:\"svg-inline--fa fa-spinner fa-w-16 fa-spin fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"spinner\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M304 48c0 26.51-21.49 48-48 48s-48-21.49-48-48 21.49-48 48-48 48 21.49 48 48zm-48 368c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zm208-208c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.49-48-48-48zM96 256c0-26.51-21.49-48-48-48S0 229.49 0 256s21.49 48 48 48 48-21.49 48-48zm12.922 99.078c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.491-48-48-48zm294.156 0c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48c0-26.509-21.49-48-48-48zM108.922 60.922c-26.51 0-48 21.49-48 48s21.49 48 48 48 48-21.49 48-48-21.491-48-48-48z\"}})]),_vm._v(\" \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.processing)}})]:[_c('a',{class:{disabled: _vm.pageTop <= 0},on:{\"mousedown\":_vm.firstPage}},[_c('svg',{staticClass:\"svg-inline--fa fa-step-backward fa-w-14 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"step-backward\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 448 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M64 468V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12v176.4l195.5-181C352.1 22.3 384 36.6 384 64v384c0 27.4-31.9 41.7-52.5 24.6L136 292.7V468c0 6.6-5.4 12-12 12H76c-6.6 0-12-5.4-12-12z\"}})]),_vm._v(\" \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.first)}})]),_vm._v(\" | \"),_c('a',{class:{disabled: _vm.pageTop <= 0},on:{\"mousedown\":_vm.prevPage}},[_c('svg',{staticClass:\"svg-inline--fa fa-backward fa-w-16 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"backward\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M11.5 280.6l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2zm256 0l192 160c20.6 17.2 52.5 2.8 52.5-24.6V96c0-27.4-31.9-41.8-52.5-24.6l-192 160c-15.3 12.8-15.3 36.4 0 49.2z\"}})]),_vm._v(\" \"),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.previous)}})]),_vm._v(\" | \"),_c('a',{class:{disabled: _vm.pageTop + _vm.pageSize >= _vm.table.length},on:{\"mousedown\":_vm.nextPage}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.next)}}),_vm._v(\" \"),_c('svg',{staticClass:\"svg-inline--fa fa-forward fa-w-16 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"forward\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M500.5 231.4l-192-160C287.9 54.3 256 68.6 256 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2zm-256 0l-192-160C31.9 54.3 0 68.6 0 96v320c0 27.4 31.9 41.8 52.5 24.6l192-160c15.3-12.8 15.3-36.4 0-49.2z\"}})])]),_vm._v(\" | \"),_c('a',{class:{disabled: _vm.pageTop + _vm.pageSize >= _vm.table.length},on:{\"mousedown\":_vm.lastPage}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.last)}}),_vm._v(\" \"),_c('svg',{staticClass:\"svg-inline--fa fa-step-forward fa-w-14 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"step-forward\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 448 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M384 44v424c0 6.6-5.4 12-12 12h-48c-6.6 0-12-5.4-12-12V291.6l-195.5 181C95.9 489.7 64 475.4 64 448V64c0-27.4 31.9-41.7 52.5-24.6L312 219.3V44c0-6.6 5.4-12 12-12h48c6.6 0 12 5.4 12 12z\"}})])])]],2),_c('span',{staticStyle:{\"position\":\"absolute\",\"right\":\"6px\"}},[_c('a',{class:{disabled: !_vm.showSelectedOnly && _vm.selectedCount <= 1},on:{\"mousedown\":_vm.toggleSelectView}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.footerRight.selected)}}),_c('span',{style:({color: _vm.selectedCount>0 ? 'red': 'inherit'})},[_vm._v(_vm._s(_vm.selectedCount))])]),_vm._v(\" | \"),_c('a',{class:{disabled: _vm.columnFilterString === '{}'},on:{\"mousedown\":_vm.toggleFilterView}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.footerRight.filtered)}}),_c('span',{style:({color: _vm.table.length !== _vm.filteredValue.length ? 'red': 'inherit'})},[_vm._v(_vm._s(_vm.table.length))])]),_vm._v(\" | \"),_c('a',{class:{disabled: true}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.footerRight.loaded)}}),_c('span',[_vm._v(_vm._s(_vm.filteredValue.length))])])])]),_c('input',{ref:\"importFile\",staticStyle:{\"position\":\"absolute\",\"top\":\"0\",\"left\":\"0\",\"width\":\"0\",\"height\":\"0\",\"opacity\":\"0\",\"z-index\":\"-1\"},attrs:{\"type\":\"file\",\"accept\":\".xlsx, .xls, xlsm, .csv\"},on:{\"keyup\":_vm.componentTabInto,\"change\":_vm.doImport}}),_c('panel-filter',{ref:\"panelFilter\",attrs:{\"n-filter-count\":_vm.nFilterCount,\"localized-label\":_vm.localizedLabel}}),_c('panel-setting',{ref:\"panelSetting\",attrs:{\"localized-label\":_vm.localizedLabel},model:{value:(_vm.fields),callback:function ($$v) {_vm.fields=$$v},expression:\"fields\"}}),_c('panel-find',{ref:\"panelFind\",attrs:{\"localized-label\":_vm.localizedLabel}})],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('td',_vm._g({ref:\"cell\",staticClass:\"cell column-filter\",style:(_vm.filterRowTop),attrs:{\"id\":_vm.uid,\"contenteditable\":\"\",\"ondragenter\":\"event.preventDefault(); event.dataTransfer.dropEffect = 'none'\",\"ondragover\":\"event.preventDefault(); event.dataTransfer.dropEffect = 'none'\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\",\"tabindex\":\"-1\"},on:{\"focus\":_vm.onFocus,\"blur\":_vm.onBlur,\"keydown\":[function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==37){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.keyWest($event)},function($event){if(!$event.type.indexOf('key')&&$event.keyCode!==39){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.keyEast($event)},function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.keyEnter($event)}],\"keyup\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"delete\",[8,46],$event.key,[\"Backspace\",\"Delete\",\"Del\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.keyDelete($event)},\"mousemove\":_vm.mouseMove,\"mousedown\":_vm.mouseDown}},_vm.listeners))}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n\n\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./VueExcelFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./VueExcelFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./VueExcelFilter.vue?vue&type=template&id=666babc5&scoped=true&\"\nimport script from \"./VueExcelFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./VueExcelFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./VueExcelFilter.vue?vue&type=style&index=0&id=666babc5&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"666babc5\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show),expression:\"show\"}],staticClass:\"panel-modal\",attrs:{\"id\":\"panelModal\"},on:{\"click\":_vm.clickOutside,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.hidePanel($event)}}},[_c('div',{ref:\"panelFilter\",staticClass:\"panel-body\"},[_c('div',{staticClass:\"panel-title\"},[_c('svg',{staticClass:\"svg-inline--fa fa-sort-amount-down fa-w-16 fa-1x\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"sort-amount-down\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M304 416h-64a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h64a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-128-64h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.37 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm256-192H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h192a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zm-64 128H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16zM496 32H240a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h256a16 16 0 0 0 16-16V48a16 16 0 0 0-16-16z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.sortingAndFiltering)}})]),_c('div',{staticClass:\"panel-content\"},[_c('div',{staticClass:\"panel-action\"},[_c('button',{staticClass:\"panel-button float-left\",on:{\"click\":function($event){return _vm.sort(1)}}},[_c('svg',{staticClass:\"svg-inline--fa fa-sort-alpha-down fa-w-14\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"sort-alpha-down\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 448 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M176 352h-48V48a16 16 0 0 0-16-16H80a16 16 0 0 0-16 16v304H16c-14.19 0-21.36 17.24-11.29 27.31l80 96a16 16 0 0 0 22.62 0l80-96C197.35 369.26 190.22 352 176 352zm240-64H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 446.37V464a16 16 0 0 0 16 16h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 321.63V304a16 16 0 0 0-16-16zm31.06-85.38l-59.27-160A16 16 0 0 0 372.72 32h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 224h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 224H432a16 16 0 0 0 15.06-21.38zM335.61 144L352 96l16.39 48z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.sortAscending)}})]),_c('button',{staticClass:\"panel-button float-right\",on:{\"click\":function($event){return _vm.sort(-1)}}},[_c('svg',{staticClass:\"svg-inline--fa fa-sort-alpha-up-alt fa-w-14\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"sort-alpha-up-alt\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 448 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M16 160h48v304a16 16 0 0 0 16 16h32a16 16 0 0 0 16-16V160h48c14.21 0 21.38-17.24 11.31-27.31l-80-96a16 16 0 0 0-22.62 0l-80 96C-5.35 142.74 1.78 160 16 160zm272 64h128a16 16 0 0 0 16-16v-32a16 16 0 0 0-16-16h-56l61.26-70.45A32 32 0 0 0 432 65.63V48a16 16 0 0 0-16-16H288a16 16 0 0 0-16 16v32a16 16 0 0 0 16 16h56l-61.26 70.45A32 32 0 0 0 272 190.37V208a16 16 0 0 0 16 16zm159.06 234.62l-59.27-160A16 16 0 0 0 372.72 288h-41.44a16 16 0 0 0-15.07 10.62l-59.27 160A16 16 0 0 0 272 480h24.83a16 16 0 0 0 15.23-11.08l4.42-12.92h71l4.41 12.92A16 16 0 0 0 407.16 480H432a16 16 0 0 0 15.06-21.38zM335.61 400L352 352l16.39 48z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.sortDescending)}})])]),_c('div',{staticClass:\"panel-action\"},[_c('div',[_c('button',{staticClass:\"panel-input-button\",on:{\"click\":function($event){_vm.showDropdown = !_vm.showDropdown}}},[_vm._v(_vm._s(_vm.symbol))]),_c('div',{staticClass:\"panel-dropdown\",class:{show: _vm.showDropdown}},[_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.near)}})]),_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('=')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.exactMatch)}})]),_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('<>')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.notMatch)}})]),_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('>')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.greaterThan)}})]),_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('>=')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.greaterThanOrEqualTo)}})]),_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('<')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.lessThan)}})]),_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('<=')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.lessThanOrEqualTo)}})]),_c('div',{staticClass:\"panel-dropdown-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.setFilterCondition('~')}}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.regularExpression)}})])]),_c('span',{staticClass:\"panel-input-b\"},[_c('input',{ref:\"inputFilter\",staticClass:\"panel-input\",attrs:{\"type\":\"text\",\"placeholder\":_vm.localizedLabel.customFilter,\"trim\":\"\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"},on:{\"keyup\":_vm.doInputFilter,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.doFilter($event)}}})])])]),_c('div',[_c('div',{ref:\"panelList\",staticClass:\"panel-list\"},_vm._l((_vm.filteredSortedUniqueValueList.slice(0, _vm.nFilterCount)),function(item,k){return _c('div',{key:k,staticClass:\"panel-list-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.filterPanelSelect(item)}}},[_c('input',{staticClass:\"panel-checkbox\",attrs:{\"type\":\"checkbox\"}}),_c('span',[_vm._v(_vm._s(item))])])}),0),(_vm.filteredSortedUniqueValueList.length>500)?_c('div',{staticClass:\"normal-text\",staticStyle:{\"float\":\"right\"}},[_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.listFirstNValuesOnly(_vm.nFilterCount))}})]):_vm._e()])]),_c('div',{staticClass:\"panel-footer\"},[_c('button',{staticClass:\"panel-button\",on:{\"click\":_vm.doFilter}},[_c('svg',{staticClass:\"svg-inline--fa fa-sign-in-alt fa-w-16 fa-fw fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"sign-in-alt\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.apply)}})])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ symbol }}\n \n \n \n \n \n \n \n ')\">\n \n \n ')\">\n \n \n =')\">\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ item }}\n \n \n 500\" class=\"normal-text\" style=\"float:right\">\n \n \n \n \n\n \n \n \n\n\n\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelFilter.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelFilter.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PanelFilter.vue?vue&type=template&id=4022a1be&scoped=true&\"\nimport script from \"./PanelFilter.vue?vue&type=script&lang=js&\"\nexport * from \"./PanelFilter.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PanelFilter.vue?vue&type=style&index=0&id=4022a1be&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"4022a1be\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show),expression:\"show\"}],staticClass:\"panel-modal\",attrs:{\"id\":\"panelModal\"},on:{\"click\":_vm.clickOutside,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.hidePanel($event)}}},[_c('div',{ref:\"panelSetting\",staticClass:\"panel-body\"},[_c('div',{staticClass:\"panel-title\"},[_c('svg',{staticClass:\"svg-inline--fa fa-bars fa-w-14 fa-1x\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"bars\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 448 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M16 132h416c8.837 0 16-7.163 16-16V76c0-8.837-7.163-16-16-16H16C7.163 60 0 67.163 0 76v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16zm0 160h416c8.837 0 16-7.163 16-16v-40c0-8.837-7.163-16-16-16H16c-8.837 0-16 7.163-16 16v40c0 8.837 7.163 16 16 16z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.tableSetting)}})]),_c('div',{staticClass:\"panel-content\"},[_c('div',{staticClass:\"panel-action\"},[_c('button',{staticClass:\"panel-button float-left no-margin\",on:{\"click\":function($event){return _vm.exportTable('excel')}}},[_c('svg',{staticClass:\"svg-inline--fa fa-file-excel fa-w-12\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"file-excel\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 384 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm60.1 106.5L224 336l60.1 93.5c5.1 8-.6 18.5-10.1 18.5h-34.9c-4.4 0-8.5-2.4-10.6-6.3C208.9 405.5 192 373 192 373c-6.4 14.8-10 20-36.6 68.8-2.1 3.9-6.1 6.3-10.5 6.3H110c-9.5 0-15.2-10.5-10.1-18.5l60.3-93.5-60.3-93.5c-5.2-8 .6-18.5 10.1-18.5h34.8c4.4 0 8.5 2.4 10.6 6.3 26.1 48.8 20 33.6 36.6 68.5 0 0 6.1-11.7 36.6-68.5 2.1-3.9 6.2-6.3 10.6-6.3H274c9.5-.1 15.2 10.4 10.1 18.4zM384 121.9v6.1H256V0h6.1c6.4 0 12.5 2.5 17 7l97.9 98c4.5 4.5 7 10.6 7 16.9z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.exportExcel)}})]),_c('button',{staticClass:\"panel-button float-right no-margin\",on:{\"click\":_vm.importTable}},[_c('svg',{staticClass:\"svg-inline--fa fa-file-csv fa-w-12\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"file-csv\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 384 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M224 136V0H24C10.7 0 0 10.7 0 24v464c0 13.3 10.7 24 24 24h336c13.3 0 24-10.7 24-24V160H248c-13.2 0-24-10.8-24-24zm-96 144c0 4.42-3.58 8-8 8h-8c-8.84 0-16 7.16-16 16v32c0 8.84 7.16 16 16 16h8c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-8c-26.51 0-48-21.49-48-48v-32c0-26.51 21.49-48 48-48h8c4.42 0 8 3.58 8 8v16zm44.27 104H160c-4.42 0-8-3.58-8-8v-16c0-4.42 3.58-8 8-8h12.27c5.95 0 10.41-3.5 10.41-6.62 0-1.3-.75-2.66-2.12-3.84l-21.89-18.77c-8.47-7.22-13.33-17.48-13.33-28.14 0-21.3 19.02-38.62 42.41-38.62H200c4.42 0 8 3.58 8 8v16c0 4.42-3.58 8-8 8h-12.27c-5.95 0-10.41 3.5-10.41 6.62 0 1.3.75 2.66 2.12 3.84l21.89 18.77c8.47 7.22 13.33 17.48 13.33 28.14.01 21.29-19 38.62-42.39 38.62zM256 264v20.8c0 20.27 5.7 40.17 16 56.88 10.3-16.7 16-36.61 16-56.88V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8v20.8c0 35.48-12.88 68.89-36.28 94.09-3.02 3.25-7.27 5.11-11.72 5.11s-8.7-1.86-11.72-5.11c-23.4-25.2-36.28-58.61-36.28-94.09V264c0-4.42 3.58-8 8-8h16c4.42 0 8 3.58 8 8zm121-159L279.1 7c-4.5-4.5-10.6-7-17-7H256v128h128v-6.1c0-6.3-2.5-12.4-7-16.9z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.importExcel)}})])]),_c('div',[_c('div',{ref:\"panelList\",staticClass:\"panel-list\"},[_c('draggable',{attrs:{\"draggable\":\".panel-list-item\"},model:{value:(_vm.fields),callback:function ($$v) {_vm.fields=$$v},expression:\"fields\"}},_vm._l((_vm.fields),function(item,k){return _c('div',{key:k,staticClass:\"panel-list-item\",on:{\"click\":function($event){$event.preventDefault();return _vm.columnLabelClick($event, item)}}},[_c('input',{staticClass:\"panel-checkbox\",attrs:{\"type\":\"checkbox\",\"disabled\":true},domProps:{\"checked\":!item.invisible}}),_c('span',[_vm._v(_vm._s(item.label))])])}),0)],1)])]),_c('div',{staticClass:\"panel-footer\"},[_c('button',{ref:\"button\",staticClass:\"panel-button\",on:{\"click\":_vm.reset}},[_c('svg',{staticClass:\"svg-inline--fa fa-save fa-w-14 fa-fw fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"save\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 448 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M433.941 129.941l-83.882-83.882A48 48 0 0 0 316.118 32H48C21.49 32 0 53.49 0 80v352c0 26.51 21.49 48 48 48h352c26.51 0 48-21.49 48-48V163.882a48 48 0 0 0-14.059-33.941zM224 416c-35.346 0-64-28.654-64-64 0-35.346 28.654-64 64-64s64 28.654 64 64c0 35.346-28.654 64-64 64zm96-304.52V212c0 6.627-5.373 12-12 12H76c-6.627 0-12-5.373-12-12V108c0-6.627 5.373-12 12-12h228.52c3.183 0 6.235 1.264 8.485 3.515l3.48 3.48A11.996 11.996 0 0 1 320 111.48z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.reset)}})]),_c('button',{ref:\"button\",staticClass:\"panel-button\",on:{\"click\":_vm.hidePanel}},[_c('svg',{staticClass:\"svg-inline--fa fa-sign-in-alt fa-w-16 fa-fw fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"sign-in-alt\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M416 448h-84c-6.6 0-12-5.4-12-12v-40c0-6.6 5.4-12 12-12h84c17.7 0 32-14.3 32-32V160c0-17.7-14.3-32-32-32h-84c-6.6 0-12-5.4-12-12V76c0-6.6 5.4-12 12-12h84c53 0 96 43 96 96v192c0 53-43 96-96 96zm-47-201L201 79c-15-15-41-4.5-41 17v96H24c-13.3 0-24 10.7-24 24v96c0 13.3 10.7 24 24 24h136v96c0 21.5 26 32 41 17l168-168c9.3-9.4 9.3-24.6 0-34z\"}})]),_c('span',{domProps:{\"innerHTML\":_vm._s(_vm.localizedLabel.back)}})])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n {{ item.label }}\n \n \n \n \n \n\n \n \n \n\n\n\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelSetting.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelSetting.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PanelSetting.vue?vue&type=template&id=59ad407e&scoped=true&\"\nimport script from \"./PanelSetting.vue?vue&type=script&lang=js&\"\nexport * from \"./PanelSetting.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PanelSetting.vue?vue&type=style&index=0&id=59ad407e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"59ad407e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.show),expression:\"show\"}],staticClass:\"panel-modal\",attrs:{\"id\":\"panelModal\"},on:{\"click\":_vm.clickOutside,\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"esc\",27,$event.key,[\"Esc\",\"Escape\"])){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.hidePanel($event)}}},[_c('div',{ref:\"panelFind\",staticClass:\"panel-body\"},[_c('div',[_c('span',{staticClass:\"panel-input-b\"},[_c('input',{directives:[{name:\"model\",rawName:\"v-model\",value:(_vm.inputFind),expression:\"inputFind\"}],ref:\"inputFind\",staticClass:\"panel-input\",attrs:{\"type\":\"text\",\"trim\":\"\",\"autocomplete\":\"off\",\"autocorrect\":\"off\",\"autocapitalize\":\"off\",\"spellcheck\":\"false\"},domProps:{\"value\":(_vm.inputFind)},on:{\"keydown\":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,\"enter\",13,$event.key,\"Enter\")){ return null; }if($event.ctrlKey||$event.shiftKey||$event.altKey||$event.metaKey){ return null; }return _vm.doFind(_vm.inputFind, $event)},\"input\":function($event){if($event.target.composing){ return; }_vm.inputFind=$event.target.value}}})]),_c('button',{staticClass:\"panel-input-button\",on:{\"click\":function($event){return _vm.doFind(_vm.inputFind)}}},[_c('svg',{staticClass:\"svg-inline--fa fa-search fa-w-16 fa-sm\",attrs:{\"aria-hidden\":\"true\",\"focusable\":\"false\",\"data-prefix\":\"fas\",\"data-icon\":\"search\",\"role\":\"img\",\"xmlns\":\"http://www.w3.org/2000/svg\",\"viewBox\":\"0 0 512 512\"}},[_c('path',{attrs:{\"fill\":\"currentColor\",\"d\":\"M505 442.7L405.3 343c-4.5-4.5-10.6-7-17-7H372c27.6-35.3 44-79.7 44-128C416 93.1 322.9 0 208 0S0 93.1 0 208s93.1 208 208 208c48.3 0 92.7-16.4 128-44v16.3c0 6.4 2.5 12.5 7 17l99.7 99.7c9.4 9.4 24.6 9.4 33.9 0l28.3-28.3c9.4-9.4 9.4-24.6.1-34zM208 336c-70.7 0-128-57.2-128-128 0-70.7 57.2-128 128-128 70.7 0 128 57.2 128 128 0 70.7-57.2 128-128 128z\"}})])])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n \n \n \n \n \n \n \n \n \n \n \n \n\n\n\n\n\n","import mod from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelFind.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../cache-loader/dist/cjs.js??ref--12-0!../../thread-loader/dist/cjs.js!../../babel-loader/lib/index.js!../../cache-loader/dist/cjs.js??ref--0-0!../../vue-loader/lib/index.js??vue-loader-options!./PanelFind.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./PanelFind.vue?vue&type=template&id=3f1d9fe3&scoped=true&\"\nimport script from \"./PanelFind.vue?vue&type=script&lang=js&\"\nexport * from \"./PanelFind.vue?vue&type=script&lang=js&\"\nimport style0 from \"./PanelFind.vue?vue&type=style&index=0&id=3f1d9fe3&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"3f1d9fe3\",\n null\n \n)\n\nexport default component.exports","export function isDate(value) {\n return value instanceof Date || Object.prototype.toString.call(value) === '[object Date]';\n}\nexport function toDate(value) {\n if (isDate(value)) {\n return new Date(value.getTime());\n }\n\n if (value == null) {\n return new Date(NaN);\n }\n\n return new Date(value);\n}\nexport function isValidDate(value) {\n return isDate(value) && !isNaN(value.getTime());\n}\nexport function startOfWeek(value) {\n var firstDayOfWeek = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n\n if (!(firstDayOfWeek >= 0 && firstDayOfWeek <= 6)) {\n throw new RangeError('weekStartsOn must be between 0 and 6');\n }\n\n var date = toDate(value);\n var day = date.getDay();\n var diff = (day + 7 - firstDayOfWeek) % 7;\n date.setDate(date.getDate() - diff);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nexport function startOfWeekYear(value) {\n var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref$firstDayOfWeek = _ref.firstDayOfWeek,\n firstDayOfWeek = _ref$firstDayOfWeek === void 0 ? 0 : _ref$firstDayOfWeek,\n _ref$firstWeekContain = _ref.firstWeekContainsDate,\n firstWeekContainsDate = _ref$firstWeekContain === void 0 ? 1 : _ref$firstWeekContain;\n\n if (!(firstWeekContainsDate >= 1 && firstWeekContainsDate <= 7)) {\n throw new RangeError('firstWeekContainsDate must be between 1 and 7');\n }\n\n var date = toDate(value);\n var year = date.getFullYear();\n var firstDateOfFirstWeek = new Date(0);\n\n for (var i = year + 1; i >= year - 1; i--) {\n firstDateOfFirstWeek.setFullYear(i, 0, firstWeekContainsDate);\n firstDateOfFirstWeek.setHours(0, 0, 0, 0);\n firstDateOfFirstWeek = startOfWeek(firstDateOfFirstWeek, firstDayOfWeek);\n\n if (date.getTime() >= firstDateOfFirstWeek.getTime()) {\n break;\n }\n }\n\n return firstDateOfFirstWeek;\n}\nexport function getWeek(value) {\n var _ref2 = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},\n _ref2$firstDayOfWeek = _ref2.firstDayOfWeek,\n firstDayOfWeek = _ref2$firstDayOfWeek === void 0 ? 0 : _ref2$firstDayOfWeek,\n _ref2$firstWeekContai = _ref2.firstWeekContainsDate,\n firstWeekContainsDate = _ref2$firstWeekContai === void 0 ? 1 : _ref2$firstWeekContai;\n\n var date = toDate(value);\n var firstDateOfThisWeek = startOfWeek(date, firstDayOfWeek);\n var firstDateOfFirstWeek = startOfWeekYear(date, {\n firstDayOfWeek: firstDayOfWeek,\n firstWeekContainsDate: firstWeekContainsDate\n });\n var diff = firstDateOfThisWeek.getTime() - firstDateOfFirstWeek.getTime();\n return Math.round(diff / (7 * 24 * 3600 * 1000)) + 1;\n}","var locale = {\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n firstDayOfWeek: 0,\n firstWeekContainsDate: 1\n};\nexport default locale;","import { toDate, isValidDate, getWeek } from './util';\nimport defaultLocale from './locale/en';\nvar REGEX_FORMAT = /\\[([^\\]]+)]|YYYY|YY?|M{1,4}|D{1,2}|d{1,4}|H{1,2}|h{1,2}|m{1,2}|s{1,2}|Z{1,2}|S{1,3}|w{1,2}|x|X|a|A/g;\n\nfunction pad(val) {\n var len = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 2;\n var output = \"\".concat(Math.abs(val));\n var sign = val < 0 ? '-' : '';\n\n while (output.length < len) {\n output = \"0\".concat(output);\n }\n\n return sign + output;\n}\n\nfunction formatTimezone(offset) {\n var delimeter = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : '';\n var sign = offset > 0 ? '-' : '+';\n var absOffset = Math.abs(offset);\n var hours = Math.floor(absOffset / 60);\n var minutes = absOffset % 60;\n return sign + pad(hours, 2) + delimeter + pad(minutes, 2);\n}\n\nvar meridiem = function meridiem(h, _, isLowercase) {\n var word = h < 12 ? 'AM' : 'PM';\n return isLowercase ? word.toLocaleLowerCase() : word;\n};\n\nvar formatFlags = {\n Y: function Y(date) {\n var y = date.getFullYear();\n return y <= 9999 ? \"\".concat(y) : \"+\".concat(y);\n },\n // Year: 00, 01, ..., 99\n YY: function YY(date) {\n return pad(date.getFullYear(), 4).substr(2);\n },\n // Year: 1900, 1901, ..., 2099\n YYYY: function YYYY(date) {\n return pad(date.getFullYear(), 4);\n },\n // Month: 1, 2, ..., 12\n M: function M(date) {\n return date.getMonth() + 1;\n },\n // Month: 01, 02, ..., 12\n MM: function MM(date) {\n return pad(date.getMonth() + 1, 2);\n },\n MMM: function MMM(date, locale) {\n return locale.monthsShort[date.getMonth()];\n },\n MMMM: function MMMM(date, locale) {\n return locale.months[date.getMonth()];\n },\n // Day of month: 1, 2, ..., 31\n D: function D(date) {\n return date.getDate();\n },\n // Day of month: 01, 02, ..., 31\n DD: function DD(date) {\n return pad(date.getDate(), 2);\n },\n // Hour: 0, 1, ... 23\n H: function H(date) {\n return date.getHours();\n },\n // Hour: 00, 01, ..., 23\n HH: function HH(date) {\n return pad(date.getHours(), 2);\n },\n // Hour: 1, 2, ..., 12\n h: function h(date) {\n var hours = date.getHours();\n\n if (hours === 0) {\n return 12;\n }\n\n if (hours > 12) {\n return hours % 12;\n }\n\n return hours;\n },\n // Hour: 01, 02, ..., 12\n hh: function hh() {\n var hours = formatFlags.h.apply(formatFlags, arguments);\n return pad(hours, 2);\n },\n // Minute: 0, 1, ..., 59\n m: function m(date) {\n return date.getMinutes();\n },\n // Minute: 00, 01, ..., 59\n mm: function mm(date) {\n return pad(date.getMinutes(), 2);\n },\n // Second: 0, 1, ..., 59\n s: function s(date) {\n return date.getSeconds();\n },\n // Second: 00, 01, ..., 59\n ss: function ss(date) {\n return pad(date.getSeconds(), 2);\n },\n // 1/10 of second: 0, 1, ..., 9\n S: function S(date) {\n return Math.floor(date.getMilliseconds() / 100);\n },\n // 1/100 of second: 00, 01, ..., 99\n SS: function SS(date) {\n return pad(Math.floor(date.getMilliseconds() / 10), 2);\n },\n // Millisecond: 000, 001, ..., 999\n SSS: function SSS(date) {\n return pad(date.getMilliseconds(), 3);\n },\n // Day of week: 0, 1, ..., 6\n d: function d(date) {\n return date.getDay();\n },\n // Day of week: 'Su', 'Mo', ..., 'Sa'\n dd: function dd(date, locale) {\n return locale.weekdaysMin[date.getDay()];\n },\n // Day of week: 'Sun', 'Mon',..., 'Sat'\n ddd: function ddd(date, locale) {\n return locale.weekdaysShort[date.getDay()];\n },\n // Day of week: 'Sunday', 'Monday', ...,'Saturday'\n dddd: function dddd(date, locale) {\n return locale.weekdays[date.getDay()];\n },\n // AM, PM\n A: function A(date, locale) {\n var meridiemFunc = locale.meridiem || meridiem;\n return meridiemFunc(date.getHours(), date.getMinutes(), false);\n },\n // am, pm\n a: function a(date, locale) {\n var meridiemFunc = locale.meridiem || meridiem;\n return meridiemFunc(date.getHours(), date.getMinutes(), true);\n },\n // Timezone: -01:00, +00:00, ... +12:00\n Z: function Z(date) {\n return formatTimezone(date.getTimezoneOffset(), ':');\n },\n // Timezone: -0100, +0000, ... +1200\n ZZ: function ZZ(date) {\n return formatTimezone(date.getTimezoneOffset());\n },\n // Seconds timestamp: 512969520\n X: function X(date) {\n return Math.floor(date.getTime() / 1000);\n },\n // Milliseconds timestamp: 512969520900\n x: function x(date) {\n return date.getTime();\n },\n w: function w(date, locale) {\n return getWeek(date, {\n firstDayOfWeek: locale.firstDayOfWeek,\n firstWeekContainsDate: locale.firstWeekContainsDate\n });\n },\n ww: function ww(date, locale) {\n return pad(formatFlags.w(date, locale), 2);\n }\n};\n\nfunction format(val, str) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n var formatStr = str ? String(str) : 'YYYY-MM-DDTHH:mm:ss.SSSZ';\n var date = toDate(val);\n\n if (!isValidDate(date)) {\n return 'Invalid Date';\n }\n\n var locale = options.locale || defaultLocale;\n return formatStr.replace(REGEX_FORMAT, function (match, p1) {\n if (p1) {\n return p1;\n }\n\n if (typeof formatFlags[match] === 'function') {\n return \"\".concat(formatFlags[match](date, locale));\n }\n\n return match;\n });\n}\n\nexport default format;","function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); }\n\nfunction _nonIterableSpread() { throw new TypeError(\"Invalid attempt to spread non-iterable instance\"); }\n\nfunction _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter); }\n\nfunction _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } }\n\nfunction ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); if (enumerableOnly) symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; }); keys.push.apply(keys, symbols); } return keys; }\n\nfunction _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i] != null ? arguments[i] : {}; if (i % 2) { ownKeys(source, true).forEach(function (key) { _defineProperty(target, key, source[key]); }); } else if (Object.getOwnPropertyDescriptors) { Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); } else { ownKeys(source).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } } return target; }\n\nfunction _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); }\n\nfunction _nonIterableRest() { throw new TypeError(\"Invalid attempt to destructure non-iterable instance\"); }\n\nfunction _iterableToArrayLimit(arr, i) { if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) { return; } var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i[\"return\"] != null) _i[\"return\"](); } finally { if (_d) throw _e; } } return _arr; }\n\nfunction _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; }\n\nfunction _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }\n\nimport defaultLocale from './locale/en';\nimport { startOfWeekYear } from './util';\nvar formattingTokens = /(\\[[^\\[]*\\])|(MM?M?M?|Do|DD?|ddd?d?|w[o|w]?|YYYY|YY|a|A|hh?|HH?|mm?|ss?|S{1,3}|x|X|ZZ?|.)/g;\nvar match1 = /\\d/; // 0 - 9\n\nvar match2 = /\\d\\d/; // 00 - 99\n\nvar match3 = /\\d{3}/; // 000 - 999\n\nvar match4 = /\\d{4}/; // 0000 - 9999\n\nvar match1to2 = /\\d\\d?/; // 0 - 99\n\nvar matchShortOffset = /[+-]\\d\\d:?\\d\\d/; // +00:00 -00:00 +0000 or -0000\n\nvar matchSigned = /[+-]?\\d+/; // -inf - inf\n\nvar matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/; // 123456789 123456789.123\n// const matchWord = /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i; // Word\n\nvar YEAR = 'year';\nvar MONTH = 'month';\nvar DAY = 'day';\nvar HOUR = 'hour';\nvar MINUTE = 'minute';\nvar SECOND = 'second';\nvar MILLISECOND = 'millisecond';\nvar parseFlags = {};\n\nvar addParseFlag = function addParseFlag(token, regex, callback) {\n var tokens = Array.isArray(token) ? token : [token];\n var func;\n\n if (typeof callback === 'string') {\n func = function func(input) {\n var value = parseInt(input, 10);\n return _defineProperty({}, callback, value);\n };\n } else {\n func = callback;\n }\n\n tokens.forEach(function (key) {\n parseFlags[key] = [regex, func];\n });\n};\n\nvar escapeStringRegExp = function escapeStringRegExp(str) {\n return str.replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&');\n};\n\nvar matchWordRegExp = function matchWordRegExp(localeKey) {\n return function (locale) {\n var array = locale[localeKey];\n\n if (!Array.isArray(array)) {\n throw new Error(\"Locale[\".concat(localeKey, \"] need an array\"));\n }\n\n return new RegExp(array.map(escapeStringRegExp).join('|'));\n };\n};\n\nvar matchWordCallback = function matchWordCallback(localeKey, key) {\n return function (input, locale) {\n var array = locale[localeKey];\n\n if (!Array.isArray(array)) {\n throw new Error(\"Locale[\".concat(localeKey, \"] need an array\"));\n }\n\n var index = array.indexOf(input);\n\n if (index < 0) {\n throw new Error('Invalid Word');\n }\n\n return _defineProperty({}, key, index);\n };\n};\n\naddParseFlag('Y', matchSigned, YEAR);\naddParseFlag('YY', match2, function (input) {\n var year = new Date().getFullYear();\n var cent = Math.floor(year / 100);\n var value = parseInt(input, 10);\n value = (value > 68 ? cent - 1 : cent) * 100 + value;\n return _defineProperty({}, YEAR, value);\n});\naddParseFlag('YYYY', match4, YEAR);\naddParseFlag('M', match1to2, function (input) {\n return _defineProperty({}, MONTH, parseInt(input, 10) - 1);\n});\naddParseFlag('MM', match2, function (input) {\n return _defineProperty({}, MONTH, parseInt(input, 10) - 1);\n});\naddParseFlag('MMM', matchWordRegExp('monthsShort'), matchWordCallback('monthsShort', MONTH));\naddParseFlag('MMMM', matchWordRegExp('months'), matchWordCallback('months', MONTH));\naddParseFlag('D', match1to2, DAY);\naddParseFlag('DD', match2, DAY);\naddParseFlag(['H', 'h'], match1to2, HOUR);\naddParseFlag(['HH', 'hh'], match2, HOUR);\naddParseFlag('m', match1to2, MINUTE);\naddParseFlag('mm', match2, MINUTE);\naddParseFlag('s', match1to2, SECOND);\naddParseFlag('ss', match2, SECOND);\naddParseFlag('S', match1, function (input) {\n return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 100);\n});\naddParseFlag('SS', match2, function (input) {\n return _defineProperty({}, MILLISECOND, parseInt(input, 10) * 10);\n});\naddParseFlag('SSS', match3, MILLISECOND);\n\nfunction matchMeridiem(locale) {\n return locale.meridiemParse || /[ap]\\.?m?\\.?/i;\n}\n\nfunction defaultIsPM(input) {\n return \"\".concat(input).toLowerCase().charAt(0) === 'p';\n}\n\naddParseFlag(['A', 'a'], matchMeridiem, function (input, locale) {\n var isPM = typeof locale.isPM === 'function' ? locale.isPM(input) : defaultIsPM(input);\n return {\n isPM: isPM\n };\n});\n\nfunction offsetFromString(str) {\n var _ref8 = str.match(/([+-]|\\d\\d)/g) || ['-', '0', '0'],\n _ref9 = _slicedToArray(_ref8, 3),\n symbol = _ref9[0],\n hour = _ref9[1],\n minute = _ref9[2];\n\n var minutes = parseInt(hour, 10) * 60 + parseInt(minute, 10);\n\n if (minutes === 0) {\n return 0;\n }\n\n return symbol === '+' ? -minutes : +minutes;\n}\n\naddParseFlag(['Z', 'ZZ'], matchShortOffset, function (input) {\n return {\n offset: offsetFromString(input)\n };\n});\naddParseFlag('x', matchSigned, function (input) {\n return {\n date: new Date(parseInt(input, 10))\n };\n});\naddParseFlag('X', matchTimestamp, function (input) {\n return {\n date: new Date(parseFloat(input) * 1000)\n };\n});\naddParseFlag('d', match1, 'weekday');\naddParseFlag('dd', matchWordRegExp('weekdaysMin'), matchWordCallback('weekdaysMin', 'weekday'));\naddParseFlag('ddd', matchWordRegExp('weekdaysShort'), matchWordCallback('weekdaysShort', 'weekday'));\naddParseFlag('dddd', matchWordRegExp('weekdays'), matchWordCallback('weekdays', 'weekday'));\naddParseFlag('w', match1to2, 'week');\naddParseFlag('ww', match2, 'week');\n\nfunction to24hour(hour, isPM) {\n if (hour !== undefined && isPM !== undefined) {\n if (isPM) {\n if (hour < 12) {\n return hour + 12;\n }\n } else if (hour === 12) {\n return 0;\n }\n }\n\n return hour;\n}\n\nfunction getFullInputArray(input) {\n var backupDate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : new Date();\n var result = [0, 0, 1, 0, 0, 0, 0];\n var backupArr = [backupDate.getFullYear(), backupDate.getMonth(), backupDate.getDate(), backupDate.getHours(), backupDate.getMinutes(), backupDate.getSeconds(), backupDate.getMilliseconds()];\n var useBackup = true;\n\n for (var i = 0; i < 7; i++) {\n if (input[i] === undefined) {\n result[i] = useBackup ? backupArr[i] : result[i];\n } else {\n result[i] = input[i];\n useBackup = false;\n }\n }\n\n return result;\n}\n\nfunction createUTCDate() {\n var date;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var y = args[0];\n\n if (y < 100 && y >= 0) {\n args[0] += 400;\n date = new Date(Date.UTC.apply(Date, args)); // eslint-disable-next-line no-restricted-globals\n\n if (isFinite(date.getUTCFullYear())) {\n date.setUTCFullYear(y);\n }\n } else {\n date = new Date(Date.UTC.apply(Date, args));\n }\n\n return date;\n}\n\nfunction makeParser(dateString, format, locale) {\n var tokens = format.match(formattingTokens);\n\n if (!tokens) {\n throw new Error();\n }\n\n var length = tokens.length;\n var mark = {};\n\n for (var i = 0; i < length; i += 1) {\n var token = tokens[i];\n var parseTo = parseFlags[token];\n\n if (!parseTo) {\n var word = token.replace(/^\\[|\\]$/g, '');\n\n if (dateString.indexOf(word) === 0) {\n dateString = dateString.substr(word.length);\n } else {\n throw new Error('not match');\n }\n } else {\n var regex = typeof parseTo[0] === 'function' ? parseTo[0](locale) : parseTo[0];\n var parser = parseTo[1];\n var value = (regex.exec(dateString) || [])[0];\n var obj = parser(value, locale);\n mark = _objectSpread({}, mark, {}, obj);\n dateString = dateString.replace(value, '');\n }\n }\n\n return mark;\n}\n\nexport default function parse(str, format) {\n var options = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {};\n\n try {\n var _options$locale = options.locale,\n _locale = _options$locale === void 0 ? defaultLocale : _options$locale,\n _options$backupDate = options.backupDate,\n backupDate = _options$backupDate === void 0 ? new Date() : _options$backupDate;\n\n var parseResult = makeParser(str, format, _locale);\n var year = parseResult.year,\n month = parseResult.month,\n day = parseResult.day,\n hour = parseResult.hour,\n minute = parseResult.minute,\n second = parseResult.second,\n millisecond = parseResult.millisecond,\n isPM = parseResult.isPM,\n date = parseResult.date,\n offset = parseResult.offset,\n weekday = parseResult.weekday,\n week = parseResult.week;\n\n if (date) {\n return date;\n }\n\n var inputArray = [year, month, day, hour, minute, second, millisecond];\n inputArray[3] = to24hour(inputArray[3], isPM); // check week\n\n if (week !== undefined && month === undefined && day === undefined) {\n // new Date(year, 3) make sure in current year\n var firstDate = startOfWeekYear(year === undefined ? backupDate : new Date(year, 3), {\n firstDayOfWeek: _locale.firstDayOfWeek,\n firstWeekContainsDate: _locale.firstWeekContainsDate\n });\n return new Date(firstDate.getTime() + (week - 1) * 7 * 24 * 3600 * 1000);\n }\n\n var utcDate = createUTCDate.apply(void 0, _toConsumableArray(getFullInputArray(inputArray, backupDate)));\n var offsetMilliseconds = (offset === undefined ? utcDate.getTimezoneOffset() : offset) * 60 * 1000;\n var parsedDate = new Date(utcDate.getTime() + offsetMilliseconds); // check weekday\n\n if (weekday !== undefined && parsedDate.getDay() !== weekday) {\n return new Date(NaN);\n }\n\n return parsedDate;\n } catch (e) {\n return new Date(NaN);\n }\n}","import { getWeek, format, parse } from 'date-format-parse';\n\nfunction _typeof(obj) {\n \"@babel/helpers - typeof\";\n\n if (typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\") {\n _typeof = function (obj) {\n return typeof obj;\n };\n } else {\n _typeof = function (obj) {\n return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n };\n }\n\n return _typeof(obj);\n}\n\nfunction _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nfunction _extends() {\n _extends = Object.assign || function (target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i];\n\n for (var key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n target[key] = source[key];\n }\n }\n }\n\n return target;\n };\n\n return _extends.apply(this, arguments);\n}\n\nfunction ownKeys(object, enumerableOnly) {\n var keys = Object.keys(object);\n\n if (Object.getOwnPropertySymbols) {\n var symbols = Object.getOwnPropertySymbols(object);\n if (enumerableOnly) symbols = symbols.filter(function (sym) {\n return Object.getOwnPropertyDescriptor(object, sym).enumerable;\n });\n keys.push.apply(keys, symbols);\n }\n\n return keys;\n}\n\nfunction _objectSpread2(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n\n if (i % 2) {\n ownKeys(Object(source), true).forEach(function (key) {\n _defineProperty(target, key, source[key]);\n });\n } else if (Object.getOwnPropertyDescriptors) {\n Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));\n } else {\n ownKeys(Object(source)).forEach(function (key) {\n Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));\n });\n }\n }\n\n return target;\n}\n\nfunction _objectWithoutPropertiesLoose(source, excluded) {\n if (source == null) return {};\n var target = {};\n var sourceKeys = Object.keys(source);\n var key, i;\n\n for (i = 0; i < sourceKeys.length; i++) {\n key = sourceKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n target[key] = source[key];\n }\n\n return target;\n}\n\nfunction _objectWithoutProperties(source, excluded) {\n if (source == null) return {};\n\n var target = _objectWithoutPropertiesLoose(source, excluded);\n\n var key, i;\n\n if (Object.getOwnPropertySymbols) {\n var sourceSymbolKeys = Object.getOwnPropertySymbols(source);\n\n for (i = 0; i < sourceSymbolKeys.length; i++) {\n key = sourceSymbolKeys[i];\n if (excluded.indexOf(key) >= 0) continue;\n if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;\n target[key] = source[key];\n }\n }\n\n return target;\n}\n\nfunction _slicedToArray(arr, i) {\n return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();\n}\n\nfunction _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nfunction _iterableToArrayLimit(arr, i) {\n if (typeof Symbol === \"undefined\" || !(Symbol.iterator in Object(arr))) return;\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nfunction _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(n);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n}\n\nfunction _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n}\n\nfunction _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n}\n\nfunction _extends$1() {\n return _extends$1 = Object.assign || function (a) {\n for (var b, c = 1; c < arguments.length; c++) {\n for (var d in b = arguments[c], b) {\n Object.prototype.hasOwnProperty.call(b, d) && (a[d] = b[d]);\n }\n }\n\n return a;\n }, _extends$1.apply(this, arguments);\n}\n\nvar normalMerge = [\"attrs\", \"props\", \"domProps\"],\n toArrayMerge = [\"class\", \"style\", \"directives\"],\n functionalMerge = [\"on\", \"nativeOn\"],\n mergeJsxProps = function mergeJsxProps(a) {\n return a.reduce(function (c, a) {\n for (var b in a) {\n if (!c[b]) c[b] = a[b];else if (-1 !== normalMerge.indexOf(b)) c[b] = _extends$1({}, c[b], a[b]);else if (-1 !== toArrayMerge.indexOf(b)) {\n var d = c[b] instanceof Array ? c[b] : [c[b]],\n e = a[b] instanceof Array ? a[b] : [a[b]];\n c[b] = d.concat(e);\n } else if (-1 !== functionalMerge.indexOf(b)) {\n for (var f in a[b]) {\n if (c[b][f]) {\n var g = c[b][f] instanceof Array ? c[b][f] : [c[b][f]],\n h = a[b][f] instanceof Array ? a[b][f] : [a[b][f]];\n c[b][f] = g.concat(h);\n } else c[b][f] = a[b][f];\n }\n } else if (\"hook\" == b) for (var i in a[b]) {\n c[b][i] = c[b][i] ? mergeFn(c[b][i], a[b][i]) : a[b][i];\n } else c[b] = a[b];\n }\n\n return c;\n }, {});\n},\n mergeFn = function mergeFn(a, b) {\n return function () {\n a && a.apply(this, arguments), b && b.apply(this, arguments);\n };\n};\n\nvar helper = mergeJsxProps;\n\n// new Date(10, 0, 1) The year from 0 to 99 will be incremented by 1900 automatically.\nfunction createDate(y) {\n var M = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 0;\n var d = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 1;\n var h = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : 0;\n var m = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : 0;\n var s = arguments.length > 5 && arguments[5] !== undefined ? arguments[5] : 0;\n var ms = arguments.length > 6 && arguments[6] !== undefined ? arguments[6] : 0;\n var date = new Date(y, M, d, h, m, s, ms);\n\n if (y < 100 && y >= 0) {\n date.setFullYear(y);\n }\n\n return date;\n}\nfunction isValidDate(date) {\n return date instanceof Date && !isNaN(date);\n}\nfunction isValidRangeDate(date) {\n return Array.isArray(date) && date.length === 2 && date.every(isValidDate) && date[0] <= date[1];\n}\nfunction isValidDates(dates) {\n return Array.isArray(dates) && dates.every(isValidDate);\n}\nfunction getValidDate(value) {\n var date = new Date(value);\n\n if (isValidDate(date)) {\n return date;\n }\n\n for (var _len = arguments.length, backup = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n backup[_key - 1] = arguments[_key];\n }\n\n if (backup.length) {\n return getValidDate.apply(void 0, backup);\n }\n\n return new Date();\n}\nfunction startOfYear(value) {\n var date = new Date(value);\n date.setMonth(0, 1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction startOfMonth(value) {\n var date = new Date(value);\n date.setDate(1);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction startOfDay(value) {\n var date = new Date(value);\n date.setHours(0, 0, 0, 0);\n return date;\n}\nfunction getCalendar(_ref) {\n var firstDayOfWeek = _ref.firstDayOfWeek,\n year = _ref.year,\n month = _ref.month;\n var arr = []; // change to the last day of the last month\n\n var calendar = createDate(year, month, 0);\n var lastDayInLastMonth = calendar.getDate(); // getDay() 0 is Sunday, 1 is Monday\n\n var firstDayInLastMonth = lastDayInLastMonth - (calendar.getDay() + 7 - firstDayOfWeek) % 7;\n\n for (var i = firstDayInLastMonth; i <= lastDayInLastMonth; i++) {\n arr.push(createDate(year, month, i - lastDayInLastMonth));\n } // change to the last day of the current month\n\n\n calendar.setMonth(month + 1, 0);\n var lastDayInCurrentMonth = calendar.getDate();\n\n for (var _i = 1; _i <= lastDayInCurrentMonth; _i++) {\n arr.push(createDate(year, month, _i));\n }\n\n var lastMonthLength = lastDayInLastMonth - firstDayInLastMonth + 1;\n var nextMonthLength = 6 * 7 - lastMonthLength - lastDayInCurrentMonth;\n\n for (var _i2 = 1; _i2 <= nextMonthLength; _i2++) {\n arr.push(createDate(year, month, lastDayInCurrentMonth + _i2));\n }\n\n return arr;\n}\nfunction setMonth(dirtyDate, dirtyMonth) {\n var date = new Date(dirtyDate);\n var month = Number(dirtyMonth);\n var year = date.getFullYear();\n var daysInMonth = createDate(year, month + 1, 0).getDate();\n var day = date.getDate();\n date.setMonth(month, Math.min(day, daysInMonth));\n return date;\n}\nfunction assignTime(target, source) {\n var date = new Date(target);\n var time = new Date(source);\n date.setHours(time.getHours(), time.getMinutes(), time.getSeconds());\n return date;\n}\n\n/**\n * chunk the array\n * @param {Array} arr\n * @param {Number} size\n */\nfunction chunk(arr, size) {\n if (!Array.isArray(arr)) {\n return [];\n }\n\n var result = [];\n var len = arr.length;\n var i = 0;\n size = size || len;\n\n while (i < len) {\n result.push(arr.slice(i, i += size));\n }\n\n return result;\n}\n/**\n * isObject\n * @param {*} obj\n * @returns {Boolean}\n */\n\nfunction isObject(obj) {\n return Object.prototype.toString.call(obj) === '[object Object]';\n}\n/**\n * pick object\n * @param {Object} obj\n * @param {Array|String} props\n */\n\nfunction pick(obj, props) {\n if (!isObject(obj)) return {};\n\n if (!Array.isArray(props)) {\n props = [props];\n }\n\n var res = {};\n props.forEach(function (prop) {\n if (prop in obj) {\n res[prop] = obj[prop];\n }\n });\n return res;\n}\n/**\n * deep merge two object without merging array\n * @param {object} target\n * @param {object} source\n */\n\nfunction mergeDeep(target, source) {\n if (!isObject(target)) {\n return {};\n }\n\n var result = target;\n\n if (isObject(source)) {\n Object.keys(source).forEach(function (key) {\n var value = source[key];\n\n if (isObject(value) && isObject(target[key])) {\n value = mergeDeep(target[key], value);\n }\n\n result = _objectSpread2({}, result, _defineProperty({}, key, value));\n });\n }\n\n return result;\n}\n\nfunction unwrapExports (x) {\n\treturn x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\n\nfunction createCommonjsModule(fn, module) {\n\treturn module = { exports: {} }, fn(module, module.exports), module.exports;\n}\n\nvar en = createCommonjsModule(function (module, exports) {\n\nObject.defineProperty(exports, \"__esModule\", {\n value: true\n});\nexports[\"default\"] = void 0;\nvar locale = {\n months: ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'],\n monthsShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'],\n weekdays: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'],\n weekdaysShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'],\n weekdaysMin: ['Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa'],\n firstDayOfWeek: 0,\n firstWeekContainsDate: 1\n};\nvar _default = locale;\nexports[\"default\"] = _default;\nmodule.exports = exports.default;\n});\n\nvar en$1 = unwrapExports(en);\n\nvar lang = {\n formatLocale: en$1,\n yearFormat: 'YYYY',\n monthFormat: 'MMM',\n monthBeforeYear: true\n};\n\nvar defaultLocale = 'en';\nvar locales = {};\nlocales[defaultLocale] = lang;\nfunction locale(name, object, isLocal) {\n if (typeof name !== 'string') return locales[defaultLocale];\n var l = defaultLocale;\n\n if (locales[name]) {\n l = name;\n }\n\n if (object) {\n locales[name] = object;\n l = name;\n }\n\n if (!isLocal) {\n defaultLocale = l;\n }\n\n return locales[name] || locales[defaultLocale];\n}\n/**\n * get locale object\n * @param {string} name lang\n */\n\nfunction getLocale(name) {\n return locale(name, null, true);\n}\n\n/* istanbul ignore file */\nfunction rafThrottle(fn) {\n var isRunning = false;\n return function fnBinfRaf() {\n var _this = this;\n\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n if (isRunning) return;\n isRunning = true;\n requestAnimationFrame(function () {\n isRunning = false;\n fn.apply(_this, args);\n });\n };\n}\n\n/**\n * get the hidden element width, height\n * @param {HTMLElement} element dom\n */\nfunction getPopupElementSize(element) {\n var originalDisplay = element.style.display;\n var originalVisibility = element.style.visibility;\n element.style.display = 'block';\n element.style.visibility = 'hidden';\n var styles = window.getComputedStyle(element);\n var width = element.offsetWidth + parseInt(styles.marginLeft, 10) + parseInt(styles.marginRight, 10);\n var height = element.offsetHeight + parseInt(styles.marginTop, 10) + parseInt(styles.marginBottom, 10);\n element.style.display = originalDisplay;\n element.style.visibility = originalVisibility;\n return {\n width: width,\n height: height\n };\n}\n/**\n * get the popup position\n * @param {HTMLElement} el relative element\n * @param {Number} targetWidth target element's width\n * @param {Number} targetHeight target element's height\n * @param {Boolean} fixed\n */\n\nfunction getRelativePosition(el, targetWidth, targetHeight, fixed) {\n var left = 0;\n var top = 0;\n var offsetX = 0;\n var offsetY = 0;\n var relativeRect = el.getBoundingClientRect();\n var dw = document.documentElement.clientWidth;\n var dh = document.documentElement.clientHeight;\n\n if (fixed) {\n offsetX = window.pageXOffset + relativeRect.left;\n offsetY = window.pageYOffset + relativeRect.top;\n }\n\n if (dw - relativeRect.left < targetWidth && relativeRect.right < targetWidth) {\n left = offsetX - relativeRect.left + 1;\n } else if (relativeRect.left + relativeRect.width / 2 <= dw / 2) {\n left = offsetX;\n } else {\n left = offsetX + relativeRect.width - targetWidth;\n }\n\n if (relativeRect.top <= targetHeight && dh - relativeRect.bottom <= targetHeight) {\n top = offsetY + dh - relativeRect.top - targetHeight;\n } else if (relativeRect.top + relativeRect.height / 2 <= dh / 2) {\n top = offsetY + relativeRect.height;\n } else {\n top = offsetY - targetHeight;\n }\n\n return {\n left: \"\".concat(left, \"px\"),\n top: \"\".concat(top, \"px\")\n };\n}\nfunction getScrollParent(node) {\n var until = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : document.body;\n\n if (!node || node === until) {\n return null;\n }\n\n var style = function style(value, prop) {\n return getComputedStyle(value, null).getPropertyValue(prop);\n };\n\n var regex = /(auto|scroll)/;\n var scroll = regex.test(style(node, 'overflow') + style(node, 'overflow-y') + style(node, 'overflow-x'));\n return scroll ? node : getScrollParent(node.parentNode, until);\n}\n\n//\nvar script = {\n name: 'Popup',\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n props: {\n visible: {\n type: Boolean,\n default: false\n },\n appendToBody: {\n type: Boolean,\n default: true\n }\n },\n data: function data() {\n return {\n top: '',\n left: ''\n };\n },\n watch: {\n visible: {\n immediate: true,\n handler: function handler(val) {\n var _this = this;\n\n this.$nextTick(function () {\n if (val) {\n _this.displayPopup();\n }\n });\n }\n }\n },\n mounted: function mounted() {\n var _this2 = this;\n\n if (this.appendToBody) {\n document.body.appendChild(this.$el);\n }\n\n this._clickoutEvent = 'ontouchend' in document ? 'touchstart' : 'mousedown';\n document.addEventListener(this._clickoutEvent, this.handleClickOutside); // change the popup position when resize or scroll\n\n var relativeElement = this.$parent.$el;\n this._displayPopup = rafThrottle(function () {\n return _this2.displayPopup();\n });\n this._scrollParent = getScrollParent(relativeElement) || window;\n\n this._scrollParent.addEventListener('scroll', this._displayPopup);\n\n window.addEventListener('resize', this._displayPopup);\n },\n beforeDestroy: function beforeDestroy() {\n if (this.appendToBody && this.$el.parentNode) {\n this.$el.parentNode.removeChild(this.$el);\n }\n\n document.removeEventListener(this._clickoutEvent, this.handleClickOutside);\n\n this._scrollParent.removeEventListener('scroll', this._displayPopup);\n\n window.removeEventListener('resize', this._displayPopup);\n },\n methods: {\n handleClickOutside: function handleClickOutside(evt) {\n if (!this.visible) return;\n var target = evt.target;\n var el = this.$el;\n\n if (el && !el.contains(target)) {\n this.$emit('clickoutside', evt);\n }\n },\n displayPopup: function displayPopup() {\n if (!this.visible) return;\n var popup = this.$el;\n var relativeElement = this.$parent.$el;\n var appendToBody = this.appendToBody;\n\n if (!this._popupRect) {\n this._popupRect = getPopupElementSize(popup);\n }\n\n var _this$_popupRect = this._popupRect,\n width = _this$_popupRect.width,\n height = _this$_popupRect.height;\n\n var _getRelativePosition = getRelativePosition(relativeElement, width, height, appendToBody),\n left = _getRelativePosition.left,\n top = _getRelativePosition.top;\n\n this.left = left;\n this.top = top;\n }\n }\n};\n\nfunction normalizeComponent(template, style, script, scopeId, isFunctionalTemplate, moduleIdentifier\n/* server only */\n, shadowMode, createInjector, createInjectorSSR, createInjectorShadow) {\n if (typeof shadowMode !== 'boolean') {\n createInjectorSSR = createInjector;\n createInjector = shadowMode;\n shadowMode = false;\n } // Vue.extend constructor export interop.\n\n\n var options = typeof script === 'function' ? script.options : script; // render functions\n\n if (template && template.render) {\n options.render = template.render;\n options.staticRenderFns = template.staticRenderFns;\n options._compiled = true; // functional template\n\n if (isFunctionalTemplate) {\n options.functional = true;\n }\n } // scopedId\n\n\n if (scopeId) {\n options._scopeId = scopeId;\n }\n\n var hook;\n\n if (moduleIdentifier) {\n // server build\n hook = function hook(context) {\n // 2.3 injection\n context = context || // cached call\n this.$vnode && this.$vnode.ssrContext || // stateful\n this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext; // functional\n // 2.2 with runInNewContext: true\n\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__;\n } // inject component styles\n\n\n if (style) {\n style.call(this, createInjectorSSR(context));\n } // register component module identifier for async chunk inference\n\n\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier);\n }\n }; // used by ssr in case component is cached and beforeCreate\n // never gets called\n\n\n options._ssrRegister = hook;\n } else if (style) {\n hook = shadowMode ? function (context) {\n style.call(this, createInjectorShadow(context, this.$root.$options.shadowRoot));\n } : function (context) {\n style.call(this, createInjector(context));\n };\n }\n\n if (hook) {\n if (options.functional) {\n // register for functional component in vue file\n var originalRender = options.render;\n\n options.render = function renderWithStyleInjection(h, context) {\n hook.call(context);\n return originalRender(h, context);\n };\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate;\n options.beforeCreate = existing ? [].concat(existing, hook) : [hook];\n }\n }\n\n return script;\n}\n\n/* script */\nvar __vue_script__ = script;\n/* template */\n\nvar __vue_render__ = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('transition', {\n attrs: {\n \"name\": _vm.prefixClass + \"-zoom-in-down\"\n }\n }, [_vm.visible ? _c('div', {\n class: _vm.prefixClass + \"-datepicker-main \" + _vm.prefixClass + \"-datepicker-popup\",\n style: {\n top: _vm.top,\n left: _vm.left,\n position: 'absolute'\n }\n }, [_vm._t(\"default\")], 2) : _vm._e()]);\n};\n\nvar __vue_staticRenderFns__ = [];\n/* style */\n\nvar __vue_inject_styles__ = undefined;\n/* scoped */\n\nvar __vue_scope_id__ = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__ = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__ = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__ = normalizeComponent({\n render: __vue_render__,\n staticRenderFns: __vue_staticRenderFns__\n}, __vue_inject_styles__, __vue_script__, __vue_scope_id__, __vue_is_functional_template__, __vue_module_identifier__, false, undefined, undefined, undefined);\n\n/* script */\n\n/* template */\nvar __vue_render__$1 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('svg', {\n attrs: {\n \"xmlns\": \"http://www.w3.org/2000/svg\",\n \"viewBox\": \"0 0 1024 1024\",\n \"width\": \"1em\",\n \"height\": \"1em\"\n }\n }, [_c('path', {\n attrs: {\n \"d\": \"M940.218182 107.054545h-209.454546V46.545455h-65.163636v60.50909H363.054545V46.545455H297.890909v60.50909H83.781818c-18.618182 0-32.581818 13.963636-32.581818 32.581819v805.236363c0 18.618182 13.963636 32.581818 32.581818 32.581818h861.090909c18.618182 0 32.581818-13.963636 32.581818-32.581818V139.636364c-4.654545-18.618182-18.618182-32.581818-37.236363-32.581819zM297.890909 172.218182V232.727273h65.163636V172.218182h307.2V232.727273h65.163637V172.218182h176.872727v204.8H116.363636V172.218182h181.527273zM116.363636 912.290909V442.181818h795.927273v470.109091H116.363636z\"\n }\n })]);\n};\n\nvar __vue_staticRenderFns__$1 = [];\n/* style */\n\nvar __vue_inject_styles__$1 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$1 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$1 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$1 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$1 = normalizeComponent({\n render: __vue_render__$1,\n staticRenderFns: __vue_staticRenderFns__$1\n}, __vue_inject_styles__$1, {}, __vue_scope_id__$1, __vue_is_functional_template__$1, __vue_module_identifier__$1, false, undefined, undefined, undefined);\n\n/* script */\n\n/* template */\nvar __vue_render__$2 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('svg', {\n attrs: {\n \"xmlns\": \"http://www.w3.org/2000/svg\",\n \"viewBox\": \"0 0 1024 1024\",\n \"width\": \"1em\",\n \"height\": \"1em\"\n }\n }, [_c('path', {\n attrs: {\n \"d\": \"M810.005333 274.005333l-237.994667 237.994667 237.994667 237.994667-60.010667 60.010667-237.994667-237.994667-237.994667 237.994667-60.010667-60.010667 237.994667-237.994667-237.994667-237.994667 60.010667-60.010667 237.994667 237.994667 237.994667-237.994667z\"\n }\n })]);\n};\n\nvar __vue_staticRenderFns__$2 = [];\n/* style */\n\nvar __vue_inject_styles__$2 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$2 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$2 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$2 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$2 = normalizeComponent({\n render: __vue_render__$2,\n staticRenderFns: __vue_staticRenderFns__$2\n}, __vue_inject_styles__$2, {}, __vue_scope_id__$2, __vue_is_functional_template__$2, __vue_module_identifier__$2, false, undefined, undefined, undefined);\n\n//\n//\n//\n//\n//\n//\n//\n//\n//\n//\nvar script$1 = {\n props: {\n type: String\n },\n inject: {\n prefixClass: {\n default: 'mx'\n }\n }\n};\n\n/* script */\nvar __vue_script__$1 = script$1;\n/* template */\n\nvar __vue_render__$3 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('button', _vm._g({\n class: _vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text \" + _vm.prefixClass + \"-btn-icon-\" + _vm.type,\n attrs: {\n \"type\": \"button\"\n }\n }, _vm.$listeners), [_c('i', {\n class: _vm.prefixClass + \"-icon-\" + _vm.type\n })]);\n};\n\nvar __vue_staticRenderFns__$3 = [];\n/* style */\n\nvar __vue_inject_styles__$3 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$3 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$3 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$3 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$3 = normalizeComponent({\n render: __vue_render__$3,\n staticRenderFns: __vue_staticRenderFns__$3\n}, __vue_inject_styles__$3, __vue_script__$1, __vue_scope_id__$3, __vue_is_functional_template__$3, __vue_module_identifier__$3, false, undefined, undefined, undefined);\n\nvar script$2 = {\n name: 'TableDate',\n components: {\n IconButton: __vue_component__$3\n },\n inject: {\n getLocale: {\n default: function _default() {\n return getLocale;\n }\n },\n getWeek: {\n default: function _default() {\n return getWeek;\n }\n },\n prefixClass: {\n default: 'mx'\n },\n onDateMouseEnter: {\n default: undefined\n },\n onDateMouseLeave: {\n default: undefined\n }\n },\n props: {\n calendar: {\n type: Date,\n default: function _default() {\n return new Date();\n }\n },\n showWeekNumber: {\n type: Boolean,\n default: false\n },\n titleFormat: {\n type: String,\n default: 'YYYY-MM-DD'\n },\n getRowClasses: {\n type: Function,\n default: function _default() {\n return [];\n }\n },\n getCellClasses: {\n type: Function,\n default: function _default() {\n return [];\n }\n }\n },\n computed: {\n firstDayOfWeek: function firstDayOfWeek() {\n return this.getLocale().formatLocale.firstDayOfWeek || 0;\n },\n yearMonth: function yearMonth() {\n var _this$getLocale = this.getLocale(),\n yearFormat = _this$getLocale.yearFormat,\n monthBeforeYear = _this$getLocale.monthBeforeYear,\n _this$getLocale$month = _this$getLocale.monthFormat,\n monthFormat = _this$getLocale$month === void 0 ? 'MMM' : _this$getLocale$month;\n\n var yearLabel = {\n panel: 'year',\n label: this.formatDate(this.calendar, yearFormat)\n };\n var monthLabel = {\n panel: 'month',\n label: this.formatDate(this.calendar, monthFormat)\n };\n return monthBeforeYear ? [monthLabel, yearLabel] : [yearLabel, monthLabel];\n },\n days: function days() {\n var locale = this.getLocale();\n var days = locale.days || locale.formatLocale.weekdaysMin;\n return days.concat(days).slice(this.firstDayOfWeek, this.firstDayOfWeek + 7);\n },\n dates: function dates() {\n var year = this.calendar.getFullYear();\n var month = this.calendar.getMonth();\n var arr = getCalendar({\n firstDayOfWeek: this.firstDayOfWeek,\n year: year,\n month: month\n });\n return chunk(arr, 7);\n }\n },\n methods: {\n getNextCalendar: function getNextCalendar(diffMonth) {\n var year = this.calendar.getFullYear();\n var month = this.calendar.getMonth();\n return createDate(year, month + diffMonth);\n },\n handleIconLeftClick: function handleIconLeftClick() {\n this.$emit('changecalendar', this.getNextCalendar(-1), 'last-month');\n },\n handleIconRightClick: function handleIconRightClick() {\n this.$emit('changecalendar', this.getNextCalendar(1), 'next-month');\n },\n handleIconDoubleLeftClick: function handleIconDoubleLeftClick() {\n this.$emit('changecalendar', this.getNextCalendar(-12), 'last-year');\n },\n handleIconDoubleRightClick: function handleIconDoubleRightClick() {\n this.$emit('changecalendar', this.getNextCalendar(12), 'next-year');\n },\n handlePanelChange: function handlePanelChange(panel) {\n this.$emit('changepanel', panel);\n },\n handleMouseEnter: function handleMouseEnter(cell) {\n if (typeof this.onDateMouseEnter === 'function') {\n this.onDateMouseEnter(cell);\n }\n },\n handleMouseLeave: function handleMouseLeave(cell) {\n if (typeof this.onDateMouseLeave === 'function') {\n this.onDateMouseLeave(cell);\n }\n },\n handleCellClick: function handleCellClick(evt) {\n var target = evt.target;\n\n if (target.tagName.toUpperCase() === 'DIV') {\n target = target.parentNode;\n }\n\n var index = target.getAttribute('data-row-col');\n\n if (index) {\n var _index$split$map = index.split(',').map(function (v) {\n return parseInt(v, 10);\n }),\n _index$split$map2 = _slicedToArray(_index$split$map, 2),\n row = _index$split$map2[0],\n col = _index$split$map2[1];\n\n var date = this.dates[row][col];\n this.$emit('select', new Date(date));\n }\n },\n formatDate: function formatDate(date, fmt) {\n return format(date, fmt, {\n locale: this.getLocale().formatLocale\n });\n },\n getCellTitle: function getCellTitle(date) {\n var fmt = this.titleFormat;\n return this.formatDate(date, fmt);\n },\n getWeekNumber: function getWeekNumber(date) {\n return this.getWeek(date, this.getLocale().formatLocale);\n }\n }\n};\n\n/* script */\nvar __vue_script__$2 = script$2;\n/* template */\n\nvar __vue_render__$4 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('div', {\n class: _vm.prefixClass + \"-calendar \" + _vm.prefixClass + \"-calendar-panel-date\"\n }, [_c('div', {\n class: _vm.prefixClass + \"-calendar-header\"\n }, [_c('icon-button', {\n attrs: {\n \"type\": \"double-left\"\n },\n on: {\n \"click\": _vm.handleIconDoubleLeftClick\n }\n }), _vm._v(\" \"), _c('icon-button', {\n attrs: {\n \"type\": \"left\"\n },\n on: {\n \"click\": _vm.handleIconLeftClick\n }\n }), _vm._v(\" \"), _c('icon-button', {\n attrs: {\n \"type\": \"double-right\"\n },\n on: {\n \"click\": _vm.handleIconDoubleRightClick\n }\n }), _vm._v(\" \"), _c('icon-button', {\n attrs: {\n \"type\": \"right\"\n },\n on: {\n \"click\": _vm.handleIconRightClick\n }\n }), _vm._v(\" \"), _c('span', {\n class: _vm.prefixClass + \"-calendar-header-label\"\n }, _vm._l(_vm.yearMonth, function (item) {\n return _c('button', {\n key: item.panel,\n class: _vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text \" + _vm.prefixClass + \"-btn-current-\" + item.panel,\n attrs: {\n \"type\": \"button\"\n },\n on: {\n \"click\": function click($event) {\n return _vm.handlePanelChange(item.panel);\n }\n }\n }, [_vm._v(\"\\n \" + _vm._s(item.label) + \"\\n \")]);\n }), 0)], 1), _vm._v(\" \"), _c('div', {\n class: _vm.prefixClass + \"-calendar-content\"\n }, [_c('table', {\n class: _vm.prefixClass + \"-table \" + _vm.prefixClass + \"-table-date\"\n }, [_c('thead', [_c('tr', [_vm.showWeekNumber ? _c('th', {\n class: _vm.prefixClass + \"-week-number-header\"\n }) : _vm._e(), _vm._v(\" \"), _vm._l(_vm.days, function (day) {\n return _c('th', {\n key: day\n }, [_vm._v(_vm._s(day))]);\n })], 2)]), _vm._v(\" \"), _c('tbody', {\n on: {\n \"click\": _vm.handleCellClick\n }\n }, _vm._l(_vm.dates, function (row, i) {\n return _c('tr', {\n key: i,\n class: [_vm.prefixClass + \"-date-row\", _vm.getRowClasses(row)]\n }, [_vm.showWeekNumber ? _c('td', {\n class: _vm.prefixClass + \"-week-number\",\n attrs: {\n \"data-row-col\": i + \",0\"\n }\n }, [_vm._v(\"\\n \" + _vm._s(_vm.getWeekNumber(row[0])) + \"\\n \")]) : _vm._e(), _vm._v(\" \"), _vm._l(row, function (cell, j) {\n return _c('td', {\n key: j,\n staticClass: \"cell\",\n class: _vm.getCellClasses(cell),\n attrs: {\n \"data-row-col\": i + \",\" + j,\n \"title\": _vm.getCellTitle(cell)\n },\n on: {\n \"mouseenter\": function mouseenter($event) {\n return _vm.handleMouseEnter(cell);\n },\n \"mouseleave\": function mouseleave($event) {\n return _vm.handleMouseLeave(cell);\n }\n }\n }, [_c('div', [_vm._v(_vm._s(cell.getDate()))])]);\n })], 2);\n }), 0)])])]);\n};\n\nvar __vue_staticRenderFns__$4 = [];\n/* style */\n\nvar __vue_inject_styles__$4 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$4 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$4 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$4 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$4 = normalizeComponent({\n render: __vue_render__$4,\n staticRenderFns: __vue_staticRenderFns__$4\n}, __vue_inject_styles__$4, __vue_script__$2, __vue_scope_id__$4, __vue_is_functional_template__$4, __vue_module_identifier__$4, false, undefined, undefined, undefined);\n\n//\nvar script$3 = {\n name: 'TableMonth',\n components: {\n IconButton: __vue_component__$3\n },\n inject: {\n getLocale: {\n default: function _default() {\n return getLocale;\n }\n },\n prefixClass: {\n default: 'mx'\n }\n },\n props: {\n calendar: {\n type: Date,\n default: function _default() {\n return new Date();\n }\n },\n getCellClasses: {\n type: Function,\n default: function _default() {\n return [];\n }\n }\n },\n computed: {\n calendarYear: function calendarYear() {\n return this.calendar.getFullYear();\n },\n months: function months() {\n var locale = this.getLocale();\n var monthsLocale = locale.months || locale.formatLocale.monthsShort;\n var months = monthsLocale.map(function (text, month) {\n return {\n text: text,\n month: month\n };\n });\n return chunk(months, 3);\n }\n },\n methods: {\n getNextCalendar: function getNextCalendar(diffYear) {\n var year = this.calendar.getFullYear();\n var month = this.calendar.getMonth();\n return createDate(year + diffYear, month);\n },\n handleIconDoubleLeftClick: function handleIconDoubleLeftClick() {\n this.$emit('changecalendar', this.getNextCalendar(-1), 'last-year');\n },\n handleIconDoubleRightClick: function handleIconDoubleRightClick() {\n this.$emit('changecalendar', this.getNextCalendar(1), 'next-year');\n },\n handlePanelChange: function handlePanelChange() {\n this.$emit('changepanel', 'year');\n },\n handleClick: function handleClick(evt) {\n var target = evt.target;\n\n if (target.tagName.toUpperCase() === 'DIV') {\n target = target.parentNode;\n }\n\n var month = target.getAttribute('data-month');\n\n if (month) {\n this.$emit('select', parseInt(month, 10));\n }\n }\n }\n};\n\n/* script */\nvar __vue_script__$3 = script$3;\n/* template */\n\nvar __vue_render__$5 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('div', {\n class: _vm.prefixClass + \"-calendar \" + _vm.prefixClass + \"-calendar-panel-month\"\n }, [_c('div', {\n class: _vm.prefixClass + \"-calendar-header\"\n }, [_c('icon-button', {\n attrs: {\n \"type\": \"double-left\"\n },\n on: {\n \"click\": _vm.handleIconDoubleLeftClick\n }\n }), _vm._v(\" \"), _c('icon-button', {\n attrs: {\n \"type\": \"double-right\"\n },\n on: {\n \"click\": _vm.handleIconDoubleRightClick\n }\n }), _vm._v(\" \"), _c('span', {\n class: _vm.prefixClass + \"-calendar-header-label\"\n }, [_c('button', {\n class: _vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text\",\n attrs: {\n \"type\": \"button\"\n },\n on: {\n \"click\": _vm.handlePanelChange\n }\n }, [_vm._v(\"\\n \" + _vm._s(_vm.calendarYear) + \"\\n \")])])], 1), _vm._v(\" \"), _c('div', {\n class: _vm.prefixClass + \"-calendar-content\"\n }, [_c('table', {\n class: _vm.prefixClass + \"-table \" + _vm.prefixClass + \"-table-month\",\n on: {\n \"click\": _vm.handleClick\n }\n }, _vm._l(_vm.months, function (row, i) {\n return _c('tr', {\n key: i\n }, _vm._l(row, function (cell, j) {\n return _c('td', {\n key: j,\n staticClass: \"cell\",\n class: _vm.getCellClasses(cell.month),\n attrs: {\n \"data-month\": cell.month\n }\n }, [_c('div', [_vm._v(_vm._s(cell.text))])]);\n }), 0);\n }), 0)])]);\n};\n\nvar __vue_staticRenderFns__$5 = [];\n/* style */\n\nvar __vue_inject_styles__$5 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$5 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$5 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$5 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$5 = normalizeComponent({\n render: __vue_render__$5,\n staticRenderFns: __vue_staticRenderFns__$5\n}, __vue_inject_styles__$5, __vue_script__$3, __vue_scope_id__$5, __vue_is_functional_template__$5, __vue_module_identifier__$5, false, undefined, undefined, undefined);\n\n//\nvar script$4 = {\n name: 'TableYear',\n components: {\n IconButton: __vue_component__$3\n },\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n props: {\n calendar: {\n type: Date,\n default: function _default() {\n return new Date();\n }\n },\n getCellClasses: {\n type: Function,\n default: function _default() {\n return [];\n }\n },\n getYearPanel: {\n type: Function\n }\n },\n computed: {\n years: function years() {\n var calendar = new Date(this.calendar);\n\n if (typeof this.getYearPanel === 'function') {\n return this.getYearPanel(calendar);\n }\n\n return this.getYears(calendar);\n },\n firstYear: function firstYear() {\n return this.years[0][0];\n },\n lastYear: function lastYear() {\n var last = function last(arr) {\n return arr[arr.length - 1];\n };\n\n return last(last(this.years));\n }\n },\n methods: {\n getYears: function getYears(calendar) {\n var firstYear = Math.floor(calendar.getFullYear() / 10) * 10;\n var years = [];\n\n for (var i = 0; i < 10; i++) {\n years.push(firstYear + i);\n }\n\n return chunk(years, 2);\n },\n getNextCalendar: function getNextCalendar(diffYear) {\n var year = this.calendar.getFullYear();\n var month = this.calendar.getMonth();\n return createDate(year + diffYear, month);\n },\n handleIconDoubleLeftClick: function handleIconDoubleLeftClick() {\n this.$emit('changecalendar', this.getNextCalendar(-10), 'last-decade');\n },\n handleIconDoubleRightClick: function handleIconDoubleRightClick() {\n this.$emit('changecalendar', this.getNextCalendar(10), 'next-decade');\n },\n handleClick: function handleClick(evt) {\n var target = evt.target;\n\n if (target.tagName.toUpperCase() === 'DIV') {\n target = target.parentNode;\n }\n\n var year = target.getAttribute('data-year');\n\n if (year) {\n this.$emit('select', parseInt(year, 10));\n }\n }\n }\n};\n\n/* script */\nvar __vue_script__$4 = script$4;\n/* template */\n\nvar __vue_render__$6 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('div', {\n class: _vm.prefixClass + \"-calendar \" + _vm.prefixClass + \"-calendar-panel-year\"\n }, [_c('div', {\n class: _vm.prefixClass + \"-calendar-header\"\n }, [_c('icon-button', {\n attrs: {\n \"type\": \"double-left\"\n },\n on: {\n \"click\": _vm.handleIconDoubleLeftClick\n }\n }), _vm._v(\" \"), _c('icon-button', {\n attrs: {\n \"type\": \"double-right\"\n },\n on: {\n \"click\": _vm.handleIconDoubleRightClick\n }\n }), _vm._v(\" \"), _c('span', {\n class: _vm.prefixClass + \"-calendar-header-label\"\n }, [_c('span', [_vm._v(_vm._s(_vm.firstYear))]), _vm._v(\" \"), _c('span', {\n class: _vm.prefixClass + \"-calendar-decade-separator\"\n }), _vm._v(\" \"), _c('span', [_vm._v(_vm._s(_vm.lastYear))])])], 1), _vm._v(\" \"), _c('div', {\n class: _vm.prefixClass + \"-calendar-content\"\n }, [_c('table', {\n class: _vm.prefixClass + \"-table \" + _vm.prefixClass + \"-table-year\",\n on: {\n \"click\": _vm.handleClick\n }\n }, _vm._l(_vm.years, function (row, i) {\n return _c('tr', {\n key: i\n }, _vm._l(row, function (cell, j) {\n return _c('td', {\n key: j,\n staticClass: \"cell\",\n class: _vm.getCellClasses(cell),\n attrs: {\n \"data-year\": cell\n }\n }, [_c('div', [_vm._v(_vm._s(cell))])]);\n }), 0);\n }), 0)])]);\n};\n\nvar __vue_staticRenderFns__$6 = [];\n/* style */\n\nvar __vue_inject_styles__$6 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$6 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$6 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$6 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$6 = normalizeComponent({\n render: __vue_render__$6,\n staticRenderFns: __vue_staticRenderFns__$6\n}, __vue_inject_styles__$6, __vue_script__$4, __vue_scope_id__$6, __vue_is_functional_template__$6, __vue_module_identifier__$6, false, undefined, undefined, undefined);\n\nvar CalendarPanel = {\n name: 'CalendarPanel',\n inject: {\n prefixClass: {\n default: 'mx'\n },\n dispatchDatePicker: {\n default: function _default() {\n return function () {};\n }\n }\n },\n props: {\n value: {},\n defaultValue: {\n default: function _default() {\n var date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n }\n },\n defaultPanel: {\n type: String\n },\n disabledDate: {\n type: Function,\n default: function _default() {\n return false;\n }\n },\n type: {\n type: String,\n default: 'date'\n },\n getClasses: {\n type: Function,\n default: function _default() {\n return [];\n }\n },\n showWeekNumber: {\n type: Boolean,\n default: undefined\n },\n getYearPanel: {\n type: Function\n },\n titleFormat: {\n type: String,\n default: 'YYYY-MM-DD'\n },\n calendar: Date,\n // update date when select year or month\n partialUpdate: {\n type: Boolean,\n default: false\n }\n },\n data: function data() {\n var panels = ['date', 'month', 'year'];\n var index = Math.max(panels.indexOf(this.type), panels.indexOf(this.defaultPanel));\n var panel = index !== -1 ? panels[index] : 'date';\n return {\n panel: panel,\n innerCalendar: new Date()\n };\n },\n computed: {\n innerValue: function innerValue() {\n var value = Array.isArray(this.value) ? this.value : [this.value];\n var map = {\n year: startOfYear,\n month: startOfMonth,\n date: startOfDay\n };\n var start = map[this.type] || map.date;\n return value.filter(isValidDate).map(function (v) {\n return start(v);\n });\n },\n calendarYear: function calendarYear() {\n return this.innerCalendar.getFullYear();\n },\n calendarMonth: function calendarMonth() {\n return this.innerCalendar.getMonth();\n }\n },\n watch: {\n value: {\n immediate: true,\n handler: 'initCalendar'\n },\n calendar: {\n handler: 'initCalendar'\n },\n defaultValue: {\n handler: 'initCalendar'\n }\n },\n methods: {\n initCalendar: function initCalendar() {\n var calendarDate = this.calendar;\n\n if (!isValidDate(calendarDate)) {\n var length = this.innerValue.length;\n calendarDate = getValidDate(length > 0 ? this.innerValue[length - 1] : this.defaultValue);\n }\n\n this.innerCalendar = startOfMonth(calendarDate);\n },\n isDisabled: function isDisabled(date) {\n return this.disabledDate(new Date(date), this.innerValue);\n },\n emitDate: function emitDate(date, type) {\n if (!this.isDisabled(date)) {\n this.$emit('select', date, type, this.innerValue); // someone need get the first selected date to set range value. (#429)\n\n this.dispatchDatePicker('pick', date, type);\n }\n },\n handleCalendarChange: function handleCalendarChange(calendar, type) {\n var oldCalendar = new Date(this.innerCalendar);\n this.innerCalendar = calendar;\n this.$emit('update:calendar', calendar);\n this.dispatchDatePicker('calendar-change', calendar, oldCalendar, type);\n },\n handelPanelChange: function handelPanelChange(panel) {\n var oldPanel = this.panel;\n this.panel = panel;\n this.dispatchDatePicker('panel-change', panel, oldPanel);\n },\n handleSelectYear: function handleSelectYear(year) {\n if (this.type === 'year') {\n var date = this.getYearCellDate(year);\n this.emitDate(date, 'year');\n } else {\n this.handleCalendarChange(createDate(year, this.calendarMonth), 'year');\n this.handelPanelChange('month');\n\n if (this.partialUpdate && this.innerValue.length === 1) {\n var _date = new Date(this.innerValue[0]);\n\n _date.setFullYear(year);\n\n this.emitDate(_date, 'year');\n }\n }\n },\n handleSelectMonth: function handleSelectMonth(month) {\n if (this.type === 'month') {\n var date = this.getMonthCellDate(month);\n this.emitDate(date, 'month');\n } else {\n this.handleCalendarChange(createDate(this.calendarYear, month), 'month');\n this.handelPanelChange('date');\n\n if (this.partialUpdate && this.innerValue.length === 1) {\n var _date2 = new Date(this.innerValue[0]);\n\n _date2.setFullYear(this.calendarYear);\n\n this.emitDate(setMonth(_date2, month), 'month');\n }\n }\n },\n handleSelectDate: function handleSelectDate(date) {\n this.emitDate(date, this.type === 'week' ? 'week' : 'date');\n },\n getMonthCellDate: function getMonthCellDate(month) {\n return createDate(this.calendarYear, month);\n },\n getYearCellDate: function getYearCellDate(year) {\n return createDate(year, 0);\n },\n getDateClasses: function getDateClasses(cellDate) {\n var notCurrentMonth = cellDate.getMonth() !== this.calendarMonth;\n var classes = [];\n\n if (cellDate.getTime() === new Date().setHours(0, 0, 0, 0)) {\n classes.push('today');\n }\n\n if (notCurrentMonth) {\n classes.push('not-current-month');\n }\n\n var state = this.getStateClass(cellDate);\n\n if (!(state === 'active' && notCurrentMonth)) {\n classes.push(state);\n }\n\n return classes.concat(this.getClasses(cellDate, this.innerValue, classes.join(' ')));\n },\n getMonthClasses: function getMonthClasses(month) {\n if (this.type !== 'month') {\n return this.calendarMonth === month ? 'active' : '';\n }\n\n var classes = [];\n var cellDate = this.getMonthCellDate(month);\n classes.push(this.getStateClass(cellDate));\n return classes.concat(this.getClasses(cellDate, this.innerValue, classes.join(' ')));\n },\n getYearClasses: function getYearClasses(year) {\n if (this.type !== 'year') {\n return this.calendarYear === year ? 'active' : '';\n }\n\n var classes = [];\n var cellDate = this.getYearCellDate(year);\n classes.push(this.getStateClass(cellDate));\n return classes.concat(this.getClasses(cellDate, this.innerValue, classes.join(' ')));\n },\n getStateClass: function getStateClass(cellDate) {\n if (this.isDisabled(cellDate)) {\n return 'disabled';\n }\n\n if (this.innerValue.some(function (v) {\n return v.getTime() === cellDate.getTime();\n })) {\n return 'active';\n }\n\n return '';\n },\n getWeekState: function getWeekState(row) {\n if (this.type !== 'week') return '';\n var start = row[0].getTime();\n var end = row[6].getTime();\n var active = this.innerValue.some(function (v) {\n var time = v.getTime();\n return time >= start && time <= end;\n });\n return active ? \"\".concat(this.prefixClass, \"-active-week\") : '';\n }\n },\n render: function render() {\n var h = arguments[0];\n var panel = this.panel,\n innerCalendar = this.innerCalendar;\n\n if (panel === 'year') {\n return h(__vue_component__$6, {\n \"attrs\": {\n \"calendar\": innerCalendar,\n \"getCellClasses\": this.getYearClasses,\n \"getYearPanel\": this.getYearPanel\n },\n \"on\": {\n \"select\": this.handleSelectYear,\n \"changecalendar\": this.handleCalendarChange\n }\n });\n }\n\n if (panel === 'month') {\n return h(__vue_component__$5, {\n \"attrs\": {\n \"calendar\": innerCalendar,\n \"getCellClasses\": this.getMonthClasses\n },\n \"on\": {\n \"select\": this.handleSelectMonth,\n \"changepanel\": this.handelPanelChange,\n \"changecalendar\": this.handleCalendarChange\n }\n });\n }\n\n return h(__vue_component__$4, {\n \"class\": _defineProperty({}, \"\".concat(this.prefixClass, \"-calendar-week-mode\"), this.type === 'week'),\n \"attrs\": {\n \"calendar\": innerCalendar,\n \"getCellClasses\": this.getDateClasses,\n \"getRowClasses\": this.getWeekState,\n \"titleFormat\": this.titleFormat,\n \"showWeekNumber\": typeof this.showWeekNumber === 'boolean' ? this.showWeekNumber : this.type === 'week'\n },\n \"on\": {\n \"select\": this.handleSelectDate,\n \"changepanel\": this.handelPanelChange,\n \"changecalendar\": this.handleCalendarChange\n }\n });\n }\n};\n\nvar CalendarRange = {\n name: 'CalendarRange',\n components: {\n CalendarPanel: CalendarPanel\n },\n provide: function provide() {\n return {\n onDateMouseEnter: this.onDateMouseEnter,\n onDateMouseLeave: this.onDateMouseLeave\n };\n },\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n props: _objectSpread2({}, CalendarPanel.props),\n data: function data() {\n return {\n innerValue: [],\n calendars: [],\n hoveredValue: null\n };\n },\n computed: {\n // Minimum difference between start and end calendars\n calendarMinDiff: function calendarMinDiff() {\n var map = {\n date: 1,\n // type:date min 1 month\n month: 1 * 12,\n // type:month min 1 year\n year: 10 * 12 // type:year min 10 year\n\n };\n return map[this.type] || map.date;\n },\n calendarMaxDiff: function calendarMaxDiff() {\n return Infinity;\n },\n defaultValues: function defaultValues() {\n return Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue, this.defaultValue];\n }\n },\n watch: {\n value: {\n immediate: true,\n handler: function handler() {\n var _this = this;\n\n this.innerValue = isValidRangeDate(this.value) ? this.value : [new Date(NaN), new Date(NaN)];\n var calendars = this.innerValue.map(function (v, i) {\n return startOfMonth(getValidDate(v, _this.defaultValues[i]));\n });\n this.updateCalendars(calendars);\n }\n }\n },\n methods: {\n handleSelect: function handleSelect(date, type) {\n var _this$innerValue = _slicedToArray(this.innerValue, 2),\n startValue = _this$innerValue[0],\n endValue = _this$innerValue[1];\n\n if (isValidDate(startValue) && !isValidDate(endValue)) {\n if (startValue.getTime() > date.getTime()) {\n this.innerValue = [date, startValue];\n } else {\n this.innerValue = [startValue, date];\n }\n\n this.emitDate(this.innerValue, type);\n } else {\n this.innerValue = [date, new Date(NaN)];\n }\n },\n onDateMouseEnter: function onDateMouseEnter(cell) {\n this.hoveredValue = cell;\n },\n onDateMouseLeave: function onDateMouseLeave() {\n this.hoveredValue = null;\n },\n emitDate: function emitDate(dates, type) {\n this.$emit('select', dates, type);\n },\n updateStartCalendar: function updateStartCalendar(value) {\n this.updateCalendars([value, this.calendars[1]], 1);\n },\n updateEndCalendar: function updateEndCalendar(value) {\n this.updateCalendars([this.calendars[0], value], 0);\n },\n updateCalendars: function updateCalendars(calendars) {\n var adjustIndex = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1;\n var gap = this.getCalendarGap(calendars);\n\n if (gap) {\n var calendar = new Date(calendars[adjustIndex]);\n calendar.setMonth(calendar.getMonth() + (adjustIndex === 0 ? -gap : gap));\n calendars[adjustIndex] = calendar;\n }\n\n this.calendars = calendars;\n },\n getCalendarGap: function getCalendarGap(calendars) {\n var _calendars = _slicedToArray(calendars, 2),\n calendarLeft = _calendars[0],\n calendarRight = _calendars[1];\n\n var yearDiff = calendarRight.getFullYear() - calendarLeft.getFullYear();\n var monthDiff = calendarRight.getMonth() - calendarLeft.getMonth();\n var diff = yearDiff * 12 + monthDiff;\n var min = this.calendarMinDiff;\n var max = this.calendarMaxDiff;\n\n if (diff < min) {\n return min - diff;\n }\n\n if (diff > max) {\n return max - diff;\n }\n\n return 0;\n },\n getRangeClasses: function getRangeClasses(cellDate, currentDates, classnames) {\n var classes = [].concat(this.getClasses(cellDate, currentDates, classnames));\n if (/disabled|active/.test(classnames)) return classes;\n\n var inRange = function inRange(data, range) {\n var fn = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : function (v) {\n return v.getTime();\n };\n var value = fn(data);\n\n var _range$map = range.map(fn),\n _range$map2 = _slicedToArray(_range$map, 2),\n min = _range$map2[0],\n max = _range$map2[1];\n\n if (min > max) {\n var _ref = [max, min];\n min = _ref[0];\n max = _ref[1];\n }\n\n return value > min && value < max;\n };\n\n if (currentDates.length === 2 && inRange(cellDate, currentDates)) {\n return classes.concat('in-range');\n }\n\n if (currentDates.length === 1 && this.hoveredValue && inRange(cellDate, [currentDates[0], this.hoveredValue])) {\n return classes.concat('hover-in-range');\n }\n\n return classes;\n }\n },\n render: function render() {\n var _this2 = this;\n\n var h = arguments[0];\n var calendarRange = this.calendars.map(function (calendar, index) {\n var props = _objectSpread2({}, _this2.$props, {\n calendar: calendar,\n value: _this2.innerValue,\n defaultValue: _this2.defaultValues[index],\n getClasses: _this2.getRangeClasses,\n // don't update when range is true\n partialUpdate: false\n });\n\n var on = {\n select: _this2.handleSelect,\n 'update:calendar': index === 0 ? _this2.updateStartCalendar : _this2.updateEndCalendar\n };\n return h(\"calendar-panel\", {\n \"props\": _objectSpread2({}, props),\n \"on\": _objectSpread2({}, on)\n });\n });\n var prefixClass = this.prefixClass;\n return h(\"div\", {\n \"class\": \"\".concat(prefixClass, \"-range-wrapper\")\n }, [calendarRange]);\n }\n};\n\nvar scrollBarWidth;\nfunction getScrollbarWidth () {\n if (typeof window === 'undefined') return 0;\n if (scrollBarWidth !== undefined) return scrollBarWidth;\n var outer = document.createElement('div');\n outer.style.visibility = 'hidden';\n outer.style.overflow = 'scroll';\n outer.style.width = '100px';\n outer.style.position = 'absolute';\n outer.style.top = '-9999px';\n document.body.appendChild(outer);\n var inner = document.createElement('div');\n inner.style.width = '100%';\n outer.appendChild(inner);\n scrollBarWidth = outer.offsetWidth - inner.offsetWidth;\n outer.parentNode.removeChild(outer);\n return scrollBarWidth;\n}\n\n//\nvar script$5 = {\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n data: function data() {\n return {\n scrollbarWidth: 0,\n thumbTop: '',\n thumbHeight: ''\n };\n },\n created: function created() {\n this.scrollbarWidth = getScrollbarWidth();\n document.addEventListener('mouseup', this.handleDragend);\n },\n beforeDestroy: function beforeDestroy() {\n document.addEventListener('mouseup', this.handleDragend);\n },\n mounted: function mounted() {\n this.$nextTick(this.getThumbSize);\n },\n methods: {\n getThumbSize: function getThumbSize() {\n var wrap = this.$refs.wrap;\n if (!wrap) return;\n var heightPercentage = wrap.clientHeight * 100 / wrap.scrollHeight;\n this.thumbHeight = heightPercentage < 100 ? \"\".concat(heightPercentage, \"%\") : '';\n },\n handleScroll: function handleScroll(evt) {\n var el = evt.currentTarget;\n var scrollHeight = el.scrollHeight,\n scrollTop = el.scrollTop;\n this.thumbTop = \"\".concat(scrollTop * 100 / scrollHeight, \"%\");\n },\n handleDragstart: function handleDragstart(evt) {\n evt.stopImmediatePropagation();\n this._draggable = true;\n var offsetTop = this.$refs.thumb.offsetTop;\n this._prevY = evt.clientY - offsetTop;\n document.addEventListener('mousemove', this.handleDraging);\n },\n handleDraging: function handleDraging(evt) {\n if (!this._draggable) return;\n var clientY = evt.clientY;\n var wrap = this.$refs.wrap;\n var scrollHeight = wrap.scrollHeight,\n clientHeight = wrap.clientHeight;\n var offsetY = clientY - this._prevY;\n var top = offsetY * scrollHeight / clientHeight;\n wrap.scrollTop = top;\n },\n handleDragend: function handleDragend() {\n if (this._draggable) {\n this._draggable = false;\n document.removeEventListener('mousemove', this.handleDraging);\n }\n }\n }\n};\n\n/* script */\nvar __vue_script__$5 = script$5;\n/* template */\n\nvar __vue_render__$7 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('div', {\n class: _vm.prefixClass + \"-scrollbar\",\n style: {\n position: 'relative',\n overflow: 'hidden'\n }\n }, [_c('div', {\n ref: \"wrap\",\n class: _vm.prefixClass + \"-scrollbar-wrap\",\n style: {\n marginRight: \"-\" + _vm.scrollbarWidth + \"px\"\n },\n on: {\n \"scroll\": _vm.handleScroll\n }\n }, [_vm._t(\"default\")], 2), _vm._v(\" \"), _c('div', {\n class: _vm.prefixClass + \"-scrollbar-track\"\n }, [_c('div', {\n ref: \"thumb\",\n class: _vm.prefixClass + \"-scrollbar-thumb\",\n style: {\n height: _vm.thumbHeight,\n top: _vm.thumbTop\n },\n on: {\n \"mousedown\": _vm.handleDragstart\n }\n })])]);\n};\n\nvar __vue_staticRenderFns__$7 = [];\n/* style */\n\nvar __vue_inject_styles__$7 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$7 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$7 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$7 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$7 = normalizeComponent({\n render: __vue_render__$7,\n staticRenderFns: __vue_staticRenderFns__$7\n}, __vue_inject_styles__$7, __vue_script__$5, __vue_scope_id__$7, __vue_is_functional_template__$7, __vue_module_identifier__$7, false, undefined, undefined, undefined);\n\n//\n\nvar padNumber = function padNumber(value) {\n value = parseInt(value, 10);\n return value < 10 ? \"0\".concat(value) : \"\".concat(value);\n};\n\nvar generateOptions = function generateOptions(length, step, options) {\n if (Array.isArray(options)) {\n return options.filter(function (v) {\n return v >= 0 && v < length;\n });\n }\n\n if (step <= 0) {\n step = 1;\n }\n\n var arr = [];\n\n for (var i = 0; i < length; i += step) {\n arr.push(i);\n }\n\n return arr;\n};\n\nvar scrollTo = function scrollTo(element, to) {\n var duration = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : 0;\n\n // jump to target if duration zero\n if (duration <= 0) {\n requestAnimationFrame(function () {\n element.scrollTop = to;\n });\n return;\n }\n\n var difference = to - element.scrollTop;\n var tick = difference / duration * 10;\n requestAnimationFrame(function () {\n var scrollTop = element.scrollTop + tick;\n\n if (scrollTop >= to) {\n element.scrollTop = to;\n return;\n }\n\n element.scrollTop = scrollTop;\n scrollTo(element, to, duration - 10);\n });\n};\n\nvar script$6 = {\n name: 'ListColumns',\n components: {\n ScrollbarVertical: __vue_component__$7\n },\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n props: {\n date: Date,\n scrollDuration: {\n type: Number,\n default: 100\n },\n getClasses: {\n type: Function,\n default: function _default() {\n return [];\n }\n },\n hourOptions: Array,\n minuteOptions: Array,\n secondOptions: Array,\n showHour: {\n type: Boolean,\n default: true\n },\n showMinute: {\n type: Boolean,\n default: true\n },\n showSecond: {\n type: Boolean,\n default: true\n },\n hourStep: {\n type: Number,\n default: 1\n },\n minuteStep: {\n type: Number,\n default: 1\n },\n secondStep: {\n type: Number,\n default: 1\n },\n use12h: {\n type: Boolean,\n default: false\n }\n },\n computed: {\n columns: function columns() {\n var cols = [];\n if (this.showHour) cols.push({\n type: 'hour',\n list: this.getHoursList()\n });\n if (this.showMinute) cols.push({\n type: 'minute',\n list: this.getMinutesList()\n });\n if (this.showSecond) cols.push({\n type: 'second',\n list: this.getSecondsList()\n });\n if (this.use12h) cols.push({\n type: 'ampm',\n list: this.getAMPMList()\n });\n return cols.filter(function (v) {\n return v.list.length > 0;\n });\n }\n },\n watch: {\n date: {\n handler: function handler() {\n var _this = this;\n\n this.$nextTick(function () {\n _this.scrollToSelected(_this.scrollDuration);\n });\n }\n }\n },\n mounted: function mounted() {\n this.scrollToSelected(0);\n },\n methods: {\n getHoursList: function getHoursList() {\n var _this2 = this;\n\n return generateOptions(this.use12h ? 12 : 24, this.hourStep, this.hourOptions).map(function (num) {\n var date = new Date(_this2.date);\n var text = padNumber(num);\n\n if (_this2.use12h) {\n if (num === 0) {\n text = '12';\n }\n\n if (date.getHours() >= 12) {\n num += 12;\n }\n }\n\n var value = date.setHours(num);\n return {\n value: value,\n text: text\n };\n });\n },\n getMinutesList: function getMinutesList() {\n var _this3 = this;\n\n return generateOptions(60, this.minuteStep, this.minuteOptions).map(function (num) {\n var value = new Date(_this3.date).setMinutes(num);\n return {\n value: value,\n text: padNumber(num)\n };\n });\n },\n getSecondsList: function getSecondsList() {\n var _this4 = this;\n\n return generateOptions(60, this.secondStep, this.secondOptions).map(function (num) {\n var value = new Date(_this4.date).setSeconds(num);\n return {\n value: value,\n text: padNumber(num)\n };\n });\n },\n getAMPMList: function getAMPMList() {\n var _this5 = this;\n\n return ['AM', 'PM'].map(function (text, i) {\n var date = new Date(_this5.date);\n var value = date.setHours(date.getHours() % 12 + i * 12);\n return {\n text: text,\n value: value\n };\n });\n },\n scrollToSelected: function scrollToSelected(duration) {\n var elements = this.$el.querySelectorAll('.active');\n\n for (var i = 0; i < elements.length; i++) {\n var element = elements[i];\n var scrollElement = getScrollParent(element, this.$el);\n\n if (scrollElement) {\n var to = element.offsetTop;\n scrollTo(scrollElement, to, duration);\n }\n }\n },\n handleSelect: function handleSelect(evt) {\n var target = evt.target,\n currentTarget = evt.currentTarget;\n if (target.tagName.toUpperCase() !== 'LI') return;\n var type = currentTarget.getAttribute('data-type');\n var colIndex = parseInt(currentTarget.getAttribute('data-index'), 10);\n var cellIndex = parseInt(target.getAttribute('data-index'), 10);\n var value = this.columns[colIndex].list[cellIndex].value;\n this.$emit('select', value, type);\n }\n }\n};\n\n/* script */\nvar __vue_script__$6 = script$6;\n/* template */\n\nvar __vue_render__$8 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('div', {\n class: _vm.prefixClass + \"-time-columns\"\n }, _vm._l(_vm.columns, function (col, i) {\n return _c('scrollbar-vertical', {\n key: i,\n class: _vm.prefixClass + \"-time-column\"\n }, [_c('ul', {\n class: _vm.prefixClass + \"-time-list\",\n attrs: {\n \"data-type\": col.type,\n \"data-index\": i\n },\n on: {\n \"click\": _vm.handleSelect\n }\n }, _vm._l(col.list, function (item, j) {\n return _c('li', {\n key: item.value,\n class: [_vm.prefixClass + \"-time-item\", _vm.getClasses(item.value)],\n attrs: {\n \"data-index\": j\n }\n }, [_vm._v(\"\\n \" + _vm._s(item.text) + \"\\n \")]);\n }), 0)]);\n }), 1);\n};\n\nvar __vue_staticRenderFns__$8 = [];\n/* style */\n\nvar __vue_inject_styles__$8 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$8 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$8 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$8 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$8 = normalizeComponent({\n render: __vue_render__$8,\n staticRenderFns: __vue_staticRenderFns__$8\n}, __vue_inject_styles__$8, __vue_script__$6, __vue_scope_id__$8, __vue_is_functional_template__$8, __vue_module_identifier__$8, false, undefined, undefined, undefined);\n\n//\n\nfunction parseOption() {\n var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : '';\n var values = time.split(':');\n\n if (values.length >= 2) {\n var hours = parseInt(values[0], 10);\n var minutes = parseInt(values[1], 10);\n return {\n hours: hours,\n minutes: minutes\n };\n }\n\n return null;\n}\n\nvar scrollTo$1 = function scrollTo(element, to) {\n if (element) {\n element.scrollTop = to;\n }\n};\n\nvar script$7 = {\n name: 'ListOptions',\n components: {\n ScrollbarVertical: __vue_component__$7\n },\n inject: {\n getLocale: {\n default: function _default() {\n return getLocale;\n }\n },\n prefixClass: {\n default: 'mx'\n }\n },\n props: {\n date: Date,\n options: {\n type: [Object, Function],\n default: function _default() {\n return [];\n }\n },\n format: {\n type: String,\n default: 'HH:mm:ss'\n },\n getClasses: {\n type: Function,\n default: function _default() {\n return [];\n }\n }\n },\n computed: {\n list: function list() {\n var result = [];\n var options = this.options;\n\n if (typeof options === 'function') {\n return options() || [];\n }\n\n var start = parseOption(options.start);\n var end = parseOption(options.end);\n var step = parseOption(options.step);\n var fmt = options.format || this.format;\n\n if (start && end && step) {\n var startMinutes = start.minutes + start.hours * 60;\n var endMinutes = end.minutes + end.hours * 60;\n var stepMinutes = step.minutes + step.hours * 60;\n var len = Math.floor((endMinutes - startMinutes) / stepMinutes);\n\n for (var i = 0; i <= len; i++) {\n var timeMinutes = startMinutes + i * stepMinutes;\n var hours = Math.floor(timeMinutes / 60);\n var minutes = timeMinutes % 60;\n var value = new Date(this.date).setHours(hours, minutes, 0);\n result.push({\n value: value,\n text: this.formatDate(value, fmt)\n });\n }\n }\n\n return result;\n }\n },\n mounted: function mounted() {\n this.scrollToSelected();\n },\n methods: {\n formatDate: function formatDate(date, fmt) {\n return format(date, fmt, {\n locale: this.getLocale().formatLocale\n });\n },\n scrollToSelected: function scrollToSelected() {\n var element = this.$el.querySelector('.active');\n if (!element) return;\n var scrollElement = getScrollParent(element, this.$el);\n if (!scrollElement) return;\n var to = element.offsetTop;\n scrollTo$1(scrollElement, to);\n },\n handleSelect: function handleSelect(value) {\n this.$emit('select', value, 'time');\n }\n }\n};\n\n/* script */\nvar __vue_script__$7 = script$7;\n/* template */\n\nvar __vue_render__$9 = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('scrollbar-vertical', _vm._l(_vm.list, function (item) {\n return _c('div', {\n key: item.value,\n class: [_vm.prefixClass + \"-time-option\", _vm.getClasses(item.value)],\n on: {\n \"click\": function click($event) {\n return _vm.handleSelect(item.value);\n }\n }\n }, [_vm._v(\"\\n \" + _vm._s(item.text) + \"\\n \")]);\n }), 0);\n};\n\nvar __vue_staticRenderFns__$9 = [];\n/* style */\n\nvar __vue_inject_styles__$9 = undefined;\n/* scoped */\n\nvar __vue_scope_id__$9 = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$9 = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$9 = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$9 = normalizeComponent({\n render: __vue_render__$9,\n staticRenderFns: __vue_staticRenderFns__$9\n}, __vue_inject_styles__$9, __vue_script__$7, __vue_scope_id__$9, __vue_is_functional_template__$9, __vue_module_identifier__$9, false, undefined, undefined, undefined);\n\n//\nvar script$8 = {\n name: 'TimePanel',\n components: {\n ListColumns: __vue_component__$8,\n ListOptions: __vue_component__$9\n },\n inject: {\n getLocale: {\n default: function _default() {\n return getLocale;\n }\n },\n prefixClass: {\n default: 'mx'\n }\n },\n props: {\n value: {},\n defaultValue: {\n default: function _default() {\n var date = new Date();\n date.setHours(0, 0, 0, 0);\n return date;\n }\n },\n format: {\n default: 'HH:mm:ss'\n },\n timeTitleFormat: {\n type: String,\n default: 'YYYY-MM-DD'\n },\n showTimeHeader: {\n type: Boolean,\n default: false\n },\n disabledTime: {\n type: Function,\n default: function _default() {\n return false;\n }\n },\n timePickerOptions: {\n type: [Object, Function],\n default: function _default() {\n return null;\n }\n },\n hourOptions: Array,\n minuteOptions: Array,\n secondOptions: Array,\n hourStep: {\n type: Number,\n default: 1\n },\n minuteStep: {\n type: Number,\n default: 1\n },\n secondStep: {\n type: Number,\n default: 1\n },\n showHour: {\n type: Boolean,\n default: undefined\n },\n showMinute: {\n type: Boolean,\n default: undefined\n },\n showSecond: {\n type: Boolean,\n default: undefined\n },\n use12h: {\n type: Boolean,\n default: undefined\n },\n scrollDuration: {\n type: Number,\n default: 100\n }\n },\n computed: {\n innerValue: function innerValue() {\n return getValidDate(this.value, this.defaultValue);\n },\n title: function title() {\n var titleFormat = this.timeTitleFormat;\n var date = new Date(this.innerValue);\n return this.formatDate(date, titleFormat);\n },\n innerForamt: function innerForamt() {\n return typeof this.format === 'string' ? this.format : 'HH:mm:ss';\n },\n ShowHourMinuteSecondAMPM: function ShowHourMinuteSecondAMPM() {\n var _this = this;\n\n var fmt = this.innerForamt;\n var defaultProps = {\n showHour: /[HhKk]/.test(fmt),\n showMinute: /m/.test(fmt),\n showSecond: /s/.test(fmt),\n use12h: /a/i.test(fmt)\n };\n var obj = {};\n Object.keys(defaultProps).forEach(function (key) {\n obj[key] = typeof _this[key] === 'boolean' ? _this[key] : defaultProps[key];\n });\n return obj;\n }\n },\n methods: {\n formatDate: function formatDate(date, fmt) {\n return format(date, fmt, {\n locale: this.getLocale().formatLocale\n });\n },\n isDisabled: function isDisabled(date) {\n return this.disabledTime(new Date(date));\n },\n handleSelect: function handleSelect(value, type) {\n var date = new Date(value);\n\n if (!this.isDisabled(value)) {\n this.$emit('select', date, type);\n }\n },\n handleClickTitle: function handleClickTitle() {\n this.$emit('clicktitle');\n },\n getClasses: function getClasses(value) {\n var cellDate = new Date(value);\n\n if (this.isDisabled(value)) {\n return 'disabled';\n }\n\n if (cellDate.getTime() === this.innerValue.getTime()) {\n return 'active';\n }\n\n return '';\n }\n }\n};\n\n/* script */\nvar __vue_script__$8 = script$8;\n/* template */\n\nvar __vue_render__$a = function __vue_render__() {\n var _vm = this;\n\n var _h = _vm.$createElement;\n\n var _c = _vm._self._c || _h;\n\n return _c('div', {\n class: _vm.prefixClass + \"-time\"\n }, [_vm.showTimeHeader ? _c('div', {\n class: _vm.prefixClass + \"-time-header\"\n }, [_c('button', {\n class: _vm.prefixClass + \"-btn \" + _vm.prefixClass + \"-btn-text \" + _vm.prefixClass + \"-time-header-title\",\n attrs: {\n \"type\": \"button\"\n },\n on: {\n \"click\": _vm.handleClickTitle\n }\n }, [_vm._v(\"\\n \" + _vm._s(_vm.title) + \"\\n \")])]) : _vm._e(), _vm._v(\" \"), _c('div', {\n class: _vm.prefixClass + \"-time-content\"\n }, [_vm.timePickerOptions ? _c('list-options', {\n attrs: {\n \"date\": _vm.innerValue,\n \"get-classes\": _vm.getClasses,\n \"options\": _vm.timePickerOptions,\n \"format\": _vm.innerForamt\n },\n on: {\n \"select\": _vm.handleSelect\n }\n }) : _c('list-columns', _vm._b({\n attrs: {\n \"date\": _vm.innerValue,\n \"get-classes\": _vm.getClasses,\n \"hour-options\": _vm.hourOptions,\n \"minute-options\": _vm.minuteOptions,\n \"second-options\": _vm.secondOptions,\n \"hour-step\": _vm.hourStep,\n \"minute-step\": _vm.minuteStep,\n \"second-step\": _vm.secondStep,\n \"scroll-duration\": _vm.scrollDuration\n },\n on: {\n \"select\": _vm.handleSelect\n }\n }, 'list-columns', _vm.ShowHourMinuteSecondAMPM, false))], 1)]);\n};\n\nvar __vue_staticRenderFns__$a = [];\n/* style */\n\nvar __vue_inject_styles__$a = undefined;\n/* scoped */\n\nvar __vue_scope_id__$a = undefined;\n/* module identifier */\n\nvar __vue_module_identifier__$a = undefined;\n/* functional template */\n\nvar __vue_is_functional_template__$a = false;\n/* style inject */\n\n/* style inject SSR */\n\n/* style inject shadow dom */\n\nvar __vue_component__$a = normalizeComponent({\n render: __vue_render__$a,\n staticRenderFns: __vue_staticRenderFns__$a\n}, __vue_inject_styles__$a, __vue_script__$8, __vue_scope_id__$a, __vue_is_functional_template__$a, __vue_module_identifier__$a, false, undefined, undefined, undefined);\n\nvar TimeRange = {\n name: 'TimeRange',\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n props: _objectSpread2({}, __vue_component__$a.props),\n data: function data() {\n return {\n startValue: new Date(NaN),\n endValue: new Date(NaN)\n };\n },\n watch: {\n value: {\n immediate: true,\n handler: function handler() {\n if (isValidRangeDate(this.value)) {\n var _this$value = _slicedToArray(this.value, 2),\n startValue = _this$value[0],\n endValue = _this$value[1];\n\n this.startValue = startValue;\n this.endValue = endValue;\n } else {\n this.startValue = new Date(NaN);\n this.endValue = new Date(NaN);\n }\n }\n }\n },\n methods: {\n emitChange: function emitChange(type, index) {\n var date = [this.startValue, this.endValue];\n this.$emit('select', date, type === 'time' ? 'time-range' : type, index);\n },\n handleSelectStart: function handleSelectStart(date, type) {\n this.startValue = date; // check the NaN\n\n if (!(this.endValue.getTime() >= date.getTime())) {\n this.endValue = date;\n }\n\n this.emitChange(type, 0);\n },\n handleSelectEnd: function handleSelectEnd(date, type) {\n // check the NaN\n this.endValue = date;\n\n if (!(this.startValue.getTime() <= date.getTime())) {\n this.startValue = date;\n }\n\n this.emitChange(type, 1);\n },\n disabledStartTime: function disabledStartTime(date) {\n return this.disabledTime(date, 0);\n },\n disabledEndTime: function disabledEndTime(date) {\n return date.getTime() < this.startValue.getTime() || this.disabledTime(date, 1);\n }\n },\n render: function render() {\n var h = arguments[0];\n var defaultValues = Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue, this.defaultValue];\n var prefixClass = this.prefixClass;\n return h(\"div\", {\n \"class\": \"\".concat(prefixClass, \"-range-wrapper\")\n }, [h(__vue_component__$a, {\n \"props\": _objectSpread2({}, _objectSpread2({}, this.$props, {\n value: this.startValue,\n defaultValue: defaultValues[0],\n disabledTime: this.disabledStartTime\n })),\n \"on\": _objectSpread2({}, _objectSpread2({}, this.$listeners, {\n select: this.handleSelectStart\n }))\n }), h(__vue_component__$a, {\n \"props\": _objectSpread2({}, _objectSpread2({}, this.$props, {\n value: this.endValue,\n defaultValue: defaultValues[1],\n disabledTime: this.disabledEndTime\n })),\n \"on\": _objectSpread2({}, _objectSpread2({}, this.$listeners, {\n select: this.handleSelectEnd\n }))\n })]);\n }\n};\n\nvar DatetimePanel = {\n name: 'DatetimePanel',\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n emits: ['select', 'update:show-time-panel'],\n props: _objectSpread2({}, CalendarPanel.props, {}, __vue_component__$a.props, {\n showTimePanel: {\n type: Boolean,\n default: undefined\n }\n }),\n data: function data() {\n return {\n defaultTimeVisible: false,\n currentValue: this.value\n };\n },\n computed: {\n timeVisible: function timeVisible() {\n return typeof this.showTimePanel === 'boolean' ? this.showTimePanel : this.defaultTimeVisible;\n }\n },\n watch: {\n value: function value(val) {\n this.currentValue = val;\n },\n defaultTimeVisible: function defaultTimeVisible(val) {\n this.$emit('update:show-time-panel', val);\n }\n },\n methods: {\n closeTimePanel: function closeTimePanel() {\n this.defaultTimeVisible = false;\n },\n openTimePanel: function openTimePanel() {\n this.defaultTimeVisible = true;\n },\n emitDate: function emitDate(date, type) {\n this.$emit('select', date, type);\n },\n handleSelect: function handleSelect(date, type) {\n if (type === 'date') {\n this.openTimePanel();\n }\n\n var datetime = assignTime(date, getValidDate(this.value, this.defaultValue));\n\n if (this.disabledTime(new Date(datetime))) {\n // set the time of defalutValue;\n datetime = assignTime(date, this.defaultValue);\n\n if (this.disabledTime(new Date(datetime))) {\n // if disabled don't emit date\n this.currentValue = datetime;\n return;\n }\n }\n\n this.emitDate(datetime, type);\n }\n },\n render: function render() {\n var h = arguments[0];\n var calendarProps = {\n props: _objectSpread2({}, pick(this.$props, Object.keys(CalendarPanel.props)), {\n type: 'date',\n value: this.currentValue\n }),\n on: {\n select: this.handleSelect\n }\n };\n var timeProps = {\n props: _objectSpread2({}, pick(this.$props, Object.keys(__vue_component__$a.props)), {\n showTimeHeader: true,\n value: this.currentValue\n }),\n on: {\n select: this.emitDate,\n clicktitle: this.closeTimePanel\n }\n };\n var prefixClass = this.prefixClass;\n return h(\"div\", [h(CalendarPanel, helper([{}, calendarProps])), this.timeVisible && h(__vue_component__$a, helper([{\n \"class\": \"\".concat(prefixClass, \"-calendar-time\")\n }, timeProps]))]);\n }\n};\n\nvar DatetimeRange = {\n name: 'DatetimeRange',\n inject: {\n prefixClass: {\n default: 'mx'\n }\n },\n emits: ['select', 'update:show-time-panel'],\n props: _objectSpread2({}, CalendarRange.props, {}, TimeRange.props, {\n showTimePanel: {\n type: Boolean,\n default: undefined\n }\n }),\n data: function data() {\n return {\n defaultTimeVisible: false,\n currentValue: this.value\n };\n },\n computed: {\n timeVisible: function timeVisible() {\n return typeof this.showTimePanel === 'boolean' ? this.showTimePanel : this.defaultTimeVisible;\n }\n },\n watch: {\n value: function value(val) {\n this.currentValue = val;\n },\n defaultTimeVisible: function defaultTimeVisible(val) {\n this.$emit('update:show-time-panel', val);\n }\n },\n methods: {\n closeTimePanel: function closeTimePanel() {\n this.defaultTimeVisible = false;\n },\n openTimePanel: function openTimePanel() {\n this.defaultTimeVisible = true;\n },\n emitDate: function emitDate(dates, type) {\n this.$emit('select', dates, type);\n },\n handleSelect: function handleSelect(dates, type) {\n var _this = this;\n\n if (type === 'date') {\n this.openTimePanel();\n }\n\n var defaultValues = Array.isArray(this.defaultValue) ? this.defaultValue : [this.defaultValue, this.defaultValue];\n var datetimes = dates.map(function (date, i) {\n var time = isValidRangeDate(_this.value) ? _this.value[i] : defaultValues[i];\n return assignTime(date, time);\n });\n\n if (datetimes[1].getTime() < datetimes[0].getTime()) {\n datetimes = [datetimes[0], datetimes[0]];\n }\n\n if (datetimes.some(this.disabledTime)) {\n datetimes = dates.map(function (date, i) {\n return assignTime(date, defaultValues[i]);\n });\n\n if (datetimes.some(this.disabledTime)) {\n this.currentValue = datetimes;\n return;\n }\n }\n\n this.emitDate(datetimes, type);\n }\n },\n render: function render() {\n var h = arguments[0];\n var calendarProps = {\n props: _objectSpread2({}, pick(this.$props, Object.keys(CalendarRange.props)), {\n type: 'date',\n value: this.currentValue\n }),\n on: {\n select: this.handleSelect\n }\n };\n var timeProps = {\n props: _objectSpread2({}, pick(this.$props, Object.keys(TimeRange.props)), {\n value: this.currentValue,\n showTimeHeader: true\n }),\n on: {\n select: this.emitDate,\n clicktitle: this.closeTimePanel\n }\n };\n var prefixClass = this.prefixClass;\n return h(\"div\", [h(CalendarRange, helper([{}, calendarProps])), this.timeVisible && h(TimeRange, helper([{\n \"class\": \"\".concat(prefixClass, \"-calendar-time\")\n }, timeProps]))]);\n }\n};\n\nvar componentMap = {\n default: CalendarPanel,\n time: __vue_component__$a,\n datetime: DatetimePanel\n};\nvar componentRangeMap = {\n default: CalendarRange,\n time: TimeRange,\n datetime: DatetimeRange\n};\nvar DatePicker = {\n name: 'DatePicker',\n provide: function provide() {\n var _this = this;\n\n return {\n // make locale reactive\n getLocale: function getLocale() {\n return _this.locale;\n },\n getWeek: this.getWeek,\n prefixClass: this.prefixClass,\n dispatchDatePicker: this.$emit.bind(this)\n };\n },\n props: _objectSpread2({}, DatetimePanel.props, {\n value: {},\n valueType: {\n type: String,\n default: 'date' // date, format, timestamp, or token like 'YYYY-MM-DD'\n\n },\n type: {\n type: String,\n // ['date', 'datetime', 'time', 'year', 'month', 'week']\n default: 'date'\n },\n format: {\n type: String\n },\n formatter: {\n type: Object\n },\n range: {\n type: Boolean,\n default: false\n },\n multiple: {\n type: Boolean,\n default: false\n },\n rangeSeparator: {\n type: String\n },\n lang: {\n type: [String, Object]\n },\n placeholder: {\n type: String,\n default: ''\n },\n editable: {\n type: Boolean,\n default: true\n },\n disabled: {\n type: Boolean,\n default: false\n },\n clearable: {\n type: Boolean,\n default: true\n },\n prefixClass: {\n type: String,\n default: 'mx'\n },\n inputClass: {},\n inputAttr: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n appendToBody: {\n type: Boolean,\n default: true\n },\n open: {\n type: Boolean,\n default: undefined\n },\n popupClass: {},\n popupStyle: {\n type: Object,\n default: function _default() {\n return {};\n }\n },\n inline: {\n type: Boolean,\n default: false\n },\n confirm: {\n type: Boolean,\n default: false\n },\n confirmText: {\n type: String,\n default: 'OK'\n },\n renderInputText: {\n type: Function\n },\n shortcuts: {\n type: Array,\n validator: function validator(value) {\n return Array.isArray(value) && value.every(function (v) {\n return isObject(v) && typeof v.text === 'string' && typeof v.onClick === 'function';\n });\n },\n default: function _default() {\n return [];\n }\n }\n }),\n data: function data() {\n return {\n // cache the innervalue, wait to confirm\n currentValue: null,\n userInput: null,\n defaultOpen: false\n };\n },\n computed: {\n popupVisible: function popupVisible() {\n return !this.disabled && (typeof this.open === 'boolean' ? this.open : this.defaultOpen);\n },\n innerRangeSeparator: function innerRangeSeparator() {\n return this.rangeSeparator || (this.multiple ? ',' : ' ~ ');\n },\n innerFormat: function innerFormat() {\n var map = {\n date: 'YYYY-MM-DD',\n datetime: 'YYYY-MM-DD HH:mm:ss',\n year: 'YYYY',\n month: 'YYYY-MM',\n time: 'HH:mm:ss',\n week: 'w'\n };\n return this.format || map[this.type] || map.date;\n },\n innerValue: function innerValue() {\n var value = this.value;\n\n if (this.validMultipleType) {\n value = Array.isArray(value) ? value : [];\n return value.map(this.value2date);\n }\n\n if (this.range) {\n value = Array.isArray(value) ? value.slice(0, 2) : [null, null];\n return value.map(this.value2date);\n }\n\n return this.value2date(value);\n },\n text: function text() {\n var _this2 = this;\n\n if (this.userInput !== null) {\n return this.userInput;\n }\n\n if (typeof this.renderInputText === 'function') {\n return this.renderInputText(this.innerValue);\n }\n\n if (!this.isValidValue(this.innerValue)) {\n return '';\n }\n\n if (Array.isArray(this.innerValue)) {\n return this.innerValue.map(function (v) {\n return _this2.formatDate(v);\n }).join(this.innerRangeSeparator);\n }\n\n return this.formatDate(this.innerValue);\n },\n showClearIcon: function showClearIcon() {\n return !this.disabled && this.clearable && this.text;\n },\n locale: function locale() {\n if (isObject(this.lang)) {\n return mergeDeep(getLocale(), this.lang);\n }\n\n return getLocale(this.lang);\n },\n validMultipleType: function validMultipleType() {\n var types = ['date', 'month', 'year'];\n return this.multiple && !this.range && types.indexOf(this.type) !== -1;\n }\n },\n watch: {\n innerValue: {\n immediate: true,\n handler: function handler(val) {\n this.currentValue = val;\n }\n }\n },\n created: function created() {\n if (_typeof(this.format) === 'object') {\n console.warn(\"[vue2-datepicker]: The prop `format` don't support Object any more. You can use the new prop `formatter` to replace it\");\n }\n },\n methods: {\n handleClickOutSide: function handleClickOutSide(evt) {\n var target = evt.target;\n\n if (!this.$el.contains(target)) {\n this.closePopup();\n }\n },\n getFormatter: function getFormatter(key) {\n return isObject(this.formatter) && this.formatter[key] || isObject(this.format) && this.format[key];\n },\n getWeek: function getWeek$1(date, options) {\n if (typeof this.getFormatter('getWeek') === 'function') {\n return this.getFormatter('getWeek')(date, options);\n }\n\n return getWeek(date, options);\n },\n parseDate: function parseDate(value, fmt) {\n fmt = fmt || this.innerFormat;\n\n if (typeof this.getFormatter('parse') === 'function') {\n return this.getFormatter('parse')(value, fmt);\n }\n\n var backupDate = new Date();\n return parse(value, fmt, {\n locale: this.locale.formatLocale,\n backupDate: backupDate\n });\n },\n formatDate: function formatDate(date, fmt) {\n fmt = fmt || this.innerFormat;\n\n if (typeof this.getFormatter('stringify') === 'function') {\n return this.getFormatter('stringify')(date, fmt);\n }\n\n return format(date, fmt, {\n locale: this.locale.formatLocale\n });\n },\n // transform the outer value to inner date\n value2date: function value2date(value) {\n switch (this.valueType) {\n case 'date':\n return value instanceof Date ? new Date(value.getTime()) : new Date(NaN);\n\n case 'timestamp':\n return typeof value === 'number' ? new Date(value) : new Date(NaN);\n\n case 'format':\n return typeof value === 'string' ? this.parseDate(value) : new Date(NaN);\n\n default:\n return typeof value === 'string' ? this.parseDate(value, this.valueType) : new Date(NaN);\n }\n },\n // transform the inner date to outer value\n date2value: function date2value(date) {\n if (!isValidDate(date)) return null;\n\n switch (this.valueType) {\n case 'date':\n return date;\n\n case 'timestamp':\n return date.getTime();\n\n case 'format':\n return this.formatDate(date);\n\n default:\n return this.formatDate(date, this.valueType);\n }\n },\n emitValue: function emitValue(date, type) {\n // fix IE11/10 trigger input event when input is focused. (placeholder !== '')\n this.userInput = null;\n var value = Array.isArray(date) ? date.map(this.date2value) : this.date2value(date);\n this.$emit('input', value);\n this.$emit('change', value, type);\n this.afterEmitValue(type);\n return value;\n },\n afterEmitValue: function afterEmitValue(type) {\n // this.type === 'datetime', click the time should close popup\n if (!type || type === this.type || type === 'time') {\n this.closePopup();\n }\n },\n isValidValue: function isValidValue(value) {\n if (this.validMultipleType) {\n return isValidDates(value);\n }\n\n if (this.range) {\n return isValidRangeDate(value);\n }\n\n return isValidDate(value);\n },\n isValidValueAndNotDisabled: function isValidValueAndNotDisabled(value) {\n if (!this.isValidValue(value)) {\n return false;\n }\n\n var disabledDate = typeof this.disabledDate === 'function' ? this.disabledDate : function () {\n return false;\n };\n var disabledTime = typeof this.disabledTime === 'function' ? this.disabledTime : function () {\n return false;\n };\n\n if (!Array.isArray(value)) {\n value = [value];\n }\n\n return value.every(function (v) {\n return !disabledDate(v) && !disabledTime(v);\n });\n },\n handleMultipleDates: function handleMultipleDates(date, dates) {\n if (this.validMultipleType && dates) {\n var nextDates = dates.filter(function (v) {\n return v.getTime() !== date.getTime();\n });\n\n if (nextDates.length === dates.length) {\n nextDates.push(date);\n }\n\n return nextDates;\n }\n\n return date;\n },\n handleSelectDate: function handleSelectDate(val, type, dates) {\n val = this.handleMultipleDates(val, dates);\n\n if (this.confirm) {\n this.currentValue = val;\n } else {\n this.emitValue(val, this.validMultipleType ? \"multiple-\".concat(type) : type);\n }\n },\n clear: function clear() {\n this.emitValue(this.range ? [null, null] : null);\n this.$emit('clear');\n },\n handleClear: function handleClear(evt) {\n evt.stopPropagation();\n this.clear();\n },\n handleConfirmDate: function handleConfirmDate() {\n var value = this.emitValue(this.currentValue);\n this.$emit('confirm', value);\n },\n handleSelectShortcut: function handleSelectShortcut(evt) {\n var index = evt.currentTarget.getAttribute('data-index');\n var item = this.shortcuts[parseInt(index, 10)];\n\n if (isObject(item) && typeof item.onClick === 'function') {\n var date = item.onClick(this);\n\n if (date) {\n this.emitValue(date);\n }\n }\n },\n openPopup: function openPopup(evt) {\n if (this.popupVisible) return;\n this.defaultOpen = true;\n this.$emit('open', evt);\n this.$emit('update:open', true);\n },\n closePopup: function closePopup() {\n if (!this.popupVisible) return;\n this.defaultOpen = false;\n this.$emit('close');\n this.$emit('update:open', false);\n },\n blur: function blur() {\n // when use slot input\n if (this.$refs.input) {\n this.$refs.input.blur();\n }\n },\n focus: function focus() {\n if (this.$refs.input) {\n this.$refs.input.focus();\n }\n },\n handleInputChange: function handleInputChange() {\n var _this3 = this;\n\n if (!this.editable || this.userInput === null) return;\n var text = this.userInput.trim();\n this.userInput = null;\n\n if (text === '') {\n this.clear();\n return;\n }\n\n var date;\n\n if (this.validMultipleType) {\n date = text.split(this.innerRangeSeparator).map(function (v) {\n return _this3.parseDate(v.trim());\n });\n } else if (this.range) {\n var arr = text.split(this.innerRangeSeparator);\n\n if (arr.length !== 2) {\n // Maybe the separator during the day is the same as the separator for the date\n // eg: 2019-10-09-2020-01-02\n arr = text.split(this.innerRangeSeparator.trim());\n }\n\n date = arr.map(function (v) {\n return _this3.parseDate(v.trim());\n });\n } else {\n date = this.parseDate(text);\n }\n\n if (this.isValidValueAndNotDisabled(date)) {\n this.emitValue(date);\n this.blur();\n } else {\n this.$emit('input-error', text);\n }\n },\n handleInputInput: function handleInputInput(evt) {\n // slot input v-model\n this.userInput = typeof evt === 'string' ? evt : evt.target.value;\n },\n handleInputKeydown: function handleInputKeydown(evt) {\n var keyCode = evt.keyCode; // Tab 9 or Enter 13\n\n if (keyCode === 9) {\n this.closePopup();\n } else if (keyCode === 13) {\n this.handleInputChange();\n }\n },\n handleInputBlur: function handleInputBlur(evt) {\n // tab close\n this.$emit('blur', evt);\n },\n handleInputFocus: function handleInputFocus(evt) {\n this.openPopup(evt);\n this.$emit('focus', evt);\n },\n hasSlot: function hasSlot(name) {\n return !!(this.$slots[name] || this.$scopedSlots[name]);\n },\n renderSlot: function renderSlot(name, fallback, props) {\n var slotFn = this.$scopedSlots[name];\n\n if (slotFn) {\n return slotFn(props) || fallback;\n }\n\n return this.$slots[name] || fallback;\n },\n renderInput: function renderInput() {\n var h = this.$createElement;\n var prefixClass = this.prefixClass;\n\n var props = _objectSpread2({\n name: 'date',\n type: 'text',\n autocomplete: 'off',\n value: this.text,\n class: this.inputClass || \"\".concat(this.prefixClass, \"-input\"),\n readonly: !this.editable,\n disabled: this.disabled,\n placeholder: this.placeholder\n }, this.inputAttr);\n\n var value = props.value,\n className = props.class,\n attrs = _objectWithoutProperties(props, [\"value\", \"class\"]);\n\n var events = {\n keydown: this.handleInputKeydown,\n focus: this.handleInputFocus,\n blur: this.handleInputBlur,\n input: this.handleInputInput,\n change: this.handleInputChange\n };\n var input = this.renderSlot('input', h(\"input\", {\n \"domProps\": {\n \"value\": value\n },\n \"class\": className,\n \"attrs\": _objectSpread2({}, attrs),\n \"on\": _objectSpread2({}, events),\n \"ref\": \"input\"\n }), {\n props: props,\n events: events\n });\n return h(\"div\", {\n \"class\": \"\".concat(prefixClass, \"-input-wrapper\"),\n \"on\": {\n \"mousedown\": this.openPopup\n }\n }, [input, this.showClearIcon ? h(\"i\", {\n \"class\": \"\".concat(prefixClass, \"-icon-clear\"),\n \"on\": {\n \"mousedown\": this.handleClear\n }\n }, [this.renderSlot('icon-clear', h(__vue_component__$2))]) : null, h(\"i\", {\n \"class\": \"\".concat(prefixClass, \"-icon-calendar\")\n }, [this.renderSlot('icon-calendar', h(__vue_component__$1))])]);\n },\n renderContent: function renderContent() {\n var h = this.$createElement;\n var map = this.range ? componentRangeMap : componentMap;\n var Component = map[this.type] || map.default;\n\n var props = _objectSpread2({}, pick(this.$props, Object.keys(Component.props)), {\n value: this.currentValue\n });\n\n var on = _objectSpread2({}, pick(this.$listeners, Component.emits || []), {\n select: this.handleSelectDate\n });\n\n var content = h(Component, helper([{}, {\n props: props,\n on: on,\n ref: 'picker'\n }]));\n return h(\"div\", {\n \"class\": \"\".concat(this.prefixClass, \"-datepicker-body\")\n }, [this.renderSlot('content', content, {\n value: this.currentValue,\n emit: this.handleSelectDate\n })]);\n },\n renderSidebar: function renderSidebar() {\n var _this4 = this;\n\n var h = this.$createElement;\n var prefixClass = this.prefixClass;\n return h(\"div\", {\n \"class\": \"\".concat(prefixClass, \"-datepicker-sidebar\")\n }, [this.renderSlot('sidebar', null, {\n value: this.currentValue,\n emit: this.handleSelectDate\n }), this.shortcuts.map(function (v, i) {\n return h(\"button\", {\n \"key\": i,\n \"attrs\": {\n \"data-index\": i,\n \"type\": \"button\"\n },\n \"class\": \"\".concat(prefixClass, \"-btn \").concat(prefixClass, \"-btn-text \").concat(prefixClass, \"-btn-shortcut\"),\n \"on\": {\n \"click\": _this4.handleSelectShortcut\n }\n }, [v.text]);\n })]);\n },\n renderHeader: function renderHeader() {\n var h = this.$createElement;\n return h(\"div\", {\n \"class\": \"\".concat(this.prefixClass, \"-datepicker-header\")\n }, [this.renderSlot('header', null, {\n value: this.currentValue,\n emit: this.handleSelectDate\n })]);\n },\n renderFooter: function renderFooter() {\n var h = this.$createElement;\n var prefixClass = this.prefixClass;\n return h(\"div\", {\n \"class\": \"\".concat(prefixClass, \"-datepicker-footer\")\n }, [this.renderSlot('footer', null, {\n value: this.currentValue,\n emit: this.handleSelectDate\n }), this.confirm ? h(\"button\", {\n \"attrs\": {\n \"type\": \"button\"\n },\n \"class\": \"\".concat(prefixClass, \"-btn \").concat(prefixClass, \"-datepicker-btn-confirm\"),\n \"on\": {\n \"click\": this.handleConfirmDate\n }\n }, [this.confirmText]) : null]);\n }\n },\n render: function render() {\n var _class;\n\n var h = arguments[0];\n var prefixClass = this.prefixClass,\n inline = this.inline,\n disabled = this.disabled;\n var sidedar = this.hasSlot('sidebar') || this.shortcuts.length ? this.renderSidebar() : null;\n var content = h(\"div\", {\n \"class\": \"\".concat(prefixClass, \"-datepicker-content\")\n }, [this.hasSlot('header') ? this.renderHeader() : null, this.renderContent(), this.hasSlot('footer') || this.confirm ? this.renderFooter() : null]);\n return h(\"div\", {\n \"class\": (_class = {}, _defineProperty(_class, \"\".concat(prefixClass, \"-datepicker\"), true), _defineProperty(_class, \"\".concat(prefixClass, \"-datepicker-range\"), this.range), _defineProperty(_class, \"\".concat(prefixClass, \"-datepicker-inline\"), inline), _defineProperty(_class, \"disabled\", disabled), _class)\n }, [!inline ? this.renderInput() : null, !inline ? h(__vue_component__, {\n \"ref\": \"popup\",\n \"class\": this.popupClass,\n \"style\": this.popupStyle,\n \"attrs\": {\n \"visible\": this.popupVisible,\n \"appendToBody\": this.appendToBody\n },\n \"on\": {\n \"clickoutside\": this.handleClickOutSide\n }\n }, [sidedar, content]) : h(\"div\", {\n \"class\": \"\".concat(prefixClass, \"-datepicker-main\")\n }, [sidedar, content])]);\n }\n};\n\nDatePicker.locale = locale;\n\nDatePicker.install = function install(Vue) {\n Vue.component(DatePicker.name, DatePicker);\n};\n\nif (typeof window !== 'undefined' && window.Vue) {\n DatePicker.install(window.Vue);\n}\n\n_extends(DatePicker, {\n CalendarPanel: CalendarPanel,\n CalendarRange: CalendarRange,\n TimePanel: __vue_component__$a,\n TimeRange: TimeRange,\n DatetimePanel: DatetimePanel,\n DatetimeRange: DatetimeRange\n});\n\nexport default DatePicker;\n","/*! xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported XLSX */\n/*global global, exports, module, require:false, process:false, Buffer:false, ArrayBuffer:false */\nvar XLSX = {};\nXLSX.version = '0.17.3';\nvar current_codepage = 1200, current_ansi = 1252;\n\nvar VALID_ANSI = [ 874, 932, 936, 949, 950 ];\nfor(var i = 0; i <= 8; ++i) VALID_ANSI.push(1250 + i);\n/* ECMA-376 Part I 18.4.1 charset to codepage mapping */\nvar CS2CP = ({\n\t/*::[*/0/*::]*/: 1252, /* ANSI */\n\t/*::[*/1/*::]*/: 65001, /* DEFAULT */\n\t/*::[*/2/*::]*/: 65001, /* SYMBOL */\n\t/*::[*/77/*::]*/: 10000, /* MAC */\n\t/*::[*/128/*::]*/: 932, /* SHIFTJIS */\n\t/*::[*/129/*::]*/: 949, /* HANGUL */\n\t/*::[*/130/*::]*/: 1361, /* JOHAB */\n\t/*::[*/134/*::]*/: 936, /* GB2312 */\n\t/*::[*/136/*::]*/: 950, /* CHINESEBIG5 */\n\t/*::[*/161/*::]*/: 1253, /* GREEK */\n\t/*::[*/162/*::]*/: 1254, /* TURKISH */\n\t/*::[*/163/*::]*/: 1258, /* VIETNAMESE */\n\t/*::[*/177/*::]*/: 1255, /* HEBREW */\n\t/*::[*/178/*::]*/: 1256, /* ARABIC */\n\t/*::[*/186/*::]*/: 1257, /* BALTIC */\n\t/*::[*/204/*::]*/: 1251, /* RUSSIAN */\n\t/*::[*/222/*::]*/: 874, /* THAI */\n\t/*::[*/238/*::]*/: 1250, /* EASTEUROPE */\n\t/*::[*/255/*::]*/: 1252, /* OEM */\n\t/*::[*/69/*::]*/: 6969 /* MISC */\n}/*:any*/);\n\nvar set_ansi = function(cp/*:number*/) { if(VALID_ANSI.indexOf(cp) == -1) return; current_ansi = CS2CP[0] = cp; };\nfunction reset_ansi() { set_ansi(1252); }\n\nvar set_cp = function(cp/*:number*/) { current_codepage = cp; set_ansi(cp); };\nfunction reset_cp() { set_cp(1200); reset_ansi(); }\n\nfunction char_codes(data/*:string*/)/*:Array*/ { var o/*:Array*/ = []; for(var i = 0, len = data.length; i < len; ++i) o[i] = data.charCodeAt(i); return o; }\n\nfunction utf16leread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i) + (data.charCodeAt(2*i+1)<<8));\n\treturn o.join(\"\");\n}\nfunction utf16beread(data/*:string*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < (data.length>>1); ++i) o[i] = String.fromCharCode(data.charCodeAt(2*i+1) + (data.charCodeAt(2*i)<<8));\n\treturn o.join(\"\");\n}\n\nvar debom = function(data/*:string*/)/*:string*/ {\n\tvar c1 = data.charCodeAt(0), c2 = data.charCodeAt(1);\n\tif(c1 == 0xFF && c2 == 0xFE) return utf16leread(data.slice(2));\n\tif(c1 == 0xFE && c2 == 0xFF) return utf16beread(data.slice(2));\n\tif(c1 == 0xFEFF) return data.slice(1);\n\treturn data;\n};\n\nvar _getchar = function _gc1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar _getansi = function _ga1(x/*:number*/)/*:string*/ { return String.fromCharCode(x); };\nvar DENSE = null;\nvar DIF_XL = true;\nvar Base64 = (function make_b64(){\n\tvar map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";\n\treturn {\n\t\tencode: function(input/*:string*/)/*:string*/ {\n\t\t\tvar o = \"\";\n\t\t\tvar c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;\n\t\t\tfor(var i = 0; i < input.length; ) {\n\t\t\t\tc1 = input.charCodeAt(i++);\n\t\t\t\te1 = (c1 >> 2);\n\n\t\t\t\tc2 = input.charCodeAt(i++);\n\t\t\t\te2 = ((c1 & 3) << 4) | (c2 >> 4);\n\n\t\t\t\tc3 = input.charCodeAt(i++);\n\t\t\t\te3 = ((c2 & 15) << 2) | (c3 >> 6);\n\t\t\t\te4 = (c3 & 63);\n\t\t\t\tif (isNaN(c2)) { e3 = e4 = 64; }\n\t\t\t\telse if (isNaN(c3)) { e4 = 64; }\n\t\t\t\to += map.charAt(e1) + map.charAt(e2) + map.charAt(e3) + map.charAt(e4);\n\t\t\t}\n\t\t\treturn o;\n\t\t},\n\t\tdecode: function b64_decode(input/*:string*/)/*:string*/ {\n\t\t\tvar o = \"\";\n\t\t\tvar c1=0, c2=0, c3=0, e1=0, e2=0, e3=0, e4=0;\n\t\t\tinput = input.replace(/[^\\w\\+\\/\\=]/g, \"\");\n\t\t\tfor(var i = 0; i < input.length;) {\n\t\t\t\te1 = map.indexOf(input.charAt(i++));\n\t\t\t\te2 = map.indexOf(input.charAt(i++));\n\t\t\t\tc1 = (e1 << 2) | (e2 >> 4);\n\t\t\t\to += String.fromCharCode(c1);\n\n\t\t\t\te3 = map.indexOf(input.charAt(i++));\n\t\t\t\tc2 = ((e2 & 15) << 4) | (e3 >> 2);\n\t\t\t\tif (e3 !== 64) { o += String.fromCharCode(c2); }\n\n\t\t\t\te4 = map.indexOf(input.charAt(i++));\n\t\t\t\tc3 = ((e3 & 3) << 6) | e4;\n\t\t\t\tif (e4 !== 64) { o += String.fromCharCode(c3); }\n\t\t\t}\n\t\t\treturn o;\n\t\t}\n\t};\n})();\nvar has_buf = (typeof Buffer !== 'undefined' && typeof process !== 'undefined' && typeof process.versions !== 'undefined' && !!process.versions.node);\n\nvar Buffer_from = /*::(*/function(){}/*:: :any)*/;\n\nif(typeof Buffer !== 'undefined') {\n\tvar nbfs = !Buffer.from;\n\tif(!nbfs) try { Buffer.from(\"foo\", \"utf8\"); } catch(e) { nbfs = true; }\n\tBuffer_from = nbfs ? function(buf, enc) { return (enc) ? new Buffer(buf, enc) : new Buffer(buf); } : Buffer.from.bind(Buffer);\n\t// $FlowIgnore\n\tif(!Buffer.alloc) Buffer.alloc = function(n) { return new Buffer(n); };\n\t// $FlowIgnore\n\tif(!Buffer.allocUnsafe) Buffer.allocUnsafe = function(n) { return new Buffer(n); };\n}\n\nfunction new_raw_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\treturn has_buf ? Buffer.alloc(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nfunction new_unsafe_buf(len/*:number*/) {\n\t/* jshint -W056 */\n\treturn has_buf ? Buffer.allocUnsafe(len) : new Array(len);\n\t/* jshint +W056 */\n}\n\nvar s2a = function s2a(s/*:string*/)/*:any*/ {\n\tif(has_buf) return Buffer_from(s, \"binary\");\n\treturn s.split(\"\").map(function(x/*:string*/)/*:number*/{ return x.charCodeAt(0) & 0xff; });\n};\n\nfunction s2ab(s/*:string*/)/*:any*/ {\n\tif(typeof ArrayBuffer === 'undefined') return s2a(s);\n\tvar buf = new ArrayBuffer(s.length), view = new Uint8Array(buf);\n\tfor (var i=0; i!=s.length; ++i) view[i] = s.charCodeAt(i) & 0xFF;\n\treturn buf;\n}\n\nfunction a2s(data/*:any*/)/*:string*/ {\n\tif(Array.isArray(data)) return data.map(function(c) { return String.fromCharCode(c); }).join(\"\");\n\tvar o/*:Array*/ = []; for(var i = 0; i < data.length; ++i) o[i] = String.fromCharCode(data[i]); return o.join(\"\");\n}\n\nfunction a2u(data/*:Array*/)/*:Uint8Array*/ {\n\tif(typeof Uint8Array === 'undefined') throw new Error(\"Unsupported\");\n\treturn new Uint8Array(data);\n}\n\nfunction ab2a(data/*:ArrayBuffer|Uint8Array*/)/*:Array*/ {\n\tif(typeof ArrayBuffer == 'undefined') throw new Error(\"Unsupported\");\n\tif(data instanceof ArrayBuffer) return ab2a(new Uint8Array(data));\n\t/*:: if(data instanceof ArrayBuffer) throw new Error(\"unreachable\"); */\n\tvar o = new Array(data.length);\n\tfor(var i = 0; i < data.length; ++i) o[i] = data[i];\n\treturn o;\n}\n\nvar bconcat = function(bufs) { return [].concat.apply([], bufs); };\n\nvar chr0 = /\\u0000/g, chr1 = /[\\u0001-\\u0006]/g;\n/*::\ndeclare type Block = any;\ndeclare type BufArray = {\n\tnewblk(sz:number):Block;\n\tnext(sz:number):Block;\n\tend():any;\n\tpush(buf:Block):void;\n};\n\ntype RecordHopperCB = {(d:any, Rn:string, RT:number):?boolean;};\n\ntype EvertType = {[string]:string};\ntype EvertNumType = {[string]:number};\ntype EvertArrType = {[string]:Array};\n\ntype StringConv = {(string):string};\n\ntype WriteObjStrFactory = {from_sheet(ws:Worksheet, o:any, wb:?Workbook):string};\n*/\n/* ssf.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/*jshint -W041 */\nvar SSF/*:SSFModule*/ = ({}/*:any*/);\nvar make_ssf = function make_ssf(SSF/*:SSFModule*/){\nSSF.version = '0.11.2';\nfunction _strrev(x/*:string*/)/*:string*/ { var o = \"\", i = x.length-1; while(i>=0) o += x.charAt(i--); return o; }\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\nfunction pad0(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v;return t.length>=d?t:fill(' ',d-t.length)+t;}\nfunction rpad_(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:t+fill(' ',d-t.length);}\nfunction pad0r1(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+Math.round(v); return t.length>=d?t:fill('0',d-t.length)+t;}\nfunction pad0r2(v/*:any*/,d/*:number*/)/*:string*/{var t=\"\"+v; return t.length>=d?t:fill('0',d-t.length)+t;}\nvar p2_32 = Math.pow(2,32);\nfunction pad0r(v/*:any*/,d/*:number*/)/*:string*/{if(v>p2_32||v<-p2_32) return pad0r1(v,d); var i = Math.round(v); return pad0r2(i,d); }\nfunction isgeneral(s/*:string*/, i/*:?number*/)/*:boolean*/ { i = i || 0; return s.length >= 7 + i && (s.charCodeAt(i)|32) === 103 && (s.charCodeAt(i+1)|32) === 101 && (s.charCodeAt(i+2)|32) === 110 && (s.charCodeAt(i+3)|32) === 101 && (s.charCodeAt(i+4)|32) === 114 && (s.charCodeAt(i+5)|32) === 97 && (s.charCodeAt(i+6)|32) === 108; }\n/*::\ntype SSF_write_num = {(type:string, fmt:string, val:number):string};\n*/\nvar days/*:Array >*/ = [\n\t['Sun', 'Sunday'],\n\t['Mon', 'Monday'],\n\t['Tue', 'Tuesday'],\n\t['Wed', 'Wednesday'],\n\t['Thu', 'Thursday'],\n\t['Fri', 'Friday'],\n\t['Sat', 'Saturday']\n];\nvar months/*:Array >*/ = [\n\t['J', 'Jan', 'January'],\n\t['F', 'Feb', 'February'],\n\t['M', 'Mar', 'March'],\n\t['A', 'Apr', 'April'],\n\t['M', 'May', 'May'],\n\t['J', 'Jun', 'June'],\n\t['J', 'Jul', 'July'],\n\t['A', 'Aug', 'August'],\n\t['S', 'Sep', 'September'],\n\t['O', 'Oct', 'October'],\n\t['N', 'Nov', 'November'],\n\t['D', 'Dec', 'December']\n];\nfunction init_table(t/*:any*/) {\n\tt[0]= 'General';\n\tt[1]= '0';\n\tt[2]= '0.00';\n\tt[3]= '#,##0';\n\tt[4]= '#,##0.00';\n\tt[9]= '0%';\n\tt[10]= '0.00%';\n\tt[11]= '0.00E+00';\n\tt[12]= '# ?/?';\n\tt[13]= '# ??/??';\n\tt[14]= 'm/d/yy';\n\tt[15]= 'd-mmm-yy';\n\tt[16]= 'd-mmm';\n\tt[17]= 'mmm-yy';\n\tt[18]= 'h:mm AM/PM';\n\tt[19]= 'h:mm:ss AM/PM';\n\tt[20]= 'h:mm';\n\tt[21]= 'h:mm:ss';\n\tt[22]= 'm/d/yy h:mm';\n\tt[37]= '#,##0 ;(#,##0)';\n\tt[38]= '#,##0 ;[Red](#,##0)';\n\tt[39]= '#,##0.00;(#,##0.00)';\n\tt[40]= '#,##0.00;[Red](#,##0.00)';\n\tt[45]= 'mm:ss';\n\tt[46]= '[h]:mm:ss';\n\tt[47]= 'mmss.0';\n\tt[48]= '##0.0E+0';\n\tt[49]= '@';\n\tt[56]= '\"上午/下午 \"hh\"時\"mm\"分\"ss\"秒 \"';\n}\n\nvar table_fmt = {};\ninit_table(table_fmt);\n/* Defaults determined by systematically testing in Excel 2019 */\n\n/* These formats appear to default to other formats in the table */\nvar default_map/*:Array*/ = [];\nvar defi = 0;\n\n// 5 -> 37 ... 8 -> 40\nfor(defi = 5; defi <= 8; ++defi) default_map[defi] = 32 + defi;\n\n// 23 -> 0 ... 26 -> 0\nfor(defi = 23; defi <= 26; ++defi) default_map[defi] = 0;\n\n// 27 -> 14 ... 31 -> 14\nfor(defi = 27; defi <= 31; ++defi) default_map[defi] = 14;\n// 50 -> 14 ... 58 -> 14\nfor(defi = 50; defi <= 58; ++defi) default_map[defi] = 14;\n\n// 59 -> 1 ... 62 -> 4\nfor(defi = 59; defi <= 62; ++defi) default_map[defi] = defi - 58;\n// 67 -> 9 ... 68 -> 10\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 58;\n// 72 -> 14 ... 75 -> 17\nfor(defi = 72; defi <= 75; ++defi) default_map[defi] = defi - 58;\n\n// 69 -> 12 ... 71 -> 14\nfor(defi = 67; defi <= 68; ++defi) default_map[defi] = defi - 57;\n\n// 76 -> 20 ... 78 -> 22\nfor(defi = 76; defi <= 78; ++defi) default_map[defi] = defi - 56;\n\n// 79 -> 45 ... 81 -> 47\nfor(defi = 79; defi <= 81; ++defi) default_map[defi] = defi - 34;\n\n// 82 -> 0 ... 65536 -> 0 (omitted)\n\n/* These formats technically refer to Accounting formats with no equivalent */\nvar default_str/*:Array*/ = [];\n\n// 5 -- Currency, 0 decimal, black negative\ndefault_str[5] = default_str[63] = '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)';\n// 6 -- Currency, 0 decimal, red negative\ndefault_str[6] = default_str[64] = '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)';\n// 7 -- Currency, 2 decimal, black negative\ndefault_str[7] = default_str[65] = '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)';\n// 8 -- Currency, 2 decimal, red negative\ndefault_str[8] = default_str[66] = '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)';\n\n// 41 -- Accounting, 0 decimal, No Symbol\ndefault_str[41] = '_(* #,##0_);_(* \\\\(#,##0\\\\);_(* \"-\"_);_(@_)';\n// 42 -- Accounting, 0 decimal, $ Symbol\ndefault_str[42] = '_(\"$\"* #,##0_);_(\"$\"* \\\\(#,##0\\\\);_(\"$\"* \"-\"_);_(@_)';\n// 43 -- Accounting, 2 decimal, No Symbol\ndefault_str[43] = '_(* #,##0.00_);_(* \\\\(#,##0.00\\\\);_(* \"-\"??_);_(@_)';\n// 44 -- Accounting, 2 decimal, $ Symbol\ndefault_str[44] = '_(\"$\"* #,##0.00_);_(\"$\"* \\\\(#,##0.00\\\\);_(\"$\"* \"-\"??_);_(@_)';\nfunction frac(x/*:number*/, D/*:number*/, mixed/*:?boolean*/)/*:Array*/ {\n\tvar sgn = x < 0 ? -1 : 1;\n\tvar B = x * sgn;\n\tvar P_2 = 0, P_1 = 1, P = 0;\n\tvar Q_2 = 1, Q_1 = 0, Q = 0;\n\tvar A = Math.floor(B);\n\twhile(Q_1 < D) {\n\t\tA = Math.floor(B);\n\t\tP = A * P_1 + P_2;\n\t\tQ = A * Q_1 + Q_2;\n\t\tif((B - A) < 0.00000005) break;\n\t\tB = 1 / (B - A);\n\t\tP_2 = P_1; P_1 = P;\n\t\tQ_2 = Q_1; Q_1 = Q;\n\t}\n\tif(Q > D) { if(Q_1 > D) { Q = Q_2; P = P_2; } else { Q = Q_1; P = P_1; } }\n\tif(!mixed) return [0, sgn * P, Q];\n\tvar q = Math.floor(sgn * P/Q);\n\treturn [q, sgn*P - q*Q, Q];\n}\nfunction parse_date_code(v/*:number*/,opts/*:?any*/,b2/*:?boolean*/) {\n\tif(v > 2958465 || v < 0) return null;\n\tvar date = (v|0), time = Math.floor(86400 * (v - date)), dow=0;\n\tvar dout=[];\n\tvar out={D:date, T:time, u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};\n\tif(Math.abs(out.u) < 1e-6) out.u = 0;\n\tif(opts && opts.date1904) date += 1462;\n\tif(out.u > 0.9999) {\n\t\tout.u = 0;\n\t\tif(++time == 86400) { out.T = time = 0; ++date; ++out.D; }\n\t}\n\tif(date === 60) {dout = b2 ? [1317,10,29] : [1900,2,29]; dow=3;}\n\telse if(date === 0) {dout = b2 ? [1317,8,29] : [1900,1,0]; dow=6;}\n\telse {\n\t\tif(date > 60) --date;\n\t\t/* 1 = Jan 1 1900 in Gregorian */\n\t\tvar d = new Date(1900, 0, 1);\n\t\td.setDate(d.getDate() + date - 1);\n\t\tdout = [d.getFullYear(), d.getMonth()+1,d.getDate()];\n\t\tdow = d.getDay();\n\t\tif(date < 60) dow = (dow + 6) % 7;\n\t\tif(b2) dow = fix_hijri(d, dout);\n\t}\n\tout.y = dout[0]; out.m = dout[1]; out.d = dout[2];\n\tout.S = time % 60; time = Math.floor(time / 60);\n\tout.M = time % 60; time = Math.floor(time / 60);\n\tout.H = time;\n\tout.q = dow;\n\treturn out;\n}\nSSF.parse_date_code = parse_date_code;\nvar basedate = new Date(1899, 11, 31, 0, 0, 0);\nvar dnthresh = basedate.getTime();\nvar base1904 = new Date(1900, 2, 1, 0, 0, 0);\nfunction datenum_local(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = v.getTime();\n\tif(date1904) epoch -= 1461*24*60*60*1000;\n\telse if(v >= base1904) epoch += 24*60*60*1000;\n\treturn (epoch - (dnthresh + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000)) / (24 * 60 * 60 * 1000);\n}\n/* The longest 32-bit integer text is \"-4294967296\", exactly 11 chars */\nfunction general_fmt_int(v/*:number*/)/*:string*/ { return v.toString(10); }\nSSF._general_int = general_fmt_int;\n\n/* ECMA-376 18.8.30 numFmt*/\n/* Note: `toPrecision` uses standard form when prec > E and E >= -6 */\nvar general_fmt_num = (function make_general_fmt_num() {\n\tvar trailing_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)$/;\n\tfunction strip_decimal(o/*:string*/)/*:string*/ {\n\t\treturn (o.indexOf(\".\") == -1) ? o : o.replace(trailing_zeroes_and_decimal, \"$1\");\n\t}\n\n\t/* General Exponential always shows 2 digits exp and trims the mantissa */\n\tvar mantissa_zeroes_and_decimal = /(?:\\.0*|(\\.\\d*[1-9])0+)[Ee]/;\n\tvar exp_with_single_digit = /(E[+-])(\\d)$/;\n\tfunction normalize_exp(o/*:string*/)/*:string*/ {\n\t\tif(o.indexOf(\"E\") == -1) return o;\n\t\treturn o.replace(mantissa_zeroes_and_decimal,\"$1E\").replace(exp_with_single_digit,\"$10$2\");\n\t}\n\n\t/* exponent >= -9 and <= 9 */\n\tfunction small_exp(v/*:number*/)/*:string*/ {\n\t\tvar w = (v<0?12:11);\n\t\tvar o = strip_decimal(v.toFixed(12)); if(o.length <= w) return o;\n\t\to = v.toPrecision(10); if(o.length <= w) return o;\n\t\treturn v.toExponential(5);\n\t}\n\n\t/* exponent >= 11 or <= -10 likely exponential */\n\tfunction large_exp(v/*:number*/)/*:string*/ {\n\t\tvar o = strip_decimal(v.toFixed(11));\n\t\treturn (o.length > (v<0?12:11) || o === \"0\" || o === \"-0\") ? v.toPrecision(6) : o;\n\t}\n\n\tfunction general_fmt_num_base(v/*:number*/)/*:string*/ {\n\t\tvar V = Math.floor(Math.log(Math.abs(v))*Math.LOG10E), o;\n\n\t\tif(V >= -4 && V <= -1) o = v.toPrecision(10+V);\n\t\telse if(Math.abs(V) <= 9) o = small_exp(v);\n\t\telse if(V === 10) o = v.toFixed(10).substr(0,12);\n\t\telse o = large_exp(v);\n\n\t\treturn strip_decimal(normalize_exp(o.toUpperCase()));\n\t}\n\n\treturn general_fmt_num_base;\n})();\nSSF._general_num = general_fmt_num;\n\n/*\n\t\"General\" rules:\n\t- text is passed through (\"@\")\n\t- booleans are rendered as TRUE/FALSE\n\t- \"up to 11 characters\" displayed for numbers\n\t- Default date format (code 14) used for Dates\n\n\tTODO: technically the display depends on the width of the cell\n*/\nfunction general_fmt(v/*:any*/, opts/*:any*/) {\n\tswitch(typeof v) {\n\t\tcase 'string': return v;\n\t\tcase 'boolean': return v ? \"TRUE\" : \"FALSE\";\n\t\tcase 'number': return (v|0) === v ? v.toString(10) : general_fmt_num(v);\n\t\tcase 'undefined': return \"\";\n\t\tcase 'object':\n\t\t\tif(v == null) return \"\";\n\t\t\tif(v instanceof Date) return format(14, datenum_local(v, opts && opts.date1904), opts);\n\t}\n\tthrow new Error(\"unsupported value in General format: \" + v);\n}\nSSF._general = general_fmt;\nfunction fix_hijri(date/*:Date*/, o/*:[number, number, number]*/) {\n /* TODO: properly adjust y/m/d and */\n o[0] -= 581;\n var dow = date.getDay();\n if(date < 60) dow = (dow + 6) % 7;\n return dow;\n}\n//var THAI_DIGITS = \"\\u0E50\\u0E51\\u0E52\\u0E53\\u0E54\\u0E55\\u0E56\\u0E57\\u0E58\\u0E59\".split(\"\");\n/*jshint -W086 */\nfunction write_date(type/*:number*/, fmt/*:string*/, val, ss0/*:?number*/)/*:string*/ {\n\tvar o=\"\", ss=0, tt=0, y = val.y, out, outl = 0;\n\tswitch(type) {\n\t\tcase 98: /* 'b' buddhist year */\n\t\t\ty = val.y + 543;\n\t\t\t/* falls through */\n\t\tcase 121: /* 'y' year */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = y % 100; outl = 2; break;\n\t\t\tdefault: out = y % 10000; outl = 4; break;\n\t\t} break;\n\t\tcase 109: /* 'm' month */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.m; outl = fmt.length; break;\n\t\t\tcase 3: return months[val.m-1][1];\n\t\t\tcase 5: return months[val.m-1][0];\n\t\t\tdefault: return months[val.m-1][2];\n\t\t} break;\n\t\tcase 100: /* 'd' day */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.d; outl = fmt.length; break;\n\t\t\tcase 3: return days[val.q][0];\n\t\t\tdefault: return days[val.q][1];\n\t\t} break;\n\t\tcase 104: /* 'h' 12-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = 1+(val.H+11)%12; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 72: /* 'H' 24-hour */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.H; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad hour format: ' + fmt;\n\t\t} break;\n\t\tcase 77: /* 'M' minutes */\n\t\tswitch(fmt.length) {\n\t\t\tcase 1: case 2: out = val.M; outl = fmt.length; break;\n\t\t\tdefault: throw 'bad minute format: ' + fmt;\n\t\t} break;\n\t\tcase 115: /* 's' seconds */\n\t\t\tif(fmt != 's' && fmt != 'ss' && fmt != '.0' && fmt != '.00' && fmt != '.000') throw 'bad second format: ' + fmt;\n\t\t\tif(val.u === 0 && (fmt == \"s\" || fmt == \"ss\")) return pad0(val.S, fmt.length);\n\t\t\t/*::if(!ss0) ss0 = 0; */\n\t\t\tif(ss0 >= 2) tt = ss0 === 3 ? 1000 : 100;\n\t\t\telse tt = ss0 === 1 ? 10 : 1;\n\t\t\tss = Math.round((tt)*(val.S + val.u));\n\t\t\tif(ss >= 60*tt) ss = 0;\n\t\t\tif(fmt === 's') return ss === 0 ? \"0\" : \"\"+ss/tt;\n\t\t\to = pad0(ss,2 + ss0);\n\t\t\tif(fmt === 'ss') return o.substr(0,2);\n\t\t\treturn \".\" + o.substr(2,fmt.length-1);\n\t\tcase 90: /* 'Z' absolute time */\n\t\tswitch(fmt) {\n\t\t\tcase '[h]': case '[hh]': out = val.D*24+val.H; break;\n\t\t\tcase '[m]': case '[mm]': out = (val.D*24+val.H)*60+val.M; break;\n\t\t\tcase '[s]': case '[ss]': out = ((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u); break;\n\t\t\tdefault: throw 'bad abstime format: ' + fmt;\n\t\t} outl = fmt.length === 3 ? 1 : 2; break;\n\t\tcase 101: /* 'e' era */\n\t\t\tout = y; outl = 1; break;\n\t}\n\tvar outstr = outl > 0 ? pad0(out, outl) : \"\";\n\treturn outstr;\n}\n/*jshint +W086 */\nfunction commaify(s/*:string*/)/*:string*/ {\n\tvar w = 3;\n\tif(s.length <= w) return s;\n\tvar j = (s.length % w), o = s.substr(0,j);\n\tfor(; j!=s.length; j+=w) o+=(o.length > 0 ? \",\" : \"\") + s.substr(j,w);\n\treturn o;\n}\nvar write_num/*:SSF_write_num*/ = (function make_write_num(){\nvar pct1 = /%/g;\nfunction write_num_pct(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar sfmt = fmt.replace(pct1,\"\"), mul = fmt.length - sfmt.length;\n\treturn write_num(type, sfmt, val * Math.pow(10,2*mul)) + fill(\"%\",mul);\n}\nfunction write_num_cm(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar idx = fmt.length - 1;\n\twhile(fmt.charCodeAt(idx-1) === 44) --idx;\n\treturn write_num(type, fmt.substr(0,idx), val / Math.pow(10,3*(fmt.length-idx)));\n}\nfunction write_num_exp(fmt/*:string*/, val/*:number*/)/*:string*/{\n\tvar o/*:string*/;\n\tvar idx = fmt.indexOf(\"E\") - fmt.indexOf(\".\") - 1;\n\tif(fmt.match(/^#+0.0E\\+0$/)) {\n\t\tif(val == 0) return \"0.0E+0\";\n\t\telse if(val < 0) return \"-\" + write_num_exp(fmt, -val);\n\t\tvar period = fmt.indexOf(\".\"); if(period === -1) period=fmt.indexOf('E');\n\t\tvar ee = Math.floor(Math.log(val)*Math.LOG10E)%period;\n\t\tif(ee < 0) ee += period;\n\t\to = (val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);\n\t\tif(o.indexOf(\"e\") === -1) {\n\t\t\tvar fakee = Math.floor(Math.log(val)*Math.LOG10E);\n\t\t\tif(o.indexOf(\".\") === -1) o = o.charAt(0) + \".\" + o.substr(1) + \"E+\" + (fakee - o.length+ee);\n\t\t\telse o += \"E+\" + (fakee - ee);\n\t\t\twhile(o.substr(0,2) === \"0.\") {\n\t\t\t\to = o.charAt(0) + o.substr(2,period) + \".\" + o.substr(2+period);\n\t\t\t\to = o.replace(/^0+([1-9])/,\"$1\").replace(/^0+\\./,\"0.\");\n\t\t\t}\n\t\t\to = o.replace(/\\+-/,\"-\");\n\t\t}\n\t\to = o.replace(/^([+-]?)(\\d*)\\.(\\d*)[Ee]/,function($$,$1,$2,$3) { return $1 + $2 + $3.substr(0,(period+ee)%period) + \".\" + $3.substr(ee) + \"E\"; });\n\t} else o = val.toExponential(idx);\n\tif(fmt.match(/E\\+00$/) && o.match(/e[+-]\\d$/)) o = o.substr(0,o.length-1) + \"0\" + o.charAt(o.length-1);\n\tif(fmt.match(/E\\-/) && o.match(/e\\+/)) o = o.replace(/e\\+/,\"e\");\n\treturn o.replace(\"e\",\"E\");\n}\nvar frac1 = /# (\\?+)( ?)\\/( ?)(\\d+)/;\nfunction write_num_f1(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\tvar den = parseInt(r[4],10), rr = Math.round(aval * den), base = Math.floor(rr/den);\n\tvar myn = (rr - base*den), myd = den;\n\treturn sign + (base === 0 ? \"\" : \"\"+base) + \" \" + (myn === 0 ? fill(\" \", r[1].length + 1 + r[4].length) : pad_(myn,r[1].length) + r[2] + \"/\" + r[3] + pad0(myd,r[4].length));\n}\nfunction write_num_f2(r/*:Array*/, aval/*:number*/, sign/*:string*/)/*:string*/ {\n\treturn sign + (aval === 0 ? \"\" : \"\"+aval) + fill(\" \", r[1].length + 2 + r[4].length);\n}\nvar dec1 = /^#*0*\\.([0#]+)/;\nvar closeparen = /\\).*[0#]/;\nvar phone = /\\(###\\) ###\\\\?-####/;\nfunction hashq(str/*:string*/)/*:string*/ {\n\tvar o = \"\", cc;\n\tfor(var i = 0; i != str.length; ++i) switch((cc=str.charCodeAt(i))) {\n\t\tcase 35: break;\n\t\tcase 63: o+= \" \"; break;\n\t\tcase 48: o+= \"0\"; break;\n\t\tdefault: o+= String.fromCharCode(cc);\n\t}\n\treturn o;\n}\nfunction rnd(val/*:number*/, d/*:number*/)/*:string*/ { var dd = Math.pow(10,d); return \"\"+(Math.round(val * dd)/dd); }\nfunction dec(val/*:number*/, d/*:number*/)/*:number*/ {\n\tvar _frac = val - Math.floor(val), dd = Math.pow(10,d);\n\tif (d < ('' + Math.round(_frac * dd)).length) return 0;\n\treturn Math.round(_frac * dd);\n}\nfunction carry(val/*:number*/, d/*:number*/)/*:number*/ {\n\tif (d < ('' + Math.round((val-Math.floor(val))*Math.pow(10,d))).length) {\n\t\treturn 1;\n\t}\n\treturn 0;\n}\nfunction flr(val/*:number*/)/*:string*/ {\n\tif(val < 2147483647 && val > -2147483648) return \"\"+(val >= 0 ? (val|0) : (val-1|0));\n\treturn \"\"+Math.floor(val);\n}\nfunction write_num_flt(type/*:string*/, fmt/*:string*/, val/*:number*/)/*:string*/ {\n\tif(type.charCodeAt(0) === 40 && !fmt.match(closeparen)) {\n\t\tvar ffmt = fmt.replace(/\\( */,\"\").replace(/ \\)/,\"\").replace(/\\)/,\"\");\n\t\tif(val >= 0) return write_num_flt('n', ffmt, val);\n\t\treturn '(' + write_num_flt('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_flt(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0r(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = pad0r(val,0); if(o === \"0\") o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f1(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0r(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\to = rnd(val, r[1].length).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1])).replace(/\\.(\\d*)$/,function($$, $1) { return \".\" + $1 + fill(\"0\", hashq(/*::(*/r/*::||[\"\"])*/[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + rnd(aval, r[2].length).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify(pad0r(aval,0));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_flt(type, fmt, -val) : commaify(\"\"+(Math.floor(val) + carry(val, r[1].length))) + \".\" + pad0(dec(val, r[1].length),r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_flt(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_flt(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri= 0) return write_num_int('n', ffmt, val);\n\t\treturn '(' + write_num_int('n', ffmt, -val) + ')';\n\t}\n\tif(fmt.charCodeAt(fmt.length - 1) === 44) return write_num_cm2(type, fmt, val);\n\tif(fmt.indexOf('%') !== -1) return write_num_pct2(type, fmt, val);\n\tif(fmt.indexOf('E') !== -1) return write_num_exp2(fmt, val);\n\tif(fmt.charCodeAt(0) === 36) return \"$\"+write_num_int(type,fmt.substr(fmt.charAt(1)==' '?2:1),val);\n\tvar o;\n\tvar r/*:?Array*/, ri, ff, aval = Math.abs(val), sign = val < 0 ? \"-\" : \"\";\n\tif(fmt.match(/^00+$/)) return sign + pad0(aval,fmt.length);\n\tif(fmt.match(/^[#?]+$/)) {\n\t\to = (\"\"+val); if(val === 0) o = \"\";\n\t\treturn o.length > fmt.length ? o : hashq(fmt.substr(0,fmt.length-o.length)) + o;\n\t}\n\tif((r = fmt.match(frac1))) return write_num_f2(r, aval, sign);\n\tif(fmt.match(/^#+0+$/)) return sign + pad0(aval,fmt.length - fmt.indexOf(\"0\"));\n\tif((r = fmt.match(dec1))) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\to = (\"\"+val).replace(/^([^\\.]+)$/,\"$1.\"+hashq(r[1])).replace(/\\.$/,\".\"+hashq(r[1]));\n\t\to = o.replace(/\\.(\\d*)$/,function($$, $1) {\n\t\t/*:: if(!Array.isArray(r)) throw new Error(\"unreachable\"); */\n\t\t\treturn \".\" + $1 + fill(\"0\", hashq(r[1]).length-$1.length); });\n\t\treturn fmt.indexOf(\"0.\") !== -1 ? o : o.replace(/^0\\./,\".\");\n\t}\n\tfmt = fmt.replace(/^#+([0.])/, \"$1\");\n\tif((r = fmt.match(/^(0*)\\.(#*)$/))) {\n\t\treturn sign + (\"\"+aval).replace(/\\.(\\d*[1-9])0*$/,\".$1\").replace(/^(-?\\d*)$/,\"$1.\").replace(/^0\\./,r[1].length?\"0.\":\".\");\n\t}\n\tif((r = fmt.match(/^#{1,3},##0(\\.?)$/))) return sign + commaify((\"\"+aval));\n\tif((r = fmt.match(/^#,##0\\.([#0]*0)$/))) {\n\t\treturn val < 0 ? \"-\" + write_num_int(type, fmt, -val) : commaify((\"\"+val)) + \".\" + fill('0',r[1].length);\n\t}\n\tif((r = fmt.match(/^#,#*,#0/))) return write_num_int(type,fmt.replace(/^#,#*,/,\"\"),val);\n\tif((r = fmt.match(/^([0#]+)(\\\\?-([0#]+))+$/))) {\n\t\to = _strrev(write_num_int(type, fmt.replace(/[\\\\-]/g,\"\"), val));\n\t\tri = 0;\n\t\treturn _strrev(_strrev(fmt.replace(/\\\\/g,\"\")).replace(/[0#]/g,function(x){return ri*/ {\n\tvar out/*:Array*/ = [];\n\tvar in_str = false/*, cc*/;\n\tfor(var i = 0, j = 0; i < fmt.length; ++i) switch((/*cc=*/fmt.charCodeAt(i))) {\n\t\tcase 34: /* '\"' */\n\t\t\tin_str = !in_str; break;\n\t\tcase 95: case 42: case 92: /* '_' '*' '\\\\' */\n\t\t\t++i; break;\n\t\tcase 59: /* ';' */\n\t\t\tout[out.length] = fmt.substr(j,i-j);\n\t\t\tj = i+1;\n\t}\n\tout[out.length] = fmt.substr(j);\n\tif(in_str === true) throw new Error(\"Format |\" + fmt + \"| unterminated string \");\n\treturn out;\n}\nSSF._split = split_fmt;\nvar abstime = /\\[[HhMmSs\\u0E0A\\u0E19\\u0E17]*\\]/;\nfunction fmt_is_date(fmt/*:string*/)/*:boolean*/ {\n\tvar i = 0, /*cc = 0,*/ c = \"\", o = \"\";\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': if(isgeneral(fmt, i)) i+= 6; i++; break;\n\t\t\tcase '\"': for(;(/*cc=*/fmt.charCodeAt(++i)) !== 34 && i < fmt.length;){/*empty*/} ++i; break;\n\t\t\tcase '\\\\': i+=2; break;\n\t\t\tcase '_': i+=2; break;\n\t\t\tcase '@': ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") return true;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g': return true;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"AM/PM\") return true;\n\t\t\t\tif(fmt.substr(i, 5).toUpperCase() === \"上午/下午\") return true;\n\t\t\t\t++i; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.match(abstime)) return true;\n\t\t\t\tbreak;\n\t\t\tcase '.':\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\twhile(i < fmt.length && (\"0#?.,E+-%\".indexOf(c=fmt.charAt(++i)) > -1 || (c=='\\\\' && fmt.charAt(i+1) == \"-\" && \"0#\".indexOf(fmt.charAt(i+2))>-1))){/* empty */}\n\t\t\t\tbreak;\n\t\t\tcase '?': while(fmt.charAt(++i) === c){/* empty */} break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break;\n\t\t\tcase '(': case ')': ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\twhile(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1){/* empty */} break;\n\t\t\tcase ' ': ++i; break;\n\t\t\tdefault: ++i; break;\n\t\t}\n\t}\n\treturn false;\n}\nSSF.is_date = fmt_is_date;\nfunction eval_fmt(fmt/*:string*/, v/*:any*/, opts/*:any*/, flen/*:number*/) {\n\tvar out = [], o = \"\", i = 0, c = \"\", lst='t', dt, j, cc;\n\tvar hr='H';\n\t/* Tokenize */\n\twhile(i < fmt.length) {\n\t\tswitch((c = fmt.charAt(i))) {\n\t\t\tcase 'G': /* General */\n\t\t\t\tif(!isgeneral(fmt, i)) throw new Error('unrecognized character ' + c + ' in ' +fmt);\n\t\t\t\tout[out.length] = {t:'G', v:'General'}; i+=7; break;\n\t\t\tcase '\"': /* Literal text */\n\t\t\t\tfor(o=\"\";(cc=fmt.charCodeAt(++i)) !== 34 && i < fmt.length;) o += String.fromCharCode(cc);\n\t\t\t\tout[out.length] = {t:'t', v:o}; ++i; break;\n\t\t\tcase '\\\\': var w = fmt.charAt(++i), t = (w === \"(\" || w === \")\") ? w : 't';\n\t\t\t\tout[out.length] = {t:t, v:w}; ++i; break;\n\t\t\tcase '_': out[out.length] = {t:'t', v:\" \"}; i+=2; break;\n\t\t\tcase '@': /* Text Placeholder */\n\t\t\t\tout[out.length] = {t:'T', v:v}; ++i; break;\n\t\t\tcase 'B': case 'b':\n\t\t\t\tif(fmt.charAt(i+1) === \"1\" || fmt.charAt(i+1) === \"2\") {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts, fmt.charAt(i+1) === \"2\"); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'X', v:fmt.substr(i,2)}; lst = c; i+=2; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase 'M': case 'D': case 'Y': case 'H': case 'S': case 'E':\n\t\t\t\tc = c.toLowerCase();\n\t\t\t\t/* falls through */\n\t\t\tcase 'm': case 'd': case 'y': case 'h': case 's': case 'e': case 'g':\n\t\t\t\tif(v < 0) return \"\";\n\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\to = c; while(++i < fmt.length && fmt.charAt(i).toLowerCase() === c) o+=c;\n\t\t\t\tif(c === 'm' && lst.toLowerCase() === 'h') c = 'M';\n\t\t\t\tif(c === 'h') c = hr;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase 'A': case 'a': case '上':\n\t\t\t\tvar q={t:c, v:c};\n\t\t\t\tif(dt==null) dt=parse_date_code(v, opts);\n\t\t\t\tif(fmt.substr(i, 3).toUpperCase() === \"A/P\") { if(dt!=null) q.v = dt.H >= 12 ? \"P\" : \"A\"; q.t = 'T'; hr='h';i+=3;}\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"AM/PM\") { if(dt!=null) q.v = dt.H >= 12 ? \"PM\" : \"AM\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse if(fmt.substr(i,5).toUpperCase() === \"上午/下午\") { if(dt!=null) q.v = dt.H >= 12 ? \"下午\" : \"上午\"; q.t = 'T'; i+=5; hr='h'; }\n\t\t\t\telse { q.t = \"t\"; ++i; }\n\t\t\t\tif(dt==null && q.t === 'T') return \"\";\n\t\t\t\tout[out.length] = q; lst = c; break;\n\t\t\tcase '[':\n\t\t\t\to = c;\n\t\t\t\twhile(fmt.charAt(i++) !== ']' && i < fmt.length) o += fmt.charAt(i);\n\t\t\t\tif(o.slice(-1) !== ']') throw 'unterminated \"[\" block: |' + o + '|';\n\t\t\t\tif(o.match(abstime)) {\n\t\t\t\t\tif(dt==null) { dt=parse_date_code(v, opts); if(dt==null) return \"\"; }\n\t\t\t\t\tout[out.length] = {t:'Z', v:o.toLowerCase()};\n\t\t\t\t\tlst = o.charAt(1);\n\t\t\t\t} else if(o.indexOf(\"$\") > -1) {\n\t\t\t\t\to = (o.match(/\\$([^-\\[\\]]*)/)||[])[1]||\"$\";\n\t\t\t\t\tif(!fmt_is_date(fmt)) out[out.length] = {t:'t',v:o};\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t/* Numbers */\n\t\t\tcase '.':\n\t\t\t\tif(dt != null) {\n\t\t\t\t\to = c; while(++i < fmt.length && (c=fmt.charAt(i)) === \"0\") o += c;\n\t\t\t\t\tout[out.length] = {t:'s', v:o}; break;\n\t\t\t\t}\n\t\t\t\t/* falls through */\n\t\t\tcase '0': case '#':\n\t\t\t\to = c; while(++i < fmt.length && \"0#?.,E+-%\".indexOf(c=fmt.charAt(i)) > -1) o += c;\n\t\t\t\tout[out.length] = {t:'n', v:o}; break;\n\t\t\tcase '?':\n\t\t\t\to = c; while(fmt.charAt(++i) === c) o+=c;\n\t\t\t\tout[out.length] = {t:c, v:o}; lst = c; break;\n\t\t\tcase '*': ++i; if(fmt.charAt(i) == ' ' || fmt.charAt(i) == '*') ++i; break; // **\n\t\t\tcase '(': case ')': out[out.length] = {t:(flen===1?'t':c), v:c}; ++i; break;\n\t\t\tcase '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9':\n\t\t\t\to = c; while(i < fmt.length && \"0123456789\".indexOf(fmt.charAt(++i)) > -1) o+=fmt.charAt(i);\n\t\t\t\tout[out.length] = {t:'D', v:o}; break;\n\t\t\tcase ' ': out[out.length] = {t:c, v:c}; ++i; break;\n\t\t\tcase '$': out[out.length] = {t:'t', v:'$'}; ++i; break;\n\t\t\tdefault:\n\t\t\t\tif(\",$-+/():!^&'~{}<>=€acfijklopqrtuvwxzP\".indexOf(c) === -1) throw new Error('unrecognized character ' + c + ' in ' + fmt);\n\t\t\t\tout[out.length] = {t:'t', v:c}; ++i; break;\n\t\t}\n\t}\n\n\t/* Scan for date/time parts */\n\tvar bt = 0, ss0 = 0, ssm;\n\tfor(i=out.length-1, lst='t'; i >= 0; --i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 'h': case 'H': out[i].t = hr; lst='h'; if(bt < 1) bt = 1; break;\n\t\t\tcase 's':\n\t\t\t\tif((ssm=out[i].v.match(/\\.0+$/))) ss0=Math.max(ss0,ssm[0].length-1);\n\t\t\t\tif(bt < 3) bt = 3;\n\t\t\t/* falls through */\n\t\t\tcase 'd': case 'y': case 'M': case 'e': lst=out[i].t; break;\n\t\t\tcase 'm': if(lst === 's') { out[i].t = 'M'; if(bt < 2) bt = 2; } break;\n\t\t\tcase 'X': /*if(out[i].v === \"B2\");*/\n\t\t\t\tbreak;\n\t\t\tcase 'Z':\n\t\t\t\tif(bt < 1 && out[i].v.match(/[Hh]/)) bt = 1;\n\t\t\t\tif(bt < 2 && out[i].v.match(/[Mm]/)) bt = 2;\n\t\t\t\tif(bt < 3 && out[i].v.match(/[Ss]/)) bt = 3;\n\t\t}\n\t}\n\t/* time rounding depends on presence of minute / second / usec fields */\n\tswitch(bt) {\n\t\tcase 0: break;\n\t\tcase 1:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tif(dt.M >= 60) { dt.M = 0; ++dt.H; }\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/*::if(!dt) break;*/\n\t\t\tif(dt.u >= 0.5) { dt.u = 0; ++dt.S; }\n\t\t\tif(dt.S >= 60) { dt.S = 0; ++dt.M; }\n\t\t\tbreak;\n\t}\n\n\t/* replace fields */\n\tvar nstr = \"\", jj;\n\tfor(i=0; i < out.length; ++i) {\n\t\tswitch(out[i].t) {\n\t\t\tcase 't': case 'T': case ' ': case 'D': break;\n\t\t\tcase 'X': out[i].v = \"\"; out[i].t = \";\"; break;\n\t\t\tcase 'd': case 'm': case 'y': case 'h': case 'H': case 'M': case 's': case 'e': case 'b': case 'Z':\n\t\t\t\t/*::if(!dt) throw \"unreachable\"; */\n\t\t\t\tout[i].v = write_date(out[i].t.charCodeAt(0), out[i].v, dt, ss0);\n\t\t\t\tout[i].t = 't'; break;\n\t\t\tcase 'n': case '?':\n\t\t\t\tjj = i+1;\n\t\t\t\twhile(out[jj] != null && (\n\t\t\t\t\t(c=out[jj].t) === \"?\" || c === \"D\" ||\n\t\t\t\t\t((c === \" \" || c === \"t\") && out[jj+1] != null && (out[jj+1].t === '?' || out[jj+1].t === \"t\" && out[jj+1].v === '/')) ||\n\t\t\t\t\t(out[i].t === '(' && (c === ' ' || c === 'n' || c === ')')) ||\n\t\t\t\t\t(c === 't' && (out[jj].v === '/' || out[jj].v === ' ' && out[jj+1] != null && out[jj+1].t == '?'))\n\t\t\t\t)) {\n\t\t\t\t\tout[i].v += out[jj].v;\n\t\t\t\t\tout[jj] = {v:\"\", t:\";\"}; ++jj;\n\t\t\t\t}\n\t\t\t\tnstr += out[i].v;\n\t\t\t\ti = jj-1; break;\n\t\t\tcase 'G': out[i].t = 't'; out[i].v = general_fmt(v,opts); break;\n\t\t}\n\t}\n\tvar vv = \"\", myv, ostr;\n\tif(nstr.length > 0) {\n\t\tif(nstr.charCodeAt(0) == 40) /* '(' */ {\n\t\t\tmyv = (v<0&&nstr.charCodeAt(0) === 45 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t} else {\n\t\t\tmyv = (v<0 && flen > 1 ? -v : v);\n\t\t\tostr = write_num('n', nstr, myv);\n\t\t\tif(myv < 0 && out[0] && out[0].t == 't') {\n\t\t\t\tostr = ostr.substr(1);\n\t\t\t\tout[0].v = \"-\" + out[0].v;\n\t\t\t}\n\t\t}\n\t\tjj=ostr.length-1;\n\t\tvar decpt = out.length;\n\t\tfor(i=0; i < out.length; ++i) if(out[i] != null && out[i].t != 't' && out[i].v.indexOf(\".\") > -1) { decpt = i; break; }\n\t\tvar lasti=out.length;\n\t\tif(decpt === out.length && ostr.indexOf(\"E\") === -1) {\n\t\t\tfor(i=out.length-1; i>= 0;--i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tif(jj>=out[i].v.length-1) { jj -= out[i].v.length; out[i].v = ostr.substr(jj+1, out[i].v.length); }\n\t\t\t\telse if(jj < 0) out[i].v = \"\";\n\t\t\t\telse { out[i].v = ostr.substr(0, jj+1); jj = -1; }\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti= 0; --i) {\n\t\t\t\tif(out[i] == null || 'n?'.indexOf(out[i].t) === -1) continue;\n\t\t\t\tj=out[i].v.indexOf(\".\")>-1&&i===decpt?out[i].v.indexOf(\".\")-1:out[i].v.length-1;\n\t\t\t\tvv = out[i].v.substr(j+1);\n\t\t\t\tfor(; j>=0; --j) {\n\t\t\t\t\tif(jj>=0 && (out[i].v.charAt(j) === \"0\" || out[i].v.charAt(j) === \"#\")) vv = ostr.charAt(jj--) + vv;\n\t\t\t\t}\n\t\t\t\tout[i].v = vv;\n\t\t\t\tout[i].t = 't';\n\t\t\t\tlasti = i;\n\t\t\t}\n\t\t\tif(jj>=0 && lasti-1&&i===decpt?out[i].v.indexOf(\".\")+1:0;\n\t\t\t\tvv = out[i].v.substr(0,j);\n\t\t\t\tfor(; j-1) {\n\t\tmyv = (flen >1 && v < 0 && i>0 && out[i-1].v === \"-\" ? -v:v);\n\t\tout[i].v = write_num(out[i].t, out[i].v, myv);\n\t\tout[i].t = 't';\n\t}\n\tvar retval = \"\";\n\tfor(i=0; i !== out.length; ++i) if(out[i] != null) retval += out[i].v;\n\treturn retval;\n}\nSSF._eval = eval_fmt;\nvar cfregex = /\\[[=<>]/;\nvar cfregex2 = /\\[(=|>[=]?|<[>=]?)(-?\\d+(?:\\.\\d*)?)\\]/;\nfunction chkcond(v, rr) {\n\tif(rr == null) return false;\n\tvar thresh = parseFloat(rr[2]);\n\tswitch(rr[1]) {\n\t\tcase \"=\": if(v == thresh) return true; break;\n\t\tcase \">\": if(v > thresh) return true; break;\n\t\tcase \"<\": if(v < thresh) return true; break;\n\t\tcase \"<>\": if(v != thresh) return true; break;\n\t\tcase \">=\": if(v >= thresh) return true; break;\n\t\tcase \"<=\": if(v <= thresh) return true; break;\n\t}\n\treturn false;\n}\nfunction choose_fmt(f/*:string*/, v/*:any*/) {\n\tvar fmt = split_fmt(f);\n\tvar l = fmt.length, lat = fmt[l-1].indexOf(\"@\");\n\tif(l<4 && lat>-1) --l;\n\tif(fmt.length > 4) throw new Error(\"cannot find right format for |\" + fmt.join(\"|\") + \"|\");\n\tif(typeof v !== \"number\") return [4, fmt.length === 4 || lat>-1?fmt[fmt.length-1]:\"@\"];\n\tswitch(fmt.length) {\n\t\tcase 1: fmt = lat>-1 ? [\"General\", \"General\", \"General\", fmt[0]] : [fmt[0], fmt[0], fmt[0], \"@\"]; break;\n\t\tcase 2: fmt = lat>-1 ? [fmt[0], fmt[0], fmt[0], fmt[1]] : [fmt[0], fmt[1], fmt[0], \"@\"]; break;\n\t\tcase 3: fmt = lat>-1 ? [fmt[0], fmt[1], fmt[0], fmt[2]] : [fmt[0], fmt[1], fmt[2], \"@\"]; break;\n\t\tcase 4: break;\n\t}\n\tvar ff = v > 0 ? fmt[0] : v < 0 ? fmt[1] : fmt[2];\n\tif(fmt[0].indexOf(\"[\") === -1 && fmt[1].indexOf(\"[\") === -1) return [l, ff];\n\tif(fmt[0].match(cfregex) != null || fmt[1].match(cfregex) != null) {\n\t\tvar m1 = fmt[0].match(cfregex2);\n\t\tvar m2 = fmt[1].match(cfregex2);\n\t\treturn chkcond(v, m1) ? [l, fmt[0]] : chkcond(v, m2) ? [l, fmt[1]] : [l, fmt[m1 != null && m2 != null ? 2 : 1]];\n\t}\n\treturn [l, ff];\n}\nfunction format(fmt/*:string|number*/,v/*:any*/,o/*:?any*/) {\n\tif(o == null) o = {};\n\tvar sfmt = \"\";\n\tswitch(typeof fmt) {\n\t\tcase \"string\":\n\t\t\tif(fmt == \"m/d/yy\" && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = fmt;\n\t\t\tbreak;\n\t\tcase \"number\":\n\t\t\tif(fmt == 14 && o.dateNF) sfmt = o.dateNF;\n\t\t\telse sfmt = (o.table != null ? (o.table/*:any*/) : table_fmt)[fmt];\n\t\t\tif(sfmt == null) sfmt = (o.table && o.table[default_map[fmt]]) || table_fmt[default_map[fmt]];\n\t\t\tif(sfmt == null) sfmt = default_str[fmt] || \"General\";\n\t\t\tbreak;\n\t}\n\tif(isgeneral(sfmt,0)) return general_fmt(v, o);\n\tif(v instanceof Date) v = datenum_local(v, o.date1904);\n\tvar f = choose_fmt(sfmt, v);\n\tif(isgeneral(f[1])) return general_fmt(v, o);\n\tif(v === true) v = \"TRUE\"; else if(v === false) v = \"FALSE\";\n\telse if(v === \"\" || v == null) return \"\";\n\treturn eval_fmt(f[1], v, o, f[0]);\n}\nfunction load_entry(fmt/*:string*/, idx/*:?number*/)/*:number*/ {\n\tif(typeof idx != 'number') {\n\t\tidx = +idx || -1;\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tfor(var i = 0; i < 0x0188; ++i) {\n/*::if(typeof idx != 'number') return 0x188; */\n\t\t\tif(table_fmt[i] == undefined) { if(idx < 0) idx = i; continue; }\n\t\t\tif(table_fmt[i] == fmt) { idx = i; break; }\n\t\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\t\tif(idx < 0) idx = 0x187;\n\t}\n/*::if(typeof idx != 'number') return 0x188; */\n\ttable_fmt[idx] = fmt;\n\treturn idx;\n}\nSSF.load = load_entry;\nSSF._table = table_fmt;\nSSF.get_table = function get_table()/*:SSFTable*/ { return table_fmt; };\nSSF.load_table = function load_table(tbl/*:SSFTable*/)/*:void*/ {\n\tfor(var i=0; i!=0x0188; ++i)\n\t\tif(tbl[i] !== undefined) load_entry(tbl[i], i);\n};\nSSF.init_table = init_table;\nSSF.format = format;\n};\nmake_ssf(SSF);\n/* map from xlml named formats to SSF TODO: localize */\nvar XLMLFormatMap/*{[string]:string}*/ = ({\n\t\"General Number\": \"General\",\n\t\"General Date\": SSF._table[22],\n\t\"Long Date\": \"dddd, mmmm dd, yyyy\",\n\t\"Medium Date\": SSF._table[15],\n\t\"Short Date\": SSF._table[14],\n\t\"Long Time\": SSF._table[19],\n\t\"Medium Time\": SSF._table[18],\n\t\"Short Time\": SSF._table[20],\n\t\"Currency\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"Fixed\": SSF._table[2],\n\t\"Standard\": SSF._table[4],\n\t\"Percent\": SSF._table[10],\n\t\"Scientific\": SSF._table[11],\n\t\"Yes/No\": '\"Yes\";\"Yes\";\"No\";@',\n\t\"True/False\": '\"True\";\"True\";\"False\";@',\n\t\"On/Off\": '\"Yes\";\"Yes\";\"No\";@'\n}/*:any*/);\n\nvar SSFImplicit/*{[number]:string}*/ = ({\n\t\"5\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"6\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"7\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"8\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"23\": 'General', \"24\": 'General', \"25\": 'General', \"26\": 'General',\n\t\"27\": 'm/d/yy', \"28\": 'm/d/yy', \"29\": 'm/d/yy', \"30\": 'm/d/yy', \"31\": 'm/d/yy',\n\t\"32\": 'h:mm:ss', \"33\": 'h:mm:ss', \"34\": 'h:mm:ss', \"35\": 'h:mm:ss',\n\t\"36\": 'm/d/yy',\n\t\"41\": '_(* #,##0_);_(* \\(#,##0\\);_(* \"-\"_);_(@_)',\n\t\"42\": '_(\"$\"* #,##0_);_(\"$\"* \\(#,##0\\);_(\"$\"* \"-\"_);_(@_)',\n\t\"43\": '_(* #,##0.00_);_(* \\(#,##0.00\\);_(* \"-\"??_);_(@_)',\n\t\"44\": '_(\"$\"* #,##0.00_);_(\"$\"* \\(#,##0.00\\);_(\"$\"* \"-\"??_);_(@_)',\n\t\"50\": 'm/d/yy', \"51\": 'm/d/yy', \"52\": 'm/d/yy', \"53\": 'm/d/yy', \"54\": 'm/d/yy',\n\t\"55\": 'm/d/yy', \"56\": 'm/d/yy', \"57\": 'm/d/yy', \"58\": 'm/d/yy',\n\t\"59\": '0',\n\t\"60\": '0.00',\n\t\"61\": '#,##0',\n\t\"62\": '#,##0.00',\n\t\"63\": '\"$\"#,##0_);\\\\(\"$\"#,##0\\\\)',\n\t\"64\": '\"$\"#,##0_);[Red]\\\\(\"$\"#,##0\\\\)',\n\t\"65\": '\"$\"#,##0.00_);\\\\(\"$\"#,##0.00\\\\)',\n\t\"66\": '\"$\"#,##0.00_);[Red]\\\\(\"$\"#,##0.00\\\\)',\n\t\"67\": '0%',\n\t\"68\": '0.00%',\n\t\"69\": '# ?/?',\n\t\"70\": '# ??/??',\n\t\"71\": 'm/d/yy',\n\t\"72\": 'm/d/yy',\n\t\"73\": 'd-mmm-yy',\n\t\"74\": 'd-mmm',\n\t\"75\": 'mmm-yy',\n\t\"76\": 'h:mm',\n\t\"77\": 'h:mm:ss',\n\t\"78\": 'm/d/yy h:mm',\n\t\"79\": 'mm:ss',\n\t\"80\": '[h]:mm:ss',\n\t\"81\": 'mmss.0'\n}/*:any*/);\n\n/* dateNF parse TODO: move to SSF */\nvar dateNFregex = /[dD]+|[mM]+|[yYeE]+|[Hh]+|[Ss]+/g;\nfunction dateNF_regex(dateNF/*:string|number*/)/*:RegExp*/ {\n\tvar fmt = typeof dateNF == \"number\" ? SSF._table[dateNF] : dateNF;\n\tfmt = fmt.replace(dateNFregex, \"(\\\\d+)\");\n\treturn new RegExp(\"^\" + fmt + \"$\");\n}\nfunction dateNF_fix(str/*:string*/, dateNF/*:string*/, match/*:Array*/)/*:string*/ {\n\tvar Y = -1, m = -1, d = -1, H = -1, M = -1, S = -1;\n\t(dateNF.match(dateNFregex)||[]).forEach(function(n, i) {\n\t\tvar v = parseInt(match[i+1], 10);\n\t\tswitch(n.toLowerCase().charAt(0)) {\n\t\t\tcase 'y': Y = v; break; case 'd': d = v; break;\n\t\t\tcase 'h': H = v; break; case 's': S = v; break;\n\t\t\tcase 'm': if(H >= 0) M = v; else m = v; break;\n\t\t}\n\t});\n\tif(S >= 0 && M == -1 && m >= 0) { M = m; m = -1; }\n\tvar datestr = ((\"\" + (Y>=0?Y: new Date().getFullYear())).slice(-4) + \"-\" + (\"00\" + (m>=1?m:1)).slice(-2) + \"-\" + (\"00\" + (d>=1?d:1)).slice(-2));\n\tif(datestr.length == 7) datestr = \"0\" + datestr;\n\tif(datestr.length == 8) datestr = \"20\" + datestr;\n\tvar timestr = ((\"00\" + (H>=0?H:0)).slice(-2) + \":\" + (\"00\" + (M>=0?M:0)).slice(-2) + \":\" + (\"00\" + (S>=0?S:0)).slice(-2));\n\tif(H == -1 && M == -1 && S == -1) return datestr;\n\tif(Y == -1 && m == -1 && d == -1) return timestr;\n\treturn datestr + \"T\" + timestr;\n}\n\nvar DO_NOT_EXPORT_CFB = true;\n/*::\ndeclare var Base64:any;\ndeclare var ReadShift:any;\ndeclare var CheckField:any;\ndeclare var prep_blob:any;\ndeclare var __readUInt32LE:any;\ndeclare var __readInt32LE:any;\ndeclare var __toBuffer:any;\ndeclare var __utf16le:any;\ndeclare var bconcat:any;\ndeclare var s2a:any;\ndeclare var chr0:any;\ndeclare var chr1:any;\ndeclare var has_buf:boolean;\ndeclare var new_buf:any;\ndeclare var new_raw_buf:any;\ndeclare var new_unsafe_buf:any;\n*/\n/* cfb.js (C) 2013-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*jshint eqnull:true */\n/*exported CFB */\n/*global Uint8Array:false, Uint16Array:false */\n\n/*::\ndeclare var DO_NOT_EXPORT_CFB:?boolean;\ntype SectorEntry = {\n\tname?:string;\n\tnodes?:Array;\n\tdata:RawBytes;\n};\ntype SectorList = {\n\t[k:string|number]:SectorEntry;\n\tname:?string;\n\tfat_addrs:Array;\n\tssz:number;\n}\ntype CFBFiles = {[n:string]:CFBEntry};\n*/\n/* crc32.js (C) 2014-present SheetJS -- http://sheetjs.com */\n/* vim: set ts=2: */\n/*exported CRC32 */\nvar CRC32;\n(function (factory) {\n\t/*jshint ignore:start */\n\t/*eslint-disable */\n\tfactory(CRC32 = {});\n\t/*eslint-enable */\n\t/*jshint ignore:end */\n}(function(CRC32) {\nCRC32.version = '1.2.0';\n/* see perf/crc32table.js */\n/*global Int32Array */\nfunction signed_crc_table()/*:any*/ {\n\tvar c = 0, table/*:Array*/ = new Array(256);\n\n\tfor(var n =0; n != 256; ++n){\n\t\tc = n;\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\tc = ((c&1) ? (-306674912 ^ (c >>> 1)) : (c >>> 1));\n\t\ttable[n] = c;\n\t}\n\n\treturn typeof Int32Array !== 'undefined' ? new Int32Array(table) : table;\n}\n\nvar T = signed_crc_table();\nfunction crc32_bstr(bstr/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1, L = bstr.length - 1;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t\tC = (C>>>8) ^ T[(C^bstr.charCodeAt(i++))&0xFF];\n\t}\n\tif(i === L) C = (C>>>8) ^ T[(C ^ bstr.charCodeAt(i))&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf(buf/*:Uint8Array|Array*/, seed/*:number*/)/*:number*/ {\n\tif(buf.length > 10000) return crc32_buf_8(buf, seed);\n\tvar C = seed ^ -1, L = buf.length - 3;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+3) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_buf_8(buf/*:Uint8Array|Array*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1, L = buf.length - 7;\n\tfor(var i = 0; i < L;) {\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t\tC = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\t}\n\twhile(i < L+7) C = (C>>>8) ^ T[(C^buf[i++])&0xFF];\n\treturn C ^ -1;\n}\n\nfunction crc32_str(str/*:string*/, seed/*:number*/)/*:number*/ {\n\tvar C = seed ^ -1;\n\tfor(var i = 0, L=str.length, c, d; i < L;) {\n\t\tc = str.charCodeAt(i++);\n\t\tif(c < 0x80) {\n\t\t\tC = (C>>>8) ^ T[(C ^ c)&0xFF];\n\t\t} else if(c < 0x800) {\n\t\t\tC = (C>>>8) ^ T[(C ^ (192|((c>>6)&31)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t} else if(c >= 0xD800 && c < 0xE000) {\n\t\t\tc = (c&1023)+64; d = str.charCodeAt(i++)&1023;\n\t\t\tC = (C>>>8) ^ T[(C ^ (240|((c>>8)&7)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>2)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((d>>6)&15)|((c&3)<<4)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(d&63)))&0xFF];\n\t\t} else {\n\t\t\tC = (C>>>8) ^ T[(C ^ (224|((c>>12)&15)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|((c>>6)&63)))&0xFF];\n\t\t\tC = (C>>>8) ^ T[(C ^ (128|(c&63)))&0xFF];\n\t\t}\n\t}\n\treturn C ^ -1;\n}\nCRC32.table = T;\nCRC32.bstr = crc32_bstr;\nCRC32.buf = crc32_buf;\nCRC32.str = crc32_str;\n}));\n/* [MS-CFB] v20171201 */\nvar CFB = (function _CFB(){\nvar exports/*:CFBModule*/ = /*::(*/{}/*:: :any)*/;\nexports.version = '1.1.4';\n/* [MS-CFB] 2.6.4 */\nfunction namecmp(l/*:string*/, r/*:string*/)/*:number*/ {\n\tvar L = l.split(\"/\"), R = r.split(\"/\");\n\tfor(var i = 0, c = 0, Z = Math.min(L.length, R.length); i < Z; ++i) {\n\t\tif((c = L[i].length - R[i].length)) return c;\n\t\tif(L[i] != R[i]) return L[i] < R[i] ? -1 : 1;\n\t}\n\treturn L.length - R.length;\n}\nfunction dirname(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return (p.slice(0,-1).indexOf(\"/\") === -1) ? p : dirname(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(0, c+1);\n}\n\nfunction filename(p/*:string*/)/*:string*/ {\n\tif(p.charAt(p.length - 1) == \"/\") return filename(p.slice(0, -1));\n\tvar c = p.lastIndexOf(\"/\");\n\treturn (c === -1) ? p : p.slice(c+1);\n}\n/* -------------------------------------------------------------------------- */\n/* DOS Date format:\n high|YYYYYYYm.mmmddddd.HHHHHMMM.MMMSSSSS|low\n add 1980 to stored year\n stored second should be doubled\n*/\n\n/* write JS date to buf as a DOS date */\nfunction write_dos_date(buf/*:CFBlob*/, date/*:Date|string*/) {\n\tif(typeof date === \"string\") date = new Date(date);\n\tvar hms/*:number*/ = date.getHours();\n\thms = hms << 6 | date.getMinutes();\n\thms = hms << 5 | (date.getSeconds()>>>1);\n\tbuf.write_shift(2, hms);\n\tvar ymd/*:number*/ = (date.getFullYear() - 1980);\n\tymd = ymd << 4 | (date.getMonth()+1);\n\tymd = ymd << 5 | date.getDate();\n\tbuf.write_shift(2, ymd);\n}\n\n/* read four bytes from buf and interpret as a DOS date */\nfunction parse_dos_date(buf/*:CFBlob*/)/*:Date*/ {\n\tvar hms = buf.read_shift(2) & 0xFFFF;\n\tvar ymd = buf.read_shift(2) & 0xFFFF;\n\tvar val = new Date();\n\tvar d = ymd & 0x1F; ymd >>>= 5;\n\tvar m = ymd & 0x0F; ymd >>>= 4;\n\tval.setMilliseconds(0);\n\tval.setFullYear(ymd + 1980);\n\tval.setMonth(m-1);\n\tval.setDate(d);\n\tvar S = hms & 0x1F; hms >>>= 5;\n\tvar M = hms & 0x3F; hms >>>= 6;\n\tval.setHours(hms);\n\tval.setMinutes(M);\n\tval.setSeconds(S<<1);\n\treturn val;\n}\nfunction parse_extra_field(blob/*:CFBlob*/)/*:any*/ {\n\tprep_blob(blob, 0);\n\tvar o = /*::(*/{}/*:: :any)*/;\n\tvar flags = 0;\n\twhile(blob.l <= blob.length - 4) {\n\t\tvar type = blob.read_shift(2);\n\t\tvar sz = blob.read_shift(2), tgt = blob.l + sz;\n\t\tvar p = {};\n\t\tswitch(type) {\n\t\t\t/* UNIX-style Timestamps */\n\t\t\tcase 0x5455: {\n\t\t\t\tflags = blob.read_shift(1);\n\t\t\t\tif(flags & 1) p.mtime = blob.read_shift(4);\n\t\t\t\t/* for some reason, CD flag corresponds to LFH */\n\t\t\t\tif(sz > 5) {\n\t\t\t\t\tif(flags & 2) p.atime = blob.read_shift(4);\n\t\t\t\t\tif(flags & 4) p.ctime = blob.read_shift(4);\n\t\t\t\t}\n\t\t\t\tif(p.mtime) p.mt = new Date(p.mtime*1000);\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\tblob.l = tgt;\n\t\to[type] = p;\n\t}\n\treturn o;\n}\nvar fs/*:: = require('fs'); */;\nfunction get_fs() { return fs || (fs = {}); }\nfunction parse(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\nif(file[0] == 0x50 && file[1] == 0x4b) return parse_zip(file, options);\nif(file.length < 512) throw new Error(\"CFB file size \" + file.length + \" < 512\");\nvar mver = 3;\nvar ssz = 512;\nvar nmfs = 0; // number of mini FAT sectors\nvar difat_sec_cnt = 0;\nvar dir_start = 0;\nvar minifat_start = 0;\nvar difat_start = 0;\n\nvar fat_addrs/*:Array*/ = []; // locations of FAT sectors\n\n/* [MS-CFB] 2.2 Compound File Header */\nvar blob/*:CFBlob*/ = /*::(*/file.slice(0,512)/*:: :any)*/;\nprep_blob(blob, 0);\n\n/* major version */\nvar mv = check_get_mver(blob);\nmver = mv[0];\nswitch(mver) {\n\tcase 3: ssz = 512; break; case 4: ssz = 4096; break;\n\tcase 0: if(mv[1] == 0) return parse_zip(file, options);\n\t/* falls through */\n\tdefault: throw new Error(\"Major Version: Expected 3 or 4 saw \" + mver);\n}\n\n/* reprocess header */\nif(ssz !== 512) { blob = /*::(*/file.slice(0,ssz)/*:: :any)*/; prep_blob(blob, 28 /* blob.l */); }\n/* Save header for final object */\nvar header/*:RawBytes*/ = file.slice(0,ssz);\n\ncheck_shifts(blob, mver);\n\n// Number of Directory Sectors\nvar dir_cnt/*:number*/ = blob.read_shift(4, 'i');\nif(mver === 3 && dir_cnt !== 0) throw new Error('# Directory Sectors: Expected 0 saw ' + dir_cnt);\n\n// Number of FAT Sectors\nblob.l += 4;\n\n// First Directory Sector Location\ndir_start = blob.read_shift(4, 'i');\n\n// Transaction Signature\nblob.l += 4;\n\n// Mini Stream Cutoff Size\nblob.chk('00100000', 'Mini Stream Cutoff Size: ');\n\n// First Mini FAT Sector Location\nminifat_start = blob.read_shift(4, 'i');\n\n// Number of Mini FAT Sectors\nnmfs = blob.read_shift(4, 'i');\n\n// First DIFAT sector location\ndifat_start = blob.read_shift(4, 'i');\n\n// Number of DIFAT Sectors\ndifat_sec_cnt = blob.read_shift(4, 'i');\n\n// Grab FAT Sector Locations\nfor(var q = -1, j = 0; j < 109; ++j) { /* 109 = (512 - blob.l)>>>2; */\n\tq = blob.read_shift(4, 'i');\n\tif(q<0) break;\n\tfat_addrs[j] = q;\n}\n\n/** Break the file up into sectors */\nvar sectors/*:Array*/ = sectorify(file, ssz);\n\nsleuth_fat(difat_start, difat_sec_cnt, sectors, ssz, fat_addrs);\n\n/** Chains */\nvar sector_list/*:SectorList*/ = make_sector_list(sectors, dir_start, fat_addrs, ssz);\n\nsector_list[dir_start].name = \"!Directory\";\nif(nmfs > 0 && minifat_start !== ENDOFCHAIN) sector_list[minifat_start].name = \"!MiniFAT\";\nsector_list[fat_addrs[0]].name = \"!FAT\";\nsector_list.fat_addrs = fat_addrs;\nsector_list.ssz = ssz;\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nvar files/*:CFBFiles*/ = {}, Paths/*:Array*/ = [], FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\nread_directory(dir_start, sector_list, sectors, Paths, nmfs, files, FileIndex, minifat_start);\n\nbuild_full_paths(FileIndex, FullPaths, Paths);\nPaths.shift();\n\nvar o = {\n\tFileIndex: FileIndex,\n\tFullPaths: FullPaths\n};\n\n// $FlowIgnore\nif(options && options.raw) o.raw = {header: header, sectors: sectors};\nreturn o;\n} // parse\n\n/* [MS-CFB] 2.2 Compound File Header -- read up to major version */\nfunction check_get_mver(blob/*:CFBlob*/)/*:[number, number]*/ {\n\tif(blob[blob.l] == 0x50 && blob[blob.l + 1] == 0x4b) return [0, 0];\n\t// header signature 8\n\tblob.chk(HEADER_SIGNATURE, 'Header Signature: ');\n\n\t// clsid 16\n\t//blob.chk(HEADER_CLSID, 'CLSID: ');\n\tblob.l += 16;\n\n\t// minor version 2\n\tvar mver/*:number*/ = blob.read_shift(2, 'u');\n\n\treturn [blob.read_shift(2,'u'), mver];\n}\nfunction check_shifts(blob/*:CFBlob*/, mver/*:number*/)/*:void*/ {\n\tvar shift = 0x09;\n\n\t// Byte Order\n\t//blob.chk('feff', 'Byte Order: '); // note: some writers put 0xffff\n\tblob.l += 2;\n\n\t// Sector Shift\n\tswitch((shift = blob.read_shift(2))) {\n\t\tcase 0x09: if(mver != 3) throw new Error('Sector Shift: Expected 9 saw ' + shift); break;\n\t\tcase 0x0c: if(mver != 4) throw new Error('Sector Shift: Expected 12 saw ' + shift); break;\n\t\tdefault: throw new Error('Sector Shift: Expected 9 or 12 saw ' + shift);\n\t}\n\n\t// Mini Sector Shift\n\tblob.chk('0600', 'Mini Sector Shift: ');\n\n\t// Reserved\n\tblob.chk('000000000000', 'Reserved: ');\n}\n\n/** Break the file up into sectors */\nfunction sectorify(file/*:RawBytes*/, ssz/*:number*/)/*:Array*/ {\n\tvar nsectors = Math.ceil(file.length/ssz)-1;\n\tvar sectors/*:Array*/ = [];\n\tfor(var i=1; i < nsectors; ++i) sectors[i-1] = file.slice(i*ssz,(i+1)*ssz);\n\tsectors[nsectors-1] = file.slice(nsectors*ssz);\n\treturn sectors;\n}\n\n/* [MS-CFB] 2.6.4 Red-Black Tree */\nfunction build_full_paths(FI/*:CFBFileIndex*/, FP/*:Array*/, Paths/*:Array*/)/*:void*/ {\n\tvar i = 0, L = 0, R = 0, C = 0, j = 0, pl = Paths.length;\n\tvar dad/*:Array*/ = [], q/*:Array*/ = [];\n\n\tfor(; i < pl; ++i) { dad[i]=q[i]=i; FP[i]=Paths[i]; }\n\n\tfor(; j < q.length; ++j) {\n\t\ti = q[j];\n\t\tL = FI[i].L; R = FI[i].R; C = FI[i].C;\n\t\tif(dad[i] === i) {\n\t\t\tif(L !== -1 /*NOSTREAM*/ && dad[L] !== L) dad[i] = dad[L];\n\t\t\tif(R !== -1 && dad[R] !== R) dad[i] = dad[R];\n\t\t}\n\t\tif(C !== -1 /*NOSTREAM*/) dad[C] = i;\n\t\tif(L !== -1 && i != dad[i]) { dad[L] = dad[i]; if(q.lastIndexOf(L) < j) q.push(L); }\n\t\tif(R !== -1 && i != dad[i]) { dad[R] = dad[i]; if(q.lastIndexOf(R) < j) q.push(R); }\n\t}\n\tfor(i=1; i < pl; ++i) if(dad[i] === i) {\n\t\tif(R !== -1 /*NOSTREAM*/ && dad[R] !== R) dad[i] = dad[R];\n\t\telse if(L !== -1 && dad[L] !== L) dad[i] = dad[L];\n\t}\n\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type === 0 /* unknown */) continue;\n\t\tj = i;\n\t\tif(j != dad[j]) do {\n\t\t\tj = dad[j];\n\t\t\tFP[i] = FP[j] + \"/\" + FP[i];\n\t\t} while (j !== 0 && -1 !== dad[j] && j != dad[j]);\n\t\tdad[i] = -1;\n\t}\n\n\tFP[0] += \"/\";\n\tfor(i=1; i < pl; ++i) {\n\t\tif(FI[i].type !== 2 /* stream */) FP[i] += \"/\";\n\t}\n}\n\nfunction get_mfat_entry(entry/*:CFBEntry*/, payload/*:RawBytes*/, mini/*:?RawBytes*/)/*:CFBlob*/ {\n\tvar start = entry.start, size = entry.size;\n\t//return (payload.slice(start*MSSZ, start*MSSZ + size)/*:any*/);\n\tvar o = [];\n\tvar idx = start;\n\twhile(mini && size > 0 && idx >= 0) {\n\t\to.push(payload.slice(idx * MSSZ, idx * MSSZ + MSSZ));\n\t\tsize -= MSSZ;\n\t\tidx = __readInt32LE(mini, idx * 4);\n\t}\n\tif(o.length === 0) return (new_buf(0)/*:any*/);\n\treturn (bconcat(o).slice(0, entry.size)/*:any*/);\n}\n\n/** Chase down the rest of the DIFAT chain to build a comprehensive list\n DIFAT chains by storing the next sector number as the last 32 bits */\nfunction sleuth_fat(idx/*:number*/, cnt/*:number*/, sectors/*:Array*/, ssz/*:number*/, fat_addrs)/*:void*/ {\n\tvar q/*:number*/ = ENDOFCHAIN;\n\tif(idx === ENDOFCHAIN) {\n\t\tif(cnt !== 0) throw new Error(\"DIFAT chain shorter than expected\");\n\t} else if(idx !== -1 /*FREESECT*/) {\n\t\tvar sector = sectors[idx], m = (ssz>>>2)-1;\n\t\tif(!sector) return;\n\t\tfor(var i = 0; i < m; ++i) {\n\t\t\tif((q = __readInt32LE(sector,i*4)) === ENDOFCHAIN) break;\n\t\t\tfat_addrs.push(q);\n\t\t}\n\t\tsleuth_fat(__readInt32LE(sector,ssz-4),cnt - 1, sectors, ssz, fat_addrs);\n\t}\n}\n\n/** Follow the linked list of sectors for a given starting point */\nfunction get_sector_list(sectors/*:Array*/, start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/, chkd/*:?Array*/)/*:SectorEntry*/ {\n\tvar buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tif(!chkd) chkd = [];\n\tvar modulus = ssz - 1, j = 0, jj = 0;\n\tfor(j=start; j>=0;) {\n\t\tchkd[j] = true;\n\t\tbuf[buf.length] = j;\n\t\tbuf_chain.push(sectors[j]);\n\t\tvar addr = fat_addrs[Math.floor(j*4/ssz)];\n\t\tjj = ((j*4) & modulus);\n\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\tif(!sectors[addr]) break;\n\t\tj = __readInt32LE(sectors[addr], jj);\n\t}\n\treturn {nodes: buf, data:__toBuffer([buf_chain])};\n}\n\n/** Chase down the sector linked lists */\nfunction make_sector_list(sectors/*:Array*/, dir_start/*:number*/, fat_addrs/*:Array*/, ssz/*:number*/)/*:SectorList*/ {\n\tvar sl = sectors.length, sector_list/*:SectorList*/ = ([]/*:any*/);\n\tvar chkd/*:Array*/ = [], buf/*:Array*/ = [], buf_chain/*:Array*/ = [];\n\tvar modulus = ssz - 1, i=0, j=0, k=0, jj=0;\n\tfor(i=0; i < sl; ++i) {\n\t\tbuf = ([]/*:Array*/);\n\t\tk = (i + dir_start); if(k >= sl) k-=sl;\n\t\tif(chkd[k]) continue;\n\t\tbuf_chain = [];\n\t\tvar seen = [];\n\t\tfor(j=k; j>=0;) {\n\t\t\tseen[j] = true;\n\t\t\tchkd[j] = true;\n\t\t\tbuf[buf.length] = j;\n\t\t\tbuf_chain.push(sectors[j]);\n\t\t\tvar addr/*:number*/ = fat_addrs[Math.floor(j*4/ssz)];\n\t\t\tjj = ((j*4) & modulus);\n\t\t\tif(ssz < 4 + jj) throw new Error(\"FAT boundary crossed: \" + j + \" 4 \"+ssz);\n\t\t\tif(!sectors[addr]) break;\n\t\t\tj = __readInt32LE(sectors[addr], jj);\n\t\t\tif(seen[j]) break;\n\t\t}\n\t\tsector_list[k] = ({nodes: buf, data:__toBuffer([buf_chain])}/*:SectorEntry*/);\n\t}\n\treturn sector_list;\n}\n\n/* [MS-CFB] 2.6.1 Compound File Directory Entry */\nfunction read_directory(dir_start/*:number*/, sector_list/*:SectorList*/, sectors/*:Array*/, Paths/*:Array*/, nmfs, files, FileIndex, mini) {\n\tvar minifat_store = 0, pl = (Paths.length?2:0);\n\tvar sector = sector_list[dir_start].data;\n\tvar i = 0, namelen = 0, name;\n\tfor(; i < sector.length; i+= 128) {\n\t\tvar blob/*:CFBlob*/ = /*::(*/sector.slice(i, i+128)/*:: :any)*/;\n\t\tprep_blob(blob, 64);\n\t\tnamelen = blob.read_shift(2);\n\t\tname = __utf16le(blob,0,namelen-pl);\n\t\tPaths.push(name);\n\t\tvar o/*:CFBEntry*/ = ({\n\t\t\tname: name,\n\t\t\ttype: blob.read_shift(1),\n\t\t\tcolor: blob.read_shift(1),\n\t\t\tL: blob.read_shift(4, 'i'),\n\t\t\tR: blob.read_shift(4, 'i'),\n\t\t\tC: blob.read_shift(4, 'i'),\n\t\t\tclsid: blob.read_shift(16),\n\t\t\tstate: blob.read_shift(4, 'i'),\n\t\t\tstart: 0,\n\t\t\tsize: 0\n\t\t});\n\t\tvar ctime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(ctime !== 0) o.ct = read_date(blob, blob.l-8);\n\t\tvar mtime/*:number*/ = blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2) + blob.read_shift(2);\n\t\tif(mtime !== 0) o.mt = read_date(blob, blob.l-8);\n\t\to.start = blob.read_shift(4, 'i');\n\t\to.size = blob.read_shift(4, 'i');\n\t\tif(o.size < 0 && o.start < 0) { o.size = o.type = 0; o.start = ENDOFCHAIN; o.name = \"\"; }\n\t\tif(o.type === 5) { /* root */\n\t\t\tminifat_store = o.start;\n\t\t\tif(nmfs > 0 && minifat_store !== ENDOFCHAIN) sector_list[minifat_store].name = \"!StreamData\";\n\t\t\t/*minifat_size = o.size;*/\n\t\t} else if(o.size >= 4096 /* MSCSZ */) {\n\t\t\to.storage = 'fat';\n\t\t\tif(sector_list[o.start] === undefined) sector_list[o.start] = get_sector_list(sectors, o.start, sector_list.fat_addrs, sector_list.ssz);\n\t\t\tsector_list[o.start].name = o.name;\n\t\t\to.content = (sector_list[o.start].data.slice(0,o.size)/*:any*/);\n\t\t} else {\n\t\t\to.storage = 'minifat';\n\t\t\tif(o.size < 0) o.size = 0;\n\t\t\telse if(minifat_store !== ENDOFCHAIN && o.start !== ENDOFCHAIN && sector_list[minifat_store]) {\n\t\t\t\to.content = get_mfat_entry(o, sector_list[minifat_store].data, (sector_list[mini]||{}).data);\n\t\t\t}\n\t\t}\n\t\tif(o.content) prep_blob(o.content, 0);\n\t\tfiles[name] = o;\n\t\tFileIndex.push(o);\n\t}\n}\n\nfunction read_date(blob/*:RawBytes|CFBlob*/, offset/*:number*/)/*:Date*/ {\n\treturn new Date(( ( (__readUInt32LE(blob,offset+4)/1e7)*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7 ) - 11644473600)*1000);\n}\n\nfunction read_file(filename/*:string*/, options/*:CFBReadOpts*/) {\n\tget_fs();\n\treturn parse(fs.readFileSync(filename), options);\n}\n\nfunction read(blob/*:RawBytes|string*/, options/*:CFBReadOpts*/) {\n\tswitch(options && options.type || \"base64\") {\n\t\tcase \"file\": /*:: if(typeof blob !== 'string') throw \"Must pass a filename when type='file'\"; */return read_file(blob, options);\n\t\tcase \"base64\": /*:: if(typeof blob !== 'string') throw \"Must pass a base64-encoded binary string when type='file'\"; */return parse(s2a(Base64.decode(blob)), options);\n\t\tcase \"binary\": /*:: if(typeof blob !== 'string') throw \"Must pass a binary string when type='file'\"; */return parse(s2a(blob), options);\n\t}\n\treturn parse(/*::typeof blob == 'string' ? new Buffer(blob, 'utf-8') : */blob, options);\n}\n\nfunction init_cfb(cfb/*:CFBContainer*/, opts/*:?any*/)/*:void*/ {\n\tvar o = opts || {}, root = o.root || \"Root Entry\";\n\tif(!cfb.FullPaths) cfb.FullPaths = [];\n\tif(!cfb.FileIndex) cfb.FileIndex = [];\n\tif(cfb.FullPaths.length !== cfb.FileIndex.length) throw new Error(\"inconsistent CFB structure\");\n\tif(cfb.FullPaths.length === 0) {\n\t\tcfb.FullPaths[0] = root + \"/\";\n\t\tcfb.FileIndex[0] = ({ name: root, type: 5 }/*:any*/);\n\t}\n\tif(o.CLSID) cfb.FileIndex[0].clsid = o.CLSID;\n\tseed_cfb(cfb);\n}\nfunction seed_cfb(cfb/*:CFBContainer*/)/*:void*/ {\n\tvar nm = \"\\u0001Sh33tJ5\";\n\tif(CFB.find(cfb, \"/\" + nm)) return;\n\tvar p = new_buf(4); p[0] = 55; p[1] = p[3] = 50; p[2] = 54;\n\tcfb.FileIndex.push(({ name: nm, type: 2, content:p, size:4, L:69, R:69, C:69 }/*:any*/));\n\tcfb.FullPaths.push(cfb.FullPaths[0] + nm);\n\trebuild_cfb(cfb);\n}\nfunction rebuild_cfb(cfb/*:CFBContainer*/, f/*:?boolean*/)/*:void*/ {\n\tinit_cfb(cfb);\n\tvar gc = false, s = false;\n\tfor(var i = cfb.FullPaths.length - 1; i >= 0; --i) {\n\t\tvar _file = cfb.FileIndex[i];\n\t\tswitch(_file.type) {\n\t\t\tcase 0:\n\t\t\t\tif(s) gc = true;\n\t\t\t\telse { cfb.FileIndex.pop(); cfb.FullPaths.pop(); }\n\t\t\t\tbreak;\n\t\t\tcase 1: case 2: case 5:\n\t\t\t\ts = true;\n\t\t\t\tif(isNaN(_file.R * _file.L * _file.C)) gc = true;\n\t\t\t\tif(_file.R > -1 && _file.L > -1 && _file.R == _file.L) gc = true;\n\t\t\t\tbreak;\n\t\t\tdefault: gc = true; break;\n\t\t}\n\t}\n\tif(!gc && !f) return;\n\n\tvar now = new Date(1987, 1, 19), j = 0;\n\tvar data/*:Array<[string, CFBEntry]>*/ = [];\n\tfor(i = 0; i < cfb.FullPaths.length; ++i) {\n\t\tif(cfb.FileIndex[i].type === 0) continue;\n\t\tdata.push([cfb.FullPaths[i], cfb.FileIndex[i]]);\n\t}\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar dad = dirname(data[i][0]);\n\t\ts = false;\n\t\tfor(j = 0; j < data.length; ++j) if(data[j][0] === dad) s = true;\n\t\tif(!s) data.push([dad, ({\n\t\t\tname: filename(dad).replace(\"/\",\"\"),\n\t\t\ttype: 1,\n\t\t\tclsid: HEADER_CLSID,\n\t\t\tct: now, mt: now,\n\t\t\tcontent: null\n\t\t}/*:any*/)]);\n\t}\n\n\tdata.sort(function(x,y) { return namecmp(x[0], y[0]); });\n\tcfb.FullPaths = []; cfb.FileIndex = [];\n\tfor(i = 0; i < data.length; ++i) { cfb.FullPaths[i] = data[i][0]; cfb.FileIndex[i] = data[i][1]; }\n\tfor(i = 0; i < data.length; ++i) {\n\t\tvar elt = cfb.FileIndex[i];\n\t\tvar nm = cfb.FullPaths[i];\n\n\t\telt.name = filename(nm).replace(\"/\",\"\");\n\t\telt.L = elt.R = elt.C = -(elt.color = 1);\n\t\telt.size = elt.content ? elt.content.length : 0;\n\t\telt.start = 0;\n\t\telt.clsid = (elt.clsid || HEADER_CLSID);\n\t\tif(i === 0) {\n\t\t\telt.C = data.length > 1 ? 1 : -1;\n\t\t\telt.size = 0;\n\t\t\telt.type = 5;\n\t\t} else if(nm.slice(-1) == \"/\") {\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==nm) break;\n\t\t\telt.C = j >= data.length ? -1 : j;\n\t\t\tfor(j=i+1;j < data.length; ++j) if(dirname(cfb.FullPaths[j])==dirname(nm)) break;\n\t\t\telt.R = j >= data.length ? -1 : j;\n\t\t\telt.type = 1;\n\t\t} else {\n\t\t\tif(dirname(cfb.FullPaths[i+1]||\"\") == dirname(nm)) elt.R = i + 1;\n\t\t\telt.type = 2;\n\t\t}\n\t}\n\n}\n\nfunction _write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\trebuild_cfb(cfb);\n\tif(_opts.fileType == 'zip') return write_zip(cfb, _opts);\n\tvar L = (function(cfb/*:CFBContainer*/)/*:Array*/{\n\t\tvar mini_size = 0, fat_size = 0;\n\t\tfor(var i = 0; i < cfb.FileIndex.length; ++i) {\n\t\t\tvar file = cfb.FileIndex[i];\n\t\t\tif(!file.content) continue;\n\t\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\t\tvar flen = file.content.length;\n\t\t\tif(flen > 0){\n\t\t\t\tif(flen < 0x1000) mini_size += (flen + 0x3F) >> 6;\n\t\t\t\telse fat_size += (flen + 0x01FF) >> 9;\n\t\t\t}\n\t\t}\n\t\tvar dir_cnt = (cfb.FullPaths.length +3) >> 2;\n\t\tvar mini_cnt = (mini_size + 7) >> 3;\n\t\tvar mfat_cnt = (mini_size + 0x7F) >> 7;\n\t\tvar fat_base = mini_cnt + fat_size + dir_cnt + mfat_cnt;\n\t\tvar fat_cnt = (fat_base + 0x7F) >> 7;\n\t\tvar difat_cnt = fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\twhile(((fat_base + fat_cnt + difat_cnt + 0x7F) >> 7) > fat_cnt) difat_cnt = ++fat_cnt <= 109 ? 0 : Math.ceil((fat_cnt-109)/0x7F);\n\t\tvar L = [1, difat_cnt, fat_cnt, mfat_cnt, dir_cnt, fat_size, mini_size, 0];\n\t\tcfb.FileIndex[0].size = mini_size << 6;\n\t\tL[7] = (cfb.FileIndex[0].start=L[0]+L[1]+L[2]+L[3]+L[4]+L[5])+((L[6]+7) >> 3);\n\t\treturn L;\n\t})(cfb);\n\tvar o = new_buf(L[7] << 9);\n\tvar i = 0, T = 0;\n\t{\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(1, HEADER_SIG[i]);\n\t\tfor(i = 0; i < 8; ++i) o.write_shift(2, 0);\n\t\to.write_shift(2, 0x003E);\n\t\to.write_shift(2, 0x0003);\n\t\to.write_shift(2, 0xFFFE);\n\t\to.write_shift(2, 0x0009);\n\t\to.write_shift(2, 0x0006);\n\t\tfor(i = 0; i < 3; ++i) o.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, L[2]);\n\t\to.write_shift(4, L[0] + L[1] + L[2] + L[3] - 1);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, 1<<12);\n\t\to.write_shift(4, L[3] ? L[0] + L[1] + L[2] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[3]);\n\t\to.write_shift(-4, L[1] ? L[0] - 1: ENDOFCHAIN);\n\t\to.write_shift(4, L[1]);\n\t\tfor(i = 0; i < 109; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t}\n\tif(L[1]) {\n\t\tfor(T = 0; T < L[1]; ++T) {\n\t\t\tfor(; i < 236 + T * 127; ++i) o.write_shift(-4, i < L[2] ? L[1] + i : -1);\n\t\t\to.write_shift(-4, T === L[1] - 1 ? ENDOFCHAIN : T + 1);\n\t\t}\n\t}\n\tvar chainit = function(w/*:number*/)/*:void*/ {\n\t\tfor(T += w; i> 9);\n\t}\n\tchainit((L[6] + 7) >> 3);\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tT = i = 0;\n\tfor(j = 0; j < cfb.FileIndex.length; ++j) {\n\t\tfile = cfb.FileIndex[j];\n\t\tif(!file.content) continue;\n\t\t/*:: if(file.content == null) throw new Error(\"unreachable\"); */\n\t\tflen = file.content.length;\n\t\tif(!flen || flen >= 0x1000) continue;\n\t\tfile.start = T;\n\t\tchainit((flen + 0x3F) >> 6);\n\t}\n\twhile(o.l & 0x1FF) o.write_shift(-4, consts.ENDOFCHAIN);\n\tfor(i = 0; i < L[4]<<2; ++i) {\n\t\tvar nm = cfb.FullPaths[i];\n\t\tif(!nm || nm.length === 0) {\n\t\t\tfor(j = 0; j < 17; ++j) o.write_shift(4, 0);\n\t\t\tfor(j = 0; j < 3; ++j) o.write_shift(4, -1);\n\t\t\tfor(j = 0; j < 12; ++j) o.write_shift(4, 0);\n\t\t\tcontinue;\n\t\t}\n\t\tfile = cfb.FileIndex[i];\n\t\tif(i === 0) file.start = file.size ? file.start - 1 : ENDOFCHAIN;\n\t\tvar _nm/*:string*/ = (i === 0 && _opts.root) || file.name;\n\t\tflen = 2*(_nm.length+1);\n\t\to.write_shift(64, _nm, \"utf16le\");\n\t\to.write_shift(2, flen);\n\t\to.write_shift(1, file.type);\n\t\to.write_shift(1, file.color);\n\t\to.write_shift(-4, file.L);\n\t\to.write_shift(-4, file.R);\n\t\to.write_shift(-4, file.C);\n\t\tif(!file.clsid) for(j = 0; j < 4; ++j) o.write_shift(4, 0);\n\t\telse o.write_shift(16, file.clsid, \"hex\");\n\t\to.write_shift(4, file.state || 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, 0); o.write_shift(4, 0);\n\t\to.write_shift(4, file.start);\n\t\to.write_shift(4, file.size); o.write_shift(4, 0);\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size >= 0x1000) {\n\t\t\to.l = (file.start+1) << 9;\n\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\tfor(; j & 0x1FF; ++j) o.write_shift(1, 0);\n\t\t}\n\t}\n\tfor(i = 1; i < cfb.FileIndex.length; ++i) {\n\t\tfile = cfb.FileIndex[i];\n\t\t/*:: if(!file.content) throw new Error(\"unreachable\"); */\n\t\tif(file.size > 0 && file.size < 0x1000) {\n\t\t\tfor(j = 0; j < file.size; ++j) o.write_shift(1, file.content[j]);\n\t\t\tfor(; j & 0x3F; ++j) o.write_shift(1, 0);\n\t\t}\n\t}\n\twhile(o.l < o.length) o.write_shift(1, 0);\n\treturn o;\n}\n/* [MS-CFB] 2.6.4 (Unicode 3.0.1 case conversion) */\nfunction find(cfb/*:CFBContainer*/, path/*:string*/)/*:?CFBEntry*/ {\n\tvar UCFullPaths/*:Array*/ = cfb.FullPaths.map(function(x) { return x.toUpperCase(); });\n\tvar UCPaths/*:Array*/ = UCFullPaths.map(function(x) { var y = x.split(\"/\"); return y[y.length - (x.slice(-1) == \"/\" ? 2 : 1)]; });\n\tvar k/*:boolean*/ = false;\n\tif(path.charCodeAt(0) === 47 /* \"/\" */) { k = true; path = UCFullPaths[0].slice(0, -1) + path; }\n\telse k = path.indexOf(\"/\") !== -1;\n\tvar UCPath/*:string*/ = path.toUpperCase();\n\tvar w/*:number*/ = k === true ? UCFullPaths.indexOf(UCPath) : UCPaths.indexOf(UCPath);\n\tif(w !== -1) return cfb.FileIndex[w];\n\n\tvar m = !UCPath.match(chr1);\n\tUCPath = UCPath.replace(chr0,'');\n\tif(m) UCPath = UCPath.replace(chr1,'!');\n\tfor(w = 0; w < UCFullPaths.length; ++w) {\n\t\tif((m ? UCFullPaths[w].replace(chr1,'!') : UCFullPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t\tif((m ? UCPaths[w].replace(chr1,'!') : UCPaths[w]).replace(chr0,'') == UCPath) return cfb.FileIndex[w];\n\t}\n\treturn null;\n}\n/** CFB Constants */\nvar MSSZ = 64; /* Mini Sector Size = 1<<6 */\n//var MSCSZ = 4096; /* Mini Stream Cutoff Size */\n/* 2.1 Compound File Sector Numbers and Types */\nvar ENDOFCHAIN = -2;\n/* 2.2 Compound File Header */\nvar HEADER_SIGNATURE = 'd0cf11e0a1b11ae1';\nvar HEADER_SIG = [0xD0, 0xCF, 0x11, 0xE0, 0xA1, 0xB1, 0x1A, 0xE1];\nvar HEADER_CLSID = '00000000000000000000000000000000';\nvar consts = {\n\t/* 2.1 Compund File Sector Numbers and Types */\n\tMAXREGSECT: -6,\n\tDIFSECT: -4,\n\tFATSECT: -3,\n\tENDOFCHAIN: ENDOFCHAIN,\n\tFREESECT: -1,\n\t/* 2.2 Compound File Header */\n\tHEADER_SIGNATURE: HEADER_SIGNATURE,\n\tHEADER_MINOR_VERSION: '3e00',\n\tMAXREGSID: -6,\n\tNOSTREAM: -1,\n\tHEADER_CLSID: HEADER_CLSID,\n\t/* 2.6.1 Compound File Directory Entry */\n\tEntryTypes: ['unknown','storage','stream','lockbytes','property','root']\n};\n\nfunction write_file(cfb/*:CFBContainer*/, filename/*:string*/, options/*:CFBWriteOpts*/)/*:void*/ {\n\tget_fs();\n\tvar o = _write(cfb, options);\n\t/*:: if(typeof Buffer == 'undefined' || !Buffer.isBuffer(o) || !(o instanceof Buffer)) throw new Error(\"unreachable\"); */\n\tfs.writeFileSync(filename, o);\n}\n\nfunction a2s(o/*:RawBytes*/)/*:string*/ {\n\tvar out = new Array(o.length);\n\tfor(var i = 0; i < o.length; ++i) out[i] = String.fromCharCode(o[i]);\n\treturn out.join(\"\");\n}\n\nfunction write(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes|string*/ {\n\tvar o = _write(cfb, options);\n\tswitch(options && options.type) {\n\t\tcase \"file\": get_fs(); fs.writeFileSync(options.filename, (o/*:any*/)); return o;\n\t\tcase \"binary\": return a2s(o);\n\t\tcase \"base64\": return Base64.encode(a2s(o));\n\t}\n\treturn o;\n}\n/* node < 8.1 zlib does not expose bytesRead, so default to pure JS */\nvar _zlib;\nfunction use_zlib(zlib) { try {\n\tvar InflateRaw = zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tInflRaw._processChunk(new Uint8Array([3, 0]), InflRaw._finishFlushFlag);\n\tif(InflRaw.bytesRead) _zlib = zlib;\n\telse throw new Error(\"zlib does not expose bytesRead\");\n} catch(e) {console.error(\"cannot use native zlib: \" + (e.message || e)); } }\n\nfunction _inflateRawSync(payload, usz) {\n\tif(!_zlib) return _inflate(payload, usz);\n\tvar InflateRaw = _zlib.InflateRaw;\n\tvar InflRaw = new InflateRaw();\n\tvar out = InflRaw._processChunk(payload.slice(payload.l), InflRaw._finishFlushFlag);\n\tpayload.l += InflRaw.bytesRead;\n\treturn out;\n}\n\nfunction _deflateRawSync(payload) {\n\treturn _zlib ? _zlib.deflateRawSync(payload) : _deflate(payload);\n}\nvar CLEN_ORDER = [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ];\n\n/* LEN_ID = [ 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285 ]; */\nvar LEN_LN = [ 3, 4, 5, 6, 7, 8, 9, 10, 11, 13 , 15, 17, 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258 ];\n\n/* DST_ID = [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29 ]; */\nvar DST_LN = [ 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, 8193, 12289, 16385, 24577 ];\n\nfunction bit_swap_8(n) { var t = (((((n<<1)|(n<<11)) & 0x22110) | (((n<<5)|(n<<15)) & 0x88440))); return ((t>>16) | (t>>8) |t)&0xFF; }\n\nvar use_typed_arrays = typeof Uint8Array !== 'undefined';\n\nvar bitswap8 = use_typed_arrays ? new Uint8Array(1<<8) : [];\nfor(var q = 0; q < (1<<8); ++q) bitswap8[q] = bit_swap_8(q);\n\nfunction bit_swap_n(n, b) {\n\tvar rev = bitswap8[n & 0xFF];\n\tif(b <= 8) return rev >>> (8-b);\n\trev = (rev << 8) | bitswap8[(n>>8)&0xFF];\n\tif(b <= 16) return rev >>> (16-b);\n\trev = (rev << 8) | bitswap8[(n>>16)&0xFF];\n\treturn rev >>> (24-b);\n}\n\n/* helpers for unaligned bit reads */\nfunction read_bits_2(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 6 ? 0 : buf[h+1]<<8))>>>w)& 0x03; }\nfunction read_bits_3(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 5 ? 0 : buf[h+1]<<8))>>>w)& 0x07; }\nfunction read_bits_4(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 4 ? 0 : buf[h+1]<<8))>>>w)& 0x0F; }\nfunction read_bits_5(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 3 ? 0 : buf[h+1]<<8))>>>w)& 0x1F; }\nfunction read_bits_7(buf, bl) { var w = (bl&7), h = (bl>>>3); return ((buf[h]|(w <= 1 ? 0 : buf[h+1]<<8))>>>w)& 0x7F; }\n\n/* works up to n = 3 * 8 + 1 = 25 */\nfunction read_bits_n(buf, bl, n) {\n\tvar w = (bl&7), h = (bl>>>3), f = ((1<>> w;\n\tif(n < 8 - w) return v & f;\n\tv |= buf[h+1]<<(8-w);\n\tif(n < 16 - w) return v & f;\n\tv |= buf[h+2]<<(16-w);\n\tif(n < 24 - w) return v & f;\n\tv |= buf[h+3]<<(24-w);\n\treturn v & f;\n}\n\n/* until ArrayBuffer#realloc is a thing, fake a realloc */\nfunction realloc(b, sz/*:number*/) {\n\tvar L = b.length, M = 2*L > sz ? 2*L : sz + 5, i = 0;\n\tif(L >= sz) return b;\n\tif(has_buf) {\n\t\tvar o = new_unsafe_buf(M);\n\t\t// $FlowIgnore\n\t\tif(b.copy) b.copy(o);\n\t\telse for(; i < b.length; ++i) o[i] = b[i];\n\t\treturn o;\n\t} else if(use_typed_arrays) {\n\t\tvar a = new Uint8Array(M);\n\t\tif(a.set) a.set(b);\n\t\telse for(; i < b.length; ++i) a[i] = b[i];\n\t\treturn a;\n\t}\n\tb.length = M;\n\treturn b;\n}\n\n/* zero-filled arrays for older browsers */\nfunction zero_fill_array(n) {\n\tvar o = new Array(n);\n\tfor(var i = 0; i < n; ++i) o[i] = 0;\n\treturn o;\n}var _deflate = (function() {\nvar _deflateRaw = (function() {\n\treturn function deflateRaw(data, out) {\n\t\tvar boff = 0;\n\t\twhile(boff < data.length) {\n\t\t\tvar L = Math.min(0xFFFF, data.length - boff);\n\t\t\tvar h = boff + L == data.length;\n\t\t\t/* TODO: this is only type 0 stored */\n\t\t\tout.write_shift(1, +h);\n\t\t\tout.write_shift(2, L);\n\t\t\tout.write_shift(2, (~L) & 0xFFFF);\n\t\t\twhile(L-- > 0) out[out.l++] = data[boff++];\n\t\t}\n\t\treturn out.l;\n\t};\n})();\n\nreturn function(data) {\n\tvar buf = new_buf(50+Math.floor(data.length*1.1));\n\tvar off = _deflateRaw(data, buf);\n\treturn buf.slice(0, off);\n};\n})();\n/* modified inflate function also moves original read head */\n\n/* build tree (used for literals and lengths) */\nfunction build_tree(clens, cmap, MAX/*:number*/)/*:number*/ {\n\tvar maxlen = 1, w = 0, i = 0, j = 0, ccode = 0, L = clens.length;\n\n\tvar bl_count = use_typed_arrays ? new Uint16Array(32) : zero_fill_array(32);\n\tfor(i = 0; i < 32; ++i) bl_count[i] = 0;\n\n\tfor(i = L; i < MAX; ++i) clens[i] = 0;\n\tL = clens.length;\n\n\tvar ctree = use_typed_arrays ? new Uint16Array(L) : zero_fill_array(L); // []\n\n\t/* build code tree */\n\tfor(i = 0; i < L; ++i) {\n\t\tbl_count[(w = clens[i])]++;\n\t\tif(maxlen < w) maxlen = w;\n\t\tctree[i] = 0;\n\t}\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) bl_count[i+16] = (ccode = (ccode + bl_count[i-1])<<1);\n\tfor(i = 0; i < L; ++i) {\n\t\tccode = clens[i];\n\t\tif(ccode != 0) ctree[i] = bl_count[ccode+16]++;\n\t}\n\n\t/* cmap[maxlen + 4 bits] = (off&15) + (lit<<4) reverse mapping */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bit_swap_n(ctree[i], maxlen)>>(maxlen-cleni);\n\t\t\tfor(j = (1<<(maxlen + 4 - cleni)) - 1; j>=0; --j)\n\t\t\t\tcmap[ccode|(j<*/ = [];\n\tvar i = 0;\n\tfor(;i<32; i++) dlens.push(5);\n\tbuild_tree(dlens, fix_dmap, 32);\n\n\tvar clens/*:Array*/ = [];\n\ti = 0;\n\tfor(; i<=143; i++) clens.push(8);\n\tfor(; i<=255; i++) clens.push(9);\n\tfor(; i<=279; i++) clens.push(7);\n\tfor(; i<=287; i++) clens.push(8);\n\tbuild_tree(clens, fix_lmap, 288);\n})();\n\nvar dyn_lmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_dmap = use_typed_arrays ? new Uint16Array(32768) : zero_fill_array(32768);\nvar dyn_cmap = use_typed_arrays ? new Uint16Array(128) : zero_fill_array(128);\nvar dyn_len_1 = 1, dyn_len_2 = 1;\n\n/* 5.5.3 Expanding Huffman Codes */\nfunction dyn(data, boff/*:number*/) {\n\t/* nomenclature from RFC1951 refers to bit values; these are offset by the implicit constant */\n\tvar _HLIT = read_bits_5(data, boff) + 257; boff += 5;\n\tvar _HDIST = read_bits_5(data, boff) + 1; boff += 5;\n\tvar _HCLEN = read_bits_4(data, boff) + 4; boff += 4;\n\tvar w = 0;\n\n\t/* grab and store code lengths */\n\tvar clens = use_typed_arrays ? new Uint8Array(19) : zero_fill_array(19);\n\tvar ctree = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 ];\n\tvar maxlen = 1;\n\tvar bl_count = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar next_code = use_typed_arrays ? new Uint8Array(8) : zero_fill_array(8);\n\tvar L = clens.length; /* 19 */\n\tfor(var i = 0; i < _HCLEN; ++i) {\n\t\tclens[CLEN_ORDER[i]] = w = read_bits_3(data, boff);\n\t\tif(maxlen < w) maxlen = w;\n\t\tbl_count[w]++;\n\t\tboff += 3;\n\t}\n\n\t/* build code tree */\n\tvar ccode = 0;\n\tbl_count[0] = 0;\n\tfor(i = 1; i <= maxlen; ++i) next_code[i] = ccode = (ccode + bl_count[i-1])<<1;\n\tfor(i = 0; i < L; ++i) if((ccode = clens[i]) != 0) ctree[i] = next_code[ccode]++;\n\t/* cmap[7 bits from stream] = (off&7) + (lit<<3) */\n\tvar cleni = 0;\n\tfor(i = 0; i < L; ++i) {\n\t\tcleni = clens[i];\n\t\tif(cleni != 0) {\n\t\t\tccode = bitswap8[ctree[i]]>>(8-cleni);\n\t\t\tfor(var j = (1<<(7-cleni))-1; j>=0; --j) dyn_cmap[ccode|(j<*/ = [];\n\tmaxlen = 1;\n\tfor(; hcodes.length < _HLIT + _HDIST;) {\n\t\tccode = dyn_cmap[read_bits_7(data, boff)];\n\t\tboff += ccode & 7;\n\t\tswitch((ccode >>>= 3)) {\n\t\t\tcase 16:\n\t\t\t\tw = 3 + read_bits_2(data, boff); boff += 2;\n\t\t\t\tccode = hcodes[hcodes.length - 1];\n\t\t\t\twhile(w-- > 0) hcodes.push(ccode);\n\t\t\t\tbreak;\n\t\t\tcase 17:\n\t\t\t\tw = 3 + read_bits_3(data, boff); boff += 3;\n\t\t\t\twhile(w-- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tcase 18:\n\t\t\t\tw = 11 + read_bits_7(data, boff); boff += 7;\n\t\t\t\twhile(w -- > 0) hcodes.push(0);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\thcodes.push(ccode);\n\t\t\t\tif(maxlen < ccode) maxlen = ccode;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\n\t/* build literal / length trees */\n\tvar h1 = hcodes.slice(0, _HLIT), h2 = hcodes.slice(_HLIT);\n\tfor(i = _HLIT; i < 286; ++i) h1[i] = 0;\n\tfor(i = _HDIST; i < 30; ++i) h2[i] = 0;\n\tdyn_len_1 = build_tree(h1, dyn_lmap, 286);\n\tdyn_len_2 = build_tree(h2, dyn_dmap, 30);\n\treturn boff;\n}\n\n/* return [ data, bytesRead ] */\nfunction inflate(data, usz/*:number*/) {\n\t/* shortcircuit for empty buffer [0x03, 0x00] */\n\tif(data[0] == 3 && !(data[1] & 0x3)) { return [new_raw_buf(usz), 2]; }\n\n\t/* bit offset */\n\tvar boff = 0;\n\n\t/* header includes final bit and type bits */\n\tvar header = 0;\n\n\tvar outbuf = new_unsafe_buf(usz ? usz : (1<<18));\n\tvar woff = 0;\n\tvar OL = outbuf.length>>>0;\n\tvar max_len_1 = 0, max_len_2 = 0;\n\n\twhile((header&1) == 0) {\n\t\theader = read_bits_3(data, boff); boff += 3;\n\t\tif((header >>> 1) == 0) {\n\t\t\t/* Stored block */\n\t\t\tif(boff & 7) boff += 8 - (boff&7);\n\t\t\t/* 2 bytes sz, 2 bytes bit inverse */\n\t\t\tvar sz = data[boff>>>3] | data[(boff>>>3)+1]<<8;\n\t\t\tboff += 32;\n\t\t\t/* push sz bytes */\n\t\t\tif(!usz && OL < woff + sz) { outbuf = realloc(outbuf, woff + sz); OL = outbuf.length; }\n\t\t\tif(typeof data.copy === 'function') {\n\t\t\t\t// $FlowIgnore\n\t\t\t\tdata.copy(outbuf, woff, boff>>>3, (boff>>>3)+sz);\n\t\t\t\twoff += sz; boff += 8*sz;\n\t\t\t} else while(sz-- > 0) { outbuf[woff++] = data[boff>>>3]; boff += 8; }\n\t\t\tcontinue;\n\t\t} else if((header >>> 1) == 1) {\n\t\t\t/* Fixed Huffman */\n\t\t\tmax_len_1 = 9; max_len_2 = 5;\n\t\t} else {\n\t\t\t/* Dynamic Huffman */\n\t\t\tboff = dyn(data, boff);\n\t\t\tmax_len_1 = dyn_len_1; max_len_2 = dyn_len_2;\n\t\t}\n\t\tif(!usz && (OL < woff + 32767)) { outbuf = realloc(outbuf, woff + 32767); OL = outbuf.length; }\n\t\tfor(;;) { // while(true) is apparently out of vogue in modern JS circles\n\t\t\t/* ingest code and move read head */\n\t\t\tvar bits = read_bits_n(data, boff, max_len_1);\n\t\t\tvar code = (header>>>1) == 1 ? fix_lmap[bits] : dyn_lmap[bits];\n\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t/* 0-255 are literals, 256 is end of block token, 257+ are copy tokens */\n\t\t\tif(((code>>>8)&0xFF) === 0) outbuf[woff++] = code;\n\t\t\telse if(code == 256) break;\n\t\t\telse {\n\t\t\t\tcode -= 257;\n\t\t\t\tvar len_eb = (code < 8) ? 0 : ((code-4)>>2); if(len_eb > 5) len_eb = 0;\n\t\t\t\tvar tgt = woff + LEN_LN[code];\n\t\t\t\t/* length extra bits */\n\t\t\t\tif(len_eb > 0) {\n\t\t\t\t\ttgt += read_bits_n(data, boff, len_eb);\n\t\t\t\t\tboff += len_eb;\n\t\t\t\t}\n\n\t\t\t\t/* dist code */\n\t\t\t\tbits = read_bits_n(data, boff, max_len_2);\n\t\t\t\tcode = (header>>>1) == 1 ? fix_dmap[bits] : dyn_dmap[bits];\n\t\t\t\tboff += code & 15; code >>>= 4;\n\t\t\t\tvar dst_eb = (code < 4 ? 0 : (code-2)>>1);\n\t\t\t\tvar dst = DST_LN[code];\n\t\t\t\t/* dist extra bits */\n\t\t\t\tif(dst_eb > 0) {\n\t\t\t\t\tdst += read_bits_n(data, boff, dst_eb);\n\t\t\t\t\tboff += dst_eb;\n\t\t\t\t}\n\n\t\t\t\t/* in the common case, manual byte copy is faster than TA set / Buffer copy */\n\t\t\t\tif(!usz && OL < tgt) { outbuf = realloc(outbuf, tgt); OL = outbuf.length; }\n\t\t\t\twhile(woff < tgt) { outbuf[woff] = outbuf[woff - dst]; ++woff; }\n\t\t\t}\n\t\t}\n\t}\n\treturn [usz ? outbuf : outbuf.slice(0, woff), (boff+7)>>>3];\n}\n\nfunction _inflate(payload, usz) {\n\tvar data = payload.slice(payload.l||0);\n\tvar out = inflate(data, usz);\n\tpayload.l += out[1];\n\treturn out[0];\n}\n\nfunction warn_or_throw(wrn, msg) {\n\tif(wrn) { if(typeof console !== 'undefined') console.error(msg); }\n\telse throw new Error(msg);\n}\n\nfunction parse_zip(file/*:RawBytes*/, options/*:CFBReadOpts*/)/*:CFBContainer*/ {\n\tvar blob/*:CFBlob*/ = /*::(*/file/*:: :any)*/;\n\tprep_blob(blob, 0);\n\n\tvar FileIndex/*:CFBFileIndex*/ = [], FullPaths/*:Array*/ = [];\n\tvar o = {\n\t\tFileIndex: FileIndex,\n\t\tFullPaths: FullPaths\n\t};\n\tinit_cfb(o, { root: options.root });\n\n\t/* find end of central directory, start just after signature */\n\tvar i = blob.length - 4;\n\twhile((blob[i] != 0x50 || blob[i+1] != 0x4b || blob[i+2] != 0x05 || blob[i+3] != 0x06) && i >= 0) --i;\n\tblob.l = i + 4;\n\n\t/* parse end of central directory */\n\tblob.l += 4;\n\tvar fcnt = blob.read_shift(2);\n\tblob.l += 6;\n\tvar start_cd = blob.read_shift(4);\n\n\t/* parse central directory */\n\tblob.l = start_cd;\n\n\tfor(i = 0; i < fcnt; ++i) {\n\t\t/* trust local file header instead of CD entry */\n\t\tblob.l += 20;\n\t\tvar csz = blob.read_shift(4);\n\t\tvar usz = blob.read_shift(4);\n\t\tvar namelen = blob.read_shift(2);\n\t\tvar efsz = blob.read_shift(2);\n\t\tvar fcsz = blob.read_shift(2);\n\t\tblob.l += 8;\n\t\tvar offset = blob.read_shift(4);\n\t\tvar EF = parse_extra_field(/*::(*/blob.slice(blob.l+namelen, blob.l+namelen+efsz)/*:: :any)*/);\n\t\tblob.l += namelen + efsz + fcsz;\n\n\t\tvar L = blob.l;\n\t\tblob.l = offset + 4;\n\t\tparse_local_file(blob, csz, usz, o, EF);\n\t\tblob.l = L;\n\t}\n\n\treturn o;\n}\n\n\n/* head starts just after local file header signature */\nfunction parse_local_file(blob/*:CFBlob*/, csz/*:number*/, usz/*:number*/, o/*:CFBContainer*/, EF) {\n\t/* [local file header] */\n\tblob.l += 2;\n\tvar flags = blob.read_shift(2);\n\tvar meth = blob.read_shift(2);\n\tvar date = parse_dos_date(blob);\n\n\tif(flags & 0x2041) throw new Error(\"Unsupported ZIP encryption\");\n\tvar crc32 = blob.read_shift(4);\n\tvar _csz = blob.read_shift(4);\n\tvar _usz = blob.read_shift(4);\n\n\tvar namelen = blob.read_shift(2);\n\tvar efsz = blob.read_shift(2);\n\n\t// TODO: flags & (1<<11) // UTF8\n\tvar name = \"\"; for(var i = 0; i < namelen; ++i) name += String.fromCharCode(blob[blob.l++]);\n\tif(efsz) {\n\t\tvar ef = parse_extra_field(/*::(*/blob.slice(blob.l, blob.l + efsz)/*:: :any)*/);\n\t\tif((ef[0x5455]||{}).mt) date = ef[0x5455].mt;\n\t\tif(((EF||{})[0x5455]||{}).mt) date = EF[0x5455].mt;\n\t}\n\tblob.l += efsz;\n\n\t/* [encryption header] */\n\n\t/* [file data] */\n\tvar data = blob.slice(blob.l, blob.l + _csz);\n\tswitch(meth) {\n\t\tcase 8: data = _inflateRawSync(blob, _usz); break;\n\t\tcase 0: break;\n\t\tdefault: throw new Error(\"Unsupported ZIP Compression method \" + meth);\n\t}\n\n\t/* [data descriptor] */\n\tvar wrn = false;\n\tif(flags & 8) {\n\t\tcrc32 = blob.read_shift(4);\n\t\tif(crc32 == 0x08074b50) { crc32 = blob.read_shift(4); wrn = true; }\n\t\t_csz = blob.read_shift(4);\n\t\t_usz = blob.read_shift(4);\n\t}\n\n\tif(_csz != csz) warn_or_throw(wrn, \"Bad compressed size: \" + csz + \" != \" + _csz);\n\tif(_usz != usz) warn_or_throw(wrn, \"Bad uncompressed size: \" + usz + \" != \" + _usz);\n\tvar _crc32 = CRC32.buf(data, 0);\n\tif((crc32>>0) != (_crc32>>0)) warn_or_throw(wrn, \"Bad CRC32 checksum: \" + crc32 + \" != \" + _crc32);\n\tcfb_add(o, name, data, {unsafe: true, mt: date});\n}\nfunction write_zip(cfb/*:CFBContainer*/, options/*:CFBWriteOpts*/)/*:RawBytes*/ {\n\tvar _opts = options || {};\n\tvar out = [], cdirs = [];\n\tvar o/*:CFBlob*/ = new_buf(1);\n\tvar method = (_opts.compression ? 8 : 0), flags = 0;\n\tvar desc = false;\n\tif(desc) flags |= 8;\n\tvar i = 0, j = 0;\n\n\tvar start_cd = 0, fcnt = 0;\n\tvar root = cfb.FullPaths[0], fp = root, fi = cfb.FileIndex[0];\n\tvar crcs = [];\n\tvar sz_cd = 0;\n\n\tfor(i = 1; i < cfb.FullPaths.length; ++i) {\n\t\tfp = cfb.FullPaths[i].slice(root.length); fi = cfb.FileIndex[i];\n\t\tif(!fi.size || !fi.content || fp == \"\\u0001Sh33tJ5\") continue;\n\t\tvar start = start_cd;\n\n\t\t/* TODO: CP437 filename */\n\t\tvar namebuf = new_buf(fp.length);\n\t\tfor(j = 0; j < fp.length; ++j) namebuf.write_shift(1, fp.charCodeAt(j) & 0x7F);\n\t\tnamebuf = namebuf.slice(0, namebuf.l);\n\t\tcrcs[fcnt] = CRC32.buf(/*::((*/fi.content/*::||[]):any)*/, 0);\n\n\t\tvar outbuf = fi.content/*::||[]*/;\n\t\tif(method == 8) outbuf = _deflateRawSync(outbuf);\n\n\t\t/* local file header */\n\t\to = new_buf(30);\n\t\to.write_shift(4, 0x04034b50);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\t/* TODO: last mod file time/date */\n\t\tif(fi.mt) write_dos_date(o, fi.mt);\n\t\telse o.write_shift(4, 0);\n\t\to.write_shift(-4, (flags & 8) ? 0 : crcs[fcnt]);\n\t\to.write_shift(4, (flags & 8) ? 0 : outbuf.length);\n\t\to.write_shift(4, (flags & 8) ? 0 : /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\n\t\tstart_cd += o.length;\n\t\tout.push(o);\n\t\tstart_cd += namebuf.length;\n\t\tout.push(namebuf);\n\n\t\t/* TODO: encryption header ? */\n\t\tstart_cd += outbuf.length;\n\t\tout.push(outbuf);\n\n\t\t/* data descriptor */\n\t\tif(flags & 8) {\n\t\t\to = new_buf(12);\n\t\t\to.write_shift(-4, crcs[fcnt]);\n\t\t\to.write_shift(4, outbuf.length);\n\t\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\t\tstart_cd += o.l;\n\t\t\tout.push(o);\n\t\t}\n\n\t\t/* central directory */\n\t\to = new_buf(46);\n\t\to.write_shift(4, 0x02014b50);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 20);\n\t\to.write_shift(2, flags);\n\t\to.write_shift(2, method);\n\t\to.write_shift(4, 0); /* TODO: last mod file time/date */\n\t\to.write_shift(-4, crcs[fcnt]);\n\n\t\to.write_shift(4, outbuf.length);\n\t\to.write_shift(4, /*::(*/fi.content/*::||[])*/.length);\n\t\to.write_shift(2, namebuf.length);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(4, 0);\n\t\to.write_shift(4, start);\n\n\t\tsz_cd += o.l;\n\t\tcdirs.push(o);\n\t\tsz_cd += namebuf.length;\n\t\tcdirs.push(namebuf);\n\t\t++fcnt;\n\t}\n\n\t/* end of central directory */\n\to = new_buf(22);\n\to.write_shift(4, 0x06054b50);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, fcnt);\n\to.write_shift(2, fcnt);\n\to.write_shift(4, sz_cd);\n\to.write_shift(4, start_cd);\n\to.write_shift(2, 0);\n\n\treturn bconcat(([bconcat((out/*:any*/)), bconcat(cdirs), o]/*:any*/));\n}\nfunction cfb_new(opts/*:?any*/)/*:CFBContainer*/ {\n\tvar o/*:CFBContainer*/ = ({}/*:any*/);\n\tinit_cfb(o, opts);\n\treturn o;\n}\n\nfunction cfb_add(cfb/*:CFBContainer*/, name/*:string*/, content/*:?RawBytes*/, opts/*:?any*/)/*:CFBEntry*/ {\n\tvar unsafe = opts && opts.unsafe;\n\tif(!unsafe) init_cfb(cfb);\n\tvar file = !unsafe && CFB.find(cfb, name);\n\tif(!file) {\n\t\tvar fpath/*:string*/ = cfb.FullPaths[0];\n\t\tif(name.slice(0, fpath.length) == fpath) fpath = name;\n\t\telse {\n\t\t\tif(fpath.slice(-1) != \"/\") fpath += \"/\";\n\t\t\tfpath = (fpath + name).replace(\"//\",\"/\");\n\t\t}\n\t\tfile = ({name: filename(name), type: 2}/*:any*/);\n\t\tcfb.FileIndex.push(file);\n\t\tcfb.FullPaths.push(fpath);\n\t\tif(!unsafe) CFB.utils.cfb_gc(cfb);\n\t}\n\t/*:: if(!file) throw new Error(\"unreachable\"); */\n\tfile.content = (content/*:any*/);\n\tfile.size = content ? content.length : 0;\n\tif(opts) {\n\t\tif(opts.CLSID) file.clsid = opts.CLSID;\n\t\tif(opts.mt) file.mt = opts.mt;\n\t\tif(opts.ct) file.ct = opts.ct;\n\t}\n\treturn file;\n}\n\nfunction cfb_del(cfb/*:CFBContainer*/, name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex.splice(j, 1);\n\t\tcfb.FullPaths.splice(j, 1);\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_mov(cfb/*:CFBContainer*/, old_name/*:string*/, new_name/*:string*/)/*:boolean*/ {\n\tinit_cfb(cfb);\n\tvar file = CFB.find(cfb, old_name);\n\tif(file) for(var j = 0; j < cfb.FileIndex.length; ++j) if(cfb.FileIndex[j] == file) {\n\t\tcfb.FileIndex[j].name = filename(new_name);\n\t\tcfb.FullPaths[j] = new_name;\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction cfb_gc(cfb/*:CFBContainer*/)/*:void*/ { rebuild_cfb(cfb, true); }\n\nexports.find = find;\nexports.read = read;\nexports.parse = parse;\nexports.write = write;\nexports.writeFile = write_file;\nexports.utils = {\n\tcfb_new: cfb_new,\n\tcfb_add: cfb_add,\n\tcfb_del: cfb_del,\n\tcfb_mov: cfb_mov,\n\tcfb_gc: cfb_gc,\n\tReadShift: ReadShift,\n\tCheckField: CheckField,\n\tprep_blob: prep_blob,\n\tbconcat: bconcat,\n\tuse_zlib: use_zlib,\n\t_deflateRaw: _deflate,\n\t_inflateRaw: _inflate,\n\tconsts: consts\n};\n\nreturn exports;\n})();\n\nif(typeof require !== 'undefined' && typeof module !== 'undefined' && typeof DO_NOT_EXPORT_CFB === 'undefined') { module.exports = CFB; }\nconst _fs = void 0;\n\n/* normalize data for blob ctor */\nfunction blobify(data) {\n\tif(typeof data === \"string\") return s2ab(data);\n\tif(Array.isArray(data)) return a2u(data);\n\treturn data;\n}\n/* write or download file */\nfunction write_dl(fname/*:string*/, payload/*:any*/, enc/*:?string*/) {\n\t/*global IE_SaveFile, Blob, navigator, saveAs, document, File, chrome */\n\tif(typeof _fs !== 'undefined' && _fs.writeFileSync) return enc ? _fs.writeFileSync(fname, payload, enc) : _fs.writeFileSync(fname, payload);\n\tvar data = (enc == \"utf8\") ? utf8write(payload) : payload;\n\t/*:: declare var IE_SaveFile: any; */\n\tif(typeof IE_SaveFile !== 'undefined') return IE_SaveFile(data, fname);\n\tif(typeof Blob !== 'undefined') {\n\t\tvar blob = new Blob([blobify(data)], {type:\"application/octet-stream\"});\n\t\t/*:: declare var navigator: any; */\n\t\tif(typeof navigator !== 'undefined' && navigator.msSaveBlob) return navigator.msSaveBlob(blob, fname);\n\t\t/*:: declare var saveAs: any; */\n\t\tif(typeof saveAs !== 'undefined') return saveAs(blob, fname);\n\t\tif(typeof URL !== 'undefined' && typeof document !== 'undefined' && document.createElement && URL.createObjectURL) {\n\t\t\tvar url = URL.createObjectURL(blob);\n\t\t\t/*:: declare var chrome: any; */\n\t\t\tif(typeof chrome === 'object' && typeof (chrome.downloads||{}).download == \"function\") {\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn chrome.downloads.download({ url: url, filename: fname, saveAs: true});\n\t\t\t}\n\t\t\tvar a = document.createElement(\"a\");\n\t\t\tif(a.download != null) {\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */\n\t\t\t\ta.download = fname; a.href = url; document.body.appendChild(a); a.click();\n\t\t\t\t/*:: if(document.body == null) throw new Error(\"unreachable\"); */ document.body.removeChild(a);\n\t\t\t\tif(URL.revokeObjectURL && typeof setTimeout !== 'undefined') setTimeout(function() { URL.revokeObjectURL(url); }, 60000);\n\t\t\t\treturn url;\n\t\t\t}\n\t\t}\n\t}\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar out = File(fname); out.open(\"w\"); out.encoding = \"binary\";\n\t\tif(Array.isArray(payload)) payload = a2s(payload);\n\t\tout.write(payload); out.close(); return payload;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"cannot save file \" + fname);\n}\n\n/* read binary data from file */\nfunction read_binary(path/*:string*/) {\n\tif(typeof _fs !== 'undefined') return _fs.readFileSync(path);\n\t// $FlowIgnore\n\tif(typeof $ !== 'undefined' && typeof File !== 'undefined' && typeof Folder !== 'undefined') try { // extendscript\n\t\t// $FlowIgnore\n\t\tvar infile = File(path); infile.open(\"r\"); infile.encoding = \"binary\";\n\t\tvar data = infile.read(); infile.close();\n\t\treturn data;\n\t} catch(e) { if(!e.message || !e.message.match(/onstruct/)) throw e; }\n\tthrow new Error(\"Cannot access file \" + path);\n}\nfunction keys(o/*:any*/)/*:Array*/ {\n\tvar ks = Object.keys(o), o2 = [];\n\tfor(var i = 0; i < ks.length; ++i) if(Object.prototype.hasOwnProperty.call(o, ks[i])) o2.push(ks[i]);\n\treturn o2;\n}\n\nfunction evert_key(obj/*:any*/, key/*:string*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) if(o[obj[K[i]][key]] == null) o[obj[K[i]][key]] = K[i];\n\treturn o;\n}\n\nfunction evert(obj/*:any*/)/*:EvertType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = K[i];\n\treturn o;\n}\n\nfunction evert_num(obj/*:any*/)/*:EvertNumType*/ {\n\tvar o = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) o[obj[K[i]]] = parseInt(K[i],10);\n\treturn o;\n}\n\nfunction evert_arr(obj/*:any*/)/*:EvertArrType*/ {\n\tvar o/*:EvertArrType*/ = ([]/*:any*/), K = keys(obj);\n\tfor(var i = 0; i !== K.length; ++i) {\n\t\tif(o[obj[K[i]]] == null) o[obj[K[i]]] = [];\n\t\to[obj[K[i]]].push(K[i]);\n\t}\n\treturn o;\n}\n\nvar basedate = new Date(1899, 11, 30, 0, 0, 0); // 2209161600000\nfunction datenum(v/*:Date*/, date1904/*:?boolean*/)/*:number*/ {\n\tvar epoch = v.getTime();\n\tif(date1904) epoch -= 1462*24*60*60*1000;\n\tvar dnthresh = basedate.getTime() + (v.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\n\treturn (epoch - dnthresh) / (24 * 60 * 60 * 1000);\n}\nvar refdate = new Date();\nvar dnthresh = basedate.getTime() + (refdate.getTimezoneOffset() - basedate.getTimezoneOffset()) * 60000;\nvar refoffset = refdate.getTimezoneOffset();\nfunction numdate(v/*:number*/)/*:Date*/ {\n\tvar out = new Date();\n\tout.setTime(v * 24 * 60 * 60 * 1000 + dnthresh);\n\tif (out.getTimezoneOffset() !== refoffset) {\n\t\tout.setTime(out.getTime() + (out.getTimezoneOffset() - refoffset) * 60000);\n\t}\n\treturn out;\n}\n\n/* ISO 8601 Duration */\nfunction parse_isodur(s) {\n\tvar sec = 0, mt = 0, time = false;\n\tvar m = s.match(/P([0-9\\.]+Y)?([0-9\\.]+M)?([0-9\\.]+D)?T([0-9\\.]+H)?([0-9\\.]+M)?([0-9\\.]+S)?/);\n\tif(!m) throw new Error(\"|\" + s + \"| is not an ISO8601 Duration\");\n\tfor(var i = 1; i != m.length; ++i) {\n\t\tif(!m[i]) continue;\n\t\tmt = 1;\n\t\tif(i > 3) time = true;\n\t\tswitch(m[i].slice(m[i].length-1)) {\n\t\t\tcase 'Y':\n\t\t\t\tthrow new Error(\"Unsupported ISO Duration Field: \" + m[i].slice(m[i].length-1));\n\t\t\tcase 'D': mt *= 24;\n\t\t\t\t/* falls through */\n\t\t\tcase 'H': mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'M':\n\t\t\t\tif(!time) throw new Error(\"Unsupported ISO Duration Field: M\");\n\t\t\t\telse mt *= 60;\n\t\t\t\t/* falls through */\n\t\t\tcase 'S': break;\n\t\t}\n\t\tsec += mt * parseInt(m[i], 10);\n\t}\n\treturn sec;\n}\n\nvar good_pd_date = new Date('2017-02-19T19:06:09.000Z');\nif(isNaN(good_pd_date.getFullYear())) good_pd_date = new Date('2/19/17');\nvar good_pd = good_pd_date.getFullYear() == 2017;\n/* parses a date as a local date */\nfunction parseDate(str/*:string|Date*/, fixdate/*:?number*/)/*:Date*/ {\n\tvar d = new Date(str);\n\tif(good_pd) {\n\t\t/*:: if(fixdate == null) fixdate = 0; */\n\t\tif(fixdate > 0) d.setTime(d.getTime() + d.getTimezoneOffset() * 60 * 1000);\n\t\telse if(fixdate < 0) d.setTime(d.getTime() - d.getTimezoneOffset() * 60 * 1000);\n\t\treturn d;\n\t}\n\tif(str instanceof Date) return str;\n\tif(good_pd_date.getFullYear() == 1917 && !isNaN(d.getFullYear())) {\n\t\tvar s = d.getFullYear();\n\t\tif(str.indexOf(\"\" + s) > -1) return d;\n\t\td.setFullYear(d.getFullYear() + 100); return d;\n\t}\n\tvar n = str.match(/\\d+/g)||[\"2017\",\"2\",\"19\",\"0\",\"0\",\"0\"];\n\tvar out = new Date(+n[0], +n[1] - 1, +n[2], (+n[3]||0), (+n[4]||0), (+n[5]||0));\n\tif(str.indexOf(\"Z\") > -1) out = new Date(out.getTime() - out.getTimezoneOffset() * 60 * 1000);\n\treturn out;\n}\n\nfunction cc2str(arr/*:Array*/)/*:string*/ {\n\tvar o = \"\";\n\tfor(var i = 0; i != arr.length; ++i) o += String.fromCharCode(arr[i]);\n\treturn o;\n}\n\nfunction dup(o/*:any*/)/*:any*/ {\n\tif(typeof JSON != 'undefined' && !Array.isArray(o)) return JSON.parse(JSON.stringify(o));\n\tif(typeof o != 'object' || o == null) return o;\n\tif(o instanceof Date) return new Date(o.getTime());\n\tvar out = {};\n\tfor(var k in o) if(Object.prototype.hasOwnProperty.call(o, k)) out[k] = dup(o[k]);\n\treturn out;\n}\n\nfunction fill(c/*:string*/,l/*:number*/)/*:string*/ { var o = \"\"; while(o.length < l) o+=c; return o; }\n\n/* TODO: stress test */\nfunction fuzzynum(s/*:string*/)/*:number*/ {\n\tvar v/*:number*/ = Number(s);\n\tif(isFinite(v)) return v;\n\tif(!isNaN(v)) return NaN;\n\tif(!/\\d/.test(s)) return v;\n\tvar wt = 1;\n\tvar ss = s.replace(/([\\d]),([\\d])/g,\"$1$2\").replace(/[$]/g,\"\").replace(/[%]/g, function() { wt *= 100; return \"\";});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\tss = ss.replace(/[(](.*)[)]/,function($$, $1) { wt = -wt; return $1;});\n\tif(!isNaN(v = Number(ss))) return v / wt;\n\treturn v;\n}\nfunction fuzzydate(s/*:string*/)/*:Date*/ {\n\tvar o = new Date(s), n = new Date(NaN);\n\tvar y = o.getYear(), m = o.getMonth(), d = o.getDate();\n\tif(isNaN(d)) return n;\n\tif(y < 0 || y > 8099) return n;\n\tif((m > 0 || d > 1) && y != 101) return o;\n\tif(s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/)) return o;\n\tif(s.match(/[^-0-9:,\\/\\\\]/)) return n;\n\treturn o;\n}\n\nvar safe_split_regex = \"abacaba\".split(/(:?b)/i).length == 5;\nfunction split_regex(str/*:string*/, re, def/*:string*/)/*:Array*/ {\n\tif(safe_split_regex || typeof re == \"string\") return str.split(re);\n\tvar p = str.split(re), o = [p[0]];\n\tfor(var i = 1; i < p.length; ++i) { o.push(def); o.push(p[i]); }\n\treturn o;\n}\nfunction getdatastr(data)/*:?string*/ {\n\tif(!data) return null;\n\tif(data.data) return debom(data.data);\n\tif(data.asNodeBuffer && has_buf) return debom(data.asNodeBuffer().toString('binary'));\n\tif(data.asBinary) return debom(data.asBinary());\n\tif(data._data && data._data.getContent) return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));\n\tif(data.content && data.type) return debom(cc2str(data.content));\n\treturn null;\n}\n\nfunction getdatabin(data) {\n\tif(!data) return null;\n\tif(data.data) return char_codes(data.data);\n\tif(data.asNodeBuffer && has_buf) return data.asNodeBuffer();\n\tif(data._data && data._data.getContent) {\n\t\tvar o = data._data.getContent();\n\t\tif(typeof o == \"string\") return char_codes(o);\n\t\treturn Array.prototype.slice.call(o);\n\t}\n\tif(data.content && data.type) return data.content;\n\treturn null;\n}\n\nfunction getdata(data) { return (data && data.name.slice(-4) === \".bin\") ? getdatabin(data) : getdatastr(data); }\n\n/* Part 2 Section 10.1.2 \"Mapping Content Types\" Names are case-insensitive */\n/* OASIS does not comment on filename case sensitivity */\nfunction safegetzipfile(zip, file/*:string*/) {\n\tvar k = zip.FullPaths || keys(zip.files);\n\tvar f = file.toLowerCase().replace(/[\\/]/g, '\\\\'), g = f.replace(/\\\\/g,'\\/');\n\tfor(var i=0; i\\/]+)\\s*=\\s*((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:')|([^'\">\\s]+))/g;\nvar tagregex=/<[\\/\\?]?[a-zA-Z0-9:_-]+(?:\\s+[^\"\\s?>\\/]+\\s*=\\s*(?:\"[^\"]*\"|'[^']*'|[^'\">\\s=]+))*\\s*[\\/\\?]?>/mg;\n\nif(!(XML_HEADER.match(tagregex))) tagregex = /<[^>]*>/g;\nvar nsregex=/<\\w*:/, nsregex2 = /<(\\/?)\\w+:/;\nfunction parsexmltag(tag/*:string*/, skip_root/*:?boolean*/, skip_LC/*:?boolean*/)/*:any*/ {\n\tvar z = ({}/*:any*/);\n\tvar eq = 0, c = 0;\n\tfor(; eq !== tag.length; ++eq) if((c = tag.charCodeAt(eq)) === 32 || c === 10 || c === 13) break;\n\tif(!skip_root) z[0] = tag.slice(0, eq);\n\tif(eq === tag.length) return z;\n\tvar m = tag.match(attregexg), j=0, v=\"\", i=0, q=\"\", cc=\"\", quot = 1;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\tcc = m[i];\n\t\tfor(c=0; c != cc.length; ++c) if(cc.charCodeAt(c) === 61) break;\n\t\tq = cc.slice(0,c).trim();\n\t\twhile(cc.charCodeAt(c+1) == 32) ++c;\n\t\tquot = ((eq=cc.charCodeAt(c+1)) == 34 || eq == 39) ? 1 : 0;\n\t\tv = cc.slice(c+1+quot, cc.length-quot);\n\t\tfor(j=0;j!=q.length;++j) if(q.charCodeAt(j) === 58) break;\n\t\tif(j===q.length) {\n\t\t\tif(q.indexOf(\"_\") > 0) q = q.slice(0, q.indexOf(\"_\")); // from ods\n\t\t\tz[q] = v;\n\t\t\tif(!skip_LC) z[q.toLowerCase()] = v;\n\t\t}\n\t\telse {\n\t\t\tvar k = (j===5 && q.slice(0,5)===\"xmlns\"?\"xmlns\":\"\")+q.slice(j+1);\n\t\t\tif(z[k] && q.slice(j-3,j) == \"ext\") continue; // from ods\n\t\t\tz[k] = v;\n\t\t\tif(!skip_LC) z[k.toLowerCase()] = v;\n\t\t}\n\t}\n\treturn z;\n}\nfunction strip_ns(x/*:string*/)/*:string*/ { return x.replace(nsregex2, \"<$1\"); }\n\nvar encodings = {\n\t'"': '\"',\n\t''': \"'\",\n\t'>': '>',\n\t'<': '<',\n\t'&': '&'\n};\nvar rencoding = evert(encodings);\n//var rencstr = \"&<>'\\\"\".split(\"\");\n\n// TODO: CP remap (need to read file version to determine OS)\nvar unescapexml/*:StringConv*/ = (function() {\n\t/* 22.4.2.4 bstr (Basic String) */\n\tvar encregex = /&(?:quot|apos|gt|lt|amp|#x?([\\da-fA-F]+));/ig, coderegex = /_x([\\da-fA-F]{4})_/ig;\n\treturn function unescapexml(text/*:string*/)/*:string*/ {\n\t\tvar s = text + '', i = s.indexOf(\"-1?16:10))||$$; }).replace(coderegex,function(m,c) {return String.fromCharCode(parseInt(c,16));});\n\t\tvar j = s.indexOf(\"]]>\");\n\t\treturn unescapexml(s.slice(0, i)) + s.slice(i+9,j) + unescapexml(s.slice(j+3));\n\t};\n})();\n\nvar decregex=/[&<>'\"]/g, charegex = /[\\u0000-\\u0008\\u000b-\\u001f]/g;\nfunction escapexml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(charegex,function(s) { return \"_x\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \"_\";});\n}\nfunction escapexmltag(text/*:string*/)/*:string*/{ return escapexml(text).replace(/ /g,\"_x0020_\"); }\n\nvar htmlcharegex = /[\\u0000-\\u001f]/g;\nfunction escapehtml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(/\\n/g, \"\").replace(htmlcharegex,function(s) { return \"\" + (\"000\"+s.charCodeAt(0).toString(16)).slice(-4) + \";\"; });\n}\n\nfunction escapexlml(text/*:string*/)/*:string*/{\n\tvar s = text + '';\n\treturn s.replace(decregex, function(y) { return rencoding[y]; }).replace(htmlcharegex,function(s) { return \"\" + (s.charCodeAt(0).toString(16)).toUpperCase() + \";\"; });\n}\n\n/* TODO: handle codepages */\nvar xlml_fixstr/*:StringConv*/ = (function() {\n\tvar entregex = /(\\d+);/g;\n\tfunction entrepl($$/*:string*/,$1/*:string*/)/*:string*/ { return String.fromCharCode(parseInt($1,10)); }\n\treturn function xlml_fixstr(str/*:string*/)/*:string*/ { return str.replace(entregex,entrepl); };\n})();\nvar xlml_unfixstr/*:StringConv*/ = (function() {\n\treturn function xlml_unfixstr(str/*:string*/)/*:string*/ { return str.replace(/(\\r\\n|[\\r\\n])/g,\"\\ \"); };\n})();\n\nfunction parsexmlbool(value/*:any*/)/*:boolean*/ {\n\tswitch(value) {\n\t\tcase 1: case true: case '1': case 'true': case 'TRUE': return true;\n\t\t/* case '0': case 'false': case 'FALSE':*/\n\t\tdefault: return false;\n\t}\n}\n\nvar utf8read/*:StringConv*/ = function utf8reada(orig/*:string*/)/*:string*/ {\n\tvar out = \"\", i = 0, c = 0, d = 0, e = 0, f = 0, w = 0;\n\twhile (i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tif (c < 128) { out += String.fromCharCode(c); continue; }\n\t\td = orig.charCodeAt(i++);\n\t\tif (c>191 && c<224) { f = ((c & 31) << 6); f |= (d & 63); out += String.fromCharCode(f); continue; }\n\t\te = orig.charCodeAt(i++);\n\t\tif (c < 240) { out += String.fromCharCode(((c & 15) << 12) | ((d & 63) << 6) | (e & 63)); continue; }\n\t\tf = orig.charCodeAt(i++);\n\t\tw = (((c & 7) << 18) | ((d & 63) << 12) | ((e & 63) << 6) | (f & 63))-65536;\n\t\tout += String.fromCharCode(0xD800 + ((w>>>10)&1023));\n\t\tout += String.fromCharCode(0xDC00 + (w&1023));\n\t}\n\treturn out;\n};\n\nvar utf8write/*:StringConv*/ = function(orig/*:string*/)/*:string*/ {\n\tvar out/*:Array*/ = [], i = 0, c = 0, d = 0;\n\twhile(i < orig.length) {\n\t\tc = orig.charCodeAt(i++);\n\t\tswitch(true) {\n\t\t\tcase c < 128: out.push(String.fromCharCode(c)); break;\n\t\t\tcase c < 2048:\n\t\t\t\tout.push(String.fromCharCode(192 + (c >> 6)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t\t\tbreak;\n\t\t\tcase c >= 55296 && c < 57344:\n\t\t\t\tc -= 55296; d = orig.charCodeAt(i++) - 56320 + (c<<10);\n\t\t\t\tout.push(String.fromCharCode(240 + ((d >>18) & 7)));\n\t\t\t\tout.push(String.fromCharCode(144 + ((d >>12) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((d >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (d & 63)));\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tout.push(String.fromCharCode(224 + (c >> 12)));\n\t\t\t\tout.push(String.fromCharCode(128 + ((c >> 6) & 63)));\n\t\t\t\tout.push(String.fromCharCode(128 + (c & 63)));\n\t\t}\n\t}\n\treturn out.join(\"\");\n};\n\nif(has_buf) {\n\tvar utf8readb = function utf8readb(data) {\n\t\tvar out = Buffer.alloc(2*data.length), w, i, j = 1, k = 0, ww=0, c;\n\t\tfor(i = 0; i < data.length; i+=j) {\n\t\t\tj = 1;\n\t\t\tif((c=data.charCodeAt(i)) < 128) w = c;\n\t\t\telse if(c < 224) { w = (c&31)*64+(data.charCodeAt(i+1)&63); j=2; }\n\t\t\telse if(c < 240) { w=(c&15)*4096+(data.charCodeAt(i+1)&63)*64+(data.charCodeAt(i+2)&63); j=3; }\n\t\t\telse { j = 4;\n\t\t\t\tw = (c & 7)*262144+(data.charCodeAt(i+1)&63)*4096+(data.charCodeAt(i+2)&63)*64+(data.charCodeAt(i+3)&63);\n\t\t\t\tw -= 65536; ww = 0xD800 + ((w>>>10)&1023); w = 0xDC00 + (w&1023);\n\t\t\t}\n\t\t\tif(ww !== 0) { out[k++] = ww&255; out[k++] = ww>>>8; ww = 0; }\n\t\t\tout[k++] = w%256; out[k++] = w>>>8;\n\t\t}\n\t\treturn out.slice(0,k).toString('ucs2');\n\t};\n\tvar corpus = \"foo bar baz\\u00e2\\u0098\\u0083\\u00f0\\u009f\\u008d\\u00a3\";\n\tif(utf8read(corpus) == utf8readb(corpus)) utf8read = utf8readb;\n\tvar utf8readc = function utf8readc(data) { return Buffer_from(data, 'binary').toString('utf8'); };\n\tif(utf8read(corpus) == utf8readc(corpus)) utf8read = utf8readc;\n\n\tutf8write = function(data) { return Buffer_from(data, 'utf8').toString(\"binary\"); };\n}\n\n// matches ... extracts content\nvar matchtag = (function() {\n\tvar mtcache/*:{[k:string]:RegExp}*/ = ({}/*:any*/);\n\treturn function matchtag(f/*:string*/,g/*:?string*/)/*:RegExp*/ {\n\t\tvar t = f+\"|\"+(g||\"\");\n\t\tif(mtcache[t]) return mtcache[t];\n\t\treturn (mtcache[t] = new RegExp('<(?:\\\\w+:)?'+f+'(?: xml:space=\"preserve\")?(?:[^>]*)>([\\\\s\\\\S]*?)(?:\\\\w+:)?'+f+'>',((g||\"\")/*:any*/)));\n\t};\n})();\n\nvar htmldecode/*:{(s:string):string}*/ = (function() {\n\tvar entities/*:Array<[RegExp, string]>*/ = [\n\t\t['nbsp', ' '], ['middot', '·'],\n\t\t['quot', '\"'], ['apos', \"'\"], ['gt', '>'], ['lt', '<'], ['amp', '&']\n\t].map(function(x/*:[string, string]*/) { return [new RegExp('&' + x[0] + ';', \"ig\"), x[1]]; });\n\treturn function htmldecode(str/*:string*/)/*:string*/ {\n\t\tvar o = str\n\t\t\t\t// Remove new lines and spaces from start of content\n\t\t\t\t.replace(/^[\\t\\n\\r ]+/, \"\")\n\t\t\t\t// Remove new lines and spaces from end of content\n\t\t\t\t.replace(/[\\t\\n\\r ]+$/,\"\")\n\t\t\t\t// Added line which removes any white space characters after and before html tags\n\t\t\t\t.replace(/>\\s+/g,\">\").replace(/\\s+ tags with new lines\n\t\t\t\t.replace(/<\\s*[bB][rR]\\s*\\/?>/g,\"\\n\")\n\t\t\t\t// Strip HTML elements\n\t\t\t\t.replace(/<[^>]*>/g,\"\");\n\t\tfor(var i = 0; i < entities.length; ++i) o = o.replace(entities[i][0], entities[i][1]);\n\t\treturn o;\n\t};\n})();\n\nvar vtregex = (function(){ var vt_cache = {};\n\treturn function vt_regex(bt) {\n\t\tif(vt_cache[bt] !== undefined) return vt_cache[bt];\n\t\treturn (vt_cache[bt] = new RegExp(\"<(?:vt:)?\" + bt + \">([\\\\s\\\\S]*?)(?:vt:)?\" + bt + \">\", 'g') );\n};})();\nvar vtvregex = /<\\/?(?:vt:)?variant>/g, vtmregex = /<(?:vt:)([^>]*)>([\\s\\S]*);\nfunction parseVector(data/*:string*/, opts)/*:Array<{v:string,t:string}>*/ {\n\tvar h = parsexmltag(data);\n\n\tvar matches/*:Array*/ = data.match(vtregex(h.baseType))||[];\n\tvar res/*:Array*/ = [];\n\tif(matches.length != h.size) {\n\t\tif(opts.WTF) throw new Error(\"unexpected vector length \" + matches.length + \" != \" + h.size);\n\t\treturn res;\n\t}\n\tmatches.forEach(function(x/*:string*/) {\n\t\tvar v = x.replace(vtvregex,\"\").match(vtmregex);\n\t\tif(v) res.push({v:utf8read(v[2]), t:v[1]});\n\t});\n\treturn res;\n}\n\nvar wtregex = /(^\\s|\\s$|\\n)/;\nfunction writetag(f/*:string*/,g/*:string*/)/*:string*/ { return '<' + f + (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '' + f + '>'; }\n\nfunction wxt_helper(h)/*:string*/ { return keys(h).map(function(k) { return \" \" + k + '=\"' + h[k] + '\"';}).join(\"\"); }\nfunction writextag(f/*:string*/,g/*:?string*/,h) { return '<' + f + ((h != null) ? wxt_helper(h) : \"\") + ((g != null) ? (g.match(wtregex)?' xml:space=\"preserve\"' : \"\") + '>' + g + '' + f : \"/\") + '>';}\n\nfunction write_w3cdtf(d/*:Date*/, t/*:?boolean*/)/*:string*/ { try { return d.toISOString().replace(/\\.\\d*/,\"\"); } catch(e) { if(t) throw e; } return \"\"; }\n\nfunction write_vt(s, xlsx/*:?boolean*/)/*:string*/ {\n\tswitch(typeof s) {\n\t\tcase 'string':\n\t\t\tvar o = writextag('vt:lpwstr', escapexml(s));\n\t\t\tif(xlsx) o = o.replace(/"/g, \"_x0022_\");\n\t\t\treturn o;\n\t\tcase 'number': return writextag((s|0)==s?'vt:i4':'vt:r8', escapexml(String(s)));\n\t\tcase 'boolean': return writextag('vt:bool',s?'true':'false');\n\t}\n\tif(s instanceof Date) return writextag('vt:filetime', write_w3cdtf(s));\n\tthrow new Error(\"Unable to serialize \" + s);\n}\n\nvar XMLNS = ({\n\t'dc': 'http://purl.org/dc/elements/1.1/',\n\t'dcterms': 'http://purl.org/dc/terms/',\n\t'dcmitype': 'http://purl.org/dc/dcmitype/',\n\t'mx': 'http://schemas.microsoft.com/office/mac/excel/2008/main',\n\t'r': 'http://schemas.openxmlformats.org/officeDocument/2006/relationships',\n\t'sjs': 'http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties',\n\t'vt': 'http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes',\n\t'xsi': 'http://www.w3.org/2001/XMLSchema-instance',\n\t'xsd': 'http://www.w3.org/2001/XMLSchema'\n}/*:any*/);\n\nXMLNS.main = [\n\t'http://schemas.openxmlformats.org/spreadsheetml/2006/main',\n\t'http://purl.oclc.org/ooxml/spreadsheetml/main',\n\t'http://schemas.microsoft.com/office/excel/2006/main',\n\t'http://schemas.microsoft.com/office/excel/2006/2'\n];\n\nvar XLMLNS = ({\n\t'o': 'urn:schemas-microsoft-com:office:office',\n\t'x': 'urn:schemas-microsoft-com:office:excel',\n\t'ss': 'urn:schemas-microsoft-com:office:spreadsheet',\n\t'dt': 'uuid:C2F41010-65B3-11d1-A29F-00AA00C14882',\n\t'mv': 'http://macVmlSchemaUri',\n\t'v': 'urn:schemas-microsoft-com:vml',\n\t'html': 'http://www.w3.org/TR/REC-html40'\n}/*:any*/);\nfunction read_double_le(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ {\n\tvar s = 1 - 2 * (b[idx + 7] >>> 7);\n\tvar e = ((b[idx + 7] & 0x7f) << 4) + ((b[idx + 6] >>> 4) & 0x0f);\n\tvar m = (b[idx+6]&0x0f);\n\tfor(var i = 5; i >= 0; --i) m = m * 256 + b[idx + i];\n\tif(e == 0x7ff) return m == 0 ? (s * Infinity) : NaN;\n\tif(e == 0) e = -1022;\n\telse { e -= 1023; m += Math.pow(2,52); }\n\treturn s * Math.pow(2, e - 52) * m;\n}\n\nfunction write_double_le(b/*:RawBytes|CFBlob*/, v/*:number*/, idx/*:number*/) {\n\tvar bs = ((((v < 0) || (1/v == -Infinity)) ? 1 : 0) << 7), e = 0, m = 0;\n\tvar av = bs ? (-v) : v;\n\tif(!isFinite(av)) { e = 0x7ff; m = isNaN(v) ? 0x6969 : 0; }\n\telse if(av == 0) e = m = 0;\n\telse {\n\t\te = Math.floor(Math.log(av) / Math.LN2);\n\t\tm = av * Math.pow(2, 52 - e);\n\t\tif((e <= -1023) && (!isFinite(m) || (m < Math.pow(2,52)))) { e = -1022; }\n\t\telse { m -= Math.pow(2,52); e+=1023; }\n\t}\n\tfor(var i = 0; i <= 5; ++i, m/=256) b[idx + i] = m & 0xff;\n\tb[idx + 6] = ((e & 0x0f) << 4) | (m & 0xf);\n\tb[idx + 7] = (e >> 4) | bs;\n}\n\nvar __toBuffer = function(bufs/*:Array >*/)/*:RawBytes*/ { var x=[],w=10240; for(var i=0;i*/=[]; for(var i=s; i*/=[]; for(var i=s; i 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___lpstr = __lpstr;\nvar __cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___cpstr = __cpstr;\nvar __lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len-1) : \"\";};\nvar ___lpwstr = __lpwstr;\nvar __lpp4, ___lpp4;\n__lpp4 = ___lpp4 = function lpp4_(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf16le(b, i+4,i+4+len) : \"\";};\nvar __8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? __utf8(b, i+4,i+4+len) : \"\";};\nvar ___8lpp4 = __8lpp4;\nvar __double, ___double;\n__double = ___double = function(b/*:RawBytes|CFBlob*/, idx/*:number*/) { return read_double_le(b, idx);};\nvar is_buf = function is_buf_a(a) { return Array.isArray(a); };\n\nif(has_buf/*:: && typeof Buffer !== 'undefined'*/) {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/)/*:string*/ { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___utf16le(b,s,e); return b.toString('utf16le',s,e).replace(chr0,'')/*.replace(chr1,'!')*/; };\n\t__hexlify = function(b/*:RawBytes|CFBlob*/,s/*:number*/,l/*:number*/)/*:string*/ { return Buffer.isBuffer(b)/*:: && b instanceof Buffer*/ ? b.toString('hex',s,s+l) : ___hexlify(b,s,l); };\n\t__lpstr = function lpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__cpstr = function cpstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___cpstr(b, i); var len = b.readUInt32LE(i); return len > 0 ? b.toString('utf8',i+4,i+4+len-1) : \"\";};\n\t__lpwstr = function lpwstr_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpwstr(b, i); var len = 2*b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len-1);};\n\t__lpp4 = function lpp4_b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf16le',i+4,i+4+len);};\n\t__8lpp4 = function lpp4_8b(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(!Buffer.isBuffer(b)/*:: || !(b instanceof Buffer)*/) return ___8lpp4(b, i); var len = b.readUInt32LE(i); return b.toString('utf8',i+4,i+4+len);};\n\t__utf8 = function utf8_b(b/*:RawBytes|CFBlob*/, s/*:number*/, e/*:number*/) { return (Buffer.isBuffer(b)/*:: && (b instanceof Buffer)*/) ? b.toString('utf8',s,e) : ___utf8(b,s,e); };\n\t__toBuffer = function(bufs) { return (bufs[0].length > 0 && Buffer.isBuffer(bufs[0][0])) ? Buffer.concat(bufs[0]) : ___toBuffer(bufs);};\n\tbconcat = function(bufs) { return Buffer.isBuffer(bufs[0]) ? Buffer.concat(bufs) : [].concat.apply([], bufs); };\n\t__double = function double_(b/*:RawBytes|CFBlob*/, i/*:number*/) { if(Buffer.isBuffer(b)/*::&& b instanceof Buffer*/) return b.readDoubleLE(i); return ___double(b,i); };\n\tis_buf = function is_buf_b(a) { return Buffer.isBuffer(a) || Array.isArray(a); };\n}\n\n/* from js-xls */\nif(typeof cptable !== 'undefined') {\n\t__utf16le = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return cptable.utils.decode(1200, b.slice(s,e)).replace(chr0, ''); };\n\t__utf8 = function(b/*:RawBytes|CFBlob*/,s/*:number*/,e/*:number*/) { return cptable.utils.decode(65001, b.slice(s,e)); };\n\t__lpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_ansi, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__cpstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(current_codepage, b.slice(i+4, i+4+len-1)) : \"\";};\n\t__lpwstr = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = 2*__readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len-1)) : \"\";};\n\t__lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(1200, b.slice(i+4,i+4+len)) : \"\";};\n\t__8lpp4 = function(b/*:RawBytes|CFBlob*/,i/*:number*/) { var len = __readUInt32LE(b,i); return len > 0 ? cptable.utils.decode(65001, b.slice(i+4,i+4+len)) : \"\";};\n}\n\nvar __readUInt8 = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx]; };\nvar __readUInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+1]*(1<<8))+b[idx]; };\nvar __readInt16LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { var u = (b[idx+1]*(1<<8))+b[idx]; return (u < 0x8000) ? u : ((0xffff - u + 1) * -1); };\nvar __readUInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]; };\nvar __readInt32LE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx+3]<<24)|(b[idx+2]<<16)|(b[idx+1]<<8)|b[idx]; };\nvar __readInt32BE = function(b/*:RawBytes|CFBlob*/, idx/*:number*/)/*:number*/ { return (b[idx]<<24)|(b[idx+1]<<16)|(b[idx+2]<<8)|b[idx+3]; };\n\nfunction ReadShift(size/*:number*/, t/*:?string*/)/*:number|string*/ {\n\tvar o=\"\", oI/*:: :number = 0*/, oR, oo=[], w, vv, i, loc;\n\tswitch(t) {\n\t\tcase 'dbcs':\n\t\t\tloc = this.l;\n\t\t\tif(has_buf && Buffer.isBuffer(this)) o = this.slice(this.l, this.l+2*size).toString(\"utf16le\");\n\t\t\telse for(i = 0; i < size; ++i) { o+=String.fromCharCode(__readUInt16LE(this, loc)); loc+=2; }\n\t\t\tsize *= 2;\n\t\t\tbreak;\n\n\t\tcase 'utf8': o = __utf8(this, this.l, this.l + size); break;\n\t\tcase 'utf16le': size *= 2; o = __utf16le(this, this.l, this.l + size); break;\n\n\t\tcase 'wstr':\n\t\t\tif(typeof cptable !== 'undefined') o = cptable.utils.decode(current_codepage, this.slice(this.l, this.l+2*size));\n\t\t\telse return ReadShift.call(this, size, 'dbcs');\n\t\t\tsize = 2 * size; break;\n\n\t\t/* [MS-OLEDS] 2.1.4 LengthPrefixedAnsiString */\n\t\tcase 'lpstr-ansi': o = __lpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\tcase 'lpstr-cp': o = __cpstr(this, this.l); size = 4 + __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OLEDS] 2.1.5 LengthPrefixedUnicodeString */\n\t\tcase 'lpwstr': o = __lpwstr(this, this.l); size = 4 + 2 * __readUInt32LE(this, this.l); break;\n\t\t/* [MS-OFFCRYPTO] 2.1.2 Length-Prefixed Padded Unicode String (UNICODE-LP-P4) */\n\t\tcase 'lpp4': size = 4 + __readUInt32LE(this, this.l); o = __lpp4(this, this.l); if(size & 0x02) size += 2; break;\n\t\t/* [MS-OFFCRYPTO] 2.1.3 Length-Prefixed UTF-8 String (UTF-8-LP-P4) */\n\t\tcase '8lpp4': size = 4 + __readUInt32LE(this, this.l); o = __8lpp4(this, this.l); if(size & 0x03) size += 4 - (size & 0x03); break;\n\n\t\tcase 'cstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt8(this, this.l + size++))!==0) oo.push(_getchar(w));\n\t\t\to = oo.join(\"\"); break;\n\t\tcase '_wstr': size = 0; o = \"\";\n\t\t\twhile((w=__readUInt16LE(this,this.l +size))!==0){oo.push(_getchar(w));size+=2;}\n\t\t\tsize+=2; o = oo.join(\"\"); break;\n\n\t\t/* sbcs and dbcs support continue records in the SST way TODO codepages */\n\t\tcase 'dbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i < size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt16LE(this, loc)));\n\t\t\t\tloc+=2;\n\t\t\t} o = oo.join(\"\"); size *= 2; break;\n\n\t\tcase 'cpstr':\n\t\t\tif(typeof cptable !== 'undefined') {\n\t\t\t\to = cptable.utils.decode(current_codepage, this.slice(this.l, this.l + size));\n\t\t\t\tbreak;\n\t\t\t}\n\t\t/* falls through */\n\t\tcase 'sbcs-cont': o = \"\"; loc = this.l;\n\t\t\tfor(i = 0; i != size; ++i) {\n\t\t\t\tif(this.lens && this.lens.indexOf(loc) !== -1) {\n\t\t\t\t\tw = __readUInt8(this, loc);\n\t\t\t\t\tthis.l = loc + 1;\n\t\t\t\t\tvv = ReadShift.call(this, size-i, w ? 'dbcs-cont' : 'sbcs-cont');\n\t\t\t\t\treturn oo.join(\"\") + vv;\n\t\t\t\t}\n\t\t\t\too.push(_getchar(__readUInt8(this, loc)));\n\t\t\t\tloc+=1;\n\t\t\t} o = oo.join(\"\"); break;\n\n\t\tdefault:\n\tswitch(size) {\n\t\tcase 1: oI = __readUInt8(this, this.l); this.l++; return oI;\n\t\tcase 2: oI = (t === 'i' ? __readInt16LE : __readUInt16LE)(this, this.l); this.l += 2; return oI;\n\t\tcase 4: case -4:\n\t\t\tif(t === 'i' || ((this[this.l+3] & 0x80)===0)) { oI = ((size > 0) ? __readInt32LE : __readInt32BE)(this, this.l); this.l += 4; return oI; }\n\t\t\telse { oR = __readUInt32LE(this, this.l); this.l += 4; } return oR;\n\t\tcase 8: case -8:\n\t\t\tif(t === 'f') {\n\t\t\t\tif(size == 8) oR = __double(this, this.l);\n\t\t\t\telse oR = __double([this[this.l+7],this[this.l+6],this[this.l+5],this[this.l+4],this[this.l+3],this[this.l+2],this[this.l+1],this[this.l+0]], 0);\n\t\t\t\tthis.l += 8; return oR;\n\t\t\t} else size = 8;\n\t\t/* falls through */\n\t\tcase 16: o = __hexlify(this, this.l, size); break;\n\t}}\n\tthis.l+=size; return o;\n}\n\nvar __writeUInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); b[idx+2] = ((val >>> 16) & 0xFF); b[idx+3] = ((val >>> 24) & 0xFF); };\nvar __writeInt32LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >> 8) & 0xFF); b[idx+2] = ((val >> 16) & 0xFF); b[idx+3] = ((val >> 24) & 0xFF); };\nvar __writeUInt16LE = function(b/*:RawBytes|CFBlob*/, val/*:number*/, idx/*:number*/)/*:void*/ { b[idx] = (val & 0xFF); b[idx+1] = ((val >>> 8) & 0xFF); };\n\nfunction WriteShift(t/*:number*/, val/*:string|number*/, f/*:?string*/)/*:any*/ {\n\tvar size = 0, i = 0;\n\tif(f === 'dbcs') {\n\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\tfor(i = 0; i != val.length; ++i) __writeUInt16LE(this, val.charCodeAt(i), this.l + 2 * i);\n\t\tsize = 2 * val.length;\n\t} else if(f === 'sbcs') {\n\t\tif(typeof cptable !== 'undefined' && current_ansi == 874) {\n\t\t\t/* TODO: use tables directly, don't encode */\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) {\n\t\t\t\tvar cppayload = cptable.utils.encode(current_ansi, val.charAt(i));\n\t\t\t\tthis[this.l + i] = cppayload[0];\n\t\t\t}\n\t\t} else {\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tval = val.replace(/[^\\x00-\\x7F]/g, \"_\");\n\t\t\t/*:: if(typeof val !== 'string') throw new Error(\"unreachable\"); */\n\t\t\tfor(i = 0; i != val.length; ++i) this[this.l + i] = (val.charCodeAt(i) & 0xFF);\n\t\t}\n\t\tsize = val.length;\n\t} else if(f === 'hex') {\n\t\tfor(; i < t; ++i) {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tthis[this.l++] = (parseInt(val.slice(2*i, 2*i+2), 16)||0);\n\t\t} return this;\n\t} else if(f === 'utf16le') {\n\t\t\t/*:: if(typeof val !== \"string\") throw new Error(\"unreachable\"); */\n\t\t\tvar end/*:number*/ = Math.min(this.l + t, this.length);\n\t\t\tfor(i = 0; i < Math.min(val.length, t); ++i) {\n\t\t\t\tvar cc = val.charCodeAt(i);\n\t\t\t\tthis[this.l++] = (cc & 0xff);\n\t\t\t\tthis[this.l++] = (cc >> 8);\n\t\t\t}\n\t\t\twhile(this.l < end) this[this.l++] = 0;\n\t\t\treturn this;\n\t} else /*:: if(typeof val === 'number') */ switch(t) {\n\t\tcase 1: size = 1; this[this.l] = val&0xFF; break;\n\t\tcase 2: size = 2; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; break;\n\t\tcase 3: size = 3; this[this.l] = val&0xFF; val >>>= 8; this[this.l+1] = val&0xFF; val >>>= 8; this[this.l+2] = val&0xFF; break;\n\t\tcase 4: size = 4; __writeUInt32LE(this, val, this.l); break;\n\t\tcase 8: size = 8; if(f === 'f') { write_double_le(this, val, this.l); break; }\n\t\t/* falls through */\n\t\tcase 16: break;\n\t\tcase -4: size = 4; __writeInt32LE(this, val, this.l); break;\n\t}\n\tthis.l += size; return this;\n}\n\nfunction CheckField(hexstr/*:string*/, fld/*:string*/)/*:void*/ {\n\tvar m = __hexlify(this,this.l,hexstr.length>>1);\n\tif(m !== hexstr) throw new Error(fld + 'Expected ' + hexstr + ' saw ' + m);\n\tthis.l += hexstr.length>>1;\n}\n\nfunction prep_blob(blob, pos/*:number*/)/*:void*/ {\n\tblob.l = pos;\n\tblob.read_shift = /*::(*/ReadShift/*:: :any)*/;\n\tblob.chk = CheckField;\n\tblob.write_shift = WriteShift;\n}\n\nfunction parsenoop(blob, length/*:: :number, opts?:any */) { blob.l += length; }\n\nfunction new_buf(sz/*:number*/)/*:Block*/ {\n\tvar o = new_raw_buf(sz);\n\tprep_blob(o, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.1.4 Record */\nfunction recordhopper(data, cb/*:RecordHopperCB*/, opts/*:?any*/) {\n\tif(!data) return;\n\tvar tmpbyte, cntbyte, length;\n\tprep_blob(data, data.l || 0);\n\tvar L = data.length, RT = 0, tgt = 0;\n\twhile(data.l < L) {\n\t\tRT = data.read_shift(1);\n\t\tif(RT & 0x80) RT = (RT & 0x7F) + ((data.read_shift(1) & 0x7F)<<7);\n\t\tvar R = XLSBRecordEnum[RT] || XLSBRecordEnum[0xFFFF];\n\t\ttmpbyte = data.read_shift(1);\n\t\tlength = tmpbyte & 0x7F;\n\t\tfor(cntbyte = 1; cntbyte <4 && (tmpbyte & 0x80); ++cntbyte) length += ((tmpbyte = data.read_shift(1)) & 0x7F)<<(7*cntbyte);\n\t\ttgt = data.l + length;\n\t\tvar d = (R.f||parsenoop)(data, length, opts);\n\t\tdata.l = tgt;\n\t\tif(cb(d, R.n, RT)) return;\n\t}\n}\n\n/* control buffer usage for fixed-length buffers */\nfunction buf_array()/*:BufArray*/ {\n\tvar bufs/*:Array*/ = [], blksz = has_buf ? 256 : 2048;\n\tvar newblk = function ba_newblk(sz/*:number*/)/*:Block*/ {\n\t\tvar o/*:Block*/ = (new_buf(sz)/*:any*/);\n\t\tprep_blob(o, 0);\n\t\treturn o;\n\t};\n\n\tvar curbuf/*:Block*/ = newblk(blksz);\n\n\tvar endbuf = function ba_endbuf() {\n\t\tif(!curbuf) return;\n\t\tif(curbuf.length > curbuf.l) { curbuf = curbuf.slice(0, curbuf.l); curbuf.l = curbuf.length; }\n\t\tif(curbuf.length > 0) bufs.push(curbuf);\n\t\tcurbuf = null;\n\t};\n\n\tvar next = function ba_next(sz/*:number*/)/*:Block*/ {\n\t\tif(curbuf && (sz < (curbuf.length - curbuf.l))) return curbuf;\n\t\tendbuf();\n\t\treturn (curbuf = newblk(Math.max(sz+1, blksz)));\n\t};\n\n\tvar end = function ba_end() {\n\t\tendbuf();\n\t\treturn __toBuffer([bufs]);\n\t};\n\n\tvar push = function ba_push(buf) { endbuf(); curbuf = buf; if(curbuf.l == null) curbuf.l = curbuf.length; next(blksz); };\n\n\treturn ({ next:next, push:push, end:end, _bufs:bufs }/*:any*/);\n}\n\nfunction write_record(ba/*:BufArray*/, type/*:string*/, payload, length/*:?number*/) {\n\tvar t/*:number*/ = +XLSBRE[type], l;\n\tif(isNaN(t)) return; // TODO: throw something here?\n\tif(!length) length = XLSBRecordEnum[t].p || (payload||[]).length || 0;\n\tl = 1 + (t >= 0x80 ? 1 : 0) + 1/* + length*/;\n\tif(length >= 0x80) ++l; if(length >= 0x4000) ++l; if(length >= 0x200000) ++l;\n\tvar o = ba.next(l);\n\tif(t <= 0x7F) o.write_shift(1, t);\n\telse {\n\t\to.write_shift(1, (t & 0x7F) + 0x80);\n\t\to.write_shift(1, (t >> 7));\n\t}\n\tfor(var i = 0; i != 4; ++i) {\n\t\tif(length >= 0x80) { o.write_shift(1, (length & 0x7F)+0x80); length >>= 7; }\n\t\telse { o.write_shift(1, length); break; }\n\t}\n\tif(/*:: length != null &&*/length > 0 && is_buf(payload)) ba.push(payload);\n}\n/* XLS ranges enforced */\nfunction shift_cell_xls(cell/*:CellAddress*/, tgt/*:any*/, opts/*:?any*/)/*:CellAddress*/ {\n\tvar out = dup(cell);\n\tif(tgt.s) {\n\t\tif(out.cRel) out.c += tgt.s.c;\n\t\tif(out.rRel) out.r += tgt.s.r;\n\t} else {\n\t\tif(out.cRel) out.c += tgt.c;\n\t\tif(out.rRel) out.r += tgt.r;\n\t}\n\tif(!opts || opts.biff < 12) {\n\t\twhile(out.c >= 0x100) out.c -= 0x100;\n\t\twhile(out.r >= 0x10000) out.r -= 0x10000;\n\t}\n\treturn out;\n}\n\nfunction shift_range_xls(cell, range, opts) {\n\tvar out = dup(cell);\n\tout.s = shift_cell_xls(out.s, range.s, opts);\n\tout.e = shift_cell_xls(out.e, range.s, opts);\n\treturn out;\n}\n\nfunction encode_cell_xls(c/*:CellAddress*/, biff/*:number*/)/*:string*/ {\n\tif(c.cRel && c.c < 0) { c = dup(c); while(c.c < 0) c.c += (biff > 8) ? 0x4000 : 0x100; }\n\tif(c.rRel && c.r < 0) { c = dup(c); while(c.r < 0) c.r += (biff > 8) ? 0x100000 : ((biff > 5) ? 0x10000 : 0x4000); }\n\tvar s = encode_cell(c);\n\tif(!c.cRel && c.cRel != null) s = fix_col(s);\n\tif(!c.rRel && c.rRel != null) s = fix_row(s);\n\treturn s;\n}\n\nfunction encode_range_xls(r, opts)/*:string*/ {\n\tif(r.s.r == 0 && !r.s.rRel) {\n\t\tif(r.e.r == (opts.biff >= 12 ? 0xFFFFF : (opts.biff >= 8 ? 0x10000 : 0x4000)) && !r.e.rRel) {\n\t\t\treturn (r.s.cRel ? \"\" : \"$\") + encode_col(r.s.c) + \":\" + (r.e.cRel ? \"\" : \"$\") + encode_col(r.e.c);\n\t\t}\n\t}\n\tif(r.s.c == 0 && !r.s.cRel) {\n\t\tif(r.e.c == (opts.biff >= 12 ? 0x3FFF : 0xFF) && !r.e.cRel) {\n\t\t\treturn (r.s.rRel ? \"\" : \"$\") + encode_row(r.s.r) + \":\" + (r.e.rRel ? \"\" : \"$\") + encode_row(r.e.r);\n\t\t}\n\t}\n\treturn encode_cell_xls(r.s, opts.biff) + \":\" + encode_cell_xls(r.e, opts.biff);\n}\nfunction decode_row(rowstr/*:string*/)/*:number*/ { return parseInt(unfix_row(rowstr),10) - 1; }\nfunction encode_row(row/*:number*/)/*:string*/ { return \"\" + (row + 1); }\nfunction fix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/([A-Z]|^)(\\d+)$/,\"$1$$$2\"); }\nfunction unfix_row(cstr/*:string*/)/*:string*/ { return cstr.replace(/\\$(\\d+)$/,\"$1\"); }\n\nfunction decode_col(colstr/*:string*/)/*:number*/ { var c = unfix_col(colstr), d = 0, i = 0; for(; i !== c.length; ++i) d = 26*d + c.charCodeAt(i) - 64; return d - 1; }\nfunction encode_col(col/*:number*/)/*:string*/ { if(col < 0) throw new Error(\"invalid column \" + col); var s=\"\"; for(++col; col; col=Math.floor((col-1)/26)) s = String.fromCharCode(((col-1)%26) + 65) + s; return s; }\nfunction fix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^([A-Z])/,\"$$$1\"); }\nfunction unfix_col(cstr/*:string*/)/*:string*/ { return cstr.replace(/^\\$([A-Z])/,\"$1\"); }\n\nfunction split_cell(cstr/*:string*/)/*:Array*/ { return cstr.replace(/(\\$?[A-Z]*)(\\$?\\d*)/,\"$1,$2\").split(\",\"); }\n//function decode_cell(cstr/*:string*/)/*:CellAddress*/ { var splt = split_cell(cstr); return { c:decode_col(splt[0]), r:decode_row(splt[1]) }; }\nfunction decode_cell(cstr/*:string*/)/*:CellAddress*/ {\n\tvar R = 0, C = 0;\n\tfor(var i = 0; i < cstr.length; ++i) {\n\t\tvar cc = cstr.charCodeAt(i);\n\t\tif(cc >= 48 && cc <= 57) R = 10 * R + (cc - 48);\n\t\telse if(cc >= 65 && cc <= 90) C = 26 * C + (cc - 64);\n\t}\n\treturn { c: C - 1, r:R - 1 };\n}\n//function encode_cell(cell/*:CellAddress*/)/*:string*/ { return encode_col(cell.c) + encode_row(cell.r); }\nfunction encode_cell(cell/*:CellAddress*/)/*:string*/ {\n\tvar col = cell.c + 1;\n\tvar s=\"\";\n\tfor(; col; col=((col-1)/26)|0) s = String.fromCharCode(((col-1)%26) + 65) + s;\n\treturn s + (cell.r + 1);\n}\nfunction decode_range(range/*:string*/)/*:Range*/ {\n\tvar idx = range.indexOf(\":\");\n\tif(idx == -1) return { s: decode_cell(range), e: decode_cell(range) };\n\treturn { s: decode_cell(range.slice(0, idx)), e: decode_cell(range.slice(idx + 1)) };\n}\n/*# if only one arg, it is assumed to be a Range. If 2 args, both are cell addresses */\nfunction encode_range(cs/*:CellAddrSpec|Range*/,ce/*:?CellAddrSpec*/)/*:string*/ {\n\tif(typeof ce === 'undefined' || typeof ce === 'number') {\n/*:: if(!(cs instanceof Range)) throw \"unreachable\"; */\n\t\treturn encode_range(cs.s, cs.e);\n\t}\n/*:: if((cs instanceof Range)) throw \"unreachable\"; */\n\tif(typeof cs !== 'string') cs = encode_cell((cs/*:any*/));\n\tif(typeof ce !== 'string') ce = encode_cell((ce/*:any*/));\n/*:: if(typeof cs !== 'string') throw \"unreachable\"; */\n/*:: if(typeof ce !== 'string') throw \"unreachable\"; */\n\treturn cs == ce ? cs : cs + \":\" + ce;\n}\n\nfunction safe_decode_range(range/*:string*/)/*:Range*/ {\n\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\tvar idx = 0, i = 0, cc = 0;\n\tvar len = range.length;\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.s.c = --idx;\n\n\tfor(idx = 0; i < len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.s.r = --idx;\n\n\tif(i === len || range.charCodeAt(++i) === 58) { o.e.c=o.s.c; o.e.r=o.s.r; return o; }\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\tidx = 26*idx + cc;\n\t}\n\to.e.c = --idx;\n\n\tfor(idx = 0; i != len; ++i) {\n\t\tif((cc=range.charCodeAt(i)-48) < 0 || cc > 9) break;\n\t\tidx = 10*idx + cc;\n\t}\n\to.e.r = --idx;\n\treturn o;\n}\n\nfunction safe_format_cell(cell/*:Cell*/, v/*:any*/) {\n\tvar q = (cell.t == 'd' && v instanceof Date);\n\tif(cell.z != null) try { return (cell.w = SSF.format(cell.z, q ? datenum(v) : v)); } catch(e) { }\n\ttry { return (cell.w = SSF.format((cell.XF||{}).numFmtId||(q ? 14 : 0), q ? datenum(v) : v)); } catch(e) { return ''+v; }\n}\n\nfunction format_cell(cell/*:Cell*/, v/*:any*/, o/*:any*/) {\n\tif(cell == null || cell.t == null || cell.t == 'z') return \"\";\n\tif(cell.w !== undefined) return cell.w;\n\tif(cell.t == 'd' && !cell.z && o && o.dateNF) cell.z = o.dateNF;\n\tif(cell.t == \"e\") return BErr[cell.v] || cell.v;\n\tif(v == undefined) return safe_format_cell(cell, cell.v);\n\treturn safe_format_cell(cell, v);\n}\n\nfunction sheet_to_workbook(sheet/*:Worksheet*/, opts)/*:Workbook*/ {\n\tvar n = opts && opts.sheet ? opts.sheet : \"Sheet1\";\n\tvar sheets = {}; sheets[n] = sheet;\n\treturn { SheetNames: [n], Sheets: sheets };\n}\n\nfunction sheet_add_aoa(_ws/*:?Worksheet*/, data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tvar dense = _ws ? Array.isArray(_ws) : o.dense;\n\tif(DENSE != null && dense == null) dense = DENSE;\n\tvar ws/*:Worksheet*/ = _ws || (dense ? ([]/*:any*/) : ({}/*:any*/));\n\tvar _R = 0, _C = 0;\n\tif(ws && o.origin != null) {\n\t\tif(typeof o.origin == 'number') _R = o.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof o.origin == \"string\" ? decode_cell(o.origin) : o.origin;\n\t\t\t_R = _origin.r; _C = _origin.c;\n\t\t}\n\t\tif(!ws[\"!ref\"]) ws[\"!ref\"] = \"A1:A1\";\n\t}\n\tvar range/*:Range*/ = ({s: {c:10000000, r:10000000}, e: {c:0, r:0}}/*:any*/);\n\tif(ws['!ref']) {\n\t\tvar _range = safe_decode_range(ws['!ref']);\n\t\trange.s.c = _range.s.c;\n\t\trange.s.r = _range.s.r;\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\tif(_R == -1) range.e.r = _R = _range.e.r + 1;\n\t}\n\tfor(var R = 0; R != data.length; ++R) {\n\t\tif(!data[R]) continue;\n\t\tif(!Array.isArray(data[R])) throw new Error(\"aoa_to_sheet expects an array of arrays\");\n\t\tfor(var C = 0; C != data[R].length; ++C) {\n\t\t\tif(typeof data[R][C] === 'undefined') continue;\n\t\t\tvar cell/*:Cell*/ = ({v: data[R][C] }/*:any*/);\n\t\t\tvar __R = _R + R, __C = _C + C;\n\t\t\tif(range.s.r > __R) range.s.r = __R;\n\t\t\tif(range.s.c > __C) range.s.c = __C;\n\t\t\tif(range.e.r < __R) range.e.r = __R;\n\t\t\tif(range.e.c < __C) range.e.c = __C;\n\t\t\tif(data[R][C] && typeof data[R][C] === 'object' && !Array.isArray(data[R][C]) && !(data[R][C] instanceof Date)) cell = data[R][C];\n\t\t\telse {\n\t\t\t\tif(Array.isArray(cell.v)) { cell.f = data[R][C][1]; cell.v = cell.v[0]; }\n\t\t\t\tif(cell.v === null) {\n\t\t\t\t\tif(cell.f) cell.t = 'n';\n\t\t\t\t\telse if(o.nullError) { cell.t = 'e'; cell.v = 0; }\n\t\t\t\t\telse if(!o.sheetStubs) continue;\n\t\t\t\t\telse cell.t = 'z';\n\t\t\t\t}\n\t\t\t\telse if(typeof cell.v === 'number') cell.t = 'n';\n\t\t\t\telse if(typeof cell.v === 'boolean') cell.t = 'b';\n\t\t\t\telse if(cell.v instanceof Date) {\n\t\t\t\t\tcell.z = o.dateNF || SSF._table[14];\n\t\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.w = SSF.format(cell.z, datenum(cell.v)); }\n\t\t\t\t\telse { cell.t = 'n'; cell.v = datenum(cell.v); cell.w = SSF.format(cell.z, cell.v); }\n\t\t\t\t}\n\t\t\t\telse cell.t = 's';\n\t\t\t}\n\t\t\tif(dense) {\n\t\t\t\tif(!ws[__R]) ws[__R] = [];\n\t\t\t\tif(ws[__R][__C] && ws[__R][__C].z) cell.z = ws[__R][__C].z;\n\t\t\t\tws[__R][__C] = cell;\n\t\t\t} else {\n\t\t\t\tvar cell_ref = encode_cell(({c:__C,r:__R}/*:any*/));\n\t\t\t\tif(ws[cell_ref] && ws[cell_ref].z) cell.z = ws[cell_ref].z;\n\t\t\t\tws[cell_ref] = cell;\n\t\t\t}\n\t\t}\n\t}\n\tif(range.s.c < 10000000) ws['!ref'] = encode_range(range);\n\treturn ws;\n}\nfunction aoa_to_sheet(data/*:AOA*/, opts/*:?any*/)/*:Worksheet*/ { return sheet_add_aoa(null, data, opts); }\n\nfunction write_UInt32LE(x/*:number*/, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(4, x);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.168 */\nfunction parse_XLWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(4 + 2 * data.length); }\n\to.write_shift(4, data.length);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.91 */\n//function parse_LPWideString(data/*::, length*/)/*:string*/ {\n//\tvar cchCharacters = data.read_shift(2);\n//\treturn cchCharacters === 0 ? \"\" : data.read_shift(cchCharacters, \"utf16le\");\n//}\n\n/* [MS-XLSB] 2.5.143 */\nfunction parse_StrRun(data) {\n\treturn { ich: data.read_shift(2), ifnt: data.read_shift(2) };\n}\nfunction write_StrRun(run, o) {\n\tif (!o) o = new_buf(4);\n\to.write_shift(2, run.ich || 0);\n\to.write_shift(2, run.ifnt || 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.121 */\nfunction parse_RichStr(data, length/*:number*/)/*:XLString*/ {\n\tvar start = data.l;\n\tvar flags = data.read_shift(1);\n\tvar str = parse_XLWideString(data);\n\tvar rgsStrRun = [];\n\tvar z = ({ t: str, h: str }/*:any*/);\n\tif ((flags & 1) !== 0) { /* fRichStr */\n\t\t/* TODO: formatted string */\n\t\tvar dwSizeStrRun = data.read_shift(4);\n\t\tfor (var i = 0; i != dwSizeStrRun; ++i) rgsStrRun.push(parse_StrRun(data));\n\t\tz.r = rgsStrRun;\n\t}\n\telse z.r = [{ ich: 0, ifnt: 0 }];\n\t//if((flags & 2) !== 0) { /* fExtStr */\n\t//\t/* TODO: phonetic string */\n\t//}\n\tdata.l = start + length;\n\treturn z;\n}\nfunction write_RichStr(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(15 + 4 * str.t.length); }\n\to.write_shift(1, 0);\n\twrite_XLWideString(str.t, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n/* [MS-XLSB] 2.4.328 BrtCommentText (RichStr w/1 run) */\nvar parse_BrtCommentText = parse_RichStr;\nfunction write_BrtCommentText(str/*:XLString*/, o/*:?Block*/)/*:Block*/ {\n\t/* TODO: formatted string */\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(23 + 4 * str.t.length); }\n\to.write_shift(1, 1);\n\twrite_XLWideString(str.t, o);\n\to.write_shift(4, 1);\n\twrite_StrRun({ ich: 0, ifnt: 0 }, o);\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.9 */\nfunction parse_XLSBCell(data)/*:any*/ {\n\tvar col = data.read_shift(4);\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) << 16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c: col, iStyleRef: iStyleRef };\n}\nfunction write_XLSBCell(cell/*:any*/, o/*:?Block*/) {\n\tif (o == null) o = new_buf(8);\n\to.write_shift(-4, cell.c);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* Short XLSB Cell does not include column */\nfunction parse_XLSBShortCell(data)/*:any*/ {\n\tvar iStyleRef = data.read_shift(2);\n\tiStyleRef += data.read_shift(1) <<16;\n\tdata.l++; //var fPhShow = data.read_shift(1);\n\treturn { c:-1, iStyleRef: iStyleRef };\n}\nfunction write_XLSBShortCell(cell/*:any*/, o/*:?Block*/) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(3, cell.iStyleRef || cell.s);\n\to.write_shift(1, 0); /* fPhShow */\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.21 */\nvar parse_XLSBCodeName = parse_XLWideString;\nvar write_XLSBCodeName = write_XLWideString;\n\n/* [MS-XLSB] 2.5.166 */\nfunction parse_XLNullableWideString(data/*::, length*/)/*:string*/ {\n\tvar cchCharacters = data.read_shift(4);\n\treturn cchCharacters === 0 || cchCharacters === 0xFFFFFFFF ? \"\" : data.read_shift(cchCharacters, 'dbcs');\n}\nfunction write_XLNullableWideString(data/*:string*/, o) {\n\tvar _null = false; if (o == null) { _null = true; o = new_buf(127); }\n\to.write_shift(4, data.length > 0 ? data.length : 0xFFFFFFFF);\n\tif (data.length > 0) o.write_shift(0, data, 'dbcs');\n\treturn _null ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.5.165 */\nvar parse_XLNameWideString = parse_XLWideString;\n//var write_XLNameWideString = write_XLWideString;\n\n/* [MS-XLSB] 2.5.114 */\nvar parse_RelID = parse_XLNullableWideString;\nvar write_RelID = write_XLNullableWideString;\n\n\n/* [MS-XLS] 2.5.217 ; [MS-XLSB] 2.5.122 */\nfunction parse_RkNumber(data)/*:number*/ {\n\tvar b = data.slice(data.l, data.l + 4);\n\tvar fX100 = (b[0] & 1), fInt = (b[0] & 2);\n\tdata.l += 4;\n\tb[0] &= 0xFC; // b[0] &= ~3;\n\tvar RK = fInt === 0 ? __double([0, 0, 0, 0, b[0], b[1], b[2], b[3]], 0) : __readInt32LE(b, 0) >> 2;\n\treturn fX100 ? (RK / 100) : RK;\n}\nfunction write_RkNumber(data/*:number*/, o) {\n\tif (o == null) o = new_buf(4);\n\tvar fX100 = 0, fInt = 0, d100 = data * 100;\n\tif ((data == (data | 0)) && (data >= -(1 << 29)) && (data < (1 << 29))) { fInt = 1; }\n\telse if ((d100 == (d100 | 0)) && (d100 >= -(1 << 29)) && (d100 < (1 << 29))) { fInt = 1; fX100 = 1; }\n\tif (fInt) o.write_shift(-4, ((fX100 ? d100 : data) << 2) + (fX100 + 2));\n\telse throw new Error(\"unsupported RkNumber \" + data); // TODO\n}\n\n\n/* [MS-XLSB] 2.5.117 RfX */\nfunction parse_RfX(data /*::, length*/)/*:Range*/ {\n\tvar cell/*:Range*/ = ({ s: {}, e: {} }/*:any*/);\n\tcell.s.r = data.read_shift(4);\n\tcell.e.r = data.read_shift(4);\n\tcell.s.c = data.read_shift(4);\n\tcell.e.c = data.read_shift(4);\n\treturn cell;\n}\nfunction write_RfX(r/*:Range*/, o) {\n\tif (!o) o = new_buf(16);\n\to.write_shift(4, r.s.r);\n\to.write_shift(4, r.e.r);\n\to.write_shift(4, r.s.c);\n\to.write_shift(4, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.153 UncheckedRfX */\nvar parse_UncheckedRfX = parse_RfX;\nvar write_UncheckedRfX = write_RfX;\n\n/* [MS-XLSB] 2.5.155 UncheckedSqRfX */\n//function parse_UncheckedSqRfX(data) {\n//\tvar cnt = data.read_shift(4);\n//\tvar out = [];\n//\tfor(var i = 0; i < cnt; ++i) {\n//\t\tvar rng = parse_UncheckedRfX(data);\n//\t\tout.push(encode_range(rng));\n//\t}\n//\treturn out.join(\",\");\n//}\n//function write_UncheckedSqRfX(sqrfx/*:string*/) {\n//\tvar parts = sqrfx.split(/\\s*,\\s*/);\n//\tvar o = new_buf(4); o.write_shift(4, parts.length);\n//\tvar out = [o];\n//\tparts.forEach(function(rng) {\n//\t\tout.push(write_UncheckedRfX(safe_decode_range(rng)));\n//\t});\n//\treturn bconcat(out);\n//}\n\n/* [MS-XLS] 2.5.342 ; [MS-XLSB] 2.5.171 */\n/* TODO: error checking, NaN and Infinity values are not valid Xnum */\nfunction parse_Xnum(data/*::, length*/) {\n\tif(data.length - data.l < 8) throw \"XLS Xnum Buffer underflow\";\n\treturn data.read_shift(8, 'f');\n}\nfunction write_Xnum(data, o) { return (o || new_buf(8)).write_shift(8, data, 'f'); }\n\n/* [MS-XLSB] 2.4.324 BrtColor */\nfunction parse_BrtColor(data/*::, length*/) {\n\tvar out = {};\n\tvar d = data.read_shift(1);\n\n\t//var fValidRGB = d & 1;\n\tvar xColorType = d >>> 1;\n\n\tvar index = data.read_shift(1);\n\tvar nTS = data.read_shift(2, 'i');\n\tvar bR = data.read_shift(1);\n\tvar bG = data.read_shift(1);\n\tvar bB = data.read_shift(1);\n\tdata.l++; //var bAlpha = data.read_shift(1);\n\n\tswitch (xColorType) {\n\t\tcase 0: out.auto = 1; break;\n\t\tcase 1:\n\t\t\tout.index = index;\n\t\t\tvar icv = XLSIcv[index];\n\t\t\t/* automatic pseudo index 81 */\n\t\t\tif (icv) out.rgb = rgb2Hex(icv);\n\t\t\tbreak;\n\t\tcase 2:\n\t\t\t/* if(!fValidRGB) throw new Error(\"invalid\"); */\n\t\t\tout.rgb = rgb2Hex([bR, bG, bB]);\n\t\t\tbreak;\n\t\tcase 3: out.theme = index; break;\n\t}\n\tif (nTS != 0) out.tint = nTS > 0 ? nTS / 32767 : nTS / 32768;\n\n\treturn out;\n}\nfunction write_BrtColor(color, o) {\n\tif (!o) o = new_buf(8);\n\tif (!color || color.auto) { o.write_shift(4, 0); o.write_shift(4, 0); return o; }\n\tif (color.index != null) {\n\t\to.write_shift(1, 0x02);\n\t\to.write_shift(1, color.index);\n\t} else if (color.theme != null) {\n\t\to.write_shift(1, 0x06);\n\t\to.write_shift(1, color.theme);\n\t} else {\n\t\to.write_shift(1, 0x05);\n\t\to.write_shift(1, 0);\n\t}\n\tvar nTS = color.tint || 0;\n\tif (nTS > 0) nTS *= 32767;\n\telse if (nTS < 0) nTS *= 32768;\n\to.write_shift(2, nTS);\n\tif (!color.rgb || color.theme != null) {\n\t\to.write_shift(2, 0);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(1, 0);\n\t} else {\n\t\tvar rgb = (color.rgb || 'FFFFFF');\n\t\tif (typeof rgb == 'number') rgb = (\"000000\" + rgb.toString(16)).slice(-6);\n\t\to.write_shift(1, parseInt(rgb.slice(0, 2), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(2, 4), 16));\n\t\to.write_shift(1, parseInt(rgb.slice(4, 6), 16));\n\t\to.write_shift(1, 0xFF);\n\t}\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.52 */\nfunction parse_FontFlags(data/*::, length, opts*/) {\n\tvar d = data.read_shift(1);\n\tdata.l++;\n\tvar out = {\n\t\tfBold: d & 0x01,\n\t\tfItalic: d & 0x02,\n\t\tfUnderline: d & 0x04,\n\t\tfStrikeout: d & 0x08,\n\t\tfOutline: d & 0x10,\n\t\tfShadow: d & 0x20,\n\t\tfCondense: d & 0x40,\n\t\tfExtend: d & 0x80\n\t};\n\treturn out;\n}\nfunction write_FontFlags(font, o) {\n\tif (!o) o = new_buf(2);\n\tvar grbit =\n\t\t(font.italic ? 0x02 : 0) |\n\t\t(font.strike ? 0x08 : 0) |\n\t\t(font.outline ? 0x10 : 0) |\n\t\t(font.shadow ? 0x20 : 0) |\n\t\t(font.condense ? 0x40 : 0) |\n\t\t(font.extend ? 0x80 : 0);\n\to.write_shift(1, grbit);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-OLEDS] 2.3.1 and 2.3.2 */\nfunction parse_ClipboardFormatOrString(o, w/*:number*/)/*:string*/ {\n\t// $FlowIgnore\n\tvar ClipFmt = { 2: \"BITMAP\", 3: \"METAFILEPICT\", 8: \"DIB\", 14: \"ENHMETAFILE\" };\n\tvar m/*:number*/ = o.read_shift(4);\n\tswitch (m) {\n\t\tcase 0x00000000: return \"\";\n\t\tcase 0xffffffff: case 0xfffffffe: return ClipFmt[o.read_shift(4)] || \"\";\n\t}\n\tif (m > 0x190) throw new Error(\"Unsupported Clipboard: \" + m.toString(16));\n\to.l -= 4;\n\treturn o.read_shift(0, w == 1 ? \"lpstr\" : \"lpwstr\");\n}\nfunction parse_ClipboardFormatOrAnsiString(o) { return parse_ClipboardFormatOrString(o, 1); }\nfunction parse_ClipboardFormatOrUnicodeString(o) { return parse_ClipboardFormatOrString(o, 2); }\n\n/* [MS-OLEPS] 2.2 PropertyType */\n//var VT_EMPTY = 0x0000;\n//var VT_NULL = 0x0001;\nvar VT_I2 = 0x0002;\nvar VT_I4 = 0x0003;\n//var VT_R4 = 0x0004;\n//var VT_R8 = 0x0005;\n//var VT_CY = 0x0006;\n//var VT_DATE = 0x0007;\n//var VT_BSTR = 0x0008;\n//var VT_ERROR = 0x000A;\nvar VT_BOOL = 0x000B;\nvar VT_VARIANT = 0x000C;\n//var VT_DECIMAL = 0x000E;\n//var VT_I1 = 0x0010;\n//var VT_UI1 = 0x0011;\n//var VT_UI2 = 0x0012;\nvar VT_UI4 = 0x0013;\n//var VT_I8 = 0x0014;\n//var VT_UI8 = 0x0015;\n//var VT_INT = 0x0016;\n//var VT_UINT = 0x0017;\nvar VT_LPSTR = 0x001E;\n//var VT_LPWSTR = 0x001F;\nvar VT_FILETIME = 0x0040;\nvar VT_BLOB = 0x0041;\n//var VT_STREAM = 0x0042;\n//var VT_STORAGE = 0x0043;\n//var VT_STREAMED_Object = 0x0044;\n//var VT_STORED_Object = 0x0045;\n//var VT_BLOB_Object = 0x0046;\nvar VT_CF = 0x0047;\n//var VT_CLSID = 0x0048;\n//var VT_VERSIONED_STREAM = 0x0049;\nvar VT_VECTOR = 0x1000;\n//var VT_ARRAY = 0x2000;\n\nvar VT_STRING = 0x0050; // 2.3.3.1.11 VtString\nvar VT_USTR = 0x0051; // 2.3.3.1.12 VtUnalignedString\nvar VT_CUSTOM = [VT_STRING, VT_USTR];\n\n/* [MS-OSHARED] 2.3.3.2.2.1 Document Summary Information PIDDSI */\nvar DocSummaryPIDDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Category', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'PresentationFormat', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'ByteCount', t: VT_I4 },\n\t/*::[*/0x05/*::]*/: { n: 'LineCount', t: VT_I4 },\n\t/*::[*/0x06/*::]*/: { n: 'ParagraphCount', t: VT_I4 },\n\t/*::[*/0x07/*::]*/: { n: 'SlideCount', t: VT_I4 },\n\t/*::[*/0x08/*::]*/: { n: 'NoteCount', t: VT_I4 },\n\t/*::[*/0x09/*::]*/: { n: 'HiddenCount', t: VT_I4 },\n\t/*::[*/0x0a/*::]*/: { n: 'MultimediaClipCount', t: VT_I4 },\n\t/*::[*/0x0b/*::]*/: { n: 'ScaleCrop', t: VT_BOOL },\n\t/*::[*/0x0c/*::]*/: { n: 'HeadingPairs', t: VT_VECTOR | VT_VARIANT },\n\t/*::[*/0x0d/*::]*/: { n: 'TitlesOfParts', t: VT_VECTOR | VT_LPSTR },\n\t/*::[*/0x0e/*::]*/: { n: 'Manager', t: VT_STRING },\n\t/*::[*/0x0f/*::]*/: { n: 'Company', t: VT_STRING },\n\t/*::[*/0x10/*::]*/: { n: 'LinksUpToDate', t: VT_BOOL },\n\t/*::[*/0x11/*::]*/: { n: 'CharacterCount', t: VT_I4 },\n\t/*::[*/0x13/*::]*/: { n: 'SharedDoc', t: VT_BOOL },\n\t/*::[*/0x16/*::]*/: { n: 'HyperlinksChanged', t: VT_BOOL },\n\t/*::[*/0x17/*::]*/: { n: 'AppVersion', t: VT_I4, p: 'version' },\n\t/*::[*/0x18/*::]*/: { n: 'DigSig', t: VT_BLOB },\n\t/*::[*/0x1A/*::]*/: { n: 'ContentType', t: VT_STRING },\n\t/*::[*/0x1B/*::]*/: { n: 'ContentStatus', t: VT_STRING },\n\t/*::[*/0x1C/*::]*/: { n: 'Language', t: VT_STRING },\n\t/*::[*/0x1D/*::]*/: { n: 'Version', t: VT_STRING },\n\t/*::[*/0xFF/*::]*/: {}\n};\n\n/* [MS-OSHARED] 2.3.3.2.1.1 Summary Information Property Set PIDSI */\nvar SummaryPIDSI = {\n\t/*::[*/0x01/*::]*/: { n: 'CodePage', t: VT_I2 },\n\t/*::[*/0x02/*::]*/: { n: 'Title', t: VT_STRING },\n\t/*::[*/0x03/*::]*/: { n: 'Subject', t: VT_STRING },\n\t/*::[*/0x04/*::]*/: { n: 'Author', t: VT_STRING },\n\t/*::[*/0x05/*::]*/: { n: 'Keywords', t: VT_STRING },\n\t/*::[*/0x06/*::]*/: { n: 'Comments', t: VT_STRING },\n\t/*::[*/0x07/*::]*/: { n: 'Template', t: VT_STRING },\n\t/*::[*/0x08/*::]*/: { n: 'LastAuthor', t: VT_STRING },\n\t/*::[*/0x09/*::]*/: { n: 'RevNumber', t: VT_STRING },\n\t/*::[*/0x0A/*::]*/: { n: 'EditTime', t: VT_FILETIME },\n\t/*::[*/0x0B/*::]*/: { n: 'LastPrinted', t: VT_FILETIME },\n\t/*::[*/0x0C/*::]*/: { n: 'CreatedDate', t: VT_FILETIME },\n\t/*::[*/0x0D/*::]*/: { n: 'ModifiedDate', t: VT_FILETIME },\n\t/*::[*/0x0E/*::]*/: { n: 'PageCount', t: VT_I4 },\n\t/*::[*/0x0F/*::]*/: { n: 'WordCount', t: VT_I4 },\n\t/*::[*/0x10/*::]*/: { n: 'CharCount', t: VT_I4 },\n\t/*::[*/0x11/*::]*/: { n: 'Thumbnail', t: VT_CF },\n\t/*::[*/0x12/*::]*/: { n: 'Application', t: VT_STRING },\n\t/*::[*/0x13/*::]*/: { n: 'DocSecurity', t: VT_I4 },\n\t/*::[*/0xFF/*::]*/: {}\n};\n\n/* [MS-OLEPS] 2.18 */\nvar SpecialProperties = {\n\t/*::[*/0x80000000/*::]*/: { n: 'Locale', t: VT_UI4 },\n\t/*::[*/0x80000003/*::]*/: { n: 'Behavior', t: VT_UI4 },\n\t/*::[*/0x72627262/*::]*/: {}\n};\n\n(function() {\n\tfor(var y in SpecialProperties) if(Object.prototype.hasOwnProperty.call(SpecialProperties, y))\n\tDocSummaryPIDDSI[y] = SummaryPIDSI[y] = SpecialProperties[y];\n})();\n\nvar DocSummaryRE/*:{[key:string]:string}*/ = evert_key(DocSummaryPIDDSI, \"n\");\nvar SummaryRE/*:{[key:string]:string}*/ = evert_key(SummaryPIDSI, \"n\");\n\n/* [MS-XLS] 2.4.63 Country/Region codes */\nvar CountryEnum = {\n\t/*::[*/0x0001/*::]*/: \"US\", // United States\n\t/*::[*/0x0002/*::]*/: \"CA\", // Canada\n\t/*::[*/0x0003/*::]*/: \"\", // Latin America (except Brazil)\n\t/*::[*/0x0007/*::]*/: \"RU\", // Russia\n\t/*::[*/0x0014/*::]*/: \"EG\", // Egypt\n\t/*::[*/0x001E/*::]*/: \"GR\", // Greece\n\t/*::[*/0x001F/*::]*/: \"NL\", // Netherlands\n\t/*::[*/0x0020/*::]*/: \"BE\", // Belgium\n\t/*::[*/0x0021/*::]*/: \"FR\", // France\n\t/*::[*/0x0022/*::]*/: \"ES\", // Spain\n\t/*::[*/0x0024/*::]*/: \"HU\", // Hungary\n\t/*::[*/0x0027/*::]*/: \"IT\", // Italy\n\t/*::[*/0x0029/*::]*/: \"CH\", // Switzerland\n\t/*::[*/0x002B/*::]*/: \"AT\", // Austria\n\t/*::[*/0x002C/*::]*/: \"GB\", // United Kingdom\n\t/*::[*/0x002D/*::]*/: \"DK\", // Denmark\n\t/*::[*/0x002E/*::]*/: \"SE\", // Sweden\n\t/*::[*/0x002F/*::]*/: \"NO\", // Norway\n\t/*::[*/0x0030/*::]*/: \"PL\", // Poland\n\t/*::[*/0x0031/*::]*/: \"DE\", // Germany\n\t/*::[*/0x0034/*::]*/: \"MX\", // Mexico\n\t/*::[*/0x0037/*::]*/: \"BR\", // Brazil\n\t/*::[*/0x003d/*::]*/: \"AU\", // Australia\n\t/*::[*/0x0040/*::]*/: \"NZ\", // New Zealand\n\t/*::[*/0x0042/*::]*/: \"TH\", // Thailand\n\t/*::[*/0x0051/*::]*/: \"JP\", // Japan\n\t/*::[*/0x0052/*::]*/: \"KR\", // Korea\n\t/*::[*/0x0054/*::]*/: \"VN\", // Viet Nam\n\t/*::[*/0x0056/*::]*/: \"CN\", // China\n\t/*::[*/0x005A/*::]*/: \"TR\", // Turkey\n\t/*::[*/0x0069/*::]*/: \"JS\", // Ramastan\n\t/*::[*/0x00D5/*::]*/: \"DZ\", // Algeria\n\t/*::[*/0x00D8/*::]*/: \"MA\", // Morocco\n\t/*::[*/0x00DA/*::]*/: \"LY\", // Libya\n\t/*::[*/0x015F/*::]*/: \"PT\", // Portugal\n\t/*::[*/0x0162/*::]*/: \"IS\", // Iceland\n\t/*::[*/0x0166/*::]*/: \"FI\", // Finland\n\t/*::[*/0x01A4/*::]*/: \"CZ\", // Czech Republic\n\t/*::[*/0x0376/*::]*/: \"TW\", // Taiwan\n\t/*::[*/0x03C1/*::]*/: \"LB\", // Lebanon\n\t/*::[*/0x03C2/*::]*/: \"JO\", // Jordan\n\t/*::[*/0x03C3/*::]*/: \"SY\", // Syria\n\t/*::[*/0x03C4/*::]*/: \"IQ\", // Iraq\n\t/*::[*/0x03C5/*::]*/: \"KW\", // Kuwait\n\t/*::[*/0x03C6/*::]*/: \"SA\", // Saudi Arabia\n\t/*::[*/0x03CB/*::]*/: \"AE\", // United Arab Emirates\n\t/*::[*/0x03CC/*::]*/: \"IL\", // Israel\n\t/*::[*/0x03CE/*::]*/: \"QA\", // Qatar\n\t/*::[*/0x03D5/*::]*/: \"IR\", // Iran\n\t/*::[*/0xFFFF/*::]*/: \"US\" // United States\n};\n\n/* [MS-XLS] 2.5.127 */\nvar XLSFillPattern = [\n\tnull,\n\t'solid',\n\t'mediumGray',\n\t'darkGray',\n\t'lightGray',\n\t'darkHorizontal',\n\t'darkVertical',\n\t'darkDown',\n\t'darkUp',\n\t'darkGrid',\n\t'darkTrellis',\n\t'lightHorizontal',\n\t'lightVertical',\n\t'lightDown',\n\t'lightUp',\n\t'lightGrid',\n\t'lightTrellis',\n\t'gray125',\n\t'gray0625'\n];\n\nfunction rgbify(arr/*:Array*/)/*:Array<[number, number, number]>*/ { return arr.map(function(x) { return [(x>>16)&255,(x>>8)&255,x&255]; }); }\n\n/* [MS-XLS] 2.5.161 */\n/* [MS-XLSB] 2.5.75 Icv */\nvar _XLSIcv = rgbify([\n\t/* Color Constants */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t/* Overridable Defaults */\n\t0x000000,\n\t0xFFFFFF,\n\t0xFF0000,\n\t0x00FF00,\n\t0x0000FF,\n\t0xFFFF00,\n\t0xFF00FF,\n\t0x00FFFF,\n\n\t0x800000,\n\t0x008000,\n\t0x000080,\n\t0x808000,\n\t0x800080,\n\t0x008080,\n\t0xC0C0C0,\n\t0x808080,\n\t0x9999FF,\n\t0x993366,\n\t0xFFFFCC,\n\t0xCCFFFF,\n\t0x660066,\n\t0xFF8080,\n\t0x0066CC,\n\t0xCCCCFF,\n\n\t0x000080,\n\t0xFF00FF,\n\t0xFFFF00,\n\t0x00FFFF,\n\t0x800080,\n\t0x800000,\n\t0x008080,\n\t0x0000FF,\n\t0x00CCFF,\n\t0xCCFFFF,\n\t0xCCFFCC,\n\t0xFFFF99,\n\t0x99CCFF,\n\t0xFF99CC,\n\t0xCC99FF,\n\t0xFFCC99,\n\n\t0x3366FF,\n\t0x33CCCC,\n\t0x99CC00,\n\t0xFFCC00,\n\t0xFF9900,\n\t0xFF6600,\n\t0x666699,\n\t0x969696,\n\t0x003366,\n\t0x339966,\n\t0x003300,\n\t0x333300,\n\t0x993300,\n\t0x993366,\n\t0x333399,\n\t0x333333,\n\n\t/* Other entries to appease BIFF8/12 */\n\t0xFFFFFF, /* 0x40 icvForeground ?? */\n\t0x000000, /* 0x41 icvBackground ?? */\n\t0x000000, /* 0x42 icvFrame ?? */\n\t0x000000, /* 0x43 icv3D ?? */\n\t0x000000, /* 0x44 icv3DText ?? */\n\t0x000000, /* 0x45 icv3DHilite ?? */\n\t0x000000, /* 0x46 icv3DShadow ?? */\n\t0x000000, /* 0x47 icvHilite ?? */\n\t0x000000, /* 0x48 icvCtlText ?? */\n\t0x000000, /* 0x49 icvCtlScrl ?? */\n\t0x000000, /* 0x4A icvCtlInv ?? */\n\t0x000000, /* 0x4B icvCtlBody ?? */\n\t0x000000, /* 0x4C icvCtlFrame ?? */\n\t0x000000, /* 0x4D icvCtlFore ?? */\n\t0x000000, /* 0x4E icvCtlBack ?? */\n\t0x000000, /* 0x4F icvCtlNeutral */\n\t0x000000, /* 0x50 icvInfoBk ?? */\n\t0x000000 /* 0x51 icvInfoText ?? */\n]);\nvar XLSIcv = dup(_XLSIcv);\n\n/* [MS-XLSB] 2.5.97.2 */\nvar BErr = {\n\t/*::[*/0x00/*::]*/: \"#NULL!\",\n\t/*::[*/0x07/*::]*/: \"#DIV/0!\",\n\t/*::[*/0x0F/*::]*/: \"#VALUE!\",\n\t/*::[*/0x17/*::]*/: \"#REF!\",\n\t/*::[*/0x1D/*::]*/: \"#NAME?\",\n\t/*::[*/0x24/*::]*/: \"#NUM!\",\n\t/*::[*/0x2A/*::]*/: \"#N/A\",\n\t/*::[*/0x2B/*::]*/: \"#GETTING_DATA\",\n\t/*::[*/0xFF/*::]*/: \"#WTF?\"\n};\nvar RBErr = evert_num(BErr);\n/* Parts enumerated in OPC spec, MS-XLSB and MS-XLSX */\n/* 12.3 Part Summary */\n/* 14.2 Part Summary */\n/* [MS-XLSX] 2.1 Part Enumerations ; [MS-XLSB] 2.1.7 Part Enumeration */\nvar ct2type/*{[string]:string}*/ = ({\n\t/* Workbook */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\": \"workbooks\",\n\n\t/* Worksheet */\n\t\"application/vnd.ms-excel.binIndexWs\": \"TODO\", /* Binary Index */\n\n\t/* Macrosheet */\n\t\"application/vnd.ms-excel.intlmacrosheet\": \"TODO\",\n\t\"application/vnd.ms-excel.binIndexMs\": \"TODO\", /* Binary Index */\n\n\t/* File Properties */\n\t\"application/vnd.openxmlformats-package.core-properties+xml\": \"coreprops\",\n\t\"application/vnd.openxmlformats-officedocument.custom-properties+xml\": \"custprops\",\n\t\"application/vnd.openxmlformats-officedocument.extended-properties+xml\": \"extprops\",\n\n\t/* Custom Data Properties */\n\t\"application/vnd.openxmlformats-officedocument.customXmlProperties+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty\": \"TODO\",\n\n\t/* PivotTable */\n\t\"application/vnd.ms-excel.pivotTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml\": \"TODO\",\n\n\t/* Chart Objects */\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chart+xml\": \"TODO\",\n\n\t/* Chart Colors */\n\t\"application/vnd.ms-office.chartcolorstyle+xml\": \"TODO\",\n\n\t/* Chart Style */\n\t\"application/vnd.ms-office.chartstyle+xml\": \"TODO\",\n\n\t/* Chart Advanced */\n\t\"application/vnd.ms-office.chartex+xml\": \"TODO\",\n\n\t/* Calculation Chain */\n\t\"application/vnd.ms-excel.calcChain\": \"calcchains\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml\": \"calcchains\",\n\n\t/* Printer Settings */\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings\": \"TODO\",\n\n\t/* ActiveX */\n\t\"application/vnd.ms-office.activeX\": \"TODO\",\n\t\"application/vnd.ms-office.activeX+xml\": \"TODO\",\n\n\t/* Custom Toolbars */\n\t\"application/vnd.ms-excel.attachedToolbars\": \"TODO\",\n\n\t/* External Data Connections */\n\t\"application/vnd.ms-excel.connections\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml\": \"TODO\",\n\n\t/* External Links */\n\t\"application/vnd.ms-excel.externalLink\": \"links\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml\": \"links\",\n\n\t/* Metadata */\n\t\"application/vnd.ms-excel.sheetMetadata\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml\": \"TODO\",\n\n\t/* PivotCache */\n\t\"application/vnd.ms-excel.pivotCacheDefinition\": \"TODO\",\n\t\"application/vnd.ms-excel.pivotCacheRecords\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml\": \"TODO\",\n\n\t/* Query Table */\n\t\"application/vnd.ms-excel.queryTable\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml\": \"TODO\",\n\n\t/* Shared Workbook */\n\t\"application/vnd.ms-excel.userNames\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionHeaders\": \"TODO\",\n\t\"application/vnd.ms-excel.revisionLog\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml\": \"TODO\",\n\n\t/* Single Cell Table */\n\t\"application/vnd.ms-excel.tableSingleCells\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml\": \"TODO\",\n\n\t/* Slicer */\n\t\"application/vnd.ms-excel.slicer\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache\": \"TODO\",\n\t\"application/vnd.ms-excel.slicer+xml\": \"TODO\",\n\t\"application/vnd.ms-excel.slicerCache+xml\": \"TODO\",\n\n\t/* Sort Map */\n\t\"application/vnd.ms-excel.wsSortMap\": \"TODO\",\n\n\t/* Table */\n\t\"application/vnd.ms-excel.table\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml\": \"TODO\",\n\n\t/* Themes */\n\t\"application/vnd.openxmlformats-officedocument.theme+xml\": \"themes\",\n\n\t/* Theme Override */\n\t\"application/vnd.openxmlformats-officedocument.themeOverride+xml\": \"TODO\",\n\n\t/* Timeline */\n\t\"application/vnd.ms-excel.Timeline+xml\": \"TODO\", /* verify */\n\t\"application/vnd.ms-excel.TimelineCache+xml\": \"TODO\", /* verify */\n\n\t/* VBA */\n\t\"application/vnd.ms-office.vbaProject\": \"vba\",\n\t\"application/vnd.ms-office.vbaProjectSignature\": \"vba\",\n\n\t/* Volatile Dependencies */\n\t\"application/vnd.ms-office.volatileDependencies\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml\": \"TODO\",\n\n\t/* Control Properties */\n\t\"application/vnd.ms-excel.controlproperties+xml\": \"TODO\",\n\n\t/* Data Model */\n\t\"application/vnd.openxmlformats-officedocument.model+data\": \"TODO\",\n\n\t/* Survey */\n\t\"application/vnd.ms-excel.Survey+xml\": \"TODO\",\n\n\t/* Drawing */\n\t\"application/vnd.openxmlformats-officedocument.drawing+xml\": \"drawings\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml\": \"TODO\",\n\t\"application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml\": \"TODO\",\n\n\t/* VML */\n\t\"application/vnd.openxmlformats-officedocument.vmlDrawing\": \"TODO\",\n\n\t\"application/vnd.openxmlformats-package.relationships+xml\": \"rels\",\n\t\"application/vnd.openxmlformats-officedocument.oleObject\": \"TODO\",\n\n\t/* Image */\n\t\"image/png\": \"TODO\",\n\n\t\"sheet\": \"js\"\n}/*:any*/);\n\nvar CT_LIST = (function(){\n\tvar o = {\n\t\tworkbooks: {\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\",\n\t\t\txlsm: \"application/vnd.ms-excel.sheet.macroEnabled.main+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sheet.binary.macroEnabled.main\",\n\t\t\txlam: \"application/vnd.ms-excel.addin.macroEnabled.main+xml\",\n\t\t\txltx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml\"\n\t\t},\n\t\tstrs: { /* Shared Strings */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.sharedStrings\"\n\t\t},\n\t\tcomments: { /* Comments */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.comments\"\n\t\t},\n\t\tsheets: { /* Worksheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.worksheet\"\n\t\t},\n\t\tcharts: { /* Chartsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.chartsheet\"\n\t\t},\n\t\tdialogs: { /* Dialogsheet */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.dialogsheet\"\n\t\t},\n\t\tmacros: { /* Macrosheet (Excel 4.0 Macros) */\n\t\t\txlsx: \"application/vnd.ms-excel.macrosheet+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.macrosheet\"\n\t\t},\n\t\tstyles: { /* Styles */\n\t\t\txlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\",\n\t\t\txlsb: \"application/vnd.ms-excel.styles\"\n\t\t}\n\t};\n\tkeys(o).forEach(function(k) { [\"xlsm\", \"xlam\"].forEach(function(v) { if(!o[k][v]) o[k][v] = o[k].xlsx; }); });\n\tkeys(o).forEach(function(k){ keys(o[k]).forEach(function(v) { ct2type[o[k][v]] = k; }); });\n\treturn o;\n})();\n\nvar type2ct/*{[string]:Array}*/ = evert_arr(ct2type);\n\nXMLNS.CT = 'http://schemas.openxmlformats.org/package/2006/content-types';\n\nfunction new_ct()/*:any*/ {\n\treturn ({\n\t\tworkbooks:[], sheets:[], charts:[], dialogs:[], macros:[],\n\t\trels:[], strs:[], comments:[], links:[],\n\t\tcoreprops:[], extprops:[], custprops:[], themes:[], styles:[],\n\t\tcalcchains:[], vba: [], drawings: [],\n\t\tTODO:[], xmlns: \"\" }/*:any*/);\n}\n\nfunction parse_ct(data/*:?string*/) {\n\tvar ct = new_ct();\n\tif(!data || !data.match) return ct;\n\tvar ctext = {};\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0].replace(nsregex,\"<\")) {\n\t\t\tcase ' 0 ? ct.calcchains[0] : \"\";\n\tct.sst = ct.strs.length > 0 ? ct.strs[0] : \"\";\n\tct.style = ct.styles.length > 0 ? ct.styles[0] : \"\";\n\tct.defaults = ctext;\n\tdelete ct.calcchains;\n\treturn ct;\n}\n\nvar CTYPE_XML_ROOT = writextag('Types', null, {\n\t'xmlns': XMLNS.CT,\n\t'xmlns:xsd': XMLNS.xsd,\n\t'xmlns:xsi': XMLNS.xsi\n});\n\nvar CTYPE_DEFAULTS = [\n\t['xml', 'application/xml'],\n\t['bin', 'application/vnd.ms-excel.sheet.binary.macroEnabled.main'],\n\t['vml', 'application/vnd.openxmlformats-officedocument.vmlDrawing'],\n\t['data', 'application/vnd.openxmlformats-officedocument.model+data'],\n\t/* from test files */\n\t['bmp', 'image/bmp'],\n\t['png', 'image/png'],\n\t['gif', 'image/gif'],\n\t['emf', 'image/x-emf'],\n\t['wmf', 'image/x-wmf'],\n\t['jpg', 'image/jpeg'], ['jpeg', 'image/jpeg'],\n\t['tif', 'image/tiff'], ['tiff', 'image/tiff'],\n\t['pdf', 'application/pdf'],\n\t['rels', type2ct.rels[0]]\n].map(function(x) {\n\treturn writextag('Default', null, {'Extension':x[0], 'ContentType': x[1]});\n});\n\nfunction write_ct(ct, opts)/*:string*/ {\n\tvar o/*:Array*/ = [], v;\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (CTYPE_XML_ROOT);\n\to = o.concat(CTYPE_DEFAULTS);\n\n\t/* only write first instance */\n\tvar f1 = function(w) {\n\t\tif(ct[w] && ct[w].length > 0) {\n\t\t\tv = ct[w][0];\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n\t\t\t}));\n\t\t}\n\t};\n\n\t/* book type-specific */\n\tvar f2 = function(w) {\n\t\t(ct[w]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': CT_LIST[w][opts.bookType || 'xlsx']\n\t\t\t}));\n\t\t});\n\t};\n\n\t/* standard type */\n\tvar f3 = function(t) {\n\t\t(ct[t]||[]).forEach(function(v) {\n\t\t\to[o.length] = (writextag('Override', null, {\n\t\t\t\t'PartName': (v[0] == '/' ? \"\":\"/\") + v,\n\t\t\t\t'ContentType': type2ct[t][0]\n\t\t\t}));\n\t\t});\n\t};\n\n\tf1('workbooks');\n\tf2('sheets');\n\tf2('charts');\n\tf3('themes');\n\t['strs', 'styles'].forEach(f1);\n\t['coreprops', 'extprops', 'custprops'].forEach(f3);\n\tf3('vba');\n\tf3('comments');\n\tf3('drawings');\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 9.3 Relationships */\nvar RELS = ({\n\tWB: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tSHEET: \"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument\",\n\tHLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\",\n\tVML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing\",\n\tXPATH: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLinkPath\",\n\tXMISS: \"http://schemas.microsoft.com/office/2006/relationships/xlExternalLinkPath/xlPathMissing\",\n\tXLINK: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/externalLink\",\n\tCXML: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXml\",\n\tCXMLP: \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/customXmlProps\",\n\tVBA: \"http://schemas.microsoft.com/office/2006/relationships/vbaProject\"\n}/*:any*/);\n\n/* 9.3.3 Representing Relationships */\nfunction get_rels_path(file/*:string*/)/*:string*/ {\n\tvar n = file.lastIndexOf(\"/\");\n\treturn file.slice(0,n+1) + '_rels/' + file.slice(n+1) + \".rels\";\n}\n\nfunction parse_rels(data/*:?string*/, currentFilePath/*:string*/) {\n\tvar rels = {\"!id\":{}};\n\tif (!data) return rels;\n\tif (currentFilePath.charAt(0) !== '/') {\n\t\tcurrentFilePath = '/'+currentFilePath;\n\t}\n\tvar hash = {};\n\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\t/* 9.3.2.2 OPC_Relationships */\n\t\tif (y[0] === '2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\nvar RELS_EXTERN = [RELS.HLINK, RELS.XPATH, RELS.XMISS];\nfunction add_rels(rels, rId/*:number*/, f, type, relobj, targetmode/*:?string*/)/*:number*/ {\n\tif(!relobj) relobj = {};\n\tif(!rels['!id']) rels['!id'] = {};\n\tif(rId < 0) for(rId = 1; rels['!id']['rId' + rId]; ++rId){/* empty */}\n\trelobj.Id = 'rId' + rId;\n\trelobj.Type = type;\n\trelobj.Target = f;\n\tif(targetmode) relobj.TargetMode = targetmode;\n\telse if(RELS_EXTERN.indexOf(relobj.Type) > -1) relobj.TargetMode = \"External\";\n\tif(rels['!id'][relobj.Id]) throw new Error(\"Cannot rewrite rId \" + rId);\n\trels['!id'][relobj.Id] = relobj;\n\trels[('/' + relobj.Target).replace(\"//\",\"/\")] = relobj;\n\treturn rId;\n}\n/* Open Document Format for Office Applications (OpenDocument) Version 1.2 */\n/* Part 3 Section 4 Manifest File */\nvar CT_ODS = \"application/vnd.oasis.opendocument.spreadsheet\";\nfunction parse_manifest(d, opts) {\n\tvar str = xlml_normalize(d);\n\tvar Rn;\n\tvar FEtag;\n\twhile((Rn = xlmlregex.exec(str))) switch(Rn[3]) {\n\t\tcase 'manifest': break; // 4.2 \n\t\tcase 'file-entry': // 4.3 \n\t\t\tFEtag = parsexmltag(Rn[0], false);\n\t\t\tif(FEtag.path == '/' && FEtag.type !== CT_ODS) throw new Error(\"This OpenDocument is not a spreadsheet\");\n\t\t\tbreak;\n\t\tcase 'encryption-data': // 4.4 \n\t\tcase 'algorithm': // 4.5 \n\t\tcase 'start-key-generation': // 4.6 \n\t\tcase 'key-derivation': // 4.7 \n\t\t\tthrow new Error(\"Unsupported ODS Encryption\");\n\t\tdefault: if(opts && opts.WTF) throw Rn;\n\t}\n}\n\nfunction write_manifest(manifest/*:Array >*/)/*:string*/ {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\to.push(' \\n');\n\tfor(var i = 0; i < manifest.length; ++i) o.push(' \\n');\n\to.push('');\n\treturn o.join(\"\");\n}\n\n/* Part 3 Section 6 Metadata Manifest File */\nfunction write_rdf_type(file/*:string*/, res/*:string*/, tag/*:?string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf_has(base/*:string*/, file/*:string*/) {\n\treturn [\n\t\t' \\n',\n\t\t' \\n',\n\t\t' \\n'\n\t].join(\"\");\n}\nfunction write_rdf(rdf) {\n\tvar o = [XML_HEADER];\n\to.push('\\n');\n\tfor(var i = 0; i != rdf.length; ++i) {\n\t\to.push(write_rdf_type(rdf[i][0], rdf[i][1]));\n\t\to.push(write_rdf_has(\"\",rdf[i][0]));\n\t}\n\to.push(write_rdf_type(\"\",\"Document\", \"pkg\"));\n\to.push('');\n\treturn o.join(\"\");\n}\n/* TODO: pull properties */\nvar write_meta_ods/*:{(wb:Workbook, opts:any):string}*/ = (function() {\n\tvar payload = 'Sheet' + 'JS ' + XLSX.version + '';\n\treturn function wmo(/*:: wb: Workbook, opts: any*/)/*:string*/ {\n\t\treturn payload;\n\t};\n})();\n\n/* ECMA-376 Part II 11.1 Core Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar CORE_PROPS/*:Array >*/ = [\n\t[\"cp:category\", \"Category\"],\n\t[\"cp:contentStatus\", \"ContentStatus\"],\n\t[\"cp:keywords\", \"Keywords\"],\n\t[\"cp:lastModifiedBy\", \"LastAuthor\"],\n\t[\"cp:lastPrinted\", \"LastPrinted\"],\n\t[\"cp:revision\", \"RevNumber\"],\n\t[\"cp:version\", \"Version\"],\n\t[\"dc:creator\", \"Author\"],\n\t[\"dc:description\", \"Comments\"],\n\t[\"dc:identifier\", \"Identifier\"],\n\t[\"dc:language\", \"Language\"],\n\t[\"dc:subject\", \"Subject\"],\n\t[\"dc:title\", \"Title\"],\n\t[\"dcterms:created\", \"CreatedDate\", 'date'],\n\t[\"dcterms:modified\", \"ModifiedDate\", 'date']\n];\n\nXMLNS.CORE_PROPS = \"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\";\nRELS.CORE_PROPS = 'http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties';\n\nvar CORE_PROPS_REGEX/*:Array*/ = (function() {\n\tvar r = new Array(CORE_PROPS.length);\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar g = \"(?:\"+ f[0].slice(0,f[0].indexOf(\":\")) +\":)\"+ f[0].slice(f[0].indexOf(\":\")+1);\n\t\tr[i] = new RegExp(\"<\" + g + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + g + \">\");\n\t}\n\treturn r;\n})();\n\nfunction parse_core_props(data) {\n\tvar p = {};\n\tdata = utf8read(data);\n\n\tfor(var i = 0; i < CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i], cur = data.match(CORE_PROPS_REGEX[i]);\n\t\tif(cur != null && cur.length > 0) p[f[1]] = unescapexml(cur[1]);\n\t\tif(f[2] === 'date' && p[f[1]]) p[f[1]] = parseDate(p[f[1]]);\n\t}\n\n\treturn p;\n}\n\nvar CORE_PROPS_XML_ROOT = writextag('cp:coreProperties', null, {\n\t//'xmlns': XMLNS.CORE_PROPS,\n\t'xmlns:cp': XMLNS.CORE_PROPS,\n\t'xmlns:dc': XMLNS.dc,\n\t'xmlns:dcterms': XMLNS.dcterms,\n\t'xmlns:dcmitype': XMLNS.dcmitype,\n\t'xmlns:xsi': XMLNS.xsi\n});\n\nfunction cp_doit(f, g, h, o, p) {\n\tif(p[f] != null || g == null || g === \"\") return;\n\tp[f] = g;\n\tg = escapexml(g);\n\to[o.length] = (h ? writextag(f,g,h) : writetag(f,g));\n}\n\nfunction write_core_props(cp, _opts) {\n\tvar opts = _opts || {};\n\tvar o = [XML_HEADER, CORE_PROPS_XML_ROOT], p = {};\n\tif(!cp && !opts.Props) return o.join(\"\");\n\n\tif(cp) {\n\t\tif(cp.CreatedDate != null) cp_doit(\"dcterms:created\", typeof cp.CreatedDate === \"string\" ? cp.CreatedDate : write_w3cdtf(cp.CreatedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t\tif(cp.ModifiedDate != null) cp_doit(\"dcterms:modified\", typeof cp.ModifiedDate === \"string\" ? cp.ModifiedDate : write_w3cdtf(cp.ModifiedDate, opts.WTF), {\"xsi:type\":\"dcterms:W3CDTF\"}, o, p);\n\t}\n\n\tfor(var i = 0; i != CORE_PROPS.length; ++i) {\n\t\tvar f = CORE_PROPS[i];\n\t\tvar v = opts.Props && opts.Props[f[1]] != null ? opts.Props[f[1]] : cp ? cp[f[1]] : null;\n\t\tif(v === true) v = \"1\";\n\t\telse if(v === false) v = \"0\";\n\t\telse if(typeof v == \"number\") v = String(v);\n\t\tif(v != null) cp_doit(f[0], v, null, o, p);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.3 Extended File Properties Part */\n/* [MS-OSHARED] 2.3.3.2.[1-2].1 (PIDSI/PIDDSI) */\nvar EXT_PROPS/*:Array >*/ = [\n\t[\"Application\", \"Application\", \"string\"],\n\t[\"AppVersion\", \"AppVersion\", \"string\"],\n\t[\"Company\", \"Company\", \"string\"],\n\t[\"DocSecurity\", \"DocSecurity\", \"string\"],\n\t[\"Manager\", \"Manager\", \"string\"],\n\t[\"HyperlinksChanged\", \"HyperlinksChanged\", \"bool\"],\n\t[\"SharedDoc\", \"SharedDoc\", \"bool\"],\n\t[\"LinksUpToDate\", \"LinksUpToDate\", \"bool\"],\n\t[\"ScaleCrop\", \"ScaleCrop\", \"bool\"],\n\t[\"HeadingPairs\", \"HeadingPairs\", \"raw\"],\n\t[\"TitlesOfParts\", \"TitlesOfParts\", \"raw\"]\n];\n\nXMLNS.EXT_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\";\nRELS.EXT_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties';\n\nvar PseudoPropsPairs = [\n\t\"Worksheets\", \"SheetNames\",\n\t\"NamedRanges\", \"DefinedNames\",\n\t\"Chartsheets\", \"ChartNames\"\n];\nfunction load_props_pairs(HP/*:string|Array>*/, TOP, props, opts) {\n\tvar v = [];\n\tif(typeof HP == \"string\") v = parseVector(HP, opts);\n\telse for(var j = 0; j < HP.length; ++j) v = v.concat(HP[j].map(function(hp) { return {v:hp}; }));\n\tvar parts = (typeof TOP == \"string\") ? parseVector(TOP, opts).map(function (x) { return x.v; }) : TOP;\n\tvar idx = 0, len = 0;\n\tif(parts.length > 0) for(var i = 0; i !== v.length; i += 2) {\n\t\tlen = +(v[i+1].v);\n\t\tswitch(v[i].v) {\n\t\t\tcase \"Worksheets\":\n\t\t\tcase \"工作表\":\n\t\t\tcase \"Листы\":\n\t\t\tcase \"أوراق العمل\":\n\t\t\tcase \"ワークシート\":\n\t\t\tcase \"גליונות עבודה\":\n\t\t\tcase \"Arbeitsblätter\":\n\t\t\tcase \"Çalışma Sayfaları\":\n\t\t\tcase \"Feuilles de calcul\":\n\t\t\tcase \"Fogli di lavoro\":\n\t\t\tcase \"Folhas de cálculo\":\n\t\t\tcase \"Planilhas\":\n\t\t\tcase \"Regneark\":\n\t\t\tcase \"Hojas de cálculo\":\n\t\t\tcase \"Werkbladen\":\n\t\t\t\tprops.Worksheets = len;\n\t\t\t\tprops.SheetNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Named Ranges\":\n\t\t\tcase \"Rangos con nombre\":\n\t\t\tcase \"名前付き一覧\":\n\t\t\tcase \"Benannte Bereiche\":\n\t\t\tcase \"Navngivne områder\":\n\t\t\t\tprops.NamedRanges = len;\n\t\t\t\tprops.DefinedNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\n\t\t\tcase \"Charts\":\n\t\t\tcase \"Diagramme\":\n\t\t\t\tprops.Chartsheets = len;\n\t\t\t\tprops.ChartNames = parts.slice(idx, idx + len);\n\t\t\t\tbreak;\n\t\t}\n\t\tidx += len;\n\t}\n}\n\nfunction parse_ext_props(data, p, opts) {\n\tvar q = {}; if(!p) p = {};\n\tdata = utf8read(data);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tvar xml = (data.match(matchtag(f[0]))||[])[1];\n\t\tswitch(f[2]) {\n\t\t\tcase \"string\": if(xml) p[f[1]] = unescapexml(xml); break;\n\t\t\tcase \"bool\": p[f[1]] = xml === \"true\"; break;\n\t\t\tcase \"raw\":\n\t\t\t\tvar cur = data.match(new RegExp(\"<\" + f[0] + \"[^>]*>([\\\\s\\\\S]*?)<\\/\" + f[0] + \">\"));\n\t\t\t\tif(cur && cur.length > 0) q[f[1]] = cur[1];\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tif(q.HeadingPairs && q.TitlesOfParts) load_props_pairs(q.HeadingPairs, q.TitlesOfParts, p, opts);\n\n\treturn p;\n}\n\nvar EXT_PROPS_XML_ROOT = writextag('Properties', null, {\n\t'xmlns': XMLNS.EXT_PROPS,\n\t'xmlns:vt': XMLNS.vt\n});\n\nfunction write_ext_props(cp/*::, opts*/)/*:string*/ {\n\tvar o/*:Array*/ = [], W = writextag;\n\tif(!cp) cp = {};\n\tcp.Application = \"SheetJS\";\n\to[o.length] = (XML_HEADER);\n\to[o.length] = (EXT_PROPS_XML_ROOT);\n\n\tEXT_PROPS.forEach(function(f) {\n\t\tif(cp[f[1]] === undefined) return;\n\t\tvar v;\n\t\tswitch(f[2]) {\n\t\t\tcase 'string': v = escapexml(String(cp[f[1]])); break;\n\t\t\tcase 'bool': v = cp[f[1]] ? 'true' : 'false'; break;\n\t\t}\n\t\tif(v !== undefined) o[o.length] = (W(f[0], v));\n\t});\n\n\t/* TODO: HeadingPairs, TitlesOfParts */\n\to[o.length] = (W('HeadingPairs', W('vt:vector', W('vt:variant', 'Worksheets')+W('vt:variant', W('vt:i4', String(cp.Worksheets))), {size:2, baseType:\"variant\"})));\n\to[o.length] = (W('TitlesOfParts', W('vt:vector', cp.SheetNames.map(function(s) { return \"\" + escapexml(s) + \"\"; }).join(\"\"), {size: cp.Worksheets, baseType:\"lpstr\"})));\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* 15.2.12.2 Custom File Properties Part */\nXMLNS.CUST_PROPS = \"http://schemas.openxmlformats.org/officeDocument/2006/custom-properties\";\nRELS.CUST_PROPS = 'http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties';\n\nvar custregex = /<[^>]+>[^<]*/g;\nfunction parse_cust_props(data/*:string*/, opts) {\n\tvar p = {}, name = \"\";\n\tvar m = data.match(custregex);\n\tif(m) for(var i = 0; i != m.length; ++i) {\n\t\tvar x = m[i], y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': name = null; break;\n\t\t\tdefault: if (x.indexOf('');\n\t\t\t\tvar type = toks[0].slice(4), text = toks[1];\n\t\t\t\t/* 22.4.2.32 (CT_Variant). Omit the binary types from 22.4 (Variant Types) */\n\t\t\t\tswitch(type) {\n\t\t\t\t\tcase 'lpstr': case 'bstr': case 'lpwstr':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'bool':\n\t\t\t\t\t\tp[name] = parsexmlbool(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'i1': case 'i2': case 'i4': case 'i8': case 'int': case 'uint':\n\t\t\t\t\t\tp[name] = parseInt(text, 10);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'r4': case 'r8': case 'decimal':\n\t\t\t\t\t\tp[name] = parseFloat(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'filetime': case 'date':\n\t\t\t\t\t\tp[name] = parseDate(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'cy': case 'error':\n\t\t\t\t\t\tp[name] = unescapexml(text);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif(type.slice(-1) == '/') break;\n\t\t\t\t\t\tif(opts.WTF && typeof console !== 'undefined') console.warn('Unexpected', x, type, toks);\n\t\t\t\t}\n\t\t\t} else if(x.slice(0,2) === \"\") {/* empty */\n\t\t\t} else if(opts.WTF) throw new Error(x);\n\t\t}\n\t}\n\treturn p;\n}\n\nvar CUST_PROPS_XML_ROOT = writextag('Properties', null, {\n\t'xmlns': XMLNS.CUST_PROPS,\n\t'xmlns:vt': XMLNS.vt\n});\n\nfunction write_cust_props(cp/*::, opts*/)/*:string*/ {\n\tvar o = [XML_HEADER, CUST_PROPS_XML_ROOT];\n\tif(!cp) return o.join(\"\");\n\tvar pid = 1;\n\tkeys(cp).forEach(function custprop(k) { ++pid;\n\t\to[o.length] = (writextag('property', write_vt(cp[k], true), {\n\t\t\t'fmtid': '{D5CDD505-2E9C-101B-9397-08002B2CF9AE}',\n\t\t\t'pid': pid,\n\t\t\t'name': escapexml(k)\n\t\t}));\n\t});\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* Common Name -> XLML Name */\nvar XLMLDocPropsMap = {\n\tTitle: 'Title',\n\tSubject: 'Subject',\n\tAuthor: 'Author',\n\tKeywords: 'Keywords',\n\tComments: 'Description',\n\tLastAuthor: 'LastAuthor',\n\tRevNumber: 'Revision',\n\tApplication: 'AppName',\n\t/* TotalTime: 'TotalTime', */\n\tLastPrinted: 'LastPrinted',\n\tCreatedDate: 'Created',\n\tModifiedDate: 'LastSaved',\n\t/* Pages */\n\t/* Words */\n\t/* Characters */\n\tCategory: 'Category',\n\t/* PresentationFormat */\n\tManager: 'Manager',\n\tCompany: 'Company',\n\t/* Guid */\n\t/* HyperlinkBase */\n\t/* Bytes */\n\t/* Lines */\n\t/* Paragraphs */\n\t/* CharactersWithSpaces */\n\tAppVersion: 'Version',\n\n\tContentStatus: 'ContentStatus', /* NOTE: missing from schema */\n\tIdentifier: 'Identifier', /* NOTE: missing from schema */\n\tLanguage: 'Language' /* NOTE: missing from schema */\n};\nvar evert_XLMLDPM = evert(XLMLDocPropsMap);\n\nfunction xlml_set_prop(Props, tag/*:string*/, val) {\n\ttag = evert_XLMLDPM[tag] || tag;\n\tProps[tag] = val;\n}\n\nfunction xlml_write_docprops(Props, opts) {\n\tvar o/*:Array*/ = [];\n\tkeys(XLMLDocPropsMap).map(function(m) {\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(CORE_PROPS[i][1] == m) return CORE_PROPS[i];\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(EXT_PROPS[i][1] == m) return EXT_PROPS[i];\n\t\tthrow m;\n\t}).forEach(function(p) {\n\t\tif(Props[p[1]] == null) return;\n\t\tvar m = opts && opts.Props && opts.Props[p[1]] != null ? opts.Props[p[1]] : Props[p[1]];\n\t\tswitch(p[2]) {\n\t\t\tcase 'date': m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"Z\"); break;\n\t\t}\n\t\tif(typeof m == 'number') m = String(m);\n\t\telse if(m === true || m === false) { m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) m = new Date(m).toISOString().replace(/\\.\\d*Z/,\"\");\n\t\to.push(writetag(XLMLDocPropsMap[p[1]] || p[1], m));\n\t});\n\treturn writextag('DocumentProperties', o.join(\"\"), {xmlns:XLMLNS.o });\n}\nfunction xlml_write_custprops(Props, Custprops/*::, opts*/) {\n\tvar BLACKLIST = [\"Worksheets\",\"SheetNames\"];\n\tvar T = 'CustomDocumentProperties';\n\tvar o/*:Array*/ = [];\n\tif(Props) keys(Props).forEach(function(k) {\n\t\t/*:: if(!Props) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tfor(var i = 0; i < CORE_PROPS.length; ++i) if(k == CORE_PROPS[i][1]) return;\n\t\tfor(i = 0; i < EXT_PROPS.length; ++i) if(k == EXT_PROPS[i][1]) return;\n\t\tfor(i = 0; i < BLACKLIST.length; ++i) if(k == BLACKLIST[i]) return;\n\n\t\tvar m = Props[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\tif(Custprops) keys(Custprops).forEach(function(k) {\n\t\t/*:: if(!Custprops) return; */\n\t\tif(!Object.prototype.hasOwnProperty.call(Custprops, k)) return;\n\t\tif(Props && Object.prototype.hasOwnProperty.call(Props, k)) return;\n\t\tvar m = Custprops[k];\n\t\tvar t = \"string\";\n\t\tif(typeof m == 'number') { t = \"float\"; m = String(m); }\n\t\telse if(m === true || m === false) { t = \"boolean\"; m = m ? \"1\" : \"0\"; }\n\t\telse if(m instanceof Date) { t = \"dateTime.tz\"; m = m.toISOString(); }\n\t\telse m = String(m);\n\t\to.push(writextag(escapexmltag(k), m, {\"dt:dt\":t}));\n\t});\n\treturn '<' + T + ' xmlns=\"' + XLMLNS.o + '\">' + o.join(\"\") + '' + T + '>';\n}\n/* [MS-DTYP] 2.3.3 FILETIME */\n/* [MS-OLEDS] 2.1.3 FILETIME (Packet Version) */\n/* [MS-OLEPS] 2.8 FILETIME (Packet Version) */\nfunction parse_FILETIME(blob) {\n\tvar dwLowDateTime = blob.read_shift(4), dwHighDateTime = blob.read_shift(4);\n\treturn new Date(((dwHighDateTime/1e7*Math.pow(2,32) + dwLowDateTime/1e7) - 11644473600)*1000).toISOString().replace(/\\.000/,\"\");\n}\nfunction write_FILETIME(time/*:string|Date*/) {\n\tvar date = (typeof time == \"string\") ? new Date(Date.parse(time)) : time;\n\tvar t = date.getTime() / 1000 + 11644473600;\n\tvar l = t % Math.pow(2,32), h = (t - l) / Math.pow(2,32);\n\tl *= 1e7; h *= 1e7;\n\tvar w = (l / Math.pow(2,32)) | 0;\n\tif(w > 0) { l = l % Math.pow(2,32); h += w; }\n\tvar o = new_buf(8); o.write_shift(4, l); o.write_shift(4, h); return o;\n}\n\n/* [MS-OSHARED] 2.3.3.1.4 Lpstr */\nfunction parse_lpstr(blob, type, pad/*:?number*/) {\n\tvar start = blob.l;\n\tvar str = blob.read_shift(0, 'lpstr-cp');\n\tif(pad) while((blob.l - start) & 3) ++blob.l;\n\treturn str;\n}\n\n/* [MS-OSHARED] 2.3.3.1.6 Lpwstr */\nfunction parse_lpwstr(blob, type, pad) {\n\tvar str = blob.read_shift(0, 'lpwstr');\n\tif(pad) blob.l += (4 - ((str.length+1) & 3)) & 3;\n\treturn str;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.11 VtString */\n/* [MS-OSHARED] 2.3.3.1.12 VtUnalignedString */\nfunction parse_VtStringBase(blob, stringType, pad) {\n\tif(stringType === 0x1F /*VT_LPWSTR*/) return parse_lpwstr(blob);\n\treturn parse_lpstr(blob, stringType, pad);\n}\n\nfunction parse_VtString(blob, t/*:number*/, pad/*:?boolean*/) { return parse_VtStringBase(blob, t, pad === false ? 0: 4); }\nfunction parse_VtUnalignedString(blob, t/*:number*/) { if(!t) throw new Error(\"VtUnalignedString must have positive length\"); return parse_VtStringBase(blob, t, 0); }\n\n/* [MS-OSHARED] 2.3.3.1.7 VtVecLpwstrValue */\nfunction parse_VtVecLpwstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) {\n\t\tvar start = blob.l;\n\t\tret[i] = blob.read_shift(0, 'lpwstr').replace(chr0,'');\n\t\tif((blob.l - start) & 0x02) blob.l += 2;\n\t}\n\treturn ret;\n}\n\n/* [MS-OSHARED] 2.3.3.1.9 VtVecUnalignedLpstrValue */\nfunction parse_VtVecUnalignedLpstrValue(blob)/*:Array*/ {\n\tvar length = blob.read_shift(4);\n\tvar ret/*:Array*/ = [];\n\tfor(var i = 0; i != length; ++i) ret[i] = blob.read_shift(0, 'lpstr-cp').replace(chr0,'');\n\treturn ret;\n}\n\n\n/* [MS-OSHARED] 2.3.3.1.13 VtHeadingPair */\nfunction parse_VtHeadingPair(blob) {\n\tvar start = blob.l;\n\tvar headingString = parse_TypedPropertyValue(blob, VT_USTR);\n\tif(blob[blob.l] == 0x00 && blob[blob.l+1] == 0x00 && ((blob.l - start) & 0x02)) blob.l += 2;\n\tvar headerParts = parse_TypedPropertyValue(blob, VT_I4);\n\treturn [headingString, headerParts];\n}\n\n/* [MS-OSHARED] 2.3.3.1.14 VtVecHeadingPairValue */\nfunction parse_VtVecHeadingPairValue(blob) {\n\tvar cElements = blob.read_shift(4);\n\tvar out = [];\n\tfor(var i = 0; i < cElements / 2; ++i) out.push(parse_VtHeadingPair(blob));\n\treturn out;\n}\n\n/* [MS-OLEPS] 2.18.1 Dictionary (uses 2.17, 2.16) */\nfunction parse_dictionary(blob,CodePage) {\n\tvar cnt = blob.read_shift(4);\n\tvar dict/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(var j = 0; j != cnt; ++j) {\n\t\tvar pid = blob.read_shift(4);\n\t\tvar len = blob.read_shift(4);\n\t\tdict[pid] = blob.read_shift(len, (CodePage === 0x4B0 ?'utf16le':'utf8')).replace(chr0,'').replace(chr1,'!');\n\t\tif(CodePage === 0x4B0 && (len % 2)) blob.l += 2;\n\t}\n\tif(blob.l & 3) blob.l = (blob.l>>2+1)<<2;\n\treturn dict;\n}\n\n/* [MS-OLEPS] 2.9 BLOB */\nfunction parse_BLOB(blob) {\n\tvar size = blob.read_shift(4);\n\tvar bytes = blob.slice(blob.l,blob.l+size);\n\tblob.l += size;\n\tif((size & 3) > 0) blob.l += (4 - (size & 3)) & 3;\n\treturn bytes;\n}\n\n/* [MS-OLEPS] 2.11 ClipboardData */\nfunction parse_ClipboardData(blob) {\n\t// TODO\n\tvar o = {};\n\to.Size = blob.read_shift(4);\n\t//o.Format = blob.read_shift(4);\n\tblob.l += o.Size + 3 - (o.Size - 1) % 4;\n\treturn o;\n}\n\n/* [MS-OLEPS] 2.15 TypedPropertyValue */\nfunction parse_TypedPropertyValue(blob, type/*:number*/, _opts)/*:any*/ {\n\tvar t = blob.read_shift(2), ret, opts = _opts||{};\n\tblob.l += 2;\n\tif(type !== VT_VARIANT)\n\tif(t !== type && VT_CUSTOM.indexOf(type)===-1 && !((type & 0xFFFE) == 0x101E && (t & 0xFFFE) == 0x101E)) throw new Error('Expected type ' + type + ' saw ' + t);\n\tswitch(type === VT_VARIANT ? t : type) {\n\t\tcase 0x02 /*VT_I2*/: ret = blob.read_shift(2, 'i'); if(!opts.raw) blob.l += 2; return ret;\n\t\tcase 0x03 /*VT_I4*/: ret = blob.read_shift(4, 'i'); return ret;\n\t\tcase 0x0B /*VT_BOOL*/: return blob.read_shift(4) !== 0x0;\n\t\tcase 0x13 /*VT_UI4*/: ret = blob.read_shift(4); return ret;\n\t\tcase 0x1E /*VT_LPSTR*/: return parse_lpstr(blob, t, 4).replace(chr0,'');\n\t\tcase 0x1F /*VT_LPWSTR*/: return parse_lpwstr(blob);\n\t\tcase 0x40 /*VT_FILETIME*/: return parse_FILETIME(blob);\n\t\tcase 0x41 /*VT_BLOB*/: return parse_BLOB(blob);\n\t\tcase 0x47 /*VT_CF*/: return parse_ClipboardData(blob);\n\t\tcase 0x50 /*VT_STRING*/: return parse_VtString(blob, t, !opts.raw).replace(chr0,'');\n\t\tcase 0x51 /*VT_USTR*/: return parse_VtUnalignedString(blob, t/*, 4*/).replace(chr0,'');\n\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: return parse_VtVecHeadingPairValue(blob);\n\t\tcase 0x101E /*VT_VECTOR|VT_LPSTR*/:\n\t\tcase 0x101F /*VT_VECTOR|VT_LPWSTR*/:\n\t\t\treturn t == 0x101F ? parse_VtVecLpwstrValue(blob) : parse_VtVecUnalignedLpstrValue(blob);\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + t);\n\t}\n}\nfunction write_TypedPropertyValue(type/*:number*/, value) {\n\tvar o = new_buf(4), p = new_buf(4);\n\to.write_shift(4, type == 0x50 ? 0x1F : type);\n\tswitch(type) {\n\t\tcase 0x03 /*VT_I4*/: p.write_shift(-4, value); break;\n\t\tcase 0x05 /*VT_I4*/: p = new_buf(8); p.write_shift(8, value, 'f'); break;\n\t\tcase 0x0B /*VT_BOOL*/: p.write_shift(4, value ? 0x01 : 0x00); break;\n\t\tcase 0x40 /*VT_FILETIME*/: /*:: if(typeof value !== \"string\" && !(value instanceof Date)) throw \"unreachable\"; */ p = write_FILETIME(value); break;\n\t\tcase 0x1F /*VT_LPWSTR*/:\n\t\tcase 0x50 /*VT_STRING*/:\n\t\t\t/*:: if(typeof value !== \"string\") throw \"unreachable\"; */\n\t\t\tp = new_buf(4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tp.write_shift(4, value.length + 1);\n\t\t\tp.write_shift(0, value, \"dbcs\");\n\t\t\twhile(p.l != p.length) p.write_shift(1, 0);\n\t\t\tbreak;\n\t\tdefault: throw new Error(\"TypedPropertyValue unrecognized type \" + type + \" \" + value);\n\t}\n\treturn bconcat([o, p]);\n}\n\n/* [MS-OLEPS] 2.20 PropertySet */\nfunction parse_PropertySet(blob, PIDSI) {\n\tvar start_addr = blob.l;\n\tvar size = blob.read_shift(4);\n\tvar NumProps = blob.read_shift(4);\n\tvar Props = [], i = 0;\n\tvar CodePage = 0;\n\tvar Dictionary = -1, DictObj/*:{[number]:string}*/ = ({}/*:any*/);\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tvar PropID = blob.read_shift(4);\n\t\tvar Offset = blob.read_shift(4);\n\t\tProps[i] = [PropID, Offset + start_addr];\n\t}\n\tProps.sort(function(x,y) { return x[1] - y[1]; });\n\tvar PropH = {};\n\tfor(i = 0; i != NumProps; ++i) {\n\t\tif(blob.l !== Props[i][1]) {\n\t\t\tvar fail = true;\n\t\t\tif(i>0 && PIDSI) switch(PIDSI[Props[i-1][0]].t) {\n\t\t\t\tcase 0x02 /*VT_I2*/: if(blob.l+2 === Props[i][1]) { blob.l+=2; fail = false; } break;\n\t\t\t\tcase 0x50 /*VT_STRING*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t\tcase 0x100C /*VT_VECTOR|VT_VARIANT*/: if(blob.l <= Props[i][1]) { blob.l=Props[i][1]; fail = false; } break;\n\t\t\t}\n\t\t\tif((!PIDSI||i==0) && blob.l <= Props[i][1]) { fail=false; blob.l = Props[i][1]; }\n\t\t\tif(fail) throw new Error(\"Read Error: Expected address \" + Props[i][1] + ' at ' + blob.l + ' :' + i);\n\t\t}\n\t\tif(PIDSI) {\n\t\t\tvar piddsi = PIDSI[Props[i][0]];\n\t\t\tPropH[piddsi.n] = parse_TypedPropertyValue(blob, piddsi.t, {raw:true});\n\t\t\tif(piddsi.p === 'version') PropH[piddsi.n] = String(PropH[piddsi.n] >> 16) + \".\" + (\"0000\" + String(PropH[piddsi.n] & 0xFFFF)).slice(-4);\n\t\t\tif(piddsi.n == \"CodePage\") switch(PropH[piddsi.n]) {\n\t\t\t\tcase 0: PropH[piddsi.n] = 1252;\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 874:\n\t\t\t\tcase 932:\n\t\t\t\tcase 936:\n\t\t\t\tcase 949:\n\t\t\t\tcase 950:\n\t\t\t\tcase 1250:\n\t\t\t\tcase 1251:\n\t\t\t\tcase 1253:\n\t\t\t\tcase 1254:\n\t\t\t\tcase 1255:\n\t\t\t\tcase 1256:\n\t\t\t\tcase 1257:\n\t\t\t\tcase 1258:\n\t\t\t\tcase 10000:\n\t\t\t\tcase 1200:\n\t\t\t\tcase 1201:\n\t\t\t\tcase 1252:\n\t\t\t\tcase 65000: case -536:\n\t\t\t\tcase 65001: case -535:\n\t\t\t\t\tset_cp(CodePage = (PropH[piddsi.n]>>>0) & 0xFFFF); break;\n\t\t\t\tdefault: throw new Error(\"Unsupported CodePage: \" + PropH[piddsi.n]);\n\t\t\t}\n\t\t} else {\n\t\t\tif(Props[i][0] === 0x1) {\n\t\t\t\tCodePage = PropH.CodePage = (parse_TypedPropertyValue(blob, VT_I2)/*:number*/);\n\t\t\t\tset_cp(CodePage);\n\t\t\t\tif(Dictionary !== -1) {\n\t\t\t\t\tvar oldpos = blob.l;\n\t\t\t\t\tblob.l = Props[Dictionary][1];\n\t\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t\t\tblob.l = oldpos;\n\t\t\t\t}\n\t\t\t} else if(Props[i][0] === 0) {\n\t\t\t\tif(CodePage === 0) { Dictionary = i; blob.l = Props[i+1][1]; continue; }\n\t\t\t\tDictObj = parse_dictionary(blob,CodePage);\n\t\t\t} else {\n\t\t\t\tvar name = DictObj[Props[i][0]];\n\t\t\t\tvar val;\n\t\t\t\t/* [MS-OSHARED] 2.3.3.2.3.1.2 + PROPVARIANT */\n\t\t\t\tswitch(blob[blob.l]) {\n\t\t\t\t\tcase 0x41 /*VT_BLOB*/: blob.l += 4; val = parse_BLOB(blob); break;\n\t\t\t\t\tcase 0x1E /*VT_LPSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x1F /*VT_LPWSTR*/: blob.l += 4; val = parse_VtString(blob, blob[blob.l-4]).replace(/\\u0000+$/,\"\"); break;\n\t\t\t\t\tcase 0x03 /*VT_I4*/: blob.l += 4; val = blob.read_shift(4, 'i'); break;\n\t\t\t\t\tcase 0x13 /*VT_UI4*/: blob.l += 4; val = blob.read_shift(4); break;\n\t\t\t\t\tcase 0x05 /*VT_R8*/: blob.l += 4; val = blob.read_shift(8, 'f'); break;\n\t\t\t\t\tcase 0x0B /*VT_BOOL*/: blob.l += 4; val = parsebool(blob, 4); break;\n\t\t\t\t\tcase 0x40 /*VT_FILETIME*/: blob.l += 4; val = parseDate(parse_FILETIME(blob)); break;\n\t\t\t\t\tdefault: throw new Error(\"unparsed value: \" + blob[blob.l]);\n\t\t\t\t}\n\t\t\t\tPropH[name] = val;\n\t\t\t}\n\t\t}\n\t}\n\tblob.l = start_addr + size; /* step ahead to skip padding */\n\treturn PropH;\n}\nvar XLSPSSkip = [ \"CodePage\", \"Thumbnail\", \"_PID_LINKBASE\", \"_PID_HLINKS\", \"SystemIdentifier\", \"FMTID\" ].concat(PseudoPropsPairs);\nfunction guess_property_type(val/*:any*/)/*:number*/ {\n\tswitch(typeof val) {\n\t\tcase \"boolean\": return 0x0B;\n\t\tcase \"number\": return ((val|0)==val) ? 0x03 : 0x05;\n\t\tcase \"string\": return 0x1F;\n\t\tcase \"object\": if(val instanceof Date) return 0x40; break;\n\t}\n\treturn -1;\n}\nfunction write_PropertySet(entries, RE, PIDSI) {\n\tvar hdr = new_buf(8), piao = [], prop = [];\n\tvar sz = 8, i = 0;\n\n\tvar pr = new_buf(8), pio = new_buf(8);\n\tpr.write_shift(4, 0x0002);\n\tpr.write_shift(4, 0x04B0);\n\tpio.write_shift(4, 0x0001);\n\tprop.push(pr); piao.push(pio);\n\tsz += 8 + pr.length;\n\n\tif(!RE) {\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, 0);\n\t\tpiao.unshift(pio);\n\n\t\tvar bufs = [new_buf(4)];\n\t\tbufs[0].write_shift(4, entries.length);\n\t\tfor(i = 0; i < entries.length; ++i) {\n\t\t\tvar value = entries[i][0];\n\t\t\tpr = new_buf(4 + 4 + 2 * (value.length + 1) + (value.length % 2 ? 0 : 2));\n\t\t\tpr.write_shift(4, i+2);\n\t\t\tpr.write_shift(4, value.length + 1);\n\t\t\tpr.write_shift(0, value, \"dbcs\");\n\t\t\twhile(pr.l != pr.length) pr.write_shift(1, 0);\n\t\t\tbufs.push(pr);\n\t\t}\n\t\tpr = bconcat(bufs);\n\t\tprop.unshift(pr);\n\t\tsz += 8 + pr.length;\n\t}\n\n\tfor(i = 0; i < entries.length; ++i) {\n\t\tif(RE && !RE[entries[i][0]]) continue;\n\t\tif(XLSPSSkip.indexOf(entries[i][0]) > -1) continue;\n\t\tif(entries[i][1] == null) continue;\n\n\t\tvar val = entries[i][1], idx = 0;\n\t\tif(RE) {\n\t\t\tidx = +RE[entries[i][0]];\n\t\t\tvar pinfo = (PIDSI/*:: || {}*/)[idx]/*:: || {} */;\n\t\t\tif(pinfo.p == \"version\" && typeof val == \"string\") {\n\t\t\t\t/*:: if(typeof val !== \"string\") throw \"unreachable\"; */\n\t\t\t\tvar arr = val.split(\".\");\n\t\t\t\tval = ((+arr[0])<<16) + ((+arr[1])||0);\n\t\t\t}\n\t\t\tpr = write_TypedPropertyValue(pinfo.t, val);\n\t\t} else {\n\t\t\tvar T = guess_property_type(val);\n\t\t\tif(T == -1) { T = 0x1F; val = String(val); }\n\t\t\tpr = write_TypedPropertyValue(T, val);\n\t\t}\n\t\tprop.push(pr);\n\n\t\tpio = new_buf(8);\n\t\tpio.write_shift(4, !RE ? 2+i : idx);\n\t\tpiao.push(pio);\n\n\t\tsz += 8 + pr.length;\n\t}\n\n\tvar w = 8 * (prop.length + 1);\n\tfor(i = 0; i < prop.length; ++i) { piao[i].write_shift(4, w); w += prop[i].length; }\n\thdr.write_shift(4, sz);\n\thdr.write_shift(4, prop.length);\n\treturn bconcat([hdr].concat(piao).concat(prop));\n}\n\n/* [MS-OLEPS] 2.21 PropertySetStream */\nfunction parse_PropertySetStream(file, PIDSI, clsid) {\n\tvar blob = file.content;\n\tif(!blob) return ({}/*:any*/);\n\tprep_blob(blob, 0);\n\n\tvar NumSets, FMTID0, FMTID1, Offset0, Offset1 = 0;\n\tblob.chk('feff', 'Byte Order: ');\n\n\t/*var vers = */blob.read_shift(2); // TODO: check version\n\tvar SystemIdentifier = blob.read_shift(4);\n\tvar CLSID = blob.read_shift(16);\n\tif(CLSID !== CFB.utils.consts.HEADER_CLSID && CLSID !== clsid) throw new Error(\"Bad PropertySet CLSID \" + CLSID);\n\tNumSets = blob.read_shift(4);\n\tif(NumSets !== 1 && NumSets !== 2) throw new Error(\"Unrecognized #Sets: \" + NumSets);\n\tFMTID0 = blob.read_shift(16); Offset0 = blob.read_shift(4);\n\n\tif(NumSets === 1 && Offset0 !== blob.l) throw new Error(\"Length mismatch: \" + Offset0 + \" !== \" + blob.l);\n\telse if(NumSets === 2) { FMTID1 = blob.read_shift(16); Offset1 = blob.read_shift(4); }\n\tvar PSet0 = parse_PropertySet(blob, PIDSI);\n\n\tvar rval = ({ SystemIdentifier: SystemIdentifier }/*:any*/);\n\tfor(var y in PSet0) rval[y] = PSet0[y];\n\t//rval.blob = blob;\n\trval.FMTID = FMTID0;\n\t//rval.PSet0 = PSet0;\n\tif(NumSets === 1) return rval;\n\tif(Offset1 - blob.l == 2) blob.l += 2;\n\tif(blob.l !== Offset1) throw new Error(\"Length mismatch 2: \" + blob.l + \" !== \" + Offset1);\n\tvar PSet1;\n\ttry { PSet1 = parse_PropertySet(blob, null); } catch(e) {/* empty */}\n\tfor(y in PSet1) rval[y] = PSet1[y];\n\trval.FMTID = [FMTID0, FMTID1]; // TODO: verify FMTID0/1\n\treturn rval;\n}\nfunction write_PropertySetStream(entries, clsid, RE, PIDSI/*:{[key:string|number]:any}*/, entries2/*:?any*/, clsid2/*:?any*/) {\n\tvar hdr = new_buf(entries2 ? 68 : 48);\n\tvar bufs = [hdr];\n\thdr.write_shift(2, 0xFFFE);\n\thdr.write_shift(2, 0x0000); /* TODO: type 1 props */\n\thdr.write_shift(4, 0x32363237);\n\thdr.write_shift(16, CFB.utils.consts.HEADER_CLSID, \"hex\");\n\thdr.write_shift(4, (entries2 ? 2 : 1));\n\thdr.write_shift(16, clsid, \"hex\");\n\thdr.write_shift(4, (entries2 ? 68 : 48));\n\tvar ps0 = write_PropertySet(entries, RE, PIDSI);\n\tbufs.push(ps0);\n\n\tif(entries2) {\n\t\tvar ps1 = write_PropertySet(entries2, null, null);\n\t\thdr.write_shift(16, clsid2, \"hex\");\n\t\thdr.write_shift(4, 68 + ps0.length);\n\t\tbufs.push(ps1);\n\t}\n\treturn bconcat(bufs);\n}\n\nfunction parsenoop2(blob, length) { blob.read_shift(length); return null; }\nfunction writezeroes(n, o) { if(!o) o=new_buf(n); for(var j=0; j= 12 ? 2 : 1);\n\tvar encoding = 'sbcs-cont';\n\tvar cp = current_codepage;\n\tif(opts && opts.biff >= 8) current_codepage = 1200;\n\tif(!opts || opts.biff == 8 ) {\n\t\tvar fHighByte = blob.read_shift(1);\n\t\tif(fHighByte) { encoding = 'dbcs-cont'; }\n\t} else if(opts.biff == 12) {\n\t\tencoding = 'wstr';\n\t}\n\tif(opts.biff >= 2 && opts.biff <= 5) encoding = 'cpstr';\n\tvar o = cch ? blob.read_shift(cch, encoding) : \"\";\n\tcurrent_codepage = cp;\n\treturn o;\n}\n\n/* 2.5.293 XLUnicodeRichExtendedString */\nfunction parse_XLUnicodeRichExtendedString(blob) {\n\tvar cp = current_codepage;\n\tcurrent_codepage = 1200;\n\tvar cch = blob.read_shift(2), flags = blob.read_shift(1);\n\tvar /*fHighByte = flags & 0x1,*/ fExtSt = flags & 0x4, fRichSt = flags & 0x8;\n\tvar width = 1 + (flags & 0x1); // 0x0 -> utf8, 0x1 -> dbcs\n\tvar cRun = 0, cbExtRst;\n\tvar z = {};\n\tif(fRichSt) cRun = blob.read_shift(2);\n\tif(fExtSt) cbExtRst = blob.read_shift(4);\n\tvar encoding = width == 2 ? 'dbcs-cont' : 'sbcs-cont';\n\tvar msg = cch === 0 ? \"\" : blob.read_shift(cch, encoding);\n\tif(fRichSt) blob.l += 4 * cRun; //TODO: parse this\n\tif(fExtSt) blob.l += cbExtRst; //TODO: parse this\n\tz.t = msg;\n\tif(!fRichSt) { z.raw = \"\" + z.t + \"\"; z.r = z.t; }\n\tcurrent_codepage = cp;\n\treturn z;\n}\nfunction write_XLUnicodeRichExtendedString(xlstr/*:: :XLString, opts*/) {\n\tvar str = (xlstr.t||\"\"), nfmts = 1;\n\n\tvar hdr = new_buf(3 + (nfmts > 1 ? 2 : 0));\n\thdr.write_shift(2, str.length);\n\thdr.write_shift(1, (nfmts > 1 ? 0x08 : 0x00) | 0x01);\n\tif(nfmts > 1) hdr.write_shift(2, nfmts);\n\n\tvar otext = new_buf(2 * str.length);\n\totext.write_shift(2 * str.length, str, 'utf16le');\n\n\tvar out = [hdr, otext];\n\n\treturn bconcat(out);\n}\n\n/* 2.5.296 XLUnicodeStringNoCch */\nfunction parse_XLUnicodeStringNoCch(blob, cch, opts) {\n\tvar retval;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return blob.read_shift(cch, 'cpstr');\n\t\tif(opts.biff >= 12) return blob.read_shift(cch, 'dbcs-cont');\n\t}\n\tvar fHighByte = blob.read_shift(1);\n\tif(fHighByte===0) { retval = blob.read_shift(cch, 'sbcs-cont'); }\n\telse { retval = blob.read_shift(cch, 'dbcs-cont'); }\n\treturn retval;\n}\n\n/* 2.5.294 XLUnicodeString */\nfunction parse_XLUnicodeString(blob, length, opts) {\n\tvar cch = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn parse_XLUnicodeStringNoCch(blob, cch, opts);\n}\n/* BIFF5 override */\nfunction parse_XLUnicodeString2(blob, length, opts) {\n\tif(opts.biff > 5) return parse_XLUnicodeString(blob, length, opts);\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, (opts.biff <= 4 || !blob.lens ) ? 'cpstr' : 'sbcs-cont');\n}\n/* TODO: BIFF5 and lower, codepage awareness */\nfunction write_XLUnicodeString(str, opts, o) {\n\tif(!o) o = new_buf(3 + 2 * str.length);\n\to.write_shift(2, str.length);\n\to.write_shift(1, 1);\n\to.write_shift(31, str, 'utf16le');\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.61 ControlInfo */\nfunction parse_ControlInfo(blob/*::, length, opts*/) {\n\tvar flags = blob.read_shift(1);\n\tblob.l++;\n\tvar accel = blob.read_shift(2);\n\tblob.l += 2;\n\treturn [flags, accel];\n}\n\n/* [MS-OSHARED] 2.3.7.6 URLMoniker TODO: flags */\nfunction parse_URLMoniker(blob/*::, length, opts*/) {\n\tvar len = blob.read_shift(4), start = blob.l;\n\tvar extra = false;\n\tif(len > 24) {\n\t\t/* look ahead */\n\t\tblob.l += len - 24;\n\t\tif(blob.read_shift(16) === \"795881f43b1d7f48af2c825dc4852763\") extra = true;\n\t\tblob.l = start;\n\t}\n\tvar url = blob.read_shift((extra?len-24:len)>>1, 'utf16le').replace(chr0,\"\");\n\tif(extra) blob.l += 24;\n\treturn url;\n}\n\n/* [MS-OSHARED] 2.3.7.8 FileMoniker TODO: all fields */\nfunction parse_FileMoniker(blob/*::, length*/) {\n\tvar cAnti = blob.read_shift(2);\n\tvar preamble = \"\"; while(cAnti-- > 0) preamble += \"../\";\n\tvar ansiPath = blob.read_shift(0, 'lpstr-ansi');\n\tblob.l += 2; //var endServer = blob.read_shift(2);\n\tif(blob.read_shift(2) != 0xDEAD) throw new Error(\"Bad FileMoniker\");\n\tvar sz = blob.read_shift(4);\n\tif(sz === 0) return preamble + ansiPath.replace(/\\\\/g,\"/\");\n\tvar bytes = blob.read_shift(4);\n\tif(blob.read_shift(2) != 3) throw new Error(\"Bad FileMoniker\");\n\tvar unicodePath = blob.read_shift(bytes>>1, 'utf16le').replace(chr0,\"\");\n\treturn preamble + unicodePath;\n}\n\n/* [MS-OSHARED] 2.3.7.2 HyperlinkMoniker TODO: all the monikers */\nfunction parse_HyperlinkMoniker(blob, length) {\n\tvar clsid = blob.read_shift(16); length -= 16;\n\tswitch(clsid) {\n\t\tcase \"e0c9ea79f9bace118c8200aa004ba90b\": return parse_URLMoniker(blob, length);\n\t\tcase \"0303000000000000c000000000000046\": return parse_FileMoniker(blob, length);\n\t\tdefault: throw new Error(\"Unsupported Moniker \" + clsid);\n\t}\n}\n\n/* [MS-OSHARED] 2.3.7.9 HyperlinkString */\nfunction parse_HyperlinkString(blob/*::, length*/) {\n\tvar len = blob.read_shift(4);\n\tvar o = len > 0 ? blob.read_shift(len, 'utf16le').replace(chr0, \"\") : \"\";\n\treturn o;\n}\nfunction write_HyperlinkString(str/*:string*/, o) {\n\tif(!o) o = new_buf(6 + str.length * 2);\n\to.write_shift(4, 1 + str.length);\n\tfor(var i = 0; i < str.length; ++i) o.write_shift(2, str.charCodeAt(i));\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-OSHARED] 2.3.7.1 Hyperlink Object */\nfunction parse_Hyperlink(blob, length)/*:Hyperlink*/ {\n\tvar end = blob.l + length;\n\tvar sVer = blob.read_shift(4);\n\tif(sVer !== 2) throw new Error(\"Unrecognized streamVersion: \" + sVer);\n\tvar flags = blob.read_shift(2);\n\tblob.l += 2;\n\tvar displayName, targetFrameName, moniker, oleMoniker, Loc=\"\", guid, fileTime;\n\tif(flags & 0x0010) displayName = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0080) targetFrameName = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0101) moniker = parse_HyperlinkString(blob, end - blob.l);\n\tif((flags & 0x0101) === 0x0001) oleMoniker = parse_HyperlinkMoniker(blob, end - blob.l);\n\tif(flags & 0x0008) Loc = parse_HyperlinkString(blob, end - blob.l);\n\tif(flags & 0x0020) guid = blob.read_shift(16);\n\tif(flags & 0x0040) fileTime = parse_FILETIME(blob/*, 8*/);\n\tblob.l = end;\n\tvar target = targetFrameName||moniker||oleMoniker||\"\";\n\tif(target && Loc) target+=\"#\"+Loc;\n\tif(!target) target = \"#\" + Loc;\n\tif((flags & 0x0002) && target.charAt(0) == \"/\" && target.charAt(1) != \"/\") target = \"file://\" + target;\n\tvar out = ({Target:target}/*:any*/);\n\tif(guid) out.guid = guid;\n\tif(fileTime) out.time = fileTime;\n\tif(displayName) out.Tooltip = displayName;\n\treturn out;\n}\nfunction write_Hyperlink(hl) {\n\tvar out = new_buf(512), i = 0;\n\tvar Target = hl.Target;\n\tif(Target.slice(0,7) == \"file://\") Target = Target.slice(7);\n\tvar hashidx = Target.indexOf(\"#\");\n\tvar F = hashidx > -1 ? 0x1f : 0x17;\n\tswitch(Target.charAt(0)) { case \"#\": F=0x1c; break; case \".\": F&=~2; break; }\n\tout.write_shift(4,2); out.write_shift(4, F);\n\tvar data = [8,6815827,6619237,4849780,83]; for(i = 0; i < data.length; ++i) out.write_shift(4, data[i]);\n\tif(F == 0x1C) {\n\t\tTarget = Target.slice(1);\n\t\twrite_HyperlinkString(Target, out);\n\t} else if(F & 0x02) {\n\t\tdata = \"e0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar Pretarget = hashidx > -1 ? Target.slice(0, hashidx) : Target;\n\t\tout.write_shift(4, 2*(Pretarget.length + 1));\n\t\tfor(i = 0; i < Pretarget.length; ++i) out.write_shift(2, Pretarget.charCodeAt(i));\n\t\tout.write_shift(2, 0);\n\t\tif(F & 0x08) write_HyperlinkString(hashidx > -1 ? Target.slice(hashidx+1): \"\", out);\n\t} else {\n\t\tdata = \"03 03 00 00 00 00 00 00 c0 00 00 00 00 00 00 46\".split(\" \");\n\t\tfor(i = 0; i < data.length; ++i) out.write_shift(1, parseInt(data[i], 16));\n\t\tvar P = 0;\n\t\twhile(Target.slice(P*3,P*3+3)==\"../\"||Target.slice(P*3,P*3+3)==\"..\\\\\") ++P;\n\t\tout.write_shift(2, P);\n\t\tout.write_shift(4, Target.length - 3 * P + 1);\n\t\tfor(i = 0; i < Target.length - 3 * P; ++i) out.write_shift(1, Target.charCodeAt(i + 3 * P) & 0xFF);\n\t\tout.write_shift(1, 0);\n\t\tout.write_shift(2, 0xFFFF);\n\t\tout.write_shift(2, 0xDEAD);\n\t\tfor(i = 0; i < 6; ++i) out.write_shift(4, 0);\n\t}\n\treturn out.slice(0, out.l);\n}\n\n/* 2.5.178 LongRGBA */\nfunction parse_LongRGBA(blob/*::, length*/) { var r = blob.read_shift(1), g = blob.read_shift(1), b = blob.read_shift(1), a = blob.read_shift(1); return [r,g,b,a]; }\n\n/* 2.5.177 LongRGB */\nfunction parse_LongRGB(blob, length) { var x = parse_LongRGBA(blob, length); x[3] = 0; return x; }\n\n\n/* [MS-XLS] 2.5.19 */\nfunction parse_XLSCell(blob/*::, length*/)/*:Cell*/ {\n\tvar rw = blob.read_shift(2); // 0-indexed\n\tvar col = blob.read_shift(2);\n\tvar ixfe = blob.read_shift(2);\n\treturn ({r:rw, c:col, ixfe:ixfe}/*:any*/);\n}\nfunction write_XLSCell(R/*:number*/, C/*:number*/, ixfe/*:?number*/, o) {\n\tif(!o) o = new_buf(6);\n\to.write_shift(2, R);\n\to.write_shift(2, C);\n\to.write_shift(2, ixfe||0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.134 */\nfunction parse_frtHeader(blob) {\n\tvar rt = blob.read_shift(2);\n\tvar flags = blob.read_shift(2); // TODO: parse these flags\n\tblob.l += 8;\n\treturn {type: rt, flags: flags};\n}\n\n\n\nfunction parse_OptXLUnicodeString(blob, length, opts) { return length === 0 ? \"\" : parse_XLUnicodeString2(blob, length, opts); }\n\n/* [MS-XLS] 2.5.344 */\nfunction parse_XTI(blob, length, opts) {\n\tvar w = opts.biff > 8 ? 4 : 2;\n\tvar iSupBook = blob.read_shift(w), itabFirst = blob.read_shift(w,'i'), itabLast = blob.read_shift(w,'i');\n\treturn [iSupBook, itabFirst, itabLast];\n}\n\n/* [MS-XLS] 2.5.218 */\nfunction parse_RkRec(blob) {\n\tvar ixfe = blob.read_shift(2);\n\tvar RK = parse_RkNumber(blob);\n\treturn [ixfe, RK];\n}\n\n/* [MS-XLS] 2.5.1 */\nfunction parse_AddinUdf(blob, length, opts) {\n\tblob.l += 4; length -= 4;\n\tvar l = blob.l + length;\n\tvar udfName = parse_ShortXLUnicodeString(blob, length, opts);\n\tvar cb = blob.read_shift(2);\n\tl -= blob.l;\n\tif(cb !== l) throw new Error(\"Malformed AddinUdf: padding = \" + l + \" != \" + cb);\n\tblob.l += cb;\n\treturn udfName;\n}\n\n/* [MS-XLS] 2.5.209 TODO: Check sizes */\nfunction parse_Ref8U(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(2);\n\tvar colLast = blob.read_shift(2);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\nfunction write_Ref8U(r/*:Range*/, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(2, r.s.r);\n\to.write_shift(2, r.e.r);\n\to.write_shift(2, r.s.c);\n\to.write_shift(2, r.e.c);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.211 */\nfunction parse_RefU(blob/*::, length*/) {\n\tvar rwFirst = blob.read_shift(2);\n\tvar rwLast = blob.read_shift(2);\n\tvar colFirst = blob.read_shift(1);\n\tvar colLast = blob.read_shift(1);\n\treturn {s:{c:colFirst, r:rwFirst}, e:{c:colLast,r:rwLast}};\n}\n\n/* [MS-XLS] 2.5.207 */\nvar parse_Ref = parse_RefU;\n\n/* [MS-XLS] 2.5.143 */\nfunction parse_FtCmo(blob/*::, length*/) {\n\tblob.l += 4;\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tblob.l+=12;\n\treturn [id, ot, flags];\n}\n\n/* [MS-XLS] 2.5.149 */\nfunction parse_FtNts(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.l += 16; // GUID TODO\n\tout.fSharedNote = blob.read_shift(2);\n\tblob.l += 4;\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.142 */\nfunction parse_FtCf(blob) {\n\tvar out = {};\n\tblob.l += 4;\n\tblob.cf = blob.read_shift(2);\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.140 - 2.5.154 and friends */\nfunction parse_FtSkip(blob) { blob.l += 2; blob.l += blob.read_shift(2); }\nvar FtTab = {\n\t/*::[*/0x00/*::]*/: parse_FtSkip, /* FtEnd */\n\t/*::[*/0x04/*::]*/: parse_FtSkip, /* FtMacro */\n\t/*::[*/0x05/*::]*/: parse_FtSkip, /* FtButton */\n\t/*::[*/0x06/*::]*/: parse_FtSkip, /* FtGmo */\n\t/*::[*/0x07/*::]*/: parse_FtCf, /* FtCf */\n\t/*::[*/0x08/*::]*/: parse_FtSkip, /* FtPioGrbit */\n\t/*::[*/0x09/*::]*/: parse_FtSkip, /* FtPictFmla */\n\t/*::[*/0x0A/*::]*/: parse_FtSkip, /* FtCbls */\n\t/*::[*/0x0B/*::]*/: parse_FtSkip, /* FtRbo */\n\t/*::[*/0x0C/*::]*/: parse_FtSkip, /* FtSbs */\n\t/*::[*/0x0D/*::]*/: parse_FtNts, /* FtNts */\n\t/*::[*/0x0E/*::]*/: parse_FtSkip, /* FtSbsFmla */\n\t/*::[*/0x0F/*::]*/: parse_FtSkip, /* FtGboData */\n\t/*::[*/0x10/*::]*/: parse_FtSkip, /* FtEdoData */\n\t/*::[*/0x11/*::]*/: parse_FtSkip, /* FtRboData */\n\t/*::[*/0x12/*::]*/: parse_FtSkip, /* FtCblsData */\n\t/*::[*/0x13/*::]*/: parse_FtSkip, /* FtLbsData */\n\t/*::[*/0x14/*::]*/: parse_FtSkip, /* FtCblsFmla */\n\t/*::[*/0x15/*::]*/: parse_FtCmo\n};\nfunction parse_FtArray(blob, length/*::, ot*/) {\n\tvar tgt = blob.l + length;\n\tvar fts = [];\n\twhile(blob.l < tgt) {\n\t\tvar ft = blob.read_shift(2);\n\t\tblob.l-=2;\n\t\ttry {\n\t\t\tfts.push(FtTab[ft](blob, tgt - blob.l));\n\t\t} catch(e) { blob.l = tgt; return fts; }\n\t}\n\tif(blob.l != tgt) blob.l = tgt; //throw new Error(\"bad Object Ft-sequence\");\n\treturn fts;\n}\n\n/* --- 2.4 Records --- */\n\n/* [MS-XLS] 2.4.21 */\nfunction parse_BOF(blob, length) {\n\tvar o = {BIFFVer:0, dt:0};\n\to.BIFFVer = blob.read_shift(2); length -= 2;\n\tif(length >= 2) { o.dt = blob.read_shift(2); blob.l -= 2; }\n\tswitch(o.BIFFVer) {\n\t\tcase 0x0600: /* BIFF8 */\n\t\tcase 0x0500: /* BIFF5 */\n\t\tcase 0x0400: /* BIFF4 */\n\t\tcase 0x0300: /* BIFF3 */\n\t\tcase 0x0200: /* BIFF2 */\n\t\tcase 0x0002: case 0x0007: /* BIFF2 */\n\t\t\tbreak;\n\t\tdefault: if(length > 6) throw new Error(\"Unexpected BIFF Ver \" + o.BIFFVer);\n\t}\n\n\tblob.read_shift(length);\n\treturn o;\n}\nfunction write_BOF(wb/*:Workbook*/, t/*:number*/, o) {\n\tvar h = 0x0600, w = 16;\n\tswitch(o.bookType) {\n\t\tcase 'biff8': break;\n\t\tcase 'biff5': h = 0x0500; w = 8; break;\n\t\tcase 'biff4': h = 0x0004; w = 6; break;\n\t\tcase 'biff3': h = 0x0003; w = 6; break;\n\t\tcase 'biff2': h = 0x0002; w = 4; break;\n\t\tcase 'xla': break;\n\t\tdefault: throw new Error(\"unsupported BIFF version\");\n\t}\n\tvar out = new_buf(w);\n\tout.write_shift(2, h);\n\tout.write_shift(2, t);\n\tif(w > 4) out.write_shift(2, 0x7262);\n\tif(w > 6) out.write_shift(2, 0x07CD);\n\tif(w > 8) {\n\t\tout.write_shift(2, 0xC009);\n\t\tout.write_shift(2, 0x0001);\n\t\tout.write_shift(2, 0x0706);\n\t\tout.write_shift(2, 0x0000);\n\t}\n\treturn out;\n}\n\n\n/* [MS-XLS] 2.4.146 */\nfunction parse_InterfaceHdr(blob, length) {\n\tif(length === 0) return 0x04b0;\n\tif((blob.read_shift(2))!==0x04b0){/* empty */}\n\treturn 0x04b0;\n}\n\n\n/* [MS-XLS] 2.4.349 */\nfunction parse_WriteAccess(blob, length, opts) {\n\tif(opts.enc) { blob.l += length; return \"\"; }\n\tvar l = blob.l;\n\t// TODO: make sure XLUnicodeString doesnt overrun\n\tvar UserName = parse_XLUnicodeString2(blob, 0, opts);\n\tblob.read_shift(length + l - blob.l);\n\treturn UserName;\n}\nfunction write_WriteAccess(s/*:string*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(b8 ? 112 : 54);\n\to.write_shift(opts.biff == 8 ? 2 : 1, 7);\n\tif(b8) o.write_shift(1, 0);\n\to.write_shift(4, 0x33336853);\n\to.write_shift(4, (0x00534A74 | (b8 ? 0 : 0x20000000)));\n\twhile(o.l < o.length) o.write_shift(1, (b8 ? 0 : 32));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.351 */\nfunction parse_WsBool(blob, length, opts) {\n\tvar flags = opts && opts.biff == 8 || length == 2 ? blob.read_shift(2) : (blob.l += length, 0);\n\treturn { fDialog: flags & 0x10, fBelow: flags & 0x40, fRight: flags & 0x80 };\n}\n\n/* [MS-XLS] 2.4.28 */\nfunction parse_BoundSheet8(blob, length, opts) {\n\tvar pos = blob.read_shift(4);\n\tvar hidden = blob.read_shift(1) & 0x03;\n\tvar dt = blob.read_shift(1);\n\tswitch(dt) {\n\t\tcase 0: dt = 'Worksheet'; break;\n\t\tcase 1: dt = 'Macrosheet'; break;\n\t\tcase 2: dt = 'Chartsheet'; break;\n\t\tcase 6: dt = 'VBAModule'; break;\n\t}\n\tvar name = parse_ShortXLUnicodeString(blob, 0, opts);\n\tif(name.length === 0) name = \"Sheet1\";\n\treturn { pos:pos, hs:hidden, dt:dt, name:name };\n}\nfunction write_BoundSheet8(data, opts) {\n\tvar w = (!opts || opts.biff >= 8 ? 2 : 1);\n\tvar o = new_buf(8 + w * data.name.length);\n\to.write_shift(4, data.pos);\n\to.write_shift(1, data.hs || 0);\n\to.write_shift(1, data.dt);\n\to.write_shift(1, data.name.length);\n\tif(opts.biff >= 8) o.write_shift(1, 1);\n\to.write_shift(w * data.name.length, data.name, opts.biff < 8 ? 'sbcs' : 'utf16le');\n\tvar out = o.slice(0, o.l);\n\tout.l = o.l; return out;\n}\n\n/* [MS-XLS] 2.4.265 TODO */\nfunction parse_SST(blob, length)/*:SST*/ {\n\tvar end = blob.l + length;\n\tvar cnt = blob.read_shift(4);\n\tvar ucnt = blob.read_shift(4);\n\tvar strs/*:SST*/ = ([]/*:any*/);\n\tfor(var i = 0; i != ucnt && blob.l < end; ++i) {\n\t\tstrs.push(parse_XLUnicodeRichExtendedString(blob));\n\t}\n\tstrs.Count = cnt; strs.Unique = ucnt;\n\treturn strs;\n}\nfunction write_SST(sst, opts) {\n\tvar header = new_buf(8);\n\theader.write_shift(4, sst.Count);\n\theader.write_shift(4, sst.Unique);\n\tvar strs = [];\n\tfor(var j = 0; j < sst.length; ++j) strs[j] = write_XLUnicodeRichExtendedString(sst[j], opts);\n\tvar o = bconcat([header].concat(strs));\n\t/*::(*/o/*:: :any)*/.parts = [header.length].concat(strs.map(function(str) { return str.length; }));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.107 */\nfunction parse_ExtSST(blob, length) {\n\tvar extsst = {};\n\textsst.dsst = blob.read_shift(2);\n\tblob.l += length-2;\n\treturn extsst;\n}\n\n\n/* [MS-XLS] 2.4.221 TODO: check BIFF2-4 */\nfunction parse_Row(blob) {\n\tvar z = ({}/*:any*/);\n\tz.r = blob.read_shift(2);\n\tz.c = blob.read_shift(2);\n\tz.cnt = blob.read_shift(2) - z.c;\n\tvar miyRw = blob.read_shift(2);\n\tblob.l += 4; // reserved(2), unused(2)\n\tvar flags = blob.read_shift(1); // various flags\n\tblob.l += 3; // reserved(8), ixfe(12), flags(4)\n\tif(flags & 0x07) z.level = flags & 0x07;\n\t// collapsed: flags & 0x10\n\tif(flags & 0x20) z.hidden = true;\n\tif(flags & 0x40) z.hpt = miyRw / 20;\n\treturn z;\n}\n\n\n/* [MS-XLS] 2.4.125 */\nfunction parse_ForceFullCalculation(blob) {\n\tvar header = parse_frtHeader(blob);\n\tif(header.type != 0x08A3) throw new Error(\"Invalid Future Record \" + header.type);\n\tvar fullcalc = blob.read_shift(4);\n\treturn fullcalc !== 0x0;\n}\n\n\n\n\n\n/* [MS-XLS] 2.4.215 rt */\nfunction parse_RecalcId(blob) {\n\tblob.read_shift(2);\n\treturn blob.read_shift(4);\n}\n\n/* [MS-XLS] 2.4.87 */\nfunction parse_DefaultRowHeight(blob, length, opts) {\n\tvar f = 0;\n\tif(!(opts && opts.biff == 2)) {\n\t\tf = blob.read_shift(2);\n\t}\n\tvar miyRw = blob.read_shift(2);\n\tif((opts && opts.biff == 2)) {\n\t\tf = 1 - (miyRw >> 15); miyRw &= 0x7fff;\n\t}\n\tvar fl = {Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};\n\treturn [fl, miyRw];\n}\n\n/* [MS-XLS] 2.4.345 TODO */\nfunction parse_Window1(blob) {\n\tvar xWn = blob.read_shift(2), yWn = blob.read_shift(2), dxWn = blob.read_shift(2), dyWn = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), iTabCur = blob.read_shift(2), iTabFirst = blob.read_shift(2);\n\tvar ctabSel = blob.read_shift(2), wTabRatio = blob.read_shift(2);\n\treturn { Pos: [xWn, yWn], Dim: [dxWn, dyWn], Flags: flags, CurTab: iTabCur,\n\t\tFirstTab: iTabFirst, Selected: ctabSel, TabRatio: wTabRatio };\n}\nfunction write_Window1(/*::opts*/) {\n\tvar o = new_buf(18);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0x7260);\n\to.write_shift(2, 0x44c0);\n\to.write_shift(2, 0x38);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 1);\n\to.write_shift(2, 0x01f4);\n\treturn o;\n}\n/* [MS-XLS] 2.4.346 TODO */\nfunction parse_Window2(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff < 5) return {};\n\tvar f = blob.read_shift(2);\n\treturn { RTL: f & 0x40 };\n}\nfunction write_Window2(view) {\n\tvar o = new_buf(18), f = 0x6b6;\n\tif(view && view.RTL) f |= 0x40;\n\to.write_shift(2, f);\n\to.write_shift(4, 0);\n\to.write_shift(4, 64);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.189 TODO */\nfunction parse_Pane(/*blob, length, opts*/) {\n}\n\n/* [MS-XLS] 2.4.122 TODO */\nfunction parse_Font(blob, length, opts) {\n\tvar o/*:any*/ = {\n\t\tdyHeight: blob.read_shift(2),\n\t\tfl: blob.read_shift(2)\n\t};\n\tswitch((opts && opts.biff) || 8) {\n\t\tcase 2: break;\n\t\tcase 3: case 4: blob.l += 2; break;\n\t\tdefault: blob.l += 10; break;\n\t}\n\to.name = parse_ShortXLUnicodeString(blob, 0, opts);\n\treturn o;\n}\nfunction write_Font(data, opts) {\n\tvar name = data.name || \"Arial\";\n\tvar b5 = (opts && (opts.biff == 5)), w = (b5 ? (15 + name.length) : (16 + 2 * name.length));\n\tvar o = new_buf(w);\n\to.write_shift(2, (data.sz || 12) * 20);\n\to.write_shift(4, 0);\n\to.write_shift(2, 400);\n\to.write_shift(4, 0);\n\to.write_shift(2, 0);\n\to.write_shift(1, name.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * name.length, name, (b5 ? \"sbcs\" : \"utf16le\"));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.149 */\nfunction parse_LabelSst(blob) {\n\tvar cell = parse_XLSCell(blob);\n\tcell.isst = blob.read_shift(4);\n\treturn cell;\n}\nfunction write_LabelSst(R/*:number*/, C/*:number*/, v/*:number*/, os/*:number*/ /*::, opts*/) {\n\tvar o = new_buf(10);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(4, v);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.148 */\nfunction parse_Label(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar target = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) blob.l++;\n\tvar str = parse_XLUnicodeString(blob, target - blob.l, opts);\n\tcell.val = str;\n\treturn cell;\n}\nfunction write_Label(R/*:number*/, C/*:number*/, v/*:string*/, os/*:number*/, opts) {\n\tvar b8 = !opts || opts.biff == 8;\n\tvar o = new_buf(6 + 2 + (+b8) + (1 + b8) * v.length);\n\twrite_XLSCell(R, C, os, o);\n\to.write_shift(2, v.length);\n\tif(b8) o.write_shift(1, 1);\n\to.write_shift((1 + b8) * v.length, v, b8 ? 'utf16le' : 'sbcs');\n\treturn o;\n}\n\n\n/* [MS-XLS] 2.4.126 Number Formats */\nfunction parse_Format(blob, length, opts) {\n\tvar numFmtId = blob.read_shift(2);\n\tvar fmtstr = parse_XLUnicodeString2(blob, 0, opts);\n\treturn [numFmtId, fmtstr];\n}\nfunction write_Format(i/*:number*/, f/*:string*/, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? (3 + f.length) : (5 + 2 * f.length));\n\to.write_shift(2, i);\n\to.write_shift((b5 ? 1 : 2), f.length);\n\tif(!b5) o.write_shift(1, 1);\n\to.write_shift((b5 ? 1 : 2) * f.length, f, (b5 ? 'sbcs' : 'utf16le'));\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(out.l == null) out.l = out.length;\n\treturn out;\n}\nvar parse_BIFF2Format = parse_XLUnicodeString2;\n\n/* [MS-XLS] 2.4.90 */\nfunction parse_Dimensions(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar r = blob.read_shift(w), R = blob.read_shift(w);\n\tvar c = blob.read_shift(2), C = blob.read_shift(2);\n\tblob.l = end;\n\treturn {s: {r:r, c:c}, e: {r:R, c:C}};\n}\nfunction write_Dimensions(range, opts) {\n\tvar w = opts.biff == 8 || !opts.biff ? 4 : 2;\n\tvar o = new_buf(2*w + 6);\n\to.write_shift(w, range.s.r);\n\to.write_shift(w, range.e.r + 1);\n\to.write_shift(2, range.s.c);\n\to.write_shift(2, range.e.c + 1);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.220 */\nfunction parse_RK(blob) {\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrec = parse_RkRec(blob);\n\treturn {r:rw, c:col, ixfe:rkrec[0], rknum:rkrec[1]};\n}\n\n/* [MS-XLS] 2.4.175 */\nfunction parse_MulRk(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar rkrecs = [];\n\twhile(blob.l < target) rkrecs.push(parse_RkRec(blob));\n\tif(blob.l !== target) throw new Error(\"MulRK read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(rkrecs.length != lastcol - col + 1) throw new Error(\"MulRK length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, rkrec:rkrecs};\n}\n/* [MS-XLS] 2.4.174 */\nfunction parse_MulBlank(blob, length) {\n\tvar target = blob.l + length - 2;\n\tvar rw = blob.read_shift(2), col = blob.read_shift(2);\n\tvar ixfes = [];\n\twhile(blob.l < target) ixfes.push(blob.read_shift(2));\n\tif(blob.l !== target) throw new Error(\"MulBlank read error\");\n\tvar lastcol = blob.read_shift(2);\n\tif(ixfes.length != lastcol - col + 1) throw new Error(\"MulBlank length mismatch\");\n\treturn {r:rw, c:col, C:lastcol, ixfe:ixfes};\n}\n\n/* [MS-XLS] 2.5.20 2.5.249 TODO: interpret values here */\nfunction parse_CellStyleXF(blob, length, style, opts) {\n\tvar o = {};\n\tvar a = blob.read_shift(4), b = blob.read_shift(4);\n\tvar c = blob.read_shift(4), d = blob.read_shift(2);\n\to.patternType = XLSFillPattern[c >> 26];\n\n\tif(!opts.cellStyles) return o;\n\to.alc = a & 0x07;\n\to.fWrap = (a >> 3) & 0x01;\n\to.alcV = (a >> 4) & 0x07;\n\to.fJustLast = (a >> 7) & 0x01;\n\to.trot = (a >> 8) & 0xFF;\n\to.cIndent = (a >> 16) & 0x0F;\n\to.fShrinkToFit = (a >> 20) & 0x01;\n\to.iReadOrder = (a >> 22) & 0x02;\n\to.fAtrNum = (a >> 26) & 0x01;\n\to.fAtrFnt = (a >> 27) & 0x01;\n\to.fAtrAlc = (a >> 28) & 0x01;\n\to.fAtrBdr = (a >> 29) & 0x01;\n\to.fAtrPat = (a >> 30) & 0x01;\n\to.fAtrProt = (a >> 31) & 0x01;\n\n\to.dgLeft = b & 0x0F;\n\to.dgRight = (b >> 4) & 0x0F;\n\to.dgTop = (b >> 8) & 0x0F;\n\to.dgBottom = (b >> 12) & 0x0F;\n\to.icvLeft = (b >> 16) & 0x7F;\n\to.icvRight = (b >> 23) & 0x7F;\n\to.grbitDiag = (b >> 30) & 0x03;\n\n\to.icvTop = c & 0x7F;\n\to.icvBottom = (c >> 7) & 0x7F;\n\to.icvDiag = (c >> 14) & 0x7F;\n\to.dgDiag = (c >> 21) & 0x0F;\n\n\to.icvFore = d & 0x7F;\n\to.icvBack = (d >> 7) & 0x7F;\n\to.fsxButton = (d >> 14) & 0x01;\n\treturn o;\n}\n//function parse_CellXF(blob, length, opts) {return parse_CellStyleXF(blob,length,0, opts);}\n//function parse_StyleXF(blob, length, opts) {return parse_CellStyleXF(blob,length,1, opts);}\n\n/* [MS-XLS] 2.4.353 TODO: actually do this right */\nfunction parse_XF(blob, length, opts) {\n\tvar o = {};\n\to.ifnt = blob.read_shift(2); o.numFmtId = blob.read_shift(2); o.flags = blob.read_shift(2);\n\to.fStyle = (o.flags >> 2) & 0x01;\n\tlength -= 6;\n\to.data = parse_CellStyleXF(blob, length, o.fStyle, opts);\n\treturn o;\n}\nfunction write_XF(data, ixfeP, opts, o) {\n\tvar b5 = (opts && (opts.biff == 5));\n\tif(!o) o = new_buf(b5 ? 16 : 20);\n\to.write_shift(2, 0);\n\tif(data.style) {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, 0xFFF4);\n\t} else {\n\t\to.write_shift(2, (data.numFmtId||0));\n\t\to.write_shift(2, (ixfeP<<4));\n\t}\n\tvar f = 0;\n\tif(data.numFmtId > 0 && b5) f |= 0x0400;\n\to.write_shift(4, f);\n\to.write_shift(4, 0);\n\tif(!b5) o.write_shift(4, 0);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.134 */\nfunction parse_Guts(blob) {\n\tblob.l += 4;\n\tvar out = [blob.read_shift(2), blob.read_shift(2)];\n\tif(out[0] !== 0) out[0]--;\n\tif(out[1] !== 0) out[1]--;\n\tif(out[0] > 7 || out[1] > 7) throw new Error(\"Bad Gutters: \" + out.join(\"|\"));\n\treturn out;\n}\nfunction write_Guts(guts/*:Array*/) {\n\tvar o = new_buf(8);\n\to.write_shift(4, 0);\n\to.write_shift(2, guts[0] ? guts[0] + 1 : 0);\n\to.write_shift(2, guts[1] ? guts[1] + 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.24 */\nfunction parse_BoolErr(blob, length, opts) {\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2 || length == 9) ++blob.l;\n\tvar val = parse_Bes(blob, 2);\n\tcell.val = val;\n\tcell.t = (val === true || val === false) ? 'b' : 'e';\n\treturn cell;\n}\nfunction write_BoolErr(R/*:number*/, C/*:number*/, v, os/*:number*/, opts, t/*:string*/) {\n\tvar o = new_buf(8);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Bes(v, t, o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.180 Number */\nfunction parse_Number(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 2) opts.biff = 5;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar xnum = parse_Xnum(blob, 8);\n\tcell.val = xnum;\n\treturn cell;\n}\nfunction write_Number(R/*:number*/, C/*:number*/, v, os/*:: :number, opts*/) {\n\tvar o = new_buf(14);\n\twrite_XLSCell(R, C, os, o);\n\twrite_Xnum(v, o);\n\treturn o;\n}\n\nvar parse_XLHeaderFooter = parse_OptXLUnicodeString; // TODO: parse 2.4.136\n\n/* [MS-XLS] 2.4.271 */\nfunction parse_SupBook(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar ctab = blob.read_shift(2);\n\tvar cch = blob.read_shift(2);\n\topts.sbcch = cch;\n\tif(cch == 0x0401 || cch == 0x3A01) return [cch, ctab];\n\tif(cch < 0x01 || cch >0xff) throw new Error(\"Unexpected SupBook type: \"+cch);\n\tvar virtPath = parse_XLUnicodeStringNoCch(blob, cch);\n\t/* TODO: 2.5.277 Virtual Path */\n\tvar rgst = [];\n\twhile(end > blob.l) rgst.push(parse_XLUnicodeString(blob));\n\treturn [cch, ctab, virtPath, rgst];\n}\n\n/* [MS-XLS] 2.4.105 TODO */\nfunction parse_ExternName(blob, length, opts) {\n\tvar flags = blob.read_shift(2);\n\tvar body;\n\tvar o = ({\n\t\tfBuiltIn: flags & 0x01,\n\t\tfWantAdvise: (flags >>> 1) & 0x01,\n\t\tfWantPict: (flags >>> 2) & 0x01,\n\t\tfOle: (flags >>> 3) & 0x01,\n\t\tfOleLink: (flags >>> 4) & 0x01,\n\t\tcf: (flags >>> 5) & 0x3FF,\n\t\tfIcon: flags >>> 15 & 0x01\n\t}/*:any*/);\n\tif(opts.sbcch === 0x3A01) body = parse_AddinUdf(blob, length-2, opts);\n\t//else throw new Error(\"unsupported SupBook cch: \" + opts.sbcch);\n\to.body = body || blob.read_shift(length-2);\n\tif(typeof body === \"string\") o.Name = body;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.150 TODO */\nvar XLSLblBuiltIn = [\n\t\"_xlnm.Consolidate_Area\",\n\t\"_xlnm.Auto_Open\",\n\t\"_xlnm.Auto_Close\",\n\t\"_xlnm.Extract\",\n\t\"_xlnm.Database\",\n\t\"_xlnm.Criteria\",\n\t\"_xlnm.Print_Area\",\n\t\"_xlnm.Print_Titles\",\n\t\"_xlnm.Recorder\",\n\t\"_xlnm.Data_Form\",\n\t\"_xlnm.Auto_Activate\",\n\t\"_xlnm.Auto_Deactivate\",\n\t\"_xlnm.Sheet_Title\",\n\t\"_xlnm._FilterDatabase\"\n];\nfunction parse_Lbl(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar flags = blob.read_shift(2);\n\tvar chKey = blob.read_shift(1);\n\tvar cch = blob.read_shift(1);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar itab = 0;\n\tif(!opts || opts.biff >= 5) {\n\t\tif(opts.biff != 5) blob.l += 2;\n\t\titab = blob.read_shift(2);\n\t\tif(opts.biff == 5) blob.l += 2;\n\t\tblob.l += 4;\n\t}\n\tvar name = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tif(flags & 0x20) name = XLSLblBuiltIn[name.charCodeAt(0)];\n\tvar npflen = target - blob.l; if(opts && opts.biff == 2) --npflen;\n\tvar rgce = (target == blob.l || cce === 0 || !(npflen > 0)) ? [] : parse_NameParsedFormula(blob, npflen, opts, cce);\n\treturn {\n\t\tchKey: chKey,\n\t\tName: name,\n\t\titab: itab,\n\t\trgce: rgce\n\t};\n}\n\n/* [MS-XLS] 2.4.106 TODO: verify filename encoding */\nfunction parse_ExternSheet(blob, length, opts) {\n\tif(opts.biff < 8) return parse_BIFF5ExternSheet(blob, length, opts);\n\tvar o = [], target = blob.l + length, len = blob.read_shift(opts.biff > 8 ? 4 : 2);\n\twhile(len-- !== 0) o.push(parse_XTI(blob, opts.biff > 8 ? 12 : 6, opts));\n\t\t// [iSupBook, itabFirst, itabLast];\n\tif(blob.l != target) throw new Error(\"Bad ExternSheet: \" + blob.l + \" != \" + target);\n\treturn o;\n}\nfunction parse_BIFF5ExternSheet(blob, length, opts) {\n\tif(blob[blob.l + 1] == 0x03) blob[blob.l]++;\n\tvar o = parse_ShortXLUnicodeString(blob, length, opts);\n\treturn o.charCodeAt(0) == 0x03 ? o.slice(1) : o;\n}\n\n/* [MS-XLS] 2.4.176 TODO: check older biff */\nfunction parse_NameCmt(blob, length, opts) {\n\tif(opts.biff < 8) { blob.l += length; return; }\n\tvar cchName = blob.read_shift(2);\n\tvar cchComment = blob.read_shift(2);\n\tvar name = parse_XLUnicodeStringNoCch(blob, cchName, opts);\n\tvar comment = parse_XLUnicodeStringNoCch(blob, cchComment, opts);\n\treturn [name, comment];\n}\n\n/* [MS-XLS] 2.4.260 */\nfunction parse_ShrFmla(blob, length, opts) {\n\tvar ref = parse_RefU(blob, 6);\n\tblob.l++;\n\tvar cUse = blob.read_shift(1);\n\tlength -= 8;\n\treturn [parse_SharedParsedFormula(blob, length, opts), cUse, ref];\n}\n\n/* [MS-XLS] 2.4.4 TODO */\nfunction parse_Array(blob, length, opts) {\n\tvar ref = parse_Ref(blob, 6);\n\t/* TODO: fAlwaysCalc */\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l ++; length -= 7; break;\n\t\tcase 3: case 4: blob.l += 2; length -= 8; break;\n\t\tdefault: blob.l += 6; length -= 12;\n\t}\n\treturn [ref, parse_ArrayParsedFormula(blob, length, opts, ref)];\n}\n\n/* [MS-XLS] 2.4.173 */\nfunction parse_MTRSettings(blob) {\n\tvar fMTREnabled = blob.read_shift(4) !== 0x00;\n\tvar fUserSetThreadCount = blob.read_shift(4) !== 0x00;\n\tvar cUserThreadCount = blob.read_shift(4);\n\treturn [fMTREnabled, fUserSetThreadCount, cUserThreadCount];\n}\n\n/* [MS-XLS] 2.5.186 TODO: BIFF5 */\nfunction parse_NoteSh(blob, length, opts) {\n\tif(opts.biff < 8) return;\n\tvar row = blob.read_shift(2), col = blob.read_shift(2);\n\tvar flags = blob.read_shift(2), idObj = blob.read_shift(2);\n\tvar stAuthor = parse_XLUnicodeString2(blob, 0, opts);\n\tif(opts.biff < 8) blob.read_shift(1);\n\treturn [{r:row,c:col}, stAuthor, idObj, flags];\n}\n\n/* [MS-XLS] 2.4.179 */\nfunction parse_Note(blob, length, opts) {\n\t/* TODO: Support revisions */\n\treturn parse_NoteSh(blob, length, opts);\n}\n\n/* [MS-XLS] 2.4.168 */\nfunction parse_MergeCells(blob, length)/*:Array*/ {\n\tvar merges/*:Array*/ = [];\n\tvar cmcs = blob.read_shift(2);\n\twhile (cmcs--) merges.push(parse_Ref8U(blob,length));\n\treturn merges;\n}\nfunction write_MergeCells(merges/*:Array*/) {\n\tvar o = new_buf(2 + merges.length * 8);\n\to.write_shift(2, merges.length);\n\tfor(var i = 0; i < merges.length; ++i) write_Ref8U(merges[i], o);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.181 TODO: parse all the things! */\nfunction parse_Obj(blob, length, opts) {\n\tif(opts && opts.biff < 8) return parse_BIFF5Obj(blob, length, opts);\n\tvar cmo = parse_FtCmo(blob, 22); // id, ot, flags\n\tvar fts = parse_FtArray(blob, length-22, cmo[1]);\n\treturn { cmo: cmo, ft:fts };\n}\n/* from older spec */\nvar parse_BIFF5OT = [];\nparse_BIFF5OT[0x08] = function(blob, length) {\n\tvar tgt = blob.l + length;\n\tblob.l += 10; // todo\n\tvar cf = blob.read_shift(2);\n\tblob.l += 4;\n\tblob.l += 2; //var cbPictFmla = blob.read_shift(2);\n\tblob.l += 2;\n\tblob.l += 2; //var grbit = blob.read_shift(2);\n\tblob.l += 4;\n\tvar cchName = blob.read_shift(1);\n\tblob.l += cchName; // TODO: stName\n\tblob.l = tgt; // TODO: fmla\n\treturn { fmt:cf };\n};\n\nfunction parse_BIFF5Obj(blob, length, opts) {\n\tblob.l += 4; //var cnt = blob.read_shift(4);\n\tvar ot = blob.read_shift(2);\n\tvar id = blob.read_shift(2);\n\tvar grbit = blob.read_shift(2);\n\tblob.l += 2; //var colL = blob.read_shift(2);\n\tblob.l += 2; //var dxL = blob.read_shift(2);\n\tblob.l += 2; //var rwT = blob.read_shift(2);\n\tblob.l += 2; //var dyT = blob.read_shift(2);\n\tblob.l += 2; //var colR = blob.read_shift(2);\n\tblob.l += 2; //var dxR = blob.read_shift(2);\n\tblob.l += 2; //var rwB = blob.read_shift(2);\n\tblob.l += 2; //var dyB = blob.read_shift(2);\n\tblob.l += 2; //var cbMacro = blob.read_shift(2);\n\tblob.l += 6;\n\tlength -= 36;\n\tvar fts = [];\n\tfts.push((parse_BIFF5OT[ot]||parsenoop)(blob, length, opts));\n\treturn { cmo: [id, ot, grbit], ft:fts };\n}\n\n/* [MS-XLS] 2.4.329 TODO: parse properly */\nfunction parse_TxO(blob, length, opts) {\n\tvar s = blob.l;\n\tvar texts = \"\";\ntry {\n\tblob.l += 4;\n\tvar ot = (opts.lastobj||{cmo:[0,0]}).cmo[1];\n\tvar controlInfo; // eslint-disable-line no-unused-vars\n\tif([0,5,7,11,12,14].indexOf(ot) == -1) blob.l += 6;\n\telse controlInfo = parse_ControlInfo(blob, 6, opts);\n\tvar cchText = blob.read_shift(2);\n\t/*var cbRuns = */blob.read_shift(2);\n\t/*var ifntEmpty = */parseuint16(blob, 2);\n\tvar len = blob.read_shift(2);\n\tblob.l += len;\n\t//var fmla = parse_ObjFmla(blob, s + length - blob.l);\n\n\tfor(var i = 1; i < blob.lens.length-1; ++i) {\n\t\tif(blob.l-s != blob.lens[i]) throw new Error(\"TxO: bad continue record\");\n\t\tvar hdr = blob[blob.l];\n\t\tvar t = parse_XLUnicodeStringNoCch(blob, blob.lens[i+1]-blob.lens[i]-1);\n\t\ttexts += t;\n\t\tif(texts.length >= (hdr ? cchText : 2*cchText)) break;\n\t}\n\tif(texts.length !== cchText && texts.length !== cchText*2) {\n\t\tthrow new Error(\"cchText: \" + cchText + \" != \" + texts.length);\n\t}\n\n\tblob.l = s + length;\n\t/* [MS-XLS] 2.5.272 TxORuns */\n//\tvar rgTxoRuns = [];\n//\tfor(var j = 0; j != cbRuns/8-1; ++j) blob.l += 8;\n//\tvar cchText2 = blob.read_shift(2);\n//\tif(cchText2 !== cchText) throw new Error(\"TxOLastRun mismatch: \" + cchText2 + \" \" + cchText);\n//\tblob.l += 6;\n//\tif(s + length != blob.l) throw new Error(\"TxO \" + (s + length) + \", at \" + blob.l);\n\treturn { t: texts };\n} catch(e) { blob.l = s + length; return { t: texts }; }\n}\n\n/* [MS-XLS] 2.4.140 */\nfunction parse_HLink(blob, length) {\n\tvar ref = parse_Ref8U(blob, 8);\n\tblob.l += 16; /* CLSID */\n\tvar hlink = parse_Hyperlink(blob, length-24);\n\treturn [ref, hlink];\n}\nfunction write_HLink(hl) {\n\tvar O = new_buf(24);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tvar clsid = \"d0 c9 ea 79 f9 ba ce 11 8c 82 00 aa 00 4b a9 0b\".split(\" \");\n\tfor(var i = 0; i < 16; ++i) O.write_shift(1, parseInt(clsid[i], 16));\n\treturn bconcat([O, write_Hyperlink(hl[1])]);\n}\n\n\n/* [MS-XLS] 2.4.141 */\nfunction parse_HLinkTooltip(blob, length) {\n\tblob.read_shift(2);\n\tvar ref = parse_Ref8U(blob, 8);\n\tvar wzTooltip = blob.read_shift((length-10)/2, 'dbcs-cont');\n\twzTooltip = wzTooltip.replace(chr0,\"\");\n\treturn [ref, wzTooltip];\n}\nfunction write_HLinkTooltip(hl) {\n\tvar TT = hl[1].Tooltip;\n\tvar O = new_buf(10 + 2 * (TT.length + 1));\n\tO.write_shift(2, 0x0800);\n\tvar ref = decode_cell(hl[0]);\n\tO.write_shift(2, ref.r); O.write_shift(2, ref.r);\n\tO.write_shift(2, ref.c); O.write_shift(2, ref.c);\n\tfor(var i = 0; i < TT.length; ++i) O.write_shift(2, TT.charCodeAt(i));\n\tO.write_shift(2, 0);\n\treturn O;\n}\n\n/* [MS-XLS] 2.4.63 */\nfunction parse_Country(blob)/*:[string|number, string|number]*/ {\n\tvar o = [0,0], d;\n\td = blob.read_shift(2); o[0] = CountryEnum[d] || d;\n\td = blob.read_shift(2); o[1] = CountryEnum[d] || d;\n\treturn o;\n}\nfunction write_Country(o) {\n\tif(!o) o = new_buf(4);\n\to.write_shift(2, 0x01);\n\to.write_shift(2, 0x01);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.50 ClrtClient */\nfunction parse_ClrtClient(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.188 */\nfunction parse_Palette(blob) {\n\tvar ccv = blob.read_shift(2);\n\tvar o = [];\n\twhile(ccv-->0) o.push(parse_LongRGB(blob, 8));\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.354 */\nfunction parse_XFCRC(blob) {\n\tblob.l += 2;\n\tvar o = {cxfs:0, crc:0};\n\to.cxfs = blob.read_shift(2);\n\to.crc = blob.read_shift(4);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.53 TODO: parse flags */\n/* [MS-XLSB] 2.4.323 TODO: parse flags */\nfunction parse_ColInfo(blob, length, opts) {\n\tif(!opts.cellStyles) return parsenoop(blob, length);\n\tvar w = opts && opts.biff >= 12 ? 4 : 2;\n\tvar colFirst = blob.read_shift(w);\n\tvar colLast = blob.read_shift(w);\n\tvar coldx = blob.read_shift(w);\n\tvar ixfe = blob.read_shift(w);\n\tvar flags = blob.read_shift(2);\n\tif(w == 2) blob.l += 2;\n\tvar o = ({s:colFirst, e:colLast, w:coldx, ixfe:ixfe, flags:flags}/*:any*/);\n\tif(opts.biff >= 5 || !opts.biff) o.level = (flags >> 8) & 0x7;\n\treturn o;\n}\nfunction write_ColInfo(col, idx) {\n\tvar o = new_buf(12);\n\to.write_shift(2, idx);\n\to.write_shift(2, idx);\n\to.write_shift(2, col.width * 256);\n\to.write_shift(2, 0);\n\tvar f = 0;\n\tif(col.hidden) f |= 1;\n\to.write_shift(1, f);\n\tf = col.level || 0;\n\to.write_shift(1, f);\n\to.write_shift(2, 0);\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.257 */\nfunction parse_Setup(blob, length) {\n\tvar o = {};\n\tif(length < 32) return o;\n\tblob.l += 16;\n\to.header = parse_Xnum(blob, 8);\n\to.footer = parse_Xnum(blob, 8);\n\tblob.l += 2;\n\treturn o;\n}\n\n/* [MS-XLS] 2.4.261 */\nfunction parse_ShtProps(blob, length, opts) {\n\tvar def = {area:false};\n\tif(opts.biff != 5) { blob.l += length; return def; }\n\tvar d = blob.read_shift(1); blob.l += 3;\n\tif((d & 0x10)) def.area = true;\n\treturn def;\n}\n\n/* [MS-XLS] 2.4.241 */\nfunction write_RRTabId(n/*:number*/) {\n\tvar out = new_buf(2 * n);\n\tfor(var i = 0; i < n; ++i) out.write_shift(2, i+1);\n\treturn out;\n}\n\nvar parse_Blank = parse_XLSCell; /* [MS-XLS] 2.4.20 Just the cell */\nvar parse_Scl = parseuint16a; /* [MS-XLS] 2.4.247 num, den */\nvar parse_String = parse_XLUnicodeString; /* [MS-XLS] 2.4.268 */\n\n/* --- Specific to versions before BIFF8 --- */\nfunction parse_ImData(blob) {\n\tvar cf = blob.read_shift(2);\n\tvar env = blob.read_shift(2);\n\tvar lcb = blob.read_shift(4);\n\tvar o = {fmt:cf, env:env, len:lcb, data:blob.slice(blob.l,blob.l+lcb)};\n\tblob.l += lcb;\n\treturn o;\n}\n\n/* BIFF2_??? where ??? is the name from [XLS] */\nfunction parse_BIFF2STR(blob, length, opts) {\n\tif(opts.biffguess && opts.biff == 5) opts.biff = 2;\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar str = parse_XLUnicodeString2(blob, length-7, opts);\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n\nfunction parse_BIFF2NUM(blob/*::, length*/) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = parse_Xnum(blob, 8);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2NUM(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(15);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(8, val, 'f');\n\treturn out;\n}\n\nfunction parse_BIFF2INT(blob) {\n\tvar cell = parse_XLSCell(blob, 6);\n\t++blob.l;\n\tvar num = blob.read_shift(2);\n\tcell.t = 'n';\n\tcell.val = num;\n\treturn cell;\n}\nfunction write_BIFF2INT(r/*:number*/, c/*:number*/, val/*:number*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(2, val);\n\treturn out;\n}\n\nfunction parse_BIFF2STRING(blob) {\n\tvar cch = blob.read_shift(1);\n\tif(cch === 0) { blob.l++; return \"\"; }\n\treturn blob.read_shift(cch, 'sbcs-cont');\n}\n\n/* TODO: convert to BIFF8 font struct */\nfunction parse_BIFF2FONTXTRA(blob, length) {\n\tblob.l += 6; // unknown\n\tblob.l += 2; // font weight \"bls\"\n\tblob.l += 1; // charset\n\tblob.l += 3; // unknown\n\tblob.l += 1; // font family\n\tblob.l += length - 13;\n}\n\n/* TODO: parse rich text runs */\nfunction parse_RString(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tvar cch = blob.read_shift(2);\n\tvar str = parse_XLUnicodeStringNoCch(blob, cch, opts);\n\tblob.l = end;\n\tcell.t = 'str';\n\tcell.val = str;\n\treturn cell;\n}\n/* from js-harb (C) 2014-present SheetJS */\nvar DBF = (function() {\nvar dbf_codepage_map = {\n\t/* Code Pages Supported by Visual FoxPro */\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\n\t/* shapefile DBF extension */\n\t/*::[*/0x00/*::]*/: 20127, /*::[*/0x08/*::]*/: 865,\n\t/*::[*/0x09/*::]*/: 437, /*::[*/0x0A/*::]*/: 850,\n\t/*::[*/0x0B/*::]*/: 437, /*::[*/0x0D/*::]*/: 437,\n\t/*::[*/0x0E/*::]*/: 850, /*::[*/0x0F/*::]*/: 437,\n\t/*::[*/0x10/*::]*/: 850, /*::[*/0x11/*::]*/: 437,\n\t/*::[*/0x12/*::]*/: 850, /*::[*/0x13/*::]*/: 932,\n\t/*::[*/0x14/*::]*/: 850, /*::[*/0x15/*::]*/: 437,\n\t/*::[*/0x16/*::]*/: 850, /*::[*/0x17/*::]*/: 865,\n\t/*::[*/0x18/*::]*/: 437, /*::[*/0x19/*::]*/: 437,\n\t/*::[*/0x1A/*::]*/: 850, /*::[*/0x1B/*::]*/: 437,\n\t/*::[*/0x1C/*::]*/: 863, /*::[*/0x1D/*::]*/: 850,\n\t/*::[*/0x1F/*::]*/: 852, /*::[*/0x22/*::]*/: 852,\n\t/*::[*/0x23/*::]*/: 852, /*::[*/0x24/*::]*/: 860,\n\t/*::[*/0x25/*::]*/: 850, /*::[*/0x26/*::]*/: 866,\n\t/*::[*/0x37/*::]*/: 850, /*::[*/0x40/*::]*/: 852,\n\t/*::[*/0x4D/*::]*/: 936, /*::[*/0x4E/*::]*/: 949,\n\t/*::[*/0x4F/*::]*/: 950, /*::[*/0x50/*::]*/: 874,\n\t/*::[*/0x57/*::]*/: 1252, /*::[*/0x58/*::]*/: 1252,\n\t/*::[*/0x59/*::]*/: 1252, /*::[*/0x6C/*::]*/: 863,\n\t/*::[*/0x86/*::]*/: 737, /*::[*/0x87/*::]*/: 852,\n\t/*::[*/0x88/*::]*/: 857, /*::[*/0xCC/*::]*/: 1257,\n\n\t/*::[*/0xFF/*::]*/: 16969\n};\nvar dbf_reverse_map = evert({\n\t/*::[*/0x01/*::]*/: 437, /*::[*/0x02/*::]*/: 850,\n\t/*::[*/0x03/*::]*/: 1252, /*::[*/0x04/*::]*/: 10000,\n\t/*::[*/0x64/*::]*/: 852, /*::[*/0x65/*::]*/: 866,\n\t/*::[*/0x66/*::]*/: 865, /*::[*/0x67/*::]*/: 861,\n\t/*::[*/0x68/*::]*/: 895, /*::[*/0x69/*::]*/: 620,\n\t/*::[*/0x6A/*::]*/: 737, /*::[*/0x6B/*::]*/: 857,\n\t/*::[*/0x78/*::]*/: 950, /*::[*/0x79/*::]*/: 949,\n\t/*::[*/0x7A/*::]*/: 936, /*::[*/0x7B/*::]*/: 932,\n\t/*::[*/0x7C/*::]*/: 874, /*::[*/0x7D/*::]*/: 1255,\n\t/*::[*/0x7E/*::]*/: 1256, /*::[*/0x96/*::]*/: 10007,\n\t/*::[*/0x97/*::]*/: 10029, /*::[*/0x98/*::]*/: 10006,\n\t/*::[*/0xC8/*::]*/: 1250, /*::[*/0xC9/*::]*/: 1251,\n\t/*::[*/0xCA/*::]*/: 1254, /*::[*/0xCB/*::]*/: 1253,\n\t/*::[*/0x00/*::]*/: 20127\n});\nvar DBF_SUPPORTED_VERSIONS = [0x02, 0x03, 0x30, 0x31, 0x83, 0x8B, 0x8C, 0xF5];\n/* TODO: find an actual specification */\nfunction dbf_to_aoa(buf, opts)/*:AOA*/ {\n\tvar out/*:AOA*/ = [];\n\tvar d/*:Block*/ = (new_raw_buf(1)/*:any*/);\n\tswitch(opts.type) {\n\t\tcase 'base64': d = s2a(Base64.decode(buf)); break;\n\t\tcase 'binary': d = s2a(buf); break;\n\t\tcase 'buffer':\n\t\tcase 'array': d = buf; break;\n\t}\n\tprep_blob(d, 0);\n\n\t/* header */\n\tvar ft = d.read_shift(1);\n\tvar memo = !!(ft & 0x88);\n\tvar vfp = false, l7 = false;\n\tswitch(ft) {\n\t\tcase 0x02: break; // dBASE II\n\t\tcase 0x03: break; // dBASE III\n\t\tcase 0x30: vfp = true; memo = true; break; // VFP\n\t\tcase 0x31: vfp = true; memo = true; break; // VFP with autoincrement\n\t\t// 0x43 dBASE IV SQL table files\n\t\t// 0x63 dBASE IV SQL system files\n\t\tcase 0x83: break; // dBASE III with memo\n\t\tcase 0x8B: break; // dBASE IV with memo\n\t\tcase 0x8C: l7 = true; break; // dBASE Level 7 with memo\n\t\t// case 0xCB dBASE IV SQL table files with memo\n\t\tcase 0xF5: break; // FoxPro 2.x with memo\n\t\t// case 0xFB FoxBASE\n\t\tdefault: throw new Error(\"DBF Unsupported Version: \" + ft.toString(16));\n\t}\n\n\tvar nrow = 0, fpos = 0x0209;\n\tif(ft == 0x02) nrow = d.read_shift(2);\n\td.l += 3; // dBASE II stores DDMMYY date, others use YYMMDD\n\tif(ft != 0x02) nrow = d.read_shift(4);\n\tif(nrow > 1048576) nrow = 1e6;\n\n\tif(ft != 0x02) fpos = d.read_shift(2); // header length\n\tvar rlen = d.read_shift(2); // record length\n\n\tvar /*flags = 0,*/ current_cp = opts.codepage || 1252;\n\tif(ft != 0x02) { // 20 reserved bytes\n\t\td.l+=16;\n\t\t/*flags = */d.read_shift(1);\n\t\t//if(memo && ((flags & 0x02) === 0)) throw new Error(\"DBF Flags \" + flags.toString(16) + \" ft \" + ft.toString(16));\n\n\t\t/* codepage present in FoxPro and dBASE Level 7 */\n\t\tif(d[d.l] !== 0) current_cp = dbf_codepage_map[d[d.l]];\n\t\td.l+=1;\n\n\t\td.l+=2;\n\t}\n\tif(l7) d.l += 36; // Level 7: 32 byte \"Language driver name\", 4 byte reserved\n\n/*:: type DBFField = { name:string; len:number; type:string; } */\n\tvar fields/*:Array*/ = [], field/*:DBFField*/ = ({}/*:any*/);\n\tvar hend = Math.min(d.length, (ft == 0x02 ? 0x209 : (fpos - 10 - (vfp ? 264 : 0))));\n\tvar ww = l7 ? 32 : 11;\n\twhile(d.l < hend && d[d.l] != 0x0d) {\n\t\tfield = ({}/*:any*/);\n\t\tfield.name = cptable.utils.decode(current_cp, d.slice(d.l, d.l+ww)).replace(/[\\u0000\\r\\n].*$/g,\"\");\n\t\td.l += ww;\n\t\tfield.type = String.fromCharCode(d.read_shift(1));\n\t\tif(ft != 0x02 && !l7) field.offset = d.read_shift(4);\n\t\tfield.len = d.read_shift(1);\n\t\tif(ft == 0x02) field.offset = d.read_shift(2);\n\t\tfield.dec = d.read_shift(1);\n\t\tif(field.name.length) fields.push(field);\n\t\tif(ft != 0x02) d.l += l7 ? 13 : 14;\n\t\tswitch(field.type) {\n\t\t\tcase 'B': // Double (VFP) / Binary (dBASE L7)\n\t\t\t\tif((!vfp || field.len != 8) && opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase 'G': // General (FoxPro and dBASE L7)\n\t\t\tcase 'P': // Picture (FoxPro and dBASE L7)\n\t\t\t\tif(opts.WTF) console.log('Skipping ' + field.name + ':' + field.type);\n\t\t\t\tbreak;\n\t\t\tcase '+': // Autoincrement (dBASE L7 only)\n\t\t\tcase '0': // _NullFlags (VFP only)\n\t\t\tcase '@': // Timestamp (dBASE L7 only)\n\t\t\tcase 'C': // Character (dBASE II)\n\t\t\tcase 'D': // Date (dBASE III)\n\t\t\tcase 'F': // Float (dBASE IV)\n\t\t\tcase 'I': // Long (VFP and dBASE L7)\n\t\t\tcase 'L': // Logical (dBASE II)\n\t\t\tcase 'M': // Memo (dBASE III)\n\t\t\tcase 'N': // Number (dBASE II)\n\t\t\tcase 'O': // Double (dBASE L7 only)\n\t\t\tcase 'T': // Datetime (VFP only)\n\t\t\tcase 'Y': // Currency (VFP only)\n\t\t\t\tbreak;\n\t\t\tdefault: throw new Error('Unknown Field Type: ' + field.type);\n\t\t}\n\t}\n\n\tif(d[d.l] !== 0x0D) d.l = fpos-1;\n\tif(d.read_shift(1) !== 0x0D) throw new Error(\"DBF Terminator not found \" + d.l + \" \" + d[d.l]);\n\td.l = fpos;\n\n\t/* data */\n\tvar R = 0, C = 0;\n\tout[0] = [];\n\tfor(C = 0; C != fields.length; ++C) out[0][C] = fields[C].name;\n\twhile(nrow-- > 0) {\n\t\tif(d[d.l] === 0x2A) {\n\t\t\t// TODO: record marked as deleted -- create a hidden row?\n\t\t\td.l+=rlen;\n\t\t\tcontinue;\n\t\t}\n\t\t++d.l;\n\t\tout[++R] = []; C = 0;\n\t\tfor(C = 0; C != fields.length; ++C) {\n\t\t\tvar dd = d.slice(d.l, d.l+fields[C].len); d.l+=fields[C].len;\n\t\t\tprep_blob(dd, 0);\n\t\t\tvar s = cptable.utils.decode(current_cp, dd);\n\t\t\tswitch(fields[C].type) {\n\t\t\t\tcase 'C':\n\t\t\t\t\t// NOTE: it is conventional to write ' / / ' for empty dates\n\t\t\t\t\tif(s.trim().length) out[R][C] = s.replace(/\\s+$/,\"\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'D':\n\t\t\t\t\tif(s.length === 8) out[R][C] = new Date(+s.slice(0,4), +s.slice(4,6)-1, +s.slice(6,8));\n\t\t\t\t\telse out[R][C] = s;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'F': out[R][C] = parseFloat(s.trim()); break;\n\t\t\t\tcase '+': case 'I': out[R][C] = l7 ? dd.read_shift(-4, 'i') ^ 0x80000000 : dd.read_shift(4, 'i'); break;\n\t\t\t\tcase 'L': switch(s.trim().toUpperCase()) {\n\t\t\t\t\tcase 'Y': case 'T': out[R][C] = true; break;\n\t\t\t\t\tcase 'N': case 'F': out[R][C] = false; break;\n\t\t\t\t\tcase '': case '?': break;\n\t\t\t\t\tdefault: throw new Error(\"DBF Unrecognized L:|\" + s + \"|\");\n\t\t\t\t\t} break;\n\t\t\t\tcase 'M': /* TODO: handle memo files */\n\t\t\t\t\tif(!memo) throw new Error(\"DBF Unexpected MEMO for type \" + ft.toString(16));\n\t\t\t\t\tout[R][C] = \"##MEMO##\" + (l7 ? parseInt(s.trim(), 10): dd.read_shift(4));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'N':\n\t\t\t\t\ts = s.replace(/\\u0000/g,\"\").trim();\n\t\t\t\t\t// NOTE: dBASE II interprets \" . \" as 0\n\t\t\t\t\tif(s && s != \".\") out[R][C] = +s || 0; break;\n\t\t\t\tcase '@':\n\t\t\t\t\t// NOTE: dBASE specs appear to be incorrect\n\t\t\t\t\tout[R][C] = new Date(dd.read_shift(-8, 'f') - 0x388317533400);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'T': out[R][C] = new Date((dd.read_shift(4) - 0x253D8C) * 0x5265C00 + dd.read_shift(4)); break;\n\t\t\t\tcase 'Y': out[R][C] = dd.read_shift(4,'i')/1e4; break;\n\t\t\t\tcase 'O': out[R][C] = -dd.read_shift(-8, 'f'); break;\n\t\t\t\tcase 'B': if(vfp && fields[C].len == 8) { out[R][C] = dd.read_shift(8,'f'); break; }\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'G': case 'P': dd.l += fields[C].len; break;\n\t\t\t\tcase '0':\n\t\t\t\t\tif(fields[C].name === '_NullFlags') break;\n\t\t\t\t\t/* falls through */\n\t\t\t\tdefault: throw new Error(\"DBF Unsupported data type \" + fields[C].type);\n\t\t\t}\n\t\t}\n\t}\n\tif(ft != 0x02) if(d.l < d.length && d[d.l++] != 0x1A) throw new Error(\"DBF EOF Marker missing \" + (d.l-1) + \" of \" + d.length + \" \" + d[d.l-1].toString(16));\n\tif(opts && opts.sheetRows) out = out.slice(0, opts.sheetRows);\n\treturn out;\n}\n\nfunction dbf_to_sheet(buf, opts)/*:Worksheet*/ {\n\tvar o = opts || {};\n\tif(!o.dateNF) o.dateNF = \"yyyymmdd\";\n\treturn aoa_to_sheet(dbf_to_aoa(buf, o), o);\n}\n\nfunction dbf_to_workbook(buf, opts)/*:Workbook*/ {\n\ttry { return sheet_to_workbook(dbf_to_sheet(buf, opts), opts); }\n\tcatch(e) { if(opts && opts.WTF) throw e; }\n\treturn ({SheetNames:[],Sheets:{}});\n}\n\nvar _RLEN = { 'B': 8, 'C': 250, 'L': 1, 'D': 8, '?': 0, '': 0 };\nfunction sheet_to_dbf(ws/*:Worksheet*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(+o.codepage >= 0) set_cp(+o.codepage);\n\tif(o.type == \"string\") throw new Error(\"Cannot write DBF to JS string\");\n\tvar ba = buf_array();\n\tvar aoa/*:AOA*/ = sheet_to_json(ws, {header:1, raw:true, cellDates:true});\n\tvar headers = aoa[0], data = aoa.slice(1);\n\tvar i = 0, j = 0, hcnt = 0, rlen = 1;\n\tfor(i = 0; i < headers.length; ++i) {\n\t\tif(i == null) continue;\n\t\t++hcnt;\n\t\tif(typeof headers[i] === 'number') headers[i] = headers[i].toString(10);\n\t\tif(typeof headers[i] !== 'string') throw new Error(\"DBF Invalid column name \" + headers[i] + \" |\" + (typeof headers[i]) + \"|\");\n\t\tif(headers.indexOf(headers[i]) !== i) for(j=0; j<1024;++j)\n\t\t\tif(headers.indexOf(headers[i] + \"_\" + j) == -1) { headers[i] += \"_\" + j; break; }\n\t}\n\tvar range = safe_decode_range(ws['!ref']);\n\tvar coltypes/*:Array*/ = [];\n\tfor(i = 0; i <= range.e.c - range.s.c; ++i) {\n\t\tvar col/*:Array*/ = [];\n\t\tfor(j=0; j < data.length; ++j) {\n\t\t\tif(data[j][i] != null) col.push(data[j][i]);\n\t\t}\n\t\tif(col.length == 0 || headers[i] == null) { coltypes[i] = '?'; continue; }\n\t\tvar guess = '', _guess = '';\n\t\tfor(j = 0; j < col.length; ++j) {\n\t\t\tswitch(typeof col[j]) {\n\t\t\t\t/* TODO: check if L2 compat is desired */\n\t\t\t\tcase 'number': _guess = 'B'; break;\n\t\t\t\tcase 'string': _guess = 'C'; break;\n\t\t\t\tcase 'boolean': _guess = 'L'; break;\n\t\t\t\tcase 'object': _guess = col[j] instanceof Date ? 'D' : 'C'; break;\n\t\t\t\tdefault: _guess = 'C';\n\t\t\t}\n\t\t\tguess = guess && guess != _guess ? 'C' : _guess;\n\t\t\tif(guess == 'C') break;\n\t\t}\n\t\trlen += _RLEN[guess] || 0;\n\t\tcoltypes[i] = guess;\n\t}\n\n\tvar h = ba.next(32);\n\th.write_shift(4, 0x13021130);\n\th.write_shift(4, data.length);\n\th.write_shift(2, 296 + 32 * hcnt);\n\th.write_shift(2, rlen);\n\tfor(i=0; i < 4; ++i) h.write_shift(4, 0);\n\th.write_shift(4, 0x00000000 | ((+dbf_reverse_map[/*::String(*/current_ansi/*::)*/] || 0x03)<<8));\n\n\tfor(i = 0, j = 0; i < headers.length; ++i) {\n\t\tif(headers[i] == null) continue;\n\t\tvar hf = ba.next(32);\n\t\tvar _f = (headers[i].slice(-10) + \"\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\").slice(0, 11);\n\t\thf.write_shift(1, _f, \"sbcs\");\n\t\thf.write_shift(1, coltypes[i] == '?' ? 'C' : coltypes[i], \"sbcs\");\n\t\thf.write_shift(4, j);\n\t\thf.write_shift(1, _RLEN[coltypes[i]] || 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(1, 0x02);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(1, 0);\n\t\thf.write_shift(4, 0);\n\t\thf.write_shift(4, 0);\n\t\tj += _RLEN[coltypes[i]] || 0;\n\t}\n\n\tvar hb = ba.next(264);\n\thb.write_shift(4, 0x0000000D);\n\tfor(i=0; i < 65;++i) hb.write_shift(4, 0x00000000);\n\tfor(i=0; i < data.length; ++i) {\n\t\tvar rout = ba.next(rlen);\n\t\trout.write_shift(1, 0);\n\t\tfor(j=0; j\":190, \"?\":191, \"{\":223\n\t}/*:any*/);\n\tvar sylk_char_regex = new RegExp(\"\\u001BN(\" + keys(sylk_escapes).join(\"|\").replace(/\\|\\|\\|/, \"|\\\\||\").replace(/([?()+])/g,\"\\\\$1\") + \"|\\\\|)\", \"gm\");\n\tvar sylk_char_fn = function(_, $1){ var o = sylk_escapes[$1]; return typeof o == \"number\" ? _getansi(o) : o; };\n\tvar decode_sylk_char = function($$, $1, $2) { var newcc = (($1.charCodeAt(0) - 0x20)<<4) | ($2.charCodeAt(0) - 0x30); return newcc == 59 ? $$ : _getansi(newcc); };\n\tsylk_escapes[\"|\"] = 254;\n\t/* TODO: find an actual specification */\n\tfunction sylk_to_aoa(d/*:RawData*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return sylk_to_aoa_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return sylk_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return sylk_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return sylk_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction sylk_to_aoa_str(str/*:string*/, opts)/*:[AOA, Worksheet]*/ {\n\t\tvar records = str.split(/[\\n\\r]+/), R = -1, C = -1, ri = 0, rj = 0, arr/*:AOA*/ = [];\n\t\tvar formats/*:Array*/ = [];\n\t\tvar next_cell_format/*:string|null*/ = null;\n\t\tvar sht = {}, rowinfo/*:Array*/ = [], colinfo/*:Array*/ = [], cw/*:Array*/ = [];\n\t\tvar Mval = 0, j;\n\t\tif(+opts.codepage >= 0) set_cp(+opts.codepage);\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tMval = 0;\n\t\t\tvar rstr=records[ri].trim().replace(/\\x1B([\\x20-\\x2F])([\\x30-\\x3F])/g, decode_sylk_char).replace(sylk_char_regex, sylk_char_fn);\n\t\t\tvar record=rstr.replace(/;;/g, \"\\u0000\").split(\";\").map(function(x) { return x.replace(/\\u0000/g, \";\"); });\n\t\t\tvar RT=record[0], val;\n\t\t\tif(rstr.length > 0) switch(RT) {\n\t\t\tcase 'ID': break; /* header */\n\t\t\tcase 'E': break; /* EOF */\n\t\t\tcase 'B': break; /* dimensions */\n\t\t\tcase 'O': break; /* options? */\n\t\t\tcase 'W': break; /* window? */\n\t\t\tcase 'P':\n\t\t\t\tif(record[1].charAt(0) == 'P')\n\t\t\t\t\tformats.push(rstr.slice(3).replace(/;;/g, \";\"));\n\t\t\t\tbreak;\n\t\t\tcase 'C':\n\t\t\tvar C_seen_K = false, C_seen_X = false, C_seen_S = false, C_seen_E = false, _R = -1, _C = -1;\n\t\t\tfor(rj=1; rj -1 && arr[_R][_C];\n\t\t\t\tif(!shrbase || !shrbase[1]) throw new Error(\"SYLK shared formula cannot find base\");\n\t\t\t\tarr[R][C][1] = shift_formula_str(shrbase[1], {r: R - _R, c: C - _C});\n\t\t\t}\n\t\t\tbreak;\n\t\t\tcase 'F':\n\t\t\tvar F_seen = 0;\n\t\t\tfor(rj=1; rj 0) { rowinfo[R].hpt = Mval; rowinfo[R].hpx = pt2px(Mval); }\n\t\t\t\t\telse if(Mval === 0) rowinfo[R].hidden = true;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t\tif(F_seen < 1) next_cell_format = null; break;\n\t\t\tdefault: if(opts && opts.WTF) throw new Error(\"SYLK bad record \" + rstr);\n\t\t\t}\n\t\t}\n\t\tif(rowinfo.length > 0) sht['!rows'] = rowinfo;\n\t\tif(colinfo.length > 0) sht['!cols'] = colinfo;\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn [arr, sht];\n\t}\n\n\tfunction sylk_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar aoasht = sylk_to_aoa(d, opts);\n\t\tvar aoa = aoasht[0], ws = aoasht[1];\n\t\tvar o = aoa_to_sheet(aoa, opts);\n\t\tkeys(ws).forEach(function(k) { o[k] = ws[k]; });\n\t\treturn o;\n\t}\n\n\tfunction sylk_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(sylk_to_sheet(d, opts), opts); }\n\n\tfunction write_ws_cell_sylk(cell/*:Cell*/, ws/*:Worksheet*/, R/*:number*/, C/*:number*//*::, opts*/)/*:string*/ {\n\t\tvar o = \"C;Y\" + (R+1) + \";X\" + (C+1) + \";K\";\n\t\tswitch(cell.t) {\n\t\t\tcase 'n':\n\t\t\t\to += (cell.v||0);\n\t\t\t\tif(cell.f && !cell.F) o += \";E\" + a1_to_rc(cell.f, {r:R, c:C}); break;\n\t\t\tcase 'b': o += cell.v ? \"TRUE\" : \"FALSE\"; break;\n\t\t\tcase 'e': o += cell.w || cell.v; break;\n\t\t\tcase 'd': o += '\"' + (cell.w || cell.v) + '\"'; break;\n\t\t\tcase 's': o += '\"' + cell.v.replace(/\"/g,\"\") + '\"'; break;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction write_ws_cols_sylk(out, cols) {\n\t\tcols.forEach(function(col, i) {\n\t\t\tvar rec = \"F;W\" + (i+1) + \" \" + (i+1) + \" \";\n\t\t\tif(col.hidden) rec += \"0\";\n\t\t\telse {\n\t\t\t\tif(typeof col.width == 'number' && !col.wpx) col.wpx = width2px(col.width);\n\t\t\t\tif(typeof col.wpx == 'number' && !col.wch) col.wch = px2char(col.wpx);\n\t\t\t\tif(typeof col.wch == 'number') rec += Math.round(col.wch);\n\t\t\t}\n\t\t\tif(rec.charAt(rec.length - 1) != \" \") out.push(rec);\n\t\t});\n\t}\n\n\tfunction write_ws_rows_sylk(out/*:Array*/, rows/*:Array*/) {\n\t\trows.forEach(function(row, i) {\n\t\t\tvar rec = \"F;\";\n\t\t\tif(row.hidden) rec += \"M0;\";\n\t\t\telse if(row.hpt) rec += \"M\" + 20 * row.hpt + \";\";\n\t\t\telse if(row.hpx) rec += \"M\" + 20 * px2pt(row.hpx) + \";\";\n\t\t\tif(rec.length > 2) out.push(rec + \"R\" + (i+1));\n\t\t});\n\t}\n\n\tfunction sheet_to_sylk(ws/*:Worksheet*/, opts/*:?any*/)/*:string*/ {\n\t\tvar preamble/*:Array*/ = [\"ID;PWXL;N;E\"], o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tvar RS = \"\\r\\n\";\n\n\t\tpreamble.push(\"P;PGeneral\");\n\t\tpreamble.push(\"F;P0;DG0G8;M255\");\n\t\tif(ws['!cols']) write_ws_cols_sylk(preamble, ws['!cols']);\n\t\tif(ws['!rows']) write_ws_rows_sylk(preamble, ws['!rows']);\n\n\t\tpreamble.push(\"B;Y\" + (r.e.r - r.s.r + 1) + \";X\" + (r.e.c - r.s.c + 1) + \";D\" + [r.s.c,r.s.r,r.e.c,r.e.r].join(\" \"));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || (cell.v == null && (!cell.f || cell.F))) continue;\n\t\t\t\to.push(write_ws_cell_sylk(cell, ws, R, C, opts));\n\t\t\t}\n\t\t}\n\t\treturn preamble.join(RS) + RS + o.join(RS) + RS + \"E\" + RS;\n\t}\n\n\treturn {\n\t\tto_workbook: sylk_to_workbook,\n\t\tto_sheet: sylk_to_sheet,\n\t\tfrom_sheet: sheet_to_sylk\n\t};\n})();\n\nvar DIF = (function() {\n\tfunction dif_to_aoa(d/*:RawData*/, opts)/*:AOA*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return dif_to_aoa_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return dif_to_aoa_str(d, opts);\n\t\t\tcase 'buffer': return dif_to_aoa_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return dif_to_aoa_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\tfunction dif_to_aoa_str(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tif (records[ri].trim() === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\tif (R < 0) continue;\n\t\t\tvar metadata = records[ri].trim().split(\",\");\n\t\t\tvar type = metadata[0], value = metadata[1];\n\t\t\t++ri;\n\t\t\tvar data = records[ri] || \"\";\n\t\t\twhile(((data.match(/[\"]/g)||[]).length & 1) && ri < records.length - 1) data += \"\\n\" + records[++ri];\n\t\t\tdata = data.trim();\n\t\t\tswitch (+type) {\n\t\t\t\tcase -1:\n\t\t\t\t\tif (data === 'BOT') { arr[++R] = []; C = 0; continue; }\n\t\t\t\t\telse if (data !== 'EOD') throw new Error(\"Unrecognized DIF special command \" + data);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0:\n\t\t\t\t\tif(data === 'TRUE') arr[R][C] = true;\n\t\t\t\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\t\t\t\telse if(!isNaN(fuzzynum(value))) arr[R][C] = fuzzynum(value);\n\t\t\t\t\telse if(!isNaN(fuzzydate(value).getDate())) arr[R][C] = parseDate(value);\n\t\t\t\t\telse arr[R][C] = value;\n\t\t\t\t\t++C; break;\n\t\t\t\tcase 1:\n\t\t\t\t\tdata = data.slice(1,data.length-1);\n\t\t\t\t\tdata = data.replace(/\"\"/g, '\"');\n\t\t\t\t\tif(DIF_XL && data && data.match(/^=\".*\"$/)) data = data.slice(2, -1);\n\t\t\t\t\tarr[R][C++] = data !== '' ? data : null;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (data === 'EOD') break;\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction dif_to_sheet(str/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(dif_to_aoa(str, opts), opts); }\n\tfunction dif_to_workbook(str/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(dif_to_sheet(str, opts), opts); }\n\n\tvar sheet_to_dif = (function() {\n\t\tvar push_field = function pf(o/*:Array*/, topic/*:string*/, v/*:number*/, n/*:number*/, s/*:string*/) {\n\t\t\to.push(topic);\n\t\t\to.push(v + \",\" + n);\n\t\t\to.push('\"' + s.replace(/\"/g,'\"\"') + '\"');\n\t\t};\n\t\tvar push_value = function po(o/*:Array*/, type/*:number*/, v/*:any*/, s/*:string*/) {\n\t\t\to.push(type + \",\" + v);\n\t\t\to.push(type == 1 ? '\"' + s.replace(/\"/g,'\"\"') + '\"' : s);\n\t\t};\n\t\treturn function sheet_to_dif(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\t\tvar o/*:Array*/ = [];\n\t\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\t\tvar dense = Array.isArray(ws);\n\t\t\tpush_field(o, \"TABLE\", 0, 1, \"sheetjs\");\n\t\t\tpush_field(o, \"VECTORS\", 0, r.e.r - r.s.r + 1,\"\");\n\t\t\tpush_field(o, \"TUPLES\", 0, r.e.c - r.s.c + 1,\"\");\n\t\t\tpush_field(o, \"DATA\", 0, 0,\"\");\n\t\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\t\tpush_value(o, -1, 0, \"BOT\");\n\t\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\t\tif(!cell) { push_value(o, 1, 0, \"\"); continue;}\n\t\t\t\t\tswitch(cell.t) {\n\t\t\t\t\t\tcase 'n':\n\t\t\t\t\t\t\tvar val = DIF_XL ? cell.w : cell.v;\n\t\t\t\t\t\t\tif(!val && cell.v != null) val = cell.v;\n\t\t\t\t\t\t\tif(val == null) {\n\t\t\t\t\t\t\t\tif(DIF_XL && cell.f && !cell.F) push_value(o, 1, 0, \"=\" + cell.f);\n\t\t\t\t\t\t\t\telse push_value(o, 1, 0, \"\");\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse push_value(o, 0, val, \"V\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'b':\n\t\t\t\t\t\t\tpush_value(o, 0, cell.v ? 1 : 0, cell.v ? \"TRUE\" : \"FALSE\");\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 's':\n\t\t\t\t\t\t\tpush_value(o, 1, 0, (!DIF_XL || isNaN(cell.v)) ? cell.v : '=\"' + cell.v + '\"');\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tif(!cell.w) cell.w = SSF.format(cell.z || SSF._table[14], datenum(parseDate(cell.v)));\n\t\t\t\t\t\t\tif(DIF_XL) push_value(o, 0, cell.w, \"V\");\n\t\t\t\t\t\t\telse push_value(o, 1, 0, cell.w);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tdefault: push_value(o, 1, 0, \"\");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tpush_value(o, -1, 0, \"EOD\");\n\t\t\tvar RS = \"\\r\\n\";\n\t\t\tvar oo = o.join(RS);\n\t\t\t//while((oo.length & 0x7F) != 0) oo += \"\\0\";\n\t\t\treturn oo;\n\t\t};\n\t})();\n\treturn {\n\t\tto_workbook: dif_to_workbook,\n\t\tto_sheet: dif_to_sheet,\n\t\tfrom_sheet: sheet_to_dif\n\t};\n})();\n\nvar ETH = (function() {\n\tfunction decode(s/*:string*/)/*:string*/ { return s.replace(/\\\\b/g,\"\\\\\").replace(/\\\\c/g,\":\").replace(/\\\\n/g,\"\\n\"); }\n\tfunction encode(s/*:string*/)/*:string*/ { return s.replace(/\\\\/g, \"\\\\b\").replace(/:/g, \"\\\\c\").replace(/\\n/g,\"\\\\n\"); }\n\n\tfunction eth_to_aoa(str/*:string*/, opts)/*:AOA*/ {\n\t\tvar records = str.split('\\n'), R = -1, C = -1, ri = 0, arr/*:AOA*/ = [];\n\t\tfor (; ri !== records.length; ++ri) {\n\t\t\tvar record = records[ri].trim().split(\":\");\n\t\t\tif(record[0] !== 'cell') continue;\n\t\t\tvar addr = decode_cell(record[1]);\n\t\t\tif(arr.length <= addr.r) for(R = arr.length; R <= addr.r; ++R) if(!arr[R]) arr[R] = [];\n\t\t\tR = addr.r; C = addr.c;\n\t\t\tswitch(record[2]) {\n\t\t\t\tcase 't': arr[R][C] = decode(record[3]); break;\n\t\t\t\tcase 'v': arr[R][C] = +record[3]; break;\n\t\t\t\tcase 'vtf': var _f = record[record.length - 1];\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 'vtc':\n\t\t\t\t\tswitch(record[3]) {\n\t\t\t\t\t\tcase 'nl': arr[R][C] = +record[4] ? true : false; break;\n\t\t\t\t\t\tdefault: arr[R][C] = +record[4]; break;\n\t\t\t\t\t}\n\t\t\t\t\tif(record[2] == 'vtf') arr[R][C] = [arr[R][C], _f];\n\t\t\t}\n\t\t}\n\t\tif(opts && opts.sheetRows) arr = arr.slice(0, opts.sheetRows);\n\t\treturn arr;\n\t}\n\n\tfunction eth_to_sheet(d/*:string*/, opts)/*:Worksheet*/ { return aoa_to_sheet(eth_to_aoa(d, opts), opts); }\n\tfunction eth_to_workbook(d/*:string*/, opts)/*:Workbook*/ { return sheet_to_workbook(eth_to_sheet(d, opts), opts); }\n\n\tvar header = [\n\t\t\"socialcalc:version:1.5\",\n\t\t\"MIME-Version: 1.0\",\n\t\t\"Content-Type: multipart/mixed; boundary=SocialCalcSpreadsheetControlSave\"\n\t].join(\"\\n\");\n\n\tvar sep = [\n\t\t\"--SocialCalcSpreadsheetControlSave\",\n\t\t\"Content-type: text/plain; charset=UTF-8\"\n\t].join(\"\\n\") + \"\\n\";\n\n\t/* TODO: the other parts */\n\tvar meta = [\n\t\t\"# SocialCalc Spreadsheet Control Save\",\n\t\t\"part:sheet\"\n\t].join(\"\\n\");\n\n\tvar end = \"--SocialCalcSpreadsheetControlSave--\";\n\n\tfunction sheet_to_eth_data(ws/*:Worksheet*/)/*:string*/ {\n\t\tif(!ws || !ws['!ref']) return \"\";\n\t\tvar o/*:Array*/ = [], oo/*:Array*/ = [], cell, coord = \"\";\n\t\tvar r = decode_range(ws['!ref']);\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tcoord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null || cell.t === 'z') continue;\n\t\t\t\too = [\"cell\", coord, 't'];\n\t\t\t\tswitch(cell.t) {\n\t\t\t\t\tcase 's': case 'str': oo.push(encode(cell.v)); break;\n\t\t\t\t\tcase 'n':\n\t\t\t\t\t\tif(!cell.f) { oo[2]='v'; oo[3]=cell.v; }\n\t\t\t\t\t\telse { oo[2]='vtf'; oo[3]='n'; oo[4]=cell.v; oo[5]=encode(cell.f); }\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'b':\n\t\t\t\t\t\too[2] = 'vt'+(cell.f?'f':'c'); oo[3]='nl'; oo[4]=cell.v?\"1\":\"0\";\n\t\t\t\t\t\too[5] = encode(cell.f||(cell.v?'TRUE':'FALSE'));\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'd':\n\t\t\t\t\t\tvar t = datenum(parseDate(cell.v));\n\t\t\t\t\t\too[2] = 'vtc'; oo[3] = 'nd'; oo[4] = \"\"+t;\n\t\t\t\t\t\too[5] = cell.w || SSF.format(cell.z || SSF._table[14], t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'e': continue;\n\t\t\t\t}\n\t\t\t\to.push(oo.join(\":\"));\n\t\t\t}\n\t\t}\n\t\to.push(\"sheet:c:\" + (r.e.c-r.s.c+1) + \":r:\" + (r.e.r-r.s.r+1) + \":tvf:1\");\n\t\to.push(\"valueformat:1:text-wiki\");\n\t\t//o.push(\"copiedfrom:\" + ws['!ref']); // clipboard only\n\t\treturn o.join(\"\\n\");\n\t}\n\n\tfunction sheet_to_eth(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\treturn [header, sep, meta, sep, sheet_to_eth_data(ws), end].join(\"\\n\");\n\t\t// return [\"version:1.5\", sheet_to_eth_data(ws)].join(\"\\n\"); // clipboard form\n\t}\n\n\treturn {\n\t\tto_workbook: eth_to_workbook,\n\t\tto_sheet: eth_to_sheet,\n\t\tfrom_sheet: sheet_to_eth\n\t};\n})();\n\nvar PRN = (function() {\n\tfunction set_text_arr(data/*:string*/, arr/*:AOA*/, R/*:number*/, C/*:number*/, o/*:any*/) {\n\t\tif(o.raw) arr[R][C] = data;\n\t\telse if(data === \"\"){/* empty */}\n\t\telse if(data === 'TRUE') arr[R][C] = true;\n\t\telse if(data === 'FALSE') arr[R][C] = false;\n\t\telse if(!isNaN(fuzzynum(data))) arr[R][C] = fuzzynum(data);\n\t\telse if(!isNaN(fuzzydate(data).getDate())) arr[R][C] = parseDate(data);\n\t\telse arr[R][C] = data;\n\t}\n\n\tfunction prn_to_aoa_str(f/*:string*/, opts)/*:AOA*/ {\n\t\tvar o = opts || {};\n\t\tvar arr/*:AOA*/ = ([]/*:any*/);\n\t\tif(!f || f.length === 0) return arr;\n\t\tvar lines = f.split(/[\\r\\n]/);\n\t\tvar L = lines.length - 1;\n\t\twhile(L >= 0 && lines[L].length === 0) --L;\n\t\tvar start = 10, idx = 0;\n\t\tvar R = 0;\n\t\tfor(; R <= L; ++R) {\n\t\t\tidx = lines[R].indexOf(\" \");\n\t\t\tif(idx == -1) idx = lines[R].length; else idx++;\n\t\t\tstart = Math.max(start, idx);\n\t\t}\n\t\tfor(R = 0; R <= L; ++R) {\n\t\t\tarr[R] = [];\n\t\t\t/* TODO: confirm that widths are always 10 */\n\t\t\tvar C = 0;\n\t\t\tset_text_arr(lines[R].slice(0, start).trim(), arr, R, C, o);\n\t\t\tfor(C = 1; C <= (lines[R].length - start)/10 + 1; ++C)\n\t\t\t\tset_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C,o);\n\t\t}\n\t\tif(o.sheetRows) arr = arr.slice(0, o.sheetRows);\n\t\treturn arr;\n\t}\n\n\t// List of accepted CSV separators\n\tvar guess_seps = {\n\t\t/*::[*/0x2C/*::]*/: ',',\n\t\t/*::[*/0x09/*::]*/: \"\\t\",\n\t\t/*::[*/0x3B/*::]*/: ';',\n\t\t/*::[*/0x7C/*::]*/: '|'\n\t};\n\n\t// CSV separator weights to be used in case of equal numbers\n\tvar guess_sep_weights = {\n\t\t/*::[*/0x2C/*::]*/: 3,\n\t\t/*::[*/0x09/*::]*/: 2,\n\t\t/*::[*/0x3B/*::]*/: 1,\n\t\t/*::[*/0x7C/*::]*/: 0\n\t};\n\n\tfunction guess_sep(str) {\n\t\tvar cnt = {}, instr = false, end = 0, cc = 0;\n\t\tfor(;end < str.length;++end) {\n\t\t\tif((cc=str.charCodeAt(end)) == 0x22) instr = !instr;\n\t\t\telse if(!instr && cc in guess_seps) cnt[cc] = (cnt[cc]||0)+1;\n\t\t}\n\n\t\tcc = [];\n\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\tcc.push([ cnt[end], end ]);\n\t\t}\n\n\t\tif ( !cc.length ) {\n\t\t\tcnt = guess_sep_weights;\n\t\t\tfor(end in cnt) if ( Object.prototype.hasOwnProperty.call(cnt, end) ) {\n\t\t\t\tcc.push([ cnt[end], end ]);\n\t\t\t}\n\t\t}\n\n\t\tcc.sort(function(a, b) { return a[0] - b[0] || guess_sep_weights[a[1]] - guess_sep_weights[b[1]]; });\n\n\t\treturn guess_seps[cc.pop()[1]] || 0x2C;\n\t}\n\n\tfunction dsv_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar sep = \"\";\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:0}}/*:any*/);\n\n\t\tif(str.slice(0,4) == \"sep=\") {\n\t\t\t// If the line ends in \\r\\n\n\t\t\tif(str.charCodeAt(5) == 13 && str.charCodeAt(6) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(7);\n\t\t\t}\n\t\t\t// If line ends in \\r OR \\n\n\t\t\telse if(str.charCodeAt(5) == 13 || str.charCodeAt(5) == 10 ) {\n\t\t\t\tsep = str.charAt(4); str = str.slice(6);\n\t\t\t}\n\t\t\telse sep = guess_sep(str.slice(0,1024));\n\t\t}\n\t\telse sep = guess_sep(str.slice(0,1024));\n\t\tvar R = 0, C = 0, v = 0;\n\t\tvar start = 0, end = 0, sepcc = sep.charCodeAt(0), instr = false, cc=0, startcc=str.charCodeAt(0);\n\t\tstr = str.replace(/\\r\\n/mg, \"\\n\");\n\t\tvar _re/*:?RegExp*/ = o.dateNF != null ? dateNF_regex(o.dateNF) : null;\n\t\tfunction finish_cell() {\n\t\t\tvar s = str.slice(start, end);\n\t\t\tvar cell = ({}/*:any*/);\n\t\t\tif(s.charAt(0) == '\"' && s.charAt(s.length - 1) == '\"') s = s.slice(1,-1).replace(/\"\"/g,'\"');\n\t\t\tif(s.length === 0) cell.t = 'z';\n\t\t\telse if(o.raw) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.trim().length === 0) { cell.t = 's'; cell.v = s; }\n\t\t\telse if(s.charCodeAt(0) == 0x3D) {\n\t\t\t\tif(s.charCodeAt(1) == 0x22 && s.charCodeAt(s.length - 1) == 0x22) { cell.t = 's'; cell.v = s.slice(2,-1).replace(/\"\"/g,'\"'); }\n\t\t\t\telse if(fuzzyfmla(s)) { cell.t = 'n'; cell.f = s.slice(1); }\n\t\t\t\telse { cell.t = 's'; cell.v = s; } }\n\t\t\telse if(s == \"TRUE\") { cell.t = 'b'; cell.v = true; }\n\t\t\telse if(s == \"FALSE\") { cell.t = 'b'; cell.v = false; }\n\t\t\telse if(!isNaN(v = fuzzynum(s))) { cell.t = 'n'; if(o.cellText !== false) cell.w = s; cell.v = v; }\n\t\t\telse if(!isNaN(fuzzydate(s).getDate()) || _re && s.match(_re)) {\n\t\t\t\tcell.z = o.dateNF || SSF._table[14];\n\t\t\t\tvar k = 0;\n\t\t\t\tif(_re && s.match(_re)){ s=dateNF_fix(s, o.dateNF, (s.match(_re)||[])); k=1; }\n\t\t\t\tif(o.cellDates) { cell.t = 'd'; cell.v = parseDate(s, k); }\n\t\t\t\telse { cell.t = 'n'; cell.v = datenum(parseDate(s, k)); }\n\t\t\t\tif(o.cellText !== false) cell.w = SSF.format(cell.z, cell.v instanceof Date ? datenum(cell.v):cell.v);\n\t\t\t\tif(!o.cellNF) delete cell.z;\n\t\t\t} else {\n\t\t\t\tcell.t = 's';\n\t\t\t\tcell.v = s;\n\t\t\t}\n\t\t\tif(cell.t == 'z'){}\n\t\t\telse if(o.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = cell; }\n\t\t\telse ws[encode_cell({c:C,r:R})] = cell;\n\t\t\tstart = end+1; startcc = str.charCodeAt(start);\n\t\t\tif(range.e.c < C) range.e.c = C;\n\t\t\tif(range.e.r < R) range.e.r = R;\n\t\t\tif(cc == sepcc) ++C; else { C = 0; ++R; if(o.sheetRows && o.sheetRows <= R) return true; }\n\t\t}\n\t\touter: for(;end < str.length;++end) switch((cc=str.charCodeAt(end))) {\n\t\t\tcase 0x22: if(startcc === 0x22) instr = !instr; break;\n\t\t\tcase sepcc: case 0x0a: case 0x0d: if(!instr && finish_cell()) break outer; break;\n\t\t\tdefault: break;\n\t\t}\n\t\tif(end - start > 0) finish_cell();\n\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction prn_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tif(!(opts && opts.PRN)) return dsv_to_sheet_str(str, opts);\n\t\tif(str.slice(0,4) == \"sep=\") return dsv_to_sheet_str(str, opts);\n\t\tif(str.indexOf(\"\\t\") >= 0 || str.indexOf(\",\") >= 0 || str.indexOf(\";\") >= 0) return dsv_to_sheet_str(str, opts);\n\t\treturn aoa_to_sheet(prn_to_aoa_str(str, opts), opts);\n\t}\n\n\tfunction prn_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tvar str = \"\", bytes = opts.type == 'string' ? [0,0,0,0] : firstbyte(d, opts);\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': str = Base64.decode(d); break;\n\t\t\tcase 'binary': str = d; break;\n\t\t\tcase 'buffer':\n\t\t\t\tif(opts.codepage == 65001) str = d.toString('utf8'); // TODO: test if buf\n\t\t\t\telse if(opts.codepage && typeof cptable !== 'undefined') str = cptable.utils.decode(opts.codepage, d);\n\t\t\t\telse str = has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d);\n\t\t\t\tbreak;\n\t\t\tcase 'array': str = cc2str(d); break;\n\t\t\tcase 'string': str = d; break;\n\t\t\tdefault: throw new Error(\"Unrecognized type \" + opts.type);\n\t\t}\n\t\tif(bytes[0] == 0xEF && bytes[1] == 0xBB && bytes[2] == 0xBF) str = utf8read(str.slice(3));\n\t\telse if(opts.type != 'string' && opts.codepage == 65001) str = utf8read(str);\n\t\telse if((opts.type == 'binary') && typeof cptable !== 'undefined' && opts.codepage) str = cptable.utils.decode(opts.codepage, cptable.utils.encode(28591,str));\n\t\tif(str.slice(0,19) == \"socialcalc:version:\") return ETH.to_sheet(opts.type == 'string' ? str : utf8read(str), opts);\n\t\treturn prn_to_sheet_str(str, opts);\n\t}\n\n\tfunction prn_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(prn_to_sheet(d, opts), opts); }\n\n\tfunction sheet_to_prn(ws/*:Worksheet*//*::, opts:?any*/)/*:string*/ {\n\t\tvar o/*:Array*/ = [];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\tvar oo/*:Array*/ = [];\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t\tif(!cell || cell.v == null) { oo.push(\" \"); continue; }\n\t\t\t\tvar w = (cell.w || (format_cell(cell), cell.w) || \"\").slice(0,10);\n\t\t\t\twhile(w.length < 10) w += \" \";\n\t\t\t\too.push(w + (C === 0 ? \" \" : \"\"));\n\t\t\t}\n\t\t\to.push(oo.join(\"\"));\n\t\t}\n\t\treturn o.join(\"\\n\");\n\t}\n\n\treturn {\n\t\tto_workbook: prn_to_workbook,\n\t\tto_sheet: prn_to_sheet,\n\t\tfrom_sheet: sheet_to_prn\n\t};\n})();\n\n/* Excel defaults to SYLK but warns if data is not valid */\nfunction read_wb_ID(d, opts) {\n\tvar o = opts || {}, OLD_WTF = !!o.WTF; o.WTF = true;\n\ttry {\n\t\tvar out = SYLK.to_workbook(d, o);\n\t\to.WTF = OLD_WTF;\n\t\treturn out;\n\t} catch(e) {\n\t\to.WTF = OLD_WTF;\n\t\tif(!e.message.match(/SYLK bad record ID/) && OLD_WTF) throw e;\n\t\treturn PRN.to_workbook(d, opts);\n\t}\n}\n\nvar WK_ = (function() {\n\tfunction lotushopper(data, cb/*:RecordHopperCB*/, opts/*:any*/) {\n\t\tif(!data) return;\n\t\tprep_blob(data, data.l || 0);\n\t\tvar Enum = opts.Enum || WK1Enum;\n\t\twhile(data.l < data.length) {\n\t\t\tvar RT = data.read_shift(2);\n\t\t\tvar R = Enum[RT] || Enum[0xFF];\n\t\t\tvar length = data.read_shift(2);\n\t\t\tvar tgt = data.l + length;\n\t\t\tvar d = (R.f||parsenoop)(data, length, opts);\n\t\t\tdata.l = tgt;\n\t\t\tif(cb(d, R.n, RT)) return;\n\t\t}\n\t}\n\n\tfunction lotus_to_workbook(d/*:RawData*/, opts) {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return lotus_to_workbook_buf(s2a(Base64.decode(d)), opts);\n\t\t\tcase 'binary': return lotus_to_workbook_buf(s2a(d), opts);\n\t\t\tcase 'buffer':\n\t\t\tcase 'array': return lotus_to_workbook_buf(d, opts);\n\t\t}\n\t\tthrow \"Unsupported type \" + opts.type;\n\t}\n\n\tfunction lotus_to_workbook_buf(d, opts)/*:Workbook*/ {\n\t\tif(!d) return d;\n\t\tvar o = opts || {};\n\t\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\t\tvar s/*:Worksheet*/ = ((o.dense ? [] : {})/*:any*/), n = \"Sheet1\", sidx = 0;\n\t\tvar sheets = {}, snames = [n];\n\n\t\tvar refguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\tvar sheetRows = o.sheetRows || 0;\n\n\t\tif(d[2] == 0x02) o.Enum = WK1Enum;\n\t\telse if(d[2] == 0x1a) o.Enum = WK3Enum;\n\t\telse if(d[2] == 0x0e) { o.Enum = WK3Enum; o.qpro = true; d.l = 0; }\n\t\telse throw new Error(\"Unrecognized LOTUS BOF \" + d[2]);\n\t\tlotushopper(d, function(val, Rn, RT) {\n\t\t\tif(d[2] == 0x02) switch(RT) {\n\t\t\t\tcase 0x00:\n\t\t\t\t\to.vers = val;\n\t\t\t\t\tif(val >= 0x1000) o.qpro = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 0x06: refguess = val; break; /* RANGE */\n\t\t\t\tcase 0x0F: /* LABEL */\n\t\t\t\t\tif(!o.qpro) val[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x0D: /* INTEGER */\n\t\t\t\tcase 0x0E: /* NUMBER */\n\t\t\t\tcase 0x10: /* FORMULA */\n\t\t\t\tcase 0x33: /* STRING */\n\t\t\t\t\t/* TODO: actual translation of the format code */\n\t\t\t\t\tif(RT == 0x0E && (val[2] & 0x70) == 0x70 && (val[2] & 0x0F) > 1 && (val[2] & 0x0F) < 15) {\n\t\t\t\t\t\tval[1].z = o.dateNF || SSF._table[14];\n\t\t\t\t\t\tif(o.cellDates) { val[1].t = 'd'; val[1].v = numdate(val[1].v); }\n\t\t\t\t\t}\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tbreak;\n\t\t\t} else switch(RT) {\n\t\t\t\tcase 0x16: /* LABEL16 */\n\t\t\t\t\tval[1].v = val[1].v.slice(1);\n\t\t\t\t\t/* falls through */\n\t\t\t\tcase 0x17: /* NUMBER17 */\n\t\t\t\tcase 0x18: /* NUMBER18 */\n\t\t\t\tcase 0x19: /* FORMULA19 */\n\t\t\t\tcase 0x25: /* NUMBER25 */\n\t\t\t\tcase 0x27: /* NUMBER27 */\n\t\t\t\tcase 0x28: /* FORMULA28 */\n\t\t\t\t\tif(val[3] > sidx) {\n\t\t\t\t\t\ts[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t\tsheets[n] = s;\n\t\t\t\t\t\ts = (o.dense ? [] : {});\n\t\t\t\t\t\trefguess = {s: {r:0, c:0}, e: {r:0, c:0} };\n\t\t\t\t\t\tsidx = val[3]; n = \"Sheet\" + (sidx + 1);\n\t\t\t\t\t\tsnames.push(n);\n\t\t\t\t\t}\n\t\t\t\t\tif(sheetRows > 0 && val[0].r >= sheetRows) break;\n\t\t\t\t\tif(o.dense) {\n\t\t\t\t\t\tif(!s[val[0].r]) s[val[0].r] = [];\n\t\t\t\t\t\ts[val[0].r][val[0].c] = val[1];\n\t\t\t\t\t} else s[encode_cell(val[0])] = val[1];\n\t\t\t\t\tif(refguess.e.c < val[0].c) refguess.e.c = val[0].c;\n\t\t\t\t\tif(refguess.e.r < val[0].r) refguess.e.r = val[0].r;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault: break;\n\t\t\t}\n\t\t}, o);\n\n\t\ts[\"!ref\"] = encode_range(refguess);\n\t\tsheets[n] = s;\n\t\treturn { SheetNames: snames, Sheets:sheets };\n\t}\n\n\tfunction parse_RANGE(blob) {\n\t\tvar o = {s:{c:0,r:0},e:{c:0,r:0}};\n\t\to.s.c = blob.read_shift(2);\n\t\to.s.r = blob.read_shift(2);\n\t\to.e.c = blob.read_shift(2);\n\t\to.e.r = blob.read_shift(2);\n\t\tif(o.s.c == 0xFFFF) o.s.c = o.e.c = o.s.r = o.e.r = 0;\n\t\treturn o;\n\t}\n\n\tfunction parse_cell(blob, length, opts) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\tif(opts.qpro && opts.vers != 0x5120) {\n\t\t\to[0].c = blob.read_shift(1);\n\t\t\tblob.l++;\n\t\t\to[0].r = blob.read_shift(2);\n\t\t\tblob.l+=2;\n\t\t} else {\n\t\t\to[2] = blob.read_shift(1);\n\t\t\to[0].c = blob.read_shift(2); o[0].r = blob.read_shift(2);\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].t = 's';\n\t\tif(opts.vers == 0x5120) {\n\t\t\tblob.l++;\n\t\t\tvar len = blob.read_shift(1);\n\t\t\to[1].v = blob.read_shift(len, 'utf8');\n\t\t\treturn o;\n\t\t}\n\t\tif(opts.qpro) blob.l++;\n\t\to[1].v = blob.read_shift(tgt - blob.l, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_INTEGER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(2, 'i');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER(blob, length, opts) {\n\t\tvar o = parse_cell(blob, length, opts);\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA(blob, length, opts) {\n\t\tvar tgt = blob.l + length;\n\t\tvar o = parse_cell(blob, length, opts);\n\t\t/* TODO: formula */\n\t\to[1].v = blob.read_shift(8, 'f');\n\t\tif(opts.qpro) blob.l = tgt;\n\t\telse {\n\t\t\tvar flen = blob.read_shift(2);\n\t\t\tblob.l += flen;\n\t\t}\n\t\treturn o;\n\t}\n\n\tfunction parse_cell_3(blob/*::, length*/) {\n\t\tvar o = [{c:0,r:0}, {t:'n',v:0}, 0];\n\t\to[0].r = blob.read_shift(2); o[3] = blob[blob.l++]; o[0].c = blob[blob.l++];\n\t\treturn o;\n\t}\n\n\tfunction parse_LABEL_16(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].t = 's';\n\t\to[1].v = blob.read_shift(length - 4, 'cstr');\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_18(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\to[1].v = blob.read_shift(2);\n\t\tvar v = o[1].v >> 1;\n\t\t/* TODO: figure out all of the corner cases */\n\t\tif(o[1].v & 0x1) {\n\t\t\tswitch(v & 0x07) {\n\t\t\t\tcase 1: v = (v >> 3) * 500; break;\n\t\t\t\tcase 2: v = (v >> 3) / 20; break;\n\t\t\t\tcase 4: v = (v >> 3) / 2000; break;\n\t\t\t\tcase 6: v = (v >> 3) / 16; break;\n\t\t\t\tcase 7: v = (v >> 3) / 64; break;\n\t\t\t\tdefault: throw \"unknown NUMBER_18 encoding \" + (v & 0x07);\n\t\t\t}\n\t\t}\n\t\to[1].v = v;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_17(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\tvar v2 = blob.read_shift(4);\n\t\tvar e = blob.read_shift(2);\n\t\tif(e == 0xFFFF) { o[1].v = 0; return o; }\n\t\tvar s = e & 0x8000; e = (e&0x7FFF) - 16446;\n\t\to[1].v = (s*2 - 1) * ((e > 0 ? (v2 << e) : (v2 >>> -e)) + (e > -32 ? (v1 << (e + 32)) : (v1 >>> -(e + 32))));\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_19(blob, length) {\n\t\tvar o = parse_NUMBER_17(blob, 14);\n\t\tblob.l += length - 14; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_25(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(4);\n\t\to[1].v = v1 >> 6;\n\t\treturn o;\n\t}\n\n\tfunction parse_NUMBER_27(blob, length) {\n\t\tvar o = parse_cell_3(blob, length);\n\t\tvar v1 = blob.read_shift(8,'f');\n\t\to[1].v = v1;\n\t\treturn o;\n\t}\n\n\tfunction parse_FORMULA_28(blob, length) {\n\t\tvar o = parse_NUMBER_27(blob, 14);\n\t\tblob.l += length - 10; /* TODO: formula */\n\t\treturn o;\n\t}\n\n\tvar WK1Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\", f:parseuint16 },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0002/*::]*/: { n:\"CALCMODE\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"CALCORDER\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"SPLIT\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"SYNC\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"RANGE\", f:parse_RANGE },\n\t\t/*::[*/0x0007/*::]*/: { n:\"WINDOW1\" },\n\t\t/*::[*/0x0008/*::]*/: { n:\"COLW1\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"WINTWO\" },\n\t\t/*::[*/0x000A/*::]*/: { n:\"COLW2\" },\n\t\t/*::[*/0x000B/*::]*/: { n:\"NAME\" },\n\t\t/*::[*/0x000C/*::]*/: { n:\"BLANK\" },\n\t\t/*::[*/0x000D/*::]*/: { n:\"INTEGER\", f:parse_INTEGER },\n\t\t/*::[*/0x000E/*::]*/: { n:\"NUMBER\", f:parse_NUMBER },\n\t\t/*::[*/0x000F/*::]*/: { n:\"LABEL\", f:parse_LABEL },\n\t\t/*::[*/0x0010/*::]*/: { n:\"FORMULA\", f:parse_FORMULA },\n\t\t/*::[*/0x0018/*::]*/: { n:\"TABLE\" },\n\t\t/*::[*/0x0019/*::]*/: { n:\"ORANGE\" },\n\t\t/*::[*/0x001A/*::]*/: { n:\"PRANGE\" },\n\t\t/*::[*/0x001B/*::]*/: { n:\"SRANGE\" },\n\t\t/*::[*/0x001C/*::]*/: { n:\"FRANGE\" },\n\t\t/*::[*/0x001D/*::]*/: { n:\"KRANGE1\" },\n\t\t/*::[*/0x0020/*::]*/: { n:\"HRANGE\" },\n\t\t/*::[*/0x0023/*::]*/: { n:\"KRANGE2\" },\n\t\t/*::[*/0x0024/*::]*/: { n:\"PROTEC\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"FOOTER\" },\n\t\t/*::[*/0x0026/*::]*/: { n:\"HEADER\" },\n\t\t/*::[*/0x0027/*::]*/: { n:\"SETUP\" },\n\t\t/*::[*/0x0028/*::]*/: { n:\"MARGINS\" },\n\t\t/*::[*/0x0029/*::]*/: { n:\"LABELFMT\" },\n\t\t/*::[*/0x002A/*::]*/: { n:\"TITLES\" },\n\t\t/*::[*/0x002B/*::]*/: { n:\"SHEETJS\" },\n\t\t/*::[*/0x002D/*::]*/: { n:\"GRAPH\" },\n\t\t/*::[*/0x002E/*::]*/: { n:\"NGRAPH\" },\n\t\t/*::[*/0x002F/*::]*/: { n:\"CALCCOUNT\" },\n\t\t/*::[*/0x0030/*::]*/: { n:\"UNFORMATTED\" },\n\t\t/*::[*/0x0031/*::]*/: { n:\"CURSORW12\" },\n\t\t/*::[*/0x0032/*::]*/: { n:\"WINDOW\" },\n\t\t/*::[*/0x0033/*::]*/: { n:\"STRING\", f:parse_LABEL },\n\t\t/*::[*/0x0037/*::]*/: { n:\"PASSWORD\" },\n\t\t/*::[*/0x0038/*::]*/: { n:\"LOCKED\" },\n\t\t/*::[*/0x003C/*::]*/: { n:\"QUERY\" },\n\t\t/*::[*/0x003D/*::]*/: { n:\"QUERYNAME\" },\n\t\t/*::[*/0x003E/*::]*/: { n:\"PRINT\" },\n\t\t/*::[*/0x003F/*::]*/: { n:\"PRINTNAME\" },\n\t\t/*::[*/0x0040/*::]*/: { n:\"GRAPH2\" },\n\t\t/*::[*/0x0041/*::]*/: { n:\"GRAPHNAME\" },\n\t\t/*::[*/0x0042/*::]*/: { n:\"ZOOM\" },\n\t\t/*::[*/0x0043/*::]*/: { n:\"SYMSPLIT\" },\n\t\t/*::[*/0x0044/*::]*/: { n:\"NSROWS\" },\n\t\t/*::[*/0x0045/*::]*/: { n:\"NSCOLS\" },\n\t\t/*::[*/0x0046/*::]*/: { n:\"RULER\" },\n\t\t/*::[*/0x0047/*::]*/: { n:\"NNAME\" },\n\t\t/*::[*/0x0048/*::]*/: { n:\"ACOMM\" },\n\t\t/*::[*/0x0049/*::]*/: { n:\"AMACRO\" },\n\t\t/*::[*/0x004A/*::]*/: { n:\"PARSE\" },\n\t\t/*::[*/0x00FF/*::]*/: { n:\"\", f:parsenoop }\n\t};\n\n\tvar WK3Enum = {\n\t\t/*::[*/0x0000/*::]*/: { n:\"BOF\" },\n\t\t/*::[*/0x0001/*::]*/: { n:\"EOF\" },\n\t\t/*::[*/0x0003/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0004/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0005/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0006/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0007/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0009/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x000a/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x000b/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x000c/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x000e/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x000f/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0010/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0011/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0012/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0013/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0015/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0016/*::]*/: { n:\"LABEL16\", f:parse_LABEL_16},\n\t\t/*::[*/0x0017/*::]*/: { n:\"NUMBER17\", f:parse_NUMBER_17 },\n\t\t/*::[*/0x0018/*::]*/: { n:\"NUMBER18\", f:parse_NUMBER_18 },\n\t\t/*::[*/0x0019/*::]*/: { n:\"FORMULA19\", f:parse_FORMULA_19},\n\t\t/*::[*/0x001a/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x001b/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x001c/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x001d/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x001e/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x001f/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0021/*::]*/: { n:\"??\" },\n\t\t/*::[*/0x0025/*::]*/: { n:\"NUMBER25\", f:parse_NUMBER_25 },\n\t\t/*::[*/0x0027/*::]*/: { n:\"NUMBER27\", f:parse_NUMBER_27 },\n\t\t/*::[*/0x0028/*::]*/: { n:\"FORMULA28\", f:parse_FORMULA_28 },\n\t\t/*::[*/0x00FF/*::]*/: { n:\"\", f:parsenoop }\n\t};\n\treturn {\n\t\tto_workbook: lotus_to_workbook\n\t};\n})();\n/* 18.4.7 rPr CT_RPrElt */\nfunction parse_rpr(rpr) {\n\tvar font = {}, m = rpr.match(tagregex), i = 0;\n\tvar pass = false;\n\tif(m) for(;i!=m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(y[0].replace(/\\w*:/g,\"\")) {\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\t/* ** not required . */\n\t\t\tcase '':\n\t\t\tcase '': font.shadow = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty TODO */\n\t\t\tcase '':\n\t\t\tcase '': font.outline = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.5 rFont CT_FontName */\n\t\t\tcase '':\n\t\t\tcase '': font.strike = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '':\n\t\t\tcase '': font.u = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.2 b */\n\t\t\tcase '':\n\t\t\tcase '': font.b = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.26 i */\n\t\t\tcase '':\n\t\t\tcase '': font.i = 1; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.3.1.15 color CT_Color TODO: tint, theme, auto, indexed */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault:\n\t\t\t\tif(y[0].charCodeAt(1) !== 47 && !pass) throw new Error('Unrecognized rich format ' + y[0]);\n\t\t}\n\t}\n\treturn font;\n}\n\nvar parse_rs = (function() {\n\tvar tregex = matchtag(\"t\"), rpregex = matchtag(\"rPr\");\n\t/* 18.4.4 r CT_RElt */\n\tfunction parse_r(r) {\n\t\t/* 18.4.12 t ST_Xstring */\n\t\tvar t = r.match(tregex)/*, cp = 65001*/;\n\t\tif(!t) return {t:\"s\", v:\"\"};\n\n\t\tvar o/*:Cell*/ = ({t:'s', v:unescapexml(t[1])}/*:any*/);\n\t\tvar rpr = r.match(rpregex);\n\t\tif(rpr) o.s = parse_rpr(rpr[1]);\n\t\treturn o;\n\t}\n\tvar rregex = /<(?:\\w+:)?r>/g, rend = /<\\/(?:\\w+:)?r>/;\n\treturn function parse_rs(rs) {\n\t\treturn rs.replace(rregex,\"\").split(rend).map(parse_r).filter(function(r) { return r.v; });\n\t};\n})();\n\n\n/* Parse a list of tags */\nvar rs_to_html = (function parse_rs_factory() {\n\tvar nlregex = /(\\r\\n|\\n)/g;\n\tfunction parse_rpr2(font, intro, outro) {\n\t\tvar style/*:Array*/ = [];\n\n\t\tif(font.u) style.push(\"text-decoration: underline;\");\n\t\tif(font.uval) style.push(\"text-underline-style:\" + font.uval + \";\");\n\t\tif(font.sz) style.push(\"font-size:\" + font.sz + \"pt;\");\n\t\tif(font.outline) style.push(\"text-effect: outline;\");\n\t\tif(font.shadow) style.push(\"text-shadow: auto;\");\n\t\tintro.push('');\n\n\t\tif(font.b) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.i) { intro.push(\"\"); outro.push(\"\"); }\n\t\tif(font.strike) { intro.push(\"\"); outro.push(\"\"); }\n\n\t\tvar align = font.valign || \"\";\n\t\tif(align == \"superscript\" || align == \"super\") align = \"sup\";\n\t\telse if(align == \"subscript\") align = \"sub\";\n\t\tif(align != \"\") { intro.push(\"<\" + align + \">\"); outro.push(\"\" + align + \">\"); }\n\n\t\toutro.push(\"\");\n\t\treturn font;\n\t}\n\n\t/* 18.4.4 r CT_RElt */\n\tfunction r_to_html(r) {\n\t\tvar terms/*:[Array, string, Array]*/ = [[],r.v,[]];\n\t\tif(!r.v) return \"\";\n\n\t\tif(r.s) parse_rpr2(r.s, terms[0], terms[2]);\n\n\t\treturn terms[0].join(\"\") + terms[1].replace(nlregex,'') + terms[2].join(\"\");\n\t}\n\n\treturn function parse_rs(rs) {\n\t\treturn rs.map(r_to_html).join(\"\");\n\t};\n})();\n\n/* 18.4.8 si CT_Rst */\nvar sitregex = /<(?:\\w+:)?t[^>]*>([^<]*)<\\/(?:\\w+:)?t>/g, sirregex = /<(?:\\w+:)?r>/;\nvar sirphregex = /<(?:\\w+:)?rPh.*?>([\\s\\S]*?)<\\/(?:\\w+:)?rPh>/g;\nfunction parse_si(x, opts) {\n\tvar html = opts ? opts.cellHTML : true;\n\tvar z = {};\n\tif(!x) return { t: \"\" };\n\t//var y;\n\t/* 18.4.12 t ST_Xstring (Plaintext String) */\n\t// TODO: is whitespace actually valid here?\n\tif(x.match(/^\\s*<(?:\\w+:)?t[^>]*>/)) {\n\t\tz.t = unescapexml(utf8read(x.slice(x.indexOf(\">\")+1).split(/<\\/(?:\\w+:)?t>/)[0]||\"\"));\n\t\tz.r = utf8read(x);\n\t\tif(html) z.h = escapehtml(z.t);\n\t}\n\t/* 18.4.4 r CT_RElt (Rich Text Run) */\n\telse if((/*y = */x.match(sirregex))) {\n\t\tz.r = utf8read(x);\n\t\tz.t = unescapexml(utf8read((x.replace(sirphregex, '').match(sitregex)||[]).join(\"\").replace(tagregex,\"\")));\n\t\tif(html) z.h = rs_to_html(parse_rs(z.r));\n\t}\n\t/* 18.4.3 phoneticPr CT_PhoneticPr (TODO: needed for Asian support) */\n\t/* 18.4.6 rPh CT_PhoneticRun (TODO: needed for Asian support) */\n\treturn z;\n}\n\n/* 18.4 Shared String Table */\nvar sstr0 = /<(?:\\w+:)?sst([^>]*)>([\\s\\S]*)<\\/(?:\\w+:)?sst>/;\nvar sstr1 = /<(?:\\w+:)?(?:si|sstItem)>/g;\nvar sstr2 = /<\\/(?:\\w+:)?(?:si|sstItem)>/;\nfunction parse_sst_xml(data/*:string*/, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/), ss = \"\";\n\tif(!data) return s;\n\t/* 18.4.9 sst CT_Sst */\n\tvar sst = data.match(sstr0);\n\tif(sst) {\n\t\tss = sst[2].replace(sstr1,\"\").split(sstr2);\n\t\tfor(var i = 0; i != ss.length; ++i) {\n\t\t\tvar o = parse_si(ss[i].trim(), opts);\n\t\t\tif(o != null) s[s.length] = o;\n\t\t}\n\t\tsst = parsexmltag(sst[1]); s.Count = sst.count; s.Unique = sst.uniqueCount;\n\t}\n\treturn s;\n}\n\nRELS.SST = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\";\nvar straywsregex = /^\\s|\\s$|[\\t\\n\\r]/;\nfunction write_sst_xml(sst/*:SST*/, opts)/*:string*/ {\n\tif(!opts.bookSST) return \"\";\n\tvar o = [XML_HEADER];\n\to[o.length] = (writextag('sst', null, {\n\t\txmlns: XMLNS.main[0],\n\t\tcount: sst.Count,\n\t\tuniqueCount: sst.Unique\n\t}));\n\tfor(var i = 0; i != sst.length; ++i) { if(sst[i] == null) continue;\n\t\tvar s/*:XLString*/ = sst[i];\n\t\tvar sitag = \"\";\n\t\tif(s.r) sitag += s.r;\n\t\telse {\n\t\t\tsitag += \"\" + escapexml(s.t) + \"\";\n\t\t}\n\t\tsitag += \"\";\n\t\to[o.length] = (sitag);\n\t}\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.221 BrtBeginSst */\nfunction parse_BrtBeginSst(data) {\n\treturn [data.read_shift(4), data.read_shift(4)];\n}\n\n/* [MS-XLSB] 2.1.7.45 Shared Strings */\nfunction parse_sst_bin(data, opts)/*:SST*/ {\n\tvar s/*:SST*/ = ([]/*:any*/);\n\tvar pass = false;\n\trecordhopper(data, function hopper_sst(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009F: /* 'BrtBeginSst' */\n\t\t\t\ts.Count = val[0]; s.Unique = val[1]; break;\n\t\t\tcase 0x0013: /* 'BrtSSTItem' */\n\t\t\t\ts.push(val); break;\n\t\t\tcase 0x00A0: /* 'BrtEndSst' */\n\t\t\t\treturn true;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif(R_n.indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if(R_n.indexOf(\"End\") > 0){/* empty */}\n\t\t\t\tif(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn s;\n}\n\nfunction write_BrtBeginSst(sst, o) {\n\tif(!o) o = new_buf(8);\n\to.write_shift(4, sst.Count);\n\to.write_shift(4, sst.Unique);\n\treturn o;\n}\n\nvar write_BrtSSTItem = write_RichStr;\n\nfunction write_sst_bin(sst/*::, opts*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSst\", write_BrtBeginSst(sst));\n\tfor(var i = 0; i < sst.length; ++i) write_record(ba, \"BrtSSTItem\", write_BrtSSTItem(sst[i]));\n\t/* FRTSST */\n\twrite_record(ba, \"BrtEndSst\");\n\treturn ba.end();\n}\nfunction _JS2ANSI(str/*:string*/)/*:Array*/ {\n\tif(typeof cptable !== 'undefined') return cptable.utils.encode(current_ansi, str);\n\tvar o/*:Array*/ = [], oo = str.split(\"\");\n\tfor(var i = 0; i < oo.length; ++i) o[i] = oo[i].charCodeAt(0);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.4 Version */\nfunction parse_CRYPTOVersion(blob, length/*:?number*/) {\n\tvar o/*:any*/ = {};\n\to.Major = blob.read_shift(2);\n\to.Minor = blob.read_shift(2);\n\t/*:: if(length == null) return o; */\n\tif(length >= 4) blob.l += length - 4;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.5 DataSpaceVersionInfo */\nfunction parse_DataSpaceVersionInfo(blob) {\n\tvar o = {};\n\to.id = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6.1 DataSpaceMapEntry Structure */\nfunction parse_DataSpaceMapEntry(blob) {\n\tvar len = blob.read_shift(4);\n\tvar end = blob.l + len - 4;\n\tvar o = {};\n\tvar cnt = blob.read_shift(4);\n\tvar comps/*:Array<{t:number, v:string}>*/ = [];\n\t/* [MS-OFFCRYPTO] 2.1.6.2 DataSpaceReferenceComponent Structure */\n\twhile(cnt-- > 0) comps.push({ t: blob.read_shift(4), v: blob.read_shift(0, 'lpp4') });\n\to.name = blob.read_shift(0, 'lpp4');\n\to.comps = comps;\n\tif(blob.l != end) throw new Error(\"Bad DataSpaceMapEntry: \" + blob.l + \" != \" + end);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.6 DataSpaceMap */\nfunction parse_DataSpaceMap(blob) {\n\tvar o = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(parse_DataSpaceMapEntry(blob));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.7 DataSpaceDefinition */\nfunction parse_DataSpaceDefinition(blob)/*:Array*/ {\n\tvar o/*:Array*/ = [];\n\tblob.l += 4; // must be 0x8\n\tvar cnt = blob.read_shift(4);\n\twhile(cnt-- > 0) o.push(blob.read_shift(0, 'lpp4'));\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.1.8 DataSpaceDefinition */\nfunction parse_TransformInfoHeader(blob) {\n\tvar o = {};\n\t/*var len = */blob.read_shift(4);\n\tblob.l += 4; // must be 0x1\n\to.id = blob.read_shift(0, 'lpp4');\n\to.name = blob.read_shift(0, 'lpp4');\n\to.R = parse_CRYPTOVersion(blob, 4);\n\to.U = parse_CRYPTOVersion(blob, 4);\n\to.W = parse_CRYPTOVersion(blob, 4);\n\treturn o;\n}\n\nfunction parse_Primary(blob) {\n\t/* [MS-OFFCRYPTO] 2.2.6 IRMDSTransformInfo */\n\tvar hdr = parse_TransformInfoHeader(blob);\n\t/* [MS-OFFCRYPTO] 2.1.9 EncryptionTransformInfo */\n\thdr.ename = blob.read_shift(0, '8lpp4');\n\thdr.blksz = blob.read_shift(4);\n\thdr.cmode = blob.read_shift(4);\n\tif(blob.read_shift(4) != 0x04) throw new Error(\"Bad !Primary record\");\n\treturn hdr;\n}\n\n/* [MS-OFFCRYPTO] 2.3.2 Encryption Header */\nfunction parse_EncryptionHeader(blob, length/*:number*/) {\n\tvar tgt = blob.l + length;\n\tvar o = {};\n\to.Flags = (blob.read_shift(4) & 0x3F);\n\tblob.l += 4;\n\to.AlgID = blob.read_shift(4);\n\tvar valid = false;\n\tswitch(o.AlgID) {\n\t\tcase 0x660E: case 0x660F: case 0x6610: valid = (o.Flags == 0x24); break;\n\t\tcase 0x6801: valid = (o.Flags == 0x04); break;\n\t\tcase 0: valid = (o.Flags == 0x10 || o.Flags == 0x04 || o.Flags == 0x24); break;\n\t\tdefault: throw 'Unrecognized encryption algorithm: ' + o.AlgID;\n\t}\n\tif(!valid) throw new Error(\"Encryption Flags/AlgID mismatch\");\n\to.AlgIDHash = blob.read_shift(4);\n\to.KeySize = blob.read_shift(4);\n\to.ProviderType = blob.read_shift(4);\n\tblob.l += 8;\n\to.CSPName = blob.read_shift((tgt-blob.l)>>1, 'utf16le');\n\tblob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.3 Encryption Verifier */\nfunction parse_EncryptionVerifier(blob, length/*:number*/) {\n\tvar o = {}, tgt = blob.l + length;\n\tblob.l += 4; // SaltSize must be 0x10\n\to.Salt = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\to.Verifier = blob.slice(blob.l, blob.l+16); blob.l += 16;\n\t/*var sz = */blob.read_shift(4);\n\to.VerifierHash = blob.slice(blob.l, tgt); blob.l = tgt;\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.* EncryptionInfo Stream */\nfunction parse_EncryptionInfo(blob) {\n\tvar vers = parse_CRYPTOVersion(blob);\n\tswitch(vers.Minor) {\n\t\tcase 0x02: return [vers.Minor, parse_EncInfoStd(blob, vers)];\n\t\tcase 0x03: return [vers.Minor, parse_EncInfoExt(blob, vers)];\n\t\tcase 0x04: return [vers.Minor, parse_EncInfoAgl(blob, vers)];\n\t}\n\tthrow new Error(\"ECMA-376 Encrypted file unrecognized Version: \" + vers.Minor);\n}\n\n/* [MS-OFFCRYPTO] 2.3.4.5 EncryptionInfo Stream (Standard Encryption) */\nfunction parse_EncInfoStd(blob/*::, vers*/) {\n\tvar flags = blob.read_shift(4);\n\tif((flags & 0x3F) != 0x24) throw new Error(\"EncryptionInfo mismatch\");\n\tvar sz = blob.read_shift(4);\n\t//var tgt = blob.l + sz;\n\tvar hdr = parse_EncryptionHeader(blob, sz);\n\tvar verifier = parse_EncryptionVerifier(blob, blob.length - blob.l);\n\treturn { t:\"Std\", h:hdr, v:verifier };\n}\n/* [MS-OFFCRYPTO] 2.3.4.6 EncryptionInfo Stream (Extensible Encryption) */\nfunction parse_EncInfoExt(/*::blob, vers*/) { throw new Error(\"File is password-protected: ECMA-376 Extensible\"); }\n/* [MS-OFFCRYPTO] 2.3.4.10 EncryptionInfo Stream (Agile Encryption) */\nfunction parse_EncInfoAgl(blob/*::, vers*/) {\n\tvar KeyData = [\"saltSize\",\"blockSize\",\"keyBits\",\"hashSize\",\"cipherAlgorithm\",\"cipherChaining\",\"hashAlgorithm\",\"saltValue\"];\n\tblob.l+=4;\n\tvar xml = blob.read_shift(blob.length - blob.l, 'utf8');\n\tvar o = {};\n\txml.replace(tagregex, function xml_agile(x) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\t\t\tcase '': case '': break;\n\n\t\t\tcase '': break;\n\t\t\tcase ' 4 || vers.Major < 2) throw new Error('unrecognized major version code: ' + vers.Major);\n\to.Flags = blob.read_shift(4); length -= 4;\n\tvar sz = blob.read_shift(4); length -= 4;\n\to.EncryptionHeader = parse_EncryptionHeader(blob, sz); length -= sz;\n\to.EncryptionVerifier = parse_EncryptionVerifier(blob, length);\n\treturn o;\n}\n/* [MS-OFFCRYPTO] 2.3.6.1 RC4 Encryption Header */\nfunction parse_RC4Header(blob/*::, length*/) {\n\tvar o = {};\n\tvar vers = o.EncryptionVersionInfo = parse_CRYPTOVersion(blob, 4);\n\tif(vers.Major != 1 || vers.Minor != 1) throw 'unrecognized version code ' + vers.Major + ' : ' + vers.Minor;\n\to.Salt = blob.read_shift(16);\n\to.EncryptedVerifier = blob.read_shift(16);\n\to.EncryptedVerifierHash = blob.read_shift(16);\n\treturn o;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.1 Binary Document Password Verifier Derivation */\nfunction crypto_CreatePasswordVerifier_Method1(Password/*:string*/) {\n\tvar Verifier = 0x0000, PasswordArray;\n\tvar PasswordDecoded = _JS2ANSI(Password);\n\tvar len = PasswordDecoded.length + 1, i, PasswordByte;\n\tvar Intermediate1, Intermediate2, Intermediate3;\n\tPasswordArray = new_raw_buf(len);\n\tPasswordArray[0] = PasswordDecoded.length;\n\tfor(i = 1; i != len; ++i) PasswordArray[i] = PasswordDecoded[i-1];\n\tfor(i = len-1; i >= 0; --i) {\n\t\tPasswordByte = PasswordArray[i];\n\t\tIntermediate1 = ((Verifier & 0x4000) === 0x0000) ? 0 : 1;\n\t\tIntermediate2 = (Verifier << 1) & 0x7FFF;\n\t\tIntermediate3 = Intermediate1 | Intermediate2;\n\t\tVerifier = Intermediate3 ^ PasswordByte;\n\t}\n\treturn Verifier ^ 0xCE4B;\n}\n\n/* [MS-OFFCRYPTO] 2.3.7.2 Binary Document XOR Array Initialization */\nvar crypto_CreateXorArray_Method1 = (function() {\n\tvar PadArray = [0xBB, 0xFF, 0xFF, 0xBA, 0xFF, 0xFF, 0xB9, 0x80, 0x00, 0xBE, 0x0F, 0x00, 0xBF, 0x0F, 0x00];\n\tvar InitialCode = [0xE1F0, 0x1D0F, 0xCC9C, 0x84C0, 0x110C, 0x0E10, 0xF1CE, 0x313E, 0x1872, 0xE139, 0xD40F, 0x84F9, 0x280C, 0xA96A, 0x4EC3];\n\tvar XorMatrix = [0xAEFC, 0x4DD9, 0x9BB2, 0x2745, 0x4E8A, 0x9D14, 0x2A09, 0x7B61, 0xF6C2, 0xFDA5, 0xEB6B, 0xC6F7, 0x9DCF, 0x2BBF, 0x4563, 0x8AC6, 0x05AD, 0x0B5A, 0x16B4, 0x2D68, 0x5AD0, 0x0375, 0x06EA, 0x0DD4, 0x1BA8, 0x3750, 0x6EA0, 0xDD40, 0xD849, 0xA0B3, 0x5147, 0xA28E, 0x553D, 0xAA7A, 0x44D5, 0x6F45, 0xDE8A, 0xAD35, 0x4A4B, 0x9496, 0x390D, 0x721A, 0xEB23, 0xC667, 0x9CEF, 0x29FF, 0x53FE, 0xA7FC, 0x5FD9, 0x47D3, 0x8FA6, 0x0F6D, 0x1EDA, 0x3DB4, 0x7B68, 0xF6D0, 0xB861, 0x60E3, 0xC1C6, 0x93AD, 0x377B, 0x6EF6, 0xDDEC, 0x45A0, 0x8B40, 0x06A1, 0x0D42, 0x1A84, 0x3508, 0x6A10, 0xAA51, 0x4483, 0x8906, 0x022D, 0x045A, 0x08B4, 0x1168, 0x76B4, 0xED68, 0xCAF1, 0x85C3, 0x1BA7, 0x374E, 0x6E9C, 0x3730, 0x6E60, 0xDCC0, 0xA9A1, 0x4363, 0x86C6, 0x1DAD, 0x3331, 0x6662, 0xCCC4, 0x89A9, 0x0373, 0x06E6, 0x0DCC, 0x1021, 0x2042, 0x4084, 0x8108, 0x1231, 0x2462, 0x48C4];\n\tvar Ror = function(Byte) { return ((Byte/2) | (Byte*128)) & 0xFF; };\n\tvar XorRor = function(byte1, byte2) { return Ror(byte1 ^ byte2); };\n\tvar CreateXorKey_Method1 = function(Password) {\n\t\tvar XorKey = InitialCode[Password.length - 1];\n\t\tvar CurrentElement = 0x68;\n\t\tfor(var i = Password.length-1; i >= 0; --i) {\n\t\t\tvar Char = Password[i];\n\t\t\tfor(var j = 0; j != 7; ++j) {\n\t\t\t\tif(Char & 0x40) XorKey ^= XorMatrix[CurrentElement];\n\t\t\t\tChar *= 2; --CurrentElement;\n\t\t\t}\n\t\t}\n\t\treturn XorKey;\n\t};\n\treturn function(password/*:string*/) {\n\t\tvar Password = _JS2ANSI(password);\n\t\tvar XorKey = CreateXorKey_Method1(Password);\n\t\tvar Index = Password.length;\n\t\tvar ObfuscationArray = new_raw_buf(16);\n\t\tfor(var i = 0; i != 16; ++i) ObfuscationArray[i] = 0x00;\n\t\tvar Temp, PasswordLastChar, PadIndex;\n\t\tif((Index & 1) === 1) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[0], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tPasswordLastChar = Password[Password.length - 1];\n\t\t\tObfuscationArray[Index] = XorRor(PasswordLastChar, Temp);\n\t\t}\n\t\twhile(Index > 0) {\n\t\t\t--Index;\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t}\n\t\tIndex = 15;\n\t\tPadIndex = 15 - Password.length;\n\t\twhile(PadIndex > 0) {\n\t\t\tTemp = XorKey >> 8;\n\t\t\tObfuscationArray[Index] = XorRor(PadArray[PadIndex], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t\tTemp = XorKey & 0xFF;\n\t\t\tObfuscationArray[Index] = XorRor(Password[Index], Temp);\n\t\t\t--Index;\n\t\t\t--PadIndex;\n\t\t}\n\t\treturn ObfuscationArray;\n\t};\n})();\n\n/* [MS-OFFCRYPTO] 2.3.7.3 Binary Document XOR Data Transformation Method 1 */\nvar crypto_DecryptData_Method1 = function(password/*:string*/, Data, XorArrayIndex, XorArray, O) {\n\t/* If XorArray is set, use it; if O is not set, make changes in-place */\n\tif(!O) O = Data;\n\tif(!XorArray) XorArray = crypto_CreateXorArray_Method1(password);\n\tvar Index, Value;\n\tfor(Index = 0; Index != Data.length; ++Index) {\n\t\tValue = Data[Index];\n\t\tValue ^= XorArray[XorArrayIndex];\n\t\tValue = ((Value>>5) | (Value<<3)) & 0xFF;\n\t\tO[Index] = Value;\n\t\t++XorArrayIndex;\n\t}\n\treturn [O, XorArrayIndex, XorArray];\n};\n\nvar crypto_MakeXorDecryptor = function(password/*:string*/) {\n\tvar XorArrayIndex = 0, XorArray = crypto_CreateXorArray_Method1(password);\n\treturn function(Data) {\n\t\tvar O = crypto_DecryptData_Method1(\"\", Data, XorArrayIndex, XorArray);\n\t\tXorArrayIndex = O[1];\n\t\treturn O[0];\n\t};\n};\n\n/* 2.5.343 */\nfunction parse_XORObfuscation(blob, length, opts, out) {\n\tvar o = ({ key: parseuint16(blob), verificationBytes: parseuint16(blob) }/*:any*/);\n\tif(opts.password) o.verifier = crypto_CreatePasswordVerifier_Method1(opts.password);\n\tout.valid = o.verificationBytes === o.verifier;\n\tif(out.valid) out.insitu = crypto_MakeXorDecryptor(opts.password);\n\treturn o;\n}\n\n/* 2.4.117 */\nfunction parse_FilePassHeader(blob, length/*:number*/, oo) {\n\tvar o = oo || {}; o.Info = blob.read_shift(2); blob.l -= 2;\n\tif(o.Info === 1) o.Data = parse_RC4Header(blob, length);\n\telse o.Data = parse_RC4CryptoHeader(blob, length);\n\treturn o;\n}\nfunction parse_FilePass(blob, length/*:number*/, opts) {\n\tvar o = ({ Type: opts.biff >= 8 ? blob.read_shift(2) : 0 }/*:any*/); /* wEncryptionType */\n\tif(o.Type) parse_FilePassHeader(blob, length-2, o);\n\telse parse_XORObfuscation(blob, opts.biff >= 8 ? length : length - 2, opts, o);\n\treturn o;\n}\n\n\nvar RTF = (function() {\n\tfunction rtf_to_sheet(d/*:RawData*/, opts)/*:Worksheet*/ {\n\t\tswitch(opts.type) {\n\t\t\tcase 'base64': return rtf_to_sheet_str(Base64.decode(d), opts);\n\t\t\tcase 'binary': return rtf_to_sheet_str(d, opts);\n\t\t\tcase 'buffer': return rtf_to_sheet_str(has_buf && Buffer.isBuffer(d) ? d.toString('binary') : a2s(d), opts);\n\t\t\tcase 'array': return rtf_to_sheet_str(cc2str(d), opts);\n\t\t}\n\t\tthrow new Error(\"Unrecognized type \" + opts.type);\n\t}\n\n\t/* TODO: this is a stub */\n\tfunction rtf_to_sheet_str(str/*:string*/, opts)/*:Worksheet*/ {\n\t\tvar o = opts || {};\n\t\tvar ws/*:Worksheet*/ = o.dense ? ([]/*:any*/) : ({}/*:any*/);\n\n\t\tvar rows = str.match(/\\\\trowd.*?\\\\row\\b/g);\n\t\tif(!rows.length) throw new Error(\"RTF missing table\");\n\t\tvar range/*:Range*/ = ({s: {c:0, r:0}, e: {c:0, r:rows.length - 1}}/*:any*/);\n\t\trows.forEach(function(rowtf, R) {\n\t\t\tif(Array.isArray(ws)) ws[R] = [];\n\t\t\tvar rtfre = /\\\\\\w+\\b/g;\n\t\t\tvar last_index = 0;\n\t\t\tvar res;\n\t\t\tvar C = -1;\n\t\t\twhile((res = rtfre.exec(rowtf))) {\n\t\t\t\tswitch(res[0]) {\n\t\t\t\t\tcase \"\\\\cell\":\n\t\t\t\t\t\tvar data = rowtf.slice(last_index, rtfre.lastIndex - res[0].length);\n\t\t\t\t\t\tif(data[0] == \" \") data = data.slice(1);\n\t\t\t\t\t\t++C;\n\t\t\t\t\t\tif(data.length) {\n\t\t\t\t\t\t\t// TODO: value parsing, including codepage adjustments\n\t\t\t\t\t\t\tvar cell = {v: data, t:\"s\"};\n\t\t\t\t\t\t\tif(Array.isArray(ws)) ws[R][C] = cell;\n\t\t\t\t\t\t\telse ws[encode_cell({r:R, c:C})] = cell;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlast_index = rtfre.lastIndex;\n\t\t\t}\n\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t});\n\t\tws['!ref'] = encode_range(range);\n\t\treturn ws;\n\t}\n\n\tfunction rtf_to_workbook(d/*:RawData*/, opts)/*:Workbook*/ { return sheet_to_workbook(rtf_to_sheet(d, opts), opts); }\n\n\t/* TODO: this is a stub */\n\tfunction sheet_to_rtf(ws/*:Worksheet*//*::, opts*/)/*:string*/ {\n\t\tvar o = [\"{\\\\rtf1\\\\ansi\"];\n\t\tvar r = safe_decode_range(ws['!ref']), cell/*:Cell*/;\n\t\tvar dense = Array.isArray(ws);\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) {\n\t\t\to.push(\"\\\\trowd\\\\trautofit1\");\n\t\t\tfor(var C = r.s.c; C <= r.e.c; ++C) o.push(\"\\\\cellx\" + (C+1));\n\t\t\to.push(\"\\\\pard\\\\intbl\");\n\t\t\tfor(C = r.s.c; C <= r.e.c; ++C) {\n\t\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\t\tcell = dense ? (ws[R]||[])[C]: ws[coord];\n\t\t\t\tif(!cell || cell.v == null && (!cell.f || cell.F)) continue;\n\t\t\t\to.push(\" \" + (cell.w || (format_cell(cell), cell.w)));\n\t\t\t\to.push(\"\\\\cell\");\n\t\t\t}\n\t\t\to.push(\"\\\\pard\\\\intbl\\\\row\");\n\t\t}\n\t\treturn o.join(\"\") + \"}\";\n\t}\n\n\treturn {\n\t\tto_workbook: rtf_to_workbook,\n\t\tto_sheet: rtf_to_sheet,\n\t\tfrom_sheet: sheet_to_rtf\n\t};\n})();\nfunction hex2RGB(h) {\n\tvar o = h.slice(h[0]===\"#\"?1:0).slice(0,6);\n\treturn [parseInt(o.slice(0,2),16),parseInt(o.slice(2,4),16),parseInt(o.slice(4,6),16)];\n}\nfunction rgb2Hex(rgb) {\n\tfor(var i=0,o=1; i!=3; ++i) o = o*256 + (rgb[i]>255?255:rgb[i]<0?0:rgb[i]);\n\treturn o.toString(16).toUpperCase().slice(1);\n}\n\nfunction rgb2HSL(rgb) {\n\tvar R = rgb[0]/255, G = rgb[1]/255, B=rgb[2]/255;\n\tvar M = Math.max(R, G, B), m = Math.min(R, G, B), C = M - m;\n\tif(C === 0) return [0, 0, R];\n\n\tvar H6 = 0, S = 0, L2 = (M + m);\n\tS = C / (L2 > 1 ? 2 - L2 : L2);\n\tswitch(M){\n\t\tcase R: H6 = ((G - B) / C + 6)%6; break;\n\t\tcase G: H6 = ((B - R) / C + 2); break;\n\t\tcase B: H6 = ((R - G) / C + 4); break;\n\t}\n\treturn [H6 / 6, S, L2 / 2];\n}\n\nfunction hsl2RGB(hsl){\n\tvar H = hsl[0], S = hsl[1], L = hsl[2];\n\tvar C = S * 2 * (L < 0.5 ? L : 1 - L), m = L - C/2;\n\tvar rgb = [m,m,m], h6 = 6*H;\n\n\tvar X;\n\tif(S !== 0) switch(h6|0) {\n\t\tcase 0: case 6: X = C * h6; rgb[0] += C; rgb[1] += X; break;\n\t\tcase 1: X = C * (2 - h6); rgb[0] += X; rgb[1] += C; break;\n\t\tcase 2: X = C * (h6 - 2); rgb[1] += C; rgb[2] += X; break;\n\t\tcase 3: X = C * (4 - h6); rgb[1] += X; rgb[2] += C; break;\n\t\tcase 4: X = C * (h6 - 4); rgb[2] += C; rgb[0] += X; break;\n\t\tcase 5: X = C * (6 - h6); rgb[2] += X; rgb[0] += C; break;\n\t}\n\tfor(var i = 0; i != 3; ++i) rgb[i] = Math.round(rgb[i]*255);\n\treturn rgb;\n}\n\n/* 18.8.3 bgColor tint algorithm */\nfunction rgb_tint(hex, tint) {\n\tif(tint === 0) return hex;\n\tvar hsl = rgb2HSL(hex2RGB(hex));\n\tif (tint < 0) hsl[2] = hsl[2] * (1 + tint);\n\telse hsl[2] = 1 - (1 - hsl[2]) * (1 - tint);\n\treturn rgb2Hex(hsl2RGB(hsl));\n}\n\n/* 18.3.1.13 width calculations */\n/* [MS-OI29500] 2.1.595 Column Width & Formatting */\nvar DEF_MDW = 6, MAX_MDW = 15, MIN_MDW = 1, MDW = DEF_MDW;\nfunction width2px(width) { return Math.floor(( width + (Math.round(128/MDW))/256 )* MDW ); }\nfunction px2char(px) { return (Math.floor((px - 5)/MDW * 100 + 0.5))/100; }\nfunction char2width(chr) { return (Math.round((chr * MDW + 5)/MDW*256))/256; }\n//function px2char_(px) { return (((px - 5)/MDW * 100 + 0.5))/100; }\n//function char2width_(chr) { return (((chr * MDW + 5)/MDW*256))/256; }\nfunction cycle_width(collw) { return char2width(px2char(width2px(collw))); }\n/* XLSX/XLSB/XLS specify width in units of MDW */\nfunction find_mdw_colw(collw) {\n\tvar delta = Math.abs(collw - cycle_width(collw)), _MDW = MDW;\n\tif(delta > 0.005) for(MDW=MIN_MDW; MDW 0.5) guess--;\n\t\tif(Math.abs(guess) < delta) { delta = Math.abs(guess); _MDW = MDW; }\n\t}\n\tMDW = _MDW;\n}*/\n\nfunction process_col(coll/*:ColInfo*/) {\n\tif(coll.width) {\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.MDW = MDW;\n\t} else if(coll.wpx) {\n\t\tcoll.wch = px2char(coll.wpx);\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.MDW = MDW;\n\t} else if(typeof coll.wch == 'number') {\n\t\tcoll.width = char2width(coll.wch);\n\t\tcoll.wpx = width2px(coll.width);\n\t\tcoll.MDW = MDW;\n\t}\n\tif(coll.customWidth) delete coll.customWidth;\n}\n\nvar DEF_PPI = 96, PPI = DEF_PPI;\nfunction px2pt(px) { return px * 96 / PPI; }\nfunction pt2px(pt) { return pt * PPI / 96; }\n\n/* [MS-EXSPXML3] 2.4.54 ST_enmPattern */\nvar XLMLPatternTypeMap = {\n\t\"None\": \"none\",\n\t\"Solid\": \"solid\",\n\t\"Gray50\": \"mediumGray\",\n\t\"Gray75\": \"darkGray\",\n\t\"Gray25\": \"lightGray\",\n\t\"HorzStripe\": \"darkHorizontal\",\n\t\"VertStripe\": \"darkVertical\",\n\t\"ReverseDiagStripe\": \"darkDown\",\n\t\"DiagStripe\": \"darkUp\",\n\t\"DiagCross\": \"darkGrid\",\n\t\"ThickDiagCross\": \"darkTrellis\",\n\t\"ThinHorzStripe\": \"lightHorizontal\",\n\t\"ThinVertStripe\": \"lightVertical\",\n\t\"ThinReverseDiagStripe\": \"lightDown\",\n\t\"ThinHorzCross\": \"lightGrid\"\n};\n\n/* 18.8.5 borders CT_Borders */\nfunction parse_borders(t, styles, themes, opts) {\n\tstyles.Borders = [];\n\tvar border = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.4 border CT_Border */\n\t\t\tcase '': case '':\n\t\t\t\tborder = /*::(*/{}/*:: :any)*/;\n\t\t\t\tif(y.diagonalUp) border.diagonalUp = parsexmlbool(y.diagonalUp);\n\t\t\t\tif(y.diagonalDown) border.diagonalDown = parsexmlbool(y.diagonalDown);\n\t\t\t\tstyles.Borders.push(border);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* note: not in spec, appears to be CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.43 top CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.6 bottom CT_BorderPr */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.13 diagonal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.25 horizontal CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.44 vertical CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.37 start CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.16 end CT_BorderPr */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '':\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in borders');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.21 fills CT_Fills */\nfunction parse_fills(t, styles, themes, opts) {\n\tstyles.Fills = [];\n\tvar fill = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.20 fill CT_Fill */\n\t\t\tcase '': case '':\n\t\t\t\tfill = {}; styles.Fills.push(fill); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.24 gradientFill CT_GradientFill */\n\t\t\tcase '': break;\n\t\t\tcase '': styles.Fills.push(fill); fill = {}; break;\n\n\t\t\t/* 18.8.32 patternFill CT_PatternFill */\n\t\t\tcase '':\n\t\t\t\tif(y.patternType) fill.patternType = y.patternType;\n\t\t\t\tbreak;\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.3 bgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.19 fgColor CT_Color */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.38 stop CT_GradientStop */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.? color CT_Color */\n\t\t\tcase '': break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fills');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.23 fonts CT_Fonts */\nfunction parse_fonts(t, styles, themes, opts) {\n\tstyles.Fonts = [];\n\tvar font = {};\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.22 font CT_Font */\n\t\t\tcase '': break;\n\t\t\tcase '': case '':\n\t\t\t\tstyles.Fonts.push(font);\n\t\t\t\tfont = {};\n\t\t\t\tbreak;\n\n\t\t\t/* 18.8.29 name CT_FontName */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.2 b CT_BooleanProperty */\n\t\t\tcase '': font.bold = 1; break;\n\n\t\t\t/* 18.8.26 i CT_BooleanProperty */\n\t\t\tcase '': font.italic = 1; break;\n\n\t\t\t/* 18.4.13 u CT_UnderlineProperty */\n\t\t\tcase '': font.underline = 1; break;\n\n\t\t\t/* 18.4.10 strike CT_BooleanProperty */\n\t\t\tcase '': font.strike = 1; break;\n\n\t\t\t/* 18.4.2 outline CT_BooleanProperty */\n\t\t\tcase '': font.outline = 1; break;\n\n\t\t\t/* 18.8.36 shadow CT_BooleanProperty */\n\t\t\tcase '': font.shadow = 1; break;\n\n\t\t\t/* 18.8.12 condense CT_BooleanProperty */\n\t\t\tcase '': font.condense = 1; break;\n\n\t\t\t/* 18.8.17 extend CT_BooleanProperty */\n\t\t\tcase '': font.extend = 1; break;\n\n\t\t\t/* 18.4.11 sz CT_FontSize */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.14 vertAlign CT_VerticalAlignFontProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.18 family CT_FontFamily */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.8.35 scheme CT_FontScheme */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.4.1 charset CT_IntProperty */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in fonts');\n\t\t\t}\n\t\t}\n\t});\n}\n\n/* 18.8.31 numFmts CT_NumFmts */\nfunction parse_numFmts(t, styles, opts) {\n\tstyles.NumberFmt = [];\n\tvar k/*Array*/ = (keys(SSF._table)/*:any*/);\n\tfor(var i=0; i < k.length; ++i) styles.NumberFmt[k[i]] = SSF._table[k[i]];\n\tvar m = t[0].match(tagregex);\n\tif(!m) return;\n\tfor(i=0; i < m.length; ++i) {\n\t\tvar y = parsexmltag(m[i]);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\t\t\tcase '0) {\n\t\t\t\t\tif(j > 0x188) {\n\t\t\t\t\t\tfor(j = 0x188; j > 0x3c; --j) if(styles.NumberFmt[j] == null) break;\n\t\t\t\t\t\tstyles.NumberFmt[j] = f;\n\t\t\t\t\t}\n\t\t\t\t\tSSF.load(f,j);\n\t\t\t\t}\n\t\t\t} break;\n\t\t\tcase '': break;\n\t\t\tdefault: if(opts.WTF) throw new Error('unrecognized ' + y[0] + ' in numFmts');\n\t\t}\n\t}\n}\n\nfunction write_numFmts(NF/*:{[n:number|string]:string}*//*::, opts*/) {\n\tvar o = [\"\"];\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) o[o.length] = (writextag('numFmt',null,{numFmtId:i,formatCode:escapexml(NF[i])}));\n\t});\n\tif(o.length === 1) return \"\";\n\to[o.length] = (\"\");\n\to[0] = writextag('numFmts', null, { count:o.length-2 }).replace(\"/>\", \">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8.10 cellXfs CT_CellXfs */\nvar cellXF_uint = [ \"numFmtId\", \"fillId\", \"fontId\", \"borderId\", \"xfId\" ];\nvar cellXF_bool = [ \"applyAlignment\", \"applyBorder\", \"applyFill\", \"applyFont\", \"applyNumberFormat\", \"applyProtection\", \"pivotButton\", \"quotePrefix\" ];\nfunction parse_cellXfs(t, styles, opts) {\n\tstyles.CellXf = [];\n\tvar xf;\n\tvar pass = false;\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x), i = 0;\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.8.45 xf CT_Xf */\n\t\t\tcase '':\n\t\t\t\txf = y;\n\t\t\t\tdelete xf[0];\n\t\t\t\tfor(i = 0; i < cellXF_uint.length; ++i) if(xf[cellXF_uint[i]])\n\t\t\t\t\txf[cellXF_uint[i]] = parseInt(xf[cellXF_uint[i]], 10);\n\t\t\t\tfor(i = 0; i < cellXF_bool.length; ++i) if(xf[cellXF_bool[i]])\n\t\t\t\t\txf[cellXF_bool[i]] = parsexmlbool(xf[cellXF_bool[i]]);\n\t\t\t\tif(styles.NumberFmt && xf.numFmtId > 0x188) {\n\t\t\t\t\tfor(i = 0x188; i > 0x3c; --i) if(styles.NumberFmt[xf.numFmtId] == styles.NumberFmt[i]) { xf.numFmtId = i; break; }\n\t\t\t\t}\n\t\t\t\tstyles.CellXf.push(xf); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.1 alignment CT_CellAlignment */\n\t\t\tcase '':\n\t\t\t\tvar alignment = {};\n\t\t\t\tif(y.vertical) alignment.vertical = y.vertical;\n\t\t\t\tif(y.horizontal) alignment.horizontal = y.horizontal;\n\t\t\t\tif(y.textRotation != null) alignment.textRotation = y.textRotation;\n\t\t\t\tif(y.indent) alignment.indent = y.indent;\n\t\t\t\tif(y.wrapText) alignment.wrapText = parsexmlbool(y.wrapText);\n\t\t\t\txf.alignment = alignment;\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.8.33 protection CT_CellProtection */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* note: sometimes mc:AlternateContent appears bare */\n\t\t\tcase '': pass = false; break;\n\n\t\t\t/* 18.2.10 extLst CT_ExtensionList ? */\n\t\t\tcase '': case '': break;\n\t\t\tcase '': pass = false; break;\n\t\t\tdefault: if(opts && opts.WTF) {\n\t\t\t\tif(!pass) throw new Error('unrecognized ' + y[0] + ' in cellXfs');\n\t\t\t}\n\t\t}\n\t});\n}\n\nfunction write_cellXfs(cellXfs)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\to[o.length] = (writextag('cellXfs',null));\n\tcellXfs.forEach(function(c) {\n\t\to[o.length] = (writextag('xf', null, c));\n\t});\n\to[o.length] = (\"\");\n\tif(o.length === 2) return \"\";\n\to[0] = writextag('cellXfs',null, {count:o.length-2}).replace(\"/>\",\">\");\n\treturn o.join(\"\");\n}\n\n/* 18.8 Styles CT_Stylesheet*/\nvar parse_sty_xml= (function make_pstyx() {\nvar numFmtRegex = /<(?:\\w+:)?numFmts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?numFmts>/;\nvar cellXfRegex = /<(?:\\w+:)?cellXfs([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?cellXfs>/;\nvar fillsRegex = /<(?:\\w+:)?fills([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fills>/;\nvar fontsRegex = /<(?:\\w+:)?fonts([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?fonts>/;\nvar bordersRegex = /<(?:\\w+:)?borders([^>]*)>[\\S\\s]*?<\\/(?:\\w+:)?borders>/;\n\nreturn function parse_sty_xml(data, themes, opts) {\n\tvar styles = {};\n\tif(!data) return styles;\n\tdata = data.replace(//mg,\"\").replace(//gm,\"\");\n\t/* 18.8.39 styleSheet CT_Stylesheet */\n\tvar t;\n\n\t/* 18.8.31 numFmts CT_NumFmts ? */\n\tif((t=data.match(numFmtRegex))) parse_numFmts(t, styles, opts);\n\n\t/* 18.8.23 fonts CT_Fonts ? */\n\tif((t=data.match(fontsRegex))) parse_fonts(t, styles, themes, opts);\n\n\t/* 18.8.21 fills CT_Fills ? */\n\tif((t=data.match(fillsRegex))) parse_fills(t, styles, themes, opts);\n\n\t/* 18.8.5 borders CT_Borders ? */\n\tif((t=data.match(bordersRegex))) parse_borders(t, styles, themes, opts);\n\n\t/* 18.8.9 cellStyleXfs CT_CellStyleXfs ? */\n\t/* 18.8.8 cellStyles CT_CellStyles ? */\n\n\t/* 18.8.10 cellXfs CT_CellXfs ? */\n\tif((t=data.match(cellXfRegex))) parse_cellXfs(t, styles, opts);\n\n\t/* 18.8.15 dxfs CT_Dxfs ? */\n\t/* 18.8.42 tableStyles CT_TableStyles ? */\n\t/* 18.8.11 colors CT_Colors ? */\n\t/* 18.2.10 extLst CT_ExtensionList ? */\n\n\treturn styles;\n};\n})();\n\nvar STYLES_XML_ROOT = writextag('styleSheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:vt': XMLNS.vt\n});\n\nRELS.STY = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\";\n\nfunction write_sty_xml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o = [XML_HEADER, STYLES_XML_ROOT], w;\n\tif(wb.SSF && (w = write_numFmts(wb.SSF)) != null) o[o.length] = w;\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\tif((w = write_cellXfs(opts.cellXfs))) o[o.length] = (w);\n\to[o.length] = ('');\n\to[o.length] = ('');\n\to[o.length] = ('');\n\n\tif(o.length>2){ o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.657 BrtFmt */\nfunction parse_BrtFmt(data, length/*:number*/) {\n\tvar numFmtId = data.read_shift(2);\n\tvar stFmtCode = parse_XLWideString(data,length-2);\n\treturn [numFmtId, stFmtCode];\n}\nfunction write_BrtFmt(i/*:number*/, f/*:string*/, o) {\n\tif(!o) o = new_buf(6 + 4 * f.length);\n\to.write_shift(2, i);\n\twrite_XLWideString(f, o);\n\tvar out = (o.length > o.l) ? o.slice(0, o.l) : o;\n\tif(o.l == null) o.l = o.length;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.4.659 BrtFont TODO */\nfunction parse_BrtFont(data, length/*:number*/, opts) {\n\tvar out = ({}/*:any*/);\n\n\tout.sz = data.read_shift(2) / 20;\n\n\tvar grbit = parse_FontFlags(data, 2, opts);\n\tif(grbit.fItalic) out.italic = 1;\n\tif(grbit.fCondense) out.condense = 1;\n\tif(grbit.fExtend) out.extend = 1;\n\tif(grbit.fShadow) out.shadow = 1;\n\tif(grbit.fOutline) out.outline = 1;\n\tif(grbit.fStrikeout) out.strike = 1;\n\n\tvar bls = data.read_shift(2);\n\tif(bls === 0x02BC) out.bold = 1;\n\n\tswitch(data.read_shift(2)) {\n\t\t/* case 0: out.vertAlign = \"baseline\"; break; */\n\t\tcase 1: out.vertAlign = \"superscript\"; break;\n\t\tcase 2: out.vertAlign = \"subscript\"; break;\n\t}\n\n\tvar underline = data.read_shift(1);\n\tif(underline != 0) out.underline = underline;\n\n\tvar family = data.read_shift(1);\n\tif(family > 0) out.family = family;\n\n\tvar bCharSet = data.read_shift(1);\n\tif(bCharSet > 0) out.charset = bCharSet;\n\n\tdata.l++;\n\tout.color = parse_BrtColor(data, 8);\n\n\tswitch(data.read_shift(1)) {\n\t\t/* case 0: out.scheme = \"none\": break; */\n\t\tcase 1: out.scheme = \"major\"; break;\n\t\tcase 2: out.scheme = \"minor\"; break;\n\t}\n\n\tout.name = parse_XLWideString(data, length - 21);\n\n\treturn out;\n}\nfunction write_BrtFont(font/*:any*/, o) {\n\tif(!o) o = new_buf(25+4*32);\n\to.write_shift(2, font.sz * 20);\n\twrite_FontFlags(font, o);\n\to.write_shift(2, font.bold ? 0x02BC : 0x0190);\n\tvar sss = 0;\n\tif(font.vertAlign == \"superscript\") sss = 1;\n\telse if(font.vertAlign == \"subscript\") sss = 2;\n\to.write_shift(2, sss);\n\to.write_shift(1, font.underline || 0);\n\to.write_shift(1, font.family || 0);\n\to.write_shift(1, font.charset || 0);\n\to.write_shift(1, 0);\n\twrite_BrtColor(font.color, o);\n\tvar scheme = 0;\n\tif(font.scheme == \"major\") scheme = 1;\n\tif(font.scheme == \"minor\") scheme = 2;\n\to.write_shift(1, scheme);\n\twrite_XLWideString(font.name, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.650 BrtFill */\nvar XLSBFillPTNames = [\n\t\"none\",\n\t\"solid\",\n\t\"mediumGray\",\n\t\"darkGray\",\n\t\"lightGray\",\n\t\"darkHorizontal\",\n\t\"darkVertical\",\n\t\"darkDown\",\n\t\"darkUp\",\n\t\"darkGrid\",\n\t\"darkTrellis\",\n\t\"lightHorizontal\",\n\t\"lightVertical\",\n\t\"lightDown\",\n\t\"lightUp\",\n\t\"lightGrid\",\n\t\"lightTrellis\",\n\t\"gray125\",\n\t\"gray0625\"\n];\nvar rev_XLSBFillPTNames/*:EvertNumType*/ = (evert(XLSBFillPTNames)/*:any*/);\n/* TODO: gradient fill representation */\nvar parse_BrtFill = parsenoop;\nfunction write_BrtFill(fill, o) {\n\tif(!o) o = new_buf(4*3 + 8*7 + 16*1);\n\tvar fls/*:number*/ = rev_XLSBFillPTNames[fill.patternType];\n\tif(fls == null) fls = 0x28;\n\to.write_shift(4, fls);\n\tvar j = 0;\n\tif(fls != 0x28) {\n\t\t/* TODO: custom FG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\t\t/* TODO: custom BG Color */\n\t\twrite_BrtColor({auto:1}, o);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0);\n\t} else {\n\t\tfor(; j < 4; ++j) o.write_shift(4, 0);\n\n\t\tfor(; j < 12; ++j) o.write_shift(4, 0); /* TODO */\n\t\t/* iGradientType */\n\t\t/* xnumDegree */\n\t\t/* xnumFillToLeft */\n\t\t/* xnumFillToRight */\n\t\t/* xnumFillToTop */\n\t\t/* xnumFillToBottom */\n\t\t/* cNumStop */\n\t\t/* xfillGradientStop */\n\t}\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.824 BrtXF */\nfunction parse_BrtXF(data, length/*:number*/) {\n\tvar tgt = data.l + length;\n\tvar ixfeParent = data.read_shift(2);\n\tvar ifmt = data.read_shift(2);\n\tdata.l = tgt;\n\treturn {ixfe:ixfeParent, numFmtId:ifmt };\n}\nfunction write_BrtXF(data, ixfeP, o) {\n\tif(!o) o = new_buf(16);\n\to.write_shift(2, ixfeP||0);\n\to.write_shift(2, data.numFmtId||0);\n\to.write_shift(2, 0); /* iFont */\n\to.write_shift(2, 0); /* iFill */\n\to.write_shift(2, 0); /* ixBorder */\n\to.write_shift(1, 0); /* trot */\n\to.write_shift(1, 0); /* indent */\n\tvar flow = 0;\n\to.write_shift(1, flow); /* flags */\n\to.write_shift(1, 0); /* flags */\n\to.write_shift(1, 0); /* xfGrbitAtr */\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.5.4 Blxf TODO */\nfunction write_Blxf(data, o) {\n\tif(!o) o = new_buf(10);\n\to.write_shift(1, 0); /* dg */\n\to.write_shift(1, 0);\n\to.write_shift(4, 0); /* color */\n\to.write_shift(4, 0); /* color */\n\treturn o;\n}\n/* [MS-XLSB] 2.4.302 BrtBorder TODO */\nvar parse_BrtBorder = parsenoop;\nfunction write_BrtBorder(border, o) {\n\tif(!o) o = new_buf(51);\n\to.write_shift(1, 0); /* diagonal */\n\twrite_Blxf(null, o); /* top */\n\twrite_Blxf(null, o); /* bottom */\n\twrite_Blxf(null, o); /* left */\n\twrite_Blxf(null, o); /* right */\n\twrite_Blxf(null, o); /* diag */\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.763 BrtStyle TODO */\nfunction write_BrtStyle(style, o) {\n\tif(!o) o = new_buf(12+4*10);\n\to.write_shift(4, style.xfId);\n\to.write_shift(2, 1);\n\to.write_shift(1, +style.builtinId);\n\to.write_shift(1, 0); /* iLevel */\n\twrite_XLNullableWideString(style.name || \"\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.272 BrtBeginTableStyles */\nfunction write_BrtBeginTableStyles(cnt, defTableStyle, defPivotStyle) {\n\tvar o = new_buf(4+256*2*4);\n\to.write_shift(4, cnt);\n\twrite_XLNullableWideString(defTableStyle, o);\n\twrite_XLNullableWideString(defPivotStyle, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction parse_sty_bin(data, themes, opts) {\n\tvar styles = {};\n\tstyles.NumberFmt = ([]/*:any*/);\n\tfor(var y in SSF._table) styles.NumberFmt[y] = SSF._table[y];\n\n\tstyles.CellXf = [];\n\tstyles.Fonts = [];\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function hopper_sty(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x002C: /* 'BrtFmt' */\n\t\t\t\tstyles.NumberFmt[val[0]] = val[1]; SSF.load(val[1], val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x002B: /* 'BrtFont' */\n\t\t\t\tstyles.Fonts.push(val);\n\t\t\t\tif(val.color.theme != null && themes && themes.themeElements && themes.themeElements.clrScheme) {\n\t\t\t\t\tval.color.rgb = rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb, val.color.tint || 0);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0401: /* 'BrtKnownFonts' */ break;\n\t\t\tcase 0x002D: /* 'BrtFill' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002E: /* 'BrtBorder' */\n\t\t\t\tbreak;\n\t\t\tcase 0x002F: /* 'BrtXF' */\n\t\t\t\tif(state[state.length - 1] == \"BrtBeginCellXFs\") {\n\t\t\t\t\tstyles.CellXf.push(val);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 0x0030: /* 'BrtStyle' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x023C: /* 'BrtMRUColor' */\n\t\t\tcase 0x01DB: /* 'BrtIndexedColor': */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0493: /* 'BrtDXF14' */\n\t\t\tcase 0x0836: /* 'BrtDXF15' */\n\t\t\tcase 0x046A: /* 'BrtSlicerStyleElement' */\n\t\t\tcase 0x0200: /* 'BrtTableStyleElement' */\n\t\t\tcase 0x082F: /* 'BrtTimelineStyleElement' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn styles;\n}\n\nfunction write_FMTS_bin(ba, NF/*:?SSFTable*/) {\n\tif(!NF) return;\n\tvar cnt = 0;\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) ++cnt;\n\t});\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFmts\", write_UInt32LE(cnt));\n\t[[5,8],[23,26],[41,44],[/*63*/50,/*66],[164,*/392]].forEach(function(r) {\n\t\t/*:: if(!NF) return; */\n\t\tfor(var i = r[0]; i <= r[1]; ++i) if(NF[i] != null) write_record(ba, \"BrtFmt\", write_BrtFmt(i, NF[i]));\n\t});\n\twrite_record(ba, \"BrtEndFmts\");\n}\n\nfunction write_FONTS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFonts\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFont\", write_BrtFont({\n\t\tsz:12,\n\t\tcolor: {theme:1},\n\t\tname: \"Calibri\",\n\t\tfamily: 2,\n\t\tscheme: \"minor\"\n\t}));\n\t/* 1*65491BrtFont [ACFONTS] */\n\twrite_record(ba, \"BrtEndFonts\");\n}\n\nfunction write_FILLS_bin(ba/*::, data*/) {\n\tvar cnt = 2;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginFills\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"none\"}));\n\twrite_record(ba, \"BrtFill\", write_BrtFill({patternType:\"gray125\"}));\n\t/* 1*65431BrtFill */\n\twrite_record(ba, \"BrtEndFills\");\n}\n\nfunction write_BORDERS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\tif(cnt == 0) return;\n\twrite_record(ba, \"BrtBeginBorders\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtBorder\", write_BrtBorder({}));\n\t/* 1*65430BrtBorder */\n\twrite_record(ba, \"BrtEndBorders\");\n}\n\nfunction write_CELLSTYLEXFS_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\twrite_record(ba, \"BrtBeginCellStyleXFs\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtXF\", write_BrtXF({\n\t\tnumFmtId: 0,\n\t\tfontId: 0,\n\t\tfillId: 0,\n\t\tborderId: 0\n\t}, 0xFFFF));\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellStyleXFs\");\n}\n\nfunction write_CELLXFS_bin(ba, data) {\n\twrite_record(ba, \"BrtBeginCellXFs\", write_UInt32LE(data.length));\n\tdata.forEach(function(c) { write_record(ba, \"BrtXF\", write_BrtXF(c,0)); });\n\t/* 1*65430(BrtXF *FRT) */\n\twrite_record(ba, \"BrtEndCellXFs\");\n}\n\nfunction write_STYLES_bin(ba/*::, data*/) {\n\tvar cnt = 1;\n\n\twrite_record(ba, \"BrtBeginStyles\", write_UInt32LE(cnt));\n\twrite_record(ba, \"BrtStyle\", write_BrtStyle({\n\t\txfId:0,\n\t\tbuiltinId:0,\n\t\tname:\"Normal\"\n\t}));\n\t/* 1*65430(BrtStyle *FRT) */\n\twrite_record(ba, \"BrtEndStyles\");\n}\n\nfunction write_DXFS_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginDXFs\", write_UInt32LE(cnt));\n\t/* *2147483647(BrtDXF *FRT) */\n\twrite_record(ba, \"BrtEndDXFs\");\n}\n\nfunction write_TABLESTYLES_bin(ba/*::, data*/) {\n\tvar cnt = 0;\n\n\twrite_record(ba, \"BrtBeginTableStyles\", write_BrtBeginTableStyles(cnt, \"TableStyleMedium9\", \"PivotStyleMedium4\"));\n\t/* *TABLESTYLE */\n\twrite_record(ba, \"BrtEndTableStyles\");\n}\n\nfunction write_COLORPALETTE_bin(/*::ba, data*/) {\n\treturn;\n\t/* BrtBeginColorPalette [INDEXEDCOLORS] [MRUCOLORS] BrtEndColorPalette */\n}\n\n/* [MS-XLSB] 2.1.7.50 Styles */\nfunction write_sty_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginStyleSheet\");\n\twrite_FMTS_bin(ba, wb.SSF);\n\twrite_FONTS_bin(ba, wb);\n\twrite_FILLS_bin(ba, wb);\n\twrite_BORDERS_bin(ba, wb);\n\twrite_CELLSTYLEXFS_bin(ba, wb);\n\twrite_CELLXFS_bin(ba, opts.cellXfs);\n\twrite_STYLES_bin(ba, wb);\n\twrite_DXFS_bin(ba, wb);\n\twrite_TABLESTYLES_bin(ba, wb);\n\twrite_COLORPALETTE_bin(ba, wb);\n\t/* FRTSTYLESHEET*/\n\twrite_record(ba, \"BrtEndStyleSheet\");\n\treturn ba.end();\n}\nRELS.THEME = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme\";\n\n/* Even though theme layout is dk1 lt1 dk2 lt2, true order is lt1 dk1 lt2 dk2 */\nvar XLSXThemeClrScheme = [\n\t'', '', '', '',\n\t'', '', '',\n\t'', '', '',\n\t'', ''\n];\n/* 20.1.6.2 clrScheme CT_ColorScheme */\nfunction parse_clrScheme(t, themes, opts) {\n\tthemes.themeElements.clrScheme = [];\n\tvar color = {};\n\t(t[0].match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\t/* 20.1.6.2 clrScheme (Color Scheme) CT_ColorScheme */\n\t\t\tcase '': break;\n\n\t\t\t/* 20.1.2.3.32 srgbClr CT_SRgbColor */\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\tcase '': case '':\n\t\t\t\tif (y[0].charAt(1) === '/') {\n\t\t\t\t\tthemes.themeElements.clrScheme[XLSXThemeClrScheme.indexOf(y[0])] = color;\n\t\t\t\t\tcolor = {};\n\t\t\t\t} else {\n\t\t\t\t\tcolor.name = y[0].slice(3, y[0].length - 1);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tdefault: if(opts && opts.WTF) throw new Error('Unrecognized ' + y[0] + ' in clrScheme');\n\t\t}\n\t});\n}\n\n/* 20.1.4.1.18 fontScheme CT_FontScheme */\nfunction parse_fontScheme(/*::t, themes, opts*/) { }\n\n/* 20.1.4.1.15 fmtScheme CT_StyleMatrix */\nfunction parse_fmtScheme(/*::t, themes, opts*/) { }\n\nvar clrsregex = /]*)>[\\s\\S]*<\\/a:clrScheme>/;\nvar fntsregex = /]*)>[\\s\\S]*<\\/a:fontScheme>/;\nvar fmtsregex = /]*)>[\\s\\S]*<\\/a:fmtScheme>/;\n\n/* 20.1.6.10 themeElements CT_BaseStyles */\nfunction parse_themeElements(data, themes, opts) {\n\tthemes.themeElements = {};\n\n\tvar t;\n\n\t[\n\t\t/* clrScheme CT_ColorScheme */\n\t\t['clrScheme', clrsregex, parse_clrScheme],\n\t\t/* fontScheme CT_FontScheme */\n\t\t['fontScheme', fntsregex, parse_fontScheme],\n\t\t/* fmtScheme CT_StyleMatrix */\n\t\t['fmtScheme', fmtsregex, parse_fmtScheme]\n\t].forEach(function(m) {\n\t\tif(!(t=data.match(m[1]))) throw new Error(m[0] + ' not found in themeElements');\n\t\tm[2](t, themes, opts);\n\t});\n}\n\nvar themeltregex = /]*)>[\\s\\S]*<\\/a:themeElements>/;\n\n/* 14.2.7 Theme Part */\nfunction parse_theme_xml(data/*:string*/, opts) {\n\t/* 20.1.6.9 theme CT_OfficeStyleSheet */\n\tif(!data || data.length === 0) return parse_theme_xml(write_theme());\n\n\tvar t;\n\tvar themes = {};\n\n\t/* themeElements CT_BaseStyles */\n\tif(!(t=data.match(themeltregex))) throw new Error('themeElements not found in theme');\n\tparse_themeElements(t[0], themes, opts);\n\tthemes.raw = data;\n\treturn themes;\n}\n\nfunction write_theme(Themes, opts)/*:string*/ {\n\tif(opts && opts.themeXLSX) return opts.themeXLSX;\n\tif(Themes && typeof Themes.raw == \"string\") return Themes.raw;\n\tvar o = [XML_HEADER];\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\to[o.length] = '';\n\treturn o.join(\"\");\n}\n/* [MS-XLS] 2.4.326 TODO: payload is a zip file */\nfunction parse_Theme(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar dwThemeVersion = blob.read_shift(4);\n\tif(dwThemeVersion === 124226) return;\n\tif(!opts.cellStyles) { blob.l = end; return; }\n\tvar data = blob.slice(blob.l);\n\tblob.l = end;\n\tvar zip; try { zip = zip_read(data, {type: \"array\"}); } catch(e) { return; }\n\tvar themeXML = getzipstr(zip, \"theme/theme/theme1.xml\", true);\n\tif(!themeXML) return;\n\treturn parse_theme_xml(themeXML, opts);\n}\n\n/* 2.5.49 */\nfunction parse_ColorTheme(blob/*::, length*/) { return blob.read_shift(4); }\n\n/* 2.5.155 */\nfunction parse_FullColorExt(blob/*::, length*/) {\n\tvar o = {};\n\to.xclrType = blob.read_shift(2);\n\to.nTintShade = blob.read_shift(2);\n\tswitch(o.xclrType) {\n\t\tcase 0: blob.l += 4; break;\n\t\tcase 1: o.xclrValue = parse_IcvXF(blob, 4); break;\n\t\tcase 2: o.xclrValue = parse_LongRGBA(blob, 4); break;\n\t\tcase 3: o.xclrValue = parse_ColorTheme(blob, 4); break;\n\t\tcase 4: blob.l += 4; break;\n\t}\n\tblob.l += 8;\n\treturn o;\n}\n\n/* 2.5.164 TODO: read 7 bits*/\nfunction parse_IcvXF(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* 2.5.280 */\nfunction parse_XFExtGradient(blob, length) {\n\treturn parsenoop(blob, length);\n}\n\n/* [MS-XLS] 2.5.108 */\nfunction parse_ExtProp(blob/*::, length*/)/*:Array*/ {\n\tvar extType = blob.read_shift(2);\n\tvar cb = blob.read_shift(2) - 4;\n\tvar o = [extType];\n\tswitch(extType) {\n\t\tcase 0x04: case 0x05: case 0x07: case 0x08:\n\t\tcase 0x09: case 0x0A: case 0x0B: case 0x0D:\n\t\t\to[1] = parse_FullColorExt(blob, cb); break;\n\t\tcase 0x06: o[1] = parse_XFExtGradient(blob, cb); break;\n\t\tcase 0x0E: case 0x0F: o[1] = blob.read_shift(cb === 1 ? 1 : 2); break;\n\t\tdefault: throw new Error(\"Unrecognized ExtProp type: \" + extType + \" \" + cb);\n\t}\n\treturn o;\n}\n\n/* 2.4.355 */\nfunction parse_XFExt(blob, length) {\n\tvar end = blob.l + length;\n\tblob.l += 2;\n\tvar ixfe = blob.read_shift(2);\n\tblob.l += 2;\n\tvar cexts = blob.read_shift(2);\n\tvar ext/*:AOA*/ = [];\n\twhile(cexts-- > 0) ext.push(parse_ExtProp(blob, end-blob.l));\n\treturn {ixfe:ixfe, ext:ext};\n}\n\n/* xf is an XF, see parse_XFExt for xfext */\nfunction update_xfext(xf, xfext) {\n\txfext.forEach(function(xfe) {\n\t\tswitch(xfe[0]) { /* 2.5.108 extPropData */\n\t\t\tcase 0x04: break; /* foreground color */\n\t\t\tcase 0x05: break; /* background color */\n\t\t\tcase 0x06: break; /* gradient fill */\n\t\t\tcase 0x07: break; /* top cell border color */\n\t\t\tcase 0x08: break; /* bottom cell border color */\n\t\t\tcase 0x09: break; /* left cell border color */\n\t\t\tcase 0x0a: break; /* right cell border color */\n\t\t\tcase 0x0b: break; /* diagonal cell border color */\n\t\t\tcase 0x0d: /* text color */\n\t\t\t\tbreak;\n\t\t\tcase 0x0e: break; /* font scheme */\n\t\t\tcase 0x0f: break; /* indentation level */\n\t\t}\n\t});\n}\n\n/* 18.6 Calculation Chain */\nfunction parse_cc_xml(data/*::, name, opts*/)/*:Array*/ {\n\tvar d = [];\n\tif(!data) return d;\n\tvar i = 1;\n\t(data.match(tagregex)||[]).forEach(function(x) {\n\t\tvar y = parsexmltag(x);\n\t\tswitch(y[0]) {\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.6.1 c CT_CalcCell 1 */\n\t\t\tcase ' 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\n//function write_cc_bin(data, opts) { }\n/* 18.14 Supplementary Workbook Data */\nfunction parse_xlink_xml(/*::data, rel, name:string, _opts*/) {\n\t//var opts = _opts || {};\n\t//if(opts.WTF) throw \"XLSX External Link\";\n}\n\n/* [MS-XLSB] 2.1.7.25 External Link */\nfunction parse_xlink_bin(data, rel, name/*:string*/, _opts) {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\n\tvar pass = false, end = false;\n\n\trecordhopper(data, function xlink_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0167: /* 'BrtSupTabs' */\n\t\t\tcase 0x016B: /* 'BrtExternTableStart' */\n\t\t\tcase 0x016C: /* 'BrtExternTableEnd' */\n\t\t\tcase 0x016E: /* 'BrtExternRowHdr' */\n\t\t\tcase 0x016F: /* 'BrtExternCellBlank' */\n\t\t\tcase 0x0170: /* 'BrtExternCellReal' */\n\t\t\tcase 0x0171: /* 'BrtExternCellBool' */\n\t\t\tcase 0x0172: /* 'BrtExternCellError' */\n\t\t\tcase 0x0173: /* 'BrtExternCellString' */\n\t\t\tcase 0x01D8: /* 'BrtExternValueMeta' */\n\t\t\tcase 0x0241: /* 'BrtSupNameStart' */\n\t\t\tcase 0x0242: /* 'BrtSupNameValueStart' */\n\t\t\tcase 0x0243: /* 'BrtSupNameValueEnd' */\n\t\t\tcase 0x0244: /* 'BrtSupNameNum' */\n\t\t\tcase 0x0245: /* 'BrtSupNameErr' */\n\t\t\tcase 0x0246: /* 'BrtSupNameSt' */\n\t\t\tcase 0x0247: /* 'BrtSupNameNil' */\n\t\t\tcase 0x0248: /* 'BrtSupNameBool' */\n\t\t\tcase 0x0249: /* 'BrtSupNameFmla' */\n\t\t\tcase 0x024A: /* 'BrtSupNameBits' */\n\t\t\tcase 0x024B: /* 'BrtSupNameEnd' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT.toString(16) + \" \" + R_n);\n\t\t}\n\t}, opts);\n}\n/* 20.5 DrawingML - SpreadsheetML Drawing */\nRELS.IMG = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\";\nRELS.DRAW = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\";\n\n/* 20.5.2.35 wsDr CT_Drawing */\nfunction parse_drawing(data, rels/*:any*/) {\n\tif(!data) return \"??\";\n\t/*\n\t Chartsheet Drawing:\n\t - 20.5.2.35 wsDr CT_Drawing\n\t - 20.5.2.1 absoluteAnchor CT_AbsoluteAnchor\n\t - 20.5.2.16 graphicFrame CT_GraphicalObjectFrame\n\t - 20.1.2.2.16 graphic CT_GraphicalObject\n\t - 20.1.2.2.17 graphicData CT_GraphicalObjectData\n - chart reference\n\t the actual type is based on the URI of the graphicData\n\t\tTODO: handle embedded charts and other types of graphics\n\t*/\n\tvar id = (data.match(/]*r:id=\"([^\"]*)\"/)||[\"\",\"\"])[1];\n\n\treturn rels['!id'][id].Target;\n}\n\n/* L.5.5.2 SpreadsheetML Comments + VML Schema */\nvar _shapeid = 1024;\nfunction write_comments_vml(rId/*:number*/, comments) {\n\tvar csize = [21600, 21600];\n\t/* L.5.2.1.2 Path Attribute */\n\tvar bbox = [\"m0,0l0\",csize[1],csize[0],csize[1],csize[0],\"0xe\"].join(\",\");\n\tvar o = [\n\t\twritextag(\"xml\", null, { 'xmlns:v': XLMLNS.v, 'xmlns:o': XLMLNS.o, 'xmlns:x': XLMLNS.x, 'xmlns:mv': XLMLNS.mv }).replace(/\\/>/,\">\"),\n\t\twritextag(\"o:shapelayout\", writextag(\"o:idmap\", null, {'v:ext':\"edit\", 'data':rId}), {'v:ext':\"edit\"}),\n\t\twritextag(\"v:shapetype\", [\n\t\t\twritextag(\"v:stroke\", null, {joinstyle:\"miter\"}),\n\t\t\twritextag(\"v:path\", null, {gradientshapeok:\"t\", 'o:connecttype':\"rect\"})\n\t\t].join(\"\"), {id:\"_x0000_t202\", 'o:spt':202, coordsize:csize.join(\",\"),path:bbox})\n\t];\n\twhile(_shapeid < rId * 1000) _shapeid += 1000;\n\n\tcomments.forEach(function(x) {\n\tvar c = decode_cell(x[0]);\n\tvar fillopts = /*::(*/{'color2':\"#BEFF82\", 'type':\"gradient\"}/*:: :any)*/;\n\tif(fillopts.type == \"gradient\") fillopts.angle = \"-180\";\n\tvar fillparm = fillopts.type == \"gradient\" ? writextag(\"o:fill\", null, {type:\"gradientUnscaled\", 'v:ext':\"view\"}) : null;\n\tvar fillxml = writextag('v:fill', fillparm, fillopts);\n\n\tvar shadata = ({on:\"t\", 'obscured':\"t\"}/*:any*/);\n\t++_shapeid;\n\n\to = o.concat([\n\t'',\n\t\tfillxml,\n\t\twritextag(\"v:shadow\", null, shadata),\n\t\twritextag(\"v:path\", null, {'o:connecttype':\"none\"}),\n\t\t'',\n\t\t'',\n\t\t\t'',\n\t\t\t'',\n\t\t\t/* Part 4 19.4.2.3 Anchor (Anchor) */\n\t\t\twritetag('x:Anchor', [c.c+1, 0, c.r+1, 0, c.c+3, 20, c.r+5, 20].join(\",\")),\n\t\t\twritetag('x:AutoFill', \"False\"),\n\t\t\twritetag('x:Row', String(c.r)),\n\t\t\twritetag('x:Column', String(c.c)),\n\t\t\tx[1].hidden ? '' : '',\n\t\t'',\n\t''\n\t]); });\n\to.push('');\n\treturn o.join(\"\");\n}\nRELS.CMNT = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments\";\n\nfunction sheet_insert_comments(sheet, comments/*:Array*/) {\n\tvar dense = Array.isArray(sheet);\n\tvar cell/*:Cell*/;\n\tcomments.forEach(function(comment) {\n\t\tvar r = decode_cell(comment.ref);\n\t\tif(dense) {\n\t\t\tif(!sheet[r.r]) sheet[r.r] = [];\n\t\t\tcell = sheet[r.r][r.c];\n\t\t} else cell = sheet[comment.ref];\n\t\tif (!cell) {\n\t\t\tcell = ({t:\"z\"}/*:any*/);\n\t\t\tif(dense) sheet[r.r][r.c] = cell;\n\t\t\telse sheet[comment.ref] = cell;\n\t\t\tvar range = safe_decode_range(sheet[\"!ref\"]||\"BDWGO1000001:A1\");\n\t\t\tif(range.s.r > r.r) range.s.r = r.r;\n\t\t\tif(range.e.r < r.r) range.e.r = r.r;\n\t\t\tif(range.s.c > r.c) range.s.c = r.c;\n\t\t\tif(range.e.c < r.c) range.e.c = r.c;\n\t\t\tvar encoded = encode_range(range);\n\t\t\tif (encoded !== sheet[\"!ref\"]) sheet[\"!ref\"] = encoded;\n\t\t}\n\n\t\tif (!cell.c) cell.c = [];\n\t\tvar o/*:Comment*/ = ({a: comment.author, t: comment.t, r: comment.r});\n\t\tif(comment.h) o.h = comment.h;\n\t\tcell.c.push(o);\n\t});\n}\n\n/* 18.7 Comments */\nfunction parse_comments_xml(data/*:string*/, opts)/*:Array*/ {\n\t/* 18.7.6 CT_Comments */\n\tif(data.match(/<(?:\\w+:)?comments *\\/>/)) return [];\n\tvar authors/*:Array*/ = [];\n\tvar commentList/*:Array*/ = [];\n\tvar authtag = data.match(/<(?:\\w+:)?authors>([\\s\\S]*)<\\/(?:\\w+:)?authors>/);\n\tif(authtag && authtag[1]) authtag[1].split(/<\\/\\w*:?author>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar a = x.match(/<(?:\\w+:)?author[^>]*>(.*)/);\n\t\tif(a) authors.push(a[1]);\n\t});\n\tvar cmnttag = data.match(/<(?:\\w+:)?commentList>([\\s\\S]*)<\\/(?:\\w+:)?commentList>/);\n\tif(cmnttag && cmnttag[1]) cmnttag[1].split(/<\\/\\w*:?comment>/).forEach(function(x) {\n\t\tif(x === \"\" || x.trim() === \"\") return;\n\t\tvar cm = x.match(/<(?:\\w+:)?comment[^>]*>/);\n\t\tif(!cm) return;\n\t\tvar y = parsexmltag(cm[0]);\n\t\tvar comment/*:RawComment*/ = ({ author: y.authorId && authors[y.authorId] || \"sheetjsghost\", ref: y.ref, guid: y.guid }/*:any*/);\n\t\tvar cell = decode_cell(y.ref);\n\t\tif(opts.sheetRows && opts.sheetRows <= cell.r) return;\n\t\tvar textMatch = x.match(/<(?:\\w+:)?text>([\\s\\S]*)<\\/(?:\\w+:)?text>/);\n\t\tvar rt = !!textMatch && !!textMatch[1] && parse_si(textMatch[1]) || {r:\"\",t:\"\",h:\"\"};\n\t\tcomment.r = rt.r;\n\t\tif(rt.r == \"\") rt.t = rt.h = \"\";\n\t\tcomment.t = (rt.t||\"\").replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\t\tif(opts.cellHTML) comment.h = rt.h;\n\t\tcommentList.push(comment);\n\t});\n\treturn commentList;\n}\n\nvar CMNT_XML_ROOT = writextag('comments', null, { 'xmlns': XMLNS.main[0] });\nfunction write_comments_xml(data/*::, opts*/) {\n\tvar o = [XML_HEADER, CMNT_XML_ROOT];\n\n\tvar iauthor/*:Array*/ = [];\n\to.push(\"\");\n\tdata.forEach(function(x) { x[1].forEach(function(w) { var a = escapexml(w.a);\n\t\tif(iauthor.indexOf(a) > -1) return;\n\t\tiauthor.push(a);\n\t\to.push(\"\" + a + \"\");\n\t}); });\n\to.push(\"\");\n\to.push(\"\");\n\tdata.forEach(function(d) {\n\t\td[1].forEach(function(c) {\n\t\t\t/* 18.7.3 CT_Comment */\n\t\t\to.push('');\n\t\t\to.push(writetag(\"t\", c.t == null ? \"\" : escapexml(c.t)));\n\t\t\to.push('');\n\t\t});\n\t});\n\to.push(\"\");\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.28 BrtBeginComment */\nfunction parse_BrtBeginComment(data) {\n\tvar out = {};\n\tout.iauthor = data.read_shift(4);\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tout.rfx = rfx.s;\n\tout.ref = encode_cell(rfx.s);\n\tdata.l += 16; /*var guid = parse_GUID(data); */\n\treturn out;\n}\nfunction write_BrtBeginComment(data, o) {\n\tif(o == null) o = new_buf(36);\n\to.write_shift(4, data[1].iauthor);\n\twrite_UncheckedRfX((data[0]/*:any*/), o);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\to.write_shift(4, 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.327 BrtCommentAuthor */\nvar parse_BrtCommentAuthor = parse_XLWideString;\nfunction write_BrtCommentAuthor(data) { return write_XLWideString(data.slice(0, 54)); }\n\n/* [MS-XLSB] 2.1.7.8 Comments */\nfunction parse_comments_bin(data, opts)/*:Array*/ {\n\tvar out/*:Array*/ = [];\n\tvar authors/*:Array*/ = [];\n\tvar c = {};\n\tvar pass = false;\n\trecordhopper(data, function hopper_cmnt(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x0278: /* 'BrtCommentAuthor' */\n\t\t\t\tauthors.push(val); break;\n\t\t\tcase 0x027B: /* 'BrtBeginComment' */\n\t\t\t\tc = val; break;\n\t\t\tcase 0x027D: /* 'BrtCommentText' */\n\t\t\t\tc.t = val.t; c.h = val.h; c.r = val.r; break;\n\t\t\tcase 0x027C: /* 'BrtEndComment' */\n\t\t\t\tc.author = authors[c.iauthor];\n\t\t\t\tdelete (c/*:any*/).iauthor;\n\t\t\t\tif(opts.sheetRows && c.rfx && opts.sheetRows <= c.rfx.r) break;\n\t\t\t\tif(!c.t) c.t = \"\";\n\t\t\t\tdelete c.rfx; out.push(c); break;\n\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */ break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */ break;\n\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t});\n\treturn out;\n}\n\nfunction write_comments_bin(data/*::, opts*/) {\n\tvar ba = buf_array();\n\tvar iauthor/*:Array*/ = [];\n\twrite_record(ba, \"BrtBeginComments\");\n\n\twrite_record(ba, \"BrtBeginCommentAuthors\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tif(iauthor.indexOf(c.a) > -1) return;\n\t\t\tiauthor.push(c.a.slice(0,54));\n\t\t\twrite_record(ba, \"BrtCommentAuthor\", write_BrtCommentAuthor(c.a));\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentAuthors\");\n\n\twrite_record(ba, \"BrtBeginCommentList\");\n\tdata.forEach(function(comment) {\n\t\tcomment[1].forEach(function(c) {\n\t\t\tc.iauthor = iauthor.indexOf(c.a);\n\t\t\tvar range = {s:decode_cell(comment[0]),e:decode_cell(comment[0])};\n\t\t\twrite_record(ba, \"BrtBeginComment\", write_BrtBeginComment([range, c]));\n\t\t\tif(c.t && c.t.length > 0) write_record(ba, \"BrtCommentText\", write_BrtCommentText(c));\n\t\t\twrite_record(ba, \"BrtEndComment\");\n\t\t\tdelete c.iauthor;\n\t\t});\n\t});\n\twrite_record(ba, \"BrtEndCommentList\");\n\n\twrite_record(ba, \"BrtEndComments\");\n\treturn ba.end();\n}\nvar CT_VBA = \"application/vnd.ms-office.vbaProject\";\nfunction make_vba_xls(cfb/*:CFBContainer*/) {\n\tvar newcfb = CFB.utils.cfb_new({root:\"R\"});\n\tcfb.FullPaths.forEach(function(p, i) {\n\t\tif(p.slice(-1) === \"/\" || !p.match(/_VBA_PROJECT_CUR/)) return;\n\t\tvar newpath = p.replace(/^[^\\/]*/,\"R\").replace(/\\/_VBA_PROJECT_CUR\\u0000*/, \"\");\n\t\tCFB.utils.cfb_add(newcfb, newpath, cfb.FileIndex[i].content);\n\t});\n\treturn CFB.write(newcfb);\n}\n\nfunction fill_vba_xls(cfb/*:CFBContainer*/, vba/*:CFBContainer*/)/*:void*/ {\n\tvba.FullPaths.forEach(function(p, i) {\n\t\tif(i == 0) return;\n\t\tvar newpath = p.replace(/[^\\/]*[\\/]/, \"/_VBA_PROJECT_CUR/\");\n\t\tif(newpath.slice(-1) !== \"/\") CFB.utils.cfb_add(cfb, newpath, vba.FileIndex[i].content);\n\t});\n}\n\nvar VBAFMTS = [ \"xlsb\", \"xlsm\", \"xlam\", \"biff8\", \"xla\" ];\n\nRELS.DS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet\";\nRELS.MS = \"http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet\";\n\n/* macro and dialog sheet stubs */\nfunction parse_ds_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ds_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'dialog'}; }\nfunction parse_ms_bin(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\nfunction parse_ms_xml(/*::data:any, opts, idx:number, rels, wb, themes, styles*/)/*:Worksheet*/ { return {'!type':'macro'}; }\n/* TODO: it will be useful to parse the function str */\nvar rc_to_a1 = (function(){\n\tvar rcregex = /(^|[^A-Za-z_])R(\\[?-?\\d+\\]|[1-9]\\d*|)C(\\[?-?\\d+\\]|[1-9]\\d*|)(?![A-Za-z0-9_])/g;\n\tvar rcbase/*:Cell*/ = ({r:0,c:0}/*:any*/);\n\tfunction rcfunc($$,$1,$2,$3) {\n\t\tvar cRel = false, rRel = false;\n\n\t\tif($2.length == 0) rRel = true;\n\t\telse if($2.charAt(0) == \"[\") { rRel = true; $2 = $2.slice(1, -1); }\n\n\t\tif($3.length == 0) cRel = true;\n\t\telse if($3.charAt(0) == \"[\") { cRel = true; $3 = $3.slice(1, -1); }\n\n\t\tvar R = $2.length>0?parseInt($2,10)|0:0, C = $3.length>0?parseInt($3,10)|0:0;\n\n\t\tif(cRel) C += rcbase.c; else --C;\n\t\tif(rRel) R += rcbase.r; else --R;\n\t\treturn $1 + (cRel ? \"\" : \"$\") + encode_col(C) + (rRel ? \"\" : \"$\") + encode_row(R);\n\t}\n\treturn function rc_to_a1(fstr/*:string*/, base/*:Cell*/)/*:string*/ {\n\t\trcbase = base;\n\t\treturn fstr.replace(rcregex, rcfunc);\n\t};\n})();\n\nvar crefregex = /(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)(10[0-3]\\d{4}|104[0-7]\\d{3}|1048[0-4]\\d{2}|10485[0-6]\\d|104857[0-6]|[1-9]\\d{0,5})(?![_.\\(A-Za-z0-9])/g;\nvar a1_to_rc =(function(){\n\treturn function a1_to_rc(fstr/*:string*/, base/*:CellAddress*/) {\n\t\treturn fstr.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\t\tvar c = decode_col($3) - ($2 ? 0 : base.c);\n\t\t\tvar r = decode_row($5) - ($4 ? 0 : base.r);\n\t\t\tvar R = (r == 0 ? \"\" : !$4 ? \"[\" + r + \"]\" : (r+1));\n\t\t\tvar C = (c == 0 ? \"\" : !$2 ? \"[\" + c + \"]\" : (c+1));\n\t\t\treturn $1 + \"R\" + R + \"C\" + C;\n\t\t});\n\t};\n})();\n\n/* no defined name can collide with a valid cell address A1:XFD1048576 ... except LOG10! */\nfunction shift_formula_str(f/*:string*/, delta/*:Cell*/)/*:string*/ {\n\treturn f.replace(crefregex, function($0, $1, $2, $3, $4, $5) {\n\t\treturn $1+($2==\"$\" ? $2+$3 : encode_col(decode_col($3)+delta.c))+($4==\"$\" ? $4+$5 : encode_row(decode_row($5) + delta.r));\n\t});\n}\n\nfunction shift_formula_xlsx(f/*:string*/, range/*:string*/, cell/*:string*/)/*:string*/ {\n\tvar r = decode_range(range), s = r.s, c = decode_cell(cell);\n\tvar delta = {r:c.r - s.r, c:c.c - s.c};\n\treturn shift_formula_str(f, delta);\n}\n\n/* TODO: parse formula */\nfunction fuzzyfmla(f/*:string*/)/*:boolean*/ {\n\tif(f.length == 1) return false;\n\treturn true;\n}\n\nfunction _xlfn(f/*:string*/)/*:string*/ {\n\treturn f.replace(/_xlfn\\./g,\"\");\n}\nfunction parseread1(blob) { blob.l+=1; return; }\n\n/* [MS-XLS] 2.5.51 */\nfunction parse_ColRelU(blob, length) {\n\tvar c = blob.read_shift(length == 1 ? 1 : 2);\n\treturn [c & 0x3FFF, (c >> 14) & 1, (c >> 15) & 1];\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.89 */\nfunction parse_RgceArea(blob, length, opts) {\n\tvar w = 2;\n\tif(opts) {\n\t\tif(opts.biff >= 2 && opts.biff <= 5) return parse_RgceArea_BIFF2(blob, length, opts);\n\t\telse if(opts.biff == 12) w = 4;\n\t}\n\tvar r=blob.read_shift(w), R=blob.read_shift(w);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n/* BIFF 2-5 encodes flags in the row field */\nfunction parse_RgceArea_BIFF2(blob/*::, length, opts*/) {\n\tvar r=parse_ColRelU(blob, 2), R=parse_ColRelU(blob, 2);\n\tvar c=blob.read_shift(1);\n\tvar C=blob.read_shift(1);\n\treturn { s:{r:r[0], c:c, cRel:r[1], rRel:r[2]}, e:{r:R[0], c:C, cRel:R[1], rRel:R[2]} };\n}\n\n/* [MS-XLS] 2.5.198.105 ; [MS-XLSB] 2.5.97.90 */\nfunction parse_RgceAreaRel(blob, length, opts) {\n\tif(opts.biff < 8) return parse_RgceArea_BIFF2(blob, length, opts);\n\tvar r=blob.read_shift(opts.biff == 12 ? 4 : 2), R=blob.read_shift(opts.biff == 12 ? 4 : 2);\n\tvar c=parse_ColRelU(blob, 2);\n\tvar C=parse_ColRelU(blob, 2);\n\treturn { s:{r:r, c:c[0], cRel:c[1], rRel:c[2]}, e:{r:R, c:C[0], cRel:C[1], rRel:C[2]} };\n}\n\n/* [MS-XLS] 2.5.198.109 ; [MS-XLSB] 2.5.97.91 */\nfunction parse_RgceLoc(blob, length, opts) {\n\tif(opts && opts.biff >= 2 && opts.biff <= 5) return parse_RgceLoc_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(opts && opts.biff == 12 ? 4 : 2);\n\tvar c = parse_ColRelU(blob, 2);\n\treturn {r:r, c:c[0], cRel:c[1], rRel:c[2]};\n}\nfunction parse_RgceLoc_BIFF2(blob/*::, length, opts*/) {\n\tvar r = parse_ColRelU(blob, 2);\n\tvar c = blob.read_shift(1);\n\treturn {r:r[0], c:c, cRel:r[1], rRel:r[2]};\n}\n\n/* [MS-XLS] 2.5.198.107, 2.5.47 */\nfunction parse_RgceElfLoc(blob/*::, length, opts*/) {\n\tvar r = blob.read_shift(2);\n\tvar c = blob.read_shift(2);\n\treturn {r:r, c:c & 0xFF, fQuoted:!!(c & 0x4000), cRel:c>>15, rRel:c>>15 };\n}\n\n/* [MS-XLS] 2.5.198.111 ; [MS-XLSB] 2.5.97.92 TODO */\nfunction parse_RgceLocRel(blob, length, opts) {\n\tvar biff = opts && opts.biff ? opts.biff : 8;\n\tif(biff >= 2 && biff <= 5) return parse_RgceLocRel_BIFF2(blob, length, opts);\n\tvar r = blob.read_shift(biff >= 12 ? 4 : 2);\n\tvar cl = blob.read_shift(2);\n\tvar cRel = (cl & 0x4000) >> 14, rRel = (cl & 0x8000) >> 15;\n\tcl &= 0x3FFF;\n\tif(rRel == 1) while(r > 0x7FFFF) r -= 0x100000;\n\tif(cRel == 1) while(cl > 0x1FFF) cl = cl - 0x4000;\n\treturn {r:r,c:cl,cRel:cRel,rRel:rRel};\n}\nfunction parse_RgceLocRel_BIFF2(blob/*::, length:number, opts*/) {\n\tvar rl = blob.read_shift(2);\n\tvar c = blob.read_shift(1);\n\tvar rRel = (rl & 0x8000) >> 15, cRel = (rl & 0x4000) >> 14;\n\trl &= 0x3FFF;\n\tif(rRel == 1 && rl >= 0x2000) rl = rl - 0x4000;\n\tif(cRel == 1 && c >= 0x80) c = c - 0x100;\n\treturn {r:rl,c:c,cRel:cRel,rRel:rRel};\n}\n\n/* [MS-XLS] 2.5.198.27 ; [MS-XLSB] 2.5.97.18 */\nfunction parse_PtgArea(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceArea(blob, opts.biff >= 2 && opts.biff <= 5 ? 6 : 8, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.28 ; [MS-XLSB] 2.5.97.19 */\nfunction parse_PtgArea3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2, 'i');\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tvar area = parse_RgceArea(blob, w, opts);\n\treturn [type, ixti, area];\n}\n\n/* [MS-XLS] 2.5.198.29 ; [MS-XLSB] 2.5.97.20 */\nfunction parse_PtgAreaErr(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts && (opts.biff > 8) ? 12 : (opts.biff < 8 ? 6 : 8);\n\treturn [type];\n}\n/* [MS-XLS] 2.5.198.30 ; [MS-XLSB] 2.5.97.21 */\nfunction parse_PtgAreaErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 8;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: blob.l += 12; w = 6; break;\n\t\tcase 12: w = 12; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.31 ; [MS-XLSB] 2.5.97.22 */\nfunction parse_PtgAreaN(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar area = parse_RgceAreaRel(blob, length - 1, opts);\n\treturn [type, area];\n}\n\n/* [MS-XLS] 2.5.198.32 ; [MS-XLSB] 2.5.97.23 */\nfunction parse_PtgArray(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tblob.l += opts.biff == 2 ? 6 : opts.biff == 12 ? 14 : 7;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.33 ; [MS-XLSB] 2.5.97.24 */\nfunction parse_PtgAttrBaxcel(blob) {\n\tvar bitSemi = blob[blob.l+1] & 0x01; /* 1 = volatile */\n\tvar bitBaxcel = 1;\n\tblob.l += 4;\n\treturn [bitSemi, bitBaxcel];\n}\n\n/* [MS-XLS] 2.5.198.34 ; [MS-XLSB] 2.5.97.25 */\nfunction parse_PtgAttrChoose(blob, length, opts)/*:Array*/ {\n\tblob.l +=2;\n\tvar offset = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\tvar o/*:Array*/ = [];\n\t/* offset is 1 less than the number of elements */\n\tfor(var i = 0; i <= offset; ++i) o.push(blob.read_shift(opts && opts.biff == 2 ? 1 : 2));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.35 ; [MS-XLSB] 2.5.97.26 */\nfunction parse_PtgAttrGoto(blob, length, opts) {\n\tvar bitGoto = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitGoto, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLS] 2.5.198.36 ; [MS-XLSB] 2.5.97.27 */\nfunction parse_PtgAttrIf(blob, length, opts) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(opts && opts.biff == 2 ? 1 : 2)];\n}\n\n/* [MS-XLSB] 2.5.97.28 */\nfunction parse_PtgAttrIfError(blob) {\n\tvar bitIf = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += 2;\n\treturn [bitIf, blob.read_shift(2)];\n}\n\n/* [MS-XLS] 2.5.198.37 ; [MS-XLSB] 2.5.97.29 */\nfunction parse_PtgAttrSemi(blob, length, opts) {\n\tvar bitSemi = (blob[blob.l+1] & 0xFF) ? 1 : 0;\n\tblob.l += opts && opts.biff == 2 ? 3 : 4;\n\treturn [bitSemi];\n}\n\n/* [MS-XLS] 2.5.198.40 ; [MS-XLSB] 2.5.97.32 */\nfunction parse_PtgAttrSpaceType(blob/*::, length*/) {\n\tvar type = blob.read_shift(1), cch = blob.read_shift(1);\n\treturn [type, cch];\n}\n\n/* [MS-XLS] 2.5.198.38 ; [MS-XLSB] 2.5.97.30 */\nfunction parse_PtgAttrSpace(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.39 ; [MS-XLSB] 2.5.97.31 */\nfunction parse_PtgAttrSpaceSemi(blob) {\n\tblob.read_shift(2);\n\treturn parse_PtgAttrSpaceType(blob, 2);\n}\n\n/* [MS-XLS] 2.5.198.84 ; [MS-XLSB] 2.5.97.68 TODO */\nfunction parse_PtgRef(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLoc(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.88 ; [MS-XLSB] 2.5.97.72 TODO */\nfunction parse_PtgRefN(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar loc = parse_RgceLocRel(blob, 0, opts);\n\treturn [type, loc];\n}\n\n/* [MS-XLS] 2.5.198.85 ; [MS-XLSB] 2.5.97.69 TODO */\nfunction parse_PtgRef3d(blob, length, opts) {\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tif(opts && opts.biff == 5) blob.l += 12;\n\tvar loc = parse_RgceLoc(blob, 0, opts); // TODO: or RgceLocRel\n\treturn [type, ixti, loc];\n}\n\n\n/* [MS-XLS] 2.5.198.62 ; [MS-XLSB] 2.5.97.45 TODO */\nfunction parse_PtgFunc(blob, length, opts) {\n\t//var ptg = blob[blob.l] & 0x1F;\n\tvar type = (blob[blob.l] & 0x60)>>5;\n\tblob.l += 1;\n\tvar iftab = blob.read_shift(opts && opts.biff <= 3 ? 1 : 2);\n\treturn [FtabArgc[iftab], Ftab[iftab], type];\n}\n/* [MS-XLS] 2.5.198.63 ; [MS-XLSB] 2.5.97.46 TODO */\nfunction parse_PtgFuncVar(blob, length, opts) {\n\tvar type = blob[blob.l++];\n\tvar cparams = blob.read_shift(1), tab = opts && opts.biff <= 3 ? [(type == 0x58 ? -1 : 0), blob.read_shift(1)]: parsetab(blob);\n\treturn [cparams, (tab[0] === 0 ? Ftab : Cetab)[tab[1]]];\n}\n\nfunction parsetab(blob) {\n\treturn [blob[blob.l+1]>>7, blob.read_shift(2) & 0x7FFF];\n}\n\n/* [MS-XLS] 2.5.198.41 ; [MS-XLSB] 2.5.97.33 */\nfunction parse_PtgAttrSum(blob, length, opts) {\n\tblob.l += opts && opts.biff == 2 ? 3 : 4; return;\n}\n\n/* [MS-XLS] 2.5.198.58 ; [MS-XLSB] 2.5.97.40 */\nfunction parse_PtgExp(blob, length, opts) {\n\tblob.l++;\n\tif(opts && opts.biff == 12) return [blob.read_shift(4, 'i'), 0];\n\tvar row = blob.read_shift(2);\n\tvar col = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [row, col];\n}\n\n/* [MS-XLS] 2.5.198.57 ; [MS-XLSB] 2.5.97.39 */\nfunction parse_PtgErr(blob) { blob.l++; return BErr[blob.read_shift(1)]; }\n\n/* [MS-XLS] 2.5.198.66 ; [MS-XLSB] 2.5.97.49 */\nfunction parse_PtgInt(blob) { blob.l++; return blob.read_shift(2); }\n\n/* [MS-XLS] 2.5.198.42 ; [MS-XLSB] 2.5.97.34 */\nfunction parse_PtgBool(blob) { blob.l++; return blob.read_shift(1)!==0;}\n\n/* [MS-XLS] 2.5.198.79 ; [MS-XLSB] 2.5.97.63 */\nfunction parse_PtgNum(blob) { blob.l++; return parse_Xnum(blob, 8); }\n\n/* [MS-XLS] 2.5.198.89 ; [MS-XLSB] 2.5.97.74 */\nfunction parse_PtgStr(blob, length, opts) { blob.l++; return parse_ShortXLUnicodeString(blob, length-1, opts); }\n\n/* [MS-XLS] 2.5.192.112 + 2.5.192.11{3,4,5,6,7} */\n/* [MS-XLSB] 2.5.97.93 + 2.5.97.9{4,5,6,7} */\nfunction parse_SerAr(blob, biff/*:number*/) {\n\tvar val = [blob.read_shift(1)];\n\tif(biff == 12) switch(val[0]) {\n\t\tcase 0x02: val[0] = 0x04; break; /* SerBool */\n\t\tcase 0x04: val[0] = 0x10; break; /* SerErr */\n\t\tcase 0x00: val[0] = 0x01; break; /* SerNum */\n\t\tcase 0x01: val[0] = 0x02; break; /* SerStr */\n\t}\n\tswitch(val[0]) {\n\t\tcase 0x04: /* SerBool -- boolean */\n\t\t\tval[1] = parsebool(blob, 1) ? 'TRUE' : 'FALSE';\n\t\t\tif(biff != 12) blob.l += 7; break;\n\t\tcase 0x25: /* appears to be an alias */\n\t\tcase 0x10: /* SerErr -- error */\n\t\t\tval[1] = BErr[blob[blob.l]];\n\t\t\tblob.l += ((biff == 12) ? 4 : 8); break;\n\t\tcase 0x00: /* SerNil -- honestly, I'm not sure how to reproduce this */\n\t\t\tblob.l += 8; break;\n\t\tcase 0x01: /* SerNum -- Xnum */\n\t\t\tval[1] = parse_Xnum(blob, 8); break;\n\t\tcase 0x02: /* SerStr -- XLUnicodeString (<256 chars) */\n\t\t\tval[1] = parse_XLUnicodeString2(blob, 0, {biff:biff > 0 && biff < 8 ? 2 : biff}); break;\n\t\tdefault: throw new Error(\"Bad SerAr: \" + val[0]); /* Unreachable */\n\t}\n\treturn val;\n}\n\n/* [MS-XLS] 2.5.198.61 ; [MS-XLSB] 2.5.97.44 */\nfunction parse_PtgExtraMem(blob, cce, opts) {\n\tvar count = blob.read_shift((opts.biff == 12) ? 4 : 2);\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i != count; ++i) out.push(((opts.biff == 12) ? parse_UncheckedRfX : parse_Ref8U)(blob, 8));\n\treturn out;\n}\n\n/* [MS-XLS] 2.5.198.59 ; [MS-XLSB] 2.5.97.41 */\nfunction parse_PtgExtraArray(blob, length, opts) {\n\tvar rows = 0, cols = 0;\n\tif(opts.biff == 12) {\n\t\trows = blob.read_shift(4); // DRw\n\t\tcols = blob.read_shift(4); // DCol\n\t} else {\n\t\tcols = 1 + blob.read_shift(1); //DColByteU\n\t\trows = 1 + blob.read_shift(2); //DRw\n\t}\n\tif(opts.biff >= 2 && opts.biff < 8) { --rows; if(--cols == 0) cols = 0x100; }\n\t// $FlowIgnore\n\tfor(var i = 0, o/*:Array>*/ = []; i != rows && (o[i] = []); ++i)\n\t\tfor(var j = 0; j != cols; ++j) o[i][j] = parse_SerAr(blob, opts.biff);\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 */\nfunction parse_PtgName(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar w = (!opts || (opts.biff >= 8)) ? 4 : 2;\n\tvar nameindex = blob.read_shift(w);\n\tswitch(opts.biff) {\n\t\tcase 2: blob.l += 5; break;\n\t\tcase 3: case 4: blob.l += 8; break;\n\t\tcase 5: blob.l += 12; break;\n\t}\n\treturn [type, 0, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 */\nfunction parse_PtgNameX(blob, length, opts) {\n\tif(opts.biff == 5) return parse_PtgNameX_BIFF5(blob, length, opts);\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2); // XtiIndex\n\tvar nameindex = blob.read_shift(4);\n\treturn [type, ixti, nameindex];\n}\nfunction parse_PtgNameX_BIFF5(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar ixti = blob.read_shift(2, 'i'); // XtiIndex\n\tblob.l += 8;\n\tvar nameindex = blob.read_shift(2);\n\tblob.l += 12;\n\treturn [type, ixti, nameindex];\n}\n\n/* [MS-XLS] 2.5.198.70 ; [MS-XLSB] 2.5.97.54 */\nfunction parse_PtgMemArea(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += (opts && opts.biff == 2 ? 3 : 4);\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n/* [MS-XLS] 2.5.198.72 ; [MS-XLSB] 2.5.97.56 */\nfunction parse_PtgMemFunc(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(opts && opts.biff == 2 ? 1 : 2);\n\treturn [type, cce];\n}\n\n\n/* [MS-XLS] 2.5.198.86 ; [MS-XLSB] 2.5.97.69 */\nfunction parse_PtgRefErr(blob, length, opts) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tblob.l += 4;\n\tif(opts.biff < 8) blob.l--;\n\tif(opts.biff == 12) blob.l += 2;\n\treturn [type];\n}\n\n/* [MS-XLS] 2.5.198.87 ; [MS-XLSB] 2.5.97.71 */\nfunction parse_PtgRefErr3d(blob, length, opts) {\n\tvar type = (blob[blob.l++] & 0x60) >> 5;\n\tvar ixti = blob.read_shift(2);\n\tvar w = 4;\n\tif(opts) switch(opts.biff) {\n\t\tcase 5: w = 15; break;\n\t\tcase 12: w = 6; break;\n\t}\n\tblob.l += w;\n\treturn [type, ixti];\n}\n\n/* [MS-XLS] 2.5.198.71 ; [MS-XLSB] 2.5.97.55 */\nvar parse_PtgMemErr = parsenoop;\n/* [MS-XLS] 2.5.198.73 ; [MS-XLSB] 2.5.97.57 */\nvar parse_PtgMemNoMem = parsenoop;\n/* [MS-XLS] 2.5.198.92 */\nvar parse_PtgTbl = parsenoop;\n\nfunction parse_PtgElfLoc(blob, length, opts) {\n\tblob.l += 2;\n\treturn [parse_RgceElfLoc(blob, 4, opts)];\n}\nfunction parse_PtgElfNoop(blob/*::, length, opts*/) {\n\tblob.l += 6;\n\treturn [];\n}\n/* [MS-XLS] 2.5.198.46 */\nvar parse_PtgElfCol = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.47 */\nvar parse_PtgElfColS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.48 */\nvar parse_PtgElfColSV = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.49 */\nvar parse_PtgElfColV = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.50 */\nfunction parse_PtgElfLel(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [parseuint16(blob), blob.read_shift(2) & 0x01];\n}\n/* [MS-XLS] 2.5.198.51 */\nvar parse_PtgElfRadical = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.52 */\nvar parse_PtgElfRadicalLel = parse_PtgElfLel;\n/* [MS-XLS] 2.5.198.53 */\nvar parse_PtgElfRadicalS = parse_PtgElfNoop;\n/* [MS-XLS] 2.5.198.54 */\nvar parse_PtgElfRw = parse_PtgElfLoc;\n/* [MS-XLS] 2.5.198.55 */\nvar parse_PtgElfRwV = parse_PtgElfLoc;\n\n/* [MS-XLSB] 2.5.97.52 TODO */\nvar PtgListRT = [\n\t\"Data\",\n\t\"All\",\n\t\"Headers\",\n\t\"??\",\n\t\"?Data2\",\n\t\"??\",\n\t\"?DataHeaders\",\n\t\"??\",\n\t\"Totals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?DataTotals\",\n\t\"??\",\n\t\"??\",\n\t\"??\",\n\t\"?Current\"\n];\nfunction parse_PtgList(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\tvar ixti = blob.read_shift(2);\n\tvar flags = blob.read_shift(2);\n\tvar idx = blob.read_shift(4);\n\tvar c = blob.read_shift(2);\n\tvar C = blob.read_shift(2);\n\tvar rt = PtgListRT[(flags >> 2) & 0x1F];\n\treturn {ixti: ixti, coltype:(flags&0x3), rt:rt, idx:idx, c:c, C:C};\n}\n/* [MS-XLS] 2.5.198.91 ; [MS-XLSB] 2.5.97.76 */\nfunction parse_PtgSxName(blob/*::, length, opts*/) {\n\tblob.l += 2;\n\treturn [blob.read_shift(4)];\n}\n\n/* [XLS] old spec */\nfunction parse_PtgSheet(blob, length, opts) {\n\tblob.l += 5;\n\tblob.l += 2;\n\tblob.l += (opts.biff == 2 ? 1 : 4);\n\treturn [\"PTGSHEET\"];\n}\nfunction parse_PtgEndSheet(blob, length, opts) {\n\tblob.l += (opts.biff == 2 ? 4 : 5);\n\treturn [\"PTGENDSHEET\"];\n}\nfunction parse_PtgMemAreaN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgMemNoMemN(blob/*::, length, opts*/) {\n\tvar type = (blob.read_shift(1) >>> 5) & 0x03;\n\tvar cce = blob.read_shift(2);\n\treturn [type, cce];\n}\nfunction parse_PtgAttrNoop(blob/*::, length, opts*/) {\n\tblob.l += 4;\n\treturn [0, 0];\n}\n\n/* [MS-XLS] 2.5.198.25 ; [MS-XLSB] 2.5.97.16 */\nvar PtgTypes = {\n\t/*::[*/0x01/*::]*/: { n:'PtgExp', f:parse_PtgExp },\n\t/*::[*/0x02/*::]*/: { n:'PtgTbl', f:parse_PtgTbl },\n\t/*::[*/0x03/*::]*/: { n:'PtgAdd', f:parseread1 },\n\t/*::[*/0x04/*::]*/: { n:'PtgSub', f:parseread1 },\n\t/*::[*/0x05/*::]*/: { n:'PtgMul', f:parseread1 },\n\t/*::[*/0x06/*::]*/: { n:'PtgDiv', f:parseread1 },\n\t/*::[*/0x07/*::]*/: { n:'PtgPower', f:parseread1 },\n\t/*::[*/0x08/*::]*/: { n:'PtgConcat', f:parseread1 },\n\t/*::[*/0x09/*::]*/: { n:'PtgLt', f:parseread1 },\n\t/*::[*/0x0A/*::]*/: { n:'PtgLe', f:parseread1 },\n\t/*::[*/0x0B/*::]*/: { n:'PtgEq', f:parseread1 },\n\t/*::[*/0x0C/*::]*/: { n:'PtgGe', f:parseread1 },\n\t/*::[*/0x0D/*::]*/: { n:'PtgGt', f:parseread1 },\n\t/*::[*/0x0E/*::]*/: { n:'PtgNe', f:parseread1 },\n\t/*::[*/0x0F/*::]*/: { n:'PtgIsect', f:parseread1 },\n\t/*::[*/0x10/*::]*/: { n:'PtgUnion', f:parseread1 },\n\t/*::[*/0x11/*::]*/: { n:'PtgRange', f:parseread1 },\n\t/*::[*/0x12/*::]*/: { n:'PtgUplus', f:parseread1 },\n\t/*::[*/0x13/*::]*/: { n:'PtgUminus', f:parseread1 },\n\t/*::[*/0x14/*::]*/: { n:'PtgPercent', f:parseread1 },\n\t/*::[*/0x15/*::]*/: { n:'PtgParen', f:parseread1 },\n\t/*::[*/0x16/*::]*/: { n:'PtgMissArg', f:parseread1 },\n\t/*::[*/0x17/*::]*/: { n:'PtgStr', f:parse_PtgStr },\n\t/*::[*/0x1A/*::]*/: { n:'PtgSheet', f:parse_PtgSheet },\n\t/*::[*/0x1B/*::]*/: { n:'PtgEndSheet', f:parse_PtgEndSheet },\n\t/*::[*/0x1C/*::]*/: { n:'PtgErr', f:parse_PtgErr },\n\t/*::[*/0x1D/*::]*/: { n:'PtgBool', f:parse_PtgBool },\n\t/*::[*/0x1E/*::]*/: { n:'PtgInt', f:parse_PtgInt },\n\t/*::[*/0x1F/*::]*/: { n:'PtgNum', f:parse_PtgNum },\n\t/*::[*/0x20/*::]*/: { n:'PtgArray', f:parse_PtgArray },\n\t/*::[*/0x21/*::]*/: { n:'PtgFunc', f:parse_PtgFunc },\n\t/*::[*/0x22/*::]*/: { n:'PtgFuncVar', f:parse_PtgFuncVar },\n\t/*::[*/0x23/*::]*/: { n:'PtgName', f:parse_PtgName },\n\t/*::[*/0x24/*::]*/: { n:'PtgRef', f:parse_PtgRef },\n\t/*::[*/0x25/*::]*/: { n:'PtgArea', f:parse_PtgArea },\n\t/*::[*/0x26/*::]*/: { n:'PtgMemArea', f:parse_PtgMemArea },\n\t/*::[*/0x27/*::]*/: { n:'PtgMemErr', f:parse_PtgMemErr },\n\t/*::[*/0x28/*::]*/: { n:'PtgMemNoMem', f:parse_PtgMemNoMem },\n\t/*::[*/0x29/*::]*/: { n:'PtgMemFunc', f:parse_PtgMemFunc },\n\t/*::[*/0x2A/*::]*/: { n:'PtgRefErr', f:parse_PtgRefErr },\n\t/*::[*/0x2B/*::]*/: { n:'PtgAreaErr', f:parse_PtgAreaErr },\n\t/*::[*/0x2C/*::]*/: { n:'PtgRefN', f:parse_PtgRefN },\n\t/*::[*/0x2D/*::]*/: { n:'PtgAreaN', f:parse_PtgAreaN },\n\t/*::[*/0x2E/*::]*/: { n:'PtgMemAreaN', f:parse_PtgMemAreaN },\n\t/*::[*/0x2F/*::]*/: { n:'PtgMemNoMemN', f:parse_PtgMemNoMemN },\n\t/*::[*/0x39/*::]*/: { n:'PtgNameX', f:parse_PtgNameX },\n\t/*::[*/0x3A/*::]*/: { n:'PtgRef3d', f:parse_PtgRef3d },\n\t/*::[*/0x3B/*::]*/: { n:'PtgArea3d', f:parse_PtgArea3d },\n\t/*::[*/0x3C/*::]*/: { n:'PtgRefErr3d', f:parse_PtgRefErr3d },\n\t/*::[*/0x3D/*::]*/: { n:'PtgAreaErr3d', f:parse_PtgAreaErr3d },\n\t/*::[*/0xFF/*::]*/: {}\n};\n/* These are duplicated in the PtgTypes table */\nvar PtgDupes = {\n\t/*::[*/0x40/*::]*/: 0x20, /*::[*/0x60/*::]*/: 0x20,\n\t/*::[*/0x41/*::]*/: 0x21, /*::[*/0x61/*::]*/: 0x21,\n\t/*::[*/0x42/*::]*/: 0x22, /*::[*/0x62/*::]*/: 0x22,\n\t/*::[*/0x43/*::]*/: 0x23, /*::[*/0x63/*::]*/: 0x23,\n\t/*::[*/0x44/*::]*/: 0x24, /*::[*/0x64/*::]*/: 0x24,\n\t/*::[*/0x45/*::]*/: 0x25, /*::[*/0x65/*::]*/: 0x25,\n\t/*::[*/0x46/*::]*/: 0x26, /*::[*/0x66/*::]*/: 0x26,\n\t/*::[*/0x47/*::]*/: 0x27, /*::[*/0x67/*::]*/: 0x27,\n\t/*::[*/0x48/*::]*/: 0x28, /*::[*/0x68/*::]*/: 0x28,\n\t/*::[*/0x49/*::]*/: 0x29, /*::[*/0x69/*::]*/: 0x29,\n\t/*::[*/0x4A/*::]*/: 0x2A, /*::[*/0x6A/*::]*/: 0x2A,\n\t/*::[*/0x4B/*::]*/: 0x2B, /*::[*/0x6B/*::]*/: 0x2B,\n\t/*::[*/0x4C/*::]*/: 0x2C, /*::[*/0x6C/*::]*/: 0x2C,\n\t/*::[*/0x4D/*::]*/: 0x2D, /*::[*/0x6D/*::]*/: 0x2D,\n\t/*::[*/0x4E/*::]*/: 0x2E, /*::[*/0x6E/*::]*/: 0x2E,\n\t/*::[*/0x4F/*::]*/: 0x2F, /*::[*/0x6F/*::]*/: 0x2F,\n\t/*::[*/0x58/*::]*/: 0x22, /*::[*/0x78/*::]*/: 0x22,\n\t/*::[*/0x59/*::]*/: 0x39, /*::[*/0x79/*::]*/: 0x39,\n\t/*::[*/0x5A/*::]*/: 0x3A, /*::[*/0x7A/*::]*/: 0x3A,\n\t/*::[*/0x5B/*::]*/: 0x3B, /*::[*/0x7B/*::]*/: 0x3B,\n\t/*::[*/0x5C/*::]*/: 0x3C, /*::[*/0x7C/*::]*/: 0x3C,\n\t/*::[*/0x5D/*::]*/: 0x3D, /*::[*/0x7D/*::]*/: 0x3D\n};\n(function(){for(var y in PtgDupes) PtgTypes[y] = PtgTypes[PtgDupes[y]];})();\n\nvar Ptg18 = {\n\t/*::[*/0x01/*::]*/: { n:'PtgElfLel', f:parse_PtgElfLel },\n\t/*::[*/0x02/*::]*/: { n:'PtgElfRw', f:parse_PtgElfRw },\n\t/*::[*/0x03/*::]*/: { n:'PtgElfCol', f:parse_PtgElfCol },\n\t/*::[*/0x06/*::]*/: { n:'PtgElfRwV', f:parse_PtgElfRwV },\n\t/*::[*/0x07/*::]*/: { n:'PtgElfColV', f:parse_PtgElfColV },\n\t/*::[*/0x0A/*::]*/: { n:'PtgElfRadical', f:parse_PtgElfRadical },\n\t/*::[*/0x0B/*::]*/: { n:'PtgElfRadicalS', f:parse_PtgElfRadicalS },\n\t/*::[*/0x0D/*::]*/: { n:'PtgElfColS', f:parse_PtgElfColS },\n\t/*::[*/0x0F/*::]*/: { n:'PtgElfColSV', f:parse_PtgElfColSV },\n\t/*::[*/0x10/*::]*/: { n:'PtgElfRadicalLel', f:parse_PtgElfRadicalLel },\n\t/*::[*/0x19/*::]*/: { n:'PtgList', f:parse_PtgList },\n\t/*::[*/0x1D/*::]*/: { n:'PtgSxName', f:parse_PtgSxName },\n\t/*::[*/0xFF/*::]*/: {}\n};\nvar Ptg19 = {\n\t/*::[*/0x00/*::]*/: { n:'PtgAttrNoop', f:parse_PtgAttrNoop },\n\t/*::[*/0x01/*::]*/: { n:'PtgAttrSemi', f:parse_PtgAttrSemi },\n\t/*::[*/0x02/*::]*/: { n:'PtgAttrIf', f:parse_PtgAttrIf },\n\t/*::[*/0x04/*::]*/: { n:'PtgAttrChoose', f:parse_PtgAttrChoose },\n\t/*::[*/0x08/*::]*/: { n:'PtgAttrGoto', f:parse_PtgAttrGoto },\n\t/*::[*/0x10/*::]*/: { n:'PtgAttrSum', f:parse_PtgAttrSum },\n\t/*::[*/0x20/*::]*/: { n:'PtgAttrBaxcel', f:parse_PtgAttrBaxcel },\n\t/*::[*/0x40/*::]*/: { n:'PtgAttrSpace', f:parse_PtgAttrSpace },\n\t/*::[*/0x41/*::]*/: { n:'PtgAttrSpaceSemi', f:parse_PtgAttrSpaceSemi },\n\t/*::[*/0x80/*::]*/: { n:'PtgAttrIfError', f:parse_PtgAttrIfError },\n\t/*::[*/0xFF/*::]*/: {}\n};\nPtg19[0x21] = Ptg19[0x20];\n\n/* [MS-XLS] 2.5.198.103 ; [MS-XLSB] 2.5.97.87 */\nfunction parse_RgbExtra(blob, length, rgce, opts) {\n\tif(opts.biff < 8) return parsenoop(blob, length);\n\tvar target = blob.l + length;\n\tvar o = [];\n\tfor(var i = 0; i !== rgce.length; ++i) {\n\t\tswitch(rgce[i][0]) {\n\t\t\tcase 'PtgArray': /* PtgArray -> PtgExtraArray */\n\t\t\t\trgce[i][1] = parse_PtgExtraArray(blob, 0, opts);\n\t\t\t\to.push(rgce[i][1]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemArea': /* PtgMemArea -> PtgExtraMem */\n\t\t\t\trgce[i][2] = parse_PtgExtraMem(blob, rgce[i][1], opts);\n\t\t\t\to.push(rgce[i][2]);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgExp': /* PtgExp -> PtgExtraCol */\n\t\t\t\tif(opts && opts.biff == 12) {\n\t\t\t\t\trgce[i][1][1] = blob.read_shift(4);\n\t\t\t\t\to.push(rgce[i][1]);\n\t\t\t\t} break;\n\t\t\tcase 'PtgList': /* TODO: PtgList -> PtgExtraList */\n\t\t\tcase 'PtgElfRadicalS': /* TODO: PtgElfRadicalS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColS': /* TODO: PtgElfColS -> PtgExtraElf */\n\t\t\tcase 'PtgElfColSV': /* TODO: PtgElfColSV -> PtgExtraElf */\n\t\t\t\tthrow \"Unsupported \" + rgce[i][0];\n\t\t\tdefault: break;\n\t\t}\n\t}\n\tlength = target - blob.l;\n\t/* note: this is technically an error but Excel disregards */\n\t//if(target !== blob.l && blob.l !== target - length) throw new Error(target + \" != \" + blob.l);\n\tif(length !== 0) o.push(parsenoop(blob, length));\n\treturn o;\n}\n\n/* [MS-XLS] 2.5.198.104 ; [MS-XLSB] 2.5.97.88 */\nfunction parse_Rgce(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar R, id, ptgs = [];\n\twhile(target != blob.l) {\n\t\tlength = target - blob.l;\n\t\tid = blob[blob.l];\n\t\tR = PtgTypes[id];\n\t\tif(id === 0x18 || id === 0x19) R = (id === 0x18 ? Ptg18 : Ptg19)[blob[blob.l + 1]];\n\t\tif(!R || !R.f) { /*ptgs.push*/(parsenoop(blob, length)); }\n\t\telse { ptgs.push([R.n, R.f(blob, length, opts)]); }\n\t}\n\treturn ptgs;\n}\n\nfunction stringify_array(f/*:Array>*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tfor(var i = 0; i < f.length; ++i) {\n\t\tvar x = f[i], r/*:Array*/ = [];\n\t\tfor(var j = 0; j < x.length; ++j) {\n\t\t\tvar y = x[j];\n\t\t\tif(y) switch(y[0]) {\n\t\t\t\t// TODO: handle embedded quotes\n\t\t\t\tcase 0x02:\n\t\t\t\t\t/*:: if(typeof y[1] != 'string') throw \"unreachable\"; */\n\t\t\t\t\tr.push('\"' + y[1].replace(/\"/g,'\"\"') + '\"'); break;\n\t\t\t\tdefault: r.push(y[1]);\n\t\t\t} else r.push(\"\");\n\t\t}\n\t\to.push(r.join(\",\"));\n\t}\n\treturn o.join(\";\");\n}\n\n/* [MS-XLS] 2.2.2 ; [MS-XLSB] 2.2.2 TODO */\nvar PtgBinOp = {\n\tPtgAdd: \"+\",\n\tPtgConcat: \"&\",\n\tPtgDiv: \"/\",\n\tPtgEq: \"=\",\n\tPtgGe: \">=\",\n\tPtgGt: \">\",\n\tPtgLe: \"<=\",\n\tPtgLt: \"<\",\n\tPtgMul: \"*\",\n\tPtgNe: \"<>\",\n\tPtgPower: \"^\",\n\tPtgSub: \"-\"\n};\n\n// List of invalid characters needs to be tested further\nvar quoteCharacters /*:RegExp */ = new RegExp(/[^\\w\\u4E00-\\u9FFF\\u3040-\\u30FF]/);\nfunction formula_quote_sheet_name(sname/*:string*/, opts)/*:string*/ {\n\tif(!sname && !(opts && opts.biff <= 5 && opts.biff >= 2)) throw new Error(\"empty sheet name\");\n\tif (quoteCharacters.test(sname)) return \"'\" + sname + \"'\";\n\treturn sname;\n}\nfunction get_ixti_raw(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tif(!supbooks) return \"SH33TJSERR0\";\n\tif(opts.biff > 8 && (!supbooks.XTI || !supbooks.XTI[ixti])) return supbooks.SheetNames[ixti];\n\tif(!supbooks.XTI) return \"SH33TJSERR6\";\n\tvar XTI = supbooks.XTI[ixti];\n\tif(opts.biff < 8) {\n\t\tif(ixti > 10000) ixti-= 65536;\n\t\tif(ixti < 0) ixti = -ixti;\n\t\treturn ixti == 0 ? \"\" : supbooks.XTI[ixti - 1];\n\t}\n\tif(!XTI) return \"SH33TJSERR1\";\n\tvar o = \"\";\n\tif(opts.biff > 8) switch(supbooks[XTI[0]][0]) {\n\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\to = XTI[1] == -1 ? \"#REF\" : supbooks.SheetNames[XTI[1]];\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tif(opts.SID != null) return supbooks.SheetNames[opts.SID];\n\t\t\treturn \"SH33TJSSAME\" + supbooks[XTI[0]][0];\n\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\t/* falls through */\n\t\tdefault: return \"SH33TJSSRC\" + supbooks[XTI[0]][0];\n\t}\n\tswitch(supbooks[XTI[0]][0][0]) {\n\t\tcase 0x0401:\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks.SheetNames[XTI[1]] || \"SH33TJSERR3\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks.SheetNames[XTI[2]];\n\t\tcase 0x3A01: return supbooks[XTI[0]].slice(1).map(function(name) { return name.Name; }).join(\";;\"); //return \"SH33TJSERR8\";\n\t\tdefault:\n\t\t\tif(!supbooks[XTI[0]][0][3]) return \"SH33TJSERR2\";\n\t\t\to = XTI[1] == -1 ? \"#REF\" : (supbooks[XTI[0]][0][3][XTI[1]] || \"SH33TJSERR4\");\n\t\t\treturn XTI[1] == XTI[2] ? o : o + \":\" + supbooks[XTI[0]][0][3][XTI[2]];\n\t}\n}\nfunction get_ixti(supbooks, ixti/*:number*/, opts)/*:string*/ {\n\tvar ixtiraw = get_ixti_raw(supbooks, ixti, opts);\n\treturn ixtiraw == \"#REF\" ? ixtiraw : formula_quote_sheet_name(ixtiraw, opts);\n}\nfunction stringify_formula(formula/*Array*/, range, cell/*:any*/, supbooks, opts)/*:string*/ {\n\tvar biff = (opts && opts.biff) || 8;\n\tvar _range = /*range != null ? range :*/ {s:{c:0, r:0},e:{c:0, r:0}};\n\tvar stack/*:Array*/ = [], e1, e2, /*::type,*/ c/*:CellAddress*/, ixti=0, nameidx=0, r, sname=\"\";\n\tif(!formula[0] || !formula[0][0]) return \"\";\n\tvar last_sp = -1, sp = \"\";\n\tfor(var ff = 0, fflen = formula[0].length; ff < fflen; ++ff) {\n\t\tvar f = formula[0][ff];\n\t\tswitch(f[0]) {\n\t\t\tcase 'PtgUminus': /* [MS-XLS] 2.5.198.93 */\n\t\t\t\tstack.push(\"-\" + stack.pop()); break;\n\t\t\tcase 'PtgUplus': /* [MS-XLS] 2.5.198.95 */\n\t\t\t\tstack.push(\"+\" + stack.pop()); break;\n\t\t\tcase 'PtgPercent': /* [MS-XLS] 2.5.198.81 */\n\t\t\t\tstack.push(stack.pop() + \"%\"); break;\n\n\t\t\tcase 'PtgAdd': /* [MS-XLS] 2.5.198.26 */\n\t\t\tcase 'PtgConcat': /* [MS-XLS] 2.5.198.43 */\n\t\t\tcase 'PtgDiv': /* [MS-XLS] 2.5.198.45 */\n\t\t\tcase 'PtgEq': /* [MS-XLS] 2.5.198.56 */\n\t\t\tcase 'PtgGe': /* [MS-XLS] 2.5.198.64 */\n\t\t\tcase 'PtgGt': /* [MS-XLS] 2.5.198.65 */\n\t\t\tcase 'PtgLe': /* [MS-XLS] 2.5.198.68 */\n\t\t\tcase 'PtgLt': /* [MS-XLS] 2.5.198.69 */\n\t\t\tcase 'PtgMul': /* [MS-XLS] 2.5.198.75 */\n\t\t\tcase 'PtgNe': /* [MS-XLS] 2.5.198.78 */\n\t\t\tcase 'PtgPower': /* [MS-XLS] 2.5.198.82 */\n\t\t\tcase 'PtgSub': /* [MS-XLS] 2.5.198.90 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\" \", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tsp = fill(\"\\r\", formula[0][last_sp][1][1]); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tsp = \"\";\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\te2 = e2 + sp;\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(e2+PtgBinOp[f[0]]+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgIsect': /* [MS-XLS] 2.5.198.67 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\" \"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgUnion': /* [MS-XLS] 2.5.198.94 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\",\"+e1);\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRange': /* [MS-XLS] 2.5.198.83 */\n\t\t\t\te1 = stack.pop(); e2 = stack.pop();\n\t\t\t\tstack.push(e2+\":\"+e1);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrChoose': /* [MS-XLS] 2.5.198.34 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrGoto': /* [MS-XLS] 2.5.198.35 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIf': /* [MS-XLS] 2.5.198.36 */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrIfError': /* [MS-XLSB] 2.5.97.28 */\n\t\t\t\tbreak;\n\n\n\t\t\tcase 'PtgRef': /* [MS-XLS] 2.5.198.84 */\n\t\t\t\t/*::type = f[1][0]; */c = shift_cell_xls((f[1][1]/*:any*/), _range, opts);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRefN': /* [MS-XLS] 2.5.198.88 */\n\t\t\t\t/*::type = f[1][0]; */c = cell ? shift_cell_xls((f[1][1]/*:any*/), cell, opts) : (f[1][1]/*:any*/);\n\t\t\t\tstack.push(encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgRef3d': /* [MS-XLS] 2.5.198.85 */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; c = shift_cell_xls((f[1][2]/*:any*/), _range, opts);\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tvar w = sname; /* IE9 fails on defined names */ // eslint-disable-line no-unused-vars\n\t\t\t\tstack.push(sname + \"!\" + encode_cell_xls(c, biff));\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgFunc': /* [MS-XLS] 2.5.198.62 */\n\t\t\tcase 'PtgFuncVar': /* [MS-XLS] 2.5.198.63 */\n\t\t\t\t/* f[1] = [argc, func, type] */\n\t\t\t\tvar argc/*:number*/ = (f[1][0]/*:any*/), func/*:string*/ = (f[1][1]/*:any*/);\n\t\t\t\tif(!argc) argc = 0;\n\t\t\t\targc &= 0x7F;\n\t\t\t\tvar args = argc == 0 ? [] : stack.slice(-argc);\n\t\t\t\tstack.length -= argc;\n\t\t\t\tif(func === 'User') func = args.shift();\n\t\t\t\tstack.push(func + \"(\" + args.join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgBool': /* [MS-XLS] 2.5.198.42 */\n\t\t\t\tstack.push(f[1] ? \"TRUE\" : \"FALSE\"); break;\n\t\t\tcase 'PtgInt': /* [MS-XLS] 2.5.198.66 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgNum': /* [MS-XLS] 2.5.198.79 TODO: precision? */\n\t\t\t\tstack.push(String(f[1])); break;\n\t\t\tcase 'PtgStr': /* [MS-XLS] 2.5.198.89 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push('\"' + f[1].replace(/\"/g, '\"\"') + '\"'); break;\n\t\t\tcase 'PtgErr': /* [MS-XLS] 2.5.198.57 */\n\t\t\t\tstack.push(/*::String(*/f[1]/*::)*/); break;\n\t\t\tcase 'PtgAreaN': /* [MS-XLS] 2.5.198.31 TODO */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], cell ? {s:cell} : _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea': /* [MS-XLS] 2.5.198.27 TODO: fixed points */\n\t\t\t\t/*::type = f[1][0]; */r = shift_range_xls(f[1][1], _range, opts);\n\t\t\t\tstack.push(encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgArea3d': /* [MS-XLS] 2.5.198.28 TODO */\n\t\t\t\t/*::type = f[1][0]; */ixti = /*::Number(*/f[1][1]/*::)*/; r = f[1][2];\n\t\t\t\tsname = get_ixti(supbooks, ixti, opts);\n\t\t\t\tstack.push(sname + \"!\" + encode_range_xls((r/*:any*/), opts));\n\t\t\t\tbreak;\n\t\t\tcase 'PtgAttrSum': /* [MS-XLS] 2.5.198.41 */\n\t\t\t\tstack.push(\"SUM(\" + stack.pop() + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrBaxcel': /* [MS-XLS] 2.5.198.33 */\n\t\t\tcase 'PtgAttrSemi': /* [MS-XLS] 2.5.198.37 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgName': /* [MS-XLS] 2.5.198.76 ; [MS-XLSB] 2.5.97.60 TODO: revisions */\n\t\t\t\t/* f[1] = type, 0, nameindex */\n\t\t\t\tnameidx = (f[1][2]/*:any*/);\n\t\t\t\tvar lbl = (supbooks.names||[])[nameidx-1] || (supbooks[0]||[])[nameidx];\n\t\t\t\tvar name = lbl ? lbl.Name : \"SH33TJSNAME\" + String(nameidx);\n\t\t\t\tif(name in XLSXFutureFunctions) name = XLSXFutureFunctions[name];\n\t\t\t\tstack.push(name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgNameX': /* [MS-XLS] 2.5.198.77 ; [MS-XLSB] 2.5.97.61 TODO: revisions */\n\t\t\t\t/* f[1] = type, ixti, nameindex */\n\t\t\t\tvar bookidx/*:number*/ = (f[1][1]/*:any*/); nameidx = (f[1][2]/*:any*/); var externbook;\n\t\t\t\t/* TODO: Properly handle missing values -- this should be using get_ixti_raw primarily */\n\t\t\t\tif(opts.biff <= 5) {\n\t\t\t\t\tif(bookidx < 0) bookidx = -bookidx;\n\t\t\t\t\tif(supbooks[bookidx]) externbook = supbooks[bookidx][nameidx];\n\t\t\t\t} else {\n\t\t\t\t\tvar o = \"\";\n\t\t\t\t\tif(((supbooks[bookidx]||[])[0]||[])[0] == 0x3A01){/* empty */}\n\t\t\t\t\telse if(((supbooks[bookidx]||[])[0]||[])[0] == 0x0401){\n\t\t\t\t\t\tif(supbooks[bookidx][nameidx] && supbooks[bookidx][nameidx].itab > 0) {\n\t\t\t\t\t\t\to = supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1] + \"!\";\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse o = supbooks.SheetNames[nameidx-1]+ \"!\";\n\t\t\t\t\tif(supbooks[bookidx] && supbooks[bookidx][nameidx]) o += supbooks[bookidx][nameidx].Name;\n\t\t\t\t\telse if(supbooks[0] && supbooks[0][nameidx]) o += supbooks[0][nameidx].Name;\n\t\t\t\t\telse {\n\t\t\t\t\t\tvar ixtidata = (get_ixti_raw(supbooks, bookidx, opts)||\"\").split(\";;\");\n\t\t\t\t\t\tif(ixtidata[nameidx - 1]) o = ixtidata[nameidx - 1]; // TODO: confirm this is correct\n\t\t\t\t\t\telse o += \"SH33TJSERRX\";\n\t\t\t\t\t}\n\t\t\t\t\tstack.push(o);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif(!externbook) externbook = {Name: \"SH33TJSERRY\"};\n\t\t\t\tstack.push(externbook.Name);\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgParen': /* [MS-XLS] 2.5.198.80 */\n\t\t\t\tvar lp = '(', rp = ')';\n\t\t\t\tif(last_sp >= 0) {\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\tswitch(formula[0][last_sp][1][0]) {\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 2: lp = fill(\" \", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 3: lp = fill(\"\\r\", formula[0][last_sp][1][1]) + lp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 4: rp = fill(\" \", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\tcase 5: rp = fill(\"\\r\", formula[0][last_sp][1][1]) + rp; break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + formula[0][last_sp][1][0]);\n\t\t\t\t\t}\n\t\t\t\t\tlast_sp = -1;\n\t\t\t\t}\n\t\t\t\tstack.push(lp + stack.pop() + rp); break;\n\n\t\t\tcase 'PtgRefErr': /* [MS-XLS] 2.5.198.86 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgRefErr3d': /* [MS-XLS] 2.5.198.87 */\n\t\t\t\tstack.push('#REF!'); break;\n\n\t\t\tcase 'PtgExp': /* [MS-XLS] 2.5.198.58 TODO */\n\t\t\t\tc = {c:(f[1][1]/*:any*/),r:(f[1][0]/*:any*/)};\n\t\t\t\tvar q = ({c: cell.c, r:cell.r}/*:any*/);\n\t\t\t\tif(supbooks.sharedf[encode_cell(c)]) {\n\t\t\t\t\tvar parsedf = (supbooks.sharedf[encode_cell(c)]);\n\t\t\t\t\tstack.push(stringify_formula(parsedf, _range, q, supbooks, opts));\n\t\t\t\t} else {\n\t\t\t\t\tvar fnd = false;\n\t\t\t\t\tfor(e1=0;e1!=supbooks.arrayf.length; ++e1) {\n\t\t\t\t\t\t/* TODO: should be something like range_has */\n\t\t\t\t\t\te2 = supbooks.arrayf[e1];\n\t\t\t\t\t\tif(c.c < e2[0].s.c || c.c > e2[0].e.c) continue;\n\t\t\t\t\t\tif(c.r < e2[0].s.r || c.r > e2[0].e.r) continue;\n\t\t\t\t\t\tstack.push(stringify_formula(e2[1], _range, q, supbooks, opts));\n\t\t\t\t\t\tfnd = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\tif(!fnd) stack.push(/*::String(*/f[1]/*::)*/);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgArray': /* [MS-XLS] 2.5.198.32 TODO */\n\t\t\t\tstack.push(\"{\" + stringify_array(/*::(*/f[1]/*:: :any)*/) + \"}\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemArea': /* [MS-XLS] 2.5.198.70 TODO: confirm this is a non-display */\n\t\t\t\t//stack.push(\"(\" + f[2].map(encode_range).join(\",\") + \")\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAttrSpace': /* [MS-XLS] 2.5.198.38 */\n\t\t\tcase 'PtgAttrSpaceSemi': /* [MS-XLS] 2.5.198.39 */\n\t\t\t\tlast_sp = ff;\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgTbl': /* [MS-XLS] 2.5.198.92 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemErr': /* [MS-XLS] 2.5.198.71 */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMissArg': /* [MS-XLS] 2.5.198.74 */\n\t\t\t\tstack.push(\"\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgAreaErr': /* [MS-XLS] 2.5.198.29 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgAreaErr3d': /* [MS-XLS] 2.5.198.30 */\n\t\t\t\tstack.push(\"#REF!\"); break;\n\n\t\t\tcase 'PtgList': /* [MS-XLSB] 2.5.97.52 */\n\t\t\t\t// $FlowIgnore\n\t\t\t\tstack.push(\"Table\" + f[1].idx + \"[#\" + f[1].rt + \"]\");\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemAreaN':\n\t\t\tcase 'PtgMemNoMemN':\n\t\t\tcase 'PtgAttrNoop':\n\t\t\tcase 'PtgSheet':\n\t\t\tcase 'PtgEndSheet':\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgMemFunc': /* [MS-XLS] 2.5.198.72 TODO */\n\t\t\t\tbreak;\n\t\t\tcase 'PtgMemNoMem': /* [MS-XLS] 2.5.198.73 TODO */\n\t\t\t\tbreak;\n\n\t\t\tcase 'PtgElfCol': /* [MS-XLS] 2.5.198.46 */\n\t\t\tcase 'PtgElfColS': /* [MS-XLS] 2.5.198.47 */\n\t\t\tcase 'PtgElfColSV': /* [MS-XLS] 2.5.198.48 */\n\t\t\tcase 'PtgElfColV': /* [MS-XLS] 2.5.198.49 */\n\t\t\tcase 'PtgElfLel': /* [MS-XLS] 2.5.198.50 */\n\t\t\tcase 'PtgElfRadical': /* [MS-XLS] 2.5.198.51 */\n\t\t\tcase 'PtgElfRadicalLel': /* [MS-XLS] 2.5.198.52 */\n\t\t\tcase 'PtgElfRadicalS': /* [MS-XLS] 2.5.198.53 */\n\t\t\tcase 'PtgElfRw': /* [MS-XLS] 2.5.198.54 */\n\t\t\tcase 'PtgElfRwV': /* [MS-XLS] 2.5.198.55 */\n\t\t\t\tthrow new Error(\"Unsupported ELFs\");\n\n\t\t\tcase 'PtgSxName': /* [MS-XLS] 2.5.198.91 TODO -- find a test case */\n\t\t\t\tthrow new Error('Unrecognized Formula Token: ' + String(f));\n\t\t\tdefault: throw new Error('Unrecognized Formula Token: ' + String(f));\n\t\t}\n\t\tvar PtgNonDisp = ['PtgAttrSpace', 'PtgAttrSpaceSemi', 'PtgAttrGoto'];\n\t\tif(opts.biff != 3) if(last_sp >= 0 && PtgNonDisp.indexOf(formula[0][ff][0]) == -1) {\n\t\t\tf = formula[0][last_sp];\n\t\t\tvar _left = true;\n\t\t\tswitch(f[1][0]) {\n\t\t\t\t/* note: some bad XLSB files omit the PtgParen */\n\t\t\t\tcase 4: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 0:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\" \", f[1][1]); break;\n\t\t\t\tcase 5: _left = false;\n\t\t\t\t/* falls through */\n\t\t\t\tcase 1:\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tsp = fill(\"\\r\", f[1][1]); break;\n\t\t\t\tdefault:\n\t\t\t\t\tsp = \"\";\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(opts.WTF) throw new Error(\"Unexpected PtgAttrSpaceType \" + f[1][0]);\n\t\t\t}\n\t\t\tstack.push((_left ? sp : \"\") + stack.pop() + (_left ? \"\" : sp));\n\t\t\tlast_sp = -1;\n\t\t}\n\t}\n\tif(stack.length > 1 && opts.WTF) throw new Error(\"bad formula stack\");\n\treturn stack[0];\n}\n\n/* [MS-XLS] 2.5.198.1 TODO */\nfunction parse_ArrayParsedFormula(blob, length, opts/*::, ref*/) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.3 TODO */\nfunction parse_XLSCellParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length, len = opts.biff == 2 ? 1 : 2;\n\tvar rgcb, cce = blob.read_shift(len); // length of rgce\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(length !== cce + len) rgcb = parse_RgbExtra(blob, length - cce - len, rgce, opts);\n\tblob.l = target;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.21 */\nfunction parse_NameParsedFormula(blob, length, opts, cce) {\n\tvar target = blob.l + length;\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tvar rgcb;\n\tif(target !== blob.l) rgcb = parse_RgbExtra(blob, target - blob.l, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.198.118 TODO */\nfunction parse_SharedParsedFormula(blob, length, opts) {\n\tvar target = blob.l + length;\n\tvar rgcb, cce = blob.read_shift(2); // length of rgce\n\tvar rgce = parse_Rgce(blob, cce, opts);\n\tif(cce == 0xFFFF) return [[],parsenoop(blob, length-2)];\n\tif(length !== cce + 2) rgcb = parse_RgbExtra(blob, target - cce - 2, rgce, opts);\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLS] 2.5.133 TODO: how to emit empty strings? */\nfunction parse_FormulaValue(blob/*::, length*/) {\n\tvar b;\n\tif(__readUInt16LE(blob,blob.l + 6) !== 0xFFFF) return [parse_Xnum(blob),'n'];\n\tswitch(blob[blob.l]) {\n\t\tcase 0x00: blob.l += 8; return [\"String\", 's'];\n\t\tcase 0x01: b = blob[blob.l+2] === 0x1; blob.l += 8; return [b,'b'];\n\t\tcase 0x02: b = blob[blob.l+2]; blob.l += 8; return [b,'e'];\n\t\tcase 0x03: blob.l += 8; return [\"\",'s'];\n\t}\n\treturn [];\n}\nfunction write_FormulaValue(value) {\n\tif(value == null) {\n\t\t// Blank String Value\n\t\tvar o = new_buf(8);\n\t\to.write_shift(1, 0x03);\n\t\to.write_shift(1, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0);\n\t\to.write_shift(2, 0xFFFF);\n\t\treturn o;\n\t} else if(typeof value == \"number\") return write_Xnum(value);\n\treturn write_Xnum(0);\n}\n\n/* [MS-XLS] 2.4.127 TODO */\nfunction parse_Formula(blob, length, opts) {\n\tvar end = blob.l + length;\n\tvar cell = parse_XLSCell(blob, 6);\n\tif(opts.biff == 2) ++blob.l;\n\tvar val = parse_FormulaValue(blob,8);\n\tvar flags = blob.read_shift(1);\n\tif(opts.biff != 2) {\n\t\tblob.read_shift(1);\n\t\tif(opts.biff >= 5) {\n\t\t\t/*var chn = */blob.read_shift(4);\n\t\t}\n\t}\n\tvar cbf = parse_XLSCellParsedFormula(blob, end - blob.l, opts);\n\treturn {cell:cell, val:val[0], formula:cbf, shared: (flags >> 3) & 1, tt:val[1]};\n}\nfunction write_Formula(cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, os/*:number*/) {\n\t// Cell\n\tvar o1 = write_XLSCell(R, C, os);\n\n\t// FormulaValue\n\tvar o2 = write_FormulaValue(cell.v);\n\n\t// flags + cache\n\tvar o3 = new_buf(6);\n\tvar flags = 0x01 | 0x20;\n\to3.write_shift(2, flags);\n\to3.write_shift(4, 0);\n\n\t// CellParsedFormula\n\tvar bf = new_buf(cell.bf.length);\n\tfor(var i = 0; i < cell.bf.length; ++i) bf[i] = cell.bf[i];\n\n\tvar out = bconcat([o1, o2, o3, bf]);\n\treturn out;\n}\n\n\n/* XLSB Parsed Formula records have the same shape */\nfunction parse_XLSBParsedFormula(data, length, opts) {\n\tvar cce = data.read_shift(4);\n\tvar rgce = parse_Rgce(data, cce, opts);\n\tvar cb = data.read_shift(4);\n\tvar rgcb = cb > 0 ? parse_RgbExtra(data, cb, rgce, opts) : null;\n\treturn [rgce, rgcb];\n}\n\n/* [MS-XLSB] 2.5.97.1 ArrayParsedFormula */\nvar parse_XLSBArrayParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.4 CellParsedFormula */\nvar parse_XLSBCellParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.8 DVParsedFormula */\n//var parse_XLSBDVParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.9 FRTParsedFormula */\n//var parse_XLSBFRTParsedFormula = parse_XLSBParsedFormula2;\n/* [MS-XLSB] 2.5.97.12 NameParsedFormula */\nvar parse_XLSBNameParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLSB] 2.5.97.98 SharedParsedFormula */\nvar parse_XLSBSharedParsedFormula = parse_XLSBParsedFormula;\n/* [MS-XLS] 2.5.198.4 */\nvar Cetab = {\n\t/*::[*/0x0000/*::]*/: 'BEEP',\n\t/*::[*/0x0001/*::]*/: 'OPEN',\n\t/*::[*/0x0002/*::]*/: 'OPEN.LINKS',\n\t/*::[*/0x0003/*::]*/: 'CLOSE.ALL',\n\t/*::[*/0x0004/*::]*/: 'SAVE',\n\t/*::[*/0x0005/*::]*/: 'SAVE.AS',\n\t/*::[*/0x0006/*::]*/: 'FILE.DELETE',\n\t/*::[*/0x0007/*::]*/: 'PAGE.SETUP',\n\t/*::[*/0x0008/*::]*/: 'PRINT',\n\t/*::[*/0x0009/*::]*/: 'PRINTER.SETUP',\n\t/*::[*/0x000A/*::]*/: 'QUIT',\n\t/*::[*/0x000B/*::]*/: 'NEW.WINDOW',\n\t/*::[*/0x000C/*::]*/: 'ARRANGE.ALL',\n\t/*::[*/0x000D/*::]*/: 'WINDOW.SIZE',\n\t/*::[*/0x000E/*::]*/: 'WINDOW.MOVE',\n\t/*::[*/0x000F/*::]*/: 'FULL',\n\t/*::[*/0x0010/*::]*/: 'CLOSE',\n\t/*::[*/0x0011/*::]*/: 'RUN',\n\t/*::[*/0x0016/*::]*/: 'SET.PRINT.AREA',\n\t/*::[*/0x0017/*::]*/: 'SET.PRINT.TITLES',\n\t/*::[*/0x0018/*::]*/: 'SET.PAGE.BREAK',\n\t/*::[*/0x0019/*::]*/: 'REMOVE.PAGE.BREAK',\n\t/*::[*/0x001A/*::]*/: 'FONT',\n\t/*::[*/0x001B/*::]*/: 'DISPLAY',\n\t/*::[*/0x001C/*::]*/: 'PROTECT.DOCUMENT',\n\t/*::[*/0x001D/*::]*/: 'PRECISION',\n\t/*::[*/0x001E/*::]*/: 'A1.R1C1',\n\t/*::[*/0x001F/*::]*/: 'CALCULATE.NOW',\n\t/*::[*/0x0020/*::]*/: 'CALCULATION',\n\t/*::[*/0x0022/*::]*/: 'DATA.FIND',\n\t/*::[*/0x0023/*::]*/: 'EXTRACT',\n\t/*::[*/0x0024/*::]*/: 'DATA.DELETE',\n\t/*::[*/0x0025/*::]*/: 'SET.DATABASE',\n\t/*::[*/0x0026/*::]*/: 'SET.CRITERIA',\n\t/*::[*/0x0027/*::]*/: 'SORT',\n\t/*::[*/0x0028/*::]*/: 'DATA.SERIES',\n\t/*::[*/0x0029/*::]*/: 'TABLE',\n\t/*::[*/0x002A/*::]*/: 'FORMAT.NUMBER',\n\t/*::[*/0x002B/*::]*/: 'ALIGNMENT',\n\t/*::[*/0x002C/*::]*/: 'STYLE',\n\t/*::[*/0x002D/*::]*/: 'BORDER',\n\t/*::[*/0x002E/*::]*/: 'CELL.PROTECTION',\n\t/*::[*/0x002F/*::]*/: 'COLUMN.WIDTH',\n\t/*::[*/0x0030/*::]*/: 'UNDO',\n\t/*::[*/0x0031/*::]*/: 'CUT',\n\t/*::[*/0x0032/*::]*/: 'COPY',\n\t/*::[*/0x0033/*::]*/: 'PASTE',\n\t/*::[*/0x0034/*::]*/: 'CLEAR',\n\t/*::[*/0x0035/*::]*/: 'PASTE.SPECIAL',\n\t/*::[*/0x0036/*::]*/: 'EDIT.DELETE',\n\t/*::[*/0x0037/*::]*/: 'INSERT',\n\t/*::[*/0x0038/*::]*/: 'FILL.RIGHT',\n\t/*::[*/0x0039/*::]*/: 'FILL.DOWN',\n\t/*::[*/0x003D/*::]*/: 'DEFINE.NAME',\n\t/*::[*/0x003E/*::]*/: 'CREATE.NAMES',\n\t/*::[*/0x003F/*::]*/: 'FORMULA.GOTO',\n\t/*::[*/0x0040/*::]*/: 'FORMULA.FIND',\n\t/*::[*/0x0041/*::]*/: 'SELECT.LAST.CELL',\n\t/*::[*/0x0042/*::]*/: 'SHOW.ACTIVE.CELL',\n\t/*::[*/0x0043/*::]*/: 'GALLERY.AREA',\n\t/*::[*/0x0044/*::]*/: 'GALLERY.BAR',\n\t/*::[*/0x0045/*::]*/: 'GALLERY.COLUMN',\n\t/*::[*/0x0046/*::]*/: 'GALLERY.LINE',\n\t/*::[*/0x0047/*::]*/: 'GALLERY.PIE',\n\t/*::[*/0x0048/*::]*/: 'GALLERY.SCATTER',\n\t/*::[*/0x0049/*::]*/: 'COMBINATION',\n\t/*::[*/0x004A/*::]*/: 'PREFERRED',\n\t/*::[*/0x004B/*::]*/: 'ADD.OVERLAY',\n\t/*::[*/0x004C/*::]*/: 'GRIDLINES',\n\t/*::[*/0x004D/*::]*/: 'SET.PREFERRED',\n\t/*::[*/0x004E/*::]*/: 'AXES',\n\t/*::[*/0x004F/*::]*/: 'LEGEND',\n\t/*::[*/0x0050/*::]*/: 'ATTACH.TEXT',\n\t/*::[*/0x0051/*::]*/: 'ADD.ARROW',\n\t/*::[*/0x0052/*::]*/: 'SELECT.CHART',\n\t/*::[*/0x0053/*::]*/: 'SELECT.PLOT.AREA',\n\t/*::[*/0x0054/*::]*/: 'PATTERNS',\n\t/*::[*/0x0055/*::]*/: 'MAIN.CHART',\n\t/*::[*/0x0056/*::]*/: 'OVERLAY',\n\t/*::[*/0x0057/*::]*/: 'SCALE',\n\t/*::[*/0x0058/*::]*/: 'FORMAT.LEGEND',\n\t/*::[*/0x0059/*::]*/: 'FORMAT.TEXT',\n\t/*::[*/0x005A/*::]*/: 'EDIT.REPEAT',\n\t/*::[*/0x005B/*::]*/: 'PARSE',\n\t/*::[*/0x005C/*::]*/: 'JUSTIFY',\n\t/*::[*/0x005D/*::]*/: 'HIDE',\n\t/*::[*/0x005E/*::]*/: 'UNHIDE',\n\t/*::[*/0x005F/*::]*/: 'WORKSPACE',\n\t/*::[*/0x0060/*::]*/: 'FORMULA',\n\t/*::[*/0x0061/*::]*/: 'FORMULA.FILL',\n\t/*::[*/0x0062/*::]*/: 'FORMULA.ARRAY',\n\t/*::[*/0x0063/*::]*/: 'DATA.FIND.NEXT',\n\t/*::[*/0x0064/*::]*/: 'DATA.FIND.PREV',\n\t/*::[*/0x0065/*::]*/: 'FORMULA.FIND.NEXT',\n\t/*::[*/0x0066/*::]*/: 'FORMULA.FIND.PREV',\n\t/*::[*/0x0067/*::]*/: 'ACTIVATE',\n\t/*::[*/0x0068/*::]*/: 'ACTIVATE.NEXT',\n\t/*::[*/0x0069/*::]*/: 'ACTIVATE.PREV',\n\t/*::[*/0x006A/*::]*/: 'UNLOCKED.NEXT',\n\t/*::[*/0x006B/*::]*/: 'UNLOCKED.PREV',\n\t/*::[*/0x006C/*::]*/: 'COPY.PICTURE',\n\t/*::[*/0x006D/*::]*/: 'SELECT',\n\t/*::[*/0x006E/*::]*/: 'DELETE.NAME',\n\t/*::[*/0x006F/*::]*/: 'DELETE.FORMAT',\n\t/*::[*/0x0070/*::]*/: 'VLINE',\n\t/*::[*/0x0071/*::]*/: 'HLINE',\n\t/*::[*/0x0072/*::]*/: 'VPAGE',\n\t/*::[*/0x0073/*::]*/: 'HPAGE',\n\t/*::[*/0x0074/*::]*/: 'VSCROLL',\n\t/*::[*/0x0075/*::]*/: 'HSCROLL',\n\t/*::[*/0x0076/*::]*/: 'ALERT',\n\t/*::[*/0x0077/*::]*/: 'NEW',\n\t/*::[*/0x0078/*::]*/: 'CANCEL.COPY',\n\t/*::[*/0x0079/*::]*/: 'SHOW.CLIPBOARD',\n\t/*::[*/0x007A/*::]*/: 'MESSAGE',\n\t/*::[*/0x007C/*::]*/: 'PASTE.LINK',\n\t/*::[*/0x007D/*::]*/: 'APP.ACTIVATE',\n\t/*::[*/0x007E/*::]*/: 'DELETE.ARROW',\n\t/*::[*/0x007F/*::]*/: 'ROW.HEIGHT',\n\t/*::[*/0x0080/*::]*/: 'FORMAT.MOVE',\n\t/*::[*/0x0081/*::]*/: 'FORMAT.SIZE',\n\t/*::[*/0x0082/*::]*/: 'FORMULA.REPLACE',\n\t/*::[*/0x0083/*::]*/: 'SEND.KEYS',\n\t/*::[*/0x0084/*::]*/: 'SELECT.SPECIAL',\n\t/*::[*/0x0085/*::]*/: 'APPLY.NAMES',\n\t/*::[*/0x0086/*::]*/: 'REPLACE.FONT',\n\t/*::[*/0x0087/*::]*/: 'FREEZE.PANES',\n\t/*::[*/0x0088/*::]*/: 'SHOW.INFO',\n\t/*::[*/0x0089/*::]*/: 'SPLIT',\n\t/*::[*/0x008A/*::]*/: 'ON.WINDOW',\n\t/*::[*/0x008B/*::]*/: 'ON.DATA',\n\t/*::[*/0x008C/*::]*/: 'DISABLE.INPUT',\n\t/*::[*/0x008E/*::]*/: 'OUTLINE',\n\t/*::[*/0x008F/*::]*/: 'LIST.NAMES',\n\t/*::[*/0x0090/*::]*/: 'FILE.CLOSE',\n\t/*::[*/0x0091/*::]*/: 'SAVE.WORKBOOK',\n\t/*::[*/0x0092/*::]*/: 'DATA.FORM',\n\t/*::[*/0x0093/*::]*/: 'COPY.CHART',\n\t/*::[*/0x0094/*::]*/: 'ON.TIME',\n\t/*::[*/0x0095/*::]*/: 'WAIT',\n\t/*::[*/0x0096/*::]*/: 'FORMAT.FONT',\n\t/*::[*/0x0097/*::]*/: 'FILL.UP',\n\t/*::[*/0x0098/*::]*/: 'FILL.LEFT',\n\t/*::[*/0x0099/*::]*/: 'DELETE.OVERLAY',\n\t/*::[*/0x009B/*::]*/: 'SHORT.MENUS',\n\t/*::[*/0x009F/*::]*/: 'SET.UPDATE.STATUS',\n\t/*::[*/0x00A1/*::]*/: 'COLOR.PALETTE',\n\t/*::[*/0x00A2/*::]*/: 'DELETE.STYLE',\n\t/*::[*/0x00A3/*::]*/: 'WINDOW.RESTORE',\n\t/*::[*/0x00A4/*::]*/: 'WINDOW.MAXIMIZE',\n\t/*::[*/0x00A6/*::]*/: 'CHANGE.LINK',\n\t/*::[*/0x00A7/*::]*/: 'CALCULATE.DOCUMENT',\n\t/*::[*/0x00A8/*::]*/: 'ON.KEY',\n\t/*::[*/0x00A9/*::]*/: 'APP.RESTORE',\n\t/*::[*/0x00AA/*::]*/: 'APP.MOVE',\n\t/*::[*/0x00AB/*::]*/: 'APP.SIZE',\n\t/*::[*/0x00AC/*::]*/: 'APP.MINIMIZE',\n\t/*::[*/0x00AD/*::]*/: 'APP.MAXIMIZE',\n\t/*::[*/0x00AE/*::]*/: 'BRING.TO.FRONT',\n\t/*::[*/0x00AF/*::]*/: 'SEND.TO.BACK',\n\t/*::[*/0x00B9/*::]*/: 'MAIN.CHART.TYPE',\n\t/*::[*/0x00BA/*::]*/: 'OVERLAY.CHART.TYPE',\n\t/*::[*/0x00BB/*::]*/: 'SELECT.END',\n\t/*::[*/0x00BC/*::]*/: 'OPEN.MAIL',\n\t/*::[*/0x00BD/*::]*/: 'SEND.MAIL',\n\t/*::[*/0x00BE/*::]*/: 'STANDARD.FONT',\n\t/*::[*/0x00BF/*::]*/: 'CONSOLIDATE',\n\t/*::[*/0x00C0/*::]*/: 'SORT.SPECIAL',\n\t/*::[*/0x00C1/*::]*/: 'GALLERY.3D.AREA',\n\t/*::[*/0x00C2/*::]*/: 'GALLERY.3D.COLUMN',\n\t/*::[*/0x00C3/*::]*/: 'GALLERY.3D.LINE',\n\t/*::[*/0x00C4/*::]*/: 'GALLERY.3D.PIE',\n\t/*::[*/0x00C5/*::]*/: 'VIEW.3D',\n\t/*::[*/0x00C6/*::]*/: 'GOAL.SEEK',\n\t/*::[*/0x00C7/*::]*/: 'WORKGROUP',\n\t/*::[*/0x00C8/*::]*/: 'FILL.GROUP',\n\t/*::[*/0x00C9/*::]*/: 'UPDATE.LINK',\n\t/*::[*/0x00CA/*::]*/: 'PROMOTE',\n\t/*::[*/0x00CB/*::]*/: 'DEMOTE',\n\t/*::[*/0x00CC/*::]*/: 'SHOW.DETAIL',\n\t/*::[*/0x00CE/*::]*/: 'UNGROUP',\n\t/*::[*/0x00CF/*::]*/: 'OBJECT.PROPERTIES',\n\t/*::[*/0x00D0/*::]*/: 'SAVE.NEW.OBJECT',\n\t/*::[*/0x00D1/*::]*/: 'SHARE',\n\t/*::[*/0x00D2/*::]*/: 'SHARE.NAME',\n\t/*::[*/0x00D3/*::]*/: 'DUPLICATE',\n\t/*::[*/0x00D4/*::]*/: 'APPLY.STYLE',\n\t/*::[*/0x00D5/*::]*/: 'ASSIGN.TO.OBJECT',\n\t/*::[*/0x00D6/*::]*/: 'OBJECT.PROTECTION',\n\t/*::[*/0x00D7/*::]*/: 'HIDE.OBJECT',\n\t/*::[*/0x00D8/*::]*/: 'SET.EXTRACT',\n\t/*::[*/0x00D9/*::]*/: 'CREATE.PUBLISHER',\n\t/*::[*/0x00DA/*::]*/: 'SUBSCRIBE.TO',\n\t/*::[*/0x00DB/*::]*/: 'ATTRIBUTES',\n\t/*::[*/0x00DC/*::]*/: 'SHOW.TOOLBAR',\n\t/*::[*/0x00DE/*::]*/: 'PRINT.PREVIEW',\n\t/*::[*/0x00DF/*::]*/: 'EDIT.COLOR',\n\t/*::[*/0x00E0/*::]*/: 'SHOW.LEVELS',\n\t/*::[*/0x00E1/*::]*/: 'FORMAT.MAIN',\n\t/*::[*/0x00E2/*::]*/: 'FORMAT.OVERLAY',\n\t/*::[*/0x00E3/*::]*/: 'ON.RECALC',\n\t/*::[*/0x00E4/*::]*/: 'EDIT.SERIES',\n\t/*::[*/0x00E5/*::]*/: 'DEFINE.STYLE',\n\t/*::[*/0x00F0/*::]*/: 'LINE.PRINT',\n\t/*::[*/0x00F3/*::]*/: 'ENTER.DATA',\n\t/*::[*/0x00F9/*::]*/: 'GALLERY.RADAR',\n\t/*::[*/0x00FA/*::]*/: 'MERGE.STYLES',\n\t/*::[*/0x00FB/*::]*/: 'EDITION.OPTIONS',\n\t/*::[*/0x00FC/*::]*/: 'PASTE.PICTURE',\n\t/*::[*/0x00FD/*::]*/: 'PASTE.PICTURE.LINK',\n\t/*::[*/0x00FE/*::]*/: 'SPELLING',\n\t/*::[*/0x0100/*::]*/: 'ZOOM',\n\t/*::[*/0x0103/*::]*/: 'INSERT.OBJECT',\n\t/*::[*/0x0104/*::]*/: 'WINDOW.MINIMIZE',\n\t/*::[*/0x0109/*::]*/: 'SOUND.NOTE',\n\t/*::[*/0x010A/*::]*/: 'SOUND.PLAY',\n\t/*::[*/0x010B/*::]*/: 'FORMAT.SHAPE',\n\t/*::[*/0x010C/*::]*/: 'EXTEND.POLYGON',\n\t/*::[*/0x010D/*::]*/: 'FORMAT.AUTO',\n\t/*::[*/0x0110/*::]*/: 'GALLERY.3D.BAR',\n\t/*::[*/0x0111/*::]*/: 'GALLERY.3D.SURFACE',\n\t/*::[*/0x0112/*::]*/: 'FILL.AUTO',\n\t/*::[*/0x0114/*::]*/: 'CUSTOMIZE.TOOLBAR',\n\t/*::[*/0x0115/*::]*/: 'ADD.TOOL',\n\t/*::[*/0x0116/*::]*/: 'EDIT.OBJECT',\n\t/*::[*/0x0117/*::]*/: 'ON.DOUBLECLICK',\n\t/*::[*/0x0118/*::]*/: 'ON.ENTRY',\n\t/*::[*/0x0119/*::]*/: 'WORKBOOK.ADD',\n\t/*::[*/0x011A/*::]*/: 'WORKBOOK.MOVE',\n\t/*::[*/0x011B/*::]*/: 'WORKBOOK.COPY',\n\t/*::[*/0x011C/*::]*/: 'WORKBOOK.OPTIONS',\n\t/*::[*/0x011D/*::]*/: 'SAVE.WORKSPACE',\n\t/*::[*/0x0120/*::]*/: 'CHART.WIZARD',\n\t/*::[*/0x0121/*::]*/: 'DELETE.TOOL',\n\t/*::[*/0x0122/*::]*/: 'MOVE.TOOL',\n\t/*::[*/0x0123/*::]*/: 'WORKBOOK.SELECT',\n\t/*::[*/0x0124/*::]*/: 'WORKBOOK.ACTIVATE',\n\t/*::[*/0x0125/*::]*/: 'ASSIGN.TO.TOOL',\n\t/*::[*/0x0127/*::]*/: 'COPY.TOOL',\n\t/*::[*/0x0128/*::]*/: 'RESET.TOOL',\n\t/*::[*/0x0129/*::]*/: 'CONSTRAIN.NUMERIC',\n\t/*::[*/0x012A/*::]*/: 'PASTE.TOOL',\n\t/*::[*/0x012E/*::]*/: 'WORKBOOK.NEW',\n\t/*::[*/0x0131/*::]*/: 'SCENARIO.CELLS',\n\t/*::[*/0x0132/*::]*/: 'SCENARIO.DELETE',\n\t/*::[*/0x0133/*::]*/: 'SCENARIO.ADD',\n\t/*::[*/0x0134/*::]*/: 'SCENARIO.EDIT',\n\t/*::[*/0x0135/*::]*/: 'SCENARIO.SHOW',\n\t/*::[*/0x0136/*::]*/: 'SCENARIO.SHOW.NEXT',\n\t/*::[*/0x0137/*::]*/: 'SCENARIO.SUMMARY',\n\t/*::[*/0x0138/*::]*/: 'PIVOT.TABLE.WIZARD',\n\t/*::[*/0x0139/*::]*/: 'PIVOT.FIELD.PROPERTIES',\n\t/*::[*/0x013A/*::]*/: 'PIVOT.FIELD',\n\t/*::[*/0x013B/*::]*/: 'PIVOT.ITEM',\n\t/*::[*/0x013C/*::]*/: 'PIVOT.ADD.FIELDS',\n\t/*::[*/0x013E/*::]*/: 'OPTIONS.CALCULATION',\n\t/*::[*/0x013F/*::]*/: 'OPTIONS.EDIT',\n\t/*::[*/0x0140/*::]*/: 'OPTIONS.VIEW',\n\t/*::[*/0x0141/*::]*/: 'ADDIN.MANAGER',\n\t/*::[*/0x0142/*::]*/: 'MENU.EDITOR',\n\t/*::[*/0x0143/*::]*/: 'ATTACH.TOOLBARS',\n\t/*::[*/0x0144/*::]*/: 'VBAActivate',\n\t/*::[*/0x0145/*::]*/: 'OPTIONS.CHART',\n\t/*::[*/0x0148/*::]*/: 'VBA.INSERT.FILE',\n\t/*::[*/0x014A/*::]*/: 'VBA.PROCEDURE.DEFINITION',\n\t/*::[*/0x0150/*::]*/: 'ROUTING.SLIP',\n\t/*::[*/0x0152/*::]*/: 'ROUTE.DOCUMENT',\n\t/*::[*/0x0153/*::]*/: 'MAIL.LOGON',\n\t/*::[*/0x0156/*::]*/: 'INSERT.PICTURE',\n\t/*::[*/0x0157/*::]*/: 'EDIT.TOOL',\n\t/*::[*/0x0158/*::]*/: 'GALLERY.DOUGHNUT',\n\t/*::[*/0x015E/*::]*/: 'CHART.TREND',\n\t/*::[*/0x0160/*::]*/: 'PIVOT.ITEM.PROPERTIES',\n\t/*::[*/0x0162/*::]*/: 'WORKBOOK.INSERT',\n\t/*::[*/0x0163/*::]*/: 'OPTIONS.TRANSITION',\n\t/*::[*/0x0164/*::]*/: 'OPTIONS.GENERAL',\n\t/*::[*/0x0172/*::]*/: 'FILTER.ADVANCED',\n\t/*::[*/0x0175/*::]*/: 'MAIL.ADD.MAILER',\n\t/*::[*/0x0176/*::]*/: 'MAIL.DELETE.MAILER',\n\t/*::[*/0x0177/*::]*/: 'MAIL.REPLY',\n\t/*::[*/0x0178/*::]*/: 'MAIL.REPLY.ALL',\n\t/*::[*/0x0179/*::]*/: 'MAIL.FORWARD',\n\t/*::[*/0x017A/*::]*/: 'MAIL.NEXT.LETTER',\n\t/*::[*/0x017B/*::]*/: 'DATA.LABEL',\n\t/*::[*/0x017C/*::]*/: 'INSERT.TITLE',\n\t/*::[*/0x017D/*::]*/: 'FONT.PROPERTIES',\n\t/*::[*/0x017E/*::]*/: 'MACRO.OPTIONS',\n\t/*::[*/0x017F/*::]*/: 'WORKBOOK.HIDE',\n\t/*::[*/0x0180/*::]*/: 'WORKBOOK.UNHIDE',\n\t/*::[*/0x0181/*::]*/: 'WORKBOOK.DELETE',\n\t/*::[*/0x0182/*::]*/: 'WORKBOOK.NAME',\n\t/*::[*/0x0184/*::]*/: 'GALLERY.CUSTOM',\n\t/*::[*/0x0186/*::]*/: 'ADD.CHART.AUTOFORMAT',\n\t/*::[*/0x0187/*::]*/: 'DELETE.CHART.AUTOFORMAT',\n\t/*::[*/0x0188/*::]*/: 'CHART.ADD.DATA',\n\t/*::[*/0x0189/*::]*/: 'AUTO.OUTLINE',\n\t/*::[*/0x018A/*::]*/: 'TAB.ORDER',\n\t/*::[*/0x018B/*::]*/: 'SHOW.DIALOG',\n\t/*::[*/0x018C/*::]*/: 'SELECT.ALL',\n\t/*::[*/0x018D/*::]*/: 'UNGROUP.SHEETS',\n\t/*::[*/0x018E/*::]*/: 'SUBTOTAL.CREATE',\n\t/*::[*/0x018F/*::]*/: 'SUBTOTAL.REMOVE',\n\t/*::[*/0x0190/*::]*/: 'RENAME.OBJECT',\n\t/*::[*/0x019C/*::]*/: 'WORKBOOK.SCROLL',\n\t/*::[*/0x019D/*::]*/: 'WORKBOOK.NEXT',\n\t/*::[*/0x019E/*::]*/: 'WORKBOOK.PREV',\n\t/*::[*/0x019F/*::]*/: 'WORKBOOK.TAB.SPLIT',\n\t/*::[*/0x01A0/*::]*/: 'FULL.SCREEN',\n\t/*::[*/0x01A1/*::]*/: 'WORKBOOK.PROTECT',\n\t/*::[*/0x01A4/*::]*/: 'SCROLLBAR.PROPERTIES',\n\t/*::[*/0x01A5/*::]*/: 'PIVOT.SHOW.PAGES',\n\t/*::[*/0x01A6/*::]*/: 'TEXT.TO.COLUMNS',\n\t/*::[*/0x01A7/*::]*/: 'FORMAT.CHARTTYPE',\n\t/*::[*/0x01A8/*::]*/: 'LINK.FORMAT',\n\t/*::[*/0x01A9/*::]*/: 'TRACER.DISPLAY',\n\t/*::[*/0x01AE/*::]*/: 'TRACER.NAVIGATE',\n\t/*::[*/0x01AF/*::]*/: 'TRACER.CLEAR',\n\t/*::[*/0x01B0/*::]*/: 'TRACER.ERROR',\n\t/*::[*/0x01B1/*::]*/: 'PIVOT.FIELD.GROUP',\n\t/*::[*/0x01B2/*::]*/: 'PIVOT.FIELD.UNGROUP',\n\t/*::[*/0x01B3/*::]*/: 'CHECKBOX.PROPERTIES',\n\t/*::[*/0x01B4/*::]*/: 'LABEL.PROPERTIES',\n\t/*::[*/0x01B5/*::]*/: 'LISTBOX.PROPERTIES',\n\t/*::[*/0x01B6/*::]*/: 'EDITBOX.PROPERTIES',\n\t/*::[*/0x01B7/*::]*/: 'PIVOT.REFRESH',\n\t/*::[*/0x01B8/*::]*/: 'LINK.COMBO',\n\t/*::[*/0x01B9/*::]*/: 'OPEN.TEXT',\n\t/*::[*/0x01BA/*::]*/: 'HIDE.DIALOG',\n\t/*::[*/0x01BB/*::]*/: 'SET.DIALOG.FOCUS',\n\t/*::[*/0x01BC/*::]*/: 'ENABLE.OBJECT',\n\t/*::[*/0x01BD/*::]*/: 'PUSHBUTTON.PROPERTIES',\n\t/*::[*/0x01BE/*::]*/: 'SET.DIALOG.DEFAULT',\n\t/*::[*/0x01BF/*::]*/: 'FILTER',\n\t/*::[*/0x01C0/*::]*/: 'FILTER.SHOW.ALL',\n\t/*::[*/0x01C1/*::]*/: 'CLEAR.OUTLINE',\n\t/*::[*/0x01C2/*::]*/: 'FUNCTION.WIZARD',\n\t/*::[*/0x01C3/*::]*/: 'ADD.LIST.ITEM',\n\t/*::[*/0x01C4/*::]*/: 'SET.LIST.ITEM',\n\t/*::[*/0x01C5/*::]*/: 'REMOVE.LIST.ITEM',\n\t/*::[*/0x01C6/*::]*/: 'SELECT.LIST.ITEM',\n\t/*::[*/0x01C7/*::]*/: 'SET.CONTROL.VALUE',\n\t/*::[*/0x01C8/*::]*/: 'SAVE.COPY.AS',\n\t/*::[*/0x01CA/*::]*/: 'OPTIONS.LISTS.ADD',\n\t/*::[*/0x01CB/*::]*/: 'OPTIONS.LISTS.DELETE',\n\t/*::[*/0x01CC/*::]*/: 'SERIES.AXES',\n\t/*::[*/0x01CD/*::]*/: 'SERIES.X',\n\t/*::[*/0x01CE/*::]*/: 'SERIES.Y',\n\t/*::[*/0x01CF/*::]*/: 'ERRORBAR.X',\n\t/*::[*/0x01D0/*::]*/: 'ERRORBAR.Y',\n\t/*::[*/0x01D1/*::]*/: 'FORMAT.CHART',\n\t/*::[*/0x01D2/*::]*/: 'SERIES.ORDER',\n\t/*::[*/0x01D3/*::]*/: 'MAIL.LOGOFF',\n\t/*::[*/0x01D4/*::]*/: 'CLEAR.ROUTING.SLIP',\n\t/*::[*/0x01D5/*::]*/: 'APP.ACTIVATE.MICROSOFT',\n\t/*::[*/0x01D6/*::]*/: 'MAIL.EDIT.MAILER',\n\t/*::[*/0x01D7/*::]*/: 'ON.SHEET',\n\t/*::[*/0x01D8/*::]*/: 'STANDARD.WIDTH',\n\t/*::[*/0x01D9/*::]*/: 'SCENARIO.MERGE',\n\t/*::[*/0x01DA/*::]*/: 'SUMMARY.INFO',\n\t/*::[*/0x01DB/*::]*/: 'FIND.FILE',\n\t/*::[*/0x01DC/*::]*/: 'ACTIVE.CELL.FONT',\n\t/*::[*/0x01DD/*::]*/: 'ENABLE.TIPWIZARD',\n\t/*::[*/0x01DE/*::]*/: 'VBA.MAKE.ADDIN',\n\t/*::[*/0x01E0/*::]*/: 'INSERTDATATABLE',\n\t/*::[*/0x01E1/*::]*/: 'WORKGROUP.OPTIONS',\n\t/*::[*/0x01E2/*::]*/: 'MAIL.SEND.MAILER',\n\t/*::[*/0x01E5/*::]*/: 'AUTOCORRECT',\n\t/*::[*/0x01E9/*::]*/: 'POST.DOCUMENT',\n\t/*::[*/0x01EB/*::]*/: 'PICKLIST',\n\t/*::[*/0x01ED/*::]*/: 'VIEW.SHOW',\n\t/*::[*/0x01EE/*::]*/: 'VIEW.DEFINE',\n\t/*::[*/0x01EF/*::]*/: 'VIEW.DELETE',\n\t/*::[*/0x01FD/*::]*/: 'SHEET.BACKGROUND',\n\t/*::[*/0x01FE/*::]*/: 'INSERT.MAP.OBJECT',\n\t/*::[*/0x01FF/*::]*/: 'OPTIONS.MENONO',\n\t/*::[*/0x0205/*::]*/: 'MSOCHECKS',\n\t/*::[*/0x0206/*::]*/: 'NORMAL',\n\t/*::[*/0x0207/*::]*/: 'LAYOUT',\n\t/*::[*/0x0208/*::]*/: 'RM.PRINT.AREA',\n\t/*::[*/0x0209/*::]*/: 'CLEAR.PRINT.AREA',\n\t/*::[*/0x020A/*::]*/: 'ADD.PRINT.AREA',\n\t/*::[*/0x020B/*::]*/: 'MOVE.BRK',\n\t/*::[*/0x0221/*::]*/: 'HIDECURR.NOTE',\n\t/*::[*/0x0222/*::]*/: 'HIDEALL.NOTES',\n\t/*::[*/0x0223/*::]*/: 'DELETE.NOTE',\n\t/*::[*/0x0224/*::]*/: 'TRAVERSE.NOTES',\n\t/*::[*/0x0225/*::]*/: 'ACTIVATE.NOTES',\n\t/*::[*/0x026C/*::]*/: 'PROTECT.REVISIONS',\n\t/*::[*/0x026D/*::]*/: 'UNPROTECT.REVISIONS',\n\t/*::[*/0x0287/*::]*/: 'OPTIONS.ME',\n\t/*::[*/0x028D/*::]*/: 'WEB.PUBLISH',\n\t/*::[*/0x029B/*::]*/: 'NEWWEBQUERY',\n\t/*::[*/0x02A1/*::]*/: 'PIVOT.TABLE.CHART',\n\t/*::[*/0x02F1/*::]*/: 'OPTIONS.SAVE',\n\t/*::[*/0x02F3/*::]*/: 'OPTIONS.SPELL',\n\t/*::[*/0x0328/*::]*/: 'HIDEALL.INKANNOTS'\n};\n\n/* [MS-XLS] 2.5.198.17 */\n/* [MS-XLSB] 2.5.97.10 */\nvar Ftab = {\n\t/*::[*/0x0000/*::]*/: 'COUNT',\n\t/*::[*/0x0001/*::]*/: 'IF',\n\t/*::[*/0x0002/*::]*/: 'ISNA',\n\t/*::[*/0x0003/*::]*/: 'ISERROR',\n\t/*::[*/0x0004/*::]*/: 'SUM',\n\t/*::[*/0x0005/*::]*/: 'AVERAGE',\n\t/*::[*/0x0006/*::]*/: 'MIN',\n\t/*::[*/0x0007/*::]*/: 'MAX',\n\t/*::[*/0x0008/*::]*/: 'ROW',\n\t/*::[*/0x0009/*::]*/: 'COLUMN',\n\t/*::[*/0x000A/*::]*/: 'NA',\n\t/*::[*/0x000B/*::]*/: 'NPV',\n\t/*::[*/0x000C/*::]*/: 'STDEV',\n\t/*::[*/0x000D/*::]*/: 'DOLLAR',\n\t/*::[*/0x000E/*::]*/: 'FIXED',\n\t/*::[*/0x000F/*::]*/: 'SIN',\n\t/*::[*/0x0010/*::]*/: 'COS',\n\t/*::[*/0x0011/*::]*/: 'TAN',\n\t/*::[*/0x0012/*::]*/: 'ATAN',\n\t/*::[*/0x0013/*::]*/: 'PI',\n\t/*::[*/0x0014/*::]*/: 'SQRT',\n\t/*::[*/0x0015/*::]*/: 'EXP',\n\t/*::[*/0x0016/*::]*/: 'LN',\n\t/*::[*/0x0017/*::]*/: 'LOG10',\n\t/*::[*/0x0018/*::]*/: 'ABS',\n\t/*::[*/0x0019/*::]*/: 'INT',\n\t/*::[*/0x001A/*::]*/: 'SIGN',\n\t/*::[*/0x001B/*::]*/: 'ROUND',\n\t/*::[*/0x001C/*::]*/: 'LOOKUP',\n\t/*::[*/0x001D/*::]*/: 'INDEX',\n\t/*::[*/0x001E/*::]*/: 'REPT',\n\t/*::[*/0x001F/*::]*/: 'MID',\n\t/*::[*/0x0020/*::]*/: 'LEN',\n\t/*::[*/0x0021/*::]*/: 'VALUE',\n\t/*::[*/0x0022/*::]*/: 'TRUE',\n\t/*::[*/0x0023/*::]*/: 'FALSE',\n\t/*::[*/0x0024/*::]*/: 'AND',\n\t/*::[*/0x0025/*::]*/: 'OR',\n\t/*::[*/0x0026/*::]*/: 'NOT',\n\t/*::[*/0x0027/*::]*/: 'MOD',\n\t/*::[*/0x0028/*::]*/: 'DCOUNT',\n\t/*::[*/0x0029/*::]*/: 'DSUM',\n\t/*::[*/0x002A/*::]*/: 'DAVERAGE',\n\t/*::[*/0x002B/*::]*/: 'DMIN',\n\t/*::[*/0x002C/*::]*/: 'DMAX',\n\t/*::[*/0x002D/*::]*/: 'DSTDEV',\n\t/*::[*/0x002E/*::]*/: 'VAR',\n\t/*::[*/0x002F/*::]*/: 'DVAR',\n\t/*::[*/0x0030/*::]*/: 'TEXT',\n\t/*::[*/0x0031/*::]*/: 'LINEST',\n\t/*::[*/0x0032/*::]*/: 'TREND',\n\t/*::[*/0x0033/*::]*/: 'LOGEST',\n\t/*::[*/0x0034/*::]*/: 'GROWTH',\n\t/*::[*/0x0035/*::]*/: 'GOTO',\n\t/*::[*/0x0036/*::]*/: 'HALT',\n\t/*::[*/0x0037/*::]*/: 'RETURN',\n\t/*::[*/0x0038/*::]*/: 'PV',\n\t/*::[*/0x0039/*::]*/: 'FV',\n\t/*::[*/0x003A/*::]*/: 'NPER',\n\t/*::[*/0x003B/*::]*/: 'PMT',\n\t/*::[*/0x003C/*::]*/: 'RATE',\n\t/*::[*/0x003D/*::]*/: 'MIRR',\n\t/*::[*/0x003E/*::]*/: 'IRR',\n\t/*::[*/0x003F/*::]*/: 'RAND',\n\t/*::[*/0x0040/*::]*/: 'MATCH',\n\t/*::[*/0x0041/*::]*/: 'DATE',\n\t/*::[*/0x0042/*::]*/: 'TIME',\n\t/*::[*/0x0043/*::]*/: 'DAY',\n\t/*::[*/0x0044/*::]*/: 'MONTH',\n\t/*::[*/0x0045/*::]*/: 'YEAR',\n\t/*::[*/0x0046/*::]*/: 'WEEKDAY',\n\t/*::[*/0x0047/*::]*/: 'HOUR',\n\t/*::[*/0x0048/*::]*/: 'MINUTE',\n\t/*::[*/0x0049/*::]*/: 'SECOND',\n\t/*::[*/0x004A/*::]*/: 'NOW',\n\t/*::[*/0x004B/*::]*/: 'AREAS',\n\t/*::[*/0x004C/*::]*/: 'ROWS',\n\t/*::[*/0x004D/*::]*/: 'COLUMNS',\n\t/*::[*/0x004E/*::]*/: 'OFFSET',\n\t/*::[*/0x004F/*::]*/: 'ABSREF',\n\t/*::[*/0x0050/*::]*/: 'RELREF',\n\t/*::[*/0x0051/*::]*/: 'ARGUMENT',\n\t/*::[*/0x0052/*::]*/: 'SEARCH',\n\t/*::[*/0x0053/*::]*/: 'TRANSPOSE',\n\t/*::[*/0x0054/*::]*/: 'ERROR',\n\t/*::[*/0x0055/*::]*/: 'STEP',\n\t/*::[*/0x0056/*::]*/: 'TYPE',\n\t/*::[*/0x0057/*::]*/: 'ECHO',\n\t/*::[*/0x0058/*::]*/: 'SET.NAME',\n\t/*::[*/0x0059/*::]*/: 'CALLER',\n\t/*::[*/0x005A/*::]*/: 'DEREF',\n\t/*::[*/0x005B/*::]*/: 'WINDOWS',\n\t/*::[*/0x005C/*::]*/: 'SERIES',\n\t/*::[*/0x005D/*::]*/: 'DOCUMENTS',\n\t/*::[*/0x005E/*::]*/: 'ACTIVE.CELL',\n\t/*::[*/0x005F/*::]*/: 'SELECTION',\n\t/*::[*/0x0060/*::]*/: 'RESULT',\n\t/*::[*/0x0061/*::]*/: 'ATAN2',\n\t/*::[*/0x0062/*::]*/: 'ASIN',\n\t/*::[*/0x0063/*::]*/: 'ACOS',\n\t/*::[*/0x0064/*::]*/: 'CHOOSE',\n\t/*::[*/0x0065/*::]*/: 'HLOOKUP',\n\t/*::[*/0x0066/*::]*/: 'VLOOKUP',\n\t/*::[*/0x0067/*::]*/: 'LINKS',\n\t/*::[*/0x0068/*::]*/: 'INPUT',\n\t/*::[*/0x0069/*::]*/: 'ISREF',\n\t/*::[*/0x006A/*::]*/: 'GET.FORMULA',\n\t/*::[*/0x006B/*::]*/: 'GET.NAME',\n\t/*::[*/0x006C/*::]*/: 'SET.VALUE',\n\t/*::[*/0x006D/*::]*/: 'LOG',\n\t/*::[*/0x006E/*::]*/: 'EXEC',\n\t/*::[*/0x006F/*::]*/: 'CHAR',\n\t/*::[*/0x0070/*::]*/: 'LOWER',\n\t/*::[*/0x0071/*::]*/: 'UPPER',\n\t/*::[*/0x0072/*::]*/: 'PROPER',\n\t/*::[*/0x0073/*::]*/: 'LEFT',\n\t/*::[*/0x0074/*::]*/: 'RIGHT',\n\t/*::[*/0x0075/*::]*/: 'EXACT',\n\t/*::[*/0x0076/*::]*/: 'TRIM',\n\t/*::[*/0x0077/*::]*/: 'REPLACE',\n\t/*::[*/0x0078/*::]*/: 'SUBSTITUTE',\n\t/*::[*/0x0079/*::]*/: 'CODE',\n\t/*::[*/0x007A/*::]*/: 'NAMES',\n\t/*::[*/0x007B/*::]*/: 'DIRECTORY',\n\t/*::[*/0x007C/*::]*/: 'FIND',\n\t/*::[*/0x007D/*::]*/: 'CELL',\n\t/*::[*/0x007E/*::]*/: 'ISERR',\n\t/*::[*/0x007F/*::]*/: 'ISTEXT',\n\t/*::[*/0x0080/*::]*/: 'ISNUMBER',\n\t/*::[*/0x0081/*::]*/: 'ISBLANK',\n\t/*::[*/0x0082/*::]*/: 'T',\n\t/*::[*/0x0083/*::]*/: 'N',\n\t/*::[*/0x0084/*::]*/: 'FOPEN',\n\t/*::[*/0x0085/*::]*/: 'FCLOSE',\n\t/*::[*/0x0086/*::]*/: 'FSIZE',\n\t/*::[*/0x0087/*::]*/: 'FREADLN',\n\t/*::[*/0x0088/*::]*/: 'FREAD',\n\t/*::[*/0x0089/*::]*/: 'FWRITELN',\n\t/*::[*/0x008A/*::]*/: 'FWRITE',\n\t/*::[*/0x008B/*::]*/: 'FPOS',\n\t/*::[*/0x008C/*::]*/: 'DATEVALUE',\n\t/*::[*/0x008D/*::]*/: 'TIMEVALUE',\n\t/*::[*/0x008E/*::]*/: 'SLN',\n\t/*::[*/0x008F/*::]*/: 'SYD',\n\t/*::[*/0x0090/*::]*/: 'DDB',\n\t/*::[*/0x0091/*::]*/: 'GET.DEF',\n\t/*::[*/0x0092/*::]*/: 'REFTEXT',\n\t/*::[*/0x0093/*::]*/: 'TEXTREF',\n\t/*::[*/0x0094/*::]*/: 'INDIRECT',\n\t/*::[*/0x0095/*::]*/: 'REGISTER',\n\t/*::[*/0x0096/*::]*/: 'CALL',\n\t/*::[*/0x0097/*::]*/: 'ADD.BAR',\n\t/*::[*/0x0098/*::]*/: 'ADD.MENU',\n\t/*::[*/0x0099/*::]*/: 'ADD.COMMAND',\n\t/*::[*/0x009A/*::]*/: 'ENABLE.COMMAND',\n\t/*::[*/0x009B/*::]*/: 'CHECK.COMMAND',\n\t/*::[*/0x009C/*::]*/: 'RENAME.COMMAND',\n\t/*::[*/0x009D/*::]*/: 'SHOW.BAR',\n\t/*::[*/0x009E/*::]*/: 'DELETE.MENU',\n\t/*::[*/0x009F/*::]*/: 'DELETE.COMMAND',\n\t/*::[*/0x00A0/*::]*/: 'GET.CHART.ITEM',\n\t/*::[*/0x00A1/*::]*/: 'DIALOG.BOX',\n\t/*::[*/0x00A2/*::]*/: 'CLEAN',\n\t/*::[*/0x00A3/*::]*/: 'MDETERM',\n\t/*::[*/0x00A4/*::]*/: 'MINVERSE',\n\t/*::[*/0x00A5/*::]*/: 'MMULT',\n\t/*::[*/0x00A6/*::]*/: 'FILES',\n\t/*::[*/0x00A7/*::]*/: 'IPMT',\n\t/*::[*/0x00A8/*::]*/: 'PPMT',\n\t/*::[*/0x00A9/*::]*/: 'COUNTA',\n\t/*::[*/0x00AA/*::]*/: 'CANCEL.KEY',\n\t/*::[*/0x00AB/*::]*/: 'FOR',\n\t/*::[*/0x00AC/*::]*/: 'WHILE',\n\t/*::[*/0x00AD/*::]*/: 'BREAK',\n\t/*::[*/0x00AE/*::]*/: 'NEXT',\n\t/*::[*/0x00AF/*::]*/: 'INITIATE',\n\t/*::[*/0x00B0/*::]*/: 'REQUEST',\n\t/*::[*/0x00B1/*::]*/: 'POKE',\n\t/*::[*/0x00B2/*::]*/: 'EXECUTE',\n\t/*::[*/0x00B3/*::]*/: 'TERMINATE',\n\t/*::[*/0x00B4/*::]*/: 'RESTART',\n\t/*::[*/0x00B5/*::]*/: 'HELP',\n\t/*::[*/0x00B6/*::]*/: 'GET.BAR',\n\t/*::[*/0x00B7/*::]*/: 'PRODUCT',\n\t/*::[*/0x00B8/*::]*/: 'FACT',\n\t/*::[*/0x00B9/*::]*/: 'GET.CELL',\n\t/*::[*/0x00BA/*::]*/: 'GET.WORKSPACE',\n\t/*::[*/0x00BB/*::]*/: 'GET.WINDOW',\n\t/*::[*/0x00BC/*::]*/: 'GET.DOCUMENT',\n\t/*::[*/0x00BD/*::]*/: 'DPRODUCT',\n\t/*::[*/0x00BE/*::]*/: 'ISNONTEXT',\n\t/*::[*/0x00BF/*::]*/: 'GET.NOTE',\n\t/*::[*/0x00C0/*::]*/: 'NOTE',\n\t/*::[*/0x00C1/*::]*/: 'STDEVP',\n\t/*::[*/0x00C2/*::]*/: 'VARP',\n\t/*::[*/0x00C3/*::]*/: 'DSTDEVP',\n\t/*::[*/0x00C4/*::]*/: 'DVARP',\n\t/*::[*/0x00C5/*::]*/: 'TRUNC',\n\t/*::[*/0x00C6/*::]*/: 'ISLOGICAL',\n\t/*::[*/0x00C7/*::]*/: 'DCOUNTA',\n\t/*::[*/0x00C8/*::]*/: 'DELETE.BAR',\n\t/*::[*/0x00C9/*::]*/: 'UNREGISTER',\n\t/*::[*/0x00CC/*::]*/: 'USDOLLAR',\n\t/*::[*/0x00CD/*::]*/: 'FINDB',\n\t/*::[*/0x00CE/*::]*/: 'SEARCHB',\n\t/*::[*/0x00CF/*::]*/: 'REPLACEB',\n\t/*::[*/0x00D0/*::]*/: 'LEFTB',\n\t/*::[*/0x00D1/*::]*/: 'RIGHTB',\n\t/*::[*/0x00D2/*::]*/: 'MIDB',\n\t/*::[*/0x00D3/*::]*/: 'LENB',\n\t/*::[*/0x00D4/*::]*/: 'ROUNDUP',\n\t/*::[*/0x00D5/*::]*/: 'ROUNDDOWN',\n\t/*::[*/0x00D6/*::]*/: 'ASC',\n\t/*::[*/0x00D7/*::]*/: 'DBCS',\n\t/*::[*/0x00D8/*::]*/: 'RANK',\n\t/*::[*/0x00DB/*::]*/: 'ADDRESS',\n\t/*::[*/0x00DC/*::]*/: 'DAYS360',\n\t/*::[*/0x00DD/*::]*/: 'TODAY',\n\t/*::[*/0x00DE/*::]*/: 'VDB',\n\t/*::[*/0x00DF/*::]*/: 'ELSE',\n\t/*::[*/0x00E0/*::]*/: 'ELSE.IF',\n\t/*::[*/0x00E1/*::]*/: 'END.IF',\n\t/*::[*/0x00E2/*::]*/: 'FOR.CELL',\n\t/*::[*/0x00E3/*::]*/: 'MEDIAN',\n\t/*::[*/0x00E4/*::]*/: 'SUMPRODUCT',\n\t/*::[*/0x00E5/*::]*/: 'SINH',\n\t/*::[*/0x00E6/*::]*/: 'COSH',\n\t/*::[*/0x00E7/*::]*/: 'TANH',\n\t/*::[*/0x00E8/*::]*/: 'ASINH',\n\t/*::[*/0x00E9/*::]*/: 'ACOSH',\n\t/*::[*/0x00EA/*::]*/: 'ATANH',\n\t/*::[*/0x00EB/*::]*/: 'DGET',\n\t/*::[*/0x00EC/*::]*/: 'CREATE.OBJECT',\n\t/*::[*/0x00ED/*::]*/: 'VOLATILE',\n\t/*::[*/0x00EE/*::]*/: 'LAST.ERROR',\n\t/*::[*/0x00EF/*::]*/: 'CUSTOM.UNDO',\n\t/*::[*/0x00F0/*::]*/: 'CUSTOM.REPEAT',\n\t/*::[*/0x00F1/*::]*/: 'FORMULA.CONVERT',\n\t/*::[*/0x00F2/*::]*/: 'GET.LINK.INFO',\n\t/*::[*/0x00F3/*::]*/: 'TEXT.BOX',\n\t/*::[*/0x00F4/*::]*/: 'INFO',\n\t/*::[*/0x00F5/*::]*/: 'GROUP',\n\t/*::[*/0x00F6/*::]*/: 'GET.OBJECT',\n\t/*::[*/0x00F7/*::]*/: 'DB',\n\t/*::[*/0x00F8/*::]*/: 'PAUSE',\n\t/*::[*/0x00FB/*::]*/: 'RESUME',\n\t/*::[*/0x00FC/*::]*/: 'FREQUENCY',\n\t/*::[*/0x00FD/*::]*/: 'ADD.TOOLBAR',\n\t/*::[*/0x00FE/*::]*/: 'DELETE.TOOLBAR',\n\t/*::[*/0x00FF/*::]*/: 'User',\n\t/*::[*/0x0100/*::]*/: 'RESET.TOOLBAR',\n\t/*::[*/0x0101/*::]*/: 'EVALUATE',\n\t/*::[*/0x0102/*::]*/: 'GET.TOOLBAR',\n\t/*::[*/0x0103/*::]*/: 'GET.TOOL',\n\t/*::[*/0x0104/*::]*/: 'SPELLING.CHECK',\n\t/*::[*/0x0105/*::]*/: 'ERROR.TYPE',\n\t/*::[*/0x0106/*::]*/: 'APP.TITLE',\n\t/*::[*/0x0107/*::]*/: 'WINDOW.TITLE',\n\t/*::[*/0x0108/*::]*/: 'SAVE.TOOLBAR',\n\t/*::[*/0x0109/*::]*/: 'ENABLE.TOOL',\n\t/*::[*/0x010A/*::]*/: 'PRESS.TOOL',\n\t/*::[*/0x010B/*::]*/: 'REGISTER.ID',\n\t/*::[*/0x010C/*::]*/: 'GET.WORKBOOK',\n\t/*::[*/0x010D/*::]*/: 'AVEDEV',\n\t/*::[*/0x010E/*::]*/: 'BETADIST',\n\t/*::[*/0x010F/*::]*/: 'GAMMALN',\n\t/*::[*/0x0110/*::]*/: 'BETAINV',\n\t/*::[*/0x0111/*::]*/: 'BINOMDIST',\n\t/*::[*/0x0112/*::]*/: 'CHIDIST',\n\t/*::[*/0x0113/*::]*/: 'CHIINV',\n\t/*::[*/0x0114/*::]*/: 'COMBIN',\n\t/*::[*/0x0115/*::]*/: 'CONFIDENCE',\n\t/*::[*/0x0116/*::]*/: 'CRITBINOM',\n\t/*::[*/0x0117/*::]*/: 'EVEN',\n\t/*::[*/0x0118/*::]*/: 'EXPONDIST',\n\t/*::[*/0x0119/*::]*/: 'FDIST',\n\t/*::[*/0x011A/*::]*/: 'FINV',\n\t/*::[*/0x011B/*::]*/: 'FISHER',\n\t/*::[*/0x011C/*::]*/: 'FISHERINV',\n\t/*::[*/0x011D/*::]*/: 'FLOOR',\n\t/*::[*/0x011E/*::]*/: 'GAMMADIST',\n\t/*::[*/0x011F/*::]*/: 'GAMMAINV',\n\t/*::[*/0x0120/*::]*/: 'CEILING',\n\t/*::[*/0x0121/*::]*/: 'HYPGEOMDIST',\n\t/*::[*/0x0122/*::]*/: 'LOGNORMDIST',\n\t/*::[*/0x0123/*::]*/: 'LOGINV',\n\t/*::[*/0x0124/*::]*/: 'NEGBINOMDIST',\n\t/*::[*/0x0125/*::]*/: 'NORMDIST',\n\t/*::[*/0x0126/*::]*/: 'NORMSDIST',\n\t/*::[*/0x0127/*::]*/: 'NORMINV',\n\t/*::[*/0x0128/*::]*/: 'NORMSINV',\n\t/*::[*/0x0129/*::]*/: 'STANDARDIZE',\n\t/*::[*/0x012A/*::]*/: 'ODD',\n\t/*::[*/0x012B/*::]*/: 'PERMUT',\n\t/*::[*/0x012C/*::]*/: 'POISSON',\n\t/*::[*/0x012D/*::]*/: 'TDIST',\n\t/*::[*/0x012E/*::]*/: 'WEIBULL',\n\t/*::[*/0x012F/*::]*/: 'SUMXMY2',\n\t/*::[*/0x0130/*::]*/: 'SUMX2MY2',\n\t/*::[*/0x0131/*::]*/: 'SUMX2PY2',\n\t/*::[*/0x0132/*::]*/: 'CHITEST',\n\t/*::[*/0x0133/*::]*/: 'CORREL',\n\t/*::[*/0x0134/*::]*/: 'COVAR',\n\t/*::[*/0x0135/*::]*/: 'FORECAST',\n\t/*::[*/0x0136/*::]*/: 'FTEST',\n\t/*::[*/0x0137/*::]*/: 'INTERCEPT',\n\t/*::[*/0x0138/*::]*/: 'PEARSON',\n\t/*::[*/0x0139/*::]*/: 'RSQ',\n\t/*::[*/0x013A/*::]*/: 'STEYX',\n\t/*::[*/0x013B/*::]*/: 'SLOPE',\n\t/*::[*/0x013C/*::]*/: 'TTEST',\n\t/*::[*/0x013D/*::]*/: 'PROB',\n\t/*::[*/0x013E/*::]*/: 'DEVSQ',\n\t/*::[*/0x013F/*::]*/: 'GEOMEAN',\n\t/*::[*/0x0140/*::]*/: 'HARMEAN',\n\t/*::[*/0x0141/*::]*/: 'SUMSQ',\n\t/*::[*/0x0142/*::]*/: 'KURT',\n\t/*::[*/0x0143/*::]*/: 'SKEW',\n\t/*::[*/0x0144/*::]*/: 'ZTEST',\n\t/*::[*/0x0145/*::]*/: 'LARGE',\n\t/*::[*/0x0146/*::]*/: 'SMALL',\n\t/*::[*/0x0147/*::]*/: 'QUARTILE',\n\t/*::[*/0x0148/*::]*/: 'PERCENTILE',\n\t/*::[*/0x0149/*::]*/: 'PERCENTRANK',\n\t/*::[*/0x014A/*::]*/: 'MODE',\n\t/*::[*/0x014B/*::]*/: 'TRIMMEAN',\n\t/*::[*/0x014C/*::]*/: 'TINV',\n\t/*::[*/0x014E/*::]*/: 'MOVIE.COMMAND',\n\t/*::[*/0x014F/*::]*/: 'GET.MOVIE',\n\t/*::[*/0x0150/*::]*/: 'CONCATENATE',\n\t/*::[*/0x0151/*::]*/: 'POWER',\n\t/*::[*/0x0152/*::]*/: 'PIVOT.ADD.DATA',\n\t/*::[*/0x0153/*::]*/: 'GET.PIVOT.TABLE',\n\t/*::[*/0x0154/*::]*/: 'GET.PIVOT.FIELD',\n\t/*::[*/0x0155/*::]*/: 'GET.PIVOT.ITEM',\n\t/*::[*/0x0156/*::]*/: 'RADIANS',\n\t/*::[*/0x0157/*::]*/: 'DEGREES',\n\t/*::[*/0x0158/*::]*/: 'SUBTOTAL',\n\t/*::[*/0x0159/*::]*/: 'SUMIF',\n\t/*::[*/0x015A/*::]*/: 'COUNTIF',\n\t/*::[*/0x015B/*::]*/: 'COUNTBLANK',\n\t/*::[*/0x015C/*::]*/: 'SCENARIO.GET',\n\t/*::[*/0x015D/*::]*/: 'OPTIONS.LISTS.GET',\n\t/*::[*/0x015E/*::]*/: 'ISPMT',\n\t/*::[*/0x015F/*::]*/: 'DATEDIF',\n\t/*::[*/0x0160/*::]*/: 'DATESTRING',\n\t/*::[*/0x0161/*::]*/: 'NUMBERSTRING',\n\t/*::[*/0x0162/*::]*/: 'ROMAN',\n\t/*::[*/0x0163/*::]*/: 'OPEN.DIALOG',\n\t/*::[*/0x0164/*::]*/: 'SAVE.DIALOG',\n\t/*::[*/0x0165/*::]*/: 'VIEW.GET',\n\t/*::[*/0x0166/*::]*/: 'GETPIVOTDATA',\n\t/*::[*/0x0167/*::]*/: 'HYPERLINK',\n\t/*::[*/0x0168/*::]*/: 'PHONETIC',\n\t/*::[*/0x0169/*::]*/: 'AVERAGEA',\n\t/*::[*/0x016A/*::]*/: 'MAXA',\n\t/*::[*/0x016B/*::]*/: 'MINA',\n\t/*::[*/0x016C/*::]*/: 'STDEVPA',\n\t/*::[*/0x016D/*::]*/: 'VARPA',\n\t/*::[*/0x016E/*::]*/: 'STDEVA',\n\t/*::[*/0x016F/*::]*/: 'VARA',\n\t/*::[*/0x0170/*::]*/: 'BAHTTEXT',\n\t/*::[*/0x0171/*::]*/: 'THAIDAYOFWEEK',\n\t/*::[*/0x0172/*::]*/: 'THAIDIGIT',\n\t/*::[*/0x0173/*::]*/: 'THAIMONTHOFYEAR',\n\t/*::[*/0x0174/*::]*/: 'THAINUMSOUND',\n\t/*::[*/0x0175/*::]*/: 'THAINUMSTRING',\n\t/*::[*/0x0176/*::]*/: 'THAISTRINGLENGTH',\n\t/*::[*/0x0177/*::]*/: 'ISTHAIDIGIT',\n\t/*::[*/0x0178/*::]*/: 'ROUNDBAHTDOWN',\n\t/*::[*/0x0179/*::]*/: 'ROUNDBAHTUP',\n\t/*::[*/0x017A/*::]*/: 'THAIYEAR',\n\t/*::[*/0x017B/*::]*/: 'RTD',\n\n\t/*::[*/0x017C/*::]*/: 'CUBEVALUE',\n\t/*::[*/0x017D/*::]*/: 'CUBEMEMBER',\n\t/*::[*/0x017E/*::]*/: 'CUBEMEMBERPROPERTY',\n\t/*::[*/0x017F/*::]*/: 'CUBERANKEDMEMBER',\n\t/*::[*/0x0180/*::]*/: 'HEX2BIN',\n\t/*::[*/0x0181/*::]*/: 'HEX2DEC',\n\t/*::[*/0x0182/*::]*/: 'HEX2OCT',\n\t/*::[*/0x0183/*::]*/: 'DEC2BIN',\n\t/*::[*/0x0184/*::]*/: 'DEC2HEX',\n\t/*::[*/0x0185/*::]*/: 'DEC2OCT',\n\t/*::[*/0x0186/*::]*/: 'OCT2BIN',\n\t/*::[*/0x0187/*::]*/: 'OCT2HEX',\n\t/*::[*/0x0188/*::]*/: 'OCT2DEC',\n\t/*::[*/0x0189/*::]*/: 'BIN2DEC',\n\t/*::[*/0x018A/*::]*/: 'BIN2OCT',\n\t/*::[*/0x018B/*::]*/: 'BIN2HEX',\n\t/*::[*/0x018C/*::]*/: 'IMSUB',\n\t/*::[*/0x018D/*::]*/: 'IMDIV',\n\t/*::[*/0x018E/*::]*/: 'IMPOWER',\n\t/*::[*/0x018F/*::]*/: 'IMABS',\n\t/*::[*/0x0190/*::]*/: 'IMSQRT',\n\t/*::[*/0x0191/*::]*/: 'IMLN',\n\t/*::[*/0x0192/*::]*/: 'IMLOG2',\n\t/*::[*/0x0193/*::]*/: 'IMLOG10',\n\t/*::[*/0x0194/*::]*/: 'IMSIN',\n\t/*::[*/0x0195/*::]*/: 'IMCOS',\n\t/*::[*/0x0196/*::]*/: 'IMEXP',\n\t/*::[*/0x0197/*::]*/: 'IMARGUMENT',\n\t/*::[*/0x0198/*::]*/: 'IMCONJUGATE',\n\t/*::[*/0x0199/*::]*/: 'IMAGINARY',\n\t/*::[*/0x019A/*::]*/: 'IMREAL',\n\t/*::[*/0x019B/*::]*/: 'COMPLEX',\n\t/*::[*/0x019C/*::]*/: 'IMSUM',\n\t/*::[*/0x019D/*::]*/: 'IMPRODUCT',\n\t/*::[*/0x019E/*::]*/: 'SERIESSUM',\n\t/*::[*/0x019F/*::]*/: 'FACTDOUBLE',\n\t/*::[*/0x01A0/*::]*/: 'SQRTPI',\n\t/*::[*/0x01A1/*::]*/: 'QUOTIENT',\n\t/*::[*/0x01A2/*::]*/: 'DELTA',\n\t/*::[*/0x01A3/*::]*/: 'GESTEP',\n\t/*::[*/0x01A4/*::]*/: 'ISEVEN',\n\t/*::[*/0x01A5/*::]*/: 'ISODD',\n\t/*::[*/0x01A6/*::]*/: 'MROUND',\n\t/*::[*/0x01A7/*::]*/: 'ERF',\n\t/*::[*/0x01A8/*::]*/: 'ERFC',\n\t/*::[*/0x01A9/*::]*/: 'BESSELJ',\n\t/*::[*/0x01AA/*::]*/: 'BESSELK',\n\t/*::[*/0x01AB/*::]*/: 'BESSELY',\n\t/*::[*/0x01AC/*::]*/: 'BESSELI',\n\t/*::[*/0x01AD/*::]*/: 'XIRR',\n\t/*::[*/0x01AE/*::]*/: 'XNPV',\n\t/*::[*/0x01AF/*::]*/: 'PRICEMAT',\n\t/*::[*/0x01B0/*::]*/: 'YIELDMAT',\n\t/*::[*/0x01B1/*::]*/: 'INTRATE',\n\t/*::[*/0x01B2/*::]*/: 'RECEIVED',\n\t/*::[*/0x01B3/*::]*/: 'DISC',\n\t/*::[*/0x01B4/*::]*/: 'PRICEDISC',\n\t/*::[*/0x01B5/*::]*/: 'YIELDDISC',\n\t/*::[*/0x01B6/*::]*/: 'TBILLEQ',\n\t/*::[*/0x01B7/*::]*/: 'TBILLPRICE',\n\t/*::[*/0x01B8/*::]*/: 'TBILLYIELD',\n\t/*::[*/0x01B9/*::]*/: 'PRICE',\n\t/*::[*/0x01BA/*::]*/: 'YIELD',\n\t/*::[*/0x01BB/*::]*/: 'DOLLARDE',\n\t/*::[*/0x01BC/*::]*/: 'DOLLARFR',\n\t/*::[*/0x01BD/*::]*/: 'NOMINAL',\n\t/*::[*/0x01BE/*::]*/: 'EFFECT',\n\t/*::[*/0x01BF/*::]*/: 'CUMPRINC',\n\t/*::[*/0x01C0/*::]*/: 'CUMIPMT',\n\t/*::[*/0x01C1/*::]*/: 'EDATE',\n\t/*::[*/0x01C2/*::]*/: 'EOMONTH',\n\t/*::[*/0x01C3/*::]*/: 'YEARFRAC',\n\t/*::[*/0x01C4/*::]*/: 'COUPDAYBS',\n\t/*::[*/0x01C5/*::]*/: 'COUPDAYS',\n\t/*::[*/0x01C6/*::]*/: 'COUPDAYSNC',\n\t/*::[*/0x01C7/*::]*/: 'COUPNCD',\n\t/*::[*/0x01C8/*::]*/: 'COUPNUM',\n\t/*::[*/0x01C9/*::]*/: 'COUPPCD',\n\t/*::[*/0x01CA/*::]*/: 'DURATION',\n\t/*::[*/0x01CB/*::]*/: 'MDURATION',\n\t/*::[*/0x01CC/*::]*/: 'ODDLPRICE',\n\t/*::[*/0x01CD/*::]*/: 'ODDLYIELD',\n\t/*::[*/0x01CE/*::]*/: 'ODDFPRICE',\n\t/*::[*/0x01CF/*::]*/: 'ODDFYIELD',\n\t/*::[*/0x01D0/*::]*/: 'RANDBETWEEN',\n\t/*::[*/0x01D1/*::]*/: 'WEEKNUM',\n\t/*::[*/0x01D2/*::]*/: 'AMORDEGRC',\n\t/*::[*/0x01D3/*::]*/: 'AMORLINC',\n\t/*::[*/0x01D4/*::]*/: 'CONVERT',\n\t/*::[*/0x02D4/*::]*/: 'SHEETJS',\n\t/*::[*/0x01D5/*::]*/: 'ACCRINT',\n\t/*::[*/0x01D6/*::]*/: 'ACCRINTM',\n\t/*::[*/0x01D7/*::]*/: 'WORKDAY',\n\t/*::[*/0x01D8/*::]*/: 'NETWORKDAYS',\n\t/*::[*/0x01D9/*::]*/: 'GCD',\n\t/*::[*/0x01DA/*::]*/: 'MULTINOMIAL',\n\t/*::[*/0x01DB/*::]*/: 'LCM',\n\t/*::[*/0x01DC/*::]*/: 'FVSCHEDULE',\n\t/*::[*/0x01DD/*::]*/: 'CUBEKPIMEMBER',\n\t/*::[*/0x01DE/*::]*/: 'CUBESET',\n\t/*::[*/0x01DF/*::]*/: 'CUBESETCOUNT',\n\t/*::[*/0x01E0/*::]*/: 'IFERROR',\n\t/*::[*/0x01E1/*::]*/: 'COUNTIFS',\n\t/*::[*/0x01E2/*::]*/: 'SUMIFS',\n\t/*::[*/0x01E3/*::]*/: 'AVERAGEIF',\n\t/*::[*/0x01E4/*::]*/: 'AVERAGEIFS'\n};\nvar FtabArgc = {\n\t/*::[*/0x0002/*::]*/: 1, /* ISNA */\n\t/*::[*/0x0003/*::]*/: 1, /* ISERROR */\n\t/*::[*/0x000A/*::]*/: 0, /* NA */\n\t/*::[*/0x000F/*::]*/: 1, /* SIN */\n\t/*::[*/0x0010/*::]*/: 1, /* COS */\n\t/*::[*/0x0011/*::]*/: 1, /* TAN */\n\t/*::[*/0x0012/*::]*/: 1, /* ATAN */\n\t/*::[*/0x0013/*::]*/: 0, /* PI */\n\t/*::[*/0x0014/*::]*/: 1, /* SQRT */\n\t/*::[*/0x0015/*::]*/: 1, /* EXP */\n\t/*::[*/0x0016/*::]*/: 1, /* LN */\n\t/*::[*/0x0017/*::]*/: 1, /* LOG10 */\n\t/*::[*/0x0018/*::]*/: 1, /* ABS */\n\t/*::[*/0x0019/*::]*/: 1, /* INT */\n\t/*::[*/0x001A/*::]*/: 1, /* SIGN */\n\t/*::[*/0x001B/*::]*/: 2, /* ROUND */\n\t/*::[*/0x001E/*::]*/: 2, /* REPT */\n\t/*::[*/0x001F/*::]*/: 3, /* MID */\n\t/*::[*/0x0020/*::]*/: 1, /* LEN */\n\t/*::[*/0x0021/*::]*/: 1, /* VALUE */\n\t/*::[*/0x0022/*::]*/: 0, /* TRUE */\n\t/*::[*/0x0023/*::]*/: 0, /* FALSE */\n\t/*::[*/0x0026/*::]*/: 1, /* NOT */\n\t/*::[*/0x0027/*::]*/: 2, /* MOD */\n\t/*::[*/0x0028/*::]*/: 3, /* DCOUNT */\n\t/*::[*/0x0029/*::]*/: 3, /* DSUM */\n\t/*::[*/0x002A/*::]*/: 3, /* DAVERAGE */\n\t/*::[*/0x002B/*::]*/: 3, /* DMIN */\n\t/*::[*/0x002C/*::]*/: 3, /* DMAX */\n\t/*::[*/0x002D/*::]*/: 3, /* DSTDEV */\n\t/*::[*/0x002F/*::]*/: 3, /* DVAR */\n\t/*::[*/0x0030/*::]*/: 2, /* TEXT */\n\t/*::[*/0x0035/*::]*/: 1, /* GOTO */\n\t/*::[*/0x003D/*::]*/: 3, /* MIRR */\n\t/*::[*/0x003F/*::]*/: 0, /* RAND */\n\t/*::[*/0x0041/*::]*/: 3, /* DATE */\n\t/*::[*/0x0042/*::]*/: 3, /* TIME */\n\t/*::[*/0x0043/*::]*/: 1, /* DAY */\n\t/*::[*/0x0044/*::]*/: 1, /* MONTH */\n\t/*::[*/0x0045/*::]*/: 1, /* YEAR */\n\t/*::[*/0x0046/*::]*/: 1, /* WEEKDAY */\n\t/*::[*/0x0047/*::]*/: 1, /* HOUR */\n\t/*::[*/0x0048/*::]*/: 1, /* MINUTE */\n\t/*::[*/0x0049/*::]*/: 1, /* SECOND */\n\t/*::[*/0x004A/*::]*/: 0, /* NOW */\n\t/*::[*/0x004B/*::]*/: 1, /* AREAS */\n\t/*::[*/0x004C/*::]*/: 1, /* ROWS */\n\t/*::[*/0x004D/*::]*/: 1, /* COLUMNS */\n\t/*::[*/0x004F/*::]*/: 2, /* ABSREF */\n\t/*::[*/0x0050/*::]*/: 2, /* RELREF */\n\t/*::[*/0x0053/*::]*/: 1, /* TRANSPOSE */\n\t/*::[*/0x0055/*::]*/: 0, /* STEP */\n\t/*::[*/0x0056/*::]*/: 1, /* TYPE */\n\t/*::[*/0x0059/*::]*/: 0, /* CALLER */\n\t/*::[*/0x005A/*::]*/: 1, /* DEREF */\n\t/*::[*/0x005E/*::]*/: 0, /* ACTIVE.CELL */\n\t/*::[*/0x005F/*::]*/: 0, /* SELECTION */\n\t/*::[*/0x0061/*::]*/: 2, /* ATAN2 */\n\t/*::[*/0x0062/*::]*/: 1, /* ASIN */\n\t/*::[*/0x0063/*::]*/: 1, /* ACOS */\n\t/*::[*/0x0065/*::]*/: 3, /* HLOOKUP */\n\t/*::[*/0x0066/*::]*/: 3, /* VLOOKUP */\n\t/*::[*/0x0069/*::]*/: 1, /* ISREF */\n\t/*::[*/0x006A/*::]*/: 1, /* GET.FORMULA */\n\t/*::[*/0x006C/*::]*/: 2, /* SET.VALUE */\n\t/*::[*/0x006F/*::]*/: 1, /* CHAR */\n\t/*::[*/0x0070/*::]*/: 1, /* LOWER */\n\t/*::[*/0x0071/*::]*/: 1, /* UPPER */\n\t/*::[*/0x0072/*::]*/: 1, /* PROPER */\n\t/*::[*/0x0075/*::]*/: 2, /* EXACT */\n\t/*::[*/0x0076/*::]*/: 1, /* TRIM */\n\t/*::[*/0x0077/*::]*/: 4, /* REPLACE */\n\t/*::[*/0x0079/*::]*/: 1, /* CODE */\n\t/*::[*/0x007E/*::]*/: 1, /* ISERR */\n\t/*::[*/0x007F/*::]*/: 1, /* ISTEXT */\n\t/*::[*/0x0080/*::]*/: 1, /* ISNUMBER */\n\t/*::[*/0x0081/*::]*/: 1, /* ISBLANK */\n\t/*::[*/0x0082/*::]*/: 1, /* T */\n\t/*::[*/0x0083/*::]*/: 1, /* N */\n\t/*::[*/0x0085/*::]*/: 1, /* FCLOSE */\n\t/*::[*/0x0086/*::]*/: 1, /* FSIZE */\n\t/*::[*/0x0087/*::]*/: 1, /* FREADLN */\n\t/*::[*/0x0088/*::]*/: 2, /* FREAD */\n\t/*::[*/0x0089/*::]*/: 2, /* FWRITELN */\n\t/*::[*/0x008A/*::]*/: 2, /* FWRITE */\n\t/*::[*/0x008C/*::]*/: 1, /* DATEVALUE */\n\t/*::[*/0x008D/*::]*/: 1, /* TIMEVALUE */\n\t/*::[*/0x008E/*::]*/: 3, /* SLN */\n\t/*::[*/0x008F/*::]*/: 4, /* SYD */\n\t/*::[*/0x0090/*::]*/: 4, /* DDB */\n\t/*::[*/0x00A1/*::]*/: 1, /* DIALOG.BOX */\n\t/*::[*/0x00A2/*::]*/: 1, /* CLEAN */\n\t/*::[*/0x00A3/*::]*/: 1, /* MDETERM */\n\t/*::[*/0x00A4/*::]*/: 1, /* MINVERSE */\n\t/*::[*/0x00A5/*::]*/: 2, /* MMULT */\n\t/*::[*/0x00AC/*::]*/: 1, /* WHILE */\n\t/*::[*/0x00AF/*::]*/: 2, /* INITIATE */\n\t/*::[*/0x00B0/*::]*/: 2, /* REQUEST */\n\t/*::[*/0x00B1/*::]*/: 3, /* POKE */\n\t/*::[*/0x00B2/*::]*/: 2, /* EXECUTE */\n\t/*::[*/0x00B3/*::]*/: 1, /* TERMINATE */\n\t/*::[*/0x00B8/*::]*/: 1, /* FACT */\n\t/*::[*/0x00BA/*::]*/: 1, /* GET.WORKSPACE */\n\t/*::[*/0x00BD/*::]*/: 3, /* DPRODUCT */\n\t/*::[*/0x00BE/*::]*/: 1, /* ISNONTEXT */\n\t/*::[*/0x00C3/*::]*/: 3, /* DSTDEVP */\n\t/*::[*/0x00C4/*::]*/: 3, /* DVARP */\n\t/*::[*/0x00C5/*::]*/: 1, /* TRUNC */\n\t/*::[*/0x00C6/*::]*/: 1, /* ISLOGICAL */\n\t/*::[*/0x00C7/*::]*/: 3, /* DCOUNTA */\n\t/*::[*/0x00C9/*::]*/: 1, /* UNREGISTER */\n\t/*::[*/0x00CF/*::]*/: 4, /* REPLACEB */\n\t/*::[*/0x00D2/*::]*/: 3, /* MIDB */\n\t/*::[*/0x00D3/*::]*/: 1, /* LENB */\n\t/*::[*/0x00D4/*::]*/: 2, /* ROUNDUP */\n\t/*::[*/0x00D5/*::]*/: 2, /* ROUNDDOWN */\n\t/*::[*/0x00D6/*::]*/: 1, /* ASC */\n\t/*::[*/0x00D7/*::]*/: 1, /* DBCS */\n\t/*::[*/0x00E1/*::]*/: 0, /* END.IF */\n\t/*::[*/0x00E5/*::]*/: 1, /* SINH */\n\t/*::[*/0x00E6/*::]*/: 1, /* COSH */\n\t/*::[*/0x00E7/*::]*/: 1, /* TANH */\n\t/*::[*/0x00E8/*::]*/: 1, /* ASINH */\n\t/*::[*/0x00E9/*::]*/: 1, /* ACOSH */\n\t/*::[*/0x00EA/*::]*/: 1, /* ATANH */\n\t/*::[*/0x00EB/*::]*/: 3, /* DGET */\n\t/*::[*/0x00F4/*::]*/: 1, /* INFO */\n\t/*::[*/0x00F7/*::]*/: 4, /* DB */\n\t/*::[*/0x00FC/*::]*/: 2, /* FREQUENCY */\n\t/*::[*/0x0101/*::]*/: 1, /* EVALUATE */\n\t/*::[*/0x0105/*::]*/: 1, /* ERROR.TYPE */\n\t/*::[*/0x010F/*::]*/: 1, /* GAMMALN */\n\t/*::[*/0x0111/*::]*/: 4, /* BINOMDIST */\n\t/*::[*/0x0112/*::]*/: 2, /* CHIDIST */\n\t/*::[*/0x0113/*::]*/: 2, /* CHIINV */\n\t/*::[*/0x0114/*::]*/: 2, /* COMBIN */\n\t/*::[*/0x0115/*::]*/: 3, /* CONFIDENCE */\n\t/*::[*/0x0116/*::]*/: 3, /* CRITBINOM */\n\t/*::[*/0x0117/*::]*/: 1, /* EVEN */\n\t/*::[*/0x0118/*::]*/: 3, /* EXPONDIST */\n\t/*::[*/0x0119/*::]*/: 3, /* FDIST */\n\t/*::[*/0x011A/*::]*/: 3, /* FINV */\n\t/*::[*/0x011B/*::]*/: 1, /* FISHER */\n\t/*::[*/0x011C/*::]*/: 1, /* FISHERINV */\n\t/*::[*/0x011D/*::]*/: 2, /* FLOOR */\n\t/*::[*/0x011E/*::]*/: 4, /* GAMMADIST */\n\t/*::[*/0x011F/*::]*/: 3, /* GAMMAINV */\n\t/*::[*/0x0120/*::]*/: 2, /* CEILING */\n\t/*::[*/0x0121/*::]*/: 4, /* HYPGEOMDIST */\n\t/*::[*/0x0122/*::]*/: 3, /* LOGNORMDIST */\n\t/*::[*/0x0123/*::]*/: 3, /* LOGINV */\n\t/*::[*/0x0124/*::]*/: 3, /* NEGBINOMDIST */\n\t/*::[*/0x0125/*::]*/: 4, /* NORMDIST */\n\t/*::[*/0x0126/*::]*/: 1, /* NORMSDIST */\n\t/*::[*/0x0127/*::]*/: 3, /* NORMINV */\n\t/*::[*/0x0128/*::]*/: 1, /* NORMSINV */\n\t/*::[*/0x0129/*::]*/: 3, /* STANDARDIZE */\n\t/*::[*/0x012A/*::]*/: 1, /* ODD */\n\t/*::[*/0x012B/*::]*/: 2, /* PERMUT */\n\t/*::[*/0x012C/*::]*/: 3, /* POISSON */\n\t/*::[*/0x012D/*::]*/: 3, /* TDIST */\n\t/*::[*/0x012E/*::]*/: 4, /* WEIBULL */\n\t/*::[*/0x012F/*::]*/: 2, /* SUMXMY2 */\n\t/*::[*/0x0130/*::]*/: 2, /* SUMX2MY2 */\n\t/*::[*/0x0131/*::]*/: 2, /* SUMX2PY2 */\n\t/*::[*/0x0132/*::]*/: 2, /* CHITEST */\n\t/*::[*/0x0133/*::]*/: 2, /* CORREL */\n\t/*::[*/0x0134/*::]*/: 2, /* COVAR */\n\t/*::[*/0x0135/*::]*/: 3, /* FORECAST */\n\t/*::[*/0x0136/*::]*/: 2, /* FTEST */\n\t/*::[*/0x0137/*::]*/: 2, /* INTERCEPT */\n\t/*::[*/0x0138/*::]*/: 2, /* PEARSON */\n\t/*::[*/0x0139/*::]*/: 2, /* RSQ */\n\t/*::[*/0x013A/*::]*/: 2, /* STEYX */\n\t/*::[*/0x013B/*::]*/: 2, /* SLOPE */\n\t/*::[*/0x013C/*::]*/: 4, /* TTEST */\n\t/*::[*/0x0145/*::]*/: 2, /* LARGE */\n\t/*::[*/0x0146/*::]*/: 2, /* SMALL */\n\t/*::[*/0x0147/*::]*/: 2, /* QUARTILE */\n\t/*::[*/0x0148/*::]*/: 2, /* PERCENTILE */\n\t/*::[*/0x014B/*::]*/: 2, /* TRIMMEAN */\n\t/*::[*/0x014C/*::]*/: 2, /* TINV */\n\t/*::[*/0x0151/*::]*/: 2, /* POWER */\n\t/*::[*/0x0156/*::]*/: 1, /* RADIANS */\n\t/*::[*/0x0157/*::]*/: 1, /* DEGREES */\n\t/*::[*/0x015A/*::]*/: 2, /* COUNTIF */\n\t/*::[*/0x015B/*::]*/: 1, /* COUNTBLANK */\n\t/*::[*/0x015E/*::]*/: 4, /* ISPMT */\n\t/*::[*/0x015F/*::]*/: 3, /* DATEDIF */\n\t/*::[*/0x0160/*::]*/: 1, /* DATESTRING */\n\t/*::[*/0x0161/*::]*/: 2, /* NUMBERSTRING */\n\t/*::[*/0x0168/*::]*/: 1, /* PHONETIC */\n\t/*::[*/0x0170/*::]*/: 1, /* BAHTTEXT */\n\t/*::[*/0x0171/*::]*/: 1, /* THAIDAYOFWEEK */\n\t/*::[*/0x0172/*::]*/: 1, /* THAIDIGIT */\n\t/*::[*/0x0173/*::]*/: 1, /* THAIMONTHOFYEAR */\n\t/*::[*/0x0174/*::]*/: 1, /* THAINUMSOUND */\n\t/*::[*/0x0175/*::]*/: 1, /* THAINUMSTRING */\n\t/*::[*/0x0176/*::]*/: 1, /* THAISTRINGLENGTH */\n\t/*::[*/0x0177/*::]*/: 1, /* ISTHAIDIGIT */\n\t/*::[*/0x0178/*::]*/: 1, /* ROUNDBAHTDOWN */\n\t/*::[*/0x0179/*::]*/: 1, /* ROUNDBAHTUP */\n\t/*::[*/0x017A/*::]*/: 1, /* THAIYEAR */\n\t/*::[*/0x017E/*::]*/: 3, /* CUBEMEMBERPROPERTY */\n\t/*::[*/0x0181/*::]*/: 1, /* HEX2DEC */\n\t/*::[*/0x0188/*::]*/: 1, /* OCT2DEC */\n\t/*::[*/0x0189/*::]*/: 1, /* BIN2DEC */\n\t/*::[*/0x018C/*::]*/: 2, /* IMSUB */\n\t/*::[*/0x018D/*::]*/: 2, /* IMDIV */\n\t/*::[*/0x018E/*::]*/: 2, /* IMPOWER */\n\t/*::[*/0x018F/*::]*/: 1, /* IMABS */\n\t/*::[*/0x0190/*::]*/: 1, /* IMSQRT */\n\t/*::[*/0x0191/*::]*/: 1, /* IMLN */\n\t/*::[*/0x0192/*::]*/: 1, /* IMLOG2 */\n\t/*::[*/0x0193/*::]*/: 1, /* IMLOG10 */\n\t/*::[*/0x0194/*::]*/: 1, /* IMSIN */\n\t/*::[*/0x0195/*::]*/: 1, /* IMCOS */\n\t/*::[*/0x0196/*::]*/: 1, /* IMEXP */\n\t/*::[*/0x0197/*::]*/: 1, /* IMARGUMENT */\n\t/*::[*/0x0198/*::]*/: 1, /* IMCONJUGATE */\n\t/*::[*/0x0199/*::]*/: 1, /* IMAGINARY */\n\t/*::[*/0x019A/*::]*/: 1, /* IMREAL */\n\t/*::[*/0x019E/*::]*/: 4, /* SERIESSUM */\n\t/*::[*/0x019F/*::]*/: 1, /* FACTDOUBLE */\n\t/*::[*/0x01A0/*::]*/: 1, /* SQRTPI */\n\t/*::[*/0x01A1/*::]*/: 2, /* QUOTIENT */\n\t/*::[*/0x01A4/*::]*/: 1, /* ISEVEN */\n\t/*::[*/0x01A5/*::]*/: 1, /* ISODD */\n\t/*::[*/0x01A6/*::]*/: 2, /* MROUND */\n\t/*::[*/0x01A8/*::]*/: 1, /* ERFC */\n\t/*::[*/0x01A9/*::]*/: 2, /* BESSELJ */\n\t/*::[*/0x01AA/*::]*/: 2, /* BESSELK */\n\t/*::[*/0x01AB/*::]*/: 2, /* BESSELY */\n\t/*::[*/0x01AC/*::]*/: 2, /* BESSELI */\n\t/*::[*/0x01AE/*::]*/: 3, /* XNPV */\n\t/*::[*/0x01B6/*::]*/: 3, /* TBILLEQ */\n\t/*::[*/0x01B7/*::]*/: 3, /* TBILLPRICE */\n\t/*::[*/0x01B8/*::]*/: 3, /* TBILLYIELD */\n\t/*::[*/0x01BB/*::]*/: 2, /* DOLLARDE */\n\t/*::[*/0x01BC/*::]*/: 2, /* DOLLARFR */\n\t/*::[*/0x01BD/*::]*/: 2, /* NOMINAL */\n\t/*::[*/0x01BE/*::]*/: 2, /* EFFECT */\n\t/*::[*/0x01BF/*::]*/: 6, /* CUMPRINC */\n\t/*::[*/0x01C0/*::]*/: 6, /* CUMIPMT */\n\t/*::[*/0x01C1/*::]*/: 2, /* EDATE */\n\t/*::[*/0x01C2/*::]*/: 2, /* EOMONTH */\n\t/*::[*/0x01D0/*::]*/: 2, /* RANDBETWEEN */\n\t/*::[*/0x01D4/*::]*/: 3, /* CONVERT */\n\t/*::[*/0x01DC/*::]*/: 2, /* FVSCHEDULE */\n\t/*::[*/0x01DF/*::]*/: 1, /* CUBESETCOUNT */\n\t/*::[*/0x01E0/*::]*/: 2, /* IFERROR */\n\t/*::[*/0xFFFF/*::]*/: 0\n};\n/* [MS-XLSX] 2.2.3 Functions */\n/* [MS-XLSB] 2.5.97.10 Ftab */\nvar XLSXFutureFunctions = {\n\t\"_xlfn.ACOT\": \"ACOT\",\n\t\"_xlfn.ACOTH\": \"ACOTH\",\n\t\"_xlfn.AGGREGATE\": \"AGGREGATE\",\n\t\"_xlfn.ARABIC\": \"ARABIC\",\n\t\"_xlfn.AVERAGEIF\": \"AVERAGEIF\",\n\t\"_xlfn.AVERAGEIFS\": \"AVERAGEIFS\",\n\t\"_xlfn.BASE\": \"BASE\",\n\t\"_xlfn.BETA.DIST\": \"BETA.DIST\",\n\t\"_xlfn.BETA.INV\": \"BETA.INV\",\n\t\"_xlfn.BINOM.DIST\": \"BINOM.DIST\",\n\t\"_xlfn.BINOM.DIST.RANGE\": \"BINOM.DIST.RANGE\",\n\t\"_xlfn.BINOM.INV\": \"BINOM.INV\",\n\t\"_xlfn.BITAND\": \"BITAND\",\n\t\"_xlfn.BITLSHIFT\": \"BITLSHIFT\",\n\t\"_xlfn.BITOR\": \"BITOR\",\n\t\"_xlfn.BITRSHIFT\": \"BITRSHIFT\",\n\t\"_xlfn.BITXOR\": \"BITXOR\",\n\t\"_xlfn.CEILING.MATH\": \"CEILING.MATH\",\n\t\"_xlfn.CEILING.PRECISE\": \"CEILING.PRECISE\",\n\t\"_xlfn.CHISQ.DIST\": \"CHISQ.DIST\",\n\t\"_xlfn.CHISQ.DIST.RT\": \"CHISQ.DIST.RT\",\n\t\"_xlfn.CHISQ.INV\": \"CHISQ.INV\",\n\t\"_xlfn.CHISQ.INV.RT\": \"CHISQ.INV.RT\",\n\t\"_xlfn.CHISQ.TEST\": \"CHISQ.TEST\",\n\t\"_xlfn.COMBINA\": \"COMBINA\",\n\t\"_xlfn.CONCAT\": \"CONCAT\",\n\t\"_xlfn.CONFIDENCE.NORM\": \"CONFIDENCE.NORM\",\n\t\"_xlfn.CONFIDENCE.T\": \"CONFIDENCE.T\",\n\t\"_xlfn.COT\": \"COT\",\n\t\"_xlfn.COTH\": \"COTH\",\n\t\"_xlfn.COUNTIFS\": \"COUNTIFS\",\n\t\"_xlfn.COVARIANCE.P\": \"COVARIANCE.P\",\n\t\"_xlfn.COVARIANCE.S\": \"COVARIANCE.S\",\n\t\"_xlfn.CSC\": \"CSC\",\n\t\"_xlfn.CSCH\": \"CSCH\",\n\t\"_xlfn.DAYS\": \"DAYS\",\n\t\"_xlfn.DECIMAL\": \"DECIMAL\",\n\t\"_xlfn.ECMA.CEILING\": \"ECMA.CEILING\",\n\t\"_xlfn.ERF.PRECISE\": \"ERF.PRECISE\",\n\t\"_xlfn.ERFC.PRECISE\": \"ERFC.PRECISE\",\n\t\"_xlfn.EXPON.DIST\": \"EXPON.DIST\",\n\t\"_xlfn.F.DIST\": \"F.DIST\",\n\t\"_xlfn.F.DIST.RT\": \"F.DIST.RT\",\n\t\"_xlfn.F.INV\": \"F.INV\",\n\t\"_xlfn.F.INV.RT\": \"F.INV.RT\",\n\t\"_xlfn.F.TEST\": \"F.TEST\",\n\t\"_xlfn.FILTERXML\": \"FILTERXML\",\n\t\"_xlfn.FLOOR.MATH\": \"FLOOR.MATH\",\n\t\"_xlfn.FLOOR.PRECISE\": \"FLOOR.PRECISE\",\n\t\"_xlfn.FORECAST.ETS\": \"FORECAST.ETS\",\n\t\"_xlfn.FORECAST.ETS.CONFINT\": \"FORECAST.ETS.CONFINT\",\n\t\"_xlfn.FORECAST.ETS.SEASONALITY\": \"FORECAST.ETS.SEASONALITY\",\n\t\"_xlfn.FORECAST.ETS.STAT\": \"FORECAST.ETS.STAT\",\n\t\"_xlfn.FORECAST.LINEAR\": \"FORECAST.LINEAR\",\n\t\"_xlfn.FORMULATEXT\": \"FORMULATEXT\",\n\t\"_xlfn.GAMMA\": \"GAMMA\",\n\t\"_xlfn.GAMMA.DIST\": \"GAMMA.DIST\",\n\t\"_xlfn.GAMMA.INV\": \"GAMMA.INV\",\n\t\"_xlfn.GAMMALN.PRECISE\": \"GAMMALN.PRECISE\",\n\t\"_xlfn.GAUSS\": \"GAUSS\",\n\t\"_xlfn.HYPGEOM.DIST\": \"HYPGEOM.DIST\",\n\t\"_xlfn.IFERROR\": \"IFERROR\",\n\t\"_xlfn.IFNA\": \"IFNA\",\n\t\"_xlfn.IFS\": \"IFS\",\n\t\"_xlfn.IMCOSH\": \"IMCOSH\",\n\t\"_xlfn.IMCOT\": \"IMCOT\",\n\t\"_xlfn.IMCSC\": \"IMCSC\",\n\t\"_xlfn.IMCSCH\": \"IMCSCH\",\n\t\"_xlfn.IMSEC\": \"IMSEC\",\n\t\"_xlfn.IMSECH\": \"IMSECH\",\n\t\"_xlfn.IMSINH\": \"IMSINH\",\n\t\"_xlfn.IMTAN\": \"IMTAN\",\n\t\"_xlfn.ISFORMULA\": \"ISFORMULA\",\n\t\"_xlfn.ISO.CEILING\": \"ISO.CEILING\",\n\t\"_xlfn.ISOWEEKNUM\": \"ISOWEEKNUM\",\n\t\"_xlfn.LOGNORM.DIST\": \"LOGNORM.DIST\",\n\t\"_xlfn.LOGNORM.INV\": \"LOGNORM.INV\",\n\t\"_xlfn.MAXIFS\": \"MAXIFS\",\n\t\"_xlfn.MINIFS\": \"MINIFS\",\n\t\"_xlfn.MODE.MULT\": \"MODE.MULT\",\n\t\"_xlfn.MODE.SNGL\": \"MODE.SNGL\",\n\t\"_xlfn.MUNIT\": \"MUNIT\",\n\t\"_xlfn.NEGBINOM.DIST\": \"NEGBINOM.DIST\",\n\t\"_xlfn.NETWORKDAYS.INTL\": \"NETWORKDAYS.INTL\",\n\t\"_xlfn.NIGBINOM\": \"NIGBINOM\",\n\t\"_xlfn.NORM.DIST\": \"NORM.DIST\",\n\t\"_xlfn.NORM.INV\": \"NORM.INV\",\n\t\"_xlfn.NORM.S.DIST\": \"NORM.S.DIST\",\n\t\"_xlfn.NORM.S.INV\": \"NORM.S.INV\",\n\t\"_xlfn.NUMBERVALUE\": \"NUMBERVALUE\",\n\t\"_xlfn.PDURATION\": \"PDURATION\",\n\t\"_xlfn.PERCENTILE.EXC\": \"PERCENTILE.EXC\",\n\t\"_xlfn.PERCENTILE.INC\": \"PERCENTILE.INC\",\n\t\"_xlfn.PERCENTRANK.EXC\": \"PERCENTRANK.EXC\",\n\t\"_xlfn.PERCENTRANK.INC\": \"PERCENTRANK.INC\",\n\t\"_xlfn.PERMUTATIONA\": \"PERMUTATIONA\",\n\t\"_xlfn.PHI\": \"PHI\",\n\t\"_xlfn.POISSON.DIST\": \"POISSON.DIST\",\n\t\"_xlfn.QUARTILE.EXC\": \"QUARTILE.EXC\",\n\t\"_xlfn.QUARTILE.INC\": \"QUARTILE.INC\",\n\t\"_xlfn.QUERYSTRING\": \"QUERYSTRING\",\n\t\"_xlfn.RANK.AVG\": \"RANK.AVG\",\n\t\"_xlfn.RANK.EQ\": \"RANK.EQ\",\n\t\"_xlfn.RRI\": \"RRI\",\n\t\"_xlfn.SEC\": \"SEC\",\n\t\"_xlfn.SECH\": \"SECH\",\n\t\"_xlfn.SHEET\": \"SHEET\",\n\t\"_xlfn.SHEETS\": \"SHEETS\",\n\t\"_xlfn.SKEW.P\": \"SKEW.P\",\n\t\"_xlfn.STDEV.P\": \"STDEV.P\",\n\t\"_xlfn.STDEV.S\": \"STDEV.S\",\n\t\"_xlfn.SUMIFS\": \"SUMIFS\",\n\t\"_xlfn.SWITCH\": \"SWITCH\",\n\t\"_xlfn.T.DIST\": \"T.DIST\",\n\t\"_xlfn.T.DIST.2T\": \"T.DIST.2T\",\n\t\"_xlfn.T.DIST.RT\": \"T.DIST.RT\",\n\t\"_xlfn.T.INV\": \"T.INV\",\n\t\"_xlfn.T.INV.2T\": \"T.INV.2T\",\n\t\"_xlfn.T.TEST\": \"T.TEST\",\n\t\"_xlfn.TEXTJOIN\": \"TEXTJOIN\",\n\t\"_xlfn.UNICHAR\": \"UNICHAR\",\n\t\"_xlfn.UNICODE\": \"UNICODE\",\n\t\"_xlfn.VAR.P\": \"VAR.P\",\n\t\"_xlfn.VAR.S\": \"VAR.S\",\n\t\"_xlfn.WEBSERVICE\": \"WEBSERVICE\",\n\t\"_xlfn.WEIBULL.DIST\": \"WEIBULL.DIST\",\n\t\"_xlfn.WORKDAY.INTL\": \"WORKDAY.INTL\",\n\t\"_xlfn.XOR\": \"XOR\",\n\t\"_xlfn.Z.TEST\": \"Z.TEST\"\n};\n\n/* Part 3 TODO: actually parse formulae */\nfunction ods_to_csf_formula(f/*:string*/)/*:string*/ {\n\tif(f.slice(0,3) == \"of:\") f = f.slice(3);\n\t/* 5.2 Basic Expressions */\n\tif(f.charCodeAt(0) == 61) {\n\t\tf = f.slice(1);\n\t\tif(f.charCodeAt(0) == 61) f = f.slice(1);\n\t}\n\tf = f.replace(/COM\\.MICROSOFT\\./g, \"\");\n\t/* Part 3 Section 5.8 References */\n\tf = f.replace(/\\[((?:\\.[A-Z]+[0-9]+)(?::\\.[A-Z]+[0-9]+)?)\\]/g, function($$, $1) { return $1.replace(/\\./g,\"\"); });\n\t/* TODO: something other than this */\n\tf = f.replace(/\\[.(#[A-Z]*[?!])\\]/g, \"$1\");\n\treturn f.replace(/[;~]/g,\",\").replace(/\\|/g,\";\");\n}\n\nfunction csf_to_ods_formula(f/*:string*/)/*:string*/ {\n\tvar o = \"of:=\" + f.replace(crefregex, \"$1[.$2$3$4$5]\").replace(/\\]:\\[/g,\":\");\n\t/* TODO: something other than this */\n\treturn o.replace(/;/g, \"|\").replace(/,/g,\";\");\n}\n\nfunction ods_to_csf_3D(r/*:string*/)/*:[string, string]*/ {\n\tvar a = r.split(\":\");\n\tvar s = a[0].split(\".\")[0];\n\treturn [s, a[0].split(\".\")[1] + (a.length > 1 ? (\":\" + (a[1].split(\".\")[1] || a[1].split(\".\")[0])) : \"\")];\n}\n\nfunction csf_to_ods_3D(r/*:string*/)/*:string*/ {\n\treturn r.replace(/\\./,\"!\");\n}\n\nvar strs = {}; // shared strings\nvar _ssfopts = {}; // spreadsheet formatting options\n\nRELS.WS = [\n\t\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\",\n\t\"http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet\"\n];\n\n/*global Map */\nvar browser_has_Map = typeof Map !== 'undefined';\n\nfunction get_sst_id(sst/*:SST*/, str/*:string*/, rev)/*:number*/ {\n\tvar i = 0, len = sst.length;\n\tif(rev) {\n\t\tif(browser_has_Map ? rev.has(str) : Object.prototype.hasOwnProperty.call(rev, str)) {\n\t\t\tvar revarr = browser_has_Map ? rev.get(str) : rev[str];\n\t\t\tfor(; i < revarr.length; ++i) {\n\t\t\t\tif(sst[revarr[i]].t === str) { sst.Count ++; return revarr[i]; }\n\t\t\t}\n\t\t}\n\t} else for(; i < len; ++i) {\n\t\tif(sst[i].t === str) { sst.Count ++; return i; }\n\t}\n\tsst[len] = ({t:str}/*:any*/); sst.Count ++; sst.Unique ++;\n\tif(rev) {\n\t\tif(browser_has_Map) {\n\t\t\tif(!rev.has(str)) rev.set(str, []);\n\t\t\trev.get(str).push(len);\n\t\t} else {\n\t\t\tif(!Object.prototype.hasOwnProperty.call(rev, str)) rev[str] = [];\n\t\t\trev[str].push(len);\n\t\t}\n\t}\n\treturn len;\n}\n\nfunction col_obj_w(C/*:number*/, col) {\n\tvar p = ({min:C+1,max:C+1}/*:any*/);\n\t/* wch (chars), wpx (pixels) */\n\tvar wch = -1;\n\tif(col.MDW) MDW = col.MDW;\n\tif(col.width != null) p.customWidth = 1;\n\telse if(col.wpx != null) wch = px2char(col.wpx);\n\telse if(col.wch != null) wch = col.wch;\n\tif(wch > -1) { p.width = char2width(wch); p.customWidth = 1; }\n\telse if(col.width != null) p.width = col.width;\n\tif(col.hidden) p.hidden = true;\n\tif(col.level != null) { p.outlineLevel = p.level = col.level; }\n\treturn p;\n}\n\nfunction default_margins(margins/*:Margins*/, mode/*:?string*/) {\n\tif(!margins) return;\n\tvar defs = [0.7, 0.7, 0.75, 0.75, 0.3, 0.3];\n\tif(mode == 'xlml') defs = [1, 1, 1, 1, 0.5, 0.5];\n\tif(margins.left == null) margins.left = defs[0];\n\tif(margins.right == null) margins.right = defs[1];\n\tif(margins.top == null) margins.top = defs[2];\n\tif(margins.bottom == null) margins.bottom = defs[3];\n\tif(margins.header == null) margins.header = defs[4];\n\tif(margins.footer == null) margins.footer = defs[5];\n}\n\nfunction get_cell_style(styles/*:Array*/, cell/*:Cell*/, opts) {\n\tvar z = opts.revssf[cell.z != null ? cell.z : \"General\"];\n\tvar i = 0x3c, len = styles.length;\n\tif(z == null && opts.ssf) {\n\t\tfor(; i < 0x188; ++i) if(opts.ssf[i] == null) {\n\t\t\tSSF.load(cell.z, i);\n\t\t\t// $FlowIgnore\n\t\t\topts.ssf[i] = cell.z;\n\t\t\topts.revssf[cell.z] = z = i;\n\t\t\tbreak;\n\t\t}\n\t}\n\tfor(i = 0; i != len; ++i) if(styles[i].numFmtId === z) return i;\n\tstyles[len] = {\n\t\tnumFmtId:z,\n\t\tfontId:0,\n\t\tfillId:0,\n\t\tborderId:0,\n\t\txfId:0,\n\t\tapplyNumberFormat:1\n\t};\n\treturn len;\n}\n\nfunction safe_format(p/*:Cell*/, fmtid/*:number*/, fillid/*:?number*/, opts, themes, styles) {\n\ttry {\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(p.t === 'z' && !opts.cellStyles) return;\n\tif(p.t === 'd' && typeof p.v === 'string') p.v = parseDate(p.v);\n\tif((!opts || opts.cellText !== false) && p.t !== 'z') try {\n\t\tif(SSF._table[fmtid] == null) SSF.load(SSFImplicit[fmtid] || \"General\", fmtid);\n\t\tif(p.t === 'e') p.w = p.w || BErr[p.v];\n\t\telse if(fmtid === 0) {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse if(p.t === 'd') {\n\t\t\t\tvar dd = datenum(p.v);\n\t\t\t\tif((dd|0) === dd) p.w = SSF._general_int(dd);\n\t\t\t\telse p.w = SSF._general_num(dd);\n\t\t\t}\n\t\t\telse if(p.v === undefined) return \"\";\n\t\t\telse p.w = SSF._general(p.v,_ssfopts);\n\t\t}\n\t\telse if(p.t === 'd') p.w = SSF.format(fmtid,datenum(p.v),_ssfopts);\n\t\telse p.w = SSF.format(fmtid,p.v,_ssfopts);\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts.cellStyles) return;\n\tif(fillid != null) try {\n\t\tp.s = styles.Fills[fillid];\n\t\tif (p.s.fgColor && p.s.fgColor.theme && !p.s.fgColor.rgb) {\n\t\t\tp.s.fgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb, p.s.fgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.fgColor.raw_rgb = themes.themeElements.clrScheme[p.s.fgColor.theme].rgb;\n\t\t}\n\t\tif (p.s.bgColor && p.s.bgColor.theme) {\n\t\t\tp.s.bgColor.rgb = rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb, p.s.bgColor.tint || 0);\n\t\t\tif(opts.WTF) p.s.bgColor.raw_rgb = themes.themeElements.clrScheme[p.s.bgColor.theme].rgb;\n\t\t}\n\t} catch(e) { if(opts.WTF && styles.Fills) throw e; }\n}\n\nfunction check_ws(ws/*:Worksheet*/, sname/*:string*/, i/*:number*/) {\n\tif(ws && ws['!ref']) {\n\t\tvar range = safe_decode_range(ws['!ref']);\n\t\tif(range.e.c < range.s.c || range.e.r < range.s.r) throw new Error(\"Bad range (\" + i + \"): \" + ws['!ref']);\n\t}\n}\nfunction parse_ws_xml_dim(ws/*:Worksheet*/, s/*:string*/) {\n\tvar d = safe_decode_range(s);\n\tif(d.s.r<=d.e.r && d.s.c<=d.e.c && d.s.r>=0 && d.s.c>=0) ws[\"!ref\"] = encode_range(d);\n}\nvar mergecregex = /<(?:\\w:)?mergeCell ref=\"[A-Z0-9:]+\"\\s*[\\/]?>/g;\nvar sheetdataregex = /<(?:\\w+:)?sheetData[^>]*>([\\s\\S]*)<\\/(?:\\w+:)?sheetData>/;\nvar hlinkregex = /<(?:\\w:)?hyperlink [^>]*>/mg;\nvar dimregex = /\"(\\w*:\\w*)\"/;\nvar colregex = /<(?:\\w:)?col\\b[^>]*[\\/]?>/g;\nvar afregex = /<(?:\\w:)?autoFilter[^>]*([\\/]|>([\\s\\S]*)<\\/(?:\\w:)?autoFilter)>/g;\nvar marginregex= /<(?:\\w:)?pageMargins[^>]*\\/>/g;\nvar sheetprregex = /<(?:\\w:)?sheetPr\\b(?:[^>a-z][^>]*)?\\/>/;\nvar sheetprregex2= /<(?:\\w:)?sheetPr[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetPr)>/;\nvar svsregex = /<(?:\\w:)?sheetViews[^>]*(?:[\\/]|>([\\s\\S]*)<\\/(?:\\w:)?sheetViews)>/;\n\n/* 18.3 Worksheets */\nfunction parse_ws_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\n\t/* 18.3.1.99 worksheet CT_Worksheet */\n\tvar s = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\tvar refguess/*:Range*/ = ({s: {r:2000000, c:2000000}, e: {r:0, c:0} }/*:any*/);\n\n\tvar data1 = \"\", data2 = \"\";\n\tvar mtch/*:?any*/ = data.match(sheetdataregex);\n\tif(mtch) {\n\t\tdata1 = data.slice(0, mtch.index);\n\t\tdata2 = data.slice(mtch.index + mtch[0].length);\n\t} else data1 = data2 = data;\n\n\t/* 18.3.1.82 sheetPr CT_SheetPr */\n\tvar sheetPr = data1.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\telse if((sheetPr = data1.match(sheetprregex2))) parse_ws_xml_sheetpr2(sheetPr[0], sheetPr[1]||\"\", s, wb, idx, styles, themes);\n\n\t/* 18.3.1.35 dimension CT_SheetDimension */\n\tvar ridx = (data1.match(/<(?:\\w*:)?dimension/)||{index:-1}).index;\n\tif(ridx > 0) {\n\t\tvar ref = data1.slice(ridx,ridx+50).match(dimregex);\n\t\tif(ref) parse_ws_xml_dim(s, ref[1]);\n\t}\n\n\t/* 18.3.1.88 sheetViews CT_SheetViews */\n\tvar svs = data1.match(svsregex);\n\tif(svs && svs[1]) parse_ws_xml_sheetviews(svs[1], wb);\n\n\t/* 18.3.1.17 cols CT_Cols */\n\tvar columns/*:Array*/ = [];\n\tif(opts.cellStyles) {\n\t\t/* 18.3.1.13 col CT_Col */\n\t\tvar cols = data1.match(colregex);\n\t\tif(cols) parse_ws_xml_cols(columns, cols);\n\t}\n\n\t/* 18.3.1.80 sheetData CT_SheetData ? */\n\tif(mtch) parse_ws_xml_data(mtch[1], s, opts, refguess, themes, styles);\n\n\t/* 18.3.1.2 autoFilter CT_AutoFilter */\n\tvar afilter = data2.match(afregex);\n\tif(afilter) s['!autofilter'] = parse_ws_xml_autofilter(afilter[0]);\n\n\t/* 18.3.1.55 mergeCells CT_MergeCells */\n\tvar merges/*:Array*/ = [];\n\tvar _merge = data2.match(mergecregex);\n\tif(_merge) for(ridx = 0; ridx != _merge.length; ++ridx)\n\t\tmerges[ridx] = safe_decode_range(_merge[ridx].slice(_merge[ridx].indexOf(\"\\\"\")+1));\n\n\t/* 18.3.1.48 hyperlinks CT_Hyperlinks */\n\tvar hlink = data2.match(hlinkregex);\n\tif(hlink) parse_ws_xml_hlinks(s, hlink, rels);\n\n\t/* 18.3.1.62 pageMargins CT_PageMargins */\n\tvar margins = data2.match(marginregex);\n\tif(margins) s['!margins'] = parse_ws_xml_margins(parsexmltag(margins[0]));\n\n\tif(!s[\"!ref\"] && refguess.e.c >= refguess.s.c && refguess.e.r >= refguess.s.r) s[\"!ref\"] = encode_range(refguess);\n\tif(opts.sheetRows > 0 && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(columns.length > 0) s[\"!cols\"] = columns;\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\treturn s;\n}\n\nfunction write_ws_xml_merges(merges/*:Array*/)/*:string*/ {\n\tif(merges.length === 0) return \"\";\n\tvar o = '';\n\tfor(var i = 0; i != merges.length; ++i) o += '';\n\treturn o + '';\n}\n\n/* 18.3.1.82-3 sheetPr CT_ChartsheetPr / CT_SheetPr */\nfunction parse_ws_xml_sheetpr(sheetPr/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/) {\n\tvar data = parsexmltag(sheetPr);\n\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\tif(data.codeName) wb.Sheets[idx].CodeName = unescapexml(utf8read(data.codeName));\n}\nfunction parse_ws_xml_sheetpr2(sheetPr/*:string*/, body/*:string*/, s, wb/*:WBWBProps*/, idx/*:number*/, styles, themes) {\n\tparse_ws_xml_sheetpr(sheetPr.slice(0, sheetPr.indexOf(\">\")), s, wb, idx);\n}\nfunction write_ws_xml_sheetpr(ws, wb, idx, opts, o) {\n\tvar needed = false;\n\tvar props = {}, payload = null;\n\tif(opts.bookType !== 'xlsx' && wb.vbaraw) {\n\t\tvar cname = wb.SheetNames[idx];\n\t\ttry { if(wb.Workbook) cname = wb.Workbook.Sheets[idx].CodeName || cname; } catch(e) {}\n\t\tneeded = true;\n\t\tprops.codeName = utf8write(escapexml(cname));\n\t}\n\n\tif(ws && ws[\"!outline\"]) {\n\t\tvar outlineprops = {summaryBelow:1, summaryRight:1};\n\t\tif(ws[\"!outline\"].above) outlineprops.summaryBelow = 0;\n\t\tif(ws[\"!outline\"].left) outlineprops.summaryRight = 0;\n\t\tpayload = (payload||\"\") + writextag('outlinePr', null, outlineprops);\n\t}\n\n\tif(!needed && !payload) return;\n\to[o.length] = (writextag('sheetPr', payload, props));\n}\n\n/* 18.3.1.85 sheetProtection CT_SheetProtection */\nvar sheetprot_deffalse = [\"objects\", \"scenarios\", \"selectLockedCells\", \"selectUnlockedCells\"];\nvar sheetprot_deftrue = [\n\t\"formatColumns\", \"formatRows\", \"formatCells\",\n\t\"insertColumns\", \"insertRows\", \"insertHyperlinks\",\n\t\"deleteColumns\", \"deleteRows\",\n\t\"sort\", \"autoFilter\", \"pivotTables\"\n];\nfunction write_ws_xml_protection(sp)/*:string*/ {\n\t// algorithmName, hashValue, saltValue, spinCount\n\tvar o = ({sheet:1}/*:any*/);\n\tsheetprot_deffalse.forEach(function(n) { if(sp[n] != null && sp[n]) o[n] = \"1\"; });\n\tsheetprot_deftrue.forEach(function(n) { if(sp[n] != null && !sp[n]) o[n] = \"0\"; });\n\t/* TODO: algorithm */\n\tif(sp.password) o.password = crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();\n\treturn writextag('sheetProtection', null, o);\n}\n\nfunction parse_ws_xml_hlinks(s, data/*:Array*/, rels) {\n\tvar dense = Array.isArray(s);\n\tfor(var i = 0; i != data.length; ++i) {\n\t\tvar val = parsexmltag(utf8read(data[i]), true);\n\t\tif(!val.ref) return;\n\t\tvar rel = ((rels || {})['!id']||[])[val.id];\n\t\tif(rel) {\n\t\t\tval.Target = rel.Target;\n\t\t\tif(val.location) val.Target += \"#\"+unescapexml(val.location);\n\t\t} else {\n\t\t\tval.Target = \"#\" + unescapexml(val.location);\n\t\t\trel = {Target: val.Target, TargetMode: 'Internal'};\n\t\t}\n\t\tval.Rel = rel;\n\t\tif(val.tooltip) { val.Tooltip = val.tooltip; delete val.tooltip; }\n\t\tvar rng = safe_decode_range(val.ref);\n\t\tfor(var R=rng.s.r;R<=rng.e.r;++R) for(var C=rng.s.c;C<=rng.e.c;++C) {\n\t\t\tvar addr = encode_cell({c:C,r:R});\n\t\t\tif(dense) {\n\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\tif(!s[R][C]) s[R][C] = {t:\"z\",v:undefined};\n\t\t\t\ts[R][C].l = val;\n\t\t\t} else {\n\t\t\t\tif(!s[addr]) s[addr] = {t:\"z\",v:undefined};\n\t\t\t\ts[addr].l = val;\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction parse_ws_xml_margins(margin) {\n\tvar o = {};\n\t[\"left\", \"right\", \"top\", \"bottom\", \"header\", \"footer\"].forEach(function(k) {\n\t\tif(margin[k]) o[k] = parseFloat(margin[k]);\n\t});\n\treturn o;\n}\nfunction write_ws_xml_margins(margin)/*:string*/ {\n\tdefault_margins(margin);\n\treturn writextag('pageMargins', null, margin);\n}\n\nfunction parse_ws_xml_cols(columns, cols) {\n\tvar seencol = false;\n\tfor(var coli = 0; coli != cols.length; ++coli) {\n\t\tvar coll = parsexmltag(cols[coli], true);\n\t\tif(coll.hidden) coll.hidden = parsexmlbool(coll.hidden);\n\t\tvar colm=parseInt(coll.min, 10)-1, colM=parseInt(coll.max,10)-1;\n\t\tif(coll.outlineLevel) coll.level = (+coll.outlineLevel || 0);\n\t\tdelete coll.min; delete coll.max; coll.width = +coll.width;\n\t\tif(!seencol && coll.width) { seencol = true; find_mdw_colw(coll.width); }\n\t\tprocess_col(coll);\n\t\twhile(colm <= colM) columns[colm++] = dup(coll);\n\t}\n}\nfunction write_ws_xml_cols(ws, cols)/*:string*/ {\n\tvar o = [\"\"], col;\n\tfor(var i = 0; i != cols.length; ++i) {\n\t\tif(!(col = cols[i])) continue;\n\t\to[o.length] = (writextag('col', null, col_obj_w(i, col)));\n\t}\n\to[o.length] = \"\";\n\treturn o.join(\"\");\n}\n\nfunction parse_ws_xml_autofilter(data/*:string*/) {\n\tvar o = { ref: (data.match(/ref=\"([^\"]*)\"/)||[])[1]};\n\treturn o;\n}\nfunction write_ws_xml_autofilter(data, ws, wb, idx)/*:string*/ {\n\tvar ref = typeof data.ref == \"string\" ? data.ref : encode_range(data.ref);\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\treturn writextag(\"autoFilter\", null, {ref:ref});\n}\n\n/* 18.3.1.88 sheetViews CT_SheetViews */\n/* 18.3.1.87 sheetView CT_SheetView */\nvar sviewregex = /<(?:\\w:)?sheetView(?:[^>a-z][^>]*)?\\/?>/;\nfunction parse_ws_xml_sheetviews(data, wb/*:WBWBProps*/) {\n\tif(!wb.Views) wb.Views = [{}];\n\t(data.match(sviewregex)||[]).forEach(function(r/*:string*/, i/*:number*/) {\n\t\tvar tag = parsexmltag(r);\n\t\t// $FlowIgnore\n\t\tif(!wb.Views[i]) wb.Views[i] = {};\n\t\t// $FlowIgnore\n\t\tif(+tag.zoomScale) wb.Views[i].zoom = +tag.zoomScale;\n\t\t// $FlowIgnore\n\t\tif(parsexmlbool(tag.rightToLeft)) wb.Views[i].RTL = true;\n\t});\n}\nfunction write_ws_xml_sheetviews(ws, opts, idx, wb)/*:string*/ {\n\tvar sview = ({workbookViewId:\"0\"}/*:any*/);\n\t// $FlowIgnore\n\tif((((wb||{}).Workbook||{}).Views||[])[0]) sview.rightToLeft = wb.Workbook.Views[0].RTL ? \"1\" : \"0\";\n\treturn writextag(\"sheetViews\", writextag(\"sheetView\", null, sview), {});\n}\n\nfunction write_ws_xml_cell(cell/*:Cell*/, ref, ws, opts/*::, idx, wb*/)/*:string*/ {\n\tif(cell.v === undefined && typeof cell.f !== \"string\" || cell.t === 'z') return \"\";\n\tvar vv = \"\";\n\tvar oldt = cell.t, oldv = cell.v;\n\tif(cell.t !== \"z\") switch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'n': vv = ''+cell.v; break;\n\t\tcase 'e': vv = BErr[cell.v]; break;\n\t\tcase 'd':\n\t\t\tif(opts && opts.cellDates) vv = parseDate(cell.v, -1).toISOString();\n\t\t\telse {\n\t\t\t\tcell = dup(cell);\n\t\t\t\tcell.t = 'n';\n\t\t\t\tvv = ''+(cell.v = datenum(parseDate(cell.v)));\n\t\t\t}\n\t\t\tif(typeof cell.z === 'undefined') cell.z = SSF._table[14];\n\t\t\tbreak;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar v = writetag('v', escapexml(vv)), o = ({r:ref}/*:any*/);\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tif(os !== 0) o.s = os;\n\tswitch(cell.t) {\n\t\tcase 'n': break;\n\t\tcase 'd': o.t = \"d\"; break;\n\t\tcase 'b': o.t = \"b\"; break;\n\t\tcase 'e': o.t = \"e\"; break;\n\t\tcase 'z': break;\n\t\tdefault: if(cell.v == null) { delete cell.t; break; }\n\t\t\tif(cell.v.length > 32767) throw new Error(\"Text length must not exceed 32767 characters\");\n\t\t\tif(opts && opts.bookSST) {\n\t\t\t\tv = writetag('v', ''+get_sst_id(opts.Strings, cell.v, opts.revStrings));\n\t\t\t\to.t = \"s\"; break;\n\t\t\t}\n\t\t\to.t = \"str\"; break;\n\t}\n\tif(cell.t != oldt) { cell.t = oldt; cell.v = oldv; }\n\tif(typeof cell.f == \"string\" && cell.f) {\n\t\tvar ff = cell.F && cell.F.slice(0, ref.length) == ref ? {t:\"array\", ref:cell.F} : null;\n\t\tv = writextag('f', escapexml(cell.f), ff) + (cell.v != null ? v : \"\");\n\t}\n\tif(cell.l) ws['!links'].push([ref, cell.l]);\n\tif(cell.c) ws['!comments'].push([ref, cell.c]);\n\treturn writextag('c', v, o);\n}\n\nvar parse_ws_xml_data = (function() {\n\tvar cellregex = /<(?:\\w+:)?c[ \\/>]/, rowregex = /<\\/(?:\\w+:)?row>/;\n\tvar rregex = /r=[\"']([^\"']*)[\"']/, isregex = /<(?:\\w+:)?is>([\\S\\s]*?)<\\/(?:\\w+:)?is>/;\n\tvar refregex = /ref=[\"']([^\"']*)[\"']/;\n\tvar match_v = matchtag(\"v\"), match_f = matchtag(\"f\");\n\nreturn function parse_ws_xml_data(sdata/*:string*/, s, opts, guess/*:Range*/, themes, styles) {\n\tvar ri = 0, x = \"\", cells/*:Array*/ = [], cref/*:?Array*/ = [], idx=0, i=0, cc=0, d=\"\", p/*:any*/;\n\tvar tag, tagr = 0, tagc = 0;\n\tvar sstr, ftag;\n\tvar fmtid = 0, fillid = 0;\n\tvar do_format = Array.isArray(styles.CellXf), cf;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = [];\n\tvar dense = Array.isArray(s);\n\tvar rows/*:Array*/ = [], rowobj = {}, rowrite = false;\n\tvar sheetStubs = !!opts.sheetStubs;\n\tfor(var marr = sdata.split(rowregex), mt = 0, marrlen = marr.length; mt != marrlen; ++mt) {\n\t\tx = marr[mt].trim();\n\t\tvar xlen = x.length;\n\t\tif(xlen === 0) continue;\n\n\t\t/* 18.3.1.73 row CT_Row */\n\t\tvar rstarti = 0;\n\t\touta: for(ri = 0; ri < xlen; ++ri) switch(/*x.charCodeAt(ri)*/x[ri]) {\n\t\t\tcase \">\" /*62*/:\n\t\t\t\tif(/*x.charCodeAt(ri-1) != 47*/x[ri-1] != \"/\") { ++ri; break outa; }\n\t\t\t\tif(opts && opts.cellStyles) {\n\t\t\t\t\t// TODO: avoid duplication\n\t\t\t\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\t\t\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\t\t\t\trowobj = {}; rowrite = false;\n\t\t\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"<\" /*60*/: rstarti = ri; break;\n\t\t}\n\t\tif(rstarti >= ri) break;\n\t\ttag = parsexmltag(x.slice(rstarti,ri), true);\n\t\ttagr = tag.r != null ? parseInt(tag.r, 10) : tagr+1; tagc = -1;\n\t\tif(opts.sheetRows && opts.sheetRows < tagr) continue;\n\t\tif(guess.s.r > tagr - 1) guess.s.r = tagr - 1;\n\t\tif(guess.e.r < tagr - 1) guess.e.r = tagr - 1;\n\n\t\tif(opts && opts.cellStyles) {\n\t\t\trowobj = {}; rowrite = false;\n\t\t\tif(tag.ht) { rowrite = true; rowobj.hpt = parseFloat(tag.ht); rowobj.hpx = pt2px(rowobj.hpt); }\n\t\t\tif(tag.hidden == \"1\") { rowrite = true; rowobj.hidden = true; }\n\t\t\tif(tag.outlineLevel != null) { rowrite = true; rowobj.level = +tag.outlineLevel; }\n\t\t\tif(rowrite) rows[tagr-1] = rowobj;\n\t\t}\n\n\t\t/* 18.3.1.4 c CT_Cell */\n\t\tcells = x.slice(ri).split(cellregex);\n\t\tfor(var rslice = 0; rslice != cells.length; ++rslice) if(cells[rslice].trim().charAt(0) != \"<\") break;\n\t\tcells = cells.slice(rslice);\n\t\tfor(ri = 0; ri != cells.length; ++ri) {\n\t\t\tx = cells[ri].trim();\n\t\t\tif(x.length === 0) continue;\n\t\t\tcref = x.match(rregex); idx = ri; i=0; cc=0;\n\t\t\tx = \"\":\"\") + x;\n\t\t\tif(cref != null && cref.length === 2) {\n\t\t\t\tidx = 0; d=cref[1];\n\t\t\t\tfor(i=0; i != d.length; ++i) {\n\t\t\t\t\tif((cc=d.charCodeAt(i)-64) < 1 || cc > 26) break;\n\t\t\t\t\tidx = 26*idx + cc;\n\t\t\t\t}\n\t\t\t\t--idx;\n\t\t\t\ttagc = idx;\n\t\t\t} else ++tagc;\n\t\t\tfor(i = 0; i != x.length; ++i) if(x.charCodeAt(i) === 62) break; ++i;\n\t\t\ttag = parsexmltag(x.slice(0,i), true);\n\t\t\tif(!tag.r) tag.r = encode_cell({r:tagr-1, c:tagc});\n\t\t\td = x.slice(i);\n\t\t\tp = ({t:\"\"}/*:any*/);\n\n\t\t\tif((cref=d.match(match_v))!= null && /*::cref != null && */cref[1] !== '') p.v=unescapexml(cref[1]);\n\t\t\tif(opts.cellFormula) {\n\t\t\t\tif((cref=d.match(match_f))!= null && /*::cref != null && */cref[1] !== '') {\n\t\t\t\t\t/* TODO: match against XLSXFutureFunctions */\n\t\t\t\t\tp.f=unescapexml(utf8read(cref[1])).replace(/\\r\\n/g, \"\\n\");\n\t\t\t\t\tif(!opts.xlfn) p.f = _xlfn(p.f);\n\t\t\t\t\tif(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"array\"') > -1) {\n\t\t\t\t\t\tp.F = (d.match(refregex)||[])[1];\n\t\t\t\t\t\tif(p.F.indexOf(\":\") > -1) arrayf.push([safe_decode_range(p.F), p.F]);\n\t\t\t\t\t} else if(/*::cref != null && cref[0] != null && */cref[0].indexOf('t=\"shared\"') > -1) {\n\t\t\t\t\t\t// TODO: parse formula\n\t\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\t\tvar ___f = unescapexml(utf8read(cref[1]));\n\t\t\t\t\t\tif(!opts.xlfn) ___f = _xlfn(___f);\n\t\t\t\t\t\tsharedf[parseInt(ftag.si, 10)] = [ftag, ___f, tag.r];\n\t\t\t\t\t}\n\t\t\t\t} else if((cref=d.match(/]*\\/>/))) {\n\t\t\t\t\tftag = parsexmltag(cref[0]);\n\t\t\t\t\tif(sharedf[ftag.si]) p.f = shift_formula_xlsx(sharedf[ftag.si][1], sharedf[ftag.si][2]/*[0].ref*/, tag.r);\n\t\t\t\t}\n\t\t\t\t/* TODO: factor out contains logic */\n\t\t\t\tvar _tag = decode_cell(tag.r);\n\t\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\tif(_tag.r >= arrayf[i][0].s.r && _tag.r <= arrayf[i][0].e.r)\n\t\t\t\t\t\tif(_tag.c >= arrayf[i][0].s.c && _tag.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\tp.F = arrayf[i][1];\n\t\t\t}\n\n\t\t\tif(tag.t == null && p.v === undefined) {\n\t\t\t\tif(p.f || p.F) {\n\t\t\t\t\tp.v = 0; p.t = \"n\";\n\t\t\t\t} else if(!sheetStubs) continue;\n\t\t\t\telse p.t = \"z\";\n\t\t\t}\n\t\t\telse p.t = tag.t || \"n\";\n\t\t\tif(guess.s.c > tagc) guess.s.c = tagc;\n\t\t\tif(guess.e.c < tagc) guess.e.c = tagc;\n\t\t\t/* 18.18.11 t ST_CellType */\n\t\t\tswitch(p.t) {\n\t\t\t\tcase 'n':\n\t\t\t\t\tif(p.v == \"\" || p.v == null) {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else p.v = parseFloat(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 's':\n\t\t\t\t\tif(typeof p.v == 'undefined') {\n\t\t\t\t\t\tif(!sheetStubs) continue;\n\t\t\t\t\t\tp.t = 'z';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsstr = strs[parseInt(p.v, 10)];\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tp.r = sstr.r;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'str':\n\t\t\t\t\tp.t = \"s\";\n\t\t\t\t\tp.v = (p.v!=null) ? utf8read(p.v) : '';\n\t\t\t\t\tif(opts.cellHTML) p.h = escapehtml(p.v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'inlineStr':\n\t\t\t\t\tcref = d.match(isregex);\n\t\t\t\t\tp.t = 's';\n\t\t\t\t\tif(cref != null && (sstr = parse_si(cref[1]))) {\n\t\t\t\t\t\tp.v = sstr.t;\n\t\t\t\t\t\tif(opts.cellHTML) p.h = sstr.h;\n\t\t\t\t\t} else p.v = \"\";\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'b': p.v = parsexmlbool(p.v); break;\n\t\t\t\tcase 'd':\n\t\t\t\t\tif(opts.cellDates) p.v = parseDate(p.v, 1);\n\t\t\t\t\telse { p.v = datenum(parseDate(p.v, 1)); p.t = 'n'; }\n\t\t\t\t\tbreak;\n\t\t\t\t/* error string in .w, number in .v */\n\t\t\t\tcase 'e':\n\t\t\t\t\tif(!opts || opts.cellText !== false) p.w = p.v;\n\t\t\t\t\tp.v = RBErr[p.v]; break;\n\t\t\t}\n\t\t\t/* formatting */\n\t\t\tfmtid = fillid = 0;\n\t\t\tcf = null;\n\t\t\tif(do_format && tag.s !== undefined) {\n\t\t\t\tcf = styles.CellXf[tag.s];\n\t\t\t\tif(cf != null) {\n\t\t\t\t\tif(cf.numFmtId != null) fmtid = cf.numFmtId;\n\t\t\t\t\tif(opts.cellStyles) {\n\t\t\t\t\t\tif(cf.fillId != null) fillid = cf.fillId;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tsafe_format(p, fmtid, fillid, opts, themes, styles);\n\t\t\tif(opts.cellDates && do_format && p.t == 'n' && SSF.is_date(SSF._table[fmtid])) { p.t = 'd'; p.v = numdate(p.v); }\n\t\t\tif(dense) {\n\t\t\t\tvar _r = decode_cell(tag.r);\n\t\t\t\tif(!s[_r.r]) s[_r.r] = [];\n\t\t\t\ts[_r.r][_r.c] = p;\n\t\t\t} else s[tag.r] = p;\n\t\t}\n\t}\n\tif(rows.length > 0) s['!rows'] = rows;\n}; })();\n\nfunction write_ws_xml_data(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*//*::, rels*/)/*:string*/ {\n\tvar o/*:Array*/ = [], r/*:Array*/ = [], range = safe_decode_range(ws['!ref']), cell=\"\", ref, rr = \"\", cols/*:Array*/ = [], R=0, C=0, rows = ws['!rows'];\n\tvar dense = Array.isArray(ws);\n\tvar params = ({r:rr}/*:any*/), row/*:RowInfo*/, height = -1;\n\tfor(C = range.s.c; C <= range.e.c; ++C) cols[C] = encode_col(C);\n\tfor(R = range.s.r; R <= range.e.r; ++R) {\n\t\tr = [];\n\t\trr = encode_row(R);\n\t\tfor(C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tref = cols[C] + rr;\n\t\t\tvar _cell = dense ? (ws[R]||[])[C]: ws[ref];\n\t\t\tif(_cell === undefined) continue;\n\t\t\tif((cell = write_ws_xml_cell(_cell, ref, ws, opts, idx, wb)) != null) r.push(cell);\n\t\t}\n\t\tif(r.length > 0 || (rows && rows[R])) {\n\t\t\tparams = ({r:rr}/*:any*/);\n\t\t\tif(rows && rows[R]) {\n\t\t\t\trow = rows[R];\n\t\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\t\theight = -1;\n\t\t\t\tif(row.hpx) height = px2pt(row.hpx);\n\t\t\t\telse if(row.hpt) height = row.hpt;\n\t\t\t\tif(height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\t\tif(row.level) { params.outlineLevel = row.level; }\n\t\t\t}\n\t\t\to[o.length] = (writextag('row', r.join(\"\"), params));\n\t\t}\n\t}\n\tif(rows) for(; R < rows.length; ++R) {\n\t\tif(rows && rows[R]) {\n\t\t\tparams = ({r:R+1}/*:any*/);\n\t\t\trow = rows[R];\n\t\t\tif(row.hidden) params.hidden = 1;\n\t\t\theight = -1;\n\t\t\tif (row.hpx) height = px2pt(row.hpx);\n\t\t\telse if (row.hpt) height = row.hpt;\n\t\t\tif (height > -1) { params.ht = height; params.customHeight = 1; }\n\t\t\tif (row.level) { params.outlineLevel = row.level; }\n\t\t\to[o.length] = (writextag('row', \"\", params));\n\t\t}\n\t}\n\treturn o.join(\"\");\n}\n\nvar WS_XML_ROOT = writextag('worksheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\nfunction write_ws_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, WS_XML_ROOT];\n\tvar s = wb.SheetNames[idx], sidx = 0, rdata = \"\";\n\tvar ws = wb.Sheets[s];\n\tif(ws == null) ws = {};\n\tvar ref = ws['!ref'] || 'A1';\n\tvar range = safe_decode_range(ref);\n\tif(range.e.c > 0x3FFF || range.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + ref + \" exceeds format limit A1:XFD1048576\");\n\t\trange.e.c = Math.min(range.e.c, 0x3FFF);\n\t\trange.e.r = Math.min(range.e.c, 0xFFFFF);\n\t\tref = encode_range(range);\n\t}\n\tif(!rels) rels = {};\n\tws['!comments'] = [];\n\tvar _drawing = [];\n\n\twrite_ws_xml_sheetpr(ws, wb, idx, opts, o);\n\n\to[o.length] = (writextag('dimension', null, {'ref': ref}));\n\n\to[o.length] = write_ws_xml_sheetviews(ws, opts, idx, wb);\n\n\t/* TODO: store in WB, process styles */\n\tif(opts.sheetFormat) o[o.length] = (writextag('sheetFormatPr', null, {\n\t\tdefaultRowHeight:opts.sheetFormat.defaultRowHeight||'16',\n\t\tbaseColWidth:opts.sheetFormat.baseColWidth||'10',\n\t\toutlineLevelRow:opts.sheetFormat.outlineLevelRow||'7'\n\t}));\n\n\tif(ws['!cols'] != null && ws['!cols'].length > 0) o[o.length] = (write_ws_xml_cols(ws, ws['!cols']));\n\n\to[sidx = o.length] = '';\n\tws['!links'] = [];\n\tif(ws['!ref'] != null) {\n\t\trdata = write_ws_xml_data(ws, opts, idx, wb, rels);\n\t\tif(rdata.length > 0) o[o.length] = (rdata);\n\t}\n\tif(o.length>sidx+1) { o[o.length] = (''); o[sidx]=o[sidx].replace(\"/>\",\">\"); }\n\n\t/* sheetCalcPr */\n\n\tif(ws['!protect'] != null) o[o.length] = write_ws_xml_protection(ws['!protect']);\n\n\t/* protectedRanges */\n\t/* scenarios */\n\n\tif(ws['!autofilter'] != null) o[o.length] = write_ws_xml_autofilter(ws['!autofilter'], ws, wb, idx);\n\n\t/* sortState */\n\t/* dataConsolidate */\n\t/* customSheetViews */\n\n\tif(ws['!merges'] != null && ws['!merges'].length > 0) o[o.length] = (write_ws_xml_merges(ws['!merges']));\n\n\t/* phoneticPr */\n\t/* conditionalFormatting */\n\t/* dataValidations */\n\n\tvar relc = -1, rel, rId = -1;\n\tif(/*::(*/ws['!links']/*::||[])*/.length > 0) {\n\t\to[o.length] = \"\";\n\t\t/*::(*/ws['!links']/*::||[])*/.forEach(function(l) {\n\t\t\tif(!l[1].Target) return;\n\t\t\trel = ({\"ref\":l[0]}/*:any*/);\n\t\t\tif(l[1].Target.charAt(0) != \"#\") {\n\t\t\t\trId = add_rels(rels, -1, escapexml(l[1].Target).replace(/#.*$/, \"\"), RELS.HLINK);\n\t\t\t\trel[\"r:id\"] = \"rId\"+rId;\n\t\t\t}\n\t\t\tif((relc = l[1].Target.indexOf(\"#\")) > -1) rel.location = escapexml(l[1].Target.slice(relc+1));\n\t\t\tif(l[1].Tooltip) rel.tooltip = escapexml(l[1].Tooltip);\n\t\t\to[o.length] = writextag(\"hyperlink\",null,rel);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\tdelete ws['!links'];\n\n\t/* printOptions */\n\n\tif(ws['!margins'] != null) o[o.length] = write_ws_xml_margins(ws['!margins']);\n\n\t/* pageSetup */\n\t/* headerFooter */\n\t/* rowBreaks */\n\t/* colBreaks */\n\t/* customProperties */\n\t/* cellWatches */\n\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) o[o.length] = writetag(\"ignoredErrors\", writextag(\"ignoredError\", null, {numberStoredAsText:1, sqref:ref}));\n\n\t/* smartTags */\n\n\tif(_drawing.length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\t\to[o.length] = writextag(\"drawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!drawing'] = _drawing;\n\t}\n\n\tif(ws['!comments'].length > 0) {\n\t\trId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\to[o.length] = writextag(\"legacyDrawing\", null, {\"r:id\":\"rId\" + rId});\n\t\tws['!legacy'] = rId;\n\t}\n\n\t/* legacyDrawingHF */\n\t/* picture */\n\t/* oleObjects */\n\t/* controls */\n\t/* webPublishItems */\n\t/* tableParts */\n\t/* extLst */\n\n\tif(o.length>1) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.726 BrtRowHdr */\nfunction parse_BrtRowHdr(data, length) {\n\tvar z = ({}/*:any*/);\n\tvar tgt = data.l + length;\n\tz.r = data.read_shift(4);\n\tdata.l += 4; // TODO: ixfe\n\tvar miyRw = data.read_shift(2);\n\tdata.l += 1; // TODO: top/bot padding\n\tvar flags = data.read_shift(1);\n\tdata.l = tgt;\n\tif(flags & 0x07) z.level = flags & 0x07;\n\tif(flags & 0x10) z.hidden = true;\n\tif(flags & 0x20) z.hpt = miyRw / 20;\n\treturn z;\n}\nfunction write_BrtRowHdr(R/*:number*/, range, ws) {\n\tvar o = new_buf(17+8*16);\n\tvar row = (ws['!rows']||[])[R]||{};\n\to.write_shift(4, R);\n\n\to.write_shift(4, 0); /* TODO: ixfe */\n\n\tvar miyRw = 0x0140;\n\tif(row.hpx) miyRw = px2pt(row.hpx) * 20;\n\telse if(row.hpt) miyRw = row.hpt * 20;\n\to.write_shift(2, miyRw);\n\n\to.write_shift(1, 0); /* top/bot padding */\n\n\tvar flags = 0x0;\n\tif(row.level) flags |= row.level;\n\tif(row.hidden) flags |= 0x10;\n\tif(row.hpx || row.hpt) flags |= 0x20;\n\to.write_shift(1, flags);\n\n\to.write_shift(1, 0); /* phonetic guide */\n\n\t/* [MS-XLSB] 2.5.8 BrtColSpan explains the mechanism */\n\tvar ncolspan = 0, lcs = o.l;\n\to.l += 4;\n\n\tvar caddr = {r:R, c:0};\n\tfor(var i = 0; i < 16; ++i) {\n\t\tif((range.s.c > ((i+1) << 10)) || (range.e.c < (i << 10))) continue;\n\t\tvar first = -1, last = -1;\n\t\tfor(var j = (i<<10); j < ((i+1)<<10); ++j) {\n\t\t\tcaddr.c = j;\n\t\t\tvar cell = Array.isArray(ws) ? (ws[caddr.r]||[])[caddr.c] : ws[encode_cell(caddr)];\n\t\t\tif(cell) { if(first < 0) first = j; last = j; }\n\t\t}\n\t\tif(first < 0) continue;\n\t\t++ncolspan;\n\t\to.write_shift(4, first);\n\t\to.write_shift(4, last);\n\t}\n\n\tvar l = o.l;\n\to.l = lcs;\n\to.write_shift(4, ncolspan);\n\to.l = l;\n\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction write_row_header(ba, ws, range, R) {\n\tvar o = write_BrtRowHdr(R, range, ws);\n\tif((o.length > 17) || (ws['!rows']||[])[R]) write_record(ba, 'BrtRowHdr', o);\n}\n\n/* [MS-XLSB] 2.4.820 BrtWsDim */\nvar parse_BrtWsDim = parse_UncheckedRfX;\nvar write_BrtWsDim = write_UncheckedRfX;\n\n/* [MS-XLSB] 2.4.821 BrtWsFmtInfo */\nfunction parse_BrtWsFmtInfo(/*::data, length*/) {\n}\n//function write_BrtWsFmtInfo(ws, o) { }\n\n/* [MS-XLSB] 2.4.823 BrtWsProp */\nfunction parse_BrtWsProp(data, length) {\n\tvar z = {};\n\tvar f = data[data.l]; ++data.l;\n\tz.above = !(f & 0x40);\n\tz.left = !(f & 0x80);\n\t/* TODO: pull flags */\n\tdata.l += 18;\n\tz.name = parse_XLSBCodeName(data, length - 19);\n\treturn z;\n}\nfunction write_BrtWsProp(str, outl, o) {\n\tif(o == null) o = new_buf(84+4*str.length);\n\tvar f = 0xC0;\n\tif(outl) {\n\t\tif(outl.above) f &= ~0x40;\n\t\tif(outl.left) f &= ~0x80;\n\t}\n\to.write_shift(1, f);\n\tfor(var i = 1; i < 3; ++i) o.write_shift(1,0);\n\twrite_BrtColor({auto:1}, o);\n\to.write_shift(-4,-1);\n\to.write_shift(-4,-1);\n\twrite_XLSBCodeName(str, o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.306 BrtCellBlank */\nfunction parse_BrtCellBlank(data) {\n\tvar cell = parse_XLSBCell(data);\n\treturn [cell];\n}\nfunction write_BrtCellBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\treturn write_XLSBCell(ncell, o);\n}\nfunction parse_BrtShortBlank(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\treturn [cell];\n}\nfunction write_BrtShortBlank(cell, ncell, o) {\n\tif(o == null) o = new_buf(4);\n\treturn write_XLSBShortCell(ncell, o);\n}\n\n/* [MS-XLSB] 2.4.307 BrtCellBool */\nfunction parse_BrtCellBool(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtCellBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\nfunction parse_BrtShortBool(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar fBool = data.read_shift(1);\n\treturn [cell, fBool, 'b'];\n}\nfunction write_BrtShortBool(cell, ncell, o) {\n\tif(o == null) o = new_buf(5);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v ? 1 : 0);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.308 BrtCellError */\nfunction parse_BrtCellError(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtCellError(cell, ncell, o) {\n\tif(o == null) o = new_buf(9);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(1, cell.v);\n\treturn o;\n}\nfunction parse_BrtShortError(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar bError = data.read_shift(1);\n\treturn [cell, bError, 'e'];\n}\nfunction write_BrtShortError(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(1, cell.v);\n\to.write_shift(2, 0);\n\to.write_shift(1, 0);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.311 BrtCellIsst */\nfunction parse_BrtCellIsst(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtCellIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\nfunction parse_BrtShortIsst(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar isst = data.read_shift(4);\n\treturn [cell, isst, 's'];\n}\nfunction write_BrtShortIsst(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\to.write_shift(4, ncell.v);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.313 BrtCellReal */\nfunction parse_BrtCellReal(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(16);\n\twrite_XLSBCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortReal(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_Xnum(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortReal(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_Xnum(cell.v, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.314 BrtCellRk */\nfunction parse_BrtCellRk(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtCellRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(12);\n\twrite_XLSBCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\nfunction parse_BrtShortRk(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_RkNumber(data);\n\treturn [cell, value, 'n'];\n}\nfunction write_BrtShortRk(cell, ncell, o) {\n\tif(o == null) o = new_buf(8);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_RkNumber(cell.v, o);\n\treturn o;\n}\n\n\n/* [MS-XLSB] 2.4.317 BrtCellSt */\nfunction parse_BrtCellSt(data) {\n\tvar cell = parse_XLSBCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtCellSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(12 + 4 * cell.v.length);\n\twrite_XLSBCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\nfunction parse_BrtShortSt(data) {\n\tvar cell = parse_XLSBShortCell(data);\n\tvar value = parse_XLWideString(data);\n\treturn [cell, value, 'str'];\n}\nfunction write_BrtShortSt(cell, ncell, o) {\n\tif(o == null) o = new_buf(8 + 4 * cell.v.length);\n\twrite_XLSBShortCell(ncell, o);\n\twrite_XLWideString(cell.v, o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.653 BrtFmlaBool */\nfunction parse_BrtFmlaBool(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'b'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.654 BrtFmlaError */\nfunction parse_BrtFmlaError(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = data.read_shift(1);\n\tvar o = [cell, value, 'e'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.655 BrtFmlaNum */\nfunction parse_BrtFmlaNum(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_Xnum(data);\n\tvar o = [cell, value, 'n'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.656 BrtFmlaString */\nfunction parse_BrtFmlaString(data, length, opts) {\n\tvar end = data.l + length;\n\tvar cell = parse_XLSBCell(data);\n\tcell.r = opts['!row'];\n\tvar value = parse_XLWideString(data);\n\tvar o = [cell, value, 'str'];\n\tif(opts.cellFormula) {\n\t\tdata.l += 2;\n\t\tvar formula = parse_XLSBCellParsedFormula(data, end - data.l, opts);\n\t\to[3] = stringify_formula(formula, null/*range*/, cell, opts.supbooks, opts);/* TODO */\n\t}\n\telse data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.682 BrtMergeCell */\nvar parse_BrtMergeCell = parse_UncheckedRfX;\nvar write_BrtMergeCell = write_UncheckedRfX;\n/* [MS-XLSB] 2.4.107 BrtBeginMergeCells */\nfunction write_BrtBeginMergeCells(cnt, o) {\n\tif(o == null) o = new_buf(4);\n\to.write_shift(4, cnt);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.662 BrtHLink */\nfunction parse_BrtHLink(data, length/*::, opts*/) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar relId = parse_XLNullableWideString(data);\n\tvar loc = parse_XLWideString(data);\n\tvar tooltip = parse_XLWideString(data);\n\tvar display = parse_XLWideString(data);\n\tdata.l = end;\n\tvar o = ({rfx:rfx, relId:relId, loc:loc, display:display}/*:any*/);\n\tif(tooltip) o.Tooltip = tooltip;\n\treturn o;\n}\nfunction write_BrtHLink(l, rId) {\n\tvar o = new_buf(50+4*(l[1].Target.length + (l[1].Tooltip || \"\").length));\n\twrite_UncheckedRfX({s:decode_cell(l[0]), e:decode_cell(l[0])}, o);\n\twrite_RelID(\"rId\" + rId, o);\n\tvar locidx = l[1].Target.indexOf(\"#\");\n\tvar loc = locidx == -1 ? \"\" : l[1].Target.slice(locidx+1);\n\twrite_XLWideString(loc || \"\", o);\n\twrite_XLWideString(l[1].Tooltip || \"\", o);\n\twrite_XLWideString(\"\", o);\n\treturn o.slice(0, o.l);\n}\n\n/* [MS-XLSB] 2.4.692 BrtPane */\nfunction parse_BrtPane(/*data, length, opts*/) {\n}\n\n/* [MS-XLSB] 2.4.6 BrtArrFmla */\nfunction parse_BrtArrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_RfX(data, 16);\n\tvar fAlwaysCalc = data.read_shift(1);\n\tvar o = [rfx]; o[2] = fAlwaysCalc;\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBArrayParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.750 BrtShrFmla */\nfunction parse_BrtShrFmla(data, length, opts) {\n\tvar end = data.l + length;\n\tvar rfx = parse_UncheckedRfX(data, 16);\n\tvar o = [rfx];\n\tif(opts.cellFormula) {\n\t\tvar formula = parse_XLSBSharedParsedFormula(data, end - data.l, opts);\n\t\to[1] = formula;\n\t\tdata.l = end;\n\t} else data.l = end;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.323 BrtColInfo */\n/* TODO: once XLS ColInfo is set, combine the functions */\nfunction write_BrtColInfo(C/*:number*/, col, o) {\n\tif(o == null) o = new_buf(18);\n\tvar p = col_obj_w(C, col);\n\to.write_shift(-4, C);\n\to.write_shift(-4, C);\n\to.write_shift(4, (p.width || 10) * 256);\n\to.write_shift(4, 0/*ixfe*/); // style\n\tvar flags = 0;\n\tif(col.hidden) flags |= 0x01;\n\tif(typeof p.width == 'number') flags |= 0x02;\n\tif(col.level) flags |= (col.level << 8);\n\to.write_shift(2, flags); // bit flag\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.678 BrtMargins */\nvar BrtMarginKeys = [\"left\",\"right\",\"top\",\"bottom\",\"header\",\"footer\"];\nfunction parse_BrtMargins(data/*::, length, opts*/)/*:Margins*/ {\n\tvar margins = ({}/*:any*/);\n\tBrtMarginKeys.forEach(function(k) { margins[k] = parse_Xnum(data, 8); });\n\treturn margins;\n}\nfunction write_BrtMargins(margins/*:Margins*/, o) {\n\tif(o == null) o = new_buf(6*8);\n\tdefault_margins(margins);\n\tBrtMarginKeys.forEach(function(k) { write_Xnum((margins/*:any*/)[k], o); });\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.299 BrtBeginWsView */\nfunction parse_BrtBeginWsView(data/*::, length, opts*/) {\n\tvar f = data.read_shift(2);\n\tdata.l += 28;\n\treturn { RTL: f & 0x20 };\n}\nfunction write_BrtBeginWsView(ws, Workbook, o) {\n\tif(o == null) o = new_buf(30);\n\tvar f = 0x39c;\n\tif((((Workbook||{}).Views||[])[0]||{}).RTL) f |= 0x20;\n\to.write_shift(2, f); // bit flag\n\to.write_shift(4, 0);\n\to.write_shift(4, 0); // view first row\n\to.write_shift(4, 0); // view first col\n\to.write_shift(1, 0); // gridline color ICV\n\to.write_shift(1, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 100); // zoom scale\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(2, 0);\n\to.write_shift(4, 0); // workbook view id\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.309 BrtCellIgnoreEC */\nfunction write_BrtCellIgnoreEC(ref) {\n\tvar o = new_buf(24);\n\to.write_shift(4, 4);\n\to.write_shift(4, 1);\n\twrite_UncheckedRfX(ref, o);\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.748 BrtSheetProtection */\nfunction write_BrtSheetProtection(sp, o) {\n\tif(o == null) o = new_buf(16*4+2);\n\to.write_shift(2, sp.password ? crypto_CreatePasswordVerifier_Method1(sp.password) : 0);\n\to.write_shift(4, 1); // this record should not be written if no protection\n\t[\n\t\t[\"objects\", false], // fObjects\n\t\t[\"scenarios\", false], // fScenarios\n\t\t[\"formatCells\", true], // fFormatCells\n\t\t[\"formatColumns\", true], // fFormatColumns\n\t\t[\"formatRows\", true], // fFormatRows\n\t\t[\"insertColumns\", true], // fInsertColumns\n\t\t[\"insertRows\", true], // fInsertRows\n\t\t[\"insertHyperlinks\", true], // fInsertHyperlinks\n\t\t[\"deleteColumns\", true], // fDeleteColumns\n\t\t[\"deleteRows\", true], // fDeleteRows\n\t\t[\"selectLockedCells\", false], // fSelLockedCells\n\t\t[\"sort\", true], // fSort\n\t\t[\"autoFilter\", true], // fAutoFilter\n\t\t[\"pivotTables\", true], // fPivotTables\n\t\t[\"selectUnlockedCells\", false] // fSelUnlockedCells\n\t].forEach(function(n) {\n\t\t/*:: if(o == null) throw \"unreachable\"; */\n\t\tif(n[1]) o.write_shift(4, sp[n[0]] != null && !sp[n[0]] ? 1 : 0);\n\t\telse o.write_shift(4, sp[n[0]] != null && sp[n[0]] ? 0 : 1);\n\t});\n\treturn o;\n}\n\nfunction parse_BrtDVal(/*data, length, opts*/) {\n}\nfunction parse_BrtDVal14(/*data, length, opts*/) {\n}\n/* [MS-XLSB] 2.1.7.61 Worksheet */\nfunction parse_ws_bin(data, _opts, idx, rels, wb/*:WBWBProps*/, themes, styles)/*:Worksheet*/ {\n\tif(!data) return data;\n\tvar opts = _opts || {};\n\tif(!rels) rels = {'!id':{}};\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar s/*:Worksheet*/ = (opts.dense ? [] : {});\n\n\tvar ref;\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\tvar state/*:Array*/ = [];\n\tvar pass = false, end = false;\n\tvar row, p, cf, R, C, addr, sstr, rr, cell/*:Cell*/;\n\tvar merges/*:Array*/ = [];\n\topts.biff = 12;\n\topts['!row'] = 0;\n\n\tvar ai = 0, af = false;\n\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar sharedf = {};\n\tvar supbooks = opts.supbooks || /*::(*/wb/*:: :any)*/.supbooks || ([[]]/*:any*/);\n\tsupbooks.sharedf = sharedf;\n\tsupbooks.arrayf = arrayf;\n\tsupbooks.SheetNames = wb.SheetNames || wb.Sheets.map(function(x) { return x.name; });\n\tif(!opts.supbooks) {\n\t\topts.supbooks = supbooks;\n\t\tif(wb.Names) for(var i = 0; i < wb.Names.length; ++i) supbooks[0][i+1] = wb.Names[i];\n\t}\n\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\tvar seencol = false;\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtShortReal\", f:parse_BrtShortReal };\n\n\trecordhopper(data, function ws_parse(val, R_n, RT) {\n\t\tif(end) return;\n\t\tswitch(RT) {\n\t\t\tcase 0x0094: /* 'BrtWsDim' */\n\t\t\t\tref = val; break;\n\t\t\tcase 0x0000: /* 'BrtRowHdr' */\n\t\t\t\trow = val;\n\t\t\t\tif(opts.sheetRows && opts.sheetRows <= row.r) end=true;\n\t\t\t\trr = encode_row(R = row.r);\n\t\t\t\topts['!row'] = row.r;\n\t\t\t\tif(val.hidden || val.hpt || val.level != null) {\n\t\t\t\t\tif(val.hpt) val.hpx = pt2px(val.hpt);\n\t\t\t\t\trowinfo[val.r] = val;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0002: /* 'BrtCellRk' */\n\t\t\tcase 0x0003: /* 'BrtCellError' */\n\t\t\tcase 0x0004: /* 'BrtCellBool' */\n\t\t\tcase 0x0005: /* 'BrtCellReal' */\n\t\t\tcase 0x0006: /* 'BrtCellSt' */\n\t\t\tcase 0x0007: /* 'BrtCellIsst' */\n\t\t\tcase 0x0008: /* 'BrtFmlaString' */\n\t\t\tcase 0x0009: /* 'BrtFmlaNum' */\n\t\t\tcase 0x000A: /* 'BrtFmlaBool' */\n\t\t\tcase 0x000B: /* 'BrtFmlaError' */\n\t\t\tcase 0x000D: /* 'BrtShortRk' */\n\t\t\tcase 0x000E: /* 'BrtShortError' */\n\t\t\tcase 0x000F: /* 'BrtShortBool' */\n\t\t\tcase 0x0010: /* 'BrtShortReal' */\n\t\t\tcase 0x0011: /* 'BrtShortSt' */\n\t\t\tcase 0x0012: /* 'BrtShortIsst' */\n\t\t\t\tp = ({t:val[2]}/*:any*/);\n\t\t\t\tswitch(val[2]) {\n\t\t\t\t\tcase 'n': p.v = val[1]; break;\n\t\t\t\t\tcase 's': sstr = strs[val[1]]; p.v = sstr.t; p.r = sstr.r; break;\n\t\t\t\t\tcase 'b': p.v = val[1] ? true : false; break;\n\t\t\t\t\tcase 'e': p.v = val[1]; if(opts.cellText !== false) p.w = BErr[p.v]; break;\n\t\t\t\t\tcase 'str': p.t = 's'; p.v = val[1]; break;\n\t\t\t\t}\n\t\t\t\tif((cf = styles.CellXf[val[0].iStyleRef])) safe_format(p,cf.numFmtId,null,opts, themes, styles);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\taf = false;\n\t\t\t\t\tfor(ai = 0; ai < arrayf.length; ++ai) {\n\t\t\t\t\t\tvar aii = arrayf[ai];\n\t\t\t\t\t\tif(row.r >= aii[0].s.r && row.r <= aii[0].e.r)\n\t\t\t\t\t\t\tif(C >= aii[0].s.c && C <= aii[0].e.c) {\n\t\t\t\t\t\t\t\tp.F = encode_range(aii[0]); af = true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif(!af && val.length > 3) p.f = val[3];\n\t\t\t\t}\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tif(opts.cellDates && cf && p.t == 'n' && SSF.is_date(SSF._table[cf.numFmtId])) {\n\t\t\t\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0001: /* 'BrtCellBlank' */\n\t\t\tcase 0x000C: /* 'BrtShortBlank' */\n\t\t\t\tif(!opts.sheetStubs || pass) break;\n\t\t\t\tp = ({t:'z',v:undefined}/*:any*/);\n\t\t\t\tC = val[0].c == -1 ? C + 1 : val[0].c;\n\t\t\t\tif(opts.dense) { if(!s[R]) s[R] = []; s[R][C] = p; }\n\t\t\t\telse s[encode_col(C) + rr] = p;\n\t\t\t\tif(refguess.s.r > row.r) refguess.s.r = row.r;\n\t\t\t\tif(refguess.s.c > C) refguess.s.c = C;\n\t\t\t\tif(refguess.e.r < row.r) refguess.e.r = row.r;\n\t\t\t\tif(refguess.e.c < C) refguess.e.c = C;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00B0: /* 'BrtMergeCell' */\n\t\t\t\tmerges.push(val); break;\n\n\t\t\tcase 0x01EE: /* 'BrtHLink' */\n\t\t\t\tvar rel = rels['!id'][val.relId];\n\t\t\t\tif(rel) {\n\t\t\t\t\tval.Target = rel.Target;\n\t\t\t\t\tif(val.loc) val.Target += \"#\"+val.loc;\n\t\t\t\t\tval.Rel = rel;\n\t\t\t\t} else if(val.relId == '') {\n\t\t\t\t\tval.Target = \"#\" + val.loc;\n\t\t\t\t}\n\t\t\t\tfor(R=val.rfx.s.r;R<=val.rfx.e.r;++R) for(C=val.rfx.s.c;C<=val.rfx.e.c;++C) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!s[R]) s[R] = [];\n\t\t\t\t\t\tif(!s[R][C]) s[R][C] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[R][C].l = val;\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddr = encode_cell({c:C,r:R});\n\t\t\t\t\t\tif(!s[addr]) s[addr] = {t:'z',v:undefined};\n\t\t\t\t\t\ts[addr].l = val;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01AA: /* 'BrtArrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tarrayf.push(val);\n\t\t\t\tcell = ((opts.dense ? s[R][C] : s[encode_col(C) + rr])/*:any*/);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tcell.F = encode_range(val[0]);\n\t\t\t\tbreak;\n\t\t\tcase 0x01AB: /* 'BrtShrFmla' */\n\t\t\t\tif(!opts.cellFormula) break;\n\t\t\t\tsharedf[encode_cell(val[0].s)] = val[1];\n\t\t\t\tcell = (opts.dense ? s[R][C] : s[encode_col(C) + rr]);\n\t\t\t\tcell.f = stringify_formula(val[1], refguess, {r:row.r, c:C}, supbooks, opts);\n\t\t\t\tbreak;\n\n\t\t\t/* identical to 'ColInfo' in XLS */\n\t\t\tcase 0x003C: /* 'BrtColInfo' */\n\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, hidden: !!(val.flags & 0x01), level: val.level };\n\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 0x00A1: /* 'BrtBeginAFilter' */\n\t\t\t\ts['!autofilter'] = { ref:encode_range(val) };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\t\ts['!margins'] = val;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0093: /* 'BrtWsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tif(val.above || val.left) s['!outline'] = { above: val.above, left: val.left };\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0089: /* 'BrtBeginWsView' */\n\t\t\t\tif(!wb.Views) wb.Views = [{}];\n\t\t\t\tif(!wb.Views[0]) wb.Views[0] = {};\n\t\t\t\tif(val.RTL) wb.Views[0].RTL = true;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x01E5: /* 'BrtWsFmtInfo' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0040: /* 'BrtDVal' */\n\t\t\tcase 0x041D: /* 'BrtDVal14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0097: /* 'BrtPane' */\n\t\t\t\tbreak;\n\t\t\tcase 0x0098: /* 'BrtSel' */\n\t\t\tcase 0x00AF: /* 'BrtAFilterDateGroupItem' */\n\t\t\tcase 0x0284: /* 'BrtActiveX' */\n\t\t\tcase 0x0271: /* 'BrtBigName' */\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x018C: /* 'BrtBrk' */\n\t\t\tcase 0x0458: /* 'BrtCFIcon' */\n\t\t\tcase 0x047A: /* 'BrtCFRuleExt' */\n\t\t\tcase 0x01D7: /* 'BrtCFVO' */\n\t\t\tcase 0x041A: /* 'BrtCFVO14' */\n\t\t\tcase 0x0289: /* 'BrtCellIgnoreEC' */\n\t\t\tcase 0x0451: /* 'BrtCellIgnoreEC14' */\n\t\t\tcase 0x0031: /* 'BrtCellMeta' */\n\t\t\tcase 0x024D: /* 'BrtCellSmartTagProperty' */\n\t\t\tcase 0x025F: /* 'BrtCellWatch' */\n\t\t\tcase 0x0234: /* 'BrtColor' */\n\t\t\tcase 0x041F: /* 'BrtColor14' */\n\t\t\tcase 0x00A8: /* 'BrtColorFilter' */\n\t\t\tcase 0x00AE: /* 'BrtCustomFilter' */\n\t\t\tcase 0x049C: /* 'BrtCustomFilter14' */\n\t\t\tcase 0x01F3: /* 'BrtDRef' */\n\t\t\tcase 0x01FB: /* 'BrtDXF' */\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\tcase 0x00AB: /* 'BrtDynamicFilter' */\n\t\t\tcase 0x00A7: /* 'BrtFilter' */\n\t\t\tcase 0x0499: /* 'BrtFilter14' */\n\t\t\tcase 0x00A9: /* 'BrtIconFilter' */\n\t\t\tcase 0x049D: /* 'BrtIconFilter14' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x0295: /* 'BrtListPart' */\n\t\t\tcase 0x027F: /* 'BrtOleObject' */\n\t\t\tcase 0x01DE: /* 'BrtPageSetup' */\n\t\t\tcase 0x0219: /* 'BrtPhoneticInfo' */\n\t\t\tcase 0x01DD: /* 'BrtPrintOptions' */\n\t\t\tcase 0x0218: /* 'BrtRangeProtection' */\n\t\t\tcase 0x044F: /* 'BrtRangeProtection14' */\n\t\t\tcase 0x02A8: /* 'BrtRangeProtectionIso' */\n\t\t\tcase 0x0450: /* 'BrtRangeProtectionIso14' */\n\t\t\tcase 0x0400: /* 'BrtRwDescent' */\n\t\t\tcase 0x0297: /* 'BrtSheetCalcProp' */\n\t\t\tcase 0x0217: /* 'BrtSheetProtection' */\n\t\t\tcase 0x02A6: /* 'BrtSheetProtectionIso' */\n\t\t\tcase 0x01F8: /* 'BrtSlc' */\n\t\t\tcase 0x0413: /* 'BrtSparkline' */\n\t\t\tcase 0x01AC: /* 'BrtTable' */\n\t\t\tcase 0x00AA: /* 'BrtTop10Filter' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0032: /* 'BrtValueMeta' */\n\t\t\tcase 0x0816: /* 'BrtWebExtension' */\n\t\t\tcase 0x0415: /* 'BrtWsFmtInfoEx14' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tdelete opts.supbooks;\n\tdelete opts['!row'];\n\n\tif(!s[\"!ref\"] && (refguess.s.r < 2000000 || ref && (ref.e.r > 0 || ref.e.c > 0 || ref.s.r > 0 || ref.s.c > 0))) s[\"!ref\"] = encode_range(ref || refguess);\n\tif(opts.sheetRows && s[\"!ref\"]) {\n\t\tvar tmpref = safe_decode_range(s[\"!ref\"]);\n\t\tif(opts.sheetRows <= +tmpref.e.r) {\n\t\t\ttmpref.e.r = opts.sheetRows - 1;\n\t\t\tif(tmpref.e.r > refguess.e.r) tmpref.e.r = refguess.e.r;\n\t\t\tif(tmpref.e.r < tmpref.s.r) tmpref.s.r = tmpref.e.r;\n\t\t\tif(tmpref.e.c > refguess.e.c) tmpref.e.c = refguess.e.c;\n\t\t\tif(tmpref.e.c < tmpref.s.c) tmpref.s.c = tmpref.e.c;\n\t\t\ts[\"!fullref\"] = s[\"!ref\"];\n\t\t\ts[\"!ref\"] = encode_range(tmpref);\n\t\t}\n\t}\n\tif(merges.length > 0) s[\"!merges\"] = merges;\n\tif(colinfo.length > 0) s[\"!cols\"] = colinfo;\n\tif(rowinfo.length > 0) s[\"!rows\"] = rowinfo;\n\treturn s;\n}\n\n/* TODO: something useful -- this is a stub */\nfunction write_ws_bin_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*/, opts, ws/*:Worksheet*/, last_seen/*:boolean*/)/*:boolean*/ {\n\tif(cell.v === undefined) return false;\n\tvar vv = \"\";\n\tswitch(cell.t) {\n\t\tcase 'b': vv = cell.v ? \"1\" : \"0\"; break;\n\t\tcase 'd': // no BrtCellDate :(\n\t\t\tcell = dup(cell);\n\t\t\tcell.z = cell.z || SSF._table[14];\n\t\t\tcell.v = datenum(parseDate(cell.v)); cell.t = 'n';\n\t\t\tbreak;\n\t\t/* falls through */\n\t\tcase 'n': case 'e': vv = ''+cell.v; break;\n\t\tdefault: vv = cell.v; break;\n\t}\n\tvar o/*:any*/ = ({r:R, c:C}/*:any*/);\n\t/* TODO: cell style */\n\to.s = get_cell_style(opts.cellXfs, cell, opts);\n\tif(cell.l) ws['!links'].push([encode_cell(o), cell.l]);\n\tif(cell.c) ws['!comments'].push([encode_cell(o), cell.c]);\n\tswitch(cell.t) {\n\t\tcase 's': case 'str':\n\t\t\tif(opts.bookSST) {\n\t\t\t\tvv = get_sst_id(opts.Strings, (cell.v/*:any*/), opts.revStrings);\n\t\t\t\to.t = \"s\"; o.v = vv;\n\t\t\t\tif(last_seen) write_record(ba, \"BrtShortIsst\", write_BrtShortIsst(cell, o));\n\t\t\t\telse write_record(ba, \"BrtCellIsst\", write_BrtCellIsst(cell, o));\n\t\t\t} else {\n\t\t\t\to.t = \"str\";\n\t\t\t\tif(last_seen) write_record(ba, \"BrtShortSt\", write_BrtShortSt(cell, o));\n\t\t\t\telse write_record(ba, \"BrtCellSt\", write_BrtCellSt(cell, o));\n\t\t\t}\n\t\t\treturn true;\n\t\tcase 'n':\n\t\t\t/* TODO: determine threshold for Real vs RK */\n\t\t\tif(cell.v == (cell.v | 0) && cell.v > -1000 && cell.v < 1000) {\n\t\t\t\tif(last_seen) write_record(ba, \"BrtShortRk\", write_BrtShortRk(cell, o));\n\t\t\t\telse write_record(ba, \"BrtCellRk\", write_BrtCellRk(cell, o));\n\t\t\t} else {\n\t\t\t\tif(last_seen) write_record(ba, \"BrtShortReal\", write_BrtShortReal(cell, o));\n\t\t\t\telse write_record(ba, \"BrtCellReal\", write_BrtCellReal(cell, o));\n\t\t\t} return true;\n\t\tcase 'b':\n\t\t\to.t = \"b\";\n\t\t\tif(last_seen) write_record(ba, \"BrtShortBool\", write_BrtShortBool(cell, o));\n\t\t\telse write_record(ba, \"BrtCellBool\", write_BrtCellBool(cell, o));\n\t\t\treturn true;\n\t\tcase 'e':\n\t\t\to.t = \"e\";\n\t\t\tif(last_seen) write_record(ba, \"BrtShortError\", write_BrtShortError(cell, o));\n\t\t\telse write_record(ba, \"BrtCellError\", write_BrtCellError(cell, o));\n\t\t\treturn true;\n\t}\n\tif(last_seen) write_record(ba, \"BrtShortBlank\", write_BrtShortBlank(cell, o));\n\telse write_record(ba, \"BrtCellBlank\", write_BrtCellBlank(cell, o));\n\treturn true;\n}\n\nfunction write_CELLTABLE(ba, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref, rr = \"\", cols/*:Array*/ = [];\n\twrite_record(ba, 'BrtBeginSheetData');\n\tvar dense = Array.isArray(ws);\n\tvar cap = range.e.r;\n\tif(ws['!rows']) cap = Math.max(range.e.r, ws['!rows'].length - 1);\n\tfor(var R = range.s.r; R <= cap; ++R) {\n\t\trr = encode_row(R);\n\t\t/* [ACCELLTABLE] */\n\t\t/* BrtRowHdr */\n\t\twrite_row_header(ba, ws, range, R);\n\t\tvar last_seen = false;\n\t\tif(R <= range.e.r) for(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\t/* *16384CELL */\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) { last_seen = false; continue; }\n\t\t\t/* write cell */\n\t\t\tlast_seen = write_ws_bin_cell(ba, cell, R, C, opts, ws, last_seen);\n\t\t}\n\t}\n\twrite_record(ba, 'BrtEndSheetData');\n}\n\nfunction write_MERGECELLS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!merges']) return;\n\twrite_record(ba, 'BrtBeginMergeCells', write_BrtBeginMergeCells(ws['!merges'].length));\n\tws['!merges'].forEach(function(m) { write_record(ba, 'BrtMergeCell', write_BrtMergeCell(m)); });\n\twrite_record(ba, 'BrtEndMergeCells');\n}\n\nfunction write_COLINFOS(ba, ws/*:Worksheet*//*::, idx:number, opts, wb:Workbook*/) {\n\tif(!ws || !ws['!cols']) return;\n\twrite_record(ba, 'BrtBeginColInfos');\n\tws['!cols'].forEach(function(m, i) { if(m) write_record(ba, 'BrtColInfo', write_BrtColInfo(i, m)); });\n\twrite_record(ba, 'BrtEndColInfos');\n}\n\nfunction write_IGNOREECS(ba, ws/*:Worksheet*/) {\n\tif(!ws || !ws['!ref']) return;\n\twrite_record(ba, 'BrtBeginCellIgnoreECs');\n\twrite_record(ba, 'BrtCellIgnoreEC', write_BrtCellIgnoreEC(safe_decode_range(ws['!ref'])));\n\twrite_record(ba, 'BrtEndCellIgnoreECs');\n}\n\nfunction write_HLINKS(ba, ws/*:Worksheet*/, rels) {\n\t/* *BrtHLink */\n\tws['!links'].forEach(function(l) {\n\t\tif(!l[1].Target) return;\n\t\tvar rId = add_rels(rels, -1, l[1].Target.replace(/#.*$/, \"\"), RELS.HLINK);\n\t\twrite_record(ba, \"BrtHLink\", write_BrtHLink(l, rId));\n\t});\n\tdelete ws['!links'];\n}\nfunction write_LEGACYDRAWING(ba, ws/*:Worksheet*/, idx/*:number*/, rels) {\n\t/* [BrtLegacyDrawing] */\n\tif(ws['!comments'].length > 0) {\n\t\tvar rId = add_rels(rels, -1, \"../drawings/vmlDrawing\" + (idx+1) + \".vml\", RELS.VML);\n\t\twrite_record(ba, \"BrtLegacyDrawing\", write_RelID(\"rId\" + rId));\n\t\tws['!legacy'] = rId;\n\t}\n}\n\nfunction write_AUTOFILTER(ba, ws, wb, idx) {\n\tif(!ws['!autofilter']) return;\n\tvar data = ws['!autofilter'];\n\tvar ref = typeof data.ref === \"string\" ? data.ref : encode_range(data.ref);\n\n\t/* Update FilterDatabase defined name for the worksheet */\n\tif(!wb.Workbook) wb.Workbook = ({Sheets:[]}/*:any*/);\n\tif(!wb.Workbook.Names) wb.Workbook.Names = [];\n\tvar names/*: Array */ = wb.Workbook.Names;\n\tvar range = decode_range(ref);\n\tif(range.s.r == range.e.r) { range.e.r = decode_range(ws[\"!ref\"]).e.r; ref = encode_range(range); }\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar name = names[i];\n\t\tif(name.Name != '_xlnm._FilterDatabase') continue;\n\t\tif(name.Sheet != idx) continue;\n\t\tname.Ref = \"'\" + wb.SheetNames[idx] + \"'!\" + ref; break;\n\t}\n\tif(i == names.length) names.push({ Name: '_xlnm._FilterDatabase', Sheet: idx, Ref: \"'\" + wb.SheetNames[idx] + \"'!\" + ref });\n\n\twrite_record(ba, \"BrtBeginAFilter\", write_UncheckedRfX(safe_decode_range(ref)));\n\t/* *FILTERCOLUMN */\n\t/* [SORTSTATE] */\n\t/* BrtEndAFilter */\n\twrite_record(ba, \"BrtEndAFilter\");\n}\n\nfunction write_WSVIEWS2(ba, ws, Workbook) {\n\twrite_record(ba, \"BrtBeginWsViews\");\n\t{ /* 1*WSVIEW2 */\n\t\t/* [ACUID] */\n\t\twrite_record(ba, \"BrtBeginWsView\", write_BrtBeginWsView(ws, Workbook));\n\t\t/* [BrtPane] */\n\t\t/* *4BrtSel */\n\t\t/* *4SXSELECT */\n\t\t/* *FRT */\n\t\twrite_record(ba, \"BrtEndWsView\");\n\t}\n\t/* *FRT */\n\twrite_record(ba, \"BrtEndWsViews\");\n}\n\nfunction write_WSFMTINFO(/*::ba, ws*/) {\n\t/* [ACWSFMTINFO] */\n\t//write_record(ba, \"BrtWsFmtInfo\", write_BrtWsFmtInfo(ws));\n}\n\nfunction write_SHEETPROTECT(ba, ws) {\n\tif(!ws['!protect']) return;\n\t/* [BrtSheetProtectionIso] */\n\twrite_record(ba, \"BrtSheetProtection\", write_BrtSheetProtection(ws['!protect']));\n}\n\nfunction write_ws_bin(idx/*:number*/, opts, wb/*:Workbook*/, rels) {\n\tvar ba = buf_array();\n\tvar s = wb.SheetNames[idx], ws = wb.Sheets[s] || {};\n\tvar c/*:string*/ = s; try { if(wb && wb.Workbook) c = wb.Workbook.Sheets[idx].CodeName || c; } catch(e) {}\n\tvar r = safe_decode_range(ws['!ref'] || \"A1\");\n\tif(r.e.c > 0x3FFF || r.e.r > 0xFFFFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:XFD1048576\");\n\t\tr.e.c = Math.min(r.e.c, 0x3FFF);\n\t\tr.e.r = Math.min(r.e.c, 0xFFFFF);\n\t}\n\tws['!links'] = [];\n\t/* passed back to write_zip and removed there */\n\tws['!comments'] = [];\n\twrite_record(ba, \"BrtBeginSheet\");\n\tif(wb.vbaraw || ws['!outline']) write_record(ba, \"BrtWsProp\", write_BrtWsProp(c, ws['!outline']));\n\twrite_record(ba, \"BrtWsDim\", write_BrtWsDim(r));\n\twrite_WSVIEWS2(ba, ws, wb.Workbook);\n\twrite_WSFMTINFO(ba, ws);\n\twrite_COLINFOS(ba, ws, idx, opts, wb);\n\twrite_CELLTABLE(ba, ws, idx, opts, wb);\n\t/* [BrtSheetCalcProp] */\n\twrite_SHEETPROTECT(ba, ws);\n\t/* *([BrtRangeProtectionIso] BrtRangeProtection) */\n\t/* [SCENMAN] */\n\twrite_AUTOFILTER(ba, ws, wb, idx);\n\t/* [SORTSTATE] */\n\t/* [DCON] */\n\t/* [USERSHVIEWS] */\n\twrite_MERGECELLS(ba, ws);\n\t/* [BrtPhoneticInfo] */\n\t/* *CONDITIONALFORMATTING */\n\t/* [DVALS] */\n\twrite_HLINKS(ba, ws, rels);\n\t/* [BrtPrintOptions] */\n\tif(ws['!margins']) write_record(ba, \"BrtMargins\", write_BrtMargins(ws['!margins']));\n\t/* [BrtPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* [RWBRK] */\n\t/* [COLBRK] */\n\t/* *BrtBigName */\n\t/* [CELLWATCHES] */\n\tif(!opts || opts.ignoreEC || (opts.ignoreEC == (void 0))) write_IGNOREECS(ba, ws);\n\t/* [SMARTTAGS] */\n\t/* [BrtDrawing] */\n\twrite_LEGACYDRAWING(ba, ws, idx, rels);\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [OLEOBJECTS] */\n\t/* [ACTIVEXCONTROLS] */\n\t/* [WEBPUBITEMS] */\n\t/* [LISTPARTS] */\n\t/* FRTWORKSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\nRELS.CHART = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chart\";\nRELS.CHARTEX = \"http://schemas.microsoft.com/office/2014/relationships/chartEx\";\n\nfunction parse_Cache(data/*:string*/)/*:[Array, string, ?string]*/ {\n\tvar col/*:Array*/ = [];\n\tvar num = data.match(/^/);\n\tvar f;\n\n\t/* 21.2.2.150 pt CT_NumVal */\n\t(data.match(/(.*?)<\\/c:pt>/mg)||[]).forEach(function(pt) {\n\t\tvar q = pt.match(/(.*)<\\/c:v><\\/c:pt>/);\n\t\tif(!q) return;\n\t\tcol[+q[1]] = num ? +q[2] : q[2];\n\t});\n\n\t/* 21.2.2.71 formatCode CT_Xstring */\n\tvar nf = unescapexml((data.match(/([\\s\\S]*?)<\\/c:formatCode>/) || [\"\",\"General\"])[1]);\n\n\t(data.match(/(.*?)<\\/c:f>/mg)||[]).forEach(function(F) { f = F.replace(/<.*?>/g,\"\"); });\n\n\treturn [col, nf, f];\n}\n\n/* 21.2 DrawingML - Charts */\nfunction parse_chart(data/*:?string*/, name/*:string*/, opts, rels, wb, csheet) {\n\tvar cs/*:Worksheet*/ = ((csheet || {\"!type\":\"chart\"})/*:any*/);\n\tif(!data) return csheet;\n\t/* 21.2.2.27 chart CT_Chart */\n\n\tvar C = 0, R = 0, col = \"A\";\n\tvar refguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\n\t/* 21.2.2.120 numCache CT_NumData */\n\t(data.match(/[\\s\\S]*?<\\/c:numCache>/gm)||[]).forEach(function(nc) {\n\t\tvar cache = parse_Cache(nc);\n\t\trefguess.s.r = refguess.s.c = 0;\n\t\trefguess.e.c = C;\n\t\tcol = encode_col(C);\n\t\tcache[0].forEach(function(n,i) {\n\t\t\tcs[col + encode_row(i)] = {t:'n', v:n, z:cache[1] };\n\t\t\tR = i;\n\t\t});\n\t\tif(refguess.e.r < R) refguess.e.r = R;\n\t\t++C;\n\t});\n\tif(C > 0) cs[\"!ref\"] = encode_range(refguess);\n\treturn cs;\n}\nRELS.CS = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet\";\n\nvar CS_XML_ROOT = writextag('chartsheet', null, {\n\t'xmlns': XMLNS.main[0],\n\t'xmlns:r': XMLNS.r\n});\n\n/* 18.3 Worksheets also covers Chartsheets */\nfunction parse_cs_xml(data/*:?string*/, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\t/* 18.3.1.12 chartsheet CT_ChartSheet */\n\tif(!rels) rels = {'!id':{}};\n\tvar s = ({'!type':\"chart\", '!drawel':null, '!rel':\"\"}/*:any*/);\n\tvar m;\n\n\t/* 18.3.1.83 sheetPr CT_ChartsheetPr */\n\tvar sheetPr = data.match(sheetprregex);\n\tif(sheetPr) parse_ws_xml_sheetpr(sheetPr[0], s, wb, idx);\n\n\t/* 18.3.1.36 drawing CT_Drawing */\n\tif((m = data.match(/drawing r:id=\"(.*?)\"/))) s['!rel'] = m[1];\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_xml(idx/*:number*/, opts, wb/*:Workbook*/, rels)/*:string*/ {\n\tvar o = [XML_HEADER, CS_XML_ROOT];\n\to[o.length] = writextag(\"drawing\", null, {\"r:id\": \"rId1\"});\n\tadd_rels(rels, -1, \"../drawings/drawing\" + (idx+1) + \".xml\", RELS.DRAW);\n\tif(o.length>2) { o[o.length] = (''); o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n\n/* [MS-XLSB] 2.4.331 BrtCsProp */\nfunction parse_BrtCsProp(data, length/*:number*/) {\n\tdata.l += 10;\n\tvar name = parse_XLWideString(data, length - 10);\n\treturn { name: name };\n}\n\n/* [MS-XLSB] 2.1.7.7 Chart Sheet */\nfunction parse_cs_bin(data, opts, idx/*:number*/, rels, wb/*::, themes, styles*/)/*:Worksheet*/ {\n\tif(!data) return data;\n\tif(!rels) rels = {'!id':{}};\n\tvar s = {'!type':\"chart\", '!drawel':null, '!rel':\"\"};\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\trecordhopper(data, function cs_parse(val, R_n, RT) {\n\t\tswitch(RT) {\n\n\t\t\tcase 0x0226: /* 'BrtDrawing' */\n\t\t\t\ts['!rel'] = val; break;\n\n\t\t\tcase 0x028B: /* 'BrtCsProp' */\n\t\t\t\tif(!wb.Sheets[idx]) wb.Sheets[idx] = {};\n\t\t\t\tif(val.name) wb.Sheets[idx].CodeName = val.name;\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0232: /* 'BrtBkHim' */\n\t\t\tcase 0x028C: /* 'BrtCsPageSetup' */\n\t\t\tcase 0x029D: /* 'BrtCsProtection' */\n\t\t\tcase 0x02A7: /* 'BrtCsProtectionIso' */\n\t\t\tcase 0x0227: /* 'BrtLegacyDrawing' */\n\t\t\tcase 0x0228: /* 'BrtLegacyDrawingHF' */\n\t\t\tcase 0x01DC: /* 'BrtMargins' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tpass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tpass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0) state.push(R_n);\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0) state.pop();\n\t\t\t\telse if(!pass || opts.WTF) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tif(rels['!id'][s['!rel']]) s['!drawel'] = rels['!id'][s['!rel']];\n\treturn s;\n}\nfunction write_cs_bin(/*::idx:number, opts, wb:Workbook, rels*/) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginSheet\");\n\t/* [BrtCsProp] */\n\t/* CSVIEWS */\n\t/* [[BrtCsProtectionIso] BrtCsProtection] */\n\t/* [USERCSVIEWS] */\n\t/* [BrtMargins] */\n\t/* [BrtCsPageSetup] */\n\t/* [HEADERFOOTER] */\n\t/* BrtDrawing */\n\t/* [BrtLegacyDrawing] */\n\t/* [BrtLegacyDrawingHF] */\n\t/* [BrtBkHim] */\n\t/* [WEBPUBITEMS] */\n\t/* FRTCHARTSHEET */\n\twrite_record(ba, \"BrtEndSheet\");\n\treturn ba.end();\n}\n/* 18.2.28 (CT_WorkbookProtection) Defaults */\nvar WBPropsDef = [\n\t['allowRefreshQuery', false, \"bool\"],\n\t['autoCompressPictures', true, \"bool\"],\n\t['backupFile', false, \"bool\"],\n\t['checkCompatibility', false, \"bool\"],\n\t['CodeName', ''],\n\t['date1904', false, \"bool\"],\n\t['defaultThemeVersion', 0, \"int\"],\n\t['filterPrivacy', false, \"bool\"],\n\t['hidePivotFieldList', false, \"bool\"],\n\t['promptedSolutions', false, \"bool\"],\n\t['publishItems', false, \"bool\"],\n\t['refreshAllConnections', false, \"bool\"],\n\t['saveExternalLinkValues', true, \"bool\"],\n\t['showBorderUnselectedTables', true, \"bool\"],\n\t['showInkAnnotation', true, \"bool\"],\n\t['showObjects', 'all'],\n\t['showPivotChartFilter', false, \"bool\"],\n\t['updateLinks', 'userSet']\n];\n\n/* 18.2.30 (CT_BookView) Defaults */\nvar WBViewDef = [\n\t['activeTab', 0, \"int\"],\n\t['autoFilterDateGrouping', true, \"bool\"],\n\t['firstSheet', 0, \"int\"],\n\t['minimized', false, \"bool\"],\n\t['showHorizontalScroll', true, \"bool\"],\n\t['showSheetTabs', true, \"bool\"],\n\t['showVerticalScroll', true, \"bool\"],\n\t['tabRatio', 600, \"int\"],\n\t['visibility', 'visible']\n\t//window{Height,Width}, {x,y}Window\n];\n\n/* 18.2.19 (CT_Sheet) Defaults */\nvar SheetDef = [\n\t//['state', 'visible']\n];\n\n/* 18.2.2 (CT_CalcPr) Defaults */\nvar CalcPrDef = [\n\t['calcCompleted', 'true'],\n\t['calcMode', 'auto'],\n\t['calcOnSave', 'true'],\n\t['concurrentCalc', 'true'],\n\t['fullCalcOnLoad', 'false'],\n\t['fullPrecision', 'true'],\n\t['iterate', 'false'],\n\t['iterateCount', '100'],\n\t['iterateDelta', '0.001'],\n\t['refMode', 'A1']\n];\n\n/* 18.2.3 (CT_CustomWorkbookView) Defaults */\n/*var CustomWBViewDef = [\n\t['autoUpdate', 'false'],\n\t['changesSavedWin', 'false'],\n\t['includeHiddenRowCol', 'true'],\n\t['includePrintSettings', 'true'],\n\t['maximized', 'false'],\n\t['minimized', 'false'],\n\t['onlySync', 'false'],\n\t['personalView', 'false'],\n\t['showComments', 'commIndicator'],\n\t['showFormulaBar', 'true'],\n\t['showHorizontalScroll', 'true'],\n\t['showObjects', 'all'],\n\t['showSheetTabs', 'true'],\n\t['showStatusbar', 'true'],\n\t['showVerticalScroll', 'true'],\n\t['tabRatio', '600'],\n\t['xWindow', '0'],\n\t['yWindow', '0']\n];*/\n\nfunction push_defaults_array(target, defaults) {\n\tfor(var j = 0; j != target.length; ++j) { var w = target[j];\n\t\tfor(var i=0; i != defaults.length; ++i) { var z = defaults[i];\n\t\t\tif(w[z[0]] == null) w[z[0]] = z[1];\n\t\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof w[z[0]] == \"string\") w[z[0]] = parsexmlbool(w[z[0]]); break;\n\t\t\tcase \"int\": if(typeof w[z[0]] == \"string\") w[z[0]] = parseInt(w[z[0]], 10); break;\n\t\t\t}\n\t\t}\n\t}\n}\nfunction push_defaults(target, defaults) {\n\tfor(var i = 0; i != defaults.length; ++i) { var z = defaults[i];\n\t\tif(target[z[0]] == null) target[z[0]] = z[1];\n\t\telse switch(z[2]) {\n\t\t\tcase \"bool\": if(typeof target[z[0]] == \"string\") target[z[0]] = parsexmlbool(target[z[0]]); break;\n\t\t\tcase \"int\": if(typeof target[z[0]] == \"string\") target[z[0]] = parseInt(target[z[0]], 10); break;\n\t\t}\n\t}\n}\n\nfunction parse_wb_defaults(wb) {\n\tpush_defaults(wb.WBProps, WBPropsDef);\n\tpush_defaults(wb.CalcPr, CalcPrDef);\n\n\tpush_defaults_array(wb.WBView, WBViewDef);\n\tpush_defaults_array(wb.Sheets, SheetDef);\n\n\t_ssfopts.date1904 = parsexmlbool(wb.WBProps.date1904);\n}\n\nfunction safe1904(wb/*:Workbook*/)/*:string*/ {\n\t/* TODO: store date1904 somewhere else */\n\tif(!wb.Workbook) return \"false\";\n\tif(!wb.Workbook.WBProps) return \"false\";\n\treturn parsexmlbool(wb.Workbook.WBProps.date1904) ? \"true\" : \"false\";\n}\n\nvar badchars = \"][*?\\/\\\\\".split(\"\");\nfunction check_ws_name(n/*:string*/, safe/*:?boolean*/)/*:boolean*/ {\n\tif(n.length > 31) { if(safe) return false; throw new Error(\"Sheet names cannot exceed 31 chars\"); }\n\tvar _good = true;\n\tbadchars.forEach(function(c) {\n\t\tif(n.indexOf(c) == -1) return;\n\t\tif(!safe) throw new Error(\"Sheet name cannot contain : \\\\ / ? * [ ]\");\n\t\t_good = false;\n\t});\n\treturn _good;\n}\nfunction check_wb_names(N, S, codes) {\n\tN.forEach(function(n,i) {\n\t\tcheck_ws_name(n);\n\t\tfor(var j = 0; j < i; ++j) if(n == N[j]) throw new Error(\"Duplicate Sheet Name: \" + n);\n\t\tif(codes) {\n\t\t\tvar cn = (S && S[i] && S[i].CodeName) || n;\n\t\t\tif(cn.charCodeAt(0) == 95 && cn.length > 22) throw new Error(\"Bad Code Name: Worksheet\" + cn);\n\t\t}\n\t});\n}\nfunction check_wb(wb) {\n\tif(!wb || !wb.SheetNames || !wb.Sheets) throw new Error(\"Invalid Workbook\");\n\tif(!wb.SheetNames.length) throw new Error(\"Workbook is empty\");\n\tvar Sheets = (wb.Workbook && wb.Workbook.Sheets) || [];\n\tcheck_wb_names(wb.SheetNames, Sheets, !!wb.vbaraw);\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) check_ws(wb.Sheets[wb.SheetNames[i]], wb.SheetNames[i], i);\n\t/* TODO: validate workbook */\n}\n/* 18.2 Workbook */\nvar wbnsregex = /<\\w+:workbook/;\nfunction parse_wb_xml(data, opts)/*:WorkbookFile*/ {\n\tif(!data) throw new Error(\"Could not find file\");\n\tvar wb = /*::(*/{ AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, Names:[], xmlns: \"\" }/*::)*/;\n\tvar pass = false, xmlns = \"xmlns\";\n\tvar dname = {}, dnstart = 0;\n\tdata.replace(tagregex, function xml_wb(x, idx) {\n\t\tvar y/*:any*/ = parsexmltag(x);\n\t\tswitch(strip_ns(y[0])) {\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.13 fileVersion CT_FileVersion ? */\n\t\t\tcase '': case '': break;\n\n\t\t\t/* 18.2.12 fileSharing CT_FileSharing ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.28 workbookPr CT_WorkbookPr ? */\n\t\t\tcase '':\n\t\t\t\tWBPropsDef.forEach(function(w) {\n\t\t\t\t\tif(y[w[0]] == null) return;\n\t\t\t\t\tswitch(w[2]) {\n\t\t\t\t\t\tcase \"bool\": wb.WBProps[w[0]] = parsexmlbool(y[w[0]]); break;\n\t\t\t\t\t\tcase \"int\": wb.WBProps[w[0]] = parseInt(y[w[0]], 10); break;\n\t\t\t\t\t\tdefault: wb.WBProps[w[0]] = y[w[0]];\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tif(y.codeName) wb.WBProps.CodeName = utf8read(y.codeName);\n\t\t\t\tbreak;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.29 workbookProtection CT_WorkbookProtection ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.1 bookViews CT_BookViews ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.30 workbookView CT_BookView + */\n\t\t\tcase '': delete y[0]; wb.WBView.push(y); break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.20 sheets CT_Sheets 1 */\n\t\t\tcase '': case '': break; // aggregate sheet\n\t\t\t/* 18.2.19 sheet CT_Sheet + */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.15 functionGroups CT_FunctionGroups ? */\n\t\t\tcase '': break;\n\t\t\t/* 18.2.14 functionGroup CT_FunctionGroup + */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.8 externalReference CT_ExternalReference + */\n\t\t\tcase '': break;\n\t\t\tcase '': case '': pass=false; break;\n\t\t\t/* 18.2.5 definedName CT_DefinedName + */\n\t\t\tcase '': {\n\t\t\t\tdname.Ref = unescapexml(utf8read(data.slice(dnstart, idx)));\n\t\t\t\twb.Names.push(dname);\n\t\t\t} break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.2 calcPr CT_CalcPr ? */\n\t\t\tcase '': delete y[0]; wb.CalcPr = y; break;\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.16 oleSize CT_OleSize ? (ref required) */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.18 pivotCaches CT_PivotCaches ? */\n\t\t\tcase '': case '': case '': break;\n\n\t\t\t/* 18.2.23 smartTagTypes CT_SmartTagTypes ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.22 smartTagType CT_SmartTagType ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.11 fileRecoveryPr CT_FileRecoveryPr ? */\n\t\t\tcase '': break;\n\n\t\t\t/* 18.2.26 webPublishObjects CT_WebPublishObjects ? */\n\t\t\tcase '': case '': break;\n\t\t\t/* 18.2.25 webPublishObject CT_WebPublishObject ? */\n\t\t\tcase '': case '': case '': break;\n\t\t\t/* 18.2.7 ext CT_Extension + */\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* Others */\n\t\t\tcase '': pass=true; break;\n\t\t\tcase '': pass=false; break;\n\n\t\t\t/* TODO */\n\t\t\tcase ' 0);\n\n\t/* fileVersion */\n\t/* fileSharing */\n\n\tvar workbookPr/*:any*/ = ({codeName:\"ThisWorkbook\"}/*:any*/);\n\tif(wb.Workbook && wb.Workbook.WBProps) {\n\t\tWBPropsDef.forEach(function(x) {\n\t\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == null) return;\n\t\t\tif((wb.Workbook.WBProps[x[0]]/*:any*/) == x[1]) return;\n\t\t\tworkbookPr[x[0]] = (wb.Workbook.WBProps[x[0]]/*:any*/);\n\t\t});\n\t\t/*:: if(!wb.Workbook || !wb.Workbook.WBProps) throw \"unreachable\"; */\n\t\tif(wb.Workbook.WBProps.CodeName) { workbookPr.codeName = wb.Workbook.WBProps.CodeName; delete workbookPr.CodeName; }\n\t}\n\to[o.length] = (writextag('workbookPr', null, workbookPr));\n\n\t/* workbookProtection */\n\n\tvar sheets = wb.Workbook && wb.Workbook.Sheets || [];\n\tvar i = 0;\n\n\t/* bookViews only written if first worksheet is hidden */\n\tif(sheets && sheets[0] && !!sheets[0].Hidden) {\n\t\to[o.length] = \"\";\n\t\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\t\tif(!sheets[i]) break;\n\t\t\tif(!sheets[i].Hidden) break;\n\t\t}\n\t\tif(i == wb.SheetNames.length) i = 0;\n\t\to[o.length] = '';\n\t\to[o.length] = \"\";\n\t}\n\n\to[o.length] = \"\";\n\tfor(i = 0; i != wb.SheetNames.length; ++i) {\n\t\tvar sht = ({name:escapexml(wb.SheetNames[i].slice(0,31))}/*:any*/);\n\t\tsht.sheetId = \"\"+(i+1);\n\t\tsht[\"r:id\"] = \"rId\"+(i+1);\n\t\tif(sheets[i]) switch(sheets[i].Hidden) {\n\t\t\tcase 1: sht.state = \"hidden\"; break;\n\t\t\tcase 2: sht.state = \"veryHidden\"; break;\n\t\t}\n\t\to[o.length] = (writextag('sheet',null,sht));\n\t}\n\to[o.length] = \"\";\n\n\t/* functionGroups */\n\t/* externalReferences */\n\n\tif(write_names) {\n\t\to[o.length] = \"\";\n\t\tif(wb.Workbook && wb.Workbook.Names) wb.Workbook.Names.forEach(function(n) {\n\t\t\tvar d/*:any*/ = {name:n.Name};\n\t\t\tif(n.Comment) d.comment = n.Comment;\n\t\t\tif(n.Sheet != null) d.localSheetId = \"\"+n.Sheet;\n\t\t\tif(n.Hidden) d.hidden = \"1\";\n\t\t\tif(!n.Ref) return;\n\t\t\to[o.length] = writextag('definedName', escapexml(n.Ref), d);\n\t\t});\n\t\to[o.length] = \"\";\n\t}\n\n\t/* calcPr */\n\t/* oleSize */\n\t/* customWorkbookViews */\n\t/* pivotCaches */\n\t/* smartTagPr */\n\t/* smartTagTypes */\n\t/* webPublishing */\n\t/* fileRecoveryPr */\n\t/* webPublishObjects */\n\t/* extLst */\n\n\tif(o.length>2){ o[o.length] = ''; o[1]=o[1].replace(\"/>\",\">\"); }\n\treturn o.join(\"\");\n}\n/* [MS-XLSB] 2.4.304 BrtBundleSh */\nfunction parse_BrtBundleSh(data, length/*:number*/) {\n\tvar z = {};\n\tz.Hidden = data.read_shift(4); //hsState ST_SheetState\n\tz.iTabID = data.read_shift(4);\n\tz.strRelID = parse_RelID(data,length-8);\n\tz.name = parse_XLWideString(data);\n\treturn z;\n}\nfunction write_BrtBundleSh(data, o) {\n\tif(!o) o = new_buf(127);\n\to.write_shift(4, data.Hidden);\n\to.write_shift(4, data.iTabID);\n\twrite_RelID(data.strRelID, o);\n\twrite_XLWideString(data.name.slice(0,31), o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.815 BrtWbProp */\nfunction parse_BrtWbProp(data, length)/*:WBProps*/ {\n\tvar o/*:WBProps*/ = ({}/*:any*/);\n\tvar flags = data.read_shift(4);\n\to.defaultThemeVersion = data.read_shift(4);\n\tvar strName = (length > 8) ? parse_XLWideString(data) : \"\";\n\tif(strName.length > 0) o.CodeName = strName;\n\to.autoCompressPictures = !!(flags & 0x10000);\n\to.backupFile = !!(flags & 0x40);\n\to.checkCompatibility = !!(flags & 0x1000);\n\to.date1904 = !!(flags & 0x01);\n\to.filterPrivacy = !!(flags & 0x08);\n\to.hidePivotFieldList = !!(flags & 0x400);\n\to.promptedSolutions = !!(flags & 0x10);\n\to.publishItems = !!(flags & 0x800);\n\to.refreshAllConnections = !!(flags & 0x40000);\n\to.saveExternalLinkValues = !!(flags & 0x80);\n\to.showBorderUnselectedTables = !!(flags & 0x04);\n\to.showInkAnnotation = !!(flags & 0x20);\n\to.showObjects = [\"all\", \"placeholders\", \"none\"][(flags >> 13) & 0x03];\n\to.showPivotChartFilter = !!(flags & 0x8000);\n\to.updateLinks = [\"userSet\", \"never\", \"always\"][(flags >> 8) & 0x03];\n\treturn o;\n}\nfunction write_BrtWbProp(data/*:?WBProps*/, o) {\n\tif(!o) o = new_buf(72);\n\tvar flags = 0;\n\tif(data) {\n\t\t/* TODO: mirror parse_BrtWbProp fields */\n\t\tif(data.filterPrivacy) flags |= 0x08;\n\t}\n\to.write_shift(4, flags);\n\to.write_shift(4, 0);\n\twrite_XLSBCodeName(data && data.CodeName || \"ThisWorkbook\", o);\n\treturn o.slice(0, o.l);\n}\n\nfunction parse_BrtFRTArchID$(data, length) {\n\tvar o = {};\n\tdata.read_shift(4);\n\to.ArchID = data.read_shift(4);\n\tdata.l += length - 8;\n\treturn o;\n}\n\n/* [MS-XLSB] 2.4.687 BrtName */\nfunction parse_BrtName(data, length, opts) {\n\tvar end = data.l + length;\n\tdata.l += 4; //var flags = data.read_shift(4);\n\tdata.l += 1; //var chKey = data.read_shift(1);\n\tvar itab = data.read_shift(4);\n\tvar name = parse_XLNameWideString(data);\n\tvar formula = parse_XLSBNameParsedFormula(data, 0, opts);\n\tvar comment = parse_XLNullableWideString(data);\n\t//if(0 /* fProc */) {\n\t\t// unusedstring1: XLNullableWideString\n\t\t// description: XLNullableWideString\n\t\t// helpTopic: XLNullableWideString\n\t\t// unusedstring2: XLNullableWideString\n\t//}\n\tdata.l = end;\n\tvar out = ({Name:name, Ptg:formula}/*:any*/);\n\tif(itab < 0xFFFFFFF) out.Sheet = itab;\n\tif(comment) out.Comment = comment;\n\treturn out;\n}\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction parse_wb_bin(data, opts)/*:WorkbookFile*/ {\n\tvar wb = { AppVersion:{}, WBProps:{}, WBView:[], Sheets:[], CalcPr:{}, xmlns: \"\" };\n\tvar state/*:Array*/ = [];\n\tvar pass = false;\n\n\tif(!opts) opts = {};\n\topts.biff = 12;\n\n\tvar Names = [];\n\tvar supbooks = ([[]]/*:any*/);\n\tsupbooks.SheetNames = [];\n\tsupbooks.XTI = [];\n\n\tXLSBRecordEnum[0x0010] = { n:\"BrtFRTArchID$\", f:parse_BrtFRTArchID$ };\n\n\trecordhopper(data, function hopper_wb(val, R_n, RT) {\n\t\tswitch(RT) {\n\t\t\tcase 0x009C: /* 'BrtBundleSh' */\n\t\t\t\tsupbooks.SheetNames.push(val.name);\n\t\t\t\twb.Sheets.push(val); break;\n\n\t\t\tcase 0x0099: /* 'BrtWbProp' */\n\t\t\t\twb.WBProps = val; break;\n\n\t\t\tcase 0x0027: /* 'BrtName' */\n\t\t\t\tif(val.Sheet != null) opts.SID = val.Sheet;\n\t\t\t\tval.Ref = stringify_formula(val.Ptg, null, null, supbooks, opts);\n\t\t\t\tdelete opts.SID;\n\t\t\t\tdelete val.Ptg;\n\t\t\t\tNames.push(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x040C: /* 'BrtNameExt' */ break;\n\n\t\t\tcase 0x0165: /* 'BrtSupSelf' */\n\t\t\tcase 0x0166: /* 'BrtSupSame' */\n\t\t\tcase 0x0163: /* 'BrtSupBookSrc' */\n\t\t\tcase 0x029B: /* 'BrtSupAddin' */\n\t\t\t\tif(!supbooks[0].length) supbooks[0] = [RT, val];\n\t\t\t\telse supbooks.push([RT, val]);\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = [];\n\t\t\t\tbreak;\n\t\t\tcase 0x016A: /* 'BrtExternSheet' */\n\t\t\t\tif(supbooks.length === 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val);\n\t\t\t\tsupbooks.XTI = supbooks.XTI.concat(val);\n\t\t\t\tbreak;\n\t\t\tcase 0x0169: /* 'BrtPlaceholderName' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0817: /* 'BrtAbsPath15' */\n\t\t\tcase 0x009E: /* 'BrtBookView' */\n\t\t\tcase 0x008F: /* 'BrtBeginBundleShs' */\n\t\t\tcase 0x0298: /* 'BrtBeginFnGroup' */\n\t\t\tcase 0x0161: /* 'BrtBeginExternals' */\n\t\t\t\tbreak;\n\n\t\t\t/* case 'BrtModelTimeGroupingCalcCol' */\n\t\t\tcase 0x0C00: /* 'BrtUid' */\n\t\t\tcase 0x0C01: /* 'BrtRevisionPtr' */\n\t\t\tcase 0x0216: /* 'BrtBookProtection' */\n\t\t\tcase 0x02A5: /* 'BrtBookProtectionIso' */\n\t\t\tcase 0x009D: /* 'BrtCalcProp' */\n\t\t\tcase 0x0262: /* 'BrtCrashRecErr' */\n\t\t\tcase 0x0802: /* 'BrtDecoupledPivotCacheID' */\n\t\t\tcase 0x009B: /* 'BrtFileRecover' */\n\t\t\tcase 0x0224: /* 'BrtFileSharing' */\n\t\t\tcase 0x02A4: /* 'BrtFileSharingIso' */\n\t\t\tcase 0x0080: /* 'BrtFileVersion' */\n\t\t\tcase 0x0299: /* 'BrtFnGroup' */\n\t\t\tcase 0x0850: /* 'BrtModelRelationship' */\n\t\t\tcase 0x084D: /* 'BrtModelTable' */\n\t\t\tcase 0x0225: /* 'BrtOleSize' */\n\t\t\tcase 0x0805: /* 'BrtPivotTableRef' */\n\t\t\tcase 0x0254: /* 'BrtSmartTagType' */\n\t\t\tcase 0x081C: /* 'BrtTableSlicerCacheID' */\n\t\t\tcase 0x081B: /* 'BrtTableSlicerCacheIDs' */\n\t\t\tcase 0x0822: /* 'BrtTimelineCachePivotCacheID' */\n\t\t\tcase 0x018D: /* 'BrtUserBookView' */\n\t\t\tcase 0x009A: /* 'BrtWbFactoid' */\n\t\t\tcase 0x045D: /* 'BrtWbProp14' */\n\t\t\tcase 0x0229: /* 'BrtWebOpt' */\n\t\t\tcase 0x082B: /* 'BrtWorkBookPr15' */\n\t\t\t\tbreak;\n\n\t\t\tcase 0x0023: /* 'BrtFRTBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0024: /* 'BrtFRTEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\t\t\tcase 0x0025: /* 'BrtACBegin' */\n\t\t\t\tstate.push(R_n); pass = true; break;\n\t\t\tcase 0x0026: /* 'BrtACEnd' */\n\t\t\t\tstate.pop(); pass = false; break;\n\n\t\t\tcase 0x0010: /* 'BrtFRTArchID$' */ break;\n\n\t\t\tdefault:\n\t\t\t\tif((R_n||\"\").indexOf(\"Begin\") > 0){/* empty */}\n\t\t\t\telse if((R_n||\"\").indexOf(\"End\") > 0){/* empty */}\n\t\t\t\telse if(!pass || (opts.WTF && state[state.length-1] != \"BrtACBegin\" && state[state.length-1] != \"BrtFRTBegin\")) throw new Error(\"Unexpected record \" + RT + \" \" + R_n);\n\t\t}\n\t}, opts);\n\n\tparse_wb_defaults(wb);\n\n\t// $FlowIgnore\n\twb.Names = Names;\n\n\t(wb/*:any*/).supbooks = supbooks;\n\treturn wb;\n}\n\nfunction write_BUNDLESHS(ba, wb/*::, opts*/) {\n\twrite_record(ba, \"BrtBeginBundleShs\");\n\tfor(var idx = 0; idx != wb.SheetNames.length; ++idx) {\n\t\tvar viz = wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx] && wb.Workbook.Sheets[idx].Hidden || 0;\n\t\tvar d = { Hidden: viz, iTabID: idx+1, strRelID: 'rId' + (idx+1), name: wb.SheetNames[idx] };\n\t\twrite_record(ba, \"BrtBundleSh\", write_BrtBundleSh(d));\n\t}\n\twrite_record(ba, \"BrtEndBundleShs\");\n}\n\n/* [MS-XLSB] 2.4.649 BrtFileVersion */\nfunction write_BrtFileVersion(data, o) {\n\tif(!o) o = new_buf(127);\n\tfor(var i = 0; i != 4; ++i) o.write_shift(4, 0);\n\twrite_XLWideString(\"SheetJS\", o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(XLSX.version, o);\n\twrite_XLWideString(\"7262\", o);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\n/* [MS-XLSB] 2.4.301 BrtBookView */\nfunction write_BrtBookView(idx, o) {\n\tif(!o) o = new_buf(29);\n\to.write_shift(-4, 0);\n\to.write_shift(-4, 460);\n\to.write_shift(4, 28800);\n\to.write_shift(4, 17600);\n\to.write_shift(4, 500);\n\to.write_shift(4, idx);\n\to.write_shift(4, idx);\n\tvar flags = 0x78;\n\to.write_shift(1, flags);\n\treturn o.length > o.l ? o.slice(0, o.l) : o;\n}\n\nfunction write_BOOKVIEWS(ba, wb/*::, opts*/) {\n\t/* required if hidden tab appears before visible tab */\n\tif(!wb.Workbook || !wb.Workbook.Sheets) return;\n\tvar sheets = wb.Workbook.Sheets;\n\tvar i = 0, vistab = -1, hidden = -1;\n\tfor(; i < sheets.length; ++i) {\n\t\tif(!sheets[i] || !sheets[i].Hidden && vistab == -1) vistab = i;\n\t\telse if(sheets[i].Hidden == 1 && hidden == -1) hidden = i;\n\t}\n\tif(hidden > vistab) return;\n\twrite_record(ba, \"BrtBeginBookViews\");\n\twrite_record(ba, \"BrtBookView\", write_BrtBookView(vistab));\n\t/* 1*(BrtBookView *FRT) */\n\twrite_record(ba, \"BrtEndBookViews\");\n}\n\n/* [MS-XLSB] 2.4.305 BrtCalcProp */\n/*function write_BrtCalcProp(data, o) {\n\tif(!o) o = new_buf(26);\n\to.write_shift(4,0); // force recalc\n\to.write_shift(4,1);\n\to.write_shift(4,0);\n\twrite_Xnum(0, o);\n\to.write_shift(-4, 1023);\n\to.write_shift(1, 0x33);\n\to.write_shift(1, 0x00);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.4.646 BrtFileRecover */\n/*function write_BrtFileRecover(data, o) {\n\tif(!o) o = new_buf(1);\n\to.write_shift(1,0);\n\treturn o;\n}*/\n\n/* [MS-XLSB] 2.1.7.61 Workbook */\nfunction write_wb_bin(wb, opts) {\n\tvar ba = buf_array();\n\twrite_record(ba, \"BrtBeginBook\");\n\twrite_record(ba, \"BrtFileVersion\", write_BrtFileVersion());\n\t/* [[BrtFileSharingIso] BrtFileSharing] */\n\twrite_record(ba, \"BrtWbProp\", write_BrtWbProp(wb.Workbook && wb.Workbook.WBProps || null));\n\t/* [ACABSPATH] */\n\t/* [[BrtBookProtectionIso] BrtBookProtection] */\n\twrite_BOOKVIEWS(ba, wb, opts);\n\twrite_BUNDLESHS(ba, wb, opts);\n\t/* [FNGROUP] */\n\t/* [EXTERNALS] */\n\t/* *BrtName */\n\t/* write_record(ba, \"BrtCalcProp\", write_BrtCalcProp()); */\n\t/* [BrtOleSize] */\n\t/* *(BrtUserBookView *FRT) */\n\t/* [PIVOTCACHEIDS] */\n\t/* [BrtWbFactoid] */\n\t/* [SMARTTAGTYPES] */\n\t/* [BrtWebOpt] */\n\t/* write_record(ba, \"BrtFileRecover\", write_BrtFileRecover()); */\n\t/* [WEBPUBITEMS] */\n\t/* [CRERRS] */\n\t/* FRTWORKBOOK */\n\twrite_record(ba, \"BrtEndBook\");\n\n\treturn ba.end();\n}\nfunction parse_wb(data, name/*:string*/, opts)/*:WorkbookFile*/ {\n\tif(name.slice(-4)===\".bin\") return parse_wb_bin((data/*:any*/), opts);\n\treturn parse_wb_xml((data/*:any*/), opts);\n}\n\nfunction parse_ws(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ws_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ws_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_cs(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_cs_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_cs_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ms(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ms_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ms_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_ds(data, name/*:string*/, idx/*:number*/, opts, rels, wb, themes, styles)/*:Worksheet*/ {\n\tif(name.slice(-4)===\".bin\") return parse_ds_bin((data/*:any*/), opts, idx, rels, wb, themes, styles);\n\treturn parse_ds_xml((data/*:any*/), opts, idx, rels, wb, themes, styles);\n}\n\nfunction parse_sty(data, name/*:string*/, themes, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_sty_bin((data/*:any*/), themes, opts);\n\treturn parse_sty_xml((data/*:any*/), themes, opts);\n}\n\nfunction parse_theme(data/*:string*/, name/*:string*/, opts) {\n\treturn parse_theme_xml(data, opts);\n}\n\nfunction parse_sst(data, name/*:string*/, opts)/*:SST*/ {\n\tif(name.slice(-4)===\".bin\") return parse_sst_bin((data/*:any*/), opts);\n\treturn parse_sst_xml((data/*:any*/), opts);\n}\n\nfunction parse_cmnt(data, name/*:string*/, opts)/*:Array*/ {\n\tif(name.slice(-4)===\".bin\") return parse_comments_bin((data/*:any*/), opts);\n\treturn parse_comments_xml((data/*:any*/), opts);\n}\n\nfunction parse_cc(data, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_cc_bin((data/*:any*/), name, opts);\n\treturn parse_cc_xml((data/*:any*/), name, opts);\n}\n\nfunction parse_xlink(data, rel, name/*:string*/, opts) {\n\tif(name.slice(-4)===\".bin\") return parse_xlink_bin((data/*:any*/), rel, name, opts);\n\treturn parse_xlink_xml((data/*:any*/), rel, name, opts);\n}\n\nfunction write_wb(wb, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_wb_bin : write_wb_xml)(wb, opts);\n}\n\nfunction write_ws(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_ws_bin : write_ws_xml)(data, opts, wb, rels);\n}\n\n// eslint-disable-next-line no-unused-vars\nfunction write_cs(data/*:number*/, name/*:string*/, opts, wb/*:Workbook*/, rels) {\n\treturn (name.slice(-4)===\".bin\" ? write_cs_bin : write_cs_xml)(data, opts, wb, rels);\n}\n\nfunction write_sty(data, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sty_bin : write_sty_xml)(data, opts);\n}\n\nfunction write_sst(data/*:SST*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_sst_bin : write_sst_xml)(data, opts);\n}\n\nfunction write_cmnt(data/*:Array*/, name/*:string*/, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_comments_bin : write_comments_xml)(data, opts);\n}\n/*\nfunction write_cc(data, name:string, opts) {\n\treturn (name.slice(-4)===\".bin\" ? write_cc_bin : write_cc_xml)(data, opts);\n}\n*/\nvar attregexg2=/([\\w:]+)=((?:\")([^\"]*)(?:\")|(?:')([^']*)(?:'))/g;\nvar attregex2=/([\\w:]+)=((?:\")(?:[^\"]*)(?:\")|(?:')(?:[^']*)(?:'))/;\nfunction xlml_parsexmltag(tag/*:string*/, skip_root/*:?boolean*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z/*:any*/ = ([]/*:any*/); if(!skip_root) z[0] = words[0];\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\nfunction xlml_parsexmltagobj(tag/*:string*/) {\n\tvar words = tag.split(/\\s+/);\n\tvar z = {};\n\tif(words.length === 1) return z;\n\tvar m = tag.match(attregexg2), y, j, w, i;\n\tif(m) for(i = 0; i != m.length; ++i) {\n\t\ty = m[i].match(attregex2);\n/*:: if(!y || !y[2]) continue; */\n\t\tif((j=y[1].indexOf(\":\")) === -1) z[y[1]] = y[2].slice(1,y[2].length-1);\n\t\telse {\n\t\t\tif(y[1].slice(0,6) === \"xmlns:\") w = \"xmlns\"+y[1].slice(6);\n\t\t\telse w = y[1].slice(j+1);\n\t\t\tz[w] = y[2].slice(1,y[2].length-1);\n\t\t}\n\t}\n\treturn z;\n}\n\n// ----\n\nfunction xlml_format(format, value)/*:string*/ {\n\tvar fmt = XLMLFormatMap[format] || unescapexml(format);\n\tif(fmt === \"General\") return SSF._general(value);\n\treturn SSF.format(fmt, value);\n}\n\nfunction xlml_set_custprop(Custprops, key, cp, val/*:string*/) {\n\tvar oval/*:any*/ = val;\n\tswitch((cp[0].match(/dt:dt=\"([\\w.]+)\"/)||[\"\",\"\"])[1]) {\n\t\tcase \"boolean\": oval = parsexmlbool(val); break;\n\t\tcase \"i2\": case \"int\": oval = parseInt(val, 10); break;\n\t\tcase \"r4\": case \"float\": oval = parseFloat(val); break;\n\t\tcase \"date\": case \"dateTime.tz\": oval = parseDate(val); break;\n\t\tcase \"i8\": case \"string\": case \"fixed\": case \"uuid\": case \"bin.base64\": break;\n\t\tdefault: throw new Error(\"bad custprop:\" + cp[0]);\n\t}\n\tCustprops[unescapexml(key)] = oval;\n}\n\nfunction safe_format_xlml(cell/*:Cell*/, nf, o) {\n\tif(cell.t === 'z') return;\n\tif(!o || o.cellText !== false) try {\n\t\tif(cell.t === 'e') { cell.w = cell.w || BErr[cell.v]; }\n\t\telse if(nf === \"General\") {\n\t\t\tif(cell.t === 'n') {\n\t\t\t\tif((cell.v|0) === cell.v) cell.w = SSF._general_int(cell.v);\n\t\t\t\telse cell.w = SSF._general_num(cell.v);\n\t\t\t}\n\t\t\telse cell.w = SSF._general(cell.v);\n\t\t}\n\t\telse cell.w = xlml_format(nf||\"General\", cell.v);\n\t} catch(e) { if(o.WTF) throw e; }\n\ttry {\n\t\tvar z = XLMLFormatMap[nf]||nf||\"General\";\n\t\tif(o.cellNF) cell.z = z;\n\t\tif(o.cellDates && cell.t == 'n' && SSF.is_date(z)) {\n\t\t\tvar _d = SSF.parse_date_code(cell.v); if(_d) { cell.t = 'd'; cell.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t\t}\n\t} catch(e) { if(o.WTF) throw e; }\n}\n\nfunction process_style_xlml(styles, stag, opts) {\n\tif(opts.cellStyles) {\n\t\tif(stag.Interior) {\n\t\t\tvar I = stag.Interior;\n\t\t\tif(I.Pattern) I.patternType = XLMLPatternTypeMap[I.Pattern] || I.Pattern;\n\t\t}\n\t}\n\tstyles[stag.ID] = stag;\n}\n\n/* TODO: there must exist some form of OSP-blessed spec */\nfunction parse_xlml_data(xml, ss, data, cell/*:any*/, base, styles, csty, row, arrayf, o) {\n\tvar nf = \"General\", sid = cell.StyleID, S = {}; o = o || {};\n\tvar interiors = [];\n\tvar i = 0;\n\tif(sid === undefined && row) sid = row.StyleID;\n\tif(sid === undefined && csty) sid = csty.StyleID;\n\twhile(styles[sid] !== undefined) {\n\t\tif(styles[sid].nf) nf = styles[sid].nf;\n\t\tif(styles[sid].Interior) interiors.push(styles[sid].Interior);\n\t\tif(!styles[sid].Parent) break;\n\t\tsid = styles[sid].Parent;\n\t}\n\tswitch(data.Type) {\n\t\tcase 'Boolean':\n\t\t\tcell.t = 'b';\n\t\t\tcell.v = parsexmlbool(xml);\n\t\t\tbreak;\n\t\tcase 'String':\n\t\t\tcell.t = 's'; cell.r = xlml_fixstr(unescapexml(xml));\n\t\t\tcell.v = (xml.indexOf(\"<\") > -1 ? unescapexml(ss||xml).replace(/<.*?>/g, \"\") : cell.r); // todo: BR etc\n\t\t\tbreak;\n\t\tcase 'DateTime':\n\t\t\tif(xml.slice(-1) != \"Z\") xml += \"Z\";\n\t\t\tcell.v = (parseDate(xml) - new Date(Date.UTC(1899, 11, 30))) / (24 * 60 * 60 * 1000);\n\t\t\tif(cell.v !== cell.v) cell.v = unescapexml(xml);\n\t\t\telse if(cell.v<60) cell.v = cell.v -1;\n\t\t\tif(!nf || nf == \"General\") nf = \"yyyy-mm-dd\";\n\t\t\t/* falls through */\n\t\tcase 'Number':\n\t\t\tif(cell.v === undefined) cell.v=+xml;\n\t\t\tif(!cell.t) cell.t = 'n';\n\t\t\tbreak;\n\t\tcase 'Error': cell.t = 'e'; cell.v = RBErr[xml]; if(o.cellText !== false) cell.w = xml; break;\n\t\tdefault:\n\t\t\tif(xml == \"\" && ss == \"\") { cell.t = 'z'; }\n\t\t\telse { cell.t = 's'; cell.v = xlml_fixstr(ss||xml); }\n\t\t\tbreak;\n\t}\n\tsafe_format_xlml(cell, nf, o);\n\tif(o.cellFormula !== false) {\n\t\tif(cell.Formula) {\n\t\t\tvar fstr = unescapexml(cell.Formula);\n\t\t\t/* strictly speaking, the leading = is required but some writers omit */\n\t\t\tif(fstr.charCodeAt(0) == 61 /* = */) fstr = fstr.slice(1);\n\t\t\tcell.f = rc_to_a1(fstr, base);\n\t\t\tdelete cell.Formula;\n\t\t\tif(cell.ArrayRange == \"RC\") cell.F = rc_to_a1(\"RC:RC\", base);\n\t\t\telse if(cell.ArrayRange) {\n\t\t\t\tcell.F = rc_to_a1(cell.ArrayRange, base);\n\t\t\t\tarrayf.push([safe_decode_range(cell.F), cell.F]);\n\t\t\t}\n\t\t} else {\n\t\t\tfor(i = 0; i < arrayf.length; ++i)\n\t\t\t\tif(base.r >= arrayf[i][0].s.r && base.r <= arrayf[i][0].e.r)\n\t\t\t\t\tif(base.c >= arrayf[i][0].s.c && base.c <= arrayf[i][0].e.c)\n\t\t\t\t\t\tcell.F = arrayf[i][1];\n\t\t}\n\t}\n\tif(o.cellStyles) {\n\t\tinteriors.forEach(function(x) {\n\t\t\tif(!S.patternType && x.patternType) S.patternType = x.patternType;\n\t\t});\n\t\tcell.s = S;\n\t}\n\tif(cell.StyleID !== undefined) cell.ixfe = cell.StyleID;\n}\n\nfunction xlml_clean_comment(comment/*:any*/) {\n\tcomment.t = comment.v || \"\";\n\tcomment.t = comment.t.replace(/\\r\\n/g,\"\\n\").replace(/\\r/g,\"\\n\");\n\tcomment.v = comment.w = comment.ixfe = undefined;\n}\n\nfunction xlml_normalize(d)/*:string*/ {\n\tif(has_buf &&/*::typeof Buffer !== \"undefined\" && d != null && d instanceof Buffer &&*/ Buffer.isBuffer(d)) return d.toString('utf8');\n\tif(typeof d === 'string') return d;\n\t/* duktape */\n\tif(typeof Uint8Array !== 'undefined' && d instanceof Uint8Array) return utf8read(a2s(ab2a(d)));\n\tthrow new Error(\"Bad input format: expected Buffer or string\");\n}\n\n/* TODO: Everything */\n/* UOS uses CJK in tags */\nvar xlmlregex = /<(\\/?)([^\\s?>:\\/]+)(?:[\\s?:\\/][^>]*)?>/mg;\n//var xlmlregex = /<(\\/?)([a-z0-9]*:|)(\\w+)[^>]*>/mg;\nfunction parse_xlml_xml(d, _opts)/*:Workbook*/ {\n\tvar opts = _opts || {};\n\tmake_ssf(SSF);\n\tvar str = debom(xlml_normalize(d));\n\tif(opts.type == 'binary' || opts.type == 'array' || opts.type == 'base64') {\n\t\tif(typeof cptable !== 'undefined') str = cptable.utils.decode(65001, char_codes(str));\n\t\telse str = utf8read(str);\n\t}\n\tvar opening = str.slice(0, 1024).toLowerCase(), ishtml = false;\n\tif((opening.indexOf(\">\") & 1023) > Math.min((opening.indexOf(\",\") & 1023), (opening.indexOf(\";\")&1023))) { var _o = dup(opts); _o.type = \"string\"; return PRN.to_workbook(str, _o); }\n\tif(opening.indexOf(\"= 0) ishtml = true; });\n\tif(ishtml) return HTML_.to_workbook(str, opts);\n\tvar Rn;\n\tvar state = [], tmp;\n\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\tvar sheets = {}, sheetnames/*:Array*/ = [], cursheet/*:Worksheet*/ = (opts.dense ? [] : {}), sheetname = \"\";\n\tvar table = {}, cell = ({}/*:any*/), row = {};// eslint-disable-line no-unused-vars\n\tvar dtag = xlml_parsexmltag(''), didx = 0;\n\tvar c = 0, r = 0;\n\tvar refguess/*:Range*/ = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\tvar styles = {}, stag = {};\n\tvar ss = \"\", fidx = 0;\n\tvar merges/*:Array*/ = [];\n\tvar Props = {}, Custprops = {}, pidx = 0, cp = [];\n\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\tvar cstys = [], csty, seencol = false;\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar rowinfo/*:Array*/ = [], rowobj = {}, cc = 0, rr = 0;\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false} }/*:any*/), wsprops = {};\n\txlmlregex.lastIndex = 0;\n\tstr = str.replace(//mg,\"\");\n\tvar raw_Rn3 = \"\";\n\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3] = (raw_Rn3 = Rn[3]).toLowerCase())) {\n\t\tcase 'data' /*case 'Data'*/:\n\t\t\tif(raw_Rn3 == \"data\") {\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(state[state.length-1][1]) break;\n\t\t\tif(Rn[1]==='/') parse_xlml_data(str.slice(didx, Rn.index), ss, dtag, state[state.length-1][0]==/*\"Comment\"*/\"comment\"?comment:cell, {c:c,r:r}, styles, cstys[c], row, arrayf, opts);\n\t\t\telse { ss = \"\"; dtag = xlml_parsexmltag(Rn[0]); didx = Rn.index + Rn[0].length; }\n\t\t\tbreak;\n\t\tcase 'cell' /*case 'Cell'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif(comments.length > 0) cell.c = comments;\n\t\t\t\tif((!opts.sheetRows || opts.sheetRows > r) && cell.v !== undefined) {\n\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\tif(!cursheet[r]) cursheet[r] = [];\n\t\t\t\t\t\tcursheet[r][c] = cell;\n\t\t\t\t\t} else cursheet[encode_col(c) + encode_row(r)] = cell;\n\t\t\t\t}\n\t\t\t\tif(cell.HRef) {\n\t\t\t\t\tcell.l = ({Target:unescapexml(cell.HRef)}/*:any*/);\n\t\t\t\t\tif(cell.HRefScreenTip) cell.l.Tooltip = cell.HRefScreenTip;\n\t\t\t\t\tdelete cell.HRef; delete cell.HRefScreenTip;\n\t\t\t\t}\n\t\t\t\tif(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\tcc = c + (parseInt(cell.MergeAcross,10)|0);\n\t\t\t\t\trr = r + (parseInt(cell.MergeDown,10)|0);\n\t\t\t\t\tmerges.push({s:{c:c,r:r},e:{c:cc,r:rr}});\n\t\t\t\t}\n\t\t\t\tif(!opts.sheetStubs) { if(cell.MergeAcross) c = cc + 1; else ++c; }\n\t\t\t\telse if(cell.MergeAcross || cell.MergeDown) {\n\t\t\t\t\t/*:: if(!cc) cc = 0; if(!rr) rr = 0; */\n\t\t\t\t\tfor(var cma = c; cma <= cc; ++cma) {\n\t\t\t\t\t\tfor(var cmd = r; cmd <= rr; ++cmd) {\n\t\t\t\t\t\t\tif(cma > c || cmd > r) {\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!cursheet[cmd]) cursheet[cmd] = [];\n\t\t\t\t\t\t\t\t\tcursheet[cmd][cma] = {t:'z'};\n\t\t\t\t\t\t\t\t} else cursheet[encode_col(cma) + encode_row(cmd)] = {t:'z'};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tc = cc + 1;\n\t\t\t\t}\n\t\t\t\telse ++c;\n\t\t\t} else {\n\t\t\t\tcell = xlml_parsexmltagobj(Rn[0]);\n\t\t\t\tif(cell.Index) c = +cell.Index - 1;\n\t\t\t\tif(c < refguess.s.c) refguess.s.c = c;\n\t\t\t\tif(c > refguess.e.c) refguess.e.c = c;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") ++c;\n\t\t\t\tcomments = [];\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'row' /*case 'Row'*/:\n\t\t\tif(Rn[1]==='/' || Rn[0].slice(-2) === \"/>\") {\n\t\t\t\tif(r < refguess.s.r) refguess.s.r = r;\n\t\t\t\tif(r > refguess.e.r) refguess.e.r = r;\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") {\n\t\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\t}\n\t\t\t\tc = 0; ++r;\n\t\t\t} else {\n\t\t\t\trow = xlml_parsexmltag(Rn[0]);\n\t\t\t\tif(row.Index) r = +row.Index - 1;\n\t\t\t\trowobj = {};\n\t\t\t\tif(row.AutoFitHeight == \"0\" || row.Height) {\n\t\t\t\t\trowobj.hpx = parseInt(row.Height, 10); rowobj.hpt = px2pt(rowobj.hpx);\n\t\t\t\t\trowinfo[r] = rowobj;\n\t\t\t\t}\n\t\t\t\tif(row.Hidden == \"1\") { rowobj.hidden = true; rowinfo[r] = rowobj; }\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'worksheet' /*case 'Worksheet'*/: /* TODO: read range from FullRows/FullColumns */\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\tsheetnames.push(sheetname);\n\t\t\t\tif(refguess.s.r <= refguess.e.r && refguess.s.c <= refguess.e.c) {\n\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\tif(opts.sheetRows && opts.sheetRows <= refguess.e.r) {\n\t\t\t\t\t\tcursheet[\"!fullref\"] = cursheet[\"!ref\"];\n\t\t\t\t\t\trefguess.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tcursheet[\"!ref\"] = encode_range(refguess);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif(merges.length) cursheet[\"!merges\"] = merges;\n\t\t\t\tif(cstys.length > 0) cursheet[\"!cols\"] = cstys;\n\t\t\t\tif(rowinfo.length > 0) cursheet[\"!rows\"] = rowinfo;\n\t\t\t\tsheets[sheetname] = cursheet;\n\t\t\t} else {\n\t\t\t\trefguess = {s: {r:2000000, c:2000000}, e: {r:0, c:0} };\n\t\t\t\tr = c = 0;\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tsheetname = unescapexml(tmp.Name);\n\t\t\t\tcursheet = (opts.dense ? [] : {});\n\t\t\t\tmerges = [];\n\t\t\t\tarrayf = [];\n\t\t\t\trowinfo = [];\n\t\t\t\twsprops = {name:sheetname, Hidden:0};\n\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase 'table' /*case 'Table'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].slice(-2) == \"/>\") break;\n\t\t\telse {\n\t\t\t\ttable = xlml_parsexmltag(Rn[0]);\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\tcstys = []; seencol = false;\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'style' /*case 'Style'*/:\n\t\t\tif(Rn[1]==='/') process_style_xlml(styles, stag, opts);\n\t\t\telse stag = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\n\t\tcase 'numberformat' /*case 'NumberFormat'*/:\n\t\t\tstag.nf = unescapexml(xlml_parsexmltag(Rn[0]).Format || \"General\");\n\t\t\tif(XLMLFormatMap[stag.nf]) stag.nf = XLMLFormatMap[stag.nf];\n\t\t\tfor(var ssfidx = 0; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == stag.nf) break;\n\t\t\tif(ssfidx == 0x188) for(ssfidx = 0x39; ssfidx != 0x188; ++ssfidx) if(SSF._table[ssfidx] == null) { SSF.load(stag.nf, ssfidx); break; }\n\t\t\tbreak;\n\n\t\tcase 'column' /*case 'Column'*/:\n\t\t\tif(state[state.length-1][0] !== /*'Table'*/'table') break;\n\t\t\tcsty = xlml_parsexmltag(Rn[0]);\n\t\t\tif(csty.Hidden) { csty.hidden = true; delete csty.Hidden; }\n\t\t\tif(csty.Width) csty.wpx = parseInt(csty.Width, 10);\n\t\t\tif(!seencol && csty.wpx > 10) {\n\t\t\t\tseencol = true; MDW = DEF_MDW; //find_mdw_wpx(csty.wpx);\n\t\t\t\tfor(var _col = 0; _col < cstys.length; ++_col) if(cstys[_col]) process_col(cstys[_col]);\n\t\t\t}\n\t\t\tif(seencol) process_col(csty);\n\t\t\tcstys[(csty.Index-1||cstys.length)] = csty;\n\t\t\tfor(var i = 0; i < +csty.Span; ++i) cstys[cstys.length] = dup(csty);\n\t\t\tbreak;\n\n\t\tcase 'namedrange' /*case 'NamedRange'*/:\n\t\t\tif(Rn[1]==='/') break;\n\t\t\tif(!Workbook.Names) Workbook.Names = [];\n\t\t\tvar _NamedRange = parsexmltag(Rn[0]);\n\t\t\tvar _DefinedName/*:DefinedName*/ = ({\n\t\t\t\tName: _NamedRange.Name,\n\t\t\t\tRef: rc_to_a1(_NamedRange.RefersTo.slice(1), {r:0, c:0})\n\t\t\t}/*:any*/);\n\t\t\tif(Workbook.Sheets.length>0) _DefinedName.Sheet=Workbook.Sheets.length-1;\n\t\t\t/*:: if(Workbook.Names) */Workbook.Names.push(_DefinedName);\n\t\t\tbreak;\n\n\t\tcase 'namedcell' /*case 'NamedCell'*/: break;\n\t\tcase 'b' /*case 'B'*/: break;\n\t\tcase 'i' /*case 'I'*/: break;\n\t\tcase 'u' /*case 'U'*/: break;\n\t\tcase 's' /*case 'S'*/: break;\n\t\tcase 'em' /*case 'EM'*/: break;\n\t\tcase 'h2' /*case 'H2'*/: break;\n\t\tcase 'h3' /*case 'H3'*/: break;\n\t\tcase 'sub' /*case 'Sub'*/: break;\n\t\tcase 'sup' /*case 'Sup'*/: break;\n\t\tcase 'span' /*case 'Span'*/: break;\n\t\tcase 'alignment' /*case 'Alignment'*/:\n\t\t\tbreak;\n\t\tcase 'borders' /*case 'Borders'*/: break;\n\t\tcase 'border' /*case 'Border'*/: break;\n\t\tcase 'font' /*case 'Font'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") ss += str.slice(fidx, Rn.index);\n\t\t\telse fidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'interior' /*case 'Interior'*/:\n\t\t\tif(!opts.cellStyles) break;\n\t\t\tstag.Interior = xlml_parsexmltag(Rn[0]);\n\t\t\tbreak;\n\t\tcase 'protection' /*case 'Protection'*/: break;\n\n\t\tcase 'author' /*case 'Author'*/:\n\t\tcase 'title' /*case 'Title'*/:\n\t\tcase 'description' /*case 'Description'*/:\n\t\tcase 'created' /*case 'Created'*/:\n\t\tcase 'keywords' /*case 'Keywords'*/:\n\t\tcase 'subject' /*case 'Subject'*/:\n\t\tcase 'category' /*case 'Category'*/:\n\t\tcase 'company' /*case 'Company'*/:\n\t\tcase 'lastauthor' /*case 'LastAuthor'*/:\n\t\tcase 'lastsaved' /*case 'LastSaved'*/:\n\t\tcase 'lastprinted' /*case 'LastPrinted'*/:\n\t\tcase 'version' /*case 'Version'*/:\n\t\tcase 'revision' /*case 'Revision'*/:\n\t\tcase 'totaltime' /*case 'TotalTime'*/:\n\t\tcase 'hyperlinkbase' /*case 'HyperlinkBase'*/:\n\t\tcase 'manager' /*case 'Manager'*/:\n\t\tcase 'contentstatus' /*case 'ContentStatus'*/:\n\t\tcase 'identifier' /*case 'Identifier'*/:\n\t\tcase 'language' /*case 'Language'*/:\n\t\tcase 'appname' /*case 'AppName'*/:\n\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\telse if(Rn[1]===\"/\") xlml_set_prop(Props, raw_Rn3, str.slice(pidx, Rn.index));\n\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\tbreak;\n\t\tcase 'paragraphs' /*case 'Paragraphs'*/: break;\n\n\t\tcase 'styles' /*case 'Styles'*/:\n\t\tcase 'workbook' /*case 'Workbook'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse state.push([Rn[3], false]);\n\t\t\tbreak;\n\n\t\tcase 'comment' /*case 'Comment'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t\txlml_clean_comment(comment);\n\t\t\t\tcomments.push(comment);\n\t\t\t} else {\n\t\t\t\tstate.push([Rn[3], false]);\n\t\t\t\ttmp = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcomment = ({a:tmp.Author}/*:any*/);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'autofilter' /*case 'AutoFilter'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\tvar AutoFilter = xlml_parsexmltag(Rn[0]);\n\t\t\t\tcursheet['!autofilter'] = { ref:rc_to_a1(AutoFilter.Range).replace(/\\$/g,\"\") };\n\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'name' /*case 'Name'*/: break;\n\n\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\tif(Rn[1]==='/'){\n\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));\n\t\t\t} else {\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t}\n\t\t\tbreak;\n\n\t\tcase 'pixelsperinch' /*case 'PixelsPerInch'*/:\n\t\t\tbreak;\n\t\tcase 'componentoptions' /*case 'ComponentOptions'*/:\n\t\tcase 'documentproperties' /*case 'DocumentProperties'*/:\n\t\tcase 'customdocumentproperties' /*case 'CustomDocumentProperties'*/:\n\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/:\n\t\tcase 'pivottable' /*case 'PivotTable'*/:\n\t\tcase 'pivotcache' /*case 'PivotCache'*/:\n\t\tcase 'names' /*case 'Names'*/:\n\t\tcase 'mapinfo' /*case 'MapInfo'*/:\n\t\tcase 'pagebreaks' /*case 'PageBreaks'*/:\n\t\tcase 'querytable' /*case 'QueryTable'*/:\n\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\tcase 'schema' /*case 'Schema'*/: //case 'data' /*case 'data'*/:\n\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\tcase 'smarttagtype' /*case 'SmartTagType'*/:\n\t\tcase 'smarttags' /*case 'SmartTags'*/:\n\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/:\n\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/:\n\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/:\n\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw new Error(\"Bad state: \"+tmp.join(\"|\"));}\n\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\tbreak;\n\n\t\tdefault:\n\t\t\t/* FODS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"document\") return parse_fods(str, opts);\n\t\t\t/* UOS file root is */\n\t\t\tif(state.length == 0 && Rn[3] == \"uof\"/*\"UOF\"*/) return parse_fods(str, opts);\n\n\t\t\tvar seen = true;\n\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t/* OfficeDocumentSettings */\n\t\t\t\tcase 'officedocumentsettings' /*case 'OfficeDocumentSettings'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'allowpng' /*case 'AllowPNG'*/: break;\n\t\t\t\t\tcase 'removepersonalinformation' /*case 'RemovePersonalInformation'*/: break;\n\t\t\t\t\tcase 'downloadcomponents' /*case 'DownloadComponents'*/: break;\n\t\t\t\t\tcase 'locationofcomponents' /*case 'LocationOfComponents'*/: break;\n\t\t\t\t\tcase 'colors' /*case 'Colors'*/: break;\n\t\t\t\t\tcase 'color' /*case 'Color'*/: break;\n\t\t\t\t\tcase 'index' /*case 'Index'*/: break;\n\t\t\t\t\tcase 'rgb' /*case 'RGB'*/: break;\n\t\t\t\t\tcase 'targetscreensize' /*case 'TargetScreenSize'*/: break;\n\t\t\t\t\tcase 'readonlyrecommended' /*case 'ReadOnlyRecommended'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ComponentOptions */\n\t\t\t\tcase 'componentoptions' /*case 'ComponentOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'toolbar' /*case 'Toolbar'*/: break;\n\t\t\t\t\tcase 'hideofficelogo' /*case 'HideOfficeLogo'*/: break;\n\t\t\t\t\tcase 'spreadsheetautofit' /*case 'SpreadsheetAutoFit'*/: break;\n\t\t\t\t\tcase 'label' /*case 'Label'*/: break;\n\t\t\t\t\tcase 'caption' /*case 'Caption'*/: break;\n\t\t\t\t\tcase 'maxheight' /*case 'MaxHeight'*/: break;\n\t\t\t\t\tcase 'maxwidth' /*case 'MaxWidth'*/: break;\n\t\t\t\t\tcase 'nextsheetnumber' /*case 'NextSheetNumber'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* ExcelWorkbook */\n\t\t\t\tcase 'excelworkbook' /*case 'ExcelWorkbook'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'date1904' /*case 'Date1904'*/:\n\t\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\t\tWorkbook.WBProps.date1904 = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'windowheight' /*case 'WindowHeight'*/: break;\n\t\t\t\t\tcase 'windowwidth' /*case 'WindowWidth'*/: break;\n\t\t\t\t\tcase 'windowtopx' /*case 'WindowTopX'*/: break;\n\t\t\t\t\tcase 'windowtopy' /*case 'WindowTopY'*/: break;\n\t\t\t\t\tcase 'tabratio' /*case 'TabRatio'*/: break;\n\t\t\t\t\tcase 'protectstructure' /*case 'ProtectStructure'*/: break;\n\t\t\t\t\tcase 'protectwindow' /*case 'ProtectWindow'*/: break;\n\t\t\t\t\tcase 'protectwindows' /*case 'ProtectWindows'*/: break;\n\t\t\t\t\tcase 'activesheet' /*case 'ActiveSheet'*/: break;\n\t\t\t\t\tcase 'displayinknotes' /*case 'DisplayInkNotes'*/: break;\n\t\t\t\t\tcase 'firstvisiblesheet' /*case 'FirstVisibleSheet'*/: break;\n\t\t\t\t\tcase 'supbook' /*case 'SupBook'*/: break;\n\t\t\t\t\tcase 'sheetname' /*case 'SheetName'*/: break;\n\t\t\t\t\tcase 'sheetindex' /*case 'SheetIndex'*/: break;\n\t\t\t\t\tcase 'sheetindexfirst' /*case 'SheetIndexFirst'*/: break;\n\t\t\t\t\tcase 'sheetindexlast' /*case 'SheetIndexLast'*/: break;\n\t\t\t\t\tcase 'dll' /*case 'Dll'*/: break;\n\t\t\t\t\tcase 'acceptlabelsinformulas' /*case 'AcceptLabelsInFormulas'*/: break;\n\t\t\t\t\tcase 'donotsavelinkvalues' /*case 'DoNotSaveLinkValues'*/: break;\n\t\t\t\t\tcase 'iteration' /*case 'Iteration'*/: break;\n\t\t\t\t\tcase 'maxiterations' /*case 'MaxIterations'*/: break;\n\t\t\t\t\tcase 'maxchange' /*case 'MaxChange'*/: break;\n\t\t\t\t\tcase 'path' /*case 'Path'*/: break;\n\t\t\t\t\tcase 'xct' /*case 'Xct'*/: break;\n\t\t\t\t\tcase 'count' /*case 'Count'*/: break;\n\t\t\t\t\tcase 'selectedsheets' /*case 'SelectedSheets'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tcase 'uncalced' /*case 'Uncalced'*/: break;\n\t\t\t\t\tcase 'startupprompt' /*case 'StartupPrompt'*/: break;\n\t\t\t\t\tcase 'crn' /*case 'Crn'*/: break;\n\t\t\t\t\tcase 'externname' /*case 'ExternName'*/: break;\n\t\t\t\t\tcase 'formula' /*case 'Formula'*/: break;\n\t\t\t\t\tcase 'colfirst' /*case 'ColFirst'*/: break;\n\t\t\t\t\tcase 'collast' /*case 'ColLast'*/: break;\n\t\t\t\t\tcase 'wantadvise' /*case 'WantAdvise'*/: break;\n\t\t\t\t\tcase 'boolean' /*case 'Boolean'*/: break;\n\t\t\t\t\tcase 'error' /*case 'Error'*/: break;\n\t\t\t\t\tcase 'text' /*case 'Text'*/: break;\n\t\t\t\t\tcase 'ole' /*case 'OLE'*/: break;\n\t\t\t\t\tcase 'noautorecover' /*case 'NoAutoRecover'*/: break;\n\t\t\t\t\tcase 'publishobjects' /*case 'PublishObjects'*/: break;\n\t\t\t\t\tcase 'donotcalculatebeforesave' /*case 'DoNotCalculateBeforeSave'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'refmoder1c1' /*case 'RefModeR1C1'*/: break;\n\t\t\t\t\tcase 'embedsavesmarttags' /*case 'EmbedSaveSmartTags'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorkbookOptions */\n\t\t\t\tcase 'workbookoptions' /*case 'WorkbookOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'owcversion' /*case 'OWCVersion'*/: break;\n\t\t\t\t\tcase 'height' /*case 'Height'*/: break;\n\t\t\t\t\tcase 'width' /*case 'Width'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* WorksheetOptions */\n\t\t\t\tcase 'worksheetoptions' /*case 'WorksheetOptions'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'visible' /*case 'Visible'*/:\n\t\t\t\t\t\tif(Rn[0].slice(-2) === \"/>\"){/* empty */}\n\t\t\t\t\t\telse if(Rn[1]===\"/\") switch(str.slice(pidx, Rn.index)) {\n\t\t\t\t\t\t\tcase \"SheetHidden\": wsprops.Hidden = 1; break;\n\t\t\t\t\t\t\tcase \"SheetVeryHidden\": wsprops.Hidden = 2; break;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'header' /*case 'Header'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].header = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'footer' /*case 'Footer'*/:\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={}, 'xlml');\n\t\t\t\t\t\tcursheet['!margins'].footer = parsexmltag(Rn[0]).Margin;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'pagemargins' /*case 'PageMargins'*/:\n\t\t\t\t\t\tvar pagemargins = parsexmltag(Rn[0]);\n\t\t\t\t\t\tif(!cursheet['!margins']) default_margins(cursheet['!margins']={},'xlml');\n\t\t\t\t\t\tif(pagemargins.Top) cursheet['!margins'].top = pagemargins.Top;\n\t\t\t\t\t\tif(pagemargins.Left) cursheet['!margins'].left = pagemargins.Left;\n\t\t\t\t\t\tif(pagemargins.Right) cursheet['!margins'].right = pagemargins.Right;\n\t\t\t\t\t\tif(pagemargins.Bottom) cursheet['!margins'].bottom = pagemargins.Bottom;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'displayrighttoleft' /*case 'DisplayRightToLeft'*/:\n\t\t\t\t\t\tif(!Workbook.Views) Workbook.Views = [];\n\t\t\t\t\t\tif(!Workbook.Views[0]) Workbook.Views[0] = {};\n\t\t\t\t\t\tWorkbook.Views[0].RTL = true;\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'freezepanes' /*case 'FreezePanes'*/: break;\n\t\t\t\t\tcase 'frozennosplit' /*case 'FrozenNoSplit'*/: break;\n\n\t\t\t\t\tcase 'splithorizontal' /*case 'SplitHorizontal'*/:\n\t\t\t\t\tcase 'splitvertical' /*case 'SplitVertical'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'donotdisplaygridlines' /*case 'DoNotDisplayGridlines'*/:\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'activerow' /*case 'ActiveRow'*/: break;\n\t\t\t\t\tcase 'activecol' /*case 'ActiveCol'*/: break;\n\t\t\t\t\tcase 'toprowbottompane' /*case 'TopRowBottomPane'*/: break;\n\t\t\t\t\tcase 'leftcolumnrightpane' /*case 'LeftColumnRightPane'*/: break;\n\n\t\t\t\t\tcase 'unsynced' /*case 'Unsynced'*/: break;\n\t\t\t\t\tcase 'print' /*case 'Print'*/: break;\n\t\t\t\t\tcase 'printerrors' /*case 'PrintErrors'*/: break;\n\t\t\t\t\tcase 'panes' /*case 'Panes'*/: break;\n\t\t\t\t\tcase 'scale' /*case 'Scale'*/: break;\n\t\t\t\t\tcase 'pane' /*case 'Pane'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'layout' /*case 'Layout'*/: break;\n\t\t\t\t\tcase 'pagesetup' /*case 'PageSetup'*/: break;\n\t\t\t\t\tcase 'selected' /*case 'Selected'*/: break;\n\t\t\t\t\tcase 'protectobjects' /*case 'ProtectObjects'*/: break;\n\t\t\t\t\tcase 'enableselection' /*case 'EnableSelection'*/: break;\n\t\t\t\t\tcase 'protectscenarios' /*case 'ProtectScenarios'*/: break;\n\t\t\t\t\tcase 'validprinterinfo' /*case 'ValidPrinterInfo'*/: break;\n\t\t\t\t\tcase 'horizontalresolution' /*case 'HorizontalResolution'*/: break;\n\t\t\t\t\tcase 'verticalresolution' /*case 'VerticalResolution'*/: break;\n\t\t\t\t\tcase 'numberofcopies' /*case 'NumberofCopies'*/: break;\n\t\t\t\t\tcase 'activepane' /*case 'ActivePane'*/: break;\n\t\t\t\t\tcase 'toprowvisible' /*case 'TopRowVisible'*/: break;\n\t\t\t\t\tcase 'leftcolumnvisible' /*case 'LeftColumnVisible'*/: break;\n\t\t\t\t\tcase 'fittopage' /*case 'FitToPage'*/: break;\n\t\t\t\t\tcase 'rangeselection' /*case 'RangeSelection'*/: break;\n\t\t\t\t\tcase 'papersizeindex' /*case 'PaperSizeIndex'*/: break;\n\t\t\t\t\tcase 'pagelayoutzoom' /*case 'PageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'pagebreakzoom' /*case 'PageBreakZoom'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'fitwidth' /*case 'FitWidth'*/: break;\n\t\t\t\t\tcase 'fitheight' /*case 'FitHeight'*/: break;\n\t\t\t\t\tcase 'commentslayout' /*case 'CommentsLayout'*/: break;\n\t\t\t\t\tcase 'zoom' /*case 'Zoom'*/: break;\n\t\t\t\t\tcase 'lefttoright' /*case 'LeftToRight'*/: break;\n\t\t\t\t\tcase 'gridlines' /*case 'Gridlines'*/: break;\n\t\t\t\t\tcase 'allowsort' /*case 'AllowSort'*/: break;\n\t\t\t\t\tcase 'allowfilter' /*case 'AllowFilter'*/: break;\n\t\t\t\t\tcase 'allowinsertrows' /*case 'AllowInsertRows'*/: break;\n\t\t\t\t\tcase 'allowdeleterows' /*case 'AllowDeleteRows'*/: break;\n\t\t\t\t\tcase 'allowinsertcols' /*case 'AllowInsertCols'*/: break;\n\t\t\t\t\tcase 'allowdeletecols' /*case 'AllowDeleteCols'*/: break;\n\t\t\t\t\tcase 'allowinserthyperlinks' /*case 'AllowInsertHyperlinks'*/: break;\n\t\t\t\t\tcase 'allowformatcells' /*case 'AllowFormatCells'*/: break;\n\t\t\t\t\tcase 'allowsizecols' /*case 'AllowSizeCols'*/: break;\n\t\t\t\t\tcase 'allowsizerows' /*case 'AllowSizeRows'*/: break;\n\t\t\t\t\tcase 'nosummaryrowsbelowdetail' /*case 'NoSummaryRowsBelowDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].above = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabcolorindex' /*case 'TabColorIndex'*/: break;\n\t\t\t\t\tcase 'donotdisplayheadings' /*case 'DoNotDisplayHeadings'*/: break;\n\t\t\t\t\tcase 'showpagelayoutzoom' /*case 'ShowPageLayoutZoom'*/: break;\n\t\t\t\t\tcase 'nosummarycolumnsrightdetail' /*case 'NoSummaryColumnsRightDetail'*/:\n\t\t\t\t\t\tif(!cursheet[\"!outline\"]) cursheet[\"!outline\"] = {};\n\t\t\t\t\t\tcursheet[\"!outline\"].left = true;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'blackandwhite' /*case 'BlackAndWhite'*/: break;\n\t\t\t\t\tcase 'donotdisplayzeros' /*case 'DoNotDisplayZeros'*/: break;\n\t\t\t\t\tcase 'displaypagebreak' /*case 'DisplayPageBreak'*/: break;\n\t\t\t\t\tcase 'rowcolheadings' /*case 'RowColHeadings'*/: break;\n\t\t\t\t\tcase 'donotdisplayoutline' /*case 'DoNotDisplayOutline'*/: break;\n\t\t\t\t\tcase 'noorientation' /*case 'NoOrientation'*/: break;\n\t\t\t\t\tcase 'allowusepivottables' /*case 'AllowUsePivotTables'*/: break;\n\t\t\t\t\tcase 'zeroheight' /*case 'ZeroHeight'*/: break;\n\t\t\t\t\tcase 'viewablerange' /*case 'ViewableRange'*/: break;\n\t\t\t\t\tcase 'selection' /*case 'Selection'*/: break;\n\t\t\t\t\tcase 'protectcontents' /*case 'ProtectContents'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'pivottable' /*case 'PivotTable'*/: case 'pivotcache' /*case 'PivotCache'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'immediateitemsondrop' /*case 'ImmediateItemsOnDrop'*/: break;\n\t\t\t\t\tcase 'showpagemultipleitemlabel' /*case 'ShowPageMultipleItemLabel'*/: break;\n\t\t\t\t\tcase 'compactrowindent' /*case 'CompactRowIndent'*/: break;\n\t\t\t\t\tcase 'location' /*case 'Location'*/: break;\n\t\t\t\t\tcase 'pivotfield' /*case 'PivotField'*/: break;\n\t\t\t\t\tcase 'orientation' /*case 'Orientation'*/: break;\n\t\t\t\t\tcase 'layoutform' /*case 'LayoutForm'*/: break;\n\t\t\t\t\tcase 'layoutsubtotallocation' /*case 'LayoutSubtotalLocation'*/: break;\n\t\t\t\t\tcase 'layoutcompactrow' /*case 'LayoutCompactRow'*/: break;\n\t\t\t\t\tcase 'position' /*case 'Position'*/: break;\n\t\t\t\t\tcase 'pivotitem' /*case 'PivotItem'*/: break;\n\t\t\t\t\tcase 'datatype' /*case 'DataType'*/: break;\n\t\t\t\t\tcase 'datafield' /*case 'DataField'*/: break;\n\t\t\t\t\tcase 'sourcename' /*case 'SourceName'*/: break;\n\t\t\t\t\tcase 'parentfield' /*case 'ParentField'*/: break;\n\t\t\t\t\tcase 'ptlineitems' /*case 'PTLineItems'*/: break;\n\t\t\t\t\tcase 'ptlineitem' /*case 'PTLineItem'*/: break;\n\t\t\t\t\tcase 'countofsameitems' /*case 'CountOfSameItems'*/: break;\n\t\t\t\t\tcase 'item' /*case 'Item'*/: break;\n\t\t\t\t\tcase 'itemtype' /*case 'ItemType'*/: break;\n\t\t\t\t\tcase 'ptsource' /*case 'PTSource'*/: break;\n\t\t\t\t\tcase 'cacheindex' /*case 'CacheIndex'*/: break;\n\t\t\t\t\tcase 'consolidationreference' /*case 'ConsolidationReference'*/: break;\n\t\t\t\t\tcase 'filename' /*case 'FileName'*/: break;\n\t\t\t\t\tcase 'reference' /*case 'Reference'*/: break;\n\t\t\t\t\tcase 'nocolumngrand' /*case 'NoColumnGrand'*/: break;\n\t\t\t\t\tcase 'norowgrand' /*case 'NoRowGrand'*/: break;\n\t\t\t\t\tcase 'blanklineafteritems' /*case 'BlankLineAfterItems'*/: break;\n\t\t\t\t\tcase 'hidden' /*case 'Hidden'*/: break;\n\t\t\t\t\tcase 'subtotal' /*case 'Subtotal'*/: break;\n\t\t\t\t\tcase 'basefield' /*case 'BaseField'*/: break;\n\t\t\t\t\tcase 'mapchilditems' /*case 'MapChildItems'*/: break;\n\t\t\t\t\tcase 'function' /*case 'Function'*/: break;\n\t\t\t\t\tcase 'refreshonfileopen' /*case 'RefreshOnFileOpen'*/: break;\n\t\t\t\t\tcase 'printsettitles' /*case 'PrintSetTitles'*/: break;\n\t\t\t\t\tcase 'mergelabels' /*case 'MergeLabels'*/: break;\n\t\t\t\t\tcase 'defaultversion' /*case 'DefaultVersion'*/: break;\n\t\t\t\t\tcase 'refreshname' /*case 'RefreshName'*/: break;\n\t\t\t\t\tcase 'refreshdate' /*case 'RefreshDate'*/: break;\n\t\t\t\t\tcase 'refreshdatecopy' /*case 'RefreshDateCopy'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tcase 'versionlastupdate' /*case 'VersionLastUpdate'*/: break;\n\t\t\t\t\tcase 'versionupdateablemin' /*case 'VersionUpdateableMin'*/: break;\n\t\t\t\t\tcase 'versionrefreshablemin' /*case 'VersionRefreshableMin'*/: break;\n\t\t\t\t\tcase 'calculation' /*case 'Calculation'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* PageBreaks */\n\t\t\t\tcase 'pagebreaks' /*case 'PageBreaks'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'colbreaks' /*case 'ColBreaks'*/: break;\n\t\t\t\t\tcase 'colbreak' /*case 'ColBreak'*/: break;\n\t\t\t\t\tcase 'rowbreaks' /*case 'RowBreaks'*/: break;\n\t\t\t\t\tcase 'rowbreak' /*case 'RowBreak'*/: break;\n\t\t\t\t\tcase 'colstart' /*case 'ColStart'*/: break;\n\t\t\t\t\tcase 'colend' /*case 'ColEnd'*/: break;\n\t\t\t\t\tcase 'rowend' /*case 'RowEnd'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* AutoFilter */\n\t\t\t\tcase 'autofilter' /*case 'AutoFilter'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'autofiltercolumn' /*case 'AutoFilterColumn'*/: break;\n\t\t\t\t\tcase 'autofiltercondition' /*case 'AutoFilterCondition'*/: break;\n\t\t\t\t\tcase 'autofilterand' /*case 'AutoFilterAnd'*/: break;\n\t\t\t\t\tcase 'autofilteror' /*case 'AutoFilterOr'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* QueryTable */\n\t\t\t\tcase 'querytable' /*case 'QueryTable'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'id' /*case 'Id'*/: break;\n\t\t\t\t\tcase 'autoformatfont' /*case 'AutoFormatFont'*/: break;\n\t\t\t\t\tcase 'autoformatpattern' /*case 'AutoFormatPattern'*/: break;\n\t\t\t\t\tcase 'querysource' /*case 'QuerySource'*/: break;\n\t\t\t\t\tcase 'querytype' /*case 'QueryType'*/: break;\n\t\t\t\t\tcase 'enableredirections' /*case 'EnableRedirections'*/: break;\n\t\t\t\t\tcase 'refreshedinxl9' /*case 'RefreshedInXl9'*/: break;\n\t\t\t\t\tcase 'urlstring' /*case 'URLString'*/: break;\n\t\t\t\t\tcase 'htmltables' /*case 'HTMLTables'*/: break;\n\t\t\t\t\tcase 'connection' /*case 'Connection'*/: break;\n\t\t\t\t\tcase 'commandtext' /*case 'CommandText'*/: break;\n\t\t\t\t\tcase 'refreshinfo' /*case 'RefreshInfo'*/: break;\n\t\t\t\t\tcase 'notitles' /*case 'NoTitles'*/: break;\n\t\t\t\t\tcase 'nextid' /*case 'NextId'*/: break;\n\t\t\t\t\tcase 'columninfo' /*case 'ColumnInfo'*/: break;\n\t\t\t\t\tcase 'overwritecells' /*case 'OverwriteCells'*/: break;\n\t\t\t\t\tcase 'donotpromptforfile' /*case 'DoNotPromptForFile'*/: break;\n\t\t\t\t\tcase 'textwizardsettings' /*case 'TextWizardSettings'*/: break;\n\t\t\t\t\tcase 'source' /*case 'Source'*/: break;\n\t\t\t\t\tcase 'number' /*case 'Number'*/: break;\n\t\t\t\t\tcase 'decimal' /*case 'Decimal'*/: break;\n\t\t\t\t\tcase 'thousandseparator' /*case 'ThousandSeparator'*/: break;\n\t\t\t\t\tcase 'trailingminusnumbers' /*case 'TrailingMinusNumbers'*/: break;\n\t\t\t\t\tcase 'formatsettings' /*case 'FormatSettings'*/: break;\n\t\t\t\t\tcase 'fieldtype' /*case 'FieldType'*/: break;\n\t\t\t\t\tcase 'delimiters' /*case 'Delimiters'*/: break;\n\t\t\t\t\tcase 'tab' /*case 'Tab'*/: break;\n\t\t\t\t\tcase 'comma' /*case 'Comma'*/: break;\n\t\t\t\t\tcase 'autoformatname' /*case 'AutoFormatName'*/: break;\n\t\t\t\t\tcase 'versionlastedit' /*case 'VersionLastEdit'*/: break;\n\t\t\t\t\tcase 'versionlastrefresh' /*case 'VersionLastRefresh'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'datavalidation' /*case 'DataValidation'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\tcase 'sorting' /*case 'Sorting'*/:\n\t\t\t\tcase 'conditionalformatting' /*case 'ConditionalFormatting'*/:\n\t\t\t\tswitch(Rn[3]) {\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'type' /*case 'Type'*/: break;\n\t\t\t\t\tcase 'min' /*case 'Min'*/: break;\n\t\t\t\t\tcase 'max' /*case 'Max'*/: break;\n\t\t\t\t\tcase 'sort' /*case 'Sort'*/: break;\n\t\t\t\t\tcase 'descending' /*case 'Descending'*/: break;\n\t\t\t\t\tcase 'order' /*case 'Order'*/: break;\n\t\t\t\t\tcase 'casesensitive' /*case 'CaseSensitive'*/: break;\n\t\t\t\t\tcase 'value' /*case 'Value'*/: break;\n\t\t\t\t\tcase 'errorstyle' /*case 'ErrorStyle'*/: break;\n\t\t\t\t\tcase 'errormessage' /*case 'ErrorMessage'*/: break;\n\t\t\t\t\tcase 'errortitle' /*case 'ErrorTitle'*/: break;\n\t\t\t\t\tcase 'cellrangelist' /*case 'CellRangeList'*/: break;\n\t\t\t\t\tcase 'inputmessage' /*case 'InputMessage'*/: break;\n\t\t\t\t\tcase 'inputtitle' /*case 'InputTitle'*/: break;\n\t\t\t\t\tcase 'combohide' /*case 'ComboHide'*/: break;\n\t\t\t\t\tcase 'inputhide' /*case 'InputHide'*/: break;\n\t\t\t\t\tcase 'condition' /*case 'Condition'*/: break;\n\t\t\t\t\tcase 'qualifier' /*case 'Qualifier'*/: break;\n\t\t\t\t\tcase 'useblank' /*case 'UseBlank'*/: break;\n\t\t\t\t\tcase 'value1' /*case 'Value1'*/: break;\n\t\t\t\t\tcase 'value2' /*case 'Value2'*/: break;\n\t\t\t\t\tcase 'format' /*case 'Format'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* MapInfo (schema) */\n\t\t\t\tcase 'mapinfo' /*case 'MapInfo'*/: case 'schema' /*case 'Schema'*/: case 'data' /*case 'data'*/: switch(Rn[3]) {\n\t\t\t\t\tcase 'map' /*case 'Map'*/: break;\n\t\t\t\t\tcase 'entry' /*case 'Entry'*/: break;\n\t\t\t\t\tcase 'range' /*case 'Range'*/: break;\n\t\t\t\t\tcase 'xpath' /*case 'XPath'*/: break;\n\t\t\t\t\tcase 'field' /*case 'Field'*/: break;\n\t\t\t\t\tcase 'xsdtype' /*case 'XSDType'*/: break;\n\t\t\t\t\tcase 'filteron' /*case 'FilterOn'*/: break;\n\t\t\t\t\tcase 'aggregate' /*case 'Aggregate'*/: break;\n\t\t\t\t\tcase 'elementtype' /*case 'ElementType'*/: break;\n\t\t\t\t\tcase 'attributetype' /*case 'AttributeType'*/: break;\n\t\t\t\t/* These are from xsd (XML Schema Definition) */\n\t\t\t\t\tcase 'schema' /*case 'schema'*/:\n\t\t\t\t\tcase 'element' /*case 'element'*/:\n\t\t\t\t\tcase 'complextype' /*case 'complexType'*/:\n\t\t\t\t\tcase 'datatype' /*case 'datatype'*/:\n\t\t\t\t\tcase 'all' /*case 'all'*/:\n\t\t\t\t\tcase 'attribute' /*case 'attribute'*/:\n\t\t\t\t\tcase 'extends' /*case 'extends'*/: break;\n\n\t\t\t\t\tcase 'row' /*case 'row'*/: break;\n\t\t\t\t\tdefault: seen = false;\n\t\t\t\t} break;\n\n\t\t\t\t/* SmartTags (can be anything) */\n\t\t\t\tcase 'smarttags' /*case 'SmartTags'*/: break;\n\n\t\t\t\tdefault: seen = false; break;\n\t\t\t}\n\t\t\tif(seen) break;\n\t\t\t/* CustomDocumentProperties */\n\t\t\tif(Rn[3].match(/!\\[CDATA/)) break;\n\t\t\tif(!state[state.length-1][1]) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t\t\tif(state[state.length-1][0]===/*'CustomDocumentProperties'*/'customdocumentproperties') {\n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") xlml_set_custprop(Custprops, raw_Rn3, cp, str.slice(pidx, Rn.index));\n\t\t\t\telse { cp = Rn; pidx = Rn.index + Rn[0].length; }\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(opts.WTF) throw 'Unrecognized tag: ' + Rn[3] + \"|\" + state.join(\"|\");\n\t}\n\tvar out = ({}/*:any*/);\n\tif(!opts.bookSheets && !opts.bookProps) out.Sheets = sheets;\n\tout.SheetNames = sheetnames;\n\tout.Workbook = Workbook;\n\tout.SSF = SSF.get_table();\n\tout.Props = Props;\n\tout.Custprops = Custprops;\n\treturn out;\n}\n\nfunction parse_xlml(data/*:RawBytes|string*/, opts)/*:Workbook*/ {\n\tfix_read_opts(opts=opts||{});\n\tswitch(opts.type||\"base64\") {\n\t\tcase \"base64\": return parse_xlml_xml(Base64.decode(data), opts);\n\t\tcase \"binary\": case \"buffer\": case \"file\": return parse_xlml_xml(data, opts);\n\t\tcase \"array\": return parse_xlml_xml(a2s(data), opts);\n\t}\n\t/*:: throw new Error(\"unsupported type \" + opts.type); */\n}\n\n/* TODO */\nfunction write_props_xlml(wb/*:Workbook*/, opts)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\t/* DocumentProperties */\n\tif(wb.Props) o.push(xlml_write_docprops(wb.Props, opts));\n\t/* CustomDocumentProperties */\n\tif(wb.Custprops) o.push(xlml_write_custprops(wb.Props, wb.Custprops, opts));\n\treturn o.join(\"\");\n}\n/* TODO */\nfunction write_wb_xlml(/*::wb, opts*/)/*:string*/ {\n\t/* OfficeDocumentSettings */\n\t/* ExcelWorkbook */\n\treturn \"\";\n}\n/* TODO */\nfunction write_sty_xlml(wb, opts)/*:string*/ {\n\t/* Styles */\n\tvar styles/*:Array*/ = [''];\n\topts.cellXfs.forEach(function(xf, id) {\n\t\tvar payload/*:Array*/ = [];\n\t\tpayload.push(writextag('NumberFormat', null, {\"ss:Format\": escapexml(SSF._table[xf.numFmtId])}));\n\n\t\tvar o = /*::(*/{\"ss:ID\": \"s\" + (21+id)}/*:: :any)*/;\n\t\tstyles.push(writextag('Style', payload.join(\"\"), o));\n\t});\n\treturn writextag(\"Styles\", styles.join(\"\"));\n}\nfunction write_name_xlml(n) { return writextag(\"NamedRange\", null, {\"ss:Name\": n.Name, \"ss:RefersTo\":\"=\" + a1_to_rc(n.Ref, {r:0,c:0})}); }\nfunction write_names_xlml(wb/*::, opts*/)/*:string*/ {\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != null) continue;\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn writextag(\"Names\", out.join(\"\"));\n}\nfunction write_ws_xlml_names(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tif(!((wb||{}).Workbook||{}).Names) return \"\";\n\t/*:: if(!wb || !wb.Workbook || !wb.Workbook.Names) throw new Error(\"unreachable\"); */\n\tvar names/*:Array*/ = wb.Workbook.Names;\n\tvar out/*:Array*/ = [];\n\tfor(var i = 0; i < names.length; ++i) {\n\t\tvar n = names[i];\n\t\tif(n.Sheet != idx) continue;\n\t\t/*switch(n.Name) {\n\t\t\tcase \"_\": continue;\n\t\t}*/\n\t\tif(n.Name.match(/^_xlfn\\./)) continue;\n\t\tout.push(write_name_xlml(n));\n\t}\n\treturn out.join(\"\");\n}\n/* WorksheetOptions */\nfunction write_ws_xlml_wsopts(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws) return \"\";\n\tvar o/*:Array*/ = [];\n\t/* NOTE: spec technically allows any order, but stick with implied order */\n\n\t/* FitToPage */\n\t/* DoNotDisplayColHeaders */\n\t/* DoNotDisplayRowHeaders */\n\t/* ViewableRange */\n\t/* Selection */\n\t/* GridlineColor */\n\t/* Name */\n\t/* ExcelWorksheetType */\n\t/* IntlMacro */\n\t/* Unsynced */\n\t/* Selected */\n\t/* CodeName */\n\n\tif(ws['!margins']) {\n\t\to.push(\"\");\n\t\tif(ws['!margins'].header) o.push(writextag(\"Header\", null, {'x:Margin':ws['!margins'].header}));\n\t\tif(ws['!margins'].footer) o.push(writextag(\"Footer\", null, {'x:Margin':ws['!margins'].footer}));\n\t\to.push(writextag(\"PageMargins\", null, {\n\t\t\t'x:Bottom': ws['!margins'].bottom || \"0.75\",\n\t\t\t'x:Left': ws['!margins'].left || \"0.7\",\n\t\t\t'x:Right': ws['!margins'].right || \"0.7\",\n\t\t\t'x:Top': ws['!margins'].top || \"0.75\"\n\t\t}));\n\t\to.push(\"\");\n\t}\n\n\t/* PageSetup */\n\t/* DisplayPageBreak */\n\t/* TransitionExpressionEvaluation */\n\t/* TransitionFormulaEntry */\n\t/* Print */\n\t/* Zoom */\n\t/* PageLayoutZoom */\n\t/* PageBreakZoom */\n\t/* ShowPageBreakZoom */\n\t/* DefaultRowHeight */\n\t/* DefaultColumnWidth */\n\t/* StandardWidth */\n\n\tif(wb && wb.Workbook && wb.Workbook.Sheets && wb.Workbook.Sheets[idx]) {\n\t\t/* Visible */\n\t\tif(wb.Workbook.Sheets[idx].Hidden) o.push(writextag(\"Visible\", (wb.Workbook.Sheets[idx].Hidden == 1 ? \"SheetHidden\" : \"SheetVeryHidden\"), {}));\n\t\telse {\n\t\t\t/* Selected */\n\t\t\tfor(var i = 0; i < idx; ++i) if(wb.Workbook.Sheets[i] && !wb.Workbook.Sheets[i].Hidden) break;\n\t\t\tif(i == idx) o.push(\"\");\n\t\t}\n\t}\n\n\t/* LeftColumnVisible */\n\n\tif(((((wb||{}).Workbook||{}).Views||[])[0]||{}).RTL) o.push(\"\");\n\n\t/* GridlineColorIndex */\n\t/* DisplayFormulas */\n\t/* DoNotDisplayGridlines */\n\t/* DoNotDisplayHeadings */\n\t/* DoNotDisplayOutline */\n\t/* ApplyAutomaticOutlineStyles */\n\t/* NoSummaryRowsBelowDetail */\n\t/* NoSummaryColumnsRightDetail */\n\t/* DoNotDisplayZeros */\n\t/* ActiveRow */\n\t/* ActiveColumn */\n\t/* FilterOn */\n\t/* RangeSelection */\n\t/* TopRowVisible */\n\t/* TopRowBottomPane */\n\t/* LeftColumnRightPane */\n\t/* ActivePane */\n\t/* SplitHorizontal */\n\t/* SplitVertical */\n\t/* FreezePanes */\n\t/* FrozenNoSplit */\n\t/* TabColorIndex */\n\t/* Panes */\n\n\t/* NOTE: Password not supported in XLML Format */\n\tif(ws['!protect']) {\n\t\to.push(writetag(\"ProtectContents\", \"True\"));\n\t\tif(ws['!protect'].objects) o.push(writetag(\"ProtectObjects\", \"True\"));\n\t\tif(ws['!protect'].scenarios) o.push(writetag(\"ProtectScenarios\", \"True\"));\n\t\tif(ws['!protect'].selectLockedCells != null && !ws['!protect'].selectLockedCells) o.push(writetag(\"EnableSelection\", \"NoSelection\"));\n\t\telse if(ws['!protect'].selectUnlockedCells != null && !ws['!protect'].selectUnlockedCells) o.push(writetag(\"EnableSelection\", \"UnlockedCells\"));\n\t[\n\t\t[ \"formatCells\", \"AllowFormatCells\" ],\n\t\t[ \"formatColumns\", \"AllowSizeCols\" ],\n\t\t[ \"formatRows\", \"AllowSizeRows\" ],\n\t\t[ \"insertColumns\", \"AllowInsertCols\" ],\n\t\t[ \"insertRows\", \"AllowInsertRows\" ],\n\t\t[ \"insertHyperlinks\", \"AllowInsertHyperlinks\" ],\n\t\t[ \"deleteColumns\", \"AllowDeleteCols\" ],\n\t\t[ \"deleteRows\", \"AllowDeleteRows\" ],\n\t\t[ \"sort\", \"AllowSort\" ],\n\t\t[ \"autoFilter\", \"AllowFilter\" ],\n\t\t[ \"pivotTables\", \"AllowUsePivotTables\" ]\n\t].forEach(function(x) { if(ws['!protect'][x[0]]) o.push(\"<\"+x[1]+\"/>\"); });\n\t}\n\n\tif(o.length == 0) return \"\";\n\treturn writextag(\"WorksheetOptions\", o.join(\"\"), {xmlns:XLMLNS.x});\n}\nfunction write_ws_xlml_comment(comments/*:Array*/)/*:string*/ {\n\treturn comments.map(function(c) {\n\t\t// TODO: formatted text\n\t\tvar t = xlml_unfixstr(c.t||\"\");\n\t\tvar d =writextag(\"ss:Data\", t, {\"xmlns\":\"http://www.w3.org/TR/REC-html40\"});\n\t\treturn writextag(\"Comment\", d, {\"ss:Author\":c.a});\n\t}).join(\"\");\n}\nfunction write_ws_xlml_cell(cell, ref/*:string*/, ws, opts, idx/*:number*/, wb, addr)/*:string*/{\n\tif(!cell || (cell.v == undefined && cell.f == undefined)) return \"\";\n\n\tvar attr = {};\n\tif(cell.f) attr[\"ss:Formula\"] = \"=\" + escapexml(a1_to_rc(cell.f, addr));\n\tif(cell.F && cell.F.slice(0, ref.length) == ref) {\n\t\tvar end = decode_cell(cell.F.slice(ref.length + 1));\n\t\tattr[\"ss:ArrayRange\"] = \"RC:R\" + (end.r == addr.r ? \"\" : \"[\" + (end.r - addr.r) + \"]\") + \"C\" + (end.c == addr.c ? \"\" : \"[\" + (end.c - addr.c) + \"]\");\n\t}\n\n\tif(cell.l && cell.l.Target) {\n\t\tattr[\"ss:HRef\"] = escapexml(cell.l.Target);\n\t\tif(cell.l.Tooltip) attr[\"x:HRefScreenTip\"] = escapexml(cell.l.Tooltip);\n\t}\n\n\tif(ws['!merges']) {\n\t\tvar marr = ws['!merges'];\n\t\tfor(var mi = 0; mi != marr.length; ++mi) {\n\t\t\tif(marr[mi].s.c != addr.c || marr[mi].s.r != addr.r) continue;\n\t\t\tif(marr[mi].e.c > marr[mi].s.c) attr['ss:MergeAcross'] = marr[mi].e.c - marr[mi].s.c;\n\t\t\tif(marr[mi].e.r > marr[mi].s.r) attr['ss:MergeDown'] = marr[mi].e.r - marr[mi].s.r;\n\t\t}\n\t}\n\n\tvar t = \"\", p = \"\";\n\tswitch(cell.t) {\n\t\tcase 'z': if(!opts.sheetStubs) return \"\"; break;\n\t\tcase 'n': t = 'Number'; p = String(cell.v); break;\n\t\tcase 'b': t = 'Boolean'; p = (cell.v ? \"1\" : \"0\"); break;\n\t\tcase 'e': t = 'Error'; p = BErr[cell.v]; break;\n\t\tcase 'd': t = 'DateTime'; p = new Date(cell.v).toISOString(); if(cell.z == null) cell.z = cell.z || SSF._table[14]; break;\n\t\tcase 's': t = 'String'; p = escapexlml(cell.v||\"\"); break;\n\t}\n\t/* TODO: cell style */\n\tvar os = get_cell_style(opts.cellXfs, cell, opts);\n\tattr[\"ss:StyleID\"] = \"s\" + (21+os);\n\tattr[\"ss:Index\"] = addr.c + 1;\n\tvar _v = (cell.v != null ? p : \"\");\n\tvar m = cell.t == 'z' ? \"\" : ('' + _v + '');\n\n\tif((cell.c||[]).length > 0) m += write_ws_xlml_comment(cell.c);\n\n\treturn writextag(\"Cell\", m, attr);\n}\nfunction write_ws_xlml_row(R/*:number*/, row)/*:string*/ {\n\tvar o = '';\n}\n/* TODO */\nfunction write_ws_xlml_table(ws/*:Worksheet*/, opts, idx/*:number*/, wb/*:Workbook*/)/*:string*/ {\n\tif(!ws['!ref']) return \"\";\n\tvar range/*:Range*/ = safe_decode_range(ws['!ref']);\n\tvar marr/*:Array*/ = ws['!merges'] || [], mi = 0;\n\tvar o/*:Array*/ = [];\n\tif(ws['!cols']) ws['!cols'].forEach(function(n, i) {\n\t\tprocess_col(n);\n\t\tvar w = !!n.width;\n\t\tvar p = col_obj_w(i, n);\n\t\tvar k/*:any*/ = {\"ss:Index\":i+1};\n\t\tif(w) k['ss:Width'] = width2px(p.width);\n\t\tif(n.hidden) k['ss:Hidden']=\"1\";\n\t\to.push(writextag(\"Column\",null,k));\n\t});\n\tvar dense = Array.isArray(ws);\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\tvar row = [write_ws_xlml_row(R, (ws['!rows']||[])[R])];\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tvar skip = false;\n\t\t\tfor(mi = 0; mi != marr.length; ++mi) {\n\t\t\t\tif(marr[mi].s.c > C) continue;\n\t\t\t\tif(marr[mi].s.r > R) continue;\n\t\t\t\tif(marr[mi].e.c < C) continue;\n\t\t\t\tif(marr[mi].e.r < R) continue;\n\t\t\t\tif(marr[mi].s.c != C || marr[mi].s.r != R) skip = true;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif(skip) continue;\n\t\t\tvar addr = {r:R,c:C};\n\t\t\tvar ref = encode_cell(addr), cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\trow.push(write_ws_xlml_cell(cell, ref, ws, opts, idx, wb, addr));\n\t\t}\n\t\trow.push(\"\");\n\t\tif(row.length > 2) o.push(row.join(\"\"));\n\t}\n\treturn o.join(\"\");\n}\nfunction write_ws_xlml(idx/*:number*/, opts, wb/*:Workbook*/)/*:string*/ {\n\tvar o/*:Array*/ = [];\n\tvar s = wb.SheetNames[idx];\n\tvar ws = wb.Sheets[s];\n\n\tvar t/*:string*/ = ws ? write_ws_xlml_names(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* Table */\n\tt = ws ? write_ws_xlml_table(ws, opts, idx, wb) : \"\";\n\tif(t.length > 0) o.push(\"\" + t + \"\");\n\n\t/* WorksheetOptions */\n\to.push(write_ws_xlml_wsopts(ws, opts, idx, wb));\n\n\treturn o.join(\"\");\n}\nfunction write_xlml(wb, opts)/*:string*/ {\n\tif(!opts) opts = {};\n\tif(!wb.SSF) wb.SSF = SSF.get_table();\n\tif(wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\topts.revssf = evert_num(wb.SSF); opts.revssf[wb.SSF[65535]] = 0;\n\t\topts.ssf = wb.SSF;\n\t\topts.cellXfs = [];\n\t\tget_cell_style(opts.cellXfs, {}, {revssf:{\"General\":0}});\n\t}\n\tvar d/*:Array*/ = [];\n\td.push(write_props_xlml(wb, opts));\n\td.push(write_wb_xlml(wb, opts));\n\td.push(\"\");\n\td.push(\"\");\n\tfor(var i = 0; i < wb.SheetNames.length; ++i)\n\t\td.push(writextag(\"Worksheet\", write_ws_xlml(i, opts, wb), {\"ss:Name\":escapexml(wb.SheetNames[i])}));\n\td[2] = write_sty_xlml(wb, opts);\n\td[3] = write_names_xlml(wb, opts);\n\treturn XML_HEADER + writextag(\"Workbook\", d.join(\"\"), {\n\t\t'xmlns': XLMLNS.ss,\n\t\t'xmlns:o': XLMLNS.o,\n\t\t'xmlns:x': XLMLNS.x,\n\t\t'xmlns:ss': XLMLNS.ss,\n\t\t'xmlns:dt': XLMLNS.dt,\n\t\t'xmlns:html': XLMLNS.html\n\t});\n}\n/* [MS-OLEDS] 2.3.8 CompObjStream */\nfunction parse_compobj(obj/*:CFBEntry*/) {\n\tvar v = {};\n\tvar o = obj.content;\n\t/*:: if(o == null) return; */\n\n\t/* [MS-OLEDS] 2.3.7 CompObjHeader -- All fields MUST be ignored */\n\to.l = 28;\n\n\tv.AnsiUserType = o.read_shift(0, \"lpstr-ansi\");\n\tv.AnsiClipboardFormat = parse_ClipboardFormatOrAnsiString(o);\n\n\tif(o.length - o.l <= 4) return v;\n\n\tvar m/*:number*/ = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved1 = o.read_shift(0, \"lpstr-ansi\");\n\n\tif(o.length - o.l <= 4) return v;\n\tm = o.read_shift(4);\n\tif(m !== 0x71b239f4) return v;\n\tv.UnicodeClipboardFormat = parse_ClipboardFormatOrUnicodeString(o);\n\n\tm = o.read_shift(4);\n\tif(m == 0 || m > 40) return v;\n\to.l-=4; v.Reserved2 = o.read_shift(0, \"lpwstr\");\n}\n\n/*\n\tContinue logic for:\n\t- 2.4.58 Continue\n\t- 2.4.59 ContinueBigName\n\t- 2.4.60 ContinueFrt\n\t- 2.4.61 ContinueFrt11\n\t- 2.4.62 ContinueFrt12\n*/\nfunction slurp(R, blob, length/*:number*/, opts)/*:any*/ {\n\tvar l = length;\n\tvar bufs = [];\n\tvar d = blob.slice(blob.l,blob.l+l);\n\tif(opts && opts.enc && opts.enc.insitu && d.length > 0) switch(R.n) {\n\tcase 'BOF': case 'FilePass': case 'FileLock': case 'InterfaceHdr': case 'RRDInfo': case 'RRDHead': case 'UsrExcl': case 'EOF':\n\t\tbreak;\n\tcase 'BoundSheet8':\n\t\tbreak;\n\tdefault:\n\t\topts.enc.insitu(d);\n\t}\n\tbufs.push(d);\n\tblob.l += l;\n\tvar next = (XLSRecordEnum[__readUInt16LE(blob,blob.l)]);\n\tvar start = 0;\n\twhile(next != null && next.n.slice(0,8) === 'Continue') {\n\t\tl = __readUInt16LE(blob,blob.l+2);\n\t\tstart = blob.l + 4;\n\t\tif(next.n == 'ContinueFrt') start += 4;\n\t\telse if(next.n.slice(0,11) == 'ContinueFrt') {\n\t\t\tstart += 12;\n\t\t}\n\t\td = blob.slice(start,blob.l+4+l);\n\t\tbufs.push(d);\n\t\tblob.l += 4+l;\n\t\tnext = (XLSRecordEnum[__readUInt16LE(blob, blob.l)]);\n\t}\n\tvar b = (bconcat(bufs)/*:any*/);\n\tprep_blob(b, 0);\n\tvar ll = 0; b.lens = [];\n\tfor(var j = 0; j < bufs.length; ++j) { b.lens.push(ll); ll += bufs[j].length; }\n\tif(b.length < length) throw \"XLS Record \" + (R && R.n || \"??\") + \" Truncated: \" + b.length + \" < \" + length;\n\treturn R.f(b, b.length, opts);\n}\n\nfunction safe_format_xf(p/*:any*/, opts/*:ParseOpts*/, date1904/*:?boolean*/) {\n\tif(p.t === 'z') return;\n\tif(!p.XF) return;\n\tvar fmtid = 0;\n\ttry {\n\t\tfmtid = p.z || p.XF.numFmtId || 0;\n\t\tif(opts.cellNF) p.z = SSF._table[fmtid];\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(!opts || opts.cellText !== false) try {\n\t\tif(p.t === 'e') { p.w = p.w || BErr[p.v]; }\n\t\telse if(fmtid === 0 || fmtid == \"General\") {\n\t\t\tif(p.t === 'n') {\n\t\t\t\tif((p.v|0) === p.v) p.w = SSF._general_int(p.v);\n\t\t\t\telse p.w = SSF._general_num(p.v);\n\t\t\t}\n\t\t\telse p.w = SSF._general(p.v);\n\t\t}\n\t\telse p.w = SSF.format(fmtid,p.v, {date1904:!!date1904, dateNF: opts && opts.dateNF});\n\t} catch(e) { if(opts.WTF) throw e; }\n\tif(opts.cellDates && fmtid && p.t == 'n' && SSF.is_date(SSF._table[fmtid] || String(fmtid))) {\n\t\tvar _d = SSF.parse_date_code(p.v); if(_d) { p.t = 'd'; p.v = new Date(_d.y, _d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u); }\n\t}\n}\n\nfunction make_cell(val, ixfe, t)/*:Cell*/ {\n\treturn ({v:val, ixfe:ixfe, t:t}/*:any*/);\n}\n\n// 2.3.2\nfunction parse_workbook(blob, options/*:ParseOpts*/)/*:Workbook*/ {\n\tvar wb = ({opts:{}}/*:any*/);\n\tvar Sheets = {};\n\tif(DENSE != null && options.dense == null) options.dense = DENSE;\n\tvar out/*:Worksheet*/ = ((options.dense ? [] : {})/*:any*/);\n\tvar Directory = {};\n\tvar range/*:Range*/ = ({}/*:any*/);\n\tvar last_formula = null;\n\tvar sst/*:SST*/ = ([]/*:any*/);\n\tvar cur_sheet = \"\";\n\tvar Preamble = {};\n\tvar lastcell, last_cell = \"\", cc/*:Cell*/, cmnt, rngC, rngR;\n\tvar sharedf = {};\n\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\tvar temp_val/*:Cell*/;\n\tvar country;\n\tvar cell_valid = true;\n\tvar XFs = []; /* XF records */\n\tvar palette/*:Array<[number, number, number]>*/ = [];\n\tvar Workbook/*:WBWBProps*/ = ({ Sheets:[], WBProps:{date1904:false}, Views:[{}] }/*:any*/), wsprops = {};\n\tvar get_rgb = function getrgb(icv/*:number*/)/*:[number, number, number]*/ {\n\t\tif(icv < 8) return XLSIcv[icv];\n\t\tif(icv < 64) return palette[icv-8] || XLSIcv[icv];\n\t\treturn XLSIcv[icv];\n\t};\n\tvar process_cell_style = function pcs(cell, line/*:any*/, options) {\n\t\tvar xfd = line.XF.data;\n\t\tif(!xfd || !xfd.patternType || !options || !options.cellStyles) return;\n\t\tline.s = ({}/*:any*/);\n\t\tline.s.patternType = xfd.patternType;\n\t\tvar t;\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvFore)))) { line.s.fgColor = {rgb:t}; }\n\t\tif((t = rgb2Hex(get_rgb(xfd.icvBack)))) { line.s.bgColor = {rgb:t}; }\n\t};\n\tvar addcell = function addcell(cell/*:any*/, line/*:any*/, options/*:any*/) {\n\t\tif(file_depth > 1) return;\n\t\tif(options.sheetRows && cell.r >= options.sheetRows) cell_valid = false;\n\t\tif(!cell_valid) return;\n\t\tif(options.cellStyles && line.XF && line.XF.data) process_cell_style(cell, line, options);\n\t\tdelete line.ixfe; delete line.XF;\n\t\tlastcell = cell;\n\t\tlast_cell = encode_cell(cell);\n\t\tif(!range || !range.s || !range.e) range = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\tif(cell.r < range.s.r) range.s.r = cell.r;\n\t\tif(cell.c < range.s.c) range.s.c = cell.c;\n\t\tif(cell.r + 1 > range.e.r) range.e.r = cell.r + 1;\n\t\tif(cell.c + 1 > range.e.c) range.e.c = cell.c + 1;\n\t\tif(options.cellFormula && line.f) {\n\t\t\tfor(var afi = 0; afi < arrayf.length; ++afi) {\n\t\t\t\tif(arrayf[afi][0].s.c > cell.c || arrayf[afi][0].s.r > cell.r) continue;\n\t\t\t\tif(arrayf[afi][0].e.c < cell.c || arrayf[afi][0].e.r < cell.r) continue;\n\t\t\t\tline.F = encode_range(arrayf[afi][0]);\n\t\t\t\tif(arrayf[afi][0].s.c != cell.c || arrayf[afi][0].s.r != cell.r) delete line.f;\n\t\t\t\tif(line.f) line.f = \"\" + stringify_formula(arrayf[afi][1], range, cell, supbooks, opts);\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t{\n\t\t\tif(options.dense) {\n\t\t\t\tif(!out[cell.r]) out[cell.r] = [];\n\t\t\t\tout[cell.r][cell.c] = line;\n\t\t\t} else out[last_cell] = line;\n\t\t}\n\t};\n\tvar opts = ({\n\t\tenc: false, // encrypted\n\t\tsbcch: 0, // cch in the preceding SupBook\n\t\tsnames: [], // sheetnames\n\t\tsharedf: sharedf, // shared formulae by address\n\t\tarrayf: arrayf, // array formulae array\n\t\trrtabid: [], // RRTabId\n\t\tlastuser: \"\", // Last User from WriteAccess\n\t\tbiff: 8, // BIFF version\n\t\tcodepage: 0, // CP from CodePage record\n\t\twinlocked: 0, // fLockWn from WinProtect\n\t\tcellStyles: !!options && !!options.cellStyles,\n\t\tWTF: !!options && !!options.wtf\n\t}/*:any*/);\n\tif(options.password) opts.password = options.password;\n\tvar themes;\n\tvar merges/*:Array*/ = [];\n\tvar objects = [];\n\tvar colinfo/*:Array*/ = [], rowinfo/*:Array*/ = [];\n\t// eslint-disable-next-line no-unused-vars\n\tvar defwidth = 0, defheight = 0; // twips / MDW respectively\n\tvar seencol = false;\n\tvar supbooks = ([]/*:any*/); // 1-indexed, will hold extern names\n\tsupbooks.SheetNames = opts.snames;\n\tsupbooks.sharedf = opts.sharedf;\n\tsupbooks.arrayf = opts.arrayf;\n\tsupbooks.names = [];\n\tsupbooks.XTI = [];\n\tvar last_Rn = '';\n\tvar file_depth = 0; /* TODO: make a real stack */\n\tvar BIFF2Fmt = 0, BIFF2FmtTable/*:Array*/ = [];\n\tvar FilterDatabases = []; /* TODO: sort out supbooks and process elsewhere */\n\tvar last_lbl/*:?DefinedName*/;\n\n\t/* explicit override for some broken writers */\n\topts.codepage = 1200;\n\tset_cp(1200);\n\tvar seen_codepage = false;\n\twhile(blob.l < blob.length - 1) {\n\t\tvar s = blob.l;\n\t\tvar RecordType = blob.read_shift(2);\n\t\tif(RecordType === 0 && last_Rn === 'EOF') break;\n\t\tvar length = (blob.l === blob.length ? 0 : blob.read_shift(2));\n\t\tvar R = XLSRecordEnum[RecordType];\n\t\t//console.log(RecordType.toString(16), RecordType, R, blob.l, length, blob.length);\n\t\t//if(!R) console.log(blob.slice(blob.l, blob.l + length));\n\t\tif(R && R.f) {\n\t\t\tif(options.bookSheets) {\n\t\t\t\tif(last_Rn === 'BoundSheet8' && R.n !== 'BoundSheet8') break;\n\t\t\t}\n\t\t\tlast_Rn = R.n;\n\t\t\tif(R.r === 2 || R.r == 12) {\n\t\t\t\tvar rt = blob.read_shift(2); length -= 2;\n\t\t\t\tif(!opts.enc && rt !== RecordType && (((rt&0xFF)<<8)|(rt>>8)) !== RecordType) throw new Error(\"rt mismatch: \" + rt + \"!=\" + RecordType);\n\t\t\t\tif(R.r == 12){\n\t\t\t\t\tblob.l += 10; length -= 10;\n\t\t\t\t} // skip FRT\n\t\t\t}\n\t\t\t//console.error(R,blob.l,length,blob.length);\n\t\t\tvar val/*:any*/ = ({}/*:any*/);\n\t\t\tif(R.n === 'EOF') val = /*::(*/R.f(blob, length, opts)/*:: :any)*/;\n\t\t\telse val = /*::(*/slurp(R, blob, length, opts)/*:: :any)*/;\n\t\t\tvar Rn = R.n;\n\t\t\t/*:: val = (val:any); */\n\t\t\tif(file_depth == 0 && Rn != 'BOF') continue;\n\t\t\t/* nested switch statements to workaround V8 128 limit */\n\t\t\tswitch(Rn) {\n\t\t\t\t/* Workbook Options */\n\t\t\t\tcase 'Date1904':\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\twb.opts.Date1904 = Workbook.WBProps.date1904 = val; break;\n\t\t\t\tcase 'WriteProtect': wb.opts.WriteProtect = true; break;\n\t\t\t\tcase 'FilePass':\n\t\t\t\t\tif(!opts.enc) blob.l = 0;\n\t\t\t\t\topts.enc = val;\n\t\t\t\t\tif(!options.password) throw new Error(\"File is password-protected\");\n\t\t\t\t\tif(val.valid == null) throw new Error(\"Encryption scheme unsupported\");\n\t\t\t\t\tif(!val.valid) throw new Error(\"Password is incorrect\");\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'WriteAccess': opts.lastuser = val; break;\n\t\t\t\tcase 'FileSharing': break; //TODO\n\t\t\t\tcase 'CodePage':\n\t\t\t\t\tvar cpval = Number(val);\n\t\t\t\t\t/* overrides based on test cases */\n\t\t\t\t\tswitch(cpval) {\n\t\t\t\t\t\tcase 0x5212: cpval = 1200; break;\n\t\t\t\t\t\tcase 0x8000: cpval = 10000; break;\n\t\t\t\t\t\tcase 0x8001: cpval = 1252; break;\n\t\t\t\t\t}\n\t\t\t\t\tset_cp(opts.codepage = cpval);\n\t\t\t\t\tseen_codepage = true;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'RRTabId': opts.rrtabid = val; break;\n\t\t\t\tcase 'WinProtect': opts.winlocked = val; break;\n\t\t\t\tcase 'Template': break; // TODO\n\t\t\t\tcase 'BookBool': break; // TODO\n\t\t\t\tcase 'UsesELFs': break;\n\t\t\t\tcase 'MTRSettings': break;\n\t\t\t\tcase 'RefreshAll':\n\t\t\t\tcase 'CalcCount':\n\t\t\t\tcase 'CalcDelta':\n\t\t\t\tcase 'CalcIter':\n\t\t\t\tcase 'CalcMode':\n\t\t\t\tcase 'CalcPrecision':\n\t\t\t\tcase 'CalcSaveRecalc':\n\t\t\t\t\twb.opts[Rn] = val; break;\n\t\t\t\tcase 'CalcRefMode': opts.CalcRefMode = val; break; // TODO: implement R1C1\n\t\t\t\tcase 'Uncalced': break;\n\t\t\t\tcase 'ForceFullCalculation': wb.opts.FullCalc = val; break;\n\t\t\t\tcase 'WsBool':\n\t\t\t\t\tif(val.fDialog) out[\"!type\"] = \"dialog\";\n\t\t\t\t\tif(!val.fBelow) (out[\"!outline\"] || (out[\"!outline\"] = {})).above = true;\n\t\t\t\t\tif(!val.fRight) (out[\"!outline\"] || (out[\"!outline\"] = {})).left = true;\n\t\t\t\t\tbreak; // TODO\n\t\t\t\tcase 'XF':\n\t\t\t\t\tXFs.push(val); break;\n\t\t\t\tcase 'ExtSST': break; // TODO\n\t\t\t\tcase 'BookExt': break; // TODO\n\t\t\t\tcase 'RichTextStream': break;\n\t\t\t\tcase 'BkHim': break;\n\n\t\t\t\tcase 'SupBook':\n\t\t\t\t\tsupbooks.push([val]);\n\t\t\t\t\tsupbooks[supbooks.length-1].XTI = [];\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternName':\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Index': break; // TODO\n\t\t\t\tcase 'Lbl':\n\t\t\t\t\tlast_lbl = ({\n\t\t\t\t\t\tName: val.Name,\n\t\t\t\t\t\tRef: stringify_formula(val.rgce,range,null,supbooks,opts)\n\t\t\t\t\t}/*:DefinedName*/);\n\t\t\t\t\tif(val.itab > 0) last_lbl.Sheet = val.itab - 1;\n\t\t\t\t\tsupbooks.names.push(last_lbl);\n\t\t\t\t\tif(!supbooks[0]) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length-1].push(val);\n\t\t\t\t\tif(val.Name == \"_xlnm._FilterDatabase\" && val.itab > 0)\n\t\t\t\t\t\tif(val.rgce && val.rgce[0] && val.rgce[0][0] && val.rgce[0][0][0] == 'PtgArea3d')\n\t\t\t\t\t\t\tFilterDatabases[val.itab - 1] = { ref: encode_range(val.rgce[0][0][1][2]) };\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ExternCount': opts.ExternCount = val; break;\n\t\t\t\tcase 'ExternSheet':\n\t\t\t\t\tif(supbooks.length == 0) { supbooks[0] = []; supbooks[0].XTI = []; }\n\t\t\t\t\tsupbooks[supbooks.length - 1].XTI = supbooks[supbooks.length - 1].XTI.concat(val); supbooks.XTI = supbooks.XTI.concat(val); break;\n\t\t\t\tcase 'NameCmt':\n\t\t\t\t\t/* TODO: search for correct name */\n\t\t\t\t\tif(opts.biff < 8) break;\n\t\t\t\t\tif(last_lbl != null) last_lbl.Comment = val[1];\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Protect': out[\"!protect\"] = val; break; /* for sheet or book */\n\t\t\t\tcase 'Password': if(val !== 0 && opts.WTF) console.error(\"Password verifier: \" + val); break;\n\t\t\t\tcase 'Prot4Rev': case 'Prot4RevPass': break; /*TODO: Revision Control*/\n\n\t\t\t\tcase 'BoundSheet8': {\n\t\t\t\t\tDirectory[val.pos] = val;\n\t\t\t\t\topts.snames.push(val.name);\n\t\t\t\t} break;\n\t\t\t\tcase 'EOF': {\n\t\t\t\t\tif(--file_depth) break;\n\t\t\t\t\tif(range.e) {\n\t\t\t\t\t\tif(range.e.r > 0 && range.e.c > 0) {\n\t\t\t\t\t\t\trange.e.r--; range.e.c--;\n\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\tif(options.sheetRows && options.sheetRows <= range.e.r) {\n\t\t\t\t\t\t\t\tvar tmpri = range.e.r;\n\t\t\t\t\t\t\t\trange.e.r = options.sheetRows - 1;\n\t\t\t\t\t\t\t\tout[\"!fullref\"] = out[\"!ref\"];\n\t\t\t\t\t\t\t\tout[\"!ref\"] = encode_range(range);\n\t\t\t\t\t\t\t\trange.e.r = tmpri;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trange.e.r++; range.e.c++;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(merges.length > 0) out[\"!merges\"] = merges;\n\t\t\t\t\t\tif(objects.length > 0) out[\"!objects\"] = objects;\n\t\t\t\t\t\tif(colinfo.length > 0) out[\"!cols\"] = colinfo;\n\t\t\t\t\t\tif(rowinfo.length > 0) out[\"!rows\"] = rowinfo;\n\t\t\t\t\t\tWorkbook.Sheets.push(wsprops);\n\t\t\t\t\t}\n\t\t\t\t\tif(cur_sheet === \"\") Preamble = out; else Sheets[cur_sheet] = out;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\t\t\t\t} break;\n\t\t\t\tcase 'BOF': {\n\t\t\t\t\tif(opts.biff === 8) opts.biff = {\n\t\t\t\t\t\t/*::[*/0x0009/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0209/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0409/*::]*/:4\n\t\t\t\t\t}[RecordType] || {\n\t\t\t\t\t\t/*::[*/0x0200/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0300/*::]*/:3,\n\t\t\t\t\t\t/*::[*/0x0400/*::]*/:4,\n\t\t\t\t\t\t/*::[*/0x0500/*::]*/:5,\n\t\t\t\t\t\t/*::[*/0x0600/*::]*/:8,\n\t\t\t\t\t\t/*::[*/0x0002/*::]*/:2,\n\t\t\t\t\t\t/*::[*/0x0007/*::]*/:2\n\t\t\t\t\t}[val.BIFFVer] || 8;\n\t\t\t\t\topts.biffguess = val.BIFFVer == 0;\n\t\t\t\t\tif(val.BIFFVer == 0 && val.dt == 0x1000) { opts.biff = 5; seen_codepage = true; set_cp(opts.codepage = 28591); }\n\t\t\t\t\tif(opts.biff == 8 && val.BIFFVer == 0 && val.dt == 16) opts.biff = 2;\n\t\t\t\t\tif(file_depth++) break;\n\t\t\t\t\tcell_valid = true;\n\t\t\t\t\tout = ((options.dense ? [] : {})/*:any*/);\n\n\t\t\t\t\tif(opts.biff < 8 && !seen_codepage) { seen_codepage = true; set_cp(opts.codepage = options.codepage || 1252); }\n\n\t\t\t\t\tif(opts.biff < 5 || val.BIFFVer == 0 && val.dt == 0x1000) {\n\t\t\t\t\t\tif(cur_sheet === \"\") cur_sheet = \"Sheet1\";\n\t\t\t\t\t\trange = {s:{r:0,c:0},e:{r:0,c:0}};\n\t\t\t\t\t\t/* fake BoundSheet8 */\n\t\t\t\t\t\tvar fakebs8 = {pos: blob.l - length, name:cur_sheet};\n\t\t\t\t\t\tDirectory[fakebs8.pos] = fakebs8;\n\t\t\t\t\t\topts.snames.push(cur_sheet);\n\t\t\t\t\t}\n\t\t\t\t\telse cur_sheet = (Directory[s] || {name:\"\"}).name;\n\t\t\t\t\tif(val.dt == 0x20) out[\"!type\"] = \"chart\";\n\t\t\t\t\tif(val.dt == 0x40) out[\"!type\"] = \"macro\";\n\t\t\t\t\tmerges = [];\n\t\t\t\t\tobjects = [];\n\t\t\t\t\topts.arrayf = arrayf = [];\n\t\t\t\t\tcolinfo = []; rowinfo = [];\n\t\t\t\t\tdefwidth = defheight = 0;\n\t\t\t\t\tseencol = false;\n\t\t\t\t\twsprops = {Hidden:(Directory[s]||{hs:0}).hs, name:cur_sheet };\n\t\t\t\t} break;\n\n\t\t\t\tcase 'Number': case 'BIFF2NUM': case 'BIFF2INT': {\n\t\t\t\t\tif(out[\"!type\"] == \"chart\") if(options.dense ? (out[val.r]||[])[val.c]: out[encode_cell({c:val.c, r:val.r})]) ++val.c;\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe]||{}, v:val.val, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'BoolErr': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.val, t:val.t}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'RK': {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], v:val.rknum, t:'n'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulRk': {\n\t\t\t\t\tfor(var j = val.c; j <= val.C; ++j) {\n\t\t\t\t\t\tvar ixfe = val.rkrec[j-val.c][0];\n\t\t\t\t\t\ttemp_val= ({ixfe:ixfe, XF:XFs[ixfe], v:val.rkrec[j-val.c][1], t:'n'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Formula': {\n\t\t\t\t\tif(val.val == 'String') { last_formula = val; break; }\n\t\t\t\t\ttemp_val = make_cell(val.val, val.cell.ixfe, val.tt);\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\tvar _f = val.formula;\n\t\t\t\t\t\tif(_f && _f[0] && _f[0][0] && _f[0][0][0] == 'PtgExp') {\n\t\t\t\t\t\t\tvar _fr = _f[0][0][1][0], _fc = _f[0][0][1][1];\n\t\t\t\t\t\t\tvar _fe = encode_cell({r:_fr, c:_fc});\n\t\t\t\t\t\t\tif(sharedf[_fe]) temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t\t\telse temp_val.F = ((options.dense ? (out[_fr]||[])[_fc]: out[_fe]) || {}).F;\n\t\t\t\t\t\t} else temp_val.f = \"\"+stringify_formula(val.formula,range,val.cell,supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell(val.cell, temp_val, options);\n\t\t\t\t\tlast_formula = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'String': {\n\t\t\t\t\tif(last_formula) { /* technically always true */\n\t\t\t\t\t\tlast_formula.val = val;\n\t\t\t\t\t\ttemp_val = make_cell(val, last_formula.cell.ixfe, 's');\n\t\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\t\tif(options.cellFormula) {\n\t\t\t\t\t\t\ttemp_val.f = \"\"+stringify_formula(last_formula.formula, range, last_formula.cell, supbooks, opts);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell(last_formula.cell, temp_val, options);\n\t\t\t\t\t\tlast_formula = null;\n\t\t\t\t\t} else throw new Error(\"String record expects Formula\");\n\t\t\t\t} break;\n\t\t\t\tcase 'Array': {\n\t\t\t\t\tarrayf.push(val);\n\t\t\t\t\tvar _arraystart = encode_cell(val[0].s);\n\t\t\t\t\tcc = options.dense ? (out[val[0].s.r]||[])[val[0].s.c] : out[_arraystart];\n\t\t\t\t\tif(options.cellFormula && cc) {\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tif(!_arraystart || !cc) break;\n\t\t\t\t\t\tcc.f = \"\"+stringify_formula(val[1], range, val[0], supbooks, opts);\n\t\t\t\t\t\tcc.F = encode_range(val[0]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'ShrFmla': {\n\t\t\t\t\tif(!cell_valid) break;\n\t\t\t\t\tif(!options.cellFormula) break;\n\t\t\t\t\tif(last_cell) {\n\t\t\t\t\t\t/* TODO: capture range */\n\t\t\t\t\t\tif(!last_formula) break; /* technically unreachable */\n\t\t\t\t\t\tsharedf[encode_cell(last_formula.cell)]= val[0];\n\t\t\t\t\t\tcc = options.dense ? (out[last_formula.cell.r]||[])[last_formula.cell.c] : out[encode_cell(last_formula.cell)];\n\t\t\t\t\t\t(cc||{}).f = \"\"+stringify_formula(val[0], range, lastcell, supbooks, opts);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'LabelSst':\n\t\t\t\t\ttemp_val=make_cell(sst[val.isst].t, val.ixfe, 's');\n\t\t\t\t\tif(sst[val.isst].h) temp_val.h = sst[val.isst].h;\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'Blank': if(options.sheetStubs) {\n\t\t\t\t\ttemp_val = ({ixfe: val.ixfe, XF: XFs[val.ixfe], t:'z'}/*:any*/);\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t} break;\n\t\t\t\tcase 'MulBlank': if(options.sheetStubs) {\n\t\t\t\t\tfor(var _j = val.c; _j <= val.C; ++_j) {\n\t\t\t\t\t\tvar _ixfe = val.ixfe[_j-val.c];\n\t\t\t\t\t\ttemp_val= ({ixfe:_ixfe, XF:XFs[_ixfe], t:'z'}/*:any*/);\n\t\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\t\taddcell({c:_j, r:val.r}, temp_val, options);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'RString':\n\t\t\t\tcase 'Label': case 'BIFF2STR':\n\t\t\t\t\ttemp_val=make_cell(val.val, val.ixfe, 's');\n\t\t\t\t\ttemp_val.XF = XFs[temp_val.ixfe];\n\t\t\t\t\tif(BIFF2Fmt > 0) temp_val.z = BIFF2FmtTable[(temp_val.ixfe>>8) & 0x3F];\n\t\t\t\t\tsafe_format_xf(temp_val, options, wb.opts.Date1904);\n\t\t\t\t\taddcell({c:val.c, r:val.r}, temp_val, options);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Dimensions': {\n\t\t\t\t\tif(file_depth === 1) range = val; /* TODO: stack */\n\t\t\t\t} break;\n\t\t\t\tcase 'SST': {\n\t\t\t\t\tsst = val;\n\t\t\t\t} break;\n\t\t\t\tcase 'Format': { /* val = [id, fmt] */\n\t\t\t\t\tif(opts.biff == 4) {\n\t\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val[1];\n\t\t\t\t\t\tfor(var b4idx = 0; b4idx < BIFF2Fmt + 163; ++b4idx) if(SSF._table[b4idx] == val[1]) break;\n\t\t\t\t\t\tif(b4idx >= 163) SSF.load(val[1], BIFF2Fmt + 163);\n\t\t\t\t\t}\n\t\t\t\t\telse SSF.load(val[1], val[0]);\n\t\t\t\t} break;\n\t\t\t\tcase 'BIFF2FORMAT': {\n\t\t\t\t\tBIFF2FmtTable[BIFF2Fmt++] = val;\n\t\t\t\t\tfor(var b2idx = 0; b2idx < BIFF2Fmt + 163; ++b2idx) if(SSF._table[b2idx] == val) break;\n\t\t\t\t\tif(b2idx >= 163) SSF.load(val, BIFF2Fmt + 163);\n\t\t\t\t} break;\n\n\t\t\t\tcase 'MergeCells': merges = merges.concat(val); break;\n\n\t\t\t\tcase 'Obj': objects[val.cmo[0]] = opts.lastobj = val; break;\n\t\t\t\tcase 'TxO': opts.lastobj.TxO = val; break;\n\t\t\t\tcase 'ImData': opts.lastobj.ImData = val; break;\n\n\t\t\t\tcase 'HLink': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc) cc.l = val[1];\n\t\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'HLinkTooltip': {\n\t\t\t\t\tfor(rngR = val[0].s.r; rngR <= val[0].e.r; ++rngR)\n\t\t\t\t\t\tfor(rngC = val[0].s.c; rngC <= val[0].e.c; ++rngC) {\n\t\t\t\t\t\t\tcc = options.dense ? (out[rngR]||[])[rngC] : out[encode_cell({c:rngC,r:rngR})];\n\t\t\t\t\t\t\tif(cc && cc.l) cc.l.Tooltip = val[1];\n\t\t\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\t/* Comments */\n\t\t\t\tcase 'Note': {\n\t\t\t\t\tif(opts.biff <= 5 && opts.biff >= 2) break; /* TODO: BIFF5 */\n\t\t\t\t\tcc = options.dense ? (out[val[0].r]||[])[val[0].c] : out[encode_cell(val[0])];\n\t\t\t\t\tvar noteobj = objects[val[2]];\n\t\t\t\t\tif(!cc) {\n\t\t\t\t\t\tif(options.dense) {\n\t\t\t\t\t\t\tif(!out[val[0].r]) out[val[0].r] = [];\n\t\t\t\t\t\t\tcc = out[val[0].r][val[0].c] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcc = out[encode_cell(val[0])] = ({t:\"z\"}/*:any*/);\n\t\t\t\t\t\t}\n\t\t\t\t\t\trange.e.r = Math.max(range.e.r, val[0].r);\n\t\t\t\t\t\trange.s.r = Math.min(range.s.r, val[0].r);\n\t\t\t\t\t\trange.e.c = Math.max(range.e.c, val[0].c);\n\t\t\t\t\t\trange.s.c = Math.min(range.s.c, val[0].c);\n\t\t\t\t\t}\n\t\t\t\t\tif(!cc.c) cc.c = [];\n\t\t\t\t\tcmnt = {a:val[1],t:noteobj.TxO.t};\n\t\t\t\t\tcc.c.push(cmnt);\n\t\t\t\t} break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\tcase 'ClrtClient': break;\n\t\t\t\tcase 'XFExt': update_xfext(XFs[val.ixfe], val.ext); break;\n\n\t\t\t\tcase 'DefColWidth': defwidth = val; break;\n\t\t\t\tcase 'DefaultRowHeight': defheight = val[1]; break; // TODO: flags\n\n\t\t\t\tcase 'ColInfo': {\n\t\t\t\t\tif(!opts.cellStyles) break;\n\t\t\t\t\twhile(val.e >= val.s) {\n\t\t\t\t\t\tcolinfo[val.e--] = { width: val.w/256, level: (val.level || 0), hidden: !!(val.flags & 1) };\n\t\t\t\t\t\tif(!seencol) { seencol = true; find_mdw_colw(val.w/256); }\n\t\t\t\t\t\tprocess_col(colinfo[val.e+1]);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\t\t\t\tcase 'Row': {\n\t\t\t\t\tvar rowobj = {};\n\t\t\t\t\tif(val.level != null) { rowinfo[val.r] = rowobj; rowobj.level = val.level; }\n\t\t\t\t\tif(val.hidden) { rowinfo[val.r] = rowobj; rowobj.hidden = true; }\n\t\t\t\t\tif(val.hpt) {\n\t\t\t\t\t\trowinfo[val.r] = rowobj;\n\t\t\t\t\t\trowobj.hpt = val.hpt; rowobj.hpx = pt2px(val.hpt);\n\t\t\t\t\t}\n\t\t\t\t} break;\n\n\t\t\t\tcase 'LeftMargin':\n\t\t\t\tcase 'RightMargin':\n\t\t\t\tcase 'TopMargin':\n\t\t\t\tcase 'BottomMargin':\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'][Rn.slice(0,-6).toLowerCase()] = val;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Selection': break;\n\n\t\t\t\tcase 'Setup': // TODO\n\t\t\t\t\tif(!out['!margins']) default_margins(out['!margins'] = {});\n\t\t\t\t\tout['!margins'].header = val.header;\n\t\t\t\t\tout['!margins'].footer = val.footer;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Window2': // TODO\n\t\t\t\t\t// $FlowIgnore\n\t\t\t\t\tif(val.RTL) Workbook.Views[0].RTL = true;\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'Header': break; // TODO\n\t\t\t\tcase 'Footer': break; // TODO\n\t\t\t\tcase 'HCenter': break; // TODO\n\t\t\t\tcase 'VCenter': break; // TODO\n\t\t\t\tcase 'Pls': break; // TODO\n\t\t\t\tcase 'GCW': break;\n\t\t\t\tcase 'LHRecord': break;\n\t\t\t\tcase 'DBCell': break; // TODO\n\t\t\t\tcase 'EntExU2': break; // TODO\n\t\t\t\tcase 'SxView': break; // TODO\n\t\t\t\tcase 'Sxvd': break; // TODO\n\t\t\t\tcase 'SXVI': break; // TODO\n\t\t\t\tcase 'SXVDEx': break; // TODO\n\t\t\t\tcase 'SxIvd': break; // TODO\n\t\t\t\tcase 'SXString': break; // TODO\n\t\t\t\tcase 'Sync': break;\n\t\t\t\tcase 'Addin': break;\n\t\t\t\tcase 'SXDI': break; // TODO\n\t\t\t\tcase 'SXLI': break; // TODO\n\t\t\t\tcase 'SXEx': break; // TODO\n\t\t\t\tcase 'QsiSXTag': break; // TODO\n\t\t\t\tcase 'Feat': break;\n\t\t\t\tcase 'FeatHdr': case 'FeatHdr11': break;\n\t\t\t\tcase 'Feature11': case 'Feature12': case 'List12': break;\n\t\t\t\tcase 'Country': country = val; break;\n\t\t\t\tcase 'RecalcId': break;\n\t\t\t\tcase 'DxGCol': break; // TODO: htmlify\n\t\t\t\tcase 'Fbi': case 'Fbi2': case 'GelFrame': break;\n\t\t\t\tcase 'Font': break; // TODO\n\t\t\t\tcase 'XFCRC': break; // TODO\n\t\t\t\tcase 'Style': break; // TODO\n\t\t\t\tcase 'StyleExt': break; // TODO\n\t\t\t\tcase 'Palette': palette = val; break;\n\t\t\t\tcase 'Theme': themes = val; break;\n\t\t\t\t/* Protection */\n\t\t\t\tcase 'ScenarioProtect': break;\n\t\t\t\tcase 'ObjProtect': break;\n\n\t\t\t\t/* Conditional Formatting */\n\t\t\t\tcase 'CondFmt12': break;\n\n\t\t\t\t/* Table */\n\t\t\t\tcase 'Table': break; // TODO\n\t\t\t\tcase 'TableStyles': break; // TODO\n\t\t\t\tcase 'TableStyle': break; // TODO\n\t\t\t\tcase 'TableStyleElement': break; // TODO\n\n\t\t\t\t/* PivotTable */\n\t\t\t\tcase 'SXStreamID': break; // TODO\n\t\t\t\tcase 'SXVS': break; // TODO\n\t\t\t\tcase 'DConRef': break; // TODO\n\t\t\t\tcase 'SXAddl': break; // TODO\n\t\t\t\tcase 'DConBin': break; // TODO\n\t\t\t\tcase 'DConName': break; // TODO\n\t\t\t\tcase 'SXPI': break; // TODO\n\t\t\t\tcase 'SxFormat': break; // TODO\n\t\t\t\tcase 'SxSelect': break; // TODO\n\t\t\t\tcase 'SxRule': break; // TODO\n\t\t\t\tcase 'SxFilt': break; // TODO\n\t\t\t\tcase 'SxItm': break; // TODO\n\t\t\t\tcase 'SxDXF': break; // TODO\n\n\t\t\t\t/* Scenario Manager */\n\t\t\t\tcase 'ScenMan': break;\n\n\t\t\t\t/* Data Consolidation */\n\t\t\t\tcase 'DCon': break;\n\n\t\t\t\t/* Watched Cell */\n\t\t\t\tcase 'CellWatch': break;\n\n\t\t\t\t/* Print Settings */\n\t\t\t\tcase 'PrintRowCol': break;\n\t\t\t\tcase 'PrintGrid': break;\n\t\t\t\tcase 'PrintSize': break;\n\n\t\t\t\tcase 'XCT': break;\n\t\t\t\tcase 'CRN': break;\n\n\t\t\t\tcase 'Scl': {\n\t\t\t\t\t//console.log(\"Zoom Level:\", val[0]/val[1],val);\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExt': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'SheetExtOptional': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\t/* VBA */\n\t\t\t\tcase 'ObNoMacros': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'ObProj': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\t\t\t\tcase 'CodeName': {\n\t\t\t\t\t/*:: if(!Workbook.WBProps) Workbook.WBProps = {}; */\n\t\t\t\t\tif(!cur_sheet) Workbook.WBProps.CodeName = val || \"ThisWorkbook\";\n\t\t\t\t\telse wsprops.CodeName = val || wsprops.name;\n\t\t\t\t} break;\n\t\t\t\tcase 'GUIDTypeLib': {\n\t\t\t\t\t/* empty */\n\t\t\t\t} break;\n\n\t\t\t\tcase 'WOpt': break; // TODO: WTF?\n\t\t\t\tcase 'PhoneticInfo': break;\n\n\t\t\t\tcase 'OleObjectSize': break;\n\n\t\t\t\t/* Differential Formatting */\n\t\t\t\tcase 'DXF': case 'DXFN': case 'DXFN12': case 'DXFN12List': case 'DXFN12NoCB': break;\n\n\t\t\t\t/* Data Validation */\n\t\t\t\tcase 'Dv': case 'DVal': break;\n\n\t\t\t\t/* Data Series */\n\t\t\t\tcase 'BRAI': case 'Series': case 'SeriesText': break;\n\n\t\t\t\t/* Data Connection */\n\t\t\t\tcase 'DConn': break;\n\t\t\t\tcase 'DbOrParamQry': break;\n\t\t\t\tcase 'DBQueryExt': break;\n\n\t\t\t\tcase 'OleDbConn': break;\n\t\t\t\tcase 'ExtString': break;\n\n\t\t\t\t/* Formatting */\n\t\t\t\tcase 'IFmtRecord': break;\n\t\t\t\tcase 'CondFmt': case 'CF': case 'CF12': case 'CFEx': break;\n\n\t\t\t\t/* Explicitly Ignored */\n\t\t\t\tcase 'Excel9File': break;\n\t\t\t\tcase 'Units': break;\n\t\t\t\tcase 'InterfaceHdr': case 'Mms': case 'InterfaceEnd': case 'DSF': break;\n\t\t\t\tcase 'BuiltInFnGroupCount': /* 2.4.30 0x0E or 0x10 but excel 2011 generates 0x11? */ break;\n\t\t\t\t/* View Stuff */\n\t\t\t\tcase 'Window1': case 'HideObj': case 'GridSet': case 'Guts':\n\t\t\t\tcase 'UserBView': case 'UserSViewBegin': case 'UserSViewEnd': break;\n\t\t\t\tcase 'Pane': break;\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* Chart */\n\t\t\t\tcase 'Dat':\n\t\t\t\tcase 'Begin': case 'End':\n\t\t\t\tcase 'StartBlock': case 'EndBlock':\n\t\t\t\tcase 'Frame': case 'Area':\n\t\t\t\tcase 'Axis': case 'AxisLine': case 'Tick': break;\n\t\t\t\tcase 'AxesUsed':\n\t\t\t\tcase 'CrtLayout12': case 'CrtLayout12A': case 'CrtLink': case 'CrtLine': case 'CrtMlFrt': case 'CrtMlFrtContinue': break;\n\t\t\t\tcase 'LineFormat': case 'AreaFormat':\n\t\t\t\tcase 'Chart': case 'Chart3d': case 'Chart3DBarShape': case 'ChartFormat': case 'ChartFrtInfo': break;\n\t\t\t\tcase 'PlotArea': case 'PlotGrowth': break;\n\t\t\t\tcase 'SeriesList': case 'SerParent': case 'SerAuxTrend': break;\n\t\t\t\tcase 'DataFormat': case 'SerToCrt': case 'FontX': break;\n\t\t\t\tcase 'CatSerRange': case 'AxcExt': case 'SerFmt': break;\n\t\t\t\tcase 'ShtProps': break;\n\t\t\t\tcase 'DefaultText': case 'Text': case 'CatLab': break;\n\t\t\t\tcase 'DataLabExtContents': break;\n\t\t\t\tcase 'Legend': case 'LegendException': break;\n\t\t\t\tcase 'Pie': case 'Scatter': break;\n\t\t\t\tcase 'PieFormat': case 'MarkerFormat': break;\n\t\t\t\tcase 'StartObject': case 'EndObject': break;\n\t\t\t\tcase 'AlRuns': case 'ObjectLink': break;\n\t\t\t\tcase 'SIIndex': break;\n\t\t\t\tcase 'AttachedLabel': case 'YMult': break;\n\n\t\t\t\t/* Chart Group */\n\t\t\t\tcase 'Line': case 'Bar': break;\n\t\t\t\tcase 'Surf': break;\n\n\t\t\t\t/* Axis Group */\n\t\t\t\tcase 'AxisParent': break;\n\t\t\t\tcase 'Pos': break;\n\t\t\t\tcase 'ValueRange': break;\n\n\t\t\t\t/* Pivot Chart */\n\t\t\t\tcase 'SXViewEx9': break; // TODO\n\t\t\t\tcase 'SXViewLink': break;\n\t\t\t\tcase 'PivotChartBits': break;\n\t\t\t\tcase 'SBaseRef': break;\n\t\t\t\tcase 'TextPropsStream': break;\n\n\t\t\t\t/* Chart Misc */\n\t\t\t\tcase 'LnExt': break;\n\t\t\t\tcase 'MkrExt': break;\n\t\t\t\tcase 'CrtCoopt': break;\n\n\t\t\t\t/* Query Table */\n\t\t\t\tcase 'Qsi': case 'Qsif': case 'Qsir': case 'QsiSXTag': break;\n\t\t\t\tcase 'TxtQry': break;\n\n\t\t\t\t/* Filter */\n\t\t\t\tcase 'FilterMode': break;\n\t\t\t\tcase 'AutoFilter': case 'AutoFilterInfo': break;\n\t\t\t\tcase 'AutoFilter12': break;\n\t\t\t\tcase 'DropDownObjIds': break;\n\t\t\t\tcase 'Sort': break;\n\t\t\t\tcase 'SortData': break;\n\n\t\t\t\t/* Drawing */\n\t\t\t\tcase 'ShapePropsStream': break;\n\t\t\t\tcase 'MsoDrawing': case 'MsoDrawingGroup': case 'MsoDrawingSelection': break;\n\t\t\t\t/* Pub Stuff */\n\t\t\t\tcase 'WebPub': case 'AutoWebPub': break;\n\n\t\t\t\t/* Print Stuff */\n\t\t\t\tcase 'HeaderFooter': case 'HFPicture': case 'PLV':\n\t\t\t\tcase 'HorizontalPageBreaks': case 'VerticalPageBreaks': break;\n\t\t\t\t/* Behavioral */\n\t\t\t\tcase 'Backup': case 'CompressPictures': case 'Compat12': break;\n\n\t\t\t\t/* Should not Happen */\n\t\t\t\tcase 'Continue': case 'ContinueFrt12': break;\n\n\t\t\t\t/* Future Records */\n\t\t\t\tcase 'FrtFontList': case 'FrtWrapper': break;\n\n\t\t\t\tdefault: switch(R.n) { /* nested */\n\t\t\t\t/* BIFF5 records */\n\t\t\t\tcase 'TabIdConf': case 'Radar': case 'RadarArea': case 'DropBar': case 'Intl': case 'CoordList': case 'SerAuxErrBar': break;\n\n\t\t\t\t/* BIFF2-4 records */\n\t\t\t\tcase 'BIFF2FONTCLR': case 'BIFF2FMTCNT': case 'BIFF2FONTXTRA': break;\n\t\t\t\tcase 'BIFF2XF': case 'BIFF3XF': case 'BIFF4XF': break;\n\t\t\t\tcase 'BIFF2XFINDEX': break;\n\t\t\t\tcase 'BIFF4FMTCNT': case 'BIFF2ROW': case 'BIFF2WINDOW2': break;\n\n\t\t\t\t/* Miscellaneous */\n\t\t\t\tcase 'SCENARIO': case 'DConBin': case 'PicF': case 'DataLabExt':\n\t\t\t\tcase 'Lel': case 'BopPop': case 'BopPopCustom': case 'RealTimeData':\n\t\t\t\tcase 'Name': break;\n\t\t\t\tcase 'LHNGraph': case 'FnGroupName': case 'AddMenu': case 'LPr': break;\n\t\t\t\tcase 'ListObj': case 'ListField': break;\n\t\t\t\tcase 'RRSort': break;\n\t\t\t\tcase 'BigName': break;\n\t\t\t\tcase 'ToolbarHdr': case 'ToolbarEnd': break;\n\t\t\t\tcase 'DDEObjName': break;\n\t\t\t\tcase 'FRTArchId$': break;\n\t\t\t\tdefault: if(options.WTF) throw 'Unrecognized Record ' + R.n;\n\t\t\t}}}}\n\t\t} else blob.l += length;\n\t}\n\twb.SheetNames=keys(Directory).sort(function(a,b) { return Number(a) - Number(b); }).map(function(x){return Directory[x].name;});\n\tif(!options.bookSheets) wb.Sheets=Sheets;\n\tif(!wb.SheetNames.length && Preamble[\"!ref\"]) {\n\t\twb.SheetNames.push(\"Sheet1\");\n\t\tif(wb.Sheets) wb.Sheets[\"Sheet1\"] = Preamble;\n\t} else wb.Preamble=Preamble;\n\tif(wb.Sheets) FilterDatabases.forEach(function(r,i) { wb.Sheets[wb.SheetNames[i]]['!autofilter'] = r; });\n\twb.Strings = sst;\n\twb.SSF = SSF.get_table();\n\tif(opts.enc) wb.Encryption = opts.enc;\n\tif(themes) wb.Themes = themes;\n\twb.Metadata = {};\n\tif(country !== undefined) wb.Metadata.Country = country;\n\tif(supbooks.names.length > 0) Workbook.Names = supbooks.names;\n\twb.Workbook = Workbook;\n\treturn wb;\n}\n\n/* TODO: split props*/\nvar PSCLSID = {\n\tSI: \"e0859ff2f94f6810ab9108002b27b3d9\",\n\tDSI: \"02d5cdd59c2e1b10939708002b2cf9ae\",\n\tUDI: \"05d5cdd59c2e1b10939708002b2cf9ae\"\n};\nfunction parse_xls_props(cfb/*:CFBContainer*/, props, o) {\n\t/* [MS-OSHARED] 2.3.3.2.2 Document Summary Information Property Set */\n\tvar DSI = CFB.find(cfb, '!DocumentSummaryInformation');\n\tif(DSI && DSI.size > 0) try {\n\t\tvar DocSummary = parse_PropertySetStream(DSI, DocSummaryPIDDSI, PSCLSID.DSI);\n\t\tfor(var d in DocSummary) props[d] = DocSummary[d];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\t/* [MS-OSHARED] 2.3.3.2.1 Summary Information Property Set*/\n\tvar SI = CFB.find(cfb, '!SummaryInformation');\n\tif(SI && SI.size > 0) try {\n\t\tvar Summary = parse_PropertySetStream(SI, SummaryPIDSI, PSCLSID.SI);\n\t\tfor(var s in Summary) if(props[s] == null) props[s] = Summary[s];\n\t} catch(e) {if(o.WTF) throw e;/* empty */}\n\n\tif(props.HeadingPairs && props.TitlesOfParts) {\n\t\tload_props_pairs(props.HeadingPairs, props.TitlesOfParts, props, o);\n\t\tdelete props.HeadingPairs; delete props.TitlesOfParts;\n\t}\n}\nfunction write_xls_props(wb/*:Workbook*/, cfb/*:CFBContainer*/) {\n\tvar DSEntries = [], SEntries = [], CEntries = [];\n\tvar i = 0, Keys;\n\tif(wb.Props) {\n\t\tKeys = keys(wb.Props);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Props[Keys[i]]]);\n\t}\n\tif(wb.Custprops) {\n\t\tKeys = keys(wb.Custprops);\n\t\t// $FlowIgnore\n\t\tfor(i = 0; i < Keys.length; ++i) if(!Object.prototype.hasOwnProperty.call((wb.Props||{}), Keys[i])) (Object.prototype.hasOwnProperty.call(DocSummaryRE, Keys[i]) ? DSEntries : Object.prototype.hasOwnProperty.call(SummaryRE, Keys[i]) ? SEntries : CEntries).push([Keys[i], wb.Custprops[Keys[i]]]);\n\t}\n\tvar CEntries2 = [];\n\tfor(i = 0; i < CEntries.length; ++i) {\n\t\tif(XLSPSSkip.indexOf(CEntries[i][0]) > -1) continue;\n\t\tif(CEntries[i][1] == null) continue;\n\t\tCEntries2.push(CEntries[i]);\n\t}\n\tif(SEntries.length) CFB.utils.cfb_add(cfb, \"/\\u0005SummaryInformation\", write_PropertySetStream(SEntries, PSCLSID.SI, SummaryRE, SummaryPIDSI));\n\tif(DSEntries.length || CEntries2.length) CFB.utils.cfb_add(cfb, \"/\\u0005DocumentSummaryInformation\", write_PropertySetStream(DSEntries, PSCLSID.DSI, DocSummaryRE, DocSummaryPIDDSI, CEntries2.length ? CEntries2 : null, PSCLSID.UDI));\n}\n\nfunction parse_xlscfb(cfb/*:any*/, options/*:?ParseOpts*/)/*:Workbook*/ {\nif(!options) options = {};\nfix_read_opts(options);\nreset_cp();\nif(options.codepage) set_ansi(options.codepage);\nvar CompObj/*:?CFBEntry*/, WB/*:?any*/;\nif(cfb.FullPaths) {\n\tif(CFB.find(cfb, '/encryption')) throw new Error(\"File is password-protected\");\n\tCompObj = CFB.find(cfb, '!CompObj');\n\tWB = CFB.find(cfb, '/Workbook') || CFB.find(cfb, '/Book');\n} else {\n\tswitch(options.type) {\n\t\tcase 'base64': cfb = s2a(Base64.decode(cfb)); break;\n\t\tcase 'binary': cfb = s2a(cfb); break;\n\t\tcase 'buffer': break;\n\t\tcase 'array': if(!Array.isArray(cfb)) cfb = Array.prototype.slice.call(cfb); break;\n\t}\n\tprep_blob(cfb, 0);\n\tWB = ({content: cfb}/*:any*/);\n}\nvar /*::CompObjP, */WorkbookP/*:: :Workbook = XLSX.utils.book_new(); */;\n\nvar _data/*:?any*/;\nif(CompObj) /*::CompObjP = */parse_compobj(CompObj);\nif(options.bookProps && !options.bookSheets) WorkbookP = ({}/*:any*/);\nelse/*:: if(cfb instanceof CFBContainer) */ {\n\tvar T = has_buf ? 'buffer' : 'array';\n\tif(WB && WB.content) WorkbookP = parse_workbook(WB.content, options);\n\t/* Quattro Pro 7-8 */\n\telse if((_data=CFB.find(cfb, 'PerfectOffice_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\t/* Quattro Pro 9 */\n\telse if((_data=CFB.find(cfb, 'NativeContent_MAIN')) && _data.content) WorkbookP = WK_.to_workbook(_data.content, (options.type = T, options));\n\telse throw new Error(\"Cannot find Workbook stream\");\n\tif(options.bookVBA && cfb.FullPaths && CFB.find(cfb, '/_VBA_PROJECT_CUR/VBA/dir')) WorkbookP.vbaraw = make_vba_xls(cfb);\n}\n\nvar props = {};\nif(cfb.FullPaths) parse_xls_props(/*::((*/cfb/*:: :any):CFBContainer)*/, props, options);\n\nWorkbookP.Props = WorkbookP.Custprops = props; /* TODO: split up properties */\nif(options.bookFiles) WorkbookP.cfb = cfb;\n/*WorkbookP.CompObjP = CompObjP; // TODO: storage? */\nreturn WorkbookP;\n}\n\n\nfunction write_xlscfb(wb/*:Workbook*/, opts/*:WriteOpts*/)/*:CFBContainer*/ {\n\tvar o = opts || {};\n\tvar cfb = CFB.utils.cfb_new({root:\"R\"});\n\tvar wbpath = \"/Workbook\";\n\tswitch(o.bookType || \"xls\") {\n\t\tcase \"xls\": o.bookType = \"biff8\";\n\t\t/* falls through */\n\t\tcase \"xla\": if(!o.bookType) o.bookType = \"xla\";\n\t\t/* falls through */\n\t\tcase \"biff8\": wbpath = \"/Workbook\"; o.biff = 8; break;\n\t\tcase \"biff5\": wbpath = \"/Book\"; o.biff = 5; break;\n\t\tdefault: throw new Error(\"invalid type \" + o.bookType + \" for XLS CFB\");\n\t}\n\tCFB.utils.cfb_add(cfb, wbpath, write_biff_buf(wb, o));\n\tif(o.biff == 8 && (wb.Props || wb.Custprops)) write_xls_props(wb, cfb);\n\t// TODO: SI, DSI, CO\n\tif(o.biff == 8 && wb.vbaraw) fill_vba_xls(cfb, CFB.read(wb.vbaraw, {type: typeof wb.vbaraw == \"string\" ? \"binary\" : \"buffer\"}));\n\treturn cfb;\n}\n/* [MS-XLSB] 2.3 Record Enumeration */\nvar XLSBRecordEnum = {\n\t/*::[*/0x0000/*::]*/: { n:\"BrtRowHdr\", f:parse_BrtRowHdr },\n\t/*::[*/0x0001/*::]*/: { n:\"BrtCellBlank\", f:parse_BrtCellBlank },\n\t/*::[*/0x0002/*::]*/: { n:\"BrtCellRk\", f:parse_BrtCellRk },\n\t/*::[*/0x0003/*::]*/: { n:\"BrtCellError\", f:parse_BrtCellError },\n\t/*::[*/0x0004/*::]*/: { n:\"BrtCellBool\", f:parse_BrtCellBool },\n\t/*::[*/0x0005/*::]*/: { n:\"BrtCellReal\", f:parse_BrtCellReal },\n\t/*::[*/0x0006/*::]*/: { n:\"BrtCellSt\", f:parse_BrtCellSt },\n\t/*::[*/0x0007/*::]*/: { n:\"BrtCellIsst\", f:parse_BrtCellIsst },\n\t/*::[*/0x0008/*::]*/: { n:\"BrtFmlaString\", f:parse_BrtFmlaString },\n\t/*::[*/0x0009/*::]*/: { n:\"BrtFmlaNum\", f:parse_BrtFmlaNum },\n\t/*::[*/0x000A/*::]*/: { n:\"BrtFmlaBool\", f:parse_BrtFmlaBool },\n\t/*::[*/0x000B/*::]*/: { n:\"BrtFmlaError\", f:parse_BrtFmlaError },\n\t/*::[*/0x000C/*::]*/: { n:\"BrtShortBlank\", f:parse_BrtShortBlank },\n\t/*::[*/0x000D/*::]*/: { n:\"BrtShortRk\", f:parse_BrtShortRk },\n\t/*::[*/0x000E/*::]*/: { n:\"BrtShortError\", f:parse_BrtShortError },\n\t/*::[*/0x000F/*::]*/: { n:\"BrtShortBool\", f:parse_BrtShortBool },\n\t/*::[*/0x0010/*::]*/: { n:\"BrtShortReal\", f:parse_BrtShortReal },\n\t/*::[*/0x0011/*::]*/: { n:\"BrtShortSt\", f:parse_BrtShortSt },\n\t/*::[*/0x0012/*::]*/: { n:\"BrtShortIsst\", f:parse_BrtShortIsst },\n\t/*::[*/0x0013/*::]*/: { n:\"BrtSSTItem\", f:parse_RichStr },\n\t/*::[*/0x0014/*::]*/: { n:\"BrtPCDIMissing\" },\n\t/*::[*/0x0015/*::]*/: { n:\"BrtPCDINumber\" },\n\t/*::[*/0x0016/*::]*/: { n:\"BrtPCDIBoolean\" },\n\t/*::[*/0x0017/*::]*/: { n:\"BrtPCDIError\" },\n\t/*::[*/0x0018/*::]*/: { n:\"BrtPCDIString\" },\n\t/*::[*/0x0019/*::]*/: { n:\"BrtPCDIDatetime\" },\n\t/*::[*/0x001A/*::]*/: { n:\"BrtPCDIIndex\" },\n\t/*::[*/0x001B/*::]*/: { n:\"BrtPCDIAMissing\" },\n\t/*::[*/0x001C/*::]*/: { n:\"BrtPCDIANumber\" },\n\t/*::[*/0x001D/*::]*/: { n:\"BrtPCDIABoolean\" },\n\t/*::[*/0x001E/*::]*/: { n:\"BrtPCDIAError\" },\n\t/*::[*/0x001F/*::]*/: { n:\"BrtPCDIAString\" },\n\t/*::[*/0x0020/*::]*/: { n:\"BrtPCDIADatetime\" },\n\t/*::[*/0x0021/*::]*/: { n:\"BrtPCRRecord\" },\n\t/*::[*/0x0022/*::]*/: { n:\"BrtPCRRecordDt\" },\n\t/*::[*/0x0023/*::]*/: { n:\"BrtFRTBegin\" },\n\t/*::[*/0x0024/*::]*/: { n:\"BrtFRTEnd\" },\n\t/*::[*/0x0025/*::]*/: { n:\"BrtACBegin\" },\n\t/*::[*/0x0026/*::]*/: { n:\"BrtACEnd\" },\n\t/*::[*/0x0027/*::]*/: { n:\"BrtName\", f:parse_BrtName },\n\t/*::[*/0x0028/*::]*/: { n:\"BrtIndexRowBlock\" },\n\t/*::[*/0x002A/*::]*/: { n:\"BrtIndexBlock\" },\n\t/*::[*/0x002B/*::]*/: { n:\"BrtFont\", f:parse_BrtFont },\n\t/*::[*/0x002C/*::]*/: { n:\"BrtFmt\", f:parse_BrtFmt },\n\t/*::[*/0x002D/*::]*/: { n:\"BrtFill\", f:parse_BrtFill },\n\t/*::[*/0x002E/*::]*/: { n:\"BrtBorder\", f:parse_BrtBorder },\n\t/*::[*/0x002F/*::]*/: { n:\"BrtXF\", f:parse_BrtXF },\n\t/*::[*/0x0030/*::]*/: { n:\"BrtStyle\" },\n\t/*::[*/0x0031/*::]*/: { n:\"BrtCellMeta\" },\n\t/*::[*/0x0032/*::]*/: { n:\"BrtValueMeta\" },\n\t/*::[*/0x0033/*::]*/: { n:\"BrtMdb\" },\n\t/*::[*/0x0034/*::]*/: { n:\"BrtBeginFmd\" },\n\t/*::[*/0x0035/*::]*/: { n:\"BrtEndFmd\" },\n\t/*::[*/0x0036/*::]*/: { n:\"BrtBeginMdx\" },\n\t/*::[*/0x0037/*::]*/: { n:\"BrtEndMdx\" },\n\t/*::[*/0x0038/*::]*/: { n:\"BrtBeginMdxTuple\" },\n\t/*::[*/0x0039/*::]*/: { n:\"BrtEndMdxTuple\" },\n\t/*::[*/0x003A/*::]*/: { n:\"BrtMdxMbrIstr\" },\n\t/*::[*/0x003B/*::]*/: { n:\"BrtStr\" },\n\t/*::[*/0x003C/*::]*/: { n:\"BrtColInfo\", f:parse_ColInfo },\n\t/*::[*/0x003E/*::]*/: { n:\"BrtCellRString\" },\n\t/*::[*/0x003F/*::]*/: { n:\"BrtCalcChainItem$\", f:parse_BrtCalcChainItem$ },\n\t/*::[*/0x0040/*::]*/: { n:\"BrtDVal\", f:parse_BrtDVal },\n\t/*::[*/0x0041/*::]*/: { n:\"BrtSxvcellNum\" },\n\t/*::[*/0x0042/*::]*/: { n:\"BrtSxvcellStr\" },\n\t/*::[*/0x0043/*::]*/: { n:\"BrtSxvcellBool\" },\n\t/*::[*/0x0044/*::]*/: { n:\"BrtSxvcellErr\" },\n\t/*::[*/0x0045/*::]*/: { n:\"BrtSxvcellDate\" },\n\t/*::[*/0x0046/*::]*/: { n:\"BrtSxvcellNil\" },\n\t/*::[*/0x0080/*::]*/: { n:\"BrtFileVersion\" },\n\t/*::[*/0x0081/*::]*/: { n:\"BrtBeginSheet\" },\n\t/*::[*/0x0082/*::]*/: { n:\"BrtEndSheet\" },\n\t/*::[*/0x0083/*::]*/: { n:\"BrtBeginBook\", f:parsenoop, p:0 },\n\t/*::[*/0x0084/*::]*/: { n:\"BrtEndBook\" },\n\t/*::[*/0x0085/*::]*/: { n:\"BrtBeginWsViews\" },\n\t/*::[*/0x0086/*::]*/: { n:\"BrtEndWsViews\" },\n\t/*::[*/0x0087/*::]*/: { n:\"BrtBeginBookViews\" },\n\t/*::[*/0x0088/*::]*/: { n:\"BrtEndBookViews\" },\n\t/*::[*/0x0089/*::]*/: { n:\"BrtBeginWsView\", f:parse_BrtBeginWsView },\n\t/*::[*/0x008A/*::]*/: { n:\"BrtEndWsView\" },\n\t/*::[*/0x008B/*::]*/: { n:\"BrtBeginCsViews\" },\n\t/*::[*/0x008C/*::]*/: { n:\"BrtEndCsViews\" },\n\t/*::[*/0x008D/*::]*/: { n:\"BrtBeginCsView\" },\n\t/*::[*/0x008E/*::]*/: { n:\"BrtEndCsView\" },\n\t/*::[*/0x008F/*::]*/: { n:\"BrtBeginBundleShs\" },\n\t/*::[*/0x0090/*::]*/: { n:\"BrtEndBundleShs\" },\n\t/*::[*/0x0091/*::]*/: { n:\"BrtBeginSheetData\" },\n\t/*::[*/0x0092/*::]*/: { n:\"BrtEndSheetData\" },\n\t/*::[*/0x0093/*::]*/: { n:\"BrtWsProp\", f:parse_BrtWsProp },\n\t/*::[*/0x0094/*::]*/: { n:\"BrtWsDim\", f:parse_BrtWsDim, p:16 },\n\t/*::[*/0x0097/*::]*/: { n:\"BrtPane\", f:parse_BrtPane },\n\t/*::[*/0x0098/*::]*/: { n:\"BrtSel\" },\n\t/*::[*/0x0099/*::]*/: { n:\"BrtWbProp\", f:parse_BrtWbProp },\n\t/*::[*/0x009A/*::]*/: { n:\"BrtWbFactoid\" },\n\t/*::[*/0x009B/*::]*/: { n:\"BrtFileRecover\" },\n\t/*::[*/0x009C/*::]*/: { n:\"BrtBundleSh\", f:parse_BrtBundleSh },\n\t/*::[*/0x009D/*::]*/: { n:\"BrtCalcProp\" },\n\t/*::[*/0x009E/*::]*/: { n:\"BrtBookView\" },\n\t/*::[*/0x009F/*::]*/: { n:\"BrtBeginSst\", f:parse_BrtBeginSst },\n\t/*::[*/0x00A0/*::]*/: { n:\"BrtEndSst\" },\n\t/*::[*/0x00A1/*::]*/: { n:\"BrtBeginAFilter\", f:parse_UncheckedRfX },\n\t/*::[*/0x00A2/*::]*/: { n:\"BrtEndAFilter\" },\n\t/*::[*/0x00A3/*::]*/: { n:\"BrtBeginFilterColumn\" },\n\t/*::[*/0x00A4/*::]*/: { n:\"BrtEndFilterColumn\" },\n\t/*::[*/0x00A5/*::]*/: { n:\"BrtBeginFilters\" },\n\t/*::[*/0x00A6/*::]*/: { n:\"BrtEndFilters\" },\n\t/*::[*/0x00A7/*::]*/: { n:\"BrtFilter\" },\n\t/*::[*/0x00A8/*::]*/: { n:\"BrtColorFilter\" },\n\t/*::[*/0x00A9/*::]*/: { n:\"BrtIconFilter\" },\n\t/*::[*/0x00AA/*::]*/: { n:\"BrtTop10Filter\" },\n\t/*::[*/0x00AB/*::]*/: { n:\"BrtDynamicFilter\" },\n\t/*::[*/0x00AC/*::]*/: { n:\"BrtBeginCustomFilters\" },\n\t/*::[*/0x00AD/*::]*/: { n:\"BrtEndCustomFilters\" },\n\t/*::[*/0x00AE/*::]*/: { n:\"BrtCustomFilter\" },\n\t/*::[*/0x00AF/*::]*/: { n:\"BrtAFilterDateGroupItem\" },\n\t/*::[*/0x00B0/*::]*/: { n:\"BrtMergeCell\", f:parse_BrtMergeCell },\n\t/*::[*/0x00B1/*::]*/: { n:\"BrtBeginMergeCells\" },\n\t/*::[*/0x00B2/*::]*/: { n:\"BrtEndMergeCells\" },\n\t/*::[*/0x00B3/*::]*/: { n:\"BrtBeginPivotCacheDef\" },\n\t/*::[*/0x00B4/*::]*/: { n:\"BrtEndPivotCacheDef\" },\n\t/*::[*/0x00B5/*::]*/: { n:\"BrtBeginPCDFields\" },\n\t/*::[*/0x00B6/*::]*/: { n:\"BrtEndPCDFields\" },\n\t/*::[*/0x00B7/*::]*/: { n:\"BrtBeginPCDField\" },\n\t/*::[*/0x00B8/*::]*/: { n:\"BrtEndPCDField\" },\n\t/*::[*/0x00B9/*::]*/: { n:\"BrtBeginPCDSource\" },\n\t/*::[*/0x00BA/*::]*/: { n:\"BrtEndPCDSource\" },\n\t/*::[*/0x00BB/*::]*/: { n:\"BrtBeginPCDSRange\" },\n\t/*::[*/0x00BC/*::]*/: { n:\"BrtEndPCDSRange\" },\n\t/*::[*/0x00BD/*::]*/: { n:\"BrtBeginPCDFAtbl\" },\n\t/*::[*/0x00BE/*::]*/: { n:\"BrtEndPCDFAtbl\" },\n\t/*::[*/0x00BF/*::]*/: { n:\"BrtBeginPCDIRun\" },\n\t/*::[*/0x00C0/*::]*/: { n:\"BrtEndPCDIRun\" },\n\t/*::[*/0x00C1/*::]*/: { n:\"BrtBeginPivotCacheRecords\" },\n\t/*::[*/0x00C2/*::]*/: { n:\"BrtEndPivotCacheRecords\" },\n\t/*::[*/0x00C3/*::]*/: { n:\"BrtBeginPCDHierarchies\" },\n\t/*::[*/0x00C4/*::]*/: { n:\"BrtEndPCDHierarchies\" },\n\t/*::[*/0x00C5/*::]*/: { n:\"BrtBeginPCDHierarchy\" },\n\t/*::[*/0x00C6/*::]*/: { n:\"BrtEndPCDHierarchy\" },\n\t/*::[*/0x00C7/*::]*/: { n:\"BrtBeginPCDHFieldsUsage\" },\n\t/*::[*/0x00C8/*::]*/: { n:\"BrtEndPCDHFieldsUsage\" },\n\t/*::[*/0x00C9/*::]*/: { n:\"BrtBeginExtConnection\" },\n\t/*::[*/0x00CA/*::]*/: { n:\"BrtEndExtConnection\" },\n\t/*::[*/0x00CB/*::]*/: { n:\"BrtBeginECDbProps\" },\n\t/*::[*/0x00CC/*::]*/: { n:\"BrtEndECDbProps\" },\n\t/*::[*/0x00CD/*::]*/: { n:\"BrtBeginECOlapProps\" },\n\t/*::[*/0x00CE/*::]*/: { n:\"BrtEndECOlapProps\" },\n\t/*::[*/0x00CF/*::]*/: { n:\"BrtBeginPCDSConsol\" },\n\t/*::[*/0x00D0/*::]*/: { n:\"BrtEndPCDSConsol\" },\n\t/*::[*/0x00D1/*::]*/: { n:\"BrtBeginPCDSCPages\" },\n\t/*::[*/0x00D2/*::]*/: { n:\"BrtEndPCDSCPages\" },\n\t/*::[*/0x00D3/*::]*/: { n:\"BrtBeginPCDSCPage\" },\n\t/*::[*/0x00D4/*::]*/: { n:\"BrtEndPCDSCPage\" },\n\t/*::[*/0x00D5/*::]*/: { n:\"BrtBeginPCDSCPItem\" },\n\t/*::[*/0x00D6/*::]*/: { n:\"BrtEndPCDSCPItem\" },\n\t/*::[*/0x00D7/*::]*/: { n:\"BrtBeginPCDSCSets\" },\n\t/*::[*/0x00D8/*::]*/: { n:\"BrtEndPCDSCSets\" },\n\t/*::[*/0x00D9/*::]*/: { n:\"BrtBeginPCDSCSet\" },\n\t/*::[*/0x00DA/*::]*/: { n:\"BrtEndPCDSCSet\" },\n\t/*::[*/0x00DB/*::]*/: { n:\"BrtBeginPCDFGroup\" },\n\t/*::[*/0x00DC/*::]*/: { n:\"BrtEndPCDFGroup\" },\n\t/*::[*/0x00DD/*::]*/: { n:\"BrtBeginPCDFGItems\" },\n\t/*::[*/0x00DE/*::]*/: { n:\"BrtEndPCDFGItems\" },\n\t/*::[*/0x00DF/*::]*/: { n:\"BrtBeginPCDFGRange\" },\n\t/*::[*/0x00E0/*::]*/: { n:\"BrtEndPCDFGRange\" },\n\t/*::[*/0x00E1/*::]*/: { n:\"BrtBeginPCDFGDiscrete\" },\n\t/*::[*/0x00E2/*::]*/: { n:\"BrtEndPCDFGDiscrete\" },\n\t/*::[*/0x00E3/*::]*/: { n:\"BrtBeginPCDSDTupleCache\" },\n\t/*::[*/0x00E4/*::]*/: { n:\"BrtEndPCDSDTupleCache\" },\n\t/*::[*/0x00E5/*::]*/: { n:\"BrtBeginPCDSDTCEntries\" },\n\t/*::[*/0x00E6/*::]*/: { n:\"BrtEndPCDSDTCEntries\" },\n\t/*::[*/0x00E7/*::]*/: { n:\"BrtBeginPCDSDTCEMembers\" },\n\t/*::[*/0x00E8/*::]*/: { n:\"BrtEndPCDSDTCEMembers\" },\n\t/*::[*/0x00E9/*::]*/: { n:\"BrtBeginPCDSDTCEMember\" },\n\t/*::[*/0x00EA/*::]*/: { n:\"BrtEndPCDSDTCEMember\" },\n\t/*::[*/0x00EB/*::]*/: { n:\"BrtBeginPCDSDTCQueries\" },\n\t/*::[*/0x00EC/*::]*/: { n:\"BrtEndPCDSDTCQueries\" },\n\t/*::[*/0x00ED/*::]*/: { n:\"BrtBeginPCDSDTCQuery\" },\n\t/*::[*/0x00EE/*::]*/: { n:\"BrtEndPCDSDTCQuery\" },\n\t/*::[*/0x00EF/*::]*/: { n:\"BrtBeginPCDSDTCSets\" },\n\t/*::[*/0x00F0/*::]*/: { n:\"BrtEndPCDSDTCSets\" },\n\t/*::[*/0x00F1/*::]*/: { n:\"BrtBeginPCDSDTCSet\" },\n\t/*::[*/0x00F2/*::]*/: { n:\"BrtEndPCDSDTCSet\" },\n\t/*::[*/0x00F3/*::]*/: { n:\"BrtBeginPCDCalcItems\" },\n\t/*::[*/0x00F4/*::]*/: { n:\"BrtEndPCDCalcItems\" },\n\t/*::[*/0x00F5/*::]*/: { n:\"BrtBeginPCDCalcItem\" },\n\t/*::[*/0x00F6/*::]*/: { n:\"BrtEndPCDCalcItem\" },\n\t/*::[*/0x00F7/*::]*/: { n:\"BrtBeginPRule\" },\n\t/*::[*/0x00F8/*::]*/: { n:\"BrtEndPRule\" },\n\t/*::[*/0x00F9/*::]*/: { n:\"BrtBeginPRFilters\" },\n\t/*::[*/0x00FA/*::]*/: { n:\"BrtEndPRFilters\" },\n\t/*::[*/0x00FB/*::]*/: { n:\"BrtBeginPRFilter\" },\n\t/*::[*/0x00FC/*::]*/: { n:\"BrtEndPRFilter\" },\n\t/*::[*/0x00FD/*::]*/: { n:\"BrtBeginPNames\" },\n\t/*::[*/0x00FE/*::]*/: { n:\"BrtEndPNames\" },\n\t/*::[*/0x00FF/*::]*/: { n:\"BrtBeginPName\" },\n\t/*::[*/0x0100/*::]*/: { n:\"BrtEndPName\" },\n\t/*::[*/0x0101/*::]*/: { n:\"BrtBeginPNPairs\" },\n\t/*::[*/0x0102/*::]*/: { n:\"BrtEndPNPairs\" },\n\t/*::[*/0x0103/*::]*/: { n:\"BrtBeginPNPair\" },\n\t/*::[*/0x0104/*::]*/: { n:\"BrtEndPNPair\" },\n\t/*::[*/0x0105/*::]*/: { n:\"BrtBeginECWebProps\" },\n\t/*::[*/0x0106/*::]*/: { n:\"BrtEndECWebProps\" },\n\t/*::[*/0x0107/*::]*/: { n:\"BrtBeginEcWpTables\" },\n\t/*::[*/0x0108/*::]*/: { n:\"BrtEndECWPTables\" },\n\t/*::[*/0x0109/*::]*/: { n:\"BrtBeginECParams\" },\n\t/*::[*/0x010A/*::]*/: { n:\"BrtEndECParams\" },\n\t/*::[*/0x010B/*::]*/: { n:\"BrtBeginECParam\" },\n\t/*::[*/0x010C/*::]*/: { n:\"BrtEndECParam\" },\n\t/*::[*/0x010D/*::]*/: { n:\"BrtBeginPCDKPIs\" },\n\t/*::[*/0x010E/*::]*/: { n:\"BrtEndPCDKPIs\" },\n\t/*::[*/0x010F/*::]*/: { n:\"BrtBeginPCDKPI\" },\n\t/*::[*/0x0110/*::]*/: { n:\"BrtEndPCDKPI\" },\n\t/*::[*/0x0111/*::]*/: { n:\"BrtBeginDims\" },\n\t/*::[*/0x0112/*::]*/: { n:\"BrtEndDims\" },\n\t/*::[*/0x0113/*::]*/: { n:\"BrtBeginDim\" },\n\t/*::[*/0x0114/*::]*/: { n:\"BrtEndDim\" },\n\t/*::[*/0x0115/*::]*/: { n:\"BrtIndexPartEnd\" },\n\t/*::[*/0x0116/*::]*/: { n:\"BrtBeginStyleSheet\" },\n\t/*::[*/0x0117/*::]*/: { n:\"BrtEndStyleSheet\" },\n\t/*::[*/0x0118/*::]*/: { n:\"BrtBeginSXView\" },\n\t/*::[*/0x0119/*::]*/: { n:\"BrtEndSXVI\" },\n\t/*::[*/0x011A/*::]*/: { n:\"BrtBeginSXVI\" },\n\t/*::[*/0x011B/*::]*/: { n:\"BrtBeginSXVIs\" },\n\t/*::[*/0x011C/*::]*/: { n:\"BrtEndSXVIs\" },\n\t/*::[*/0x011D/*::]*/: { n:\"BrtBeginSXVD\" },\n\t/*::[*/0x011E/*::]*/: { n:\"BrtEndSXVD\" },\n\t/*::[*/0x011F/*::]*/: { n:\"BrtBeginSXVDs\" },\n\t/*::[*/0x0120/*::]*/: { n:\"BrtEndSXVDs\" },\n\t/*::[*/0x0121/*::]*/: { n:\"BrtBeginSXPI\" },\n\t/*::[*/0x0122/*::]*/: { n:\"BrtEndSXPI\" },\n\t/*::[*/0x0123/*::]*/: { n:\"BrtBeginSXPIs\" },\n\t/*::[*/0x0124/*::]*/: { n:\"BrtEndSXPIs\" },\n\t/*::[*/0x0125/*::]*/: { n:\"BrtBeginSXDI\" },\n\t/*::[*/0x0126/*::]*/: { n:\"BrtEndSXDI\" },\n\t/*::[*/0x0127/*::]*/: { n:\"BrtBeginSXDIs\" },\n\t/*::[*/0x0128/*::]*/: { n:\"BrtEndSXDIs\" },\n\t/*::[*/0x0129/*::]*/: { n:\"BrtBeginSXLI\" },\n\t/*::[*/0x012A/*::]*/: { n:\"BrtEndSXLI\" },\n\t/*::[*/0x012B/*::]*/: { n:\"BrtBeginSXLIRws\" },\n\t/*::[*/0x012C/*::]*/: { n:\"BrtEndSXLIRws\" },\n\t/*::[*/0x012D/*::]*/: { n:\"BrtBeginSXLICols\" },\n\t/*::[*/0x012E/*::]*/: { n:\"BrtEndSXLICols\" },\n\t/*::[*/0x012F/*::]*/: { n:\"BrtBeginSXFormat\" },\n\t/*::[*/0x0130/*::]*/: { n:\"BrtEndSXFormat\" },\n\t/*::[*/0x0131/*::]*/: { n:\"BrtBeginSXFormats\" },\n\t/*::[*/0x0132/*::]*/: { n:\"BrtEndSxFormats\" },\n\t/*::[*/0x0133/*::]*/: { n:\"BrtBeginSxSelect\" },\n\t/*::[*/0x0134/*::]*/: { n:\"BrtEndSxSelect\" },\n\t/*::[*/0x0135/*::]*/: { n:\"BrtBeginISXVDRws\" },\n\t/*::[*/0x0136/*::]*/: { n:\"BrtEndISXVDRws\" },\n\t/*::[*/0x0137/*::]*/: { n:\"BrtBeginISXVDCols\" },\n\t/*::[*/0x0138/*::]*/: { n:\"BrtEndISXVDCols\" },\n\t/*::[*/0x0139/*::]*/: { n:\"BrtEndSXLocation\" },\n\t/*::[*/0x013A/*::]*/: { n:\"BrtBeginSXLocation\" },\n\t/*::[*/0x013B/*::]*/: { n:\"BrtEndSXView\" },\n\t/*::[*/0x013C/*::]*/: { n:\"BrtBeginSXTHs\" },\n\t/*::[*/0x013D/*::]*/: { n:\"BrtEndSXTHs\" },\n\t/*::[*/0x013E/*::]*/: { n:\"BrtBeginSXTH\" },\n\t/*::[*/0x013F/*::]*/: { n:\"BrtEndSXTH\" },\n\t/*::[*/0x0140/*::]*/: { n:\"BrtBeginISXTHRws\" },\n\t/*::[*/0x0141/*::]*/: { n:\"BrtEndISXTHRws\" },\n\t/*::[*/0x0142/*::]*/: { n:\"BrtBeginISXTHCols\" },\n\t/*::[*/0x0143/*::]*/: { n:\"BrtEndISXTHCols\" },\n\t/*::[*/0x0144/*::]*/: { n:\"BrtBeginSXTDMPS\" },\n\t/*::[*/0x0145/*::]*/: { n:\"BrtEndSXTDMPs\" },\n\t/*::[*/0x0146/*::]*/: { n:\"BrtBeginSXTDMP\" },\n\t/*::[*/0x0147/*::]*/: { n:\"BrtEndSXTDMP\" },\n\t/*::[*/0x0148/*::]*/: { n:\"BrtBeginSXTHItems\" },\n\t/*::[*/0x0149/*::]*/: { n:\"BrtEndSXTHItems\" },\n\t/*::[*/0x014A/*::]*/: { n:\"BrtBeginSXTHItem\" },\n\t/*::[*/0x014B/*::]*/: { n:\"BrtEndSXTHItem\" },\n\t/*::[*/0x014C/*::]*/: { n:\"BrtBeginMetadata\" },\n\t/*::[*/0x014D/*::]*/: { n:\"BrtEndMetadata\" },\n\t/*::[*/0x014E/*::]*/: { n:\"BrtBeginEsmdtinfo\" },\n\t/*::[*/0x014F/*::]*/: { n:\"BrtMdtinfo\" },\n\t/*::[*/0x0150/*::]*/: { n:\"BrtEndEsmdtinfo\" },\n\t/*::[*/0x0151/*::]*/: { n:\"BrtBeginEsmdb\" },\n\t/*::[*/0x0152/*::]*/: { n:\"BrtEndEsmdb\" },\n\t/*::[*/0x0153/*::]*/: { n:\"BrtBeginEsfmd\" },\n\t/*::[*/0x0154/*::]*/: { n:\"BrtEndEsfmd\" },\n\t/*::[*/0x0155/*::]*/: { n:\"BrtBeginSingleCells\" },\n\t/*::[*/0x0156/*::]*/: { n:\"BrtEndSingleCells\" },\n\t/*::[*/0x0157/*::]*/: { n:\"BrtBeginList\" },\n\t/*::[*/0x0158/*::]*/: { n:\"BrtEndList\" },\n\t/*::[*/0x0159/*::]*/: { n:\"BrtBeginListCols\" },\n\t/*::[*/0x015A/*::]*/: { n:\"BrtEndListCols\" },\n\t/*::[*/0x015B/*::]*/: { n:\"BrtBeginListCol\" },\n\t/*::[*/0x015C/*::]*/: { n:\"BrtEndListCol\" },\n\t/*::[*/0x015D/*::]*/: { n:\"BrtBeginListXmlCPr\" },\n\t/*::[*/0x015E/*::]*/: { n:\"BrtEndListXmlCPr\" },\n\t/*::[*/0x015F/*::]*/: { n:\"BrtListCCFmla\" },\n\t/*::[*/0x0160/*::]*/: { n:\"BrtListTrFmla\" },\n\t/*::[*/0x0161/*::]*/: { n:\"BrtBeginExternals\" },\n\t/*::[*/0x0162/*::]*/: { n:\"BrtEndExternals\" },\n\t/*::[*/0x0163/*::]*/: { n:\"BrtSupBookSrc\", f:parse_RelID},\n\t/*::[*/0x0165/*::]*/: { n:\"BrtSupSelf\" },\n\t/*::[*/0x0166/*::]*/: { n:\"BrtSupSame\" },\n\t/*::[*/0x0167/*::]*/: { n:\"BrtSupTabs\" },\n\t/*::[*/0x0168/*::]*/: { n:\"BrtBeginSupBook\" },\n\t/*::[*/0x0169/*::]*/: { n:\"BrtPlaceholderName\" },\n\t/*::[*/0x016A/*::]*/: { n:\"BrtExternSheet\", f:parse_ExternSheet },\n\t/*::[*/0x016B/*::]*/: { n:\"BrtExternTableStart\" },\n\t/*::[*/0x016C/*::]*/: { n:\"BrtExternTableEnd\" },\n\t/*::[*/0x016E/*::]*/: { n:\"BrtExternRowHdr\" },\n\t/*::[*/0x016F/*::]*/: { n:\"BrtExternCellBlank\" },\n\t/*::[*/0x0170/*::]*/: { n:\"BrtExternCellReal\" },\n\t/*::[*/0x0171/*::]*/: { n:\"BrtExternCellBool\" },\n\t/*::[*/0x0172/*::]*/: { n:\"BrtExternCellError\" },\n\t/*::[*/0x0173/*::]*/: { n:\"BrtExternCellString\" },\n\t/*::[*/0x0174/*::]*/: { n:\"BrtBeginEsmdx\" },\n\t/*::[*/0x0175/*::]*/: { n:\"BrtEndEsmdx\" },\n\t/*::[*/0x0176/*::]*/: { n:\"BrtBeginMdxSet\" },\n\t/*::[*/0x0177/*::]*/: { n:\"BrtEndMdxSet\" },\n\t/*::[*/0x0178/*::]*/: { n:\"BrtBeginMdxMbrProp\" },\n\t/*::[*/0x0179/*::]*/: { n:\"BrtEndMdxMbrProp\" },\n\t/*::[*/0x017A/*::]*/: { n:\"BrtBeginMdxKPI\" },\n\t/*::[*/0x017B/*::]*/: { n:\"BrtEndMdxKPI\" },\n\t/*::[*/0x017C/*::]*/: { n:\"BrtBeginEsstr\" },\n\t/*::[*/0x017D/*::]*/: { n:\"BrtEndEsstr\" },\n\t/*::[*/0x017E/*::]*/: { n:\"BrtBeginPRFItem\" },\n\t/*::[*/0x017F/*::]*/: { n:\"BrtEndPRFItem\" },\n\t/*::[*/0x0180/*::]*/: { n:\"BrtBeginPivotCacheIDs\" },\n\t/*::[*/0x0181/*::]*/: { n:\"BrtEndPivotCacheIDs\" },\n\t/*::[*/0x0182/*::]*/: { n:\"BrtBeginPivotCacheID\" },\n\t/*::[*/0x0183/*::]*/: { n:\"BrtEndPivotCacheID\" },\n\t/*::[*/0x0184/*::]*/: { n:\"BrtBeginISXVIs\" },\n\t/*::[*/0x0185/*::]*/: { n:\"BrtEndISXVIs\" },\n\t/*::[*/0x0186/*::]*/: { n:\"BrtBeginColInfos\" },\n\t/*::[*/0x0187/*::]*/: { n:\"BrtEndColInfos\" },\n\t/*::[*/0x0188/*::]*/: { n:\"BrtBeginRwBrk\" },\n\t/*::[*/0x0189/*::]*/: { n:\"BrtEndRwBrk\" },\n\t/*::[*/0x018A/*::]*/: { n:\"BrtBeginColBrk\" },\n\t/*::[*/0x018B/*::]*/: { n:\"BrtEndColBrk\" },\n\t/*::[*/0x018C/*::]*/: { n:\"BrtBrk\" },\n\t/*::[*/0x018D/*::]*/: { n:\"BrtUserBookView\" },\n\t/*::[*/0x018E/*::]*/: { n:\"BrtInfo\" },\n\t/*::[*/0x018F/*::]*/: { n:\"BrtCUsr\" },\n\t/*::[*/0x0190/*::]*/: { n:\"BrtUsr\" },\n\t/*::[*/0x0191/*::]*/: { n:\"BrtBeginUsers\" },\n\t/*::[*/0x0193/*::]*/: { n:\"BrtEOF\" },\n\t/*::[*/0x0194/*::]*/: { n:\"BrtUCR\" },\n\t/*::[*/0x0195/*::]*/: { n:\"BrtRRInsDel\" },\n\t/*::[*/0x0196/*::]*/: { n:\"BrtRREndInsDel\" },\n\t/*::[*/0x0197/*::]*/: { n:\"BrtRRMove\" },\n\t/*::[*/0x0198/*::]*/: { n:\"BrtRREndMove\" },\n\t/*::[*/0x0199/*::]*/: { n:\"BrtRRChgCell\" },\n\t/*::[*/0x019A/*::]*/: { n:\"BrtRREndChgCell\" },\n\t/*::[*/0x019B/*::]*/: { n:\"BrtRRHeader\" },\n\t/*::[*/0x019C/*::]*/: { n:\"BrtRRUserView\" },\n\t/*::[*/0x019D/*::]*/: { n:\"BrtRRRenSheet\" },\n\t/*::[*/0x019E/*::]*/: { n:\"BrtRRInsertSh\" },\n\t/*::[*/0x019F/*::]*/: { n:\"BrtRRDefName\" },\n\t/*::[*/0x01A0/*::]*/: { n:\"BrtRRNote\" },\n\t/*::[*/0x01A1/*::]*/: { n:\"BrtRRConflict\" },\n\t/*::[*/0x01A2/*::]*/: { n:\"BrtRRTQSIF\" },\n\t/*::[*/0x01A3/*::]*/: { n:\"BrtRRFormat\" },\n\t/*::[*/0x01A4/*::]*/: { n:\"BrtRREndFormat\" },\n\t/*::[*/0x01A5/*::]*/: { n:\"BrtRRAutoFmt\" },\n\t/*::[*/0x01A6/*::]*/: { n:\"BrtBeginUserShViews\" },\n\t/*::[*/0x01A7/*::]*/: { n:\"BrtBeginUserShView\" },\n\t/*::[*/0x01A8/*::]*/: { n:\"BrtEndUserShView\" },\n\t/*::[*/0x01A9/*::]*/: { n:\"BrtEndUserShViews\" },\n\t/*::[*/0x01AA/*::]*/: { n:\"BrtArrFmla\", f:parse_BrtArrFmla },\n\t/*::[*/0x01AB/*::]*/: { n:\"BrtShrFmla\", f:parse_BrtShrFmla },\n\t/*::[*/0x01AC/*::]*/: { n:\"BrtTable\" },\n\t/*::[*/0x01AD/*::]*/: { n:\"BrtBeginExtConnections\" },\n\t/*::[*/0x01AE/*::]*/: { n:\"BrtEndExtConnections\" },\n\t/*::[*/0x01AF/*::]*/: { n:\"BrtBeginPCDCalcMems\" },\n\t/*::[*/0x01B0/*::]*/: { n:\"BrtEndPCDCalcMems\" },\n\t/*::[*/0x01B1/*::]*/: { n:\"BrtBeginPCDCalcMem\" },\n\t/*::[*/0x01B2/*::]*/: { n:\"BrtEndPCDCalcMem\" },\n\t/*::[*/0x01B3/*::]*/: { n:\"BrtBeginPCDHGLevels\" },\n\t/*::[*/0x01B4/*::]*/: { n:\"BrtEndPCDHGLevels\" },\n\t/*::[*/0x01B5/*::]*/: { n:\"BrtBeginPCDHGLevel\" },\n\t/*::[*/0x01B6/*::]*/: { n:\"BrtEndPCDHGLevel\" },\n\t/*::[*/0x01B7/*::]*/: { n:\"BrtBeginPCDHGLGroups\" },\n\t/*::[*/0x01B8/*::]*/: { n:\"BrtEndPCDHGLGroups\" },\n\t/*::[*/0x01B9/*::]*/: { n:\"BrtBeginPCDHGLGroup\" },\n\t/*::[*/0x01BA/*::]*/: { n:\"BrtEndPCDHGLGroup\" },\n\t/*::[*/0x01BB/*::]*/: { n:\"BrtBeginPCDHGLGMembers\" },\n\t/*::[*/0x01BC/*::]*/: { n:\"BrtEndPCDHGLGMembers\" },\n\t/*::[*/0x01BD/*::]*/: { n:\"BrtBeginPCDHGLGMember\" },\n\t/*::[*/0x01BE/*::]*/: { n:\"BrtEndPCDHGLGMember\" },\n\t/*::[*/0x01BF/*::]*/: { n:\"BrtBeginQSI\" },\n\t/*::[*/0x01C0/*::]*/: { n:\"BrtEndQSI\" },\n\t/*::[*/0x01C1/*::]*/: { n:\"BrtBeginQSIR\" },\n\t/*::[*/0x01C2/*::]*/: { n:\"BrtEndQSIR\" },\n\t/*::[*/0x01C3/*::]*/: { n:\"BrtBeginDeletedNames\" },\n\t/*::[*/0x01C4/*::]*/: { n:\"BrtEndDeletedNames\" },\n\t/*::[*/0x01C5/*::]*/: { n:\"BrtBeginDeletedName\" },\n\t/*::[*/0x01C6/*::]*/: { n:\"BrtEndDeletedName\" },\n\t/*::[*/0x01C7/*::]*/: { n:\"BrtBeginQSIFs\" },\n\t/*::[*/0x01C8/*::]*/: { n:\"BrtEndQSIFs\" },\n\t/*::[*/0x01C9/*::]*/: { n:\"BrtBeginQSIF\" },\n\t/*::[*/0x01CA/*::]*/: { n:\"BrtEndQSIF\" },\n\t/*::[*/0x01CB/*::]*/: { n:\"BrtBeginAutoSortScope\" },\n\t/*::[*/0x01CC/*::]*/: { n:\"BrtEndAutoSortScope\" },\n\t/*::[*/0x01CD/*::]*/: { n:\"BrtBeginConditionalFormatting\" },\n\t/*::[*/0x01CE/*::]*/: { n:\"BrtEndConditionalFormatting\" },\n\t/*::[*/0x01CF/*::]*/: { n:\"BrtBeginCFRule\" },\n\t/*::[*/0x01D0/*::]*/: { n:\"BrtEndCFRule\" },\n\t/*::[*/0x01D1/*::]*/: { n:\"BrtBeginIconSet\" },\n\t/*::[*/0x01D2/*::]*/: { n:\"BrtEndIconSet\" },\n\t/*::[*/0x01D3/*::]*/: { n:\"BrtBeginDatabar\" },\n\t/*::[*/0x01D4/*::]*/: { n:\"BrtEndDatabar\" },\n\t/*::[*/0x01D5/*::]*/: { n:\"BrtBeginColorScale\" },\n\t/*::[*/0x01D6/*::]*/: { n:\"BrtEndColorScale\" },\n\t/*::[*/0x01D7/*::]*/: { n:\"BrtCFVO\" },\n\t/*::[*/0x01D8/*::]*/: { n:\"BrtExternValueMeta\" },\n\t/*::[*/0x01D9/*::]*/: { n:\"BrtBeginColorPalette\" },\n\t/*::[*/0x01DA/*::]*/: { n:\"BrtEndColorPalette\" },\n\t/*::[*/0x01DB/*::]*/: { n:\"BrtIndexedColor\" },\n\t/*::[*/0x01DC/*::]*/: { n:\"BrtMargins\", f:parse_BrtMargins },\n\t/*::[*/0x01DD/*::]*/: { n:\"BrtPrintOptions\" },\n\t/*::[*/0x01DE/*::]*/: { n:\"BrtPageSetup\" },\n\t/*::[*/0x01DF/*::]*/: { n:\"BrtBeginHeaderFooter\" },\n\t/*::[*/0x01E0/*::]*/: { n:\"BrtEndHeaderFooter\" },\n\t/*::[*/0x01E1/*::]*/: { n:\"BrtBeginSXCrtFormat\" },\n\t/*::[*/0x01E2/*::]*/: { n:\"BrtEndSXCrtFormat\" },\n\t/*::[*/0x01E3/*::]*/: { n:\"BrtBeginSXCrtFormats\" },\n\t/*::[*/0x01E4/*::]*/: { n:\"BrtEndSXCrtFormats\" },\n\t/*::[*/0x01E5/*::]*/: { n:\"BrtWsFmtInfo\", f:parse_BrtWsFmtInfo },\n\t/*::[*/0x01E6/*::]*/: { n:\"BrtBeginMgs\" },\n\t/*::[*/0x01E7/*::]*/: { n:\"BrtEndMGs\" },\n\t/*::[*/0x01E8/*::]*/: { n:\"BrtBeginMGMaps\" },\n\t/*::[*/0x01E9/*::]*/: { n:\"BrtEndMGMaps\" },\n\t/*::[*/0x01EA/*::]*/: { n:\"BrtBeginMG\" },\n\t/*::[*/0x01EB/*::]*/: { n:\"BrtEndMG\" },\n\t/*::[*/0x01EC/*::]*/: { n:\"BrtBeginMap\" },\n\t/*::[*/0x01ED/*::]*/: { n:\"BrtEndMap\" },\n\t/*::[*/0x01EE/*::]*/: { n:\"BrtHLink\", f:parse_BrtHLink },\n\t/*::[*/0x01EF/*::]*/: { n:\"BrtBeginDCon\" },\n\t/*::[*/0x01F0/*::]*/: { n:\"BrtEndDCon\" },\n\t/*::[*/0x01F1/*::]*/: { n:\"BrtBeginDRefs\" },\n\t/*::[*/0x01F2/*::]*/: { n:\"BrtEndDRefs\" },\n\t/*::[*/0x01F3/*::]*/: { n:\"BrtDRef\" },\n\t/*::[*/0x01F4/*::]*/: { n:\"BrtBeginScenMan\" },\n\t/*::[*/0x01F5/*::]*/: { n:\"BrtEndScenMan\" },\n\t/*::[*/0x01F6/*::]*/: { n:\"BrtBeginSct\" },\n\t/*::[*/0x01F7/*::]*/: { n:\"BrtEndSct\" },\n\t/*::[*/0x01F8/*::]*/: { n:\"BrtSlc\" },\n\t/*::[*/0x01F9/*::]*/: { n:\"BrtBeginDXFs\" },\n\t/*::[*/0x01FA/*::]*/: { n:\"BrtEndDXFs\" },\n\t/*::[*/0x01FB/*::]*/: { n:\"BrtDXF\" },\n\t/*::[*/0x01FC/*::]*/: { n:\"BrtBeginTableStyles\" },\n\t/*::[*/0x01FD/*::]*/: { n:\"BrtEndTableStyles\" },\n\t/*::[*/0x01FE/*::]*/: { n:\"BrtBeginTableStyle\" },\n\t/*::[*/0x01FF/*::]*/: { n:\"BrtEndTableStyle\" },\n\t/*::[*/0x0200/*::]*/: { n:\"BrtTableStyleElement\" },\n\t/*::[*/0x0201/*::]*/: { n:\"BrtTableStyleClient\" },\n\t/*::[*/0x0202/*::]*/: { n:\"BrtBeginVolDeps\" },\n\t/*::[*/0x0203/*::]*/: { n:\"BrtEndVolDeps\" },\n\t/*::[*/0x0204/*::]*/: { n:\"BrtBeginVolType\" },\n\t/*::[*/0x0205/*::]*/: { n:\"BrtEndVolType\" },\n\t/*::[*/0x0206/*::]*/: { n:\"BrtBeginVolMain\" },\n\t/*::[*/0x0207/*::]*/: { n:\"BrtEndVolMain\" },\n\t/*::[*/0x0208/*::]*/: { n:\"BrtBeginVolTopic\" },\n\t/*::[*/0x0209/*::]*/: { n:\"BrtEndVolTopic\" },\n\t/*::[*/0x020A/*::]*/: { n:\"BrtVolSubtopic\" },\n\t/*::[*/0x020B/*::]*/: { n:\"BrtVolRef\" },\n\t/*::[*/0x020C/*::]*/: { n:\"BrtVolNum\" },\n\t/*::[*/0x020D/*::]*/: { n:\"BrtVolErr\" },\n\t/*::[*/0x020E/*::]*/: { n:\"BrtVolStr\" },\n\t/*::[*/0x020F/*::]*/: { n:\"BrtVolBool\" },\n\t/*::[*/0x0210/*::]*/: { n:\"BrtBeginCalcChain$\" },\n\t/*::[*/0x0211/*::]*/: { n:\"BrtEndCalcChain$\" },\n\t/*::[*/0x0212/*::]*/: { n:\"BrtBeginSortState\" },\n\t/*::[*/0x0213/*::]*/: { n:\"BrtEndSortState\" },\n\t/*::[*/0x0214/*::]*/: { n:\"BrtBeginSortCond\" },\n\t/*::[*/0x0215/*::]*/: { n:\"BrtEndSortCond\" },\n\t/*::[*/0x0216/*::]*/: { n:\"BrtBookProtection\" },\n\t/*::[*/0x0217/*::]*/: { n:\"BrtSheetProtection\" },\n\t/*::[*/0x0218/*::]*/: { n:\"BrtRangeProtection\" },\n\t/*::[*/0x0219/*::]*/: { n:\"BrtPhoneticInfo\" },\n\t/*::[*/0x021A/*::]*/: { n:\"BrtBeginECTxtWiz\" },\n\t/*::[*/0x021B/*::]*/: { n:\"BrtEndECTxtWiz\" },\n\t/*::[*/0x021C/*::]*/: { n:\"BrtBeginECTWFldInfoLst\" },\n\t/*::[*/0x021D/*::]*/: { n:\"BrtEndECTWFldInfoLst\" },\n\t/*::[*/0x021E/*::]*/: { n:\"BrtBeginECTwFldInfo\" },\n\t/*::[*/0x0224/*::]*/: { n:\"BrtFileSharing\" },\n\t/*::[*/0x0225/*::]*/: { n:\"BrtOleSize\" },\n\t/*::[*/0x0226/*::]*/: { n:\"BrtDrawing\", f:parse_RelID },\n\t/*::[*/0x0227/*::]*/: { n:\"BrtLegacyDrawing\" },\n\t/*::[*/0x0228/*::]*/: { n:\"BrtLegacyDrawingHF\" },\n\t/*::[*/0x0229/*::]*/: { n:\"BrtWebOpt\" },\n\t/*::[*/0x022A/*::]*/: { n:\"BrtBeginWebPubItems\" },\n\t/*::[*/0x022B/*::]*/: { n:\"BrtEndWebPubItems\" },\n\t/*::[*/0x022C/*::]*/: { n:\"BrtBeginWebPubItem\" },\n\t/*::[*/0x022D/*::]*/: { n:\"BrtEndWebPubItem\" },\n\t/*::[*/0x022E/*::]*/: { n:\"BrtBeginSXCondFmt\" },\n\t/*::[*/0x022F/*::]*/: { n:\"BrtEndSXCondFmt\" },\n\t/*::[*/0x0230/*::]*/: { n:\"BrtBeginSXCondFmts\" },\n\t/*::[*/0x0231/*::]*/: { n:\"BrtEndSXCondFmts\" },\n\t/*::[*/0x0232/*::]*/: { n:\"BrtBkHim\" },\n\t/*::[*/0x0234/*::]*/: { n:\"BrtColor\" },\n\t/*::[*/0x0235/*::]*/: { n:\"BrtBeginIndexedColors\" },\n\t/*::[*/0x0236/*::]*/: { n:\"BrtEndIndexedColors\" },\n\t/*::[*/0x0239/*::]*/: { n:\"BrtBeginMRUColors\" },\n\t/*::[*/0x023A/*::]*/: { n:\"BrtEndMRUColors\" },\n\t/*::[*/0x023C/*::]*/: { n:\"BrtMRUColor\" },\n\t/*::[*/0x023D/*::]*/: { n:\"BrtBeginDVals\" },\n\t/*::[*/0x023E/*::]*/: { n:\"BrtEndDVals\" },\n\t/*::[*/0x0241/*::]*/: { n:\"BrtSupNameStart\" },\n\t/*::[*/0x0242/*::]*/: { n:\"BrtSupNameValueStart\" },\n\t/*::[*/0x0243/*::]*/: { n:\"BrtSupNameValueEnd\" },\n\t/*::[*/0x0244/*::]*/: { n:\"BrtSupNameNum\" },\n\t/*::[*/0x0245/*::]*/: { n:\"BrtSupNameErr\" },\n\t/*::[*/0x0246/*::]*/: { n:\"BrtSupNameSt\" },\n\t/*::[*/0x0247/*::]*/: { n:\"BrtSupNameNil\" },\n\t/*::[*/0x0248/*::]*/: { n:\"BrtSupNameBool\" },\n\t/*::[*/0x0249/*::]*/: { n:\"BrtSupNameFmla\" },\n\t/*::[*/0x024A/*::]*/: { n:\"BrtSupNameBits\" },\n\t/*::[*/0x024B/*::]*/: { n:\"BrtSupNameEnd\" },\n\t/*::[*/0x024C/*::]*/: { n:\"BrtEndSupBook\" },\n\t/*::[*/0x024D/*::]*/: { n:\"BrtCellSmartTagProperty\" },\n\t/*::[*/0x024E/*::]*/: { n:\"BrtBeginCellSmartTag\" },\n\t/*::[*/0x024F/*::]*/: { n:\"BrtEndCellSmartTag\" },\n\t/*::[*/0x0250/*::]*/: { n:\"BrtBeginCellSmartTags\" },\n\t/*::[*/0x0251/*::]*/: { n:\"BrtEndCellSmartTags\" },\n\t/*::[*/0x0252/*::]*/: { n:\"BrtBeginSmartTags\" },\n\t/*::[*/0x0253/*::]*/: { n:\"BrtEndSmartTags\" },\n\t/*::[*/0x0254/*::]*/: { n:\"BrtSmartTagType\" },\n\t/*::[*/0x0255/*::]*/: { n:\"BrtBeginSmartTagTypes\" },\n\t/*::[*/0x0256/*::]*/: { n:\"BrtEndSmartTagTypes\" },\n\t/*::[*/0x0257/*::]*/: { n:\"BrtBeginSXFilters\" },\n\t/*::[*/0x0258/*::]*/: { n:\"BrtEndSXFilters\" },\n\t/*::[*/0x0259/*::]*/: { n:\"BrtBeginSXFILTER\" },\n\t/*::[*/0x025A/*::]*/: { n:\"BrtEndSXFilter\" },\n\t/*::[*/0x025B/*::]*/: { n:\"BrtBeginFills\" },\n\t/*::[*/0x025C/*::]*/: { n:\"BrtEndFills\" },\n\t/*::[*/0x025D/*::]*/: { n:\"BrtBeginCellWatches\" },\n\t/*::[*/0x025E/*::]*/: { n:\"BrtEndCellWatches\" },\n\t/*::[*/0x025F/*::]*/: { n:\"BrtCellWatch\" },\n\t/*::[*/0x0260/*::]*/: { n:\"BrtBeginCRErrs\" },\n\t/*::[*/0x0261/*::]*/: { n:\"BrtEndCRErrs\" },\n\t/*::[*/0x0262/*::]*/: { n:\"BrtCrashRecErr\" },\n\t/*::[*/0x0263/*::]*/: { n:\"BrtBeginFonts\" },\n\t/*::[*/0x0264/*::]*/: { n:\"BrtEndFonts\" },\n\t/*::[*/0x0265/*::]*/: { n:\"BrtBeginBorders\" },\n\t/*::[*/0x0266/*::]*/: { n:\"BrtEndBorders\" },\n\t/*::[*/0x0267/*::]*/: { n:\"BrtBeginFmts\" },\n\t/*::[*/0x0268/*::]*/: { n:\"BrtEndFmts\" },\n\t/*::[*/0x0269/*::]*/: { n:\"BrtBeginCellXFs\" },\n\t/*::[*/0x026A/*::]*/: { n:\"BrtEndCellXFs\" },\n\t/*::[*/0x026B/*::]*/: { n:\"BrtBeginStyles\" },\n\t/*::[*/0x026C/*::]*/: { n:\"BrtEndStyles\" },\n\t/*::[*/0x0271/*::]*/: { n:\"BrtBigName\" },\n\t/*::[*/0x0272/*::]*/: { n:\"BrtBeginCellStyleXFs\" },\n\t/*::[*/0x0273/*::]*/: { n:\"BrtEndCellStyleXFs\" },\n\t/*::[*/0x0274/*::]*/: { n:\"BrtBeginComments\" },\n\t/*::[*/0x0275/*::]*/: { n:\"BrtEndComments\" },\n\t/*::[*/0x0276/*::]*/: { n:\"BrtBeginCommentAuthors\" },\n\t/*::[*/0x0277/*::]*/: { n:\"BrtEndCommentAuthors\" },\n\t/*::[*/0x0278/*::]*/: { n:\"BrtCommentAuthor\", f:parse_BrtCommentAuthor },\n\t/*::[*/0x0279/*::]*/: { n:\"BrtBeginCommentList\" },\n\t/*::[*/0x027A/*::]*/: { n:\"BrtEndCommentList\" },\n\t/*::[*/0x027B/*::]*/: { n:\"BrtBeginComment\", f:parse_BrtBeginComment},\n\t/*::[*/0x027C/*::]*/: { n:\"BrtEndComment\" },\n\t/*::[*/0x027D/*::]*/: { n:\"BrtCommentText\", f:parse_BrtCommentText },\n\t/*::[*/0x027E/*::]*/: { n:\"BrtBeginOleObjects\" },\n\t/*::[*/0x027F/*::]*/: { n:\"BrtOleObject\" },\n\t/*::[*/0x0280/*::]*/: { n:\"BrtEndOleObjects\" },\n\t/*::[*/0x0281/*::]*/: { n:\"BrtBeginSxrules\" },\n\t/*::[*/0x0282/*::]*/: { n:\"BrtEndSxRules\" },\n\t/*::[*/0x0283/*::]*/: { n:\"BrtBeginActiveXControls\" },\n\t/*::[*/0x0284/*::]*/: { n:\"BrtActiveX\" },\n\t/*::[*/0x0285/*::]*/: { n:\"BrtEndActiveXControls\" },\n\t/*::[*/0x0286/*::]*/: { n:\"BrtBeginPCDSDTCEMembersSortBy\" },\n\t/*::[*/0x0288/*::]*/: { n:\"BrtBeginCellIgnoreECs\" },\n\t/*::[*/0x0289/*::]*/: { n:\"BrtCellIgnoreEC\" },\n\t/*::[*/0x028A/*::]*/: { n:\"BrtEndCellIgnoreECs\" },\n\t/*::[*/0x028B/*::]*/: { n:\"BrtCsProp\", f:parse_BrtCsProp },\n\t/*::[*/0x028C/*::]*/: { n:\"BrtCsPageSetup\" },\n\t/*::[*/0x028D/*::]*/: { n:\"BrtBeginUserCsViews\" },\n\t/*::[*/0x028E/*::]*/: { n:\"BrtEndUserCsViews\" },\n\t/*::[*/0x028F/*::]*/: { n:\"BrtBeginUserCsView\" },\n\t/*::[*/0x0290/*::]*/: { n:\"BrtEndUserCsView\" },\n\t/*::[*/0x0291/*::]*/: { n:\"BrtBeginPcdSFCIEntries\" },\n\t/*::[*/0x0292/*::]*/: { n:\"BrtEndPCDSFCIEntries\" },\n\t/*::[*/0x0293/*::]*/: { n:\"BrtPCDSFCIEntry\" },\n\t/*::[*/0x0294/*::]*/: { n:\"BrtBeginListParts\" },\n\t/*::[*/0x0295/*::]*/: { n:\"BrtListPart\" },\n\t/*::[*/0x0296/*::]*/: { n:\"BrtEndListParts\" },\n\t/*::[*/0x0297/*::]*/: { n:\"BrtSheetCalcProp\" },\n\t/*::[*/0x0298/*::]*/: { n:\"BrtBeginFnGroup\" },\n\t/*::[*/0x0299/*::]*/: { n:\"BrtFnGroup\" },\n\t/*::[*/0x029A/*::]*/: { n:\"BrtEndFnGroup\" },\n\t/*::[*/0x029B/*::]*/: { n:\"BrtSupAddin\" },\n\t/*::[*/0x029C/*::]*/: { n:\"BrtSXTDMPOrder\" },\n\t/*::[*/0x029D/*::]*/: { n:\"BrtCsProtection\" },\n\t/*::[*/0x029F/*::]*/: { n:\"BrtBeginWsSortMap\" },\n\t/*::[*/0x02A0/*::]*/: { n:\"BrtEndWsSortMap\" },\n\t/*::[*/0x02A1/*::]*/: { n:\"BrtBeginRRSort\" },\n\t/*::[*/0x02A2/*::]*/: { n:\"BrtEndRRSort\" },\n\t/*::[*/0x02A3/*::]*/: { n:\"BrtRRSortItem\" },\n\t/*::[*/0x02A4/*::]*/: { n:\"BrtFileSharingIso\" },\n\t/*::[*/0x02A5/*::]*/: { n:\"BrtBookProtectionIso\" },\n\t/*::[*/0x02A6/*::]*/: { n:\"BrtSheetProtectionIso\" },\n\t/*::[*/0x02A7/*::]*/: { n:\"BrtCsProtectionIso\" },\n\t/*::[*/0x02A8/*::]*/: { n:\"BrtRangeProtectionIso\" },\n\t/*::[*/0x02A9/*::]*/: { n:\"BrtDValList\" },\n\t/*::[*/0x0400/*::]*/: { n:\"BrtRwDescent\" },\n\t/*::[*/0x0401/*::]*/: { n:\"BrtKnownFonts\" },\n\t/*::[*/0x0402/*::]*/: { n:\"BrtBeginSXTupleSet\" },\n\t/*::[*/0x0403/*::]*/: { n:\"BrtEndSXTupleSet\" },\n\t/*::[*/0x0404/*::]*/: { n:\"BrtBeginSXTupleSetHeader\" },\n\t/*::[*/0x0405/*::]*/: { n:\"BrtEndSXTupleSetHeader\" },\n\t/*::[*/0x0406/*::]*/: { n:\"BrtSXTupleSetHeaderItem\" },\n\t/*::[*/0x0407/*::]*/: { n:\"BrtBeginSXTupleSetData\" },\n\t/*::[*/0x0408/*::]*/: { n:\"BrtEndSXTupleSetData\" },\n\t/*::[*/0x0409/*::]*/: { n:\"BrtBeginSXTupleSetRow\" },\n\t/*::[*/0x040A/*::]*/: { n:\"BrtEndSXTupleSetRow\" },\n\t/*::[*/0x040B/*::]*/: { n:\"BrtSXTupleSetRowItem\" },\n\t/*::[*/0x040C/*::]*/: { n:\"BrtNameExt\" },\n\t/*::[*/0x040D/*::]*/: { n:\"BrtPCDH14\" },\n\t/*::[*/0x040E/*::]*/: { n:\"BrtBeginPCDCalcMem14\" },\n\t/*::[*/0x040F/*::]*/: { n:\"BrtEndPCDCalcMem14\" },\n\t/*::[*/0x0410/*::]*/: { n:\"BrtSXTH14\" },\n\t/*::[*/0x0411/*::]*/: { n:\"BrtBeginSparklineGroup\" },\n\t/*::[*/0x0412/*::]*/: { n:\"BrtEndSparklineGroup\" },\n\t/*::[*/0x0413/*::]*/: { n:\"BrtSparkline\" },\n\t/*::[*/0x0414/*::]*/: { n:\"BrtSXDI14\" },\n\t/*::[*/0x0415/*::]*/: { n:\"BrtWsFmtInfoEx14\" },\n\t/*::[*/0x0416/*::]*/: { n:\"BrtBeginConditionalFormatting14\" },\n\t/*::[*/0x0417/*::]*/: { n:\"BrtEndConditionalFormatting14\" },\n\t/*::[*/0x0418/*::]*/: { n:\"BrtBeginCFRule14\" },\n\t/*::[*/0x0419/*::]*/: { n:\"BrtEndCFRule14\" },\n\t/*::[*/0x041A/*::]*/: { n:\"BrtCFVO14\" },\n\t/*::[*/0x041B/*::]*/: { n:\"BrtBeginDatabar14\" },\n\t/*::[*/0x041C/*::]*/: { n:\"BrtBeginIconSet14\" },\n\t/*::[*/0x041D/*::]*/: { n:\"BrtDVal14\", f: parse_BrtDVal14 },\n\t/*::[*/0x041E/*::]*/: { n:\"BrtBeginDVals14\" },\n\t/*::[*/0x041F/*::]*/: { n:\"BrtColor14\" },\n\t/*::[*/0x0420/*::]*/: { n:\"BrtBeginSparklines\" },\n\t/*::[*/0x0421/*::]*/: { n:\"BrtEndSparklines\" },\n\t/*::[*/0x0422/*::]*/: { n:\"BrtBeginSparklineGroups\" },\n\t/*::[*/0x0423/*::]*/: { n:\"BrtEndSparklineGroups\" },\n\t/*::[*/0x0425/*::]*/: { n:\"BrtSXVD14\" },\n\t/*::[*/0x0426/*::]*/: { n:\"BrtBeginSXView14\" },\n\t/*::[*/0x0427/*::]*/: { n:\"BrtEndSXView14\" },\n\t/*::[*/0x0428/*::]*/: { n:\"BrtBeginSXView16\" },\n\t/*::[*/0x0429/*::]*/: { n:\"BrtEndSXView16\" },\n\t/*::[*/0x042A/*::]*/: { n:\"BrtBeginPCD14\" },\n\t/*::[*/0x042B/*::]*/: { n:\"BrtEndPCD14\" },\n\t/*::[*/0x042C/*::]*/: { n:\"BrtBeginExtConn14\" },\n\t/*::[*/0x042D/*::]*/: { n:\"BrtEndExtConn14\" },\n\t/*::[*/0x042E/*::]*/: { n:\"BrtBeginSlicerCacheIDs\" },\n\t/*::[*/0x042F/*::]*/: { n:\"BrtEndSlicerCacheIDs\" },\n\t/*::[*/0x0430/*::]*/: { n:\"BrtBeginSlicerCacheID\" },\n\t/*::[*/0x0431/*::]*/: { n:\"BrtEndSlicerCacheID\" },\n\t/*::[*/0x0433/*::]*/: { n:\"BrtBeginSlicerCache\" },\n\t/*::[*/0x0434/*::]*/: { n:\"BrtEndSlicerCache\" },\n\t/*::[*/0x0435/*::]*/: { n:\"BrtBeginSlicerCacheDef\" },\n\t/*::[*/0x0436/*::]*/: { n:\"BrtEndSlicerCacheDef\" },\n\t/*::[*/0x0437/*::]*/: { n:\"BrtBeginSlicersEx\" },\n\t/*::[*/0x0438/*::]*/: { n:\"BrtEndSlicersEx\" },\n\t/*::[*/0x0439/*::]*/: { n:\"BrtBeginSlicerEx\" },\n\t/*::[*/0x043A/*::]*/: { n:\"BrtEndSlicerEx\" },\n\t/*::[*/0x043B/*::]*/: { n:\"BrtBeginSlicer\" },\n\t/*::[*/0x043C/*::]*/: { n:\"BrtEndSlicer\" },\n\t/*::[*/0x043D/*::]*/: { n:\"BrtSlicerCachePivotTables\" },\n\t/*::[*/0x043E/*::]*/: { n:\"BrtBeginSlicerCacheOlapImpl\" },\n\t/*::[*/0x043F/*::]*/: { n:\"BrtEndSlicerCacheOlapImpl\" },\n\t/*::[*/0x0440/*::]*/: { n:\"BrtBeginSlicerCacheLevelsData\" },\n\t/*::[*/0x0441/*::]*/: { n:\"BrtEndSlicerCacheLevelsData\" },\n\t/*::[*/0x0442/*::]*/: { n:\"BrtBeginSlicerCacheLevelData\" },\n\t/*::[*/0x0443/*::]*/: { n:\"BrtEndSlicerCacheLevelData\" },\n\t/*::[*/0x0444/*::]*/: { n:\"BrtBeginSlicerCacheSiRanges\" },\n\t/*::[*/0x0445/*::]*/: { n:\"BrtEndSlicerCacheSiRanges\" },\n\t/*::[*/0x0446/*::]*/: { n:\"BrtBeginSlicerCacheSiRange\" },\n\t/*::[*/0x0447/*::]*/: { n:\"BrtEndSlicerCacheSiRange\" },\n\t/*::[*/0x0448/*::]*/: { n:\"BrtSlicerCacheOlapItem\" },\n\t/*::[*/0x0449/*::]*/: { n:\"BrtBeginSlicerCacheSelections\" },\n\t/*::[*/0x044A/*::]*/: { n:\"BrtSlicerCacheSelection\" },\n\t/*::[*/0x044B/*::]*/: { n:\"BrtEndSlicerCacheSelections\" },\n\t/*::[*/0x044C/*::]*/: { n:\"BrtBeginSlicerCacheNative\" },\n\t/*::[*/0x044D/*::]*/: { n:\"BrtEndSlicerCacheNative\" },\n\t/*::[*/0x044E/*::]*/: { n:\"BrtSlicerCacheNativeItem\" },\n\t/*::[*/0x044F/*::]*/: { n:\"BrtRangeProtection14\" },\n\t/*::[*/0x0450/*::]*/: { n:\"BrtRangeProtectionIso14\" },\n\t/*::[*/0x0451/*::]*/: { n:\"BrtCellIgnoreEC14\" },\n\t/*::[*/0x0457/*::]*/: { n:\"BrtList14\" },\n\t/*::[*/0x0458/*::]*/: { n:\"BrtCFIcon\" },\n\t/*::[*/0x0459/*::]*/: { n:\"BrtBeginSlicerCachesPivotCacheIDs\" },\n\t/*::[*/0x045A/*::]*/: { n:\"BrtEndSlicerCachesPivotCacheIDs\" },\n\t/*::[*/0x045B/*::]*/: { n:\"BrtBeginSlicers\" },\n\t/*::[*/0x045C/*::]*/: { n:\"BrtEndSlicers\" },\n\t/*::[*/0x045D/*::]*/: { n:\"BrtWbProp14\" },\n\t/*::[*/0x045E/*::]*/: { n:\"BrtBeginSXEdit\" },\n\t/*::[*/0x045F/*::]*/: { n:\"BrtEndSXEdit\" },\n\t/*::[*/0x0460/*::]*/: { n:\"BrtBeginSXEdits\" },\n\t/*::[*/0x0461/*::]*/: { n:\"BrtEndSXEdits\" },\n\t/*::[*/0x0462/*::]*/: { n:\"BrtBeginSXChange\" },\n\t/*::[*/0x0463/*::]*/: { n:\"BrtEndSXChange\" },\n\t/*::[*/0x0464/*::]*/: { n:\"BrtBeginSXChanges\" },\n\t/*::[*/0x0465/*::]*/: { n:\"BrtEndSXChanges\" },\n\t/*::[*/0x0466/*::]*/: { n:\"BrtSXTupleItems\" },\n\t/*::[*/0x0468/*::]*/: { n:\"BrtBeginSlicerStyle\" },\n\t/*::[*/0x0469/*::]*/: { n:\"BrtEndSlicerStyle\" },\n\t/*::[*/0x046A/*::]*/: { n:\"BrtSlicerStyleElement\" },\n\t/*::[*/0x046B/*::]*/: { n:\"BrtBeginStyleSheetExt14\" },\n\t/*::[*/0x046C/*::]*/: { n:\"BrtEndStyleSheetExt14\" },\n\t/*::[*/0x046D/*::]*/: { n:\"BrtBeginSlicerCachesPivotCacheID\" },\n\t/*::[*/0x046E/*::]*/: { n:\"BrtEndSlicerCachesPivotCacheID\" },\n\t/*::[*/0x046F/*::]*/: { n:\"BrtBeginConditionalFormattings\" },\n\t/*::[*/0x0470/*::]*/: { n:\"BrtEndConditionalFormattings\" },\n\t/*::[*/0x0471/*::]*/: { n:\"BrtBeginPCDCalcMemExt\" },\n\t/*::[*/0x0472/*::]*/: { n:\"BrtEndPCDCalcMemExt\" },\n\t/*::[*/0x0473/*::]*/: { n:\"BrtBeginPCDCalcMemsExt\" },\n\t/*::[*/0x0474/*::]*/: { n:\"BrtEndPCDCalcMemsExt\" },\n\t/*::[*/0x0475/*::]*/: { n:\"BrtPCDField14\" },\n\t/*::[*/0x0476/*::]*/: { n:\"BrtBeginSlicerStyles\" },\n\t/*::[*/0x0477/*::]*/: { n:\"BrtEndSlicerStyles\" },\n\t/*::[*/0x0478/*::]*/: { n:\"BrtBeginSlicerStyleElements\" },\n\t/*::[*/0x0479/*::]*/: { n:\"BrtEndSlicerStyleElements\" },\n\t/*::[*/0x047A/*::]*/: { n:\"BrtCFRuleExt\" },\n\t/*::[*/0x047B/*::]*/: { n:\"BrtBeginSXCondFmt14\" },\n\t/*::[*/0x047C/*::]*/: { n:\"BrtEndSXCondFmt14\" },\n\t/*::[*/0x047D/*::]*/: { n:\"BrtBeginSXCondFmts14\" },\n\t/*::[*/0x047E/*::]*/: { n:\"BrtEndSXCondFmts14\" },\n\t/*::[*/0x0480/*::]*/: { n:\"BrtBeginSortCond14\" },\n\t/*::[*/0x0481/*::]*/: { n:\"BrtEndSortCond14\" },\n\t/*::[*/0x0482/*::]*/: { n:\"BrtEndDVals14\" },\n\t/*::[*/0x0483/*::]*/: { n:\"BrtEndIconSet14\" },\n\t/*::[*/0x0484/*::]*/: { n:\"BrtEndDatabar14\" },\n\t/*::[*/0x0485/*::]*/: { n:\"BrtBeginColorScale14\" },\n\t/*::[*/0x0486/*::]*/: { n:\"BrtEndColorScale14\" },\n\t/*::[*/0x0487/*::]*/: { n:\"BrtBeginSxrules14\" },\n\t/*::[*/0x0488/*::]*/: { n:\"BrtEndSxrules14\" },\n\t/*::[*/0x0489/*::]*/: { n:\"BrtBeginPRule14\" },\n\t/*::[*/0x048A/*::]*/: { n:\"BrtEndPRule14\" },\n\t/*::[*/0x048B/*::]*/: { n:\"BrtBeginPRFilters14\" },\n\t/*::[*/0x048C/*::]*/: { n:\"BrtEndPRFilters14\" },\n\t/*::[*/0x048D/*::]*/: { n:\"BrtBeginPRFilter14\" },\n\t/*::[*/0x048E/*::]*/: { n:\"BrtEndPRFilter14\" },\n\t/*::[*/0x048F/*::]*/: { n:\"BrtBeginPRFItem14\" },\n\t/*::[*/0x0490/*::]*/: { n:\"BrtEndPRFItem14\" },\n\t/*::[*/0x0491/*::]*/: { n:\"BrtBeginCellIgnoreECs14\" },\n\t/*::[*/0x0492/*::]*/: { n:\"BrtEndCellIgnoreECs14\" },\n\t/*::[*/0x0493/*::]*/: { n:\"BrtDxf14\" },\n\t/*::[*/0x0494/*::]*/: { n:\"BrtBeginDxF14s\" },\n\t/*::[*/0x0495/*::]*/: { n:\"BrtEndDxf14s\" },\n\t/*::[*/0x0499/*::]*/: { n:\"BrtFilter14\" },\n\t/*::[*/0x049A/*::]*/: { n:\"BrtBeginCustomFilters14\" },\n\t/*::[*/0x049C/*::]*/: { n:\"BrtCustomFilter14\" },\n\t/*::[*/0x049D/*::]*/: { n:\"BrtIconFilter14\" },\n\t/*::[*/0x049E/*::]*/: { n:\"BrtPivotCacheConnectionName\" },\n\t/*::[*/0x0800/*::]*/: { n:\"BrtBeginDecoupledPivotCacheIDs\" },\n\t/*::[*/0x0801/*::]*/: { n:\"BrtEndDecoupledPivotCacheIDs\" },\n\t/*::[*/0x0802/*::]*/: { n:\"BrtDecoupledPivotCacheID\" },\n\t/*::[*/0x0803/*::]*/: { n:\"BrtBeginPivotTableRefs\" },\n\t/*::[*/0x0804/*::]*/: { n:\"BrtEndPivotTableRefs\" },\n\t/*::[*/0x0805/*::]*/: { n:\"BrtPivotTableRef\" },\n\t/*::[*/0x0806/*::]*/: { n:\"BrtSlicerCacheBookPivotTables\" },\n\t/*::[*/0x0807/*::]*/: { n:\"BrtBeginSxvcells\" },\n\t/*::[*/0x0808/*::]*/: { n:\"BrtEndSxvcells\" },\n\t/*::[*/0x0809/*::]*/: { n:\"BrtBeginSxRow\" },\n\t/*::[*/0x080A/*::]*/: { n:\"BrtEndSxRow\" },\n\t/*::[*/0x080C/*::]*/: { n:\"BrtPcdCalcMem15\" },\n\t/*::[*/0x0813/*::]*/: { n:\"BrtQsi15\" },\n\t/*::[*/0x0814/*::]*/: { n:\"BrtBeginWebExtensions\" },\n\t/*::[*/0x0815/*::]*/: { n:\"BrtEndWebExtensions\" },\n\t/*::[*/0x0816/*::]*/: { n:\"BrtWebExtension\" },\n\t/*::[*/0x0817/*::]*/: { n:\"BrtAbsPath15\" },\n\t/*::[*/0x0818/*::]*/: { n:\"BrtBeginPivotTableUISettings\" },\n\t/*::[*/0x0819/*::]*/: { n:\"BrtEndPivotTableUISettings\" },\n\t/*::[*/0x081B/*::]*/: { n:\"BrtTableSlicerCacheIDs\" },\n\t/*::[*/0x081C/*::]*/: { n:\"BrtTableSlicerCacheID\" },\n\t/*::[*/0x081D/*::]*/: { n:\"BrtBeginTableSlicerCache\" },\n\t/*::[*/0x081E/*::]*/: { n:\"BrtEndTableSlicerCache\" },\n\t/*::[*/0x081F/*::]*/: { n:\"BrtSxFilter15\" },\n\t/*::[*/0x0820/*::]*/: { n:\"BrtBeginTimelineCachePivotCacheIDs\" },\n\t/*::[*/0x0821/*::]*/: { n:\"BrtEndTimelineCachePivotCacheIDs\" },\n\t/*::[*/0x0822/*::]*/: { n:\"BrtTimelineCachePivotCacheID\" },\n\t/*::[*/0x0823/*::]*/: { n:\"BrtBeginTimelineCacheIDs\" },\n\t/*::[*/0x0824/*::]*/: { n:\"BrtEndTimelineCacheIDs\" },\n\t/*::[*/0x0825/*::]*/: { n:\"BrtBeginTimelineCacheID\" },\n\t/*::[*/0x0826/*::]*/: { n:\"BrtEndTimelineCacheID\" },\n\t/*::[*/0x0827/*::]*/: { n:\"BrtBeginTimelinesEx\" },\n\t/*::[*/0x0828/*::]*/: { n:\"BrtEndTimelinesEx\" },\n\t/*::[*/0x0829/*::]*/: { n:\"BrtBeginTimelineEx\" },\n\t/*::[*/0x082A/*::]*/: { n:\"BrtEndTimelineEx\" },\n\t/*::[*/0x082B/*::]*/: { n:\"BrtWorkBookPr15\" },\n\t/*::[*/0x082C/*::]*/: { n:\"BrtPCDH15\" },\n\t/*::[*/0x082D/*::]*/: { n:\"BrtBeginTimelineStyle\" },\n\t/*::[*/0x082E/*::]*/: { n:\"BrtEndTimelineStyle\" },\n\t/*::[*/0x082F/*::]*/: { n:\"BrtTimelineStyleElement\" },\n\t/*::[*/0x0830/*::]*/: { n:\"BrtBeginTimelineStylesheetExt15\" },\n\t/*::[*/0x0831/*::]*/: { n:\"BrtEndTimelineStylesheetExt15\" },\n\t/*::[*/0x0832/*::]*/: { n:\"BrtBeginTimelineStyles\" },\n\t/*::[*/0x0833/*::]*/: { n:\"BrtEndTimelineStyles\" },\n\t/*::[*/0x0834/*::]*/: { n:\"BrtBeginTimelineStyleElements\" },\n\t/*::[*/0x0835/*::]*/: { n:\"BrtEndTimelineStyleElements\" },\n\t/*::[*/0x0836/*::]*/: { n:\"BrtDxf15\" },\n\t/*::[*/0x0837/*::]*/: { n:\"BrtBeginDxfs15\" },\n\t/*::[*/0x0838/*::]*/: { n:\"brtEndDxfs15\" },\n\t/*::[*/0x0839/*::]*/: { n:\"BrtSlicerCacheHideItemsWithNoData\" },\n\t/*::[*/0x083A/*::]*/: { n:\"BrtBeginItemUniqueNames\" },\n\t/*::[*/0x083B/*::]*/: { n:\"BrtEndItemUniqueNames\" },\n\t/*::[*/0x083C/*::]*/: { n:\"BrtItemUniqueName\" },\n\t/*::[*/0x083D/*::]*/: { n:\"BrtBeginExtConn15\" },\n\t/*::[*/0x083E/*::]*/: { n:\"BrtEndExtConn15\" },\n\t/*::[*/0x083F/*::]*/: { n:\"BrtBeginOledbPr15\" },\n\t/*::[*/0x0840/*::]*/: { n:\"BrtEndOledbPr15\" },\n\t/*::[*/0x0841/*::]*/: { n:\"BrtBeginDataFeedPr15\" },\n\t/*::[*/0x0842/*::]*/: { n:\"BrtEndDataFeedPr15\" },\n\t/*::[*/0x0843/*::]*/: { n:\"BrtTextPr15\" },\n\t/*::[*/0x0844/*::]*/: { n:\"BrtRangePr15\" },\n\t/*::[*/0x0845/*::]*/: { n:\"BrtDbCommand15\" },\n\t/*::[*/0x0846/*::]*/: { n:\"BrtBeginDbTables15\" },\n\t/*::[*/0x0847/*::]*/: { n:\"BrtEndDbTables15\" },\n\t/*::[*/0x0848/*::]*/: { n:\"BrtDbTable15\" },\n\t/*::[*/0x0849/*::]*/: { n:\"BrtBeginDataModel\" },\n\t/*::[*/0x084A/*::]*/: { n:\"BrtEndDataModel\" },\n\t/*::[*/0x084B/*::]*/: { n:\"BrtBeginModelTables\" },\n\t/*::[*/0x084C/*::]*/: { n:\"BrtEndModelTables\" },\n\t/*::[*/0x084D/*::]*/: { n:\"BrtModelTable\" },\n\t/*::[*/0x084E/*::]*/: { n:\"BrtBeginModelRelationships\" },\n\t/*::[*/0x084F/*::]*/: { n:\"BrtEndModelRelationships\" },\n\t/*::[*/0x0850/*::]*/: { n:\"BrtModelRelationship\" },\n\t/*::[*/0x0851/*::]*/: { n:\"BrtBeginECTxtWiz15\" },\n\t/*::[*/0x0852/*::]*/: { n:\"BrtEndECTxtWiz15\" },\n\t/*::[*/0x0853/*::]*/: { n:\"BrtBeginECTWFldInfoLst15\" },\n\t/*::[*/0x0854/*::]*/: { n:\"BrtEndECTWFldInfoLst15\" },\n\t/*::[*/0x0855/*::]*/: { n:\"BrtBeginECTWFldInfo15\" },\n\t/*::[*/0x0856/*::]*/: { n:\"BrtFieldListActiveItem\" },\n\t/*::[*/0x0857/*::]*/: { n:\"BrtPivotCacheIdVersion\" },\n\t/*::[*/0x0858/*::]*/: { n:\"BrtSXDI15\" },\n\t/*::[*/0x0859/*::]*/: { n:\"BrtBeginModelTimeGroupings\" },\n\t/*::[*/0x085A/*::]*/: { n:\"BrtEndModelTimeGroupings\" },\n\t/*::[*/0x085B/*::]*/: { n:\"BrtBeginModelTimeGrouping\" },\n\t/*::[*/0x085C/*::]*/: { n:\"BrtEndModelTimeGrouping\" },\n\t/*::[*/0x085D/*::]*/: { n:\"BrtModelTimeGroupingCalcCol\" },\n\t/*::[*/0x0C00/*::]*/: { n:\"BrtUid\" },\n\t/*::[*/0x0C01/*::]*/: { n:\"BrtRevisionPtr\" },\n\t/*::[*/0x13e7/*::]*/: { n:\"BrtBeginCalcFeatures\" },\n\t/*::[*/0x13e8/*::]*/: { n:\"BrtEndCalcFeatures\" },\n\t/*::[*/0x13e9/*::]*/: { n:\"BrtCalcFeature\" },\n\t/*::[*/0xFFFF/*::]*/: { n:\"\" }\n};\n\nvar XLSBRE = evert_key(XLSBRecordEnum, 'n');\nXLSBRE[\"BrtFRTArchID$\"] = 0x0010;\n\n/* [MS-XLS] 2.3 Record Enumeration */\nvar XLSRecordEnum = {\n\t/*::[*/0x0003/*::]*/: { n:\"BIFF2NUM\", f:parse_BIFF2NUM },\n\t/*::[*/0x0004/*::]*/: { n:\"BIFF2STR\", f:parse_BIFF2STR },\n\t/*::[*/0x0006/*::]*/: { n:\"Formula\", f:parse_Formula },\n\t/*::[*/0x0009/*::]*/: { n:'BOF', f:parse_BOF },\n\t/*::[*/0x000a/*::]*/: { n:'EOF', f:parsenoop2 },\n\t/*::[*/0x000c/*::]*/: { n:\"CalcCount\", f:parseuint16 },\n\t/*::[*/0x000d/*::]*/: { n:\"CalcMode\", f:parseuint16 },\n\t/*::[*/0x000e/*::]*/: { n:\"CalcPrecision\", f:parsebool },\n\t/*::[*/0x000f/*::]*/: { n:\"CalcRefMode\", f:parsebool },\n\t/*::[*/0x0010/*::]*/: { n:\"CalcDelta\", f:parse_Xnum },\n\t/*::[*/0x0011/*::]*/: { n:\"CalcIter\", f:parsebool },\n\t/*::[*/0x0012/*::]*/: { n:\"Protect\", f:parsebool },\n\t/*::[*/0x0013/*::]*/: { n:\"Password\", f:parseuint16 },\n\t/*::[*/0x0014/*::]*/: { n:\"Header\", f:parse_XLHeaderFooter },\n\t/*::[*/0x0015/*::]*/: { n:\"Footer\", f:parse_XLHeaderFooter },\n\t/*::[*/0x0017/*::]*/: { n:\"ExternSheet\", f:parse_ExternSheet },\n\t/*::[*/0x0018/*::]*/: { n:\"Lbl\", f:parse_Lbl },\n\t/*::[*/0x0019/*::]*/: { n:\"WinProtect\", f:parsebool },\n\t/*::[*/0x001a/*::]*/: { n:\"VerticalPageBreaks\" },\n\t/*::[*/0x001b/*::]*/: { n:\"HorizontalPageBreaks\" },\n\t/*::[*/0x001c/*::]*/: { n:\"Note\", f:parse_Note },\n\t/*::[*/0x001d/*::]*/: { n:\"Selection\" },\n\t/*::[*/0x0022/*::]*/: { n:\"Date1904\", f:parsebool },\n\t/*::[*/0x0023/*::]*/: { n:\"ExternName\", f:parse_ExternName },\n\t/*::[*/0x0024/*::]*/: { n:\"COLWIDTH\" },\n\t/*::[*/0x0026/*::]*/: { n:\"LeftMargin\", f:parse_Xnum },\n\t/*::[*/0x0027/*::]*/: { n:\"RightMargin\", f:parse_Xnum },\n\t/*::[*/0x0028/*::]*/: { n:\"TopMargin\", f:parse_Xnum },\n\t/*::[*/0x0029/*::]*/: { n:\"BottomMargin\", f:parse_Xnum },\n\t/*::[*/0x002a/*::]*/: { n:\"PrintRowCol\", f:parsebool },\n\t/*::[*/0x002b/*::]*/: { n:\"PrintGrid\", f:parsebool },\n\t/*::[*/0x002f/*::]*/: { n:\"FilePass\", f:parse_FilePass },\n\t/*::[*/0x0031/*::]*/: { n:\"Font\", f:parse_Font },\n\t/*::[*/0x0033/*::]*/: { n:\"PrintSize\", f:parseuint16 },\n\t/*::[*/0x003c/*::]*/: { n:\"Continue\" },\n\t/*::[*/0x003d/*::]*/: { n:\"Window1\", f:parse_Window1 },\n\t/*::[*/0x0040/*::]*/: { n:\"Backup\", f:parsebool },\n\t/*::[*/0x0041/*::]*/: { n:\"Pane\", f:parse_Pane },\n\t/*::[*/0x0042/*::]*/: { n:'CodePage', f:parseuint16 },\n\t/*::[*/0x004d/*::]*/: { n:\"Pls\" },\n\t/*::[*/0x0050/*::]*/: { n:\"DCon\" },\n\t/*::[*/0x0051/*::]*/: { n:\"DConRef\" },\n\t/*::[*/0x0052/*::]*/: { n:\"DConName\" },\n\t/*::[*/0x0055/*::]*/: { n:\"DefColWidth\", f:parseuint16 },\n\t/*::[*/0x0059/*::]*/: { n:\"XCT\" },\n\t/*::[*/0x005a/*::]*/: { n:\"CRN\" },\n\t/*::[*/0x005b/*::]*/: { n:\"FileSharing\" },\n\t/*::[*/0x005c/*::]*/: { n:'WriteAccess', f:parse_WriteAccess },\n\t/*::[*/0x005d/*::]*/: { n:\"Obj\", f:parse_Obj },\n\t/*::[*/0x005e/*::]*/: { n:\"Uncalced\" },\n\t/*::[*/0x005f/*::]*/: { n:\"CalcSaveRecalc\", f:parsebool },\n\t/*::[*/0x0060/*::]*/: { n:\"Template\" },\n\t/*::[*/0x0061/*::]*/: { n:\"Intl\" },\n\t/*::[*/0x0063/*::]*/: { n:\"ObjProtect\", f:parsebool },\n\t/*::[*/0x007d/*::]*/: { n:\"ColInfo\", f:parse_ColInfo },\n\t/*::[*/0x0080/*::]*/: { n:\"Guts\", f:parse_Guts },\n\t/*::[*/0x0081/*::]*/: { n:\"WsBool\", f:parse_WsBool },\n\t/*::[*/0x0082/*::]*/: { n:\"GridSet\", f:parseuint16 },\n\t/*::[*/0x0083/*::]*/: { n:\"HCenter\", f:parsebool },\n\t/*::[*/0x0084/*::]*/: { n:\"VCenter\", f:parsebool },\n\t/*::[*/0x0085/*::]*/: { n:'BoundSheet8', f:parse_BoundSheet8 },\n\t/*::[*/0x0086/*::]*/: { n:\"WriteProtect\" },\n\t/*::[*/0x008c/*::]*/: { n:\"Country\", f:parse_Country },\n\t/*::[*/0x008d/*::]*/: { n:\"HideObj\", f:parseuint16 },\n\t/*::[*/0x0090/*::]*/: { n:\"Sort\" },\n\t/*::[*/0x0092/*::]*/: { n:\"Palette\", f:parse_Palette },\n\t/*::[*/0x0097/*::]*/: { n:\"Sync\" },\n\t/*::[*/0x0098/*::]*/: { n:\"LPr\" },\n\t/*::[*/0x0099/*::]*/: { n:\"DxGCol\" },\n\t/*::[*/0x009a/*::]*/: { n:\"FnGroupName\" },\n\t/*::[*/0x009b/*::]*/: { n:\"FilterMode\" },\n\t/*::[*/0x009c/*::]*/: { n:\"BuiltInFnGroupCount\", f:parseuint16 },\n\t/*::[*/0x009d/*::]*/: { n:\"AutoFilterInfo\" },\n\t/*::[*/0x009e/*::]*/: { n:\"AutoFilter\" },\n\t/*::[*/0x00a0/*::]*/: { n:\"Scl\", f:parse_Scl },\n\t/*::[*/0x00a1/*::]*/: { n:\"Setup\", f:parse_Setup },\n\t/*::[*/0x00ae/*::]*/: { n:\"ScenMan\" },\n\t/*::[*/0x00af/*::]*/: { n:\"SCENARIO\" },\n\t/*::[*/0x00b0/*::]*/: { n:\"SxView\" },\n\t/*::[*/0x00b1/*::]*/: { n:\"Sxvd\" },\n\t/*::[*/0x00b2/*::]*/: { n:\"SXVI\" },\n\t/*::[*/0x00b4/*::]*/: { n:\"SxIvd\" },\n\t/*::[*/0x00b5/*::]*/: { n:\"SXLI\" },\n\t/*::[*/0x00b6/*::]*/: { n:\"SXPI\" },\n\t/*::[*/0x00b8/*::]*/: { n:\"DocRoute\" },\n\t/*::[*/0x00b9/*::]*/: { n:\"RecipName\" },\n\t/*::[*/0x00bd/*::]*/: { n:\"MulRk\", f:parse_MulRk },\n\t/*::[*/0x00be/*::]*/: { n:\"MulBlank\", f:parse_MulBlank },\n\t/*::[*/0x00c1/*::]*/: { n:'Mms', f:parsenoop2 },\n\t/*::[*/0x00c5/*::]*/: { n:\"SXDI\" },\n\t/*::[*/0x00c6/*::]*/: { n:\"SXDB\" },\n\t/*::[*/0x00c7/*::]*/: { n:\"SXFDB\" },\n\t/*::[*/0x00c8/*::]*/: { n:\"SXDBB\" },\n\t/*::[*/0x00c9/*::]*/: { n:\"SXNum\" },\n\t/*::[*/0x00ca/*::]*/: { n:\"SxBool\", f:parsebool },\n\t/*::[*/0x00cb/*::]*/: { n:\"SxErr\" },\n\t/*::[*/0x00cc/*::]*/: { n:\"SXInt\" },\n\t/*::[*/0x00cd/*::]*/: { n:\"SXString\" },\n\t/*::[*/0x00ce/*::]*/: { n:\"SXDtr\" },\n\t/*::[*/0x00cf/*::]*/: { n:\"SxNil\" },\n\t/*::[*/0x00d0/*::]*/: { n:\"SXTbl\" },\n\t/*::[*/0x00d1/*::]*/: { n:\"SXTBRGIITM\" },\n\t/*::[*/0x00d2/*::]*/: { n:\"SxTbpg\" },\n\t/*::[*/0x00d3/*::]*/: { n:\"ObProj\" },\n\t/*::[*/0x00d5/*::]*/: { n:\"SXStreamID\" },\n\t/*::[*/0x00d7/*::]*/: { n:\"DBCell\" },\n\t/*::[*/0x00d8/*::]*/: { n:\"SXRng\" },\n\t/*::[*/0x00d9/*::]*/: { n:\"SxIsxoper\" },\n\t/*::[*/0x00da/*::]*/: { n:\"BookBool\", f:parseuint16 },\n\t/*::[*/0x00dc/*::]*/: { n:\"DbOrParamQry\" },\n\t/*::[*/0x00dd/*::]*/: { n:\"ScenarioProtect\", f:parsebool },\n\t/*::[*/0x00de/*::]*/: { n:\"OleObjectSize\" },\n\t/*::[*/0x00e0/*::]*/: { n:\"XF\", f:parse_XF },\n\t/*::[*/0x00e1/*::]*/: { n:'InterfaceHdr', f:parse_InterfaceHdr },\n\t/*::[*/0x00e2/*::]*/: { n:'InterfaceEnd', f:parsenoop2 },\n\t/*::[*/0x00e3/*::]*/: { n:\"SXVS\" },\n\t/*::[*/0x00e5/*::]*/: { n:\"MergeCells\", f:parse_MergeCells },\n\t/*::[*/0x00e9/*::]*/: { n:\"BkHim\" },\n\t/*::[*/0x00eb/*::]*/: { n:\"MsoDrawingGroup\" },\n\t/*::[*/0x00ec/*::]*/: { n:\"MsoDrawing\" },\n\t/*::[*/0x00ed/*::]*/: { n:\"MsoDrawingSelection\" },\n\t/*::[*/0x00ef/*::]*/: { n:\"PhoneticInfo\" },\n\t/*::[*/0x00f0/*::]*/: { n:\"SxRule\" },\n\t/*::[*/0x00f1/*::]*/: { n:\"SXEx\" },\n\t/*::[*/0x00f2/*::]*/: { n:\"SxFilt\" },\n\t/*::[*/0x00f4/*::]*/: { n:\"SxDXF\" },\n\t/*::[*/0x00f5/*::]*/: { n:\"SxItm\" },\n\t/*::[*/0x00f6/*::]*/: { n:\"SxName\" },\n\t/*::[*/0x00f7/*::]*/: { n:\"SxSelect\" },\n\t/*::[*/0x00f8/*::]*/: { n:\"SXPair\" },\n\t/*::[*/0x00f9/*::]*/: { n:\"SxFmla\" },\n\t/*::[*/0x00fb/*::]*/: { n:\"SxFormat\" },\n\t/*::[*/0x00fc/*::]*/: { n:\"SST\", f:parse_SST },\n\t/*::[*/0x00fd/*::]*/: { n:\"LabelSst\", f:parse_LabelSst },\n\t/*::[*/0x00ff/*::]*/: { n:\"ExtSST\", f:parse_ExtSST },\n\t/*::[*/0x0100/*::]*/: { n:\"SXVDEx\" },\n\t/*::[*/0x0103/*::]*/: { n:\"SXFormula\" },\n\t/*::[*/0x0122/*::]*/: { n:\"SXDBEx\" },\n\t/*::[*/0x0137/*::]*/: { n:\"RRDInsDel\" },\n\t/*::[*/0x0138/*::]*/: { n:\"RRDHead\" },\n\t/*::[*/0x013b/*::]*/: { n:\"RRDChgCell\" },\n\t/*::[*/0x013d/*::]*/: { n:\"RRTabId\", f:parseuint16a },\n\t/*::[*/0x013e/*::]*/: { n:\"RRDRenSheet\" },\n\t/*::[*/0x013f/*::]*/: { n:\"RRSort\" },\n\t/*::[*/0x0140/*::]*/: { n:\"RRDMove\" },\n\t/*::[*/0x014a/*::]*/: { n:\"RRFormat\" },\n\t/*::[*/0x014b/*::]*/: { n:\"RRAutoFmt\" },\n\t/*::[*/0x014d/*::]*/: { n:\"RRInsertSh\" },\n\t/*::[*/0x014e/*::]*/: { n:\"RRDMoveBegin\" },\n\t/*::[*/0x014f/*::]*/: { n:\"RRDMoveEnd\" },\n\t/*::[*/0x0150/*::]*/: { n:\"RRDInsDelBegin\" },\n\t/*::[*/0x0151/*::]*/: { n:\"RRDInsDelEnd\" },\n\t/*::[*/0x0152/*::]*/: { n:\"RRDConflict\" },\n\t/*::[*/0x0153/*::]*/: { n:\"RRDDefName\" },\n\t/*::[*/0x0154/*::]*/: { n:\"RRDRstEtxp\" },\n\t/*::[*/0x015f/*::]*/: { n:\"LRng\" },\n\t/*::[*/0x0160/*::]*/: { n:\"UsesELFs\", f:parsebool },\n\t/*::[*/0x0161/*::]*/: { n:\"DSF\", f:parsenoop2 },\n\t/*::[*/0x0191/*::]*/: { n:\"CUsr\" },\n\t/*::[*/0x0192/*::]*/: { n:\"CbUsr\" },\n\t/*::[*/0x0193/*::]*/: { n:\"UsrInfo\" },\n\t/*::[*/0x0194/*::]*/: { n:\"UsrExcl\" },\n\t/*::[*/0x0195/*::]*/: { n:\"FileLock\" },\n\t/*::[*/0x0196/*::]*/: { n:\"RRDInfo\" },\n\t/*::[*/0x0197/*::]*/: { n:\"BCUsrs\" },\n\t/*::[*/0x0198/*::]*/: { n:\"UsrChk\" },\n\t/*::[*/0x01a9/*::]*/: { n:\"UserBView\" },\n\t/*::[*/0x01aa/*::]*/: { n:\"UserSViewBegin\" },\n\t/*::[*/0x01ab/*::]*/: { n:\"UserSViewEnd\" },\n\t/*::[*/0x01ac/*::]*/: { n:\"RRDUserView\" },\n\t/*::[*/0x01ad/*::]*/: { n:\"Qsi\" },\n\t/*::[*/0x01ae/*::]*/: { n:\"SupBook\", f:parse_SupBook },\n\t/*::[*/0x01af/*::]*/: { n:\"Prot4Rev\", f:parsebool },\n\t/*::[*/0x01b0/*::]*/: { n:\"CondFmt\" },\n\t/*::[*/0x01b1/*::]*/: { n:\"CF\" },\n\t/*::[*/0x01b2/*::]*/: { n:\"DVal\" },\n\t/*::[*/0x01b5/*::]*/: { n:\"DConBin\" },\n\t/*::[*/0x01b6/*::]*/: { n:\"TxO\", f:parse_TxO },\n\t/*::[*/0x01b7/*::]*/: { n:\"RefreshAll\", f:parsebool },\n\t/*::[*/0x01b8/*::]*/: { n:\"HLink\", f:parse_HLink },\n\t/*::[*/0x01b9/*::]*/: { n:\"Lel\" },\n\t/*::[*/0x01ba/*::]*/: { n:\"CodeName\", f:parse_XLUnicodeString },\n\t/*::[*/0x01bb/*::]*/: { n:\"SXFDBType\" },\n\t/*::[*/0x01bc/*::]*/: { n:\"Prot4RevPass\", f:parseuint16 },\n\t/*::[*/0x01bd/*::]*/: { n:\"ObNoMacros\" },\n\t/*::[*/0x01be/*::]*/: { n:\"Dv\" },\n\t/*::[*/0x01c0/*::]*/: { n:\"Excel9File\", f:parsenoop2 },\n\t/*::[*/0x01c1/*::]*/: { n:\"RecalcId\", f:parse_RecalcId, r:2},\n\t/*::[*/0x01c2/*::]*/: { n:\"EntExU2\", f:parsenoop2 },\n\t/*::[*/0x0200/*::]*/: { n:\"Dimensions\", f:parse_Dimensions },\n\t/*::[*/0x0201/*::]*/: { n:\"Blank\", f:parse_Blank },\n\t/*::[*/0x0203/*::]*/: { n:\"Number\", f:parse_Number },\n\t/*::[*/0x0204/*::]*/: { n:\"Label\", f:parse_Label },\n\t/*::[*/0x0205/*::]*/: { n:\"BoolErr\", f:parse_BoolErr },\n\t/*::[*/0x0206/*::]*/: { n:\"Formula\", f:parse_Formula },\n\t/*::[*/0x0207/*::]*/: { n:\"String\", f:parse_String },\n\t/*::[*/0x0208/*::]*/: { n:'Row', f:parse_Row },\n\t/*::[*/0x020b/*::]*/: { n:\"Index\" },\n\t/*::[*/0x0221/*::]*/: { n:\"Array\", f:parse_Array },\n\t/*::[*/0x0225/*::]*/: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n\t/*::[*/0x0236/*::]*/: { n:\"Table\" },\n\t/*::[*/0x023e/*::]*/: { n:\"Window2\", f:parse_Window2 },\n\t/*::[*/0x027e/*::]*/: { n:\"RK\", f:parse_RK },\n\t/*::[*/0x0293/*::]*/: { n:\"Style\" },\n\t/*::[*/0x0406/*::]*/: { n:\"Formula\", f:parse_Formula },\n\t/*::[*/0x0418/*::]*/: { n:\"BigName\" },\n\t/*::[*/0x041e/*::]*/: { n:\"Format\", f:parse_Format },\n\t/*::[*/0x043c/*::]*/: { n:\"ContinueBigName\" },\n\t/*::[*/0x04bc/*::]*/: { n:\"ShrFmla\", f:parse_ShrFmla },\n\t/*::[*/0x0800/*::]*/: { n:\"HLinkTooltip\", f:parse_HLinkTooltip },\n\t/*::[*/0x0801/*::]*/: { n:\"WebPub\" },\n\t/*::[*/0x0802/*::]*/: { n:\"QsiSXTag\" },\n\t/*::[*/0x0803/*::]*/: { n:\"DBQueryExt\" },\n\t/*::[*/0x0804/*::]*/: { n:\"ExtString\" },\n\t/*::[*/0x0805/*::]*/: { n:\"TxtQry\" },\n\t/*::[*/0x0806/*::]*/: { n:\"Qsir\" },\n\t/*::[*/0x0807/*::]*/: { n:\"Qsif\" },\n\t/*::[*/0x0808/*::]*/: { n:\"RRDTQSIF\" },\n\t/*::[*/0x0809/*::]*/: { n:'BOF', f:parse_BOF },\n\t/*::[*/0x080a/*::]*/: { n:\"OleDbConn\" },\n\t/*::[*/0x080b/*::]*/: { n:\"WOpt\" },\n\t/*::[*/0x080c/*::]*/: { n:\"SXViewEx\" },\n\t/*::[*/0x080d/*::]*/: { n:\"SXTH\" },\n\t/*::[*/0x080e/*::]*/: { n:\"SXPIEx\" },\n\t/*::[*/0x080f/*::]*/: { n:\"SXVDTEx\" },\n\t/*::[*/0x0810/*::]*/: { n:\"SXViewEx9\" },\n\t/*::[*/0x0812/*::]*/: { n:\"ContinueFrt\" },\n\t/*::[*/0x0813/*::]*/: { n:\"RealTimeData\" },\n\t/*::[*/0x0850/*::]*/: { n:\"ChartFrtInfo\" },\n\t/*::[*/0x0851/*::]*/: { n:\"FrtWrapper\" },\n\t/*::[*/0x0852/*::]*/: { n:\"StartBlock\" },\n\t/*::[*/0x0853/*::]*/: { n:\"EndBlock\" },\n\t/*::[*/0x0854/*::]*/: { n:\"StartObject\" },\n\t/*::[*/0x0855/*::]*/: { n:\"EndObject\" },\n\t/*::[*/0x0856/*::]*/: { n:\"CatLab\" },\n\t/*::[*/0x0857/*::]*/: { n:\"YMult\" },\n\t/*::[*/0x0858/*::]*/: { n:\"SXViewLink\" },\n\t/*::[*/0x0859/*::]*/: { n:\"PivotChartBits\" },\n\t/*::[*/0x085a/*::]*/: { n:\"FrtFontList\" },\n\t/*::[*/0x0862/*::]*/: { n:\"SheetExt\" },\n\t/*::[*/0x0863/*::]*/: { n:\"BookExt\", r:12},\n\t/*::[*/0x0864/*::]*/: { n:\"SXAddl\" },\n\t/*::[*/0x0865/*::]*/: { n:\"CrErr\" },\n\t/*::[*/0x0866/*::]*/: { n:\"HFPicture\" },\n\t/*::[*/0x0867/*::]*/: { n:'FeatHdr', f:parsenoop2 },\n\t/*::[*/0x0868/*::]*/: { n:\"Feat\" },\n\t/*::[*/0x086a/*::]*/: { n:\"DataLabExt\" },\n\t/*::[*/0x086b/*::]*/: { n:\"DataLabExtContents\" },\n\t/*::[*/0x086c/*::]*/: { n:\"CellWatch\" },\n\t/*::[*/0x0871/*::]*/: { n:\"FeatHdr11\" },\n\t/*::[*/0x0872/*::]*/: { n:\"Feature11\" },\n\t/*::[*/0x0874/*::]*/: { n:\"DropDownObjIds\" },\n\t/*::[*/0x0875/*::]*/: { n:\"ContinueFrt11\" },\n\t/*::[*/0x0876/*::]*/: { n:\"DConn\" },\n\t/*::[*/0x0877/*::]*/: { n:\"List12\" },\n\t/*::[*/0x0878/*::]*/: { n:\"Feature12\" },\n\t/*::[*/0x0879/*::]*/: { n:\"CondFmt12\" },\n\t/*::[*/0x087a/*::]*/: { n:\"CF12\" },\n\t/*::[*/0x087b/*::]*/: { n:\"CFEx\" },\n\t/*::[*/0x087c/*::]*/: { n:\"XFCRC\", f:parse_XFCRC, r:12 },\n\t/*::[*/0x087d/*::]*/: { n:\"XFExt\", f:parse_XFExt, r:12 },\n\t/*::[*/0x087e/*::]*/: { n:\"AutoFilter12\" },\n\t/*::[*/0x087f/*::]*/: { n:\"ContinueFrt12\" },\n\t/*::[*/0x0884/*::]*/: { n:\"MDTInfo\" },\n\t/*::[*/0x0885/*::]*/: { n:\"MDXStr\" },\n\t/*::[*/0x0886/*::]*/: { n:\"MDXTuple\" },\n\t/*::[*/0x0887/*::]*/: { n:\"MDXSet\" },\n\t/*::[*/0x0888/*::]*/: { n:\"MDXProp\" },\n\t/*::[*/0x0889/*::]*/: { n:\"MDXKPI\" },\n\t/*::[*/0x088a/*::]*/: { n:\"MDB\" },\n\t/*::[*/0x088b/*::]*/: { n:\"PLV\" },\n\t/*::[*/0x088c/*::]*/: { n:\"Compat12\", f:parsebool, r:12 },\n\t/*::[*/0x088d/*::]*/: { n:\"DXF\" },\n\t/*::[*/0x088e/*::]*/: { n:\"TableStyles\", r:12 },\n\t/*::[*/0x088f/*::]*/: { n:\"TableStyle\" },\n\t/*::[*/0x0890/*::]*/: { n:\"TableStyleElement\" },\n\t/*::[*/0x0892/*::]*/: { n:\"StyleExt\" },\n\t/*::[*/0x0893/*::]*/: { n:\"NamePublish\" },\n\t/*::[*/0x0894/*::]*/: { n:\"NameCmt\", f:parse_NameCmt, r:12 },\n\t/*::[*/0x0895/*::]*/: { n:\"SortData\" },\n\t/*::[*/0x0896/*::]*/: { n:\"Theme\", f:parse_Theme, r:12 },\n\t/*::[*/0x0897/*::]*/: { n:\"GUIDTypeLib\" },\n\t/*::[*/0x0898/*::]*/: { n:\"FnGrp12\" },\n\t/*::[*/0x0899/*::]*/: { n:\"NameFnGrp12\" },\n\t/*::[*/0x089a/*::]*/: { n:\"MTRSettings\", f:parse_MTRSettings, r:12 },\n\t/*::[*/0x089b/*::]*/: { n:\"CompressPictures\", f:parsenoop2 },\n\t/*::[*/0x089c/*::]*/: { n:\"HeaderFooter\" },\n\t/*::[*/0x089d/*::]*/: { n:\"CrtLayout12\" },\n\t/*::[*/0x089e/*::]*/: { n:\"CrtMlFrt\" },\n\t/*::[*/0x089f/*::]*/: { n:\"CrtMlFrtContinue\" },\n\t/*::[*/0x08a3/*::]*/: { n:\"ForceFullCalculation\", f:parse_ForceFullCalculation },\n\t/*::[*/0x08a4/*::]*/: { n:\"ShapePropsStream\" },\n\t/*::[*/0x08a5/*::]*/: { n:\"TextPropsStream\" },\n\t/*::[*/0x08a6/*::]*/: { n:\"RichTextStream\" },\n\t/*::[*/0x08a7/*::]*/: { n:\"CrtLayout12A\" },\n\t/*::[*/0x1001/*::]*/: { n:\"Units\" },\n\t/*::[*/0x1002/*::]*/: { n:\"Chart\" },\n\t/*::[*/0x1003/*::]*/: { n:\"Series\" },\n\t/*::[*/0x1006/*::]*/: { n:\"DataFormat\" },\n\t/*::[*/0x1007/*::]*/: { n:\"LineFormat\" },\n\t/*::[*/0x1009/*::]*/: { n:\"MarkerFormat\" },\n\t/*::[*/0x100a/*::]*/: { n:\"AreaFormat\" },\n\t/*::[*/0x100b/*::]*/: { n:\"PieFormat\" },\n\t/*::[*/0x100c/*::]*/: { n:\"AttachedLabel\" },\n\t/*::[*/0x100d/*::]*/: { n:\"SeriesText\" },\n\t/*::[*/0x1014/*::]*/: { n:\"ChartFormat\" },\n\t/*::[*/0x1015/*::]*/: { n:\"Legend\" },\n\t/*::[*/0x1016/*::]*/: { n:\"SeriesList\" },\n\t/*::[*/0x1017/*::]*/: { n:\"Bar\" },\n\t/*::[*/0x1018/*::]*/: { n:\"Line\" },\n\t/*::[*/0x1019/*::]*/: { n:\"Pie\" },\n\t/*::[*/0x101a/*::]*/: { n:\"Area\" },\n\t/*::[*/0x101b/*::]*/: { n:\"Scatter\" },\n\t/*::[*/0x101c/*::]*/: { n:\"CrtLine\" },\n\t/*::[*/0x101d/*::]*/: { n:\"Axis\" },\n\t/*::[*/0x101e/*::]*/: { n:\"Tick\" },\n\t/*::[*/0x101f/*::]*/: { n:\"ValueRange\" },\n\t/*::[*/0x1020/*::]*/: { n:\"CatSerRange\" },\n\t/*::[*/0x1021/*::]*/: { n:\"AxisLine\" },\n\t/*::[*/0x1022/*::]*/: { n:\"CrtLink\" },\n\t/*::[*/0x1024/*::]*/: { n:\"DefaultText\" },\n\t/*::[*/0x1025/*::]*/: { n:\"Text\" },\n\t/*::[*/0x1026/*::]*/: { n:\"FontX\", f:parseuint16 },\n\t/*::[*/0x1027/*::]*/: { n:\"ObjectLink\" },\n\t/*::[*/0x1032/*::]*/: { n:\"Frame\" },\n\t/*::[*/0x1033/*::]*/: { n:\"Begin\" },\n\t/*::[*/0x1034/*::]*/: { n:\"End\" },\n\t/*::[*/0x1035/*::]*/: { n:\"PlotArea\" },\n\t/*::[*/0x103a/*::]*/: { n:\"Chart3d\" },\n\t/*::[*/0x103c/*::]*/: { n:\"PicF\" },\n\t/*::[*/0x103d/*::]*/: { n:\"DropBar\" },\n\t/*::[*/0x103e/*::]*/: { n:\"Radar\" },\n\t/*::[*/0x103f/*::]*/: { n:\"Surf\" },\n\t/*::[*/0x1040/*::]*/: { n:\"RadarArea\" },\n\t/*::[*/0x1041/*::]*/: { n:\"AxisParent\" },\n\t/*::[*/0x1043/*::]*/: { n:\"LegendException\" },\n\t/*::[*/0x1044/*::]*/: { n:\"ShtProps\", f:parse_ShtProps },\n\t/*::[*/0x1045/*::]*/: { n:\"SerToCrt\" },\n\t/*::[*/0x1046/*::]*/: { n:\"AxesUsed\" },\n\t/*::[*/0x1048/*::]*/: { n:\"SBaseRef\" },\n\t/*::[*/0x104a/*::]*/: { n:\"SerParent\" },\n\t/*::[*/0x104b/*::]*/: { n:\"SerAuxTrend\" },\n\t/*::[*/0x104e/*::]*/: { n:\"IFmtRecord\" },\n\t/*::[*/0x104f/*::]*/: { n:\"Pos\" },\n\t/*::[*/0x1050/*::]*/: { n:\"AlRuns\" },\n\t/*::[*/0x1051/*::]*/: { n:\"BRAI\" },\n\t/*::[*/0x105b/*::]*/: { n:\"SerAuxErrBar\" },\n\t/*::[*/0x105c/*::]*/: { n:\"ClrtClient\", f:parse_ClrtClient },\n\t/*::[*/0x105d/*::]*/: { n:\"SerFmt\" },\n\t/*::[*/0x105f/*::]*/: { n:\"Chart3DBarShape\" },\n\t/*::[*/0x1060/*::]*/: { n:\"Fbi\" },\n\t/*::[*/0x1061/*::]*/: { n:\"BopPop\" },\n\t/*::[*/0x1062/*::]*/: { n:\"AxcExt\" },\n\t/*::[*/0x1063/*::]*/: { n:\"Dat\" },\n\t/*::[*/0x1064/*::]*/: { n:\"PlotGrowth\" },\n\t/*::[*/0x1065/*::]*/: { n:\"SIIndex\" },\n\t/*::[*/0x1066/*::]*/: { n:\"GelFrame\" },\n\t/*::[*/0x1067/*::]*/: { n:\"BopPopCustom\" },\n\t/*::[*/0x1068/*::]*/: { n:\"Fbi2\" },\n\n\t/*::[*/0x0000/*::]*/: { n:\"Dimensions\", f:parse_Dimensions },\n\t/*::[*/0x0002/*::]*/: { n:\"BIFF2INT\", f:parse_BIFF2INT },\n\t/*::[*/0x0005/*::]*/: { n:\"BoolErr\", f:parse_BoolErr },\n\t/*::[*/0x0007/*::]*/: { n:\"String\", f:parse_BIFF2STRING },\n\t/*::[*/0x0008/*::]*/: { n:\"BIFF2ROW\" },\n\t/*::[*/0x000b/*::]*/: { n:\"Index\" },\n\t/*::[*/0x0016/*::]*/: { n:\"ExternCount\", f:parseuint16 },\n\t/*::[*/0x001e/*::]*/: { n:\"BIFF2FORMAT\", f:parse_BIFF2Format },\n\t/*::[*/0x001f/*::]*/: { n:\"BIFF2FMTCNT\" }, /* 16-bit cnt of BIFF2FORMAT records */\n\t/*::[*/0x0020/*::]*/: { n:\"BIFF2COLINFO\" },\n\t/*::[*/0x0021/*::]*/: { n:\"Array\", f:parse_Array },\n\t/*::[*/0x0025/*::]*/: { n:\"DefaultRowHeight\", f:parse_DefaultRowHeight },\n\t/*::[*/0x0032/*::]*/: { n:\"BIFF2FONTXTRA\", f:parse_BIFF2FONTXTRA },\n\t/*::[*/0x0034/*::]*/: { n:\"DDEObjName\" },\n\t/*::[*/0x003e/*::]*/: { n:\"BIFF2WINDOW2\" },\n\t/*::[*/0x0043/*::]*/: { n:\"BIFF2XF\" },\n\t/*::[*/0x0044/*::]*/: { n:\"BIFF2XFINDEX\", f:parseuint16 },\n\t/*::[*/0x0045/*::]*/: { n:\"BIFF2FONTCLR\" },\n\t/*::[*/0x0056/*::]*/: { n:\"BIFF4FMTCNT\" }, /* 16-bit cnt, similar to BIFF2 */\n\t/*::[*/0x007e/*::]*/: { n:\"RK\" }, /* Not necessarily same as 0x027e */\n\t/*::[*/0x007f/*::]*/: { n:\"ImData\", f:parse_ImData },\n\t/*::[*/0x0087/*::]*/: { n:\"Addin\" },\n\t/*::[*/0x0088/*::]*/: { n:\"Edg\" },\n\t/*::[*/0x0089/*::]*/: { n:\"Pub\" },\n\t/*::[*/0x0091/*::]*/: { n:\"Sub\" },\n\t/*::[*/0x0094/*::]*/: { n:\"LHRecord\" },\n\t/*::[*/0x0095/*::]*/: { n:\"LHNGraph\" },\n\t/*::[*/0x0096/*::]*/: { n:\"Sound\" },\n\t/*::[*/0x00a9/*::]*/: { n:\"CoordList\" },\n\t/*::[*/0x00ab/*::]*/: { n:\"GCW\" },\n\t/*::[*/0x00bc/*::]*/: { n:\"ShrFmla\" }, /* Not necessarily same as 0x04bc */\n\t/*::[*/0x00bf/*::]*/: { n:\"ToolbarHdr\" },\n\t/*::[*/0x00c0/*::]*/: { n:\"ToolbarEnd\" },\n\t/*::[*/0x00c2/*::]*/: { n:\"AddMenu\" },\n\t/*::[*/0x00c3/*::]*/: { n:\"DelMenu\" },\n\t/*::[*/0x00d6/*::]*/: { n:\"RString\", f:parse_RString },\n\t/*::[*/0x00df/*::]*/: { n:\"UDDesc\" },\n\t/*::[*/0x00ea/*::]*/: { n:\"TabIdConf\" },\n\t/*::[*/0x0162/*::]*/: { n:\"XL5Modify\" },\n\t/*::[*/0x01a5/*::]*/: { n:\"FileSharing2\" },\n\t/*::[*/0x0209/*::]*/: { n:'BOF', f:parse_BOF },\n\t/*::[*/0x0218/*::]*/: { n:\"Lbl\", f:parse_Lbl },\n\t/*::[*/0x0223/*::]*/: { n:\"ExternName\", f:parse_ExternName },\n\t/*::[*/0x0231/*::]*/: { n:\"Font\" },\n\t/*::[*/0x0243/*::]*/: { n:\"BIFF3XF\" },\n\t/*::[*/0x0409/*::]*/: { n:'BOF', f:parse_BOF },\n\t/*::[*/0x0443/*::]*/: { n:\"BIFF4XF\" },\n\t/*::[*/0x086d/*::]*/: { n:\"FeatInfo\" },\n\t/*::[*/0x0873/*::]*/: { n:\"FeatInfo11\" },\n\t/*::[*/0x0881/*::]*/: { n:\"SXAddl12\" },\n\t/*::[*/0x08c0/*::]*/: { n:\"AutoWebPub\" },\n\t/*::[*/0x08c1/*::]*/: { n:\"ListObj\" },\n\t/*::[*/0x08c2/*::]*/: { n:\"ListField\" },\n\t/*::[*/0x08c3/*::]*/: { n:\"ListDV\" },\n\t/*::[*/0x08c4/*::]*/: { n:\"ListCondFmt\" },\n\t/*::[*/0x08c5/*::]*/: { n:\"ListCF\" },\n\t/*::[*/0x08c6/*::]*/: { n:\"FMQry\" },\n\t/*::[*/0x08c7/*::]*/: { n:\"FMSQry\" },\n\t/*::[*/0x08c8/*::]*/: { n:\"PLV\" },\n\t/*::[*/0x08c9/*::]*/: { n:\"LnExt\" },\n\t/*::[*/0x08ca/*::]*/: { n:\"MkrExt\" },\n\t/*::[*/0x08cb/*::]*/: { n:\"CrtCoopt\" },\n\t/*::[*/0x08d6/*::]*/: { n:\"FRTArchId$\", r:12 },\n\n\t/*::[*/0x7262/*::]*/: {}\n};\n\nvar XLSRE = evert_key(XLSRecordEnum, 'n');\nfunction write_biff_rec(ba/*:BufArray*/, type/*:number|string*/, payload, length/*:?number*/)/*:void*/ {\n\tvar t/*:number*/ = +type || +XLSRE[/*::String(*/type/*::)*/];\n\tif(isNaN(t)) return;\n\tvar len = length || (payload||[]).length || 0;\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, len);\n\tif(/*:: len != null &&*/len > 0 && is_buf(payload)) ba.push(payload);\n}\n\nfunction write_biff_continue(ba/*:BufArray*/, type/*:number|string*/, payload, length/*:?number*/)/*:void*/ {\n\tvar len = length || (payload||[]).length || 0;\n\tif(len <= 8224) return write_biff_rec(ba, type, payload, len);\n\tvar t/*:number*/ = +type || +XLSRE[/*::String(*/type/*::)*/];\n\tif(isNaN(t)) return;\n\tvar parts = payload.parts || [], sidx = 0;\n\tvar i = 0, w = 0;\n\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\tvar o = ba.next(4);\n\to.write_shift(2, t);\n\to.write_shift(2, w);\n\tba.push(payload.slice(i, i + w));\n\ti += w;\n\twhile(i < len) {\n\t\to = ba.next(4);\n\t\to.write_shift(2, 0x3c); // TODO: figure out correct continue type\n\t\tw = 0;\n\t\twhile(w + (parts[sidx] || 8224) <= 8224) { w+= (parts[sidx] || 8224); sidx++; }\n\t\to.write_shift(2, w);\n\t\tba.push(payload.slice(i, i+w)); i+= w;\n\t}\n}\n\nfunction write_BIFF2Cell(out, r/*:number*/, c/*:number*/) {\n\tif(!out) out = new_buf(7);\n\tout.write_shift(2, r);\n\tout.write_shift(2, c);\n\tout.write_shift(2, 0);\n\tout.write_shift(1, 0);\n\treturn out;\n}\n\nfunction write_BIFF2BERR(r/*:number*/, c/*:number*/, val, t/*:?string*/) {\n\tvar out = new_buf(9);\n\twrite_BIFF2Cell(out, r, c);\n\twrite_Bes(val, t || 'b', out);\n\treturn out;\n}\n\n/* TODO: codepage, large strings */\nfunction write_BIFF2LABEL(r/*:number*/, c/*:number*/, val) {\n\tvar out = new_buf(8 + 2*val.length);\n\twrite_BIFF2Cell(out, r, c);\n\tout.write_shift(1, val.length);\n\tout.write_shift(val.length, val, 'sbcs');\n\treturn out.l < out.length ? out.slice(0, out.l) : out;\n}\n\nfunction write_ws_biff2_cell(ba/*:BufArray*/, cell/*:Cell*/, R/*:number*/, C/*:number*//*::, opts*/) {\n\tif(cell.v != null) switch(cell.t) {\n\t\tcase 'd': case 'n':\n\t\t\tvar v = cell.t == 'd' ? datenum(parseDate(cell.v)) : cell.v;\n\t\t\tif((v == (v|0)) && (v >= 0) && (v < 65536))\n\t\t\t\twrite_biff_rec(ba, 0x0002, write_BIFF2INT(R, C, v));\n\t\t\telse\n\t\t\t\twrite_biff_rec(ba, 0x0003, write_BIFF2NUM(R,C, v));\n\t\t\treturn;\n\t\tcase 'b': case 'e': write_biff_rec(ba, 0x0005, write_BIFF2BERR(R, C, cell.v, cell.t)); return;\n\t\t/* TODO: codepage, sst */\n\t\tcase 's': case 'str':\n\t\t\twrite_biff_rec(ba, 0x0004, write_BIFF2LABEL(R, C, (cell.v||\"\").slice(0,255)));\n\t\t\treturn;\n\t}\n\twrite_biff_rec(ba, 0x0001, write_BIFF2Cell(null, R, C));\n}\n\nfunction write_ws_biff2(ba/*:BufArray*/, ws/*:Worksheet*/, idx/*:number*/, opts/*::, wb:Workbook*/) {\n\tvar dense = Array.isArray(ws);\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\"), ref/*:string*/, rr = \"\", cols/*:Array*/ = [];\n\tif(range.e.c > 0xFF || range.e.r > 0x3FFF) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, 0x3FFF);\n\t\tref = encode_range(range);\n\t}\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff2_cell(ba, cell, R, C, opts);\n\t\t}\n\t}\n}\n\n/* Based on test files */\nfunction write_biff2_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tif(DENSE != null && o.dense == null) o.dense = DENSE;\n\tvar ba = buf_array();\n\tvar idx = 0;\n\tfor(var i=0;i*/ = [];\n\tvar range = safe_decode_range(ws['!ref'] || \"A1\");\n\tvar MAX_ROWS = b8 ? 65536 : 16384;\n\tif(range.e.c > 0xFF || range.e.r >= MAX_ROWS) {\n\t\tif(opts.WTF) throw new Error(\"Range \" + (ws['!ref'] || \"A1\") + \" exceeds format limit A1:IV16384\");\n\t\trange.e.c = Math.min(range.e.c, 0xFF);\n\t\trange.e.r = Math.min(range.e.c, MAX_ROWS-1);\n\t}\n\n\twrite_biff_rec(ba, 0x0809, write_BOF(wb, 0x10, opts));\n\t/* [Uncalced] Index */\n\twrite_biff_rec(ba, \"CalcMode\", writeuint16(1));\n\twrite_biff_rec(ba, \"CalcCount\", writeuint16(100));\n\twrite_biff_rec(ba, \"CalcRefMode\", writebool(true));\n\twrite_biff_rec(ba, \"CalcIter\", writebool(false));\n\twrite_biff_rec(ba, \"CalcDelta\", write_Xnum(0.001));\n\twrite_biff_rec(ba, \"CalcSaveRecalc\", writebool(true));\n\twrite_biff_rec(ba, \"PrintRowCol\", writebool(false));\n\twrite_biff_rec(ba, \"PrintGrid\", writebool(false));\n\twrite_biff_rec(ba, \"GridSet\", writeuint16(1));\n\twrite_biff_rec(ba, \"Guts\", write_Guts([0,0]));\n\t/* DefaultRowHeight WsBool [Sync] [LPr] [HorizontalPageBreaks] [VerticalPageBreaks] */\n\t/* Header (string) */\n\t/* Footer (string) */\n\twrite_biff_rec(ba, \"HCenter\", writebool(false));\n\twrite_biff_rec(ba, \"VCenter\", writebool(false));\n\t/* ... */\n\tif(b8) write_ws_cols_biff8(ba, ws[\"!cols\"], ws);\n\t/* ... */\n\twrite_biff_rec(ba, 0x200, write_Dimensions(range, opts));\n\t/* ... */\n\n\tif(b8) ws['!links'] = [];\n\tfor(var R = range.s.r; R <= range.e.r; ++R) {\n\t\trr = encode_row(R);\n\t\tfor(var C = range.s.c; C <= range.e.c; ++C) {\n\t\t\tif(R === range.s.r) cols[C] = encode_col(C);\n\t\t\tref = cols[C] + rr;\n\t\t\tvar cell = dense ? (ws[R]||[])[C] : ws[ref];\n\t\t\tif(!cell) continue;\n\t\t\t/* write cell */\n\t\t\twrite_ws_biff8_cell(ba, cell, R, C, opts);\n\t\t\tif(b8 && cell.l) ws['!links'].push([ref, cell.l]);\n\t\t}\n\t}\n\tvar cname/*:string*/ = _sheet.CodeName || _sheet.name || s;\n\t/* ... */\n\tif(b8) write_biff_rec(ba, \"Window2\", write_Window2((_WB.Views||[])[0]));\n\t/* ... */\n\tif(b8 && (ws['!merges']||[]).length) write_biff_rec(ba, \"MergeCells\", write_MergeCells(ws['!merges']));\n\t/* [LRng] *QUERYTABLE [PHONETICINFO] CONDFMTS */\n\tif(b8) write_ws_biff8_hlinks(ba, ws);\n\t/* [DVAL] */\n\twrite_biff_rec(ba, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t/* *WebPub *CellWatch [SheetExt] */\n\tif(b8) write_FEAT(ba, ws);\n\t/* *FEAT11 *RECORD12 */\n\twrite_biff_rec(ba, \"EOF\");\n\treturn ba.end();\n}\n\n/* [MS-XLS] 2.1.7.20.3 */\nfunction write_biff8_global(wb/*:Workbook*/, bufs, opts/*:WriteOpts*/) {\n\tvar A = buf_array();\n\tvar _WB/*:WBWBProps*/ = ((wb||{}).Workbook||{}/*:any*/);\n\tvar _sheets/*:Array*/ = (_WB.Sheets||[]);\n\tvar _wb/*:WBProps*/ = /*::((*/_WB.WBProps||{/*::CodeName:\"ThisWorkbook\"*/}/*:: ):any)*/;\n\tvar b8 = opts.biff == 8, b5 = opts.biff == 5;\n\twrite_biff_rec(A, 0x0809, write_BOF(wb, 0x05, opts));\n\tif(opts.bookType == \"xla\") write_biff_rec(A, \"Addin\");\n\twrite_biff_rec(A, \"InterfaceHdr\", b8 ? writeuint16(0x04b0) : null);\n\twrite_biff_rec(A, \"Mms\", writezeroes(2));\n\tif(b5) write_biff_rec(A, \"ToolbarHdr\");\n\tif(b5) write_biff_rec(A, \"ToolbarEnd\");\n\twrite_biff_rec(A, \"InterfaceEnd\");\n\twrite_biff_rec(A, \"WriteAccess\", write_WriteAccess(\"SheetJS\", opts));\n\t/* [FileSharing] */\n\twrite_biff_rec(A, \"CodePage\", writeuint16(b8 ? 0x04b0 : 0x04E4));\n\t/* *2047 Lel */\n\tif(b8) write_biff_rec(A, \"DSF\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Excel9File\");\n\twrite_biff_rec(A, \"RRTabId\", write_RRTabId(wb.SheetNames.length));\n\tif(b8 && wb.vbaraw) write_biff_rec(A, \"ObProj\");\n\t/* [ObNoMacros] */\n\tif(b8 && wb.vbaraw) {\n\t\tvar cname/*:string*/ = _wb.CodeName || \"ThisWorkbook\";\n\t\twrite_biff_rec(A, \"CodeName\", write_XLUnicodeString(cname, opts));\n\t}\n\twrite_biff_rec(A, \"BuiltInFnGroupCount\", writeuint16(0x11));\n\t/* *FnGroupName *FnGrp12 */\n\t/* *Lbl */\n\t/* [OleObjectSize] */\n\twrite_biff_rec(A, \"WinProtect\", writebool(false));\n\twrite_biff_rec(A, \"Protect\", writebool(false));\n\twrite_biff_rec(A, \"Password\", writeuint16(0));\n\tif(b8) write_biff_rec(A, \"Prot4Rev\", writebool(false));\n\tif(b8) write_biff_rec(A, \"Prot4RevPass\", writeuint16(0));\n\twrite_biff_rec(A, \"Window1\", write_Window1(opts));\n\twrite_biff_rec(A, \"Backup\", writebool(false));\n\twrite_biff_rec(A, \"HideObj\", writeuint16(0));\n\twrite_biff_rec(A, \"Date1904\", writebool(safe1904(wb)==\"true\"));\n\twrite_biff_rec(A, \"CalcPrecision\", writebool(true));\n\tif(b8) write_biff_rec(A, \"RefreshAll\", writebool(false));\n\twrite_biff_rec(A, \"BookBool\", writeuint16(0));\n\t/* ... */\n\twrite_FONTS_biff8(A, wb, opts);\n\twrite_FMTS_biff8(A, wb.SSF, opts);\n\twrite_CELLXFS_biff8(A, opts);\n\t/* ... */\n\tif(b8) write_biff_rec(A, \"UsesELFs\", writebool(false));\n\tvar a = A.end();\n\n\tvar C = buf_array();\n\t/* METADATA [MTRSettings] [ForceFullCalculation] */\n\tif(b8) write_biff_rec(C, \"Country\", write_Country());\n\t/* *SUPBOOK *LBL *RTD [RecalcId] *HFPicture *MSODRAWINGGROUP */\n\n\t/* BIFF8: [SST *Continue] ExtSST */\n\tif(b8 && opts.Strings) write_biff_continue(C, \"SST\", write_SST(opts.Strings, opts));\n\n\t/* *WebPub [WOpt] [CrErr] [BookExt] *FeatHdr *DConn [THEME] [CompressPictures] [Compat12] [GUIDTypeLib] */\n\twrite_biff_rec(C, \"EOF\");\n\tvar c = C.end();\n\n\tvar B = buf_array();\n\tvar blen = 0, j = 0;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) blen += (b8 ? 12 : 11) + (b8 ? 2 : 1) * wb.SheetNames[j].length;\n\tvar start = a.length + blen + c.length;\n\tfor(j = 0; j < wb.SheetNames.length; ++j) {\n\t\tvar _sheet/*:WBWSProp*/ = _sheets[j] || ({}/*:any*/);\n\t\twrite_biff_rec(B, \"BoundSheet8\", write_BoundSheet8({pos:start, hs:_sheet.Hidden||0, dt:0, name:wb.SheetNames[j]}, opts));\n\t\tstart += bufs[j].length;\n\t}\n\t/* 1*BoundSheet8 */\n\tvar b = B.end();\n\tif(blen != b.length) throw new Error(\"BS8 \" + blen + \" != \" + b.length);\n\n\tvar out = [];\n\tif(a.length) out.push(a);\n\tif(b.length) out.push(b);\n\tif(c.length) out.push(c);\n\treturn __toBuffer([out]);\n}\n\n/* [MS-XLS] 2.1.7.20 Workbook Stream */\nfunction write_biff8_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tvar bufs = [];\n\n\tif(wb && !wb.SSF) {\n\t\twb.SSF = SSF.get_table();\n\t}\n\tif(wb && wb.SSF) {\n\t\tmake_ssf(SSF); SSF.load_table(wb.SSF);\n\t\t// $FlowIgnore\n\t\to.revssf = evert_num(wb.SSF); o.revssf[wb.SSF[65535]] = 0;\n\t\to.ssf = wb.SSF;\n\t}\n\n\to.Strings = /*::((*/[]/*:: :any):SST)*/; o.Strings.Count = 0; o.Strings.Unique = 0;\n\tfix_write_opts(o);\n\n\to.cellXfs = [];\n\tget_cell_style(o.cellXfs, {}, {revssf:{\"General\":0}});\n\n\tif(!wb.Props) wb.Props = {};\n\n\tfor(var i = 0; i < wb.SheetNames.length; ++i) bufs[bufs.length] = write_ws_biff8(i, o, wb);\n\tbufs.unshift(write_biff8_global(wb, bufs, o));\n\treturn __toBuffer([bufs]);\n}\n\nfunction write_biff_buf(wb/*:Workbook*/, opts/*:WriteOpts*/) {\n\tvar o = opts || {};\n\tswitch(o.biff || 2) {\n\t\tcase 8: case 5: return write_biff8_buf(wb, opts);\n\t\tcase 4: case 3: case 2: return write_biff2_buf(wb, opts);\n\t}\n\tthrow new Error(\"invalid type \" + o.bookType + \" for BIFF\");\n}\n/* note: browser DOM element cannot see mso- style attrs, must parse */\nvar HTML_ = (function() {\n\tfunction html_to_sheet(str/*:string*/, _opts)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tstr = str.replace(//g, \"\");\n\t\tvar mtch/*:any*/ = str.match(/\");\n\t\tvar mtch2/*:any*/ = str.match(/<\\/table/i);\n\t\tvar i/*:number*/ = mtch.index, j/*:number*/ = mtch2 && mtch2.index || str.length;\n\t\tvar rows = split_regex(str.slice(i, j), /(:?]*>)/i, \"\");\n\t\tvar R = -1, C = 0, RS = 0, CS = 0;\n\t\tvar range/*:Range*/ = {s:{r:10000000, c:10000000},e:{r:0,c:0}};\n\t\tvar merges/*:Array*/ = [];\n\t\tfor(i = 0; i < rows.length; ++i) {\n\t\t\tvar row = rows[i].trim();\n\t\t\tvar hd = row.slice(0,3).toLowerCase();\n\t\t\tif(hd == \"/i);\n\t\t\tfor(j = 0; j < cells.length; ++j) {\n\t\t\t\tvar cell = cells[j].trim();\n\t\t\t\tif(!cell.match(/\")) > -1) m = m.slice(cc+1);\n\t\t\t\tfor(var midx = 0; midx < merges.length; ++midx) {\n\t\t\t\t\tvar _merge/*:Range*/ = merges[midx];\n\t\t\t\t\tif(_merge.s.c == C && _merge.s.r < R && R <= _merge.e.r) { C = _merge.e.c + 1; midx = -1; }\n\t\t\t\t}\n\t\t\t\tvar tag = parsexmltag(cell.slice(0, cell.indexOf(\">\")));\n\t\t\t\tCS = tag.colspan ? +tag.colspan : 1;\n\t\t\t\tif((RS = +tag.rowspan)>1 || CS>1) merges.push({s:{r:R,c:C},e:{r:R + (RS||1) - 1, c:C + CS - 1}});\n\t\t\t\tvar _t/*:string*/ = tag.t || tag[\"data-t\"] || \"\";\n\t\t\t\t/* TODO: generate stub cells */\n\t\t\t\tif(!m.length) { C += CS; continue; }\n\t\t\t\tm = htmldecode(m);\n\t\t\t\tif(range.s.r > R) range.s.r = R; if(range.e.r < R) range.e.r = R;\n\t\t\t\tif(range.s.c > C) range.s.c = C; if(range.e.c < C) range.e.c = C;\n\t\t\t\tif(!m.length) continue;\n\t\t\t\tvar o/*:Cell*/ = {t:'s', v:m};\n\t\t\t\tif(opts.raw || !m.trim().length || _t == 's'){}\n\t\t\t\telse if(m === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(m === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(m))) o = {t:'n', v:fuzzynum(m)};\n\t\t\t\telse if(!isNaN(fuzzydate(m).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(m)}/*:any*/);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = o; }\n\t\t\t\telse ws[encode_cell({r:R, c:C})] = o;\n\t\t\t\tC += CS;\n\t\t\t}\n\t\t}\n\t\tws['!ref'] = encode_range(range);\n\t\tif(merges.length) ws[\"!merges\"] = merges;\n\t\treturn ws;\n\t}\n\tfunction html_to_book(str/*:string*/, opts)/*:Workbook*/ {\n\t\treturn sheet_to_workbook(html_to_sheet(str, opts), opts);\n\t}\n\tfunction make_html_row(ws/*:Worksheet*/, r/*:Range*/, R/*:number*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\t\tvar M/*:Array*/ = (ws['!merges'] ||[]);\n\t\tvar oo/*:Array*/ = [];\n\t\tfor(var C = r.s.c; C <= r.e.c; ++C) {\n\t\t\tvar RS = 0, CS = 0;\n\t\t\tfor(var j = 0; j < M.length; ++j) {\n\t\t\t\tif(M[j].s.r > R || M[j].s.c > C) continue;\n\t\t\t\tif(M[j].e.r < R || M[j].e.c < C) continue;\n\t\t\t\tif(M[j].s.r < R || M[j].s.c < C) { RS = -1; break; }\n\t\t\t\tRS = M[j].e.r - M[j].s.r + 1; CS = M[j].e.c - M[j].s.c + 1; break;\n\t\t\t}\n\t\t\tif(RS < 0) continue;\n\t\t\tvar coord = encode_cell({r:R,c:C});\n\t\t\tvar cell = o.dense ? (ws[R]||[])[C] : ws[coord];\n\t\t\t/* TODO: html entities */\n\t\t\tvar w = (cell && cell.v != null) && (cell.h || escapehtml(cell.w || (format_cell(cell), cell.w) || \"\")) || \"\";\n\t\t\tvar sp = ({}/*:any*/);\n\t\t\tif(RS > 1) sp.rowspan = RS;\n\t\t\tif(CS > 1) sp.colspan = CS;\n\t\t\tif(o.editable) w = '' + w + '';\n\t\t\telse if(cell) {\n\t\t\t\tsp[\"data-t\"] = cell && cell.t || 'z';\n\t\t\t\tif(cell.v != null) sp[\"data-v\"] = cell.v;\n\t\t\t\tif(cell.z != null) sp[\"data-z\"] = cell.z;\n\t\t\t\tif(cell.l && (cell.l.Target || \"#\").charAt(0) != \"#\") w = '' + w + '';\n\t\t\t}\n\t\t\tsp.id = (o.id || \"sjs\") + \"-\" + coord;\n\t\t\too.push(writextag('td', w, sp));\n\t\t}\n\t\tvar preamble = \"\";\n\t\treturn preamble + oo.join(\"\") + \"\";\n\t}\n\tfunction make_html_preamble(ws/*:Worksheet*/, R/*:Range*/, o/*:Sheet2HTMLOpts*/)/*:string*/ {\n\t\tvar out/*:Array*/ = [];\n\t\treturn out.join(\"\") + '';\n\t}\n\tvar _BEGIN = 'SheetJS Table Export';\n\tvar _END = '';\n\tfunction sheet_to_html(ws/*:Worksheet*/, opts/*:?Sheet2HTMLOpts*//*, wb:?Workbook*/)/*:string*/ {\n\t\tvar o = opts || {};\n\t\tvar header = o.header != null ? o.header : _BEGIN;\n\t\tvar footer = o.footer != null ? o.footer : _END;\n\t\tvar out/*:Array*/ = [header];\n\t\tvar r = decode_range(ws['!ref']);\n\t\to.dense = Array.isArray(ws);\n\t\tout.push(make_html_preamble(ws, r, o));\n\t\tfor(var R = r.s.r; R <= r.e.r; ++R) out.push(make_html_row(ws, r, R, o));\n\t\tout.push(\"\" + footer);\n\t\treturn out.join(\"\");\n\n\t}\n\treturn {\n\t\tto_workbook: html_to_book,\n\t\tto_sheet: html_to_sheet,\n\t\t_row: make_html_row,\n\t\tBEGIN: _BEGIN,\n\t\tEND: _END,\n\t\t_preamble: make_html_preamble,\n\t\tfrom_sheet: sheet_to_html\n\t};\n})();\n\nfunction sheet_add_dom(ws/*:Worksheet*/, table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tif(DENSE != null) opts.dense = DENSE;\n\tvar or_R = 0, or_C = 0;\n\tif(opts.origin != null) {\n\t\tif(typeof opts.origin == 'number') or_R = opts.origin;\n\t\telse {\n\t\t\tvar _origin/*:CellAddress*/ = typeof opts.origin == \"string\" ? decode_cell(opts.origin) : opts.origin;\n\t\t\tor_R = _origin.r; or_C = _origin.c;\n\t\t}\n\t}\n\tvar rows/*:HTMLCollection*/ = table.getElementsByTagName('tr');\n\tvar sheetRows = Math.min(opts.sheetRows||10000000, rows.length);\n\tvar range/*:Range*/ = {s:{r:0,c:0},e:{r:or_R,c:or_C}};\n\tif(ws[\"!ref\"]) {\n\t\tvar _range/*:Range*/ = decode_range(ws[\"!ref\"]);\n\t\trange.s.r = Math.min(range.s.r, _range.s.r);\n\t\trange.s.c = Math.min(range.s.c, _range.s.c);\n\t\trange.e.r = Math.max(range.e.r, _range.e.r);\n\t\trange.e.c = Math.max(range.e.c, _range.e.c);\n\t\tif(or_R == -1) range.e.r = or_R = _range.e.r + 1;\n\t}\n\tvar merges/*:Array*/ = [], midx = 0;\n\tvar rowinfo/*:Array*/ = ws[\"!rows\"] || (ws[\"!rows\"] = []);\n\tvar _R = 0, R = 0, _C = 0, C = 0, RS = 0, CS = 0;\n\tif(!ws[\"!cols\"]) ws['!cols'] = [];\n\tfor(; _R < rows.length && R < sheetRows; ++_R) {\n\t\tvar row/*:HTMLTableRowElement*/ = rows[_R];\n\t\tif (is_dom_element_hidden(row)) {\n\t\t\tif (opts.display) continue;\n\t\t\trowinfo[R] = {hidden: true};\n\t\t}\n\t\tvar elts/*:HTMLCollection*/ = (row.children/*:any*/);\n\t\tfor(_C = C = 0; _C < elts.length; ++_C) {\n\t\t\tvar elt/*:HTMLTableCellElement*/ = elts[_C];\n\t\t\tif (opts.display && is_dom_element_hidden(elt)) continue;\n\t\t\tvar v/*:?string*/ = elt.hasAttribute('data-v') ? elt.getAttribute('data-v') : elt.hasAttribute('v') ? elt.getAttribute('v') : htmldecode(elt.innerHTML);\n\t\t\tvar z/*:?string*/ = elt.getAttribute('data-z') || elt.getAttribute('z');\n\t\t\tfor(midx = 0; midx < merges.length; ++midx) {\n\t\t\t\tvar m/*:Range*/ = merges[midx];\n\t\t\t\tif(m.s.c == C + or_C && m.s.r < R + or_R && R + or_R <= m.e.r) { C = m.e.c+1 - or_C; midx = -1; }\n\t\t\t}\n\t\t\t/* TODO: figure out how to extract nonstandard mso- style */\n\t\t\tCS = +elt.getAttribute(\"colspan\") || 1;\n\t\t\tif( ((RS = (+elt.getAttribute(\"rowspan\") || 1)))>1 || CS>1) merges.push({s:{r:R + or_R,c:C + or_C},e:{r:R + or_R + (RS||1) - 1, c:C + or_C + (CS||1) - 1}});\n\t\t\tvar o/*:Cell*/ = {t:'s', v:v};\n\t\t\tvar _t/*:string*/ = elt.getAttribute(\"data-t\") || elt.getAttribute(\"t\") || \"\";\n\t\t\tif(v != null) {\n\t\t\t\tif(v.length == 0) o.t = _t || 'z';\n\t\t\t\telse if(opts.raw || v.trim().length == 0 || _t == \"s\"){}\n\t\t\t\telse if(v === 'TRUE') o = {t:'b', v:true};\n\t\t\t\telse if(v === 'FALSE') o = {t:'b', v:false};\n\t\t\t\telse if(!isNaN(fuzzynum(v))) o = {t:'n', v:fuzzynum(v)};\n\t\t\t\telse if(!isNaN(fuzzydate(v).getDate())) {\n\t\t\t\t\to = ({t:'d', v:parseDate(v)}/*:any*/);\n\t\t\t\t\tif(!opts.cellDates) o = ({t:'n', v:datenum(o.v)}/*:any*/);\n\t\t\t\t\to.z = opts.dateNF || SSF._table[14];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif(o.z === undefined && z != null) o.z = z;\n\t\t\t/* The first link is used. Links are assumed to be fully specified.\n\t\t\t * TODO: The right way to process relative links is to make a new */\n\t\t\tvar l = \"\", Aelts = elt.getElementsByTagName(\"A\");\n\t\t\tif(Aelts && Aelts.length) for(var Aelti = 0; Aelti < Aelts.length; ++Aelti)\tif(Aelts[Aelti].hasAttribute(\"href\")) {\n\t\t\t\tl = Aelts[Aelti].getAttribute(\"href\"); if(l.charAt(0) != \"#\") break;\n\t\t\t}\n\t\t\tif(l && l.charAt(0) != \"#\") o.l = ({ Target: l });\n\t\t\tif(opts.dense) { if(!ws[R + or_R]) ws[R + or_R] = []; ws[R + or_R][C + or_C] = o; }\n\t\t\telse ws[encode_cell({c:C + or_C, r:R + or_R})] = o;\n\t\t\tif(range.e.c < C + or_C) range.e.c = C + or_C;\n\t\t\tC += CS;\n\t\t}\n\t\t++R;\n\t}\n\tif(merges.length) ws['!merges'] = (ws[\"!merges\"] || []).concat(merges);\n\trange.e.r = Math.max(range.e.r, R - 1 + or_R);\n\tws['!ref'] = encode_range(range);\n\tif(R >= sheetRows) ws['!fullref'] = encode_range((range.e.r = rows.length-_R+R-1 + or_R,range)); // We can count the real number of rows to parse but we don't to improve the performance\n\treturn ws;\n}\n\nfunction parse_dom_table(table/*:HTMLElement*/, _opts/*:?any*/)/*:Worksheet*/ {\n\tvar opts = _opts || {};\n\tvar ws/*:Worksheet*/ = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\treturn sheet_add_dom(ws, table, _opts);\n}\n\nfunction table_to_book(table/*:HTMLElement*/, opts/*:?any*/)/*:Workbook*/ {\n\treturn sheet_to_workbook(parse_dom_table(table, opts), opts);\n}\n\nfunction is_dom_element_hidden(element/*:HTMLElement*/)/*:boolean*/ {\n\tvar display/*:string*/ = '';\n\tvar get_computed_style/*:?function*/ = get_get_computed_style_function(element);\n\tif(get_computed_style) display = get_computed_style(element).getPropertyValue('display');\n\tif(!display) display = element.style.display; // Fallback for cases when getComputedStyle is not available (e.g. an old browser or some Node.js environments) or doesn't work (e.g. if the element is not inserted to a document)\n\treturn display === 'none';\n}\n\n/* global getComputedStyle */\nfunction get_get_computed_style_function(element/*:HTMLElement*/)/*:?function*/ {\n\t// The proper getComputedStyle implementation is the one defined in the element window\n\tif(element.ownerDocument.defaultView && typeof element.ownerDocument.defaultView.getComputedStyle === 'function') return element.ownerDocument.defaultView.getComputedStyle;\n\t// If it is not available, try to get one from the global namespace\n\tif(typeof getComputedStyle === 'function') return getComputedStyle;\n\treturn null;\n}\n/* OpenDocument */\nvar parse_content_xml = (function() {\n\n\tvar parse_text_p = function(text/*:string*//*::, tag*/)/*:Array*/ {\n\t\t/* 6.1.2 White Space Characters */\n\t\tvar fixed = text\n\t\t\t.replace(/[\\t\\r\\n]/g, \" \").trim().replace(/ +/g, \" \")\n\t\t\t.replace(//g,\" \")\n\t\t\t.replace(//g, function($$,$1) { return Array(parseInt($1,10)+1).join(\" \"); })\n\t\t\t.replace(/]*\\/>/g,\"\\t\")\n\t\t\t.replace(//g,\"\\n\");\n\t\tvar v = unescapexml(fixed.replace(/<[^>]*>/g,\"\"));\n\n\t\treturn [v];\n\t};\n\n\tvar number_formats = {\n\t\t/* ods name: [short ssf fmt, long ssf fmt] */\n\t\tday: [\"d\", \"dd\"],\n\t\tmonth: [\"m\", \"mm\"],\n\t\tyear: [\"y\", \"yy\"],\n\t\thours: [\"h\", \"hh\"],\n\t\tminutes: [\"m\", \"mm\"],\n\t\tseconds: [\"s\", \"ss\"],\n\t\t\"am-pm\": [\"A/P\", \"AM/PM\"],\n\t\t\"day-of-week\": [\"ddd\", \"dddd\"],\n\t\tera: [\"e\", \"ee\"],\n\t\t/* there is no native representation of LO \"Q\" format */\n\t\tquarter: [\"\\\\Qm\", \"m\\\\\\\"th quarter\\\"\"]\n\t};\n\n\treturn function pcx(d/*:string*/, _opts)/*:Workbook*/ {\n\t\tvar opts = _opts || {};\n\t\tif(DENSE != null && opts.dense == null) opts.dense = DENSE;\n\t\tvar str = xlml_normalize(d);\n\t\tvar state/*:Array*/ = [], tmp;\n\t\tvar tag/*:: = {}*/;\n\t\tvar NFtag = {name:\"\"}, NF = \"\", pidx = 0;\n\t\tvar sheetag/*:: = {name:\"\", '名称':\"\"}*/;\n\t\tvar rowtag/*:: = {'行号':\"\"}*/;\n\t\tvar Sheets = {}, SheetNames/*:Array*/ = [];\n\t\tvar ws = opts.dense ? ([]/*:any*/) : ({}/*:any*/);\n\t\tvar Rn, q/*:: :any = ({t:\"\", v:null, z:null, w:\"\",c:[],}:any)*/;\n\t\tvar ctag = ({value:\"\"}/*:any*/);\n\t\tvar textp = \"\", textpidx = 0, textptag/*:: = {}*/;\n\t\tvar textR = [];\n\t\tvar R = -1, C = -1, range = {s: {r:1000000,c:10000000}, e: {r:0, c:0}};\n\t\tvar row_ol = 0;\n\t\tvar number_format_map = {};\n\t\tvar merges/*:Array*/ = [], mrange = {}, mR = 0, mC = 0;\n\t\tvar rowinfo/*:Array*/ = [], rowpeat = 1, colpeat = 1;\n\t\tvar arrayf/*:Array<[Range, string]>*/ = [];\n\t\tvar WB = {Names:[]};\n\t\tvar atag = ({}/*:any*/);\n\t\tvar _Ref/*:[string, string]*/ = [\"\", \"\"];\n\t\tvar comments/*:Array*/ = [], comment/*:Comment*/ = ({}/*:any*/);\n\t\tvar creator = \"\", creatoridx = 0;\n\t\tvar isstub = false, intable = false;\n\t\tvar i = 0;\n\t\txlmlregex.lastIndex = 0;\n\t\tstr = str.replace(//mg,\"\").replace(//gm,\"\");\n\t\twhile((Rn = xlmlregex.exec(str))) switch((Rn[3]=Rn[3].replace(/_.*$/,\"\"))) {\n\n\t\t\tcase 'table': case '工作表': // 9.1.2 \n\t\t\t\tif(Rn[1]==='/') {\n\t\t\t\t\tif(range.e.c >= range.s.c && range.e.r >= range.s.r) ws['!ref'] = encode_range(range);\n\t\t\t\t\telse ws['!ref'] = \"A1:A1\";\n\t\t\t\t\tif(opts.sheetRows > 0 && opts.sheetRows <= range.e.r) {\n\t\t\t\t\t\tws['!fullref'] = ws['!ref'];\n\t\t\t\t\t\trange.e.r = opts.sheetRows - 1;\n\t\t\t\t\t\tws['!ref'] = encode_range(range);\n\t\t\t\t\t}\n\t\t\t\t\tif(merges.length) ws['!merges'] = merges;\n\t\t\t\t\tif(rowinfo.length) ws[\"!rows\"] = rowinfo;\n\t\t\t\t\tsheetag.name = sheetag['名称'] || sheetag.name;\n\t\t\t\t\tif(typeof JSON !== 'undefined') JSON.stringify(sheetag);\n\t\t\t\t\tSheetNames.push(sheetag.name);\n\t\t\t\t\tSheets[sheetag.name] = ws;\n\t\t\t\t\tintable = false;\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tsheetag = parsexmltag(Rn[0], false);\n\t\t\t\t\tR = C = -1;\n\t\t\t\t\trange.s.r = range.s.c = 10000000; range.e.r = range.e.c = 0;\n\t\t\t\t\tws = opts.dense ? ([]/*:any*/) : ({}/*:any*/); merges = [];\n\t\t\t\t\trowinfo = [];\n\t\t\t\t\tintable = true;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'table-row-group': // 9.1.9 \n\t\t\t\tif(Rn[1] === \"/\") --row_ol; else ++row_ol;\n\t\t\t\tbreak;\n\t\t\tcase 'table-row': case '行': // 9.1.3 \n\t\t\t\tif(Rn[1] === '/') { R+=rowpeat; rowpeat = 1; break; }\n\t\t\t\trowtag = parsexmltag(Rn[0], false);\n\t\t\t\tif(rowtag['行号']) R = rowtag['行号'] - 1; else if(R == -1) R = 0;\n\t\t\t\trowpeat = +rowtag['number-rows-repeated'] || 1;\n\t\t\t\t/* TODO: remove magic */\n\t\t\t\tif(rowpeat < 10) for(i = 0; i < rowpeat; ++i) if(row_ol > 0) rowinfo[R + i] = {level: row_ol};\n\t\t\t\tC = -1; break;\n\t\t\tcase 'covered-table-cell': // 9.1.5 \n\t\t\t\tif(Rn[1] !== '/') ++C;\n\t\t\t\tif(opts.sheetStubs) {\n\t\t\t\t\tif(opts.dense) { if(!ws[R]) ws[R] = []; ws[R][C] = {t:'z'}; }\n\t\t\t\t\telse ws[encode_cell({r:R,c:C})] = {t:'z'};\n\t\t\t\t}\n\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\tbreak; /* stub */\n\t\t\tcase 'table-cell': case '数据':\n\t\t\t\tif(Rn[0].charAt(Rn[0].length-2) === '/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tq = ({t:'z', v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(ctag.formula && opts.cellFormula != false) q.f = ods_to_csf_formula(unescapexml(ctag.formula));\n\t\t\t\t\tif((ctag['数据类型'] || ctag['value-type']) == \"string\") {\n\t\t\t\t\t\tq.t = \"s\"; q.v = unescapexml(ctag['string-value'] || \"\");\n\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\tif(!ws[R]) ws[R] = [];\n\t\t\t\t\t\t\tws[R][C] = q;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tws[encode_cell({r:R,c:C})] = q;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tC+= colpeat-1;\n\t\t\t\t} else if(Rn[1]!=='/') {\n\t\t\t\t\t++C;\n\t\t\t\t\tcolpeat = 1;\n\t\t\t\t\tvar rptR = rowpeat ? R + rowpeat - 1 : R;\n\t\t\t\t\tif(C > range.e.c) range.e.c = C;\n\t\t\t\t\tif(C < range.s.c) range.s.c = C;\n\t\t\t\t\tif(R < range.s.r) range.s.r = R;\n\t\t\t\t\tif(rptR > range.e.r) range.e.r = rptR;\n\t\t\t\t\tctag = parsexmltag(Rn[0], false);\n\t\t\t\t\tcomments = []; comment = ({}/*:any*/);\n\t\t\t\t\tq = ({t:ctag['数据类型'] || ctag['value-type'], v:null/*:: , z:null, w:\"\",c:[]*/}/*:any*/);\n\t\t\t\t\tif(opts.cellFormula) {\n\t\t\t\t\t\tif(ctag.formula) ctag.formula = unescapexml(ctag.formula);\n\t\t\t\t\t\tif(ctag['number-matrix-columns-spanned'] && ctag['number-matrix-rows-spanned']) {\n\t\t\t\t\t\t\tmR = parseInt(ctag['number-matrix-rows-spanned'],10) || 0;\n\t\t\t\t\t\t\tmC = parseInt(ctag['number-matrix-columns-spanned'],10) || 0;\n\t\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\t\tq.F = encode_range(mrange);\n\t\t\t\t\t\t\tarrayf.push([mrange, q.F]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif(ctag.formula) q.f = ods_to_csf_formula(ctag.formula);\n\t\t\t\t\t\telse for(i = 0; i < arrayf.length; ++i)\n\t\t\t\t\t\t\tif(R >= arrayf[i][0].s.r && R <= arrayf[i][0].e.r)\n\t\t\t\t\t\t\t\tif(C >= arrayf[i][0].s.c && C <= arrayf[i][0].e.c)\n\t\t\t\t\t\t\t\t\tq.F = arrayf[i][1];\n\t\t\t\t\t}\n\t\t\t\t\tif(ctag['number-columns-spanned'] || ctag['number-rows-spanned']) {\n\t\t\t\t\t\tmR = parseInt(ctag['number-rows-spanned'],10) || 0;\n\t\t\t\t\t\tmC = parseInt(ctag['number-columns-spanned'],10) || 0;\n\t\t\t\t\t\tmrange = {s: {r:R,c:C}, e:{r:R + mR-1,c:C + mC-1}};\n\t\t\t\t\t\tmerges.push(mrange);\n\t\t\t\t\t}\n\n\t\t\t\t\t/* 19.675.2 table:number-columns-repeated */\n\t\t\t\t\tif(ctag['number-columns-repeated']) colpeat = parseInt(ctag['number-columns-repeated'], 10);\n\n\t\t\t\t\t/* 19.385 office:value-type */\n\t\t\t\t\tswitch(q.t) {\n\t\t\t\t\t\tcase 'boolean': q.t = 'b'; q.v = parsexmlbool(ctag['boolean-value']); break;\n\t\t\t\t\t\tcase 'float': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'percentage': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'currency': q.t = 'n'; q.v = parseFloat(ctag.value); break;\n\t\t\t\t\t\tcase 'date': q.t = 'd'; q.v = parseDate(ctag['date-value']);\n\t\t\t\t\t\t\tif(!opts.cellDates) { q.t = 'n'; q.v = datenum(q.v); }\n\t\t\t\t\t\t\tq.z = 'm/d/yy'; break;\n\t\t\t\t\t\tcase 'time': q.t = 'n'; q.v = parse_isodur(ctag['time-value'])/86400;\n\t\t\t\t\t\t\tif(opts.cellDates) { q.t = 'd'; q.v = numdate(q.v); }\n\t\t\t\t\t\t\tq.z = 'HH:MM:SS'; break;\n\t\t\t\t\t\tcase 'number': q.t = 'n'; q.v = parseFloat(ctag['数据数值']); break;\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\tif(q.t === 'string' || q.t === 'text' || !q.t) {\n\t\t\t\t\t\t\t\tq.t = 's';\n\t\t\t\t\t\t\t\tif(ctag['string-value'] != null) { textp = unescapexml(ctag['string-value']); textR = []; }\n\t\t\t\t\t\t\t} else throw new Error('Unsupported value type ' + q.t);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tisstub = false;\n\t\t\t\t\tif(q.t === 's') {\n\t\t\t\t\t\tq.v = textp || '';\n\t\t\t\t\t\tif(textR.length) q.R = textR;\n\t\t\t\t\t\tisstub = textpidx == 0;\n\t\t\t\t\t}\n\t\t\t\t\tif(atag.Target) q.l = atag;\n\t\t\t\t\tif(comments.length > 0) { q.c = comments; comments = []; }\n\t\t\t\t\tif(textp && opts.cellText !== false) q.w = textp;\n\t\t\t\t\tif(isstub) { q.t = \"z\"; delete q.v; }\n\t\t\t\t\tif(!isstub || opts.sheetStubs) {\n\t\t\t\t\t\tif(!(opts.sheetRows && opts.sheetRows <= R)) {\n\t\t\t\t\t\t\tfor(var rpt = 0; rpt < rowpeat; ++rpt) {\n\t\t\t\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\t\t\t\tif(opts.dense) {\n\t\t\t\t\t\t\t\t\tif(!ws[R + rpt]) ws[R + rpt] = [];\n\t\t\t\t\t\t\t\t\tws[R + rpt][C] = rpt == 0 ? q : dup(q);\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[R + rpt][C + colpeat] = dup(q);\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tws[encode_cell({r:R + rpt,c:C})] = q;\n\t\t\t\t\t\t\t\t\twhile(--colpeat > 0) ws[encode_cell({r:R + rpt,c:C + colpeat})] = dup(q);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif(range.e.c <= C) range.e.c = C;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcolpeat = parseInt(ctag['number-columns-repeated']||\"1\", 10);\n\t\t\t\t\tC += colpeat-1; colpeat = 0;\n\t\t\t\t\tq = {/*:: t:\"\", v:null, z:null, w:\"\",c:[]*/};\n\t\t\t\t\ttextp = \"\"; textR = [];\n\t\t\t\t}\n\t\t\t\tatag = ({}/*:any*/);\n\t\t\t\tbreak; // 9.1.4 \n\n\t\t\t/* pure state */\n\t\t\tcase 'document': // TODO: is the root for FODS\n\t\t\tcase 'document-content': case '电子表格文档': // 3.1.3.2 \n\t\t\tcase 'spreadsheet': case '主体': // 3.7 \n\t\t\tcase 'scripts': // 3.12 \n\t\t\tcase 'styles': // TODO \n\t\t\tcase 'font-face-decls': // 3.14 \n\t\t\tcase 'master-styles': // 3.15.4 -- relevant for FODS\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], true]);\n\t\t\t\tbreak;\n\n\t\t\tcase 'annotation': // 14.1 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t\tcomment.t = textp;\n\t\t\t\t\tif(textR.length) /*::(*/comment/*:: :any)*/.R = textR;\n\t\t\t\t\tcomment.a = creator;\n\t\t\t\t\tcomments.push(comment);\n\t\t\t\t}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') {state.push([Rn[3], false]);}\n\t\t\t\tcreator = \"\"; creatoridx = 0;\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'creator': // 4.3.2.7 \n\t\t\t\tif(Rn[1]==='/') { creator = str.slice(creatoridx,Rn.index); }\n\t\t\t\telse creatoridx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\t/* ignore state */\n\t\t\tcase 'meta': case '元数据': // TODO: FODS/UOF\n\t\t\tcase 'settings': // TODO: \n\t\t\tcase 'config-item-set': // TODO: \n\t\t\tcase 'config-item-map-indexed': // TODO: \n\t\t\tcase 'config-item-map-entry': // TODO: \n\t\t\tcase 'config-item-map-named': // TODO: \n\t\t\tcase 'shapes': // 9.2.8 \n\t\t\tcase 'frame': // 10.4.2 \n\t\t\tcase 'text-box': // 10.4.3 \n\t\t\tcase 'image': // 10.4.4 \n\t\t\tcase 'data-pilot-tables': // 9.6.2 \n\t\t\tcase 'list-style': // 16.30 \n\t\t\tcase 'form': // 13.13 \n\t\t\tcase 'dde-links': // 9.8 \n\t\t\tcase 'event-listeners': // TODO\n\t\t\tcase 'chart': // TODO\n\t\t\t\tif(Rn[1]==='/'){if((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;}\n\t\t\t\telse if(Rn[0].charAt(Rn[0].length-2) !== '/') state.push([Rn[3], false]);\n\t\t\t\ttextp = \"\"; textpidx = 0; textR = [];\n\t\t\t\tbreak;\n\n\t\t\tcase 'scientific-number': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-symbol': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'currency-style': // TODO: \n\t\t\t\tbreak;\n\t\t\tcase 'number-style': // 16.27.2 \n\t\t\tcase 'percentage-style': // 16.27.9 \n\t\t\tcase 'date-style': // 16.27.10 \n\t\t\tcase 'time-style': // 16.27.18 \n\t\t\t\tif(Rn[1]==='/'){\n\t\t\t\t\tnumber_format_map[NFtag.name] = NF;\n\t\t\t\t\tif((tmp=state.pop())[0]!==Rn[3]) throw \"Bad state: \"+tmp;\n\t\t\t\t} else if(Rn[0].charAt(Rn[0].length-2) !== '/') {\n\t\t\t\t\tNF = \"\";\n\t\t\t\t\tNFtag = parsexmltag(Rn[0], false);\n\t\t\t\t\tstate.push([Rn[3], true]);\n\t\t\t\t} break;\n\n\t\t\tcase 'script': break; // 3.13 \n\t\t\tcase 'libraries': break; // TODO: \n\t\t\tcase 'automatic-styles': break; // 3.15.3 \n\n\t\t\tcase 'default-style': // TODO: \n\t\t\tcase 'page-layout': break; // TODO: \n\t\t\tcase 'style': // 16.2 \n\t\t\t\tbreak;\n\t\t\tcase 'map': break; // 16.3 \n\t\t\tcase 'font-face': break; // 16.21 \n\n\t\t\tcase 'paragraph-properties': break; // 17.6 \n\t\t\tcase 'table-properties': break; // 17.15 \n\t\t\tcase 'table-column-properties': break; // 17.16 \n\t\t\tcase 'table-row-properties': break; // 17.17 \n\t\t\tcase 'table-cell-properties': break; // 17.18 \n\n\t\t\tcase 'number': // 16.27.3 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'fraction': break; // TODO 16.27.6 \n\n\t\t\tcase 'day': // 16.27.11 \n\t\t\tcase 'month': // 16.27.12 \n\t\t\tcase 'year': // 16.27.13 \n\t\t\tcase 'era': // 16.27.14 \n\t\t\tcase 'day-of-week': // 16.27.15 \n\t\t\tcase 'week-of-year': // 16.27.16 \n\t\t\tcase 'quarter': // 16.27.17 \n\t\t\tcase 'hours': // 16.27.19 \n\t\t\tcase 'minutes': // 16.27.20 \n\t\t\tcase 'seconds': // 16.27.21 \n\t\t\tcase 'am-pm': // 16.27.22 \n\t\t\t\tswitch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t\t\tNF += number_formats[Rn[3]][tag.style==='long'?1:0]; break;\n\t\t\t\t} break;\n\n\t\t\tcase 'boolean-style': break; // 16.27.23 \n\t\t\tcase 'boolean': break; // 16.27.24 \n\t\t\tcase 'text-style': break; // 16.27.25 \n\t\t\tcase 'text': // 16.27.26 \n\t\t\t\tif(Rn[0].slice(-2) === \"/>\") break;\n\t\t\t\telse if(Rn[1]===\"/\") switch(state[state.length-1][0]) {\n\t\t\t\t\tcase 'number-style':\n\t\t\t\t\tcase 'date-style':\n\t\t\t\t\tcase 'time-style':\n\t\t\t\t\t\tNF += str.slice(pidx, Rn.index);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\telse pidx = Rn.index + Rn[0].length;\n\t\t\t\tbreak;\n\n\t\t\tcase 'named-range': // 9.4.12 \n\t\t\t\ttag = parsexmltag(Rn[0], false);\n\t\t\t\t_Ref = ods_to_csf_3D(tag['cell-range-address']);\n\t\t\t\tvar nrange = ({Name:tag.name, Ref:_Ref[0] + '!' + _Ref[1]}/*:any*/);\n\t\t\t\tif(intable) nrange.Sheet = SheetNames.length;\n\t\t\t\tWB.Names.push(nrange);\n\t\t\t\tbreak;\n\n\t\t\tcase 'text-content': break; // 16.27.27 \n\t\t\tcase 'text-properties': break; // 16.27.27