diff --git a/example/images/index.html b/example/images/index.html new file mode 100644 index 0000000..e69de29 diff --git a/example/images/office2html.png b/example/images/office2html.png new file mode 100644 index 0000000..5781feb Binary files /dev/null and b/example/images/office2html.png differ diff --git a/example/images/office2html2.png b/example/images/office2html2.png new file mode 100644 index 0000000..8001c4c Binary files /dev/null and b/example/images/office2html2.png differ diff --git a/example/include/pdf/web/cmaps/78-EUC-H.bcmap b/example/include/pdf/web/cmaps/78-EUC-H.bcmap deleted file mode 100644 index 2655fc7..0000000 Binary files a/example/include/pdf/web/cmaps/78-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/78-EUC-V.bcmap b/example/include/pdf/web/cmaps/78-EUC-V.bcmap deleted file mode 100644 index f1ed853..0000000 Binary files a/example/include/pdf/web/cmaps/78-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/78-H.bcmap b/example/include/pdf/web/cmaps/78-H.bcmap deleted file mode 100644 index 39e89d3..0000000 Binary files a/example/include/pdf/web/cmaps/78-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/78-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/78-RKSJ-H.bcmap deleted file mode 100644 index e4167cb..0000000 Binary files a/example/include/pdf/web/cmaps/78-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/78-RKSJ-V.bcmap b/example/include/pdf/web/cmaps/78-RKSJ-V.bcmap deleted file mode 100644 index 50b1646..0000000 Binary files a/example/include/pdf/web/cmaps/78-RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/78-V.bcmap b/example/include/pdf/web/cmaps/78-V.bcmap deleted file mode 100644 index d7af99b..0000000 Binary files a/example/include/pdf/web/cmaps/78-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/78ms-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/78ms-RKSJ-H.bcmap deleted file mode 100644 index 37077d0..0000000 Binary files a/example/include/pdf/web/cmaps/78ms-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/78ms-RKSJ-V.bcmap b/example/include/pdf/web/cmaps/78ms-RKSJ-V.bcmap deleted file mode 100644 index acf2323..0000000 Binary files a/example/include/pdf/web/cmaps/78ms-RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/83pv-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/83pv-RKSJ-H.bcmap deleted file mode 100644 index 2359bc5..0000000 Binary files a/example/include/pdf/web/cmaps/83pv-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/90ms-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/90ms-RKSJ-H.bcmap deleted file mode 100644 index af82938..0000000 Binary files a/example/include/pdf/web/cmaps/90ms-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/90ms-RKSJ-V.bcmap b/example/include/pdf/web/cmaps/90ms-RKSJ-V.bcmap deleted file mode 100644 index 780549d..0000000 Binary files a/example/include/pdf/web/cmaps/90ms-RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/90msp-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/90msp-RKSJ-H.bcmap deleted file mode 100644 index bfd3119..0000000 Binary files a/example/include/pdf/web/cmaps/90msp-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/90msp-RKSJ-V.bcmap b/example/include/pdf/web/cmaps/90msp-RKSJ-V.bcmap deleted file mode 100644 index 25ef14a..0000000 Binary files a/example/include/pdf/web/cmaps/90msp-RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/90pv-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/90pv-RKSJ-H.bcmap deleted file mode 100644 index 02f713b..0000000 Binary files a/example/include/pdf/web/cmaps/90pv-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/90pv-RKSJ-V.bcmap b/example/include/pdf/web/cmaps/90pv-RKSJ-V.bcmap deleted file mode 100644 index d08e0cc..0000000 Binary files a/example/include/pdf/web/cmaps/90pv-RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Add-H.bcmap b/example/include/pdf/web/cmaps/Add-H.bcmap deleted file mode 100644 index 59442ac..0000000 Binary files a/example/include/pdf/web/cmaps/Add-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Add-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/Add-RKSJ-H.bcmap deleted file mode 100644 index a3065e4..0000000 Binary files a/example/include/pdf/web/cmaps/Add-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Add-RKSJ-V.bcmap b/example/include/pdf/web/cmaps/Add-RKSJ-V.bcmap deleted file mode 100644 index 040014c..0000000 Binary files a/example/include/pdf/web/cmaps/Add-RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Add-V.bcmap b/example/include/pdf/web/cmaps/Add-V.bcmap deleted file mode 100644 index 2f816d3..0000000 Binary files a/example/include/pdf/web/cmaps/Add-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-0.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-0.bcmap deleted file mode 100644 index 88ec04a..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-0.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-1.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-1.bcmap deleted file mode 100644 index 03a5014..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-1.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-2.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-2.bcmap deleted file mode 100644 index 2aa9514..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-3.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-3.bcmap deleted file mode 100644 index 86d8b8c..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-3.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-4.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-4.bcmap deleted file mode 100644 index f50fc6c..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-4.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-5.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-5.bcmap deleted file mode 100644 index 6caf4a8..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-5.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-6.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-6.bcmap deleted file mode 100644 index b77fb07..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-6.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-CNS1-UCS2.bcmap b/example/include/pdf/web/cmaps/Adobe-CNS1-UCS2.bcmap deleted file mode 100644 index 69d79a2..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-CNS1-UCS2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-GB1-0.bcmap b/example/include/pdf/web/cmaps/Adobe-GB1-0.bcmap deleted file mode 100644 index 3610108..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-GB1-0.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-GB1-1.bcmap b/example/include/pdf/web/cmaps/Adobe-GB1-1.bcmap deleted file mode 100644 index 707bb10..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-GB1-1.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-GB1-2.bcmap b/example/include/pdf/web/cmaps/Adobe-GB1-2.bcmap deleted file mode 100644 index f7648cc..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-GB1-2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-GB1-3.bcmap b/example/include/pdf/web/cmaps/Adobe-GB1-3.bcmap deleted file mode 100644 index 8521458..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-GB1-3.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-GB1-4.bcmap b/example/include/pdf/web/cmaps/Adobe-GB1-4.bcmap deleted file mode 100644 index e40c63a..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-GB1-4.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-GB1-5.bcmap b/example/include/pdf/web/cmaps/Adobe-GB1-5.bcmap deleted file mode 100644 index d7623b5..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-GB1-5.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-GB1-UCS2.bcmap b/example/include/pdf/web/cmaps/Adobe-GB1-UCS2.bcmap deleted file mode 100644 index 7586525..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-GB1-UCS2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-0.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-0.bcmap deleted file mode 100644 index f0e94ec..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-0.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-1.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-1.bcmap deleted file mode 100644 index dad42c5..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-1.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-2.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-2.bcmap deleted file mode 100644 index 090819a..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-3.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-3.bcmap deleted file mode 100644 index 087dfc1..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-3.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-4.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-4.bcmap deleted file mode 100644 index 46aa9bf..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-4.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-5.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-5.bcmap deleted file mode 100644 index 5b4b65c..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-5.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-6.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-6.bcmap deleted file mode 100644 index e77d699..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-6.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Japan1-UCS2.bcmap b/example/include/pdf/web/cmaps/Adobe-Japan1-UCS2.bcmap deleted file mode 100644 index 128a141..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Japan1-UCS2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Korea1-0.bcmap b/example/include/pdf/web/cmaps/Adobe-Korea1-0.bcmap deleted file mode 100644 index cef1a99..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Korea1-0.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Korea1-1.bcmap b/example/include/pdf/web/cmaps/Adobe-Korea1-1.bcmap deleted file mode 100644 index 11ffa36..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Korea1-1.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Korea1-2.bcmap b/example/include/pdf/web/cmaps/Adobe-Korea1-2.bcmap deleted file mode 100644 index 3172308..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Korea1-2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Adobe-Korea1-UCS2.bcmap b/example/include/pdf/web/cmaps/Adobe-Korea1-UCS2.bcmap deleted file mode 100644 index f3371c0..0000000 Binary files a/example/include/pdf/web/cmaps/Adobe-Korea1-UCS2.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/B5-H.bcmap b/example/include/pdf/web/cmaps/B5-H.bcmap deleted file mode 100644 index beb4d22..0000000 Binary files a/example/include/pdf/web/cmaps/B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/B5-V.bcmap b/example/include/pdf/web/cmaps/B5-V.bcmap deleted file mode 100644 index 2d4f87d..0000000 Binary files a/example/include/pdf/web/cmaps/B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/B5pc-H.bcmap b/example/include/pdf/web/cmaps/B5pc-H.bcmap deleted file mode 100644 index ce00131..0000000 Binary files a/example/include/pdf/web/cmaps/B5pc-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/B5pc-V.bcmap b/example/include/pdf/web/cmaps/B5pc-V.bcmap deleted file mode 100644 index 73b99ff..0000000 Binary files a/example/include/pdf/web/cmaps/B5pc-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/CNS-EUC-H.bcmap b/example/include/pdf/web/cmaps/CNS-EUC-H.bcmap deleted file mode 100644 index 61d1d0c..0000000 Binary files a/example/include/pdf/web/cmaps/CNS-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/CNS-EUC-V.bcmap b/example/include/pdf/web/cmaps/CNS-EUC-V.bcmap deleted file mode 100644 index 1a393a5..0000000 Binary files a/example/include/pdf/web/cmaps/CNS-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/CNS1-H.bcmap b/example/include/pdf/web/cmaps/CNS1-H.bcmap deleted file mode 100644 index f738e21..0000000 Binary files a/example/include/pdf/web/cmaps/CNS1-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/CNS1-V.bcmap b/example/include/pdf/web/cmaps/CNS1-V.bcmap deleted file mode 100644 index 9c3169f..0000000 Binary files a/example/include/pdf/web/cmaps/CNS1-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/CNS2-H.bcmap b/example/include/pdf/web/cmaps/CNS2-H.bcmap deleted file mode 100644 index c89b352..0000000 Binary files a/example/include/pdf/web/cmaps/CNS2-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/CNS2-V.bcmap b/example/include/pdf/web/cmaps/CNS2-V.bcmap deleted file mode 100644 index 7588cec..0000000 --- a/example/include/pdf/web/cmaps/CNS2-V.bcmap +++ /dev/null @@ -1,3 +0,0 @@ -เRCopyright 1990-2009 Adobe Systems Incorporated. -All rights reserved. -See ./LICENSEแCNS2-H \ No newline at end of file diff --git a/example/include/pdf/web/cmaps/ETHK-B5-H.bcmap b/example/include/pdf/web/cmaps/ETHK-B5-H.bcmap deleted file mode 100644 index cb29415..0000000 Binary files a/example/include/pdf/web/cmaps/ETHK-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/ETHK-B5-V.bcmap b/example/include/pdf/web/cmaps/ETHK-B5-V.bcmap deleted file mode 100644 index f09aec6..0000000 Binary files a/example/include/pdf/web/cmaps/ETHK-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/ETen-B5-H.bcmap b/example/include/pdf/web/cmaps/ETen-B5-H.bcmap deleted file mode 100644 index c2d7746..0000000 Binary files a/example/include/pdf/web/cmaps/ETen-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/ETen-B5-V.bcmap b/example/include/pdf/web/cmaps/ETen-B5-V.bcmap deleted file mode 100644 index 89bff15..0000000 Binary files a/example/include/pdf/web/cmaps/ETen-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/ETenms-B5-H.bcmap b/example/include/pdf/web/cmaps/ETenms-B5-H.bcmap deleted file mode 100644 index a7d69db..0000000 --- a/example/include/pdf/web/cmaps/ETenms-B5-H.bcmap +++ /dev/null @@ -1,3 +0,0 @@ -เRCopyright 1990-2009 Adobe Systems Incorporated. -All rights reserved. -See ./LICENSEแ ETen-B5-H` ^ \ No newline at end of file diff --git a/example/include/pdf/web/cmaps/ETenms-B5-V.bcmap b/example/include/pdf/web/cmaps/ETenms-B5-V.bcmap deleted file mode 100644 index adc5d61..0000000 Binary files a/example/include/pdf/web/cmaps/ETenms-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/EUC-H.bcmap b/example/include/pdf/web/cmaps/EUC-H.bcmap deleted file mode 100644 index e92ea5b..0000000 Binary files a/example/include/pdf/web/cmaps/EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/EUC-V.bcmap b/example/include/pdf/web/cmaps/EUC-V.bcmap deleted file mode 100644 index 7a7c183..0000000 Binary files a/example/include/pdf/web/cmaps/EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Ext-H.bcmap b/example/include/pdf/web/cmaps/Ext-H.bcmap deleted file mode 100644 index 3b5cde4..0000000 Binary files a/example/include/pdf/web/cmaps/Ext-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Ext-RKSJ-H.bcmap b/example/include/pdf/web/cmaps/Ext-RKSJ-H.bcmap deleted file mode 100644 index ea4d2d9..0000000 Binary files a/example/include/pdf/web/cmaps/Ext-RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Ext-RKSJ-V.bcmap b/example/include/pdf/web/cmaps/Ext-RKSJ-V.bcmap deleted file mode 100644 index 3457c27..0000000 Binary files a/example/include/pdf/web/cmaps/Ext-RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Ext-V.bcmap b/example/include/pdf/web/cmaps/Ext-V.bcmap deleted file mode 100644 index 4999ca4..0000000 Binary files a/example/include/pdf/web/cmaps/Ext-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GB-EUC-H.bcmap b/example/include/pdf/web/cmaps/GB-EUC-H.bcmap deleted file mode 100644 index e39908b..0000000 Binary files a/example/include/pdf/web/cmaps/GB-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GB-EUC-V.bcmap b/example/include/pdf/web/cmaps/GB-EUC-V.bcmap deleted file mode 100644 index d5be544..0000000 Binary files a/example/include/pdf/web/cmaps/GB-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GB-H.bcmap b/example/include/pdf/web/cmaps/GB-H.bcmap deleted file mode 100644 index 39189c5..0000000 --- a/example/include/pdf/web/cmaps/GB-H.bcmap +++ /dev/null @@ -1,4 +0,0 @@ -เRCopyright 1990-2009 Adobe Systems Incorporated. -All rights reserved. -See ./LICENSE!!บ]aX!!]`21> p z$]‚"R‚d-Uƒ7*„ 4„%+ „Z „{/…%…<9K…b1]†."‡ ‰`]‡,"]ˆ -"]ˆh"]‰F"]Š$"]‹"]‹`"]Œ>"]"]z"]ŽX"]6"]"]r"]‘P"]’."]“ "]“j"]”H"]•&"]–"]–b"]—@"]˜"]˜|"]™Z"]š8"]›"]›t"]œR"]0"]ž"]žl"]ŸJ"] ("]ก"]กd"]ขB"]ฃ "Xฃ~']คW"]ฅ5"]ฆ"]ฆq"]งO"]จ-"]ฉ "]ฉi"]ชG"]ซ%"]ฌ"]ฌa"]ญ?"]ฎ"]ฎ{"]ฏY"]ฐ7"]ฑ"]ฑs"]ฒQ"]ณ/"]ด "]ดk"]ตI"]ถ'"]ท"]ทc"]ธA"]น"]น}"]บ["]ป9 \ No newline at end of file diff --git a/example/include/pdf/web/cmaps/GB-V.bcmap b/example/include/pdf/web/cmaps/GB-V.bcmap deleted file mode 100644 index 3108345..0000000 Binary files a/example/include/pdf/web/cmaps/GB-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBK-EUC-H.bcmap b/example/include/pdf/web/cmaps/GBK-EUC-H.bcmap deleted file mode 100644 index 05fff7e..0000000 Binary files a/example/include/pdf/web/cmaps/GBK-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBK-EUC-V.bcmap b/example/include/pdf/web/cmaps/GBK-EUC-V.bcmap deleted file mode 100644 index 0cdf6be..0000000 Binary files a/example/include/pdf/web/cmaps/GBK-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBK2K-H.bcmap b/example/include/pdf/web/cmaps/GBK2K-H.bcmap deleted file mode 100644 index 46f6ba5..0000000 Binary files a/example/include/pdf/web/cmaps/GBK2K-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBK2K-V.bcmap b/example/include/pdf/web/cmaps/GBK2K-V.bcmap deleted file mode 100644 index d9a9479..0000000 Binary files a/example/include/pdf/web/cmaps/GBK2K-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBKp-EUC-H.bcmap b/example/include/pdf/web/cmaps/GBKp-EUC-H.bcmap deleted file mode 100644 index 5cb0af6..0000000 Binary files a/example/include/pdf/web/cmaps/GBKp-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBKp-EUC-V.bcmap b/example/include/pdf/web/cmaps/GBKp-EUC-V.bcmap deleted file mode 100644 index bca93b8..0000000 Binary files a/example/include/pdf/web/cmaps/GBKp-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBT-EUC-H.bcmap b/example/include/pdf/web/cmaps/GBT-EUC-H.bcmap deleted file mode 100644 index 4b4e2d3..0000000 Binary files a/example/include/pdf/web/cmaps/GBT-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBT-EUC-V.bcmap b/example/include/pdf/web/cmaps/GBT-EUC-V.bcmap deleted file mode 100644 index 38f7066..0000000 Binary files a/example/include/pdf/web/cmaps/GBT-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBT-H.bcmap b/example/include/pdf/web/cmaps/GBT-H.bcmap deleted file mode 100644 index 8437ac3..0000000 Binary files a/example/include/pdf/web/cmaps/GBT-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBT-V.bcmap b/example/include/pdf/web/cmaps/GBT-V.bcmap deleted file mode 100644 index 697ab4a..0000000 Binary files a/example/include/pdf/web/cmaps/GBT-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBTpc-EUC-H.bcmap b/example/include/pdf/web/cmaps/GBTpc-EUC-H.bcmap deleted file mode 100644 index f6e50e8..0000000 Binary files a/example/include/pdf/web/cmaps/GBTpc-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBTpc-EUC-V.bcmap b/example/include/pdf/web/cmaps/GBTpc-EUC-V.bcmap deleted file mode 100644 index 6c0d71a..0000000 Binary files a/example/include/pdf/web/cmaps/GBTpc-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBpc-EUC-H.bcmap b/example/include/pdf/web/cmaps/GBpc-EUC-H.bcmap deleted file mode 100644 index c9edf67..0000000 Binary files a/example/include/pdf/web/cmaps/GBpc-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/GBpc-EUC-V.bcmap b/example/include/pdf/web/cmaps/GBpc-EUC-V.bcmap deleted file mode 100644 index 31450c9..0000000 Binary files a/example/include/pdf/web/cmaps/GBpc-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/H.bcmap b/example/include/pdf/web/cmaps/H.bcmap deleted file mode 100644 index 7b24ea4..0000000 Binary files a/example/include/pdf/web/cmaps/H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKdla-B5-H.bcmap b/example/include/pdf/web/cmaps/HKdla-B5-H.bcmap deleted file mode 100644 index 7d30c05..0000000 Binary files a/example/include/pdf/web/cmaps/HKdla-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKdla-B5-V.bcmap b/example/include/pdf/web/cmaps/HKdla-B5-V.bcmap deleted file mode 100644 index 7894694..0000000 Binary files a/example/include/pdf/web/cmaps/HKdla-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKdlb-B5-H.bcmap b/example/include/pdf/web/cmaps/HKdlb-B5-H.bcmap deleted file mode 100644 index d829a23..0000000 Binary files a/example/include/pdf/web/cmaps/HKdlb-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKdlb-B5-V.bcmap b/example/include/pdf/web/cmaps/HKdlb-B5-V.bcmap deleted file mode 100644 index 2b572b5..0000000 Binary files a/example/include/pdf/web/cmaps/HKdlb-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKgccs-B5-H.bcmap b/example/include/pdf/web/cmaps/HKgccs-B5-H.bcmap deleted file mode 100644 index 971a4f2..0000000 Binary files a/example/include/pdf/web/cmaps/HKgccs-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKgccs-B5-V.bcmap b/example/include/pdf/web/cmaps/HKgccs-B5-V.bcmap deleted file mode 100644 index d353ca2..0000000 Binary files a/example/include/pdf/web/cmaps/HKgccs-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKm314-B5-H.bcmap b/example/include/pdf/web/cmaps/HKm314-B5-H.bcmap deleted file mode 100644 index 576dc01..0000000 Binary files a/example/include/pdf/web/cmaps/HKm314-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKm314-B5-V.bcmap b/example/include/pdf/web/cmaps/HKm314-B5-V.bcmap deleted file mode 100644 index 0e96d0e..0000000 Binary files a/example/include/pdf/web/cmaps/HKm314-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKm471-B5-H.bcmap b/example/include/pdf/web/cmaps/HKm471-B5-H.bcmap deleted file mode 100644 index 11d170c..0000000 Binary files a/example/include/pdf/web/cmaps/HKm471-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKm471-B5-V.bcmap b/example/include/pdf/web/cmaps/HKm471-B5-V.bcmap deleted file mode 100644 index 54959bf..0000000 Binary files a/example/include/pdf/web/cmaps/HKm471-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKscs-B5-H.bcmap b/example/include/pdf/web/cmaps/HKscs-B5-H.bcmap deleted file mode 100644 index 6ef7857..0000000 Binary files a/example/include/pdf/web/cmaps/HKscs-B5-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/HKscs-B5-V.bcmap b/example/include/pdf/web/cmaps/HKscs-B5-V.bcmap deleted file mode 100644 index 1fb2fa2..0000000 Binary files a/example/include/pdf/web/cmaps/HKscs-B5-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Hankaku.bcmap b/example/include/pdf/web/cmaps/Hankaku.bcmap deleted file mode 100644 index 4b8ec7f..0000000 Binary files a/example/include/pdf/web/cmaps/Hankaku.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Hiragana.bcmap b/example/include/pdf/web/cmaps/Hiragana.bcmap deleted file mode 100644 index 17e983e..0000000 Binary files a/example/include/pdf/web/cmaps/Hiragana.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSC-EUC-H.bcmap b/example/include/pdf/web/cmaps/KSC-EUC-H.bcmap deleted file mode 100644 index a45c65f..0000000 Binary files a/example/include/pdf/web/cmaps/KSC-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSC-EUC-V.bcmap b/example/include/pdf/web/cmaps/KSC-EUC-V.bcmap deleted file mode 100644 index 0e7b21f..0000000 Binary files a/example/include/pdf/web/cmaps/KSC-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSC-H.bcmap b/example/include/pdf/web/cmaps/KSC-H.bcmap deleted file mode 100644 index b9b22b6..0000000 Binary files a/example/include/pdf/web/cmaps/KSC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSC-Johab-H.bcmap b/example/include/pdf/web/cmaps/KSC-Johab-H.bcmap deleted file mode 100644 index 2531ffc..0000000 Binary files a/example/include/pdf/web/cmaps/KSC-Johab-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSC-Johab-V.bcmap b/example/include/pdf/web/cmaps/KSC-Johab-V.bcmap deleted file mode 100644 index 367ceb2..0000000 Binary files a/example/include/pdf/web/cmaps/KSC-Johab-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSC-V.bcmap b/example/include/pdf/web/cmaps/KSC-V.bcmap deleted file mode 100644 index 6ae2f0b..0000000 Binary files a/example/include/pdf/web/cmaps/KSC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSCms-UHC-H.bcmap b/example/include/pdf/web/cmaps/KSCms-UHC-H.bcmap deleted file mode 100644 index a8d4240..0000000 Binary files a/example/include/pdf/web/cmaps/KSCms-UHC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSCms-UHC-HW-H.bcmap b/example/include/pdf/web/cmaps/KSCms-UHC-HW-H.bcmap deleted file mode 100644 index 8b4ae18..0000000 Binary files a/example/include/pdf/web/cmaps/KSCms-UHC-HW-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSCms-UHC-HW-V.bcmap b/example/include/pdf/web/cmaps/KSCms-UHC-HW-V.bcmap deleted file mode 100644 index b655dbc..0000000 Binary files a/example/include/pdf/web/cmaps/KSCms-UHC-HW-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSCms-UHC-V.bcmap b/example/include/pdf/web/cmaps/KSCms-UHC-V.bcmap deleted file mode 100644 index 21f97f6..0000000 Binary files a/example/include/pdf/web/cmaps/KSCms-UHC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSCpc-EUC-H.bcmap b/example/include/pdf/web/cmaps/KSCpc-EUC-H.bcmap deleted file mode 100644 index e06f361..0000000 Binary files a/example/include/pdf/web/cmaps/KSCpc-EUC-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/KSCpc-EUC-V.bcmap b/example/include/pdf/web/cmaps/KSCpc-EUC-V.bcmap deleted file mode 100644 index f3c9113..0000000 Binary files a/example/include/pdf/web/cmaps/KSCpc-EUC-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Katakana.bcmap b/example/include/pdf/web/cmaps/Katakana.bcmap deleted file mode 100644 index 524303c..0000000 Binary files a/example/include/pdf/web/cmaps/Katakana.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/LICENSE b/example/include/pdf/web/cmaps/LICENSE deleted file mode 100644 index b1ad168..0000000 --- a/example/include/pdf/web/cmaps/LICENSE +++ /dev/null @@ -1,36 +0,0 @@ -%%Copyright: ----------------------------------------------------------- -%%Copyright: Copyright 1990-2009 Adobe Systems Incorporated. -%%Copyright: All rights reserved. -%%Copyright: -%%Copyright: Redistribution and use in source and binary forms, with or -%%Copyright: without modification, are permitted provided that the -%%Copyright: following conditions are met: -%%Copyright: -%%Copyright: Redistributions of source code must retain the above -%%Copyright: copyright notice, this list of conditions and the following -%%Copyright: disclaimer. -%%Copyright: -%%Copyright: Redistributions in binary form must reproduce the above -%%Copyright: copyright notice, this list of conditions and the following -%%Copyright: disclaimer in the documentation and/or other materials -%%Copyright: provided with the distribution. -%%Copyright: -%%Copyright: Neither the name of Adobe Systems Incorporated nor the names -%%Copyright: of its contributors may be used to endorse or promote -%%Copyright: products derived from this software without specific prior -%%Copyright: written permission. -%%Copyright: -%%Copyright: THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND -%%Copyright: CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, -%%Copyright: INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF -%%Copyright: MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE -%%Copyright: DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR -%%Copyright: CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -%%Copyright: SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT -%%Copyright: NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; -%%Copyright: LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) -%%Copyright: HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN -%%Copyright: CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR -%%Copyright: OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS -%%Copyright: SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. -%%Copyright: ----------------------------------------------------------- diff --git a/example/include/pdf/web/cmaps/NWP-H.bcmap b/example/include/pdf/web/cmaps/NWP-H.bcmap deleted file mode 100644 index afc5e4b..0000000 Binary files a/example/include/pdf/web/cmaps/NWP-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/NWP-V.bcmap b/example/include/pdf/web/cmaps/NWP-V.bcmap deleted file mode 100644 index bb5785e..0000000 Binary files a/example/include/pdf/web/cmaps/NWP-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/RKSJ-H.bcmap b/example/include/pdf/web/cmaps/RKSJ-H.bcmap deleted file mode 100644 index fb8d298..0000000 Binary files a/example/include/pdf/web/cmaps/RKSJ-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/RKSJ-V.bcmap b/example/include/pdf/web/cmaps/RKSJ-V.bcmap deleted file mode 100644 index a2555a6..0000000 Binary files a/example/include/pdf/web/cmaps/RKSJ-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/Roman.bcmap b/example/include/pdf/web/cmaps/Roman.bcmap deleted file mode 100644 index f896dcf..0000000 Binary files a/example/include/pdf/web/cmaps/Roman.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UCS2-H.bcmap b/example/include/pdf/web/cmaps/UniCNS-UCS2-H.bcmap deleted file mode 100644 index d5db27c..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UCS2-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UCS2-V.bcmap b/example/include/pdf/web/cmaps/UniCNS-UCS2-V.bcmap deleted file mode 100644 index 1dc9b7a..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UCS2-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UTF16-H.bcmap b/example/include/pdf/web/cmaps/UniCNS-UTF16-H.bcmap deleted file mode 100644 index 961afef..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UTF16-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UTF16-V.bcmap b/example/include/pdf/web/cmaps/UniCNS-UTF16-V.bcmap deleted file mode 100644 index df0cffe..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UTF16-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UTF32-H.bcmap b/example/include/pdf/web/cmaps/UniCNS-UTF32-H.bcmap deleted file mode 100644 index 1ab18a1..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UTF32-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UTF32-V.bcmap b/example/include/pdf/web/cmaps/UniCNS-UTF32-V.bcmap deleted file mode 100644 index ad14662..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UTF32-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UTF8-H.bcmap b/example/include/pdf/web/cmaps/UniCNS-UTF8-H.bcmap deleted file mode 100644 index 83c6bd7..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UTF8-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniCNS-UTF8-V.bcmap b/example/include/pdf/web/cmaps/UniCNS-UTF8-V.bcmap deleted file mode 100644 index 22a27e4..0000000 Binary files a/example/include/pdf/web/cmaps/UniCNS-UTF8-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UCS2-H.bcmap b/example/include/pdf/web/cmaps/UniGB-UCS2-H.bcmap deleted file mode 100644 index 5bd6228..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UCS2-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UCS2-V.bcmap b/example/include/pdf/web/cmaps/UniGB-UCS2-V.bcmap deleted file mode 100644 index 53c534b..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UCS2-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UTF16-H.bcmap b/example/include/pdf/web/cmaps/UniGB-UTF16-H.bcmap deleted file mode 100644 index b95045b..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UTF16-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UTF16-V.bcmap b/example/include/pdf/web/cmaps/UniGB-UTF16-V.bcmap deleted file mode 100644 index 51f023e..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UTF16-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UTF32-H.bcmap b/example/include/pdf/web/cmaps/UniGB-UTF32-H.bcmap deleted file mode 100644 index f0dbd14..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UTF32-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UTF32-V.bcmap b/example/include/pdf/web/cmaps/UniGB-UTF32-V.bcmap deleted file mode 100644 index ce9c30a..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UTF32-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UTF8-H.bcmap b/example/include/pdf/web/cmaps/UniGB-UTF8-H.bcmap deleted file mode 100644 index 982ca46..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UTF8-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniGB-UTF8-V.bcmap b/example/include/pdf/web/cmaps/UniGB-UTF8-V.bcmap deleted file mode 100644 index f78020d..0000000 Binary files a/example/include/pdf/web/cmaps/UniGB-UTF8-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UCS2-H.bcmap b/example/include/pdf/web/cmaps/UniJIS-UCS2-H.bcmap deleted file mode 100644 index 7daf56a..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UCS2-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UCS2-HW-H.bcmap b/example/include/pdf/web/cmaps/UniJIS-UCS2-HW-H.bcmap deleted file mode 100644 index ac9975c..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UCS2-HW-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UCS2-HW-V.bcmap b/example/include/pdf/web/cmaps/UniJIS-UCS2-HW-V.bcmap deleted file mode 100644 index 3da0a1c..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UCS2-HW-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UCS2-V.bcmap b/example/include/pdf/web/cmaps/UniJIS-UCS2-V.bcmap deleted file mode 100644 index c50b9dd..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UCS2-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UTF16-H.bcmap b/example/include/pdf/web/cmaps/UniJIS-UTF16-H.bcmap deleted file mode 100644 index 6761344..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UTF16-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UTF16-V.bcmap b/example/include/pdf/web/cmaps/UniJIS-UTF16-V.bcmap deleted file mode 100644 index 70bf90c..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UTF16-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UTF32-H.bcmap b/example/include/pdf/web/cmaps/UniJIS-UTF32-H.bcmap deleted file mode 100644 index 7a83d53..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UTF32-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UTF32-V.bcmap b/example/include/pdf/web/cmaps/UniJIS-UTF32-V.bcmap deleted file mode 100644 index 7a87135..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UTF32-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UTF8-H.bcmap b/example/include/pdf/web/cmaps/UniJIS-UTF8-H.bcmap deleted file mode 100644 index 9f0334c..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UTF8-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS-UTF8-V.bcmap b/example/include/pdf/web/cmaps/UniJIS-UTF8-V.bcmap deleted file mode 100644 index 808a94f..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS-UTF8-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS2004-UTF16-H.bcmap b/example/include/pdf/web/cmaps/UniJIS2004-UTF16-H.bcmap deleted file mode 100644 index d768bf8..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS2004-UTF16-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS2004-UTF16-V.bcmap b/example/include/pdf/web/cmaps/UniJIS2004-UTF16-V.bcmap deleted file mode 100644 index 3d5bf6f..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS2004-UTF16-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS2004-UTF32-H.bcmap b/example/include/pdf/web/cmaps/UniJIS2004-UTF32-H.bcmap deleted file mode 100644 index 09eee10..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS2004-UTF32-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS2004-UTF32-V.bcmap b/example/include/pdf/web/cmaps/UniJIS2004-UTF32-V.bcmap deleted file mode 100644 index 6c54600..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS2004-UTF32-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS2004-UTF8-H.bcmap b/example/include/pdf/web/cmaps/UniJIS2004-UTF8-H.bcmap deleted file mode 100644 index 1b1a64f..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS2004-UTF8-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJIS2004-UTF8-V.bcmap b/example/include/pdf/web/cmaps/UniJIS2004-UTF8-V.bcmap deleted file mode 100644 index 994aa9e..0000000 Binary files a/example/include/pdf/web/cmaps/UniJIS2004-UTF8-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJISPro-UCS2-HW-V.bcmap b/example/include/pdf/web/cmaps/UniJISPro-UCS2-HW-V.bcmap deleted file mode 100644 index 643f921..0000000 Binary files a/example/include/pdf/web/cmaps/UniJISPro-UCS2-HW-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJISPro-UCS2-V.bcmap b/example/include/pdf/web/cmaps/UniJISPro-UCS2-V.bcmap deleted file mode 100644 index c148f67..0000000 Binary files a/example/include/pdf/web/cmaps/UniJISPro-UCS2-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJISPro-UTF8-V.bcmap b/example/include/pdf/web/cmaps/UniJISPro-UTF8-V.bcmap deleted file mode 100644 index 1849d80..0000000 Binary files a/example/include/pdf/web/cmaps/UniJISPro-UTF8-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJISX0213-UTF32-H.bcmap b/example/include/pdf/web/cmaps/UniJISX0213-UTF32-H.bcmap deleted file mode 100644 index a83a677..0000000 Binary files a/example/include/pdf/web/cmaps/UniJISX0213-UTF32-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJISX0213-UTF32-V.bcmap b/example/include/pdf/web/cmaps/UniJISX0213-UTF32-V.bcmap deleted file mode 100644 index f527248..0000000 Binary files a/example/include/pdf/web/cmaps/UniJISX0213-UTF32-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJISX02132004-UTF32-H.bcmap b/example/include/pdf/web/cmaps/UniJISX02132004-UTF32-H.bcmap deleted file mode 100644 index e1a988d..0000000 Binary files a/example/include/pdf/web/cmaps/UniJISX02132004-UTF32-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniJISX02132004-UTF32-V.bcmap b/example/include/pdf/web/cmaps/UniJISX02132004-UTF32-V.bcmap deleted file mode 100644 index 47e054a..0000000 Binary files a/example/include/pdf/web/cmaps/UniJISX02132004-UTF32-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UCS2-H.bcmap b/example/include/pdf/web/cmaps/UniKS-UCS2-H.bcmap deleted file mode 100644 index b5b9485..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UCS2-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UCS2-V.bcmap b/example/include/pdf/web/cmaps/UniKS-UCS2-V.bcmap deleted file mode 100644 index 026adca..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UCS2-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UTF16-H.bcmap b/example/include/pdf/web/cmaps/UniKS-UTF16-H.bcmap deleted file mode 100644 index fd4e66e..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UTF16-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UTF16-V.bcmap b/example/include/pdf/web/cmaps/UniKS-UTF16-V.bcmap deleted file mode 100644 index 075efb7..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UTF16-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UTF32-H.bcmap b/example/include/pdf/web/cmaps/UniKS-UTF32-H.bcmap deleted file mode 100644 index 769d214..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UTF32-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UTF32-V.bcmap b/example/include/pdf/web/cmaps/UniKS-UTF32-V.bcmap deleted file mode 100644 index bdab208..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UTF32-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UTF8-H.bcmap b/example/include/pdf/web/cmaps/UniKS-UTF8-H.bcmap deleted file mode 100644 index 6ff8674..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UTF8-H.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/UniKS-UTF8-V.bcmap b/example/include/pdf/web/cmaps/UniKS-UTF8-V.bcmap deleted file mode 100644 index 8dfa76a..0000000 Binary files a/example/include/pdf/web/cmaps/UniKS-UTF8-V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/V.bcmap b/example/include/pdf/web/cmaps/V.bcmap deleted file mode 100644 index fdec990..0000000 Binary files a/example/include/pdf/web/cmaps/V.bcmap and /dev/null differ diff --git a/example/include/pdf/web/cmaps/WP-Symbol.bcmap b/example/include/pdf/web/cmaps/WP-Symbol.bcmap deleted file mode 100644 index 46729bb..0000000 Binary files a/example/include/pdf/web/cmaps/WP-Symbol.bcmap and /dev/null differ diff --git a/example/include/pdf/web/viewer.js b/example/include/pdf/web/viewer.js deleted file mode 100644 index 1e8cd8e..0000000 --- a/example/include/pdf/web/viewer.js +++ /dev/null @@ -1,10192 +0,0 @@ -/* Copyright 2017 Mozilla Foundation - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -/******/ (function(modules) { // webpackBootstrap -/******/ // The module cache -/******/ var installedModules = {}; -/******/ -/******/ // The require function -/******/ function __webpack_require__(moduleId) { -/******/ -/******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) { -/******/ return installedModules[moduleId].exports; -/******/ } -/******/ // Create a new module (and put it into the cache) -/******/ var module = installedModules[moduleId] = { -/******/ i: moduleId, -/******/ l: false, -/******/ exports: {} -/******/ }; -/******/ -/******/ // Execute the module function -/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); -/******/ -/******/ // Flag the module as loaded -/******/ module.l = true; -/******/ -/******/ // Return the exports of the module -/******/ return module.exports; -/******/ } -/******/ -/******/ -/******/ // expose the modules object (__webpack_modules__) -/******/ __webpack_require__.m = modules; -/******/ -/******/ // expose the module cache -/******/ __webpack_require__.c = installedModules; -/******/ -/******/ // identity function for calling harmony imports with the correct context -/******/ __webpack_require__.i = function(value) { return value; }; -/******/ -/******/ // define getter function for harmony exports -/******/ __webpack_require__.d = function(exports, name, getter) { -/******/ if(!__webpack_require__.o(exports, name)) { -/******/ Object.defineProperty(exports, name, { -/******/ configurable: false, -/******/ enumerable: true, -/******/ get: getter -/******/ }); -/******/ } -/******/ }; -/******/ -/******/ // getDefaultExport function for compatibility with non-harmony modules -/******/ __webpack_require__.n = function(module) { -/******/ var getter = module && module.__esModule ? -/******/ function getDefault() { return module['default']; } : -/******/ function getModuleExports() { return module; }; -/******/ __webpack_require__.d(getter, 'a', getter); -/******/ return getter; -/******/ }; -/******/ -/******/ // Object.prototype.hasOwnProperty.call -/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; -/******/ -/******/ // __webpack_public_path__ -/******/ __webpack_require__.p = ""; -/******/ -/******/ // Load entry module and return exports -/******/ return __webpack_require__(__webpack_require__.s = 33); -/******/ }) -/************************************************************************/ -/******/ ([ -/* 0 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.localized = exports.animationStarted = exports.normalizeWheelEventDelta = exports.binarySearchFirstItem = exports.watchScroll = exports.scrollIntoView = exports.getOutputScale = exports.approximateFraction = exports.roundToDivide = exports.getVisibleElements = exports.parseQueryString = exports.noContextMenuHandler = exports.getPDFFileNameFromURL = exports.ProgressBar = exports.EventBus = exports.NullL10n = exports.mozL10n = exports.RendererType = exports.cloneObj = exports.VERTICAL_PADDING = exports.SCROLLBAR_PADDING = exports.MAX_AUTO_SCALE = exports.UNKNOWN_SCALE = exports.MAX_SCALE = exports.MIN_SCALE = exports.DEFAULT_SCALE = exports.DEFAULT_SCALE_VALUE = exports.CSS_UNITS = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var CSS_UNITS = 96.0 / 72.0; -var DEFAULT_SCALE_VALUE = 'auto'; -var DEFAULT_SCALE = 1.0; -var MIN_SCALE = 0.25; -var MAX_SCALE = 10.0; -var UNKNOWN_SCALE = 0; -var MAX_AUTO_SCALE = 1.25; -var SCROLLBAR_PADDING = 40; -var VERTICAL_PADDING = 5; -var RendererType = { - CANVAS: 'canvas', - SVG: 'svg' -}; -function formatL10nValue(text, args) { - if (!args) { - return text; - } - return text.replace(/\{\{\s*(\w+)\s*\}\}/g, function (all, name) { - return name in args ? args[name] : '{{' + name + '}}'; - }); -} -var NullL10n = { - get: function get(property, args, fallback) { - return Promise.resolve(formatL10nValue(fallback, args)); - }, - translate: function translate(element) { - return Promise.resolve(); - } -}; -_pdfjsLib.PDFJS.disableFullscreen = _pdfjsLib.PDFJS.disableFullscreen === undefined ? false : _pdfjsLib.PDFJS.disableFullscreen; -_pdfjsLib.PDFJS.useOnlyCssZoom = _pdfjsLib.PDFJS.useOnlyCssZoom === undefined ? false : _pdfjsLib.PDFJS.useOnlyCssZoom; -_pdfjsLib.PDFJS.maxCanvasPixels = _pdfjsLib.PDFJS.maxCanvasPixels === undefined ? 16777216 : _pdfjsLib.PDFJS.maxCanvasPixels; -_pdfjsLib.PDFJS.disableHistory = _pdfjsLib.PDFJS.disableHistory === undefined ? false : _pdfjsLib.PDFJS.disableHistory; -_pdfjsLib.PDFJS.disableTextLayer = _pdfjsLib.PDFJS.disableTextLayer === undefined ? false : _pdfjsLib.PDFJS.disableTextLayer; -_pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom = _pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom === undefined ? false : _pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom; -{ - _pdfjsLib.PDFJS.locale = _pdfjsLib.PDFJS.locale === undefined && typeof navigator !== 'undefined' ? navigator.language : _pdfjsLib.PDFJS.locale; -} -function getOutputScale(ctx) { - var devicePixelRatio = window.devicePixelRatio || 1; - var backingStoreRatio = ctx.webkitBackingStorePixelRatio || ctx.mozBackingStorePixelRatio || ctx.msBackingStorePixelRatio || ctx.oBackingStorePixelRatio || ctx.backingStorePixelRatio || 1; - var pixelRatio = devicePixelRatio / backingStoreRatio; - return { - sx: pixelRatio, - sy: pixelRatio, - scaled: pixelRatio !== 1 - }; -} -function scrollIntoView(element, spot) { - var skipOverflowHiddenElements = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var parent = element.offsetParent; - if (!parent) { - console.error('offsetParent is not set -- cannot scroll'); - return; - } - var offsetY = element.offsetTop + element.clientTop; - var offsetX = element.offsetLeft + element.clientLeft; - while (parent.clientHeight === parent.scrollHeight || skipOverflowHiddenElements && getComputedStyle(parent).overflow === 'hidden') { - if (parent.dataset._scaleY) { - offsetY /= parent.dataset._scaleY; - offsetX /= parent.dataset._scaleX; - } - offsetY += parent.offsetTop; - offsetX += parent.offsetLeft; - parent = parent.offsetParent; - if (!parent) { - return; - } - } - if (spot) { - if (spot.top !== undefined) { - offsetY += spot.top; - } - if (spot.left !== undefined) { - offsetX += spot.left; - parent.scrollLeft = offsetX; - } - } - parent.scrollTop = offsetY; -} -function watchScroll(viewAreaElement, callback) { - var debounceScroll = function debounceScroll(evt) { - if (rAF) { - return; - } - rAF = window.requestAnimationFrame(function viewAreaElementScrolled() { - rAF = null; - var currentY = viewAreaElement.scrollTop; - var lastY = state.lastY; - if (currentY !== lastY) { - state.down = currentY > lastY; - } - state.lastY = currentY; - callback(state); - }); - }; - var state = { - down: true, - lastY: viewAreaElement.scrollTop, - _eventHandler: debounceScroll - }; - var rAF = null; - viewAreaElement.addEventListener('scroll', debounceScroll, true); - return state; -} -function parseQueryString(query) { - var parts = query.split('&'); - var params = Object.create(null); - for (var i = 0, ii = parts.length; i < ii; ++i) { - var param = parts[i].split('='); - var key = param[0].toLowerCase(); - var value = param.length > 1 ? param[1] : null; - params[decodeURIComponent(key)] = decodeURIComponent(value); - } - return params; -} -function binarySearchFirstItem(items, condition) { - var minIndex = 0; - var maxIndex = items.length - 1; - if (items.length === 0 || !condition(items[maxIndex])) { - return items.length; - } - if (condition(items[minIndex])) { - return minIndex; - } - while (minIndex < maxIndex) { - var currentIndex = minIndex + maxIndex >> 1; - var currentItem = items[currentIndex]; - if (condition(currentItem)) { - maxIndex = currentIndex; - } else { - minIndex = currentIndex + 1; - } - } - return minIndex; -} -function approximateFraction(x) { - if (Math.floor(x) === x) { - return [x, 1]; - } - var xinv = 1 / x; - var limit = 8; - if (xinv > limit) { - return [1, limit]; - } else if (Math.floor(xinv) === xinv) { - return [1, xinv]; - } - var x_ = x > 1 ? xinv : x; - var a = 0, - b = 1, - c = 1, - d = 1; - while (true) { - var p = a + c, - q = b + d; - if (q > limit) { - break; - } - if (x_ <= p / q) { - c = p; - d = q; - } else { - a = p; - b = q; - } - } - var result = void 0; - if (x_ - a / b < c / d - x_) { - result = x_ === x ? [a, b] : [b, a]; - } else { - result = x_ === x ? [c, d] : [d, c]; - } - return result; -} -function roundToDivide(x, div) { - var r = x % div; - return r === 0 ? x : Math.round(x - r + div); -} -function getVisibleElements(scrollEl, views) { - var sortByVisibility = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var top = scrollEl.scrollTop, - bottom = top + scrollEl.clientHeight; - var left = scrollEl.scrollLeft, - right = left + scrollEl.clientWidth; - function isElementBottomBelowViewTop(view) { - var element = view.div; - var elementBottom = element.offsetTop + element.clientTop + element.clientHeight; - return elementBottom > top; - } - var visible = [], - view = void 0, - element = void 0; - var currentHeight = void 0, - viewHeight = void 0, - hiddenHeight = void 0, - percentHeight = void 0; - var currentWidth = void 0, - viewWidth = void 0; - var firstVisibleElementInd = views.length === 0 ? 0 : binarySearchFirstItem(views, isElementBottomBelowViewTop); - for (var i = firstVisibleElementInd, ii = views.length; i < ii; i++) { - view = views[i]; - element = view.div; - currentHeight = element.offsetTop + element.clientTop; - viewHeight = element.clientHeight; - if (currentHeight > bottom) { - break; - } - currentWidth = element.offsetLeft + element.clientLeft; - viewWidth = element.clientWidth; - if (currentWidth + viewWidth < left || currentWidth > right) { - continue; - } - hiddenHeight = Math.max(0, top - currentHeight) + Math.max(0, currentHeight + viewHeight - bottom); - percentHeight = (viewHeight - hiddenHeight) * 100 / viewHeight | 0; - visible.push({ - id: view.id, - x: currentWidth, - y: currentHeight, - view: view, - percent: percentHeight - }); - } - var first = visible[0]; - var last = visible[visible.length - 1]; - if (sortByVisibility) { - visible.sort(function (a, b) { - var pc = a.percent - b.percent; - if (Math.abs(pc) > 0.001) { - return -pc; - } - return a.id - b.id; - }); - } - return { - first: first, - last: last, - views: visible - }; -} -function noContextMenuHandler(evt) { - evt.preventDefault(); -} -function isDataSchema(url) { - var i = 0, - ii = url.length; - while (i < ii && url[i].trim() === '') { - i++; - } - return url.substr(i, 5).toLowerCase() === 'data:'; -} -function getPDFFileNameFromURL(url) { - var defaultFilename = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'document.pdf'; - - if (isDataSchema(url)) { - console.warn('getPDFFileNameFromURL: ' + 'ignoring "data:" URL for performance reasons.'); - return defaultFilename; - } - var reURI = /^(?:(?:[^:]+:)?\/\/[^\/]+)?([^?#]*)(\?[^#]*)?(#.*)?$/; - var reFilename = /[^\/?#=]+\.pdf\b(?!.*\.pdf\b)/i; - var splitURI = reURI.exec(url); - var suggestedFilename = reFilename.exec(splitURI[1]) || reFilename.exec(splitURI[2]) || reFilename.exec(splitURI[3]); - if (suggestedFilename) { - suggestedFilename = suggestedFilename[0]; - if (suggestedFilename.indexOf('%') !== -1) { - try { - suggestedFilename = reFilename.exec(decodeURIComponent(suggestedFilename))[0]; - } catch (ex) {} - } - } - return suggestedFilename || defaultFilename; -} -function normalizeWheelEventDelta(evt) { - var delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY); - var angle = Math.atan2(evt.deltaY, evt.deltaX); - if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) { - delta = -delta; - } - var MOUSE_DOM_DELTA_PIXEL_MODE = 0; - var MOUSE_DOM_DELTA_LINE_MODE = 1; - var MOUSE_PIXELS_PER_LINE = 30; - var MOUSE_LINES_PER_PAGE = 30; - if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) { - delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE; - } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) { - delta /= MOUSE_LINES_PER_PAGE; - } - return delta; -} -function cloneObj(obj) { - var result = Object.create(null); - for (var i in obj) { - if (Object.prototype.hasOwnProperty.call(obj, i)) { - result[i] = obj[i]; - } - } - return result; -} -var animationStarted = new Promise(function (resolve) { - window.requestAnimationFrame(resolve); -}); -var mozL10n = void 0; -var localized = Promise.resolve(); - -var EventBus = function () { - function EventBus() { - _classCallCheck(this, EventBus); - - this._listeners = Object.create(null); - } - - _createClass(EventBus, [{ - key: 'on', - value: function on(eventName, listener) { - var eventListeners = this._listeners[eventName]; - if (!eventListeners) { - eventListeners = []; - this._listeners[eventName] = eventListeners; - } - eventListeners.push(listener); - } - }, { - key: 'off', - value: function off(eventName, listener) { - var eventListeners = this._listeners[eventName]; - var i = void 0; - if (!eventListeners || (i = eventListeners.indexOf(listener)) < 0) { - return; - } - eventListeners.splice(i, 1); - } - }, { - key: 'dispatch', - value: function dispatch(eventName) { - var eventListeners = this._listeners[eventName]; - if (!eventListeners || eventListeners.length === 0) { - return; - } - var args = Array.prototype.slice.call(arguments, 1); - eventListeners.slice(0).forEach(function (listener) { - listener.apply(null, args); - }); - } - }]); - - return EventBus; -}(); - -function clamp(v, min, max) { - return Math.min(Math.max(v, min), max); -} - -var ProgressBar = function () { - function ProgressBar(id) { - var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}, - height = _ref.height, - width = _ref.width, - units = _ref.units; - - _classCallCheck(this, ProgressBar); - - this.visible = true; - this.div = document.querySelector(id + ' .progress'); - this.bar = this.div.parentNode; - this.height = height || 100; - this.width = width || 100; - this.units = units || '%'; - this.div.style.height = this.height + this.units; - this.percent = 0; - } - - _createClass(ProgressBar, [{ - key: '_updateBar', - value: function _updateBar() { - if (this._indeterminate) { - this.div.classList.add('indeterminate'); - this.div.style.width = this.width + this.units; - return; - } - this.div.classList.remove('indeterminate'); - var progressSize = this.width * this._percent / 100; - this.div.style.width = progressSize + this.units; - } - }, { - key: 'setWidth', - value: function setWidth(viewer) { - if (!viewer) { - return; - } - var container = viewer.parentNode; - var scrollbarWidth = container.offsetWidth - viewer.offsetWidth; - if (scrollbarWidth > 0) { - this.bar.setAttribute('style', 'width: calc(100% - ' + scrollbarWidth + 'px);'); - } - } - }, { - key: 'hide', - value: function hide() { - if (!this.visible) { - return; - } - this.visible = false; - this.bar.classList.add('hidden'); - document.body.classList.remove('loadingInProgress'); - } - }, { - key: 'show', - value: function show() { - if (this.visible) { - return; - } - this.visible = true; - document.body.classList.add('loadingInProgress'); - this.bar.classList.remove('hidden'); - } - }, { - key: 'percent', - get: function get() { - return this._percent; - }, - set: function set(val) { - this._indeterminate = isNaN(val); - this._percent = clamp(val, 0, 100); - this._updateBar(); - } - }]); - - return ProgressBar; -}(); - -exports.CSS_UNITS = CSS_UNITS; -exports.DEFAULT_SCALE_VALUE = DEFAULT_SCALE_VALUE; -exports.DEFAULT_SCALE = DEFAULT_SCALE; -exports.MIN_SCALE = MIN_SCALE; -exports.MAX_SCALE = MAX_SCALE; -exports.UNKNOWN_SCALE = UNKNOWN_SCALE; -exports.MAX_AUTO_SCALE = MAX_AUTO_SCALE; -exports.SCROLLBAR_PADDING = SCROLLBAR_PADDING; -exports.VERTICAL_PADDING = VERTICAL_PADDING; -exports.cloneObj = cloneObj; -exports.RendererType = RendererType; -exports.mozL10n = mozL10n; -exports.NullL10n = NullL10n; -exports.EventBus = EventBus; -exports.ProgressBar = ProgressBar; -exports.getPDFFileNameFromURL = getPDFFileNameFromURL; -exports.noContextMenuHandler = noContextMenuHandler; -exports.parseQueryString = parseQueryString; -exports.getVisibleElements = getVisibleElements; -exports.roundToDivide = roundToDivide; -exports.approximateFraction = approximateFraction; -exports.getOutputScale = getOutputScale; -exports.scrollIntoView = scrollIntoView; -exports.watchScroll = watchScroll; -exports.binarySearchFirstItem = binarySearchFirstItem; -exports.normalizeWheelEventDelta = normalizeWheelEventDelta; -exports.animationStarted = animationStarted; -exports.localized = localized; - -/***/ }), -/* 1 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var pdfjsLib; -if (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) { - pdfjsLib = window['pdfjs-dist/build/pdf']; -} else { - pdfjsLib = require('../build/pdf.js'); -} -module.exports = pdfjsLib; - -/***/ }), -/* 2 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.getGlobalEventBus = exports.attachDOMEventsToEventBus = undefined; - -var _ui_utils = __webpack_require__(0); - -function attachDOMEventsToEventBus(eventBus) { - eventBus.on('documentload', function () { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('documentload', true, true, {}); - window.dispatchEvent(event); - }); - eventBus.on('pagerendered', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('pagerendered', true, true, { - pageNumber: evt.pageNumber, - cssTransform: evt.cssTransform - }); - evt.source.div.dispatchEvent(event); - }); - eventBus.on('textlayerrendered', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('textlayerrendered', true, true, { pageNumber: evt.pageNumber }); - evt.source.textLayerDiv.dispatchEvent(event); - }); - eventBus.on('pagechange', function (evt) { - var event = document.createEvent('UIEvents'); - event.initUIEvent('pagechange', true, true, window, 0); - event.pageNumber = evt.pageNumber; - evt.source.container.dispatchEvent(event); - }); - eventBus.on('pagesinit', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('pagesinit', true, true, null); - evt.source.container.dispatchEvent(event); - }); - eventBus.on('pagesloaded', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('pagesloaded', true, true, { pagesCount: evt.pagesCount }); - evt.source.container.dispatchEvent(event); - }); - eventBus.on('scalechange', function (evt) { - var event = document.createEvent('UIEvents'); - event.initUIEvent('scalechange', true, true, window, 0); - event.scale = evt.scale; - event.presetValue = evt.presetValue; - evt.source.container.dispatchEvent(event); - }); - eventBus.on('updateviewarea', function (evt) { - var event = document.createEvent('UIEvents'); - event.initUIEvent('updateviewarea', true, true, window, 0); - event.location = evt.location; - evt.source.container.dispatchEvent(event); - }); - eventBus.on('find', function (evt) { - if (evt.source === window) { - return; - } - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('find' + evt.type, true, true, { - query: evt.query, - phraseSearch: evt.phraseSearch, - caseSensitive: evt.caseSensitive, - highlightAll: evt.highlightAll, - findPrevious: evt.findPrevious - }); - window.dispatchEvent(event); - }); - eventBus.on('attachmentsloaded', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('attachmentsloaded', true, true, { attachmentsCount: evt.attachmentsCount }); - evt.source.container.dispatchEvent(event); - }); - eventBus.on('sidebarviewchanged', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('sidebarviewchanged', true, true, { view: evt.view }); - evt.source.outerContainer.dispatchEvent(event); - }); - eventBus.on('pagemode', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('pagemode', true, true, { mode: evt.mode }); - evt.source.pdfViewer.container.dispatchEvent(event); - }); - eventBus.on('namedaction', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('namedaction', true, true, { action: evt.action }); - evt.source.pdfViewer.container.dispatchEvent(event); - }); - eventBus.on('presentationmodechanged', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('presentationmodechanged', true, true, { - active: evt.active, - switchInProgress: evt.switchInProgress - }); - window.dispatchEvent(event); - }); - eventBus.on('outlineloaded', function (evt) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent('outlineloaded', true, true, { outlineCount: evt.outlineCount }); - evt.source.container.dispatchEvent(event); - }); -} -var globalEventBus = null; -function getGlobalEventBus() { - if (globalEventBus) { - return globalEventBus; - } - globalEventBus = new _ui_utils.EventBus(); - attachDOMEventsToEventBus(globalEventBus); - return globalEventBus; -} -exports.attachDOMEventsToEventBus = attachDOMEventsToEventBus; -exports.getGlobalEventBus = getGlobalEventBus; - -/***/ }), -/* 3 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var CLEANUP_TIMEOUT = 30000; -var RenderingStates = { - INITIAL: 0, - RUNNING: 1, - PAUSED: 2, - FINISHED: 3 -}; - -var PDFRenderingQueue = function () { - function PDFRenderingQueue() { - _classCallCheck(this, PDFRenderingQueue); - - this.pdfViewer = null; - this.pdfThumbnailViewer = null; - this.onIdle = null; - this.highestPriorityPage = null; - this.idleTimeout = null; - this.printing = false; - this.isThumbnailViewEnabled = false; - } - - _createClass(PDFRenderingQueue, [{ - key: "setViewer", - value: function setViewer(pdfViewer) { - this.pdfViewer = pdfViewer; - } - }, { - key: "setThumbnailViewer", - value: function setThumbnailViewer(pdfThumbnailViewer) { - this.pdfThumbnailViewer = pdfThumbnailViewer; - } - }, { - key: "isHighestPriority", - value: function isHighestPriority(view) { - return this.highestPriorityPage === view.renderingId; - } - }, { - key: "renderHighestPriority", - value: function renderHighestPriority(currentlyVisiblePages) { - if (this.idleTimeout) { - clearTimeout(this.idleTimeout); - this.idleTimeout = null; - } - if (this.pdfViewer.forceRendering(currentlyVisiblePages)) { - return; - } - if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) { - if (this.pdfThumbnailViewer.forceRendering()) { - return; - } - } - if (this.printing) { - return; - } - if (this.onIdle) { - this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT); - } - } - }, { - key: "getHighestPriority", - value: function getHighestPriority(visible, views, scrolledDown) { - var visibleViews = visible.views; - var numVisible = visibleViews.length; - if (numVisible === 0) { - return false; - } - for (var i = 0; i < numVisible; ++i) { - var view = visibleViews[i].view; - if (!this.isViewFinished(view)) { - return view; - } - } - if (scrolledDown) { - var nextPageIndex = visible.last.id; - if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) { - return views[nextPageIndex]; - } - } else { - var previousPageIndex = visible.first.id - 2; - if (views[previousPageIndex] && !this.isViewFinished(views[previousPageIndex])) { - return views[previousPageIndex]; - } - } - return null; - } - }, { - key: "isViewFinished", - value: function isViewFinished(view) { - return view.renderingState === RenderingStates.FINISHED; - } - }, { - key: "renderView", - value: function renderView(view) { - var _this = this; - - switch (view.renderingState) { - case RenderingStates.FINISHED: - return false; - case RenderingStates.PAUSED: - this.highestPriorityPage = view.renderingId; - view.resume(); - break; - case RenderingStates.RUNNING: - this.highestPriorityPage = view.renderingId; - break; - case RenderingStates.INITIAL: - this.highestPriorityPage = view.renderingId; - var continueRendering = function continueRendering() { - _this.renderHighestPriority(); - }; - view.draw().then(continueRendering, continueRendering); - break; - } - return true; - } - }]); - - return PDFRenderingQueue; -}(); - -exports.RenderingStates = RenderingStates; -exports.PDFRenderingQueue = PDFRenderingQueue; - -/***/ }), -/* 4 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFPrintServiceFactory = exports.DefaultExternalServices = exports.PDFViewerApplication = undefined; - -var _slicedToArray = function () { function sliceIterator(arr, i) { 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"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _ui_utils = __webpack_require__(0); - -var _pdfjsLib = __webpack_require__(1); - -var _pdf_cursor_tools = __webpack_require__(6); - -var _pdf_rendering_queue = __webpack_require__(3); - -var _pdf_sidebar = __webpack_require__(24); - -var _pdf_viewer = __webpack_require__(27); - -var _dom_events = __webpack_require__(2); - -var _overlay_manager = __webpack_require__(15); - -var _password_prompt = __webpack_require__(16); - -var _pdf_attachment_viewer = __webpack_require__(17); - -var _pdf_document_properties = __webpack_require__(18); - -var _pdf_find_bar = __webpack_require__(19); - -var _pdf_find_controller = __webpack_require__(7); - -var _pdf_history = __webpack_require__(20); - -var _pdf_link_service = __webpack_require__(5); - -var _pdf_outline_viewer = __webpack_require__(21); - -var _pdf_presentation_mode = __webpack_require__(23); - -var _pdf_thumbnail_viewer = __webpack_require__(26); - -var _secondary_toolbar = __webpack_require__(29); - -var _toolbar = __webpack_require__(31); - -var _view_history = __webpack_require__(32); - -var DEFAULT_SCALE_DELTA = 1.1; -var DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000; -function configure(PDFJS) { - PDFJS.imageResourcesPath = './images/'; - PDFJS.workerSrc = '../build/pdf.worker.js'; - PDFJS.cMapUrl = '../web/cmaps/'; - PDFJS.cMapPacked = true; -} -var DefaultExternalServices = { - updateFindControlState: function updateFindControlState(data) {}, - initPassiveLoading: function initPassiveLoading(callbacks) {}, - fallback: function fallback(data, callback) {}, - reportTelemetry: function reportTelemetry(data) {}, - createDownloadManager: function createDownloadManager() { - throw new Error('Not implemented: createDownloadManager'); - }, - createPreferences: function createPreferences() { - throw new Error('Not implemented: createPreferences'); - }, - createL10n: function createL10n() { - throw new Error('Not implemented: createL10n'); - }, - - supportsIntegratedFind: false, - supportsDocumentFonts: true, - supportsDocumentColors: true, - supportedMouseWheelZoomModifierKeys: { - ctrlKey: true, - metaKey: true - } -}; -var PDFViewerApplication = { - initialBookmark: document.location.hash.substring(1), - initialDestination: null, - initialized: false, - fellback: false, - appConfig: null, - pdfDocument: null, - pdfLoadingTask: null, - printService: null, - pdfViewer: null, - pdfThumbnailViewer: null, - pdfRenderingQueue: null, - pdfPresentationMode: null, - pdfDocumentProperties: null, - pdfLinkService: null, - pdfHistory: null, - pdfSidebar: null, - pdfOutlineViewer: null, - pdfAttachmentViewer: null, - pdfCursorTools: null, - store: null, - downloadManager: null, - overlayManager: null, - preferences: null, - toolbar: null, - secondaryToolbar: null, - eventBus: null, - l10n: null, - isInitialViewSet: false, - downloadComplete: false, - viewerPrefs: { - sidebarViewOnLoad: _pdf_sidebar.SidebarView.NONE, - pdfBugEnabled: false, - showPreviousViewOnLoad: true, - defaultZoomValue: '', - disablePageMode: false, - disablePageLabels: false, - renderer: 'canvas', - enhanceTextSelection: false, - renderInteractiveForms: false, - enablePrintAutoRotate: false - }, - isViewerEmbedded: window.parent !== window, - url: '', - baseUrl: '', - externalServices: DefaultExternalServices, - _boundEvents: {}, - initialize: function initialize(appConfig) { - var _this = this; - - this.preferences = this.externalServices.createPreferences(); - configure(_pdfjsLib.PDFJS); - this.appConfig = appConfig; - return this._readPreferences().then(function () { - return _this._initializeL10n(); - }).then(function () { - return _this._initializeViewerComponents(); - }).then(function () { - _this.bindEvents(); - _this.bindWindowEvents(); - var appContainer = appConfig.appContainer || document.documentElement; - _this.l10n.translate(appContainer).then(function () { - _this.eventBus.dispatch('localized'); - }); - if (_this.isViewerEmbedded && !_pdfjsLib.PDFJS.isExternalLinkTargetSet()) { - _pdfjsLib.PDFJS.externalLinkTarget = _pdfjsLib.PDFJS.LinkTarget.TOP; - } - _this.initialized = true; - }); - }, - _readPreferences: function _readPreferences() { - var preferences = this.preferences, - viewerPrefs = this.viewerPrefs; - - return Promise.all([preferences.get('enableWebGL').then(function resolved(value) { - _pdfjsLib.PDFJS.disableWebGL = !value; - }), preferences.get('sidebarViewOnLoad').then(function resolved(value) { - viewerPrefs['sidebarViewOnLoad'] = value; - }), preferences.get('pdfBugEnabled').then(function resolved(value) { - viewerPrefs['pdfBugEnabled'] = value; - }), preferences.get('showPreviousViewOnLoad').then(function resolved(value) { - viewerPrefs['showPreviousViewOnLoad'] = value; - }), preferences.get('defaultZoomValue').then(function resolved(value) { - viewerPrefs['defaultZoomValue'] = value; - }), preferences.get('enhanceTextSelection').then(function resolved(value) { - viewerPrefs['enhanceTextSelection'] = value; - }), preferences.get('disableTextLayer').then(function resolved(value) { - if (_pdfjsLib.PDFJS.disableTextLayer === true) { - return; - } - _pdfjsLib.PDFJS.disableTextLayer = value; - }), preferences.get('disableRange').then(function resolved(value) { - if (_pdfjsLib.PDFJS.disableRange === true) { - return; - } - _pdfjsLib.PDFJS.disableRange = value; - }), preferences.get('disableStream').then(function resolved(value) { - if (_pdfjsLib.PDFJS.disableStream === true) { - return; - } - _pdfjsLib.PDFJS.disableStream = value; - }), preferences.get('disableAutoFetch').then(function resolved(value) { - _pdfjsLib.PDFJS.disableAutoFetch = value; - }), preferences.get('disableFontFace').then(function resolved(value) { - if (_pdfjsLib.PDFJS.disableFontFace === true) { - return; - } - _pdfjsLib.PDFJS.disableFontFace = value; - }), preferences.get('useOnlyCssZoom').then(function resolved(value) { - _pdfjsLib.PDFJS.useOnlyCssZoom = value; - }), preferences.get('externalLinkTarget').then(function resolved(value) { - if (_pdfjsLib.PDFJS.isExternalLinkTargetSet()) { - return; - } - _pdfjsLib.PDFJS.externalLinkTarget = value; - }), preferences.get('renderer').then(function resolved(value) { - viewerPrefs['renderer'] = value; - }), preferences.get('renderInteractiveForms').then(function resolved(value) { - viewerPrefs['renderInteractiveForms'] = value; - }), preferences.get('disablePageMode').then(function resolved(value) { - viewerPrefs['disablePageMode'] = value; - }), preferences.get('disablePageLabels').then(function resolved(value) { - viewerPrefs['disablePageLabels'] = value; - }), preferences.get('enablePrintAutoRotate').then(function resolved(value) { - viewerPrefs['enablePrintAutoRotate'] = value; - })]).catch(function (reason) {}); - }, - _initializeL10n: function _initializeL10n() { - if (this.viewerPrefs['pdfBugEnabled']) { - var hash = document.location.hash.substring(1); - var hashParams = (0, _ui_utils.parseQueryString)(hash); - if ('locale' in hashParams) { - _pdfjsLib.PDFJS.locale = hashParams['locale']; - } - } - this.l10n = this.externalServices.createL10n(); - return this.l10n.getDirection().then(function (dir) { - document.getElementsByTagName('html')[0].dir = dir; - }); - }, - _initializeViewerComponents: function _initializeViewerComponents() { - var _this2 = this; - - var appConfig = this.appConfig; - return new Promise(function (resolve, reject) { - _this2.overlayManager = new _overlay_manager.OverlayManager(); - var eventBus = appConfig.eventBus || (0, _dom_events.getGlobalEventBus)(); - _this2.eventBus = eventBus; - var pdfRenderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); - pdfRenderingQueue.onIdle = _this2.cleanup.bind(_this2); - _this2.pdfRenderingQueue = pdfRenderingQueue; - var pdfLinkService = new _pdf_link_service.PDFLinkService({ eventBus: eventBus }); - _this2.pdfLinkService = pdfLinkService; - var downloadManager = _this2.externalServices.createDownloadManager(); - _this2.downloadManager = downloadManager; - var container = appConfig.mainContainer; - var viewer = appConfig.viewerContainer; - _this2.pdfViewer = new _pdf_viewer.PDFViewer({ - container: container, - viewer: viewer, - eventBus: eventBus, - renderingQueue: pdfRenderingQueue, - linkService: pdfLinkService, - downloadManager: downloadManager, - renderer: _this2.viewerPrefs['renderer'], - l10n: _this2.l10n, - enhanceTextSelection: _this2.viewerPrefs['enhanceTextSelection'], - renderInteractiveForms: _this2.viewerPrefs['renderInteractiveForms'], - enablePrintAutoRotate: _this2.viewerPrefs['enablePrintAutoRotate'] - }); - pdfRenderingQueue.setViewer(_this2.pdfViewer); - pdfLinkService.setViewer(_this2.pdfViewer); - var thumbnailContainer = appConfig.sidebar.thumbnailView; - _this2.pdfThumbnailViewer = new _pdf_thumbnail_viewer.PDFThumbnailViewer({ - container: thumbnailContainer, - renderingQueue: pdfRenderingQueue, - linkService: pdfLinkService, - l10n: _this2.l10n - }); - pdfRenderingQueue.setThumbnailViewer(_this2.pdfThumbnailViewer); - _this2.pdfHistory = new _pdf_history.PDFHistory({ - linkService: pdfLinkService, - eventBus: eventBus - }); - pdfLinkService.setHistory(_this2.pdfHistory); - _this2.findController = new _pdf_find_controller.PDFFindController({ pdfViewer: _this2.pdfViewer }); - _this2.findController.onUpdateResultsCount = function (matchCount) { - if (_this2.supportsIntegratedFind) { - return; - } - _this2.findBar.updateResultsCount(matchCount); - }; - _this2.findController.onUpdateState = function (state, previous, matchCount) { - if (_this2.supportsIntegratedFind) { - _this2.externalServices.updateFindControlState({ - result: state, - findPrevious: previous - }); - } else { - _this2.findBar.updateUIState(state, previous, matchCount); - } - }; - _this2.pdfViewer.setFindController(_this2.findController); - var findBarConfig = Object.create(appConfig.findBar); - findBarConfig.findController = _this2.findController; - findBarConfig.eventBus = eventBus; - _this2.findBar = new _pdf_find_bar.PDFFindBar(findBarConfig, _this2.l10n); - _this2.pdfDocumentProperties = new _pdf_document_properties.PDFDocumentProperties(appConfig.documentProperties, _this2.overlayManager, _this2.l10n); - _this2.pdfCursorTools = new _pdf_cursor_tools.PDFCursorTools({ - container: container, - eventBus: eventBus, - preferences: _this2.preferences - }); - _this2.toolbar = new _toolbar.Toolbar(appConfig.toolbar, container, eventBus, _this2.l10n); - _this2.secondaryToolbar = new _secondary_toolbar.SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus); - if (_this2.supportsFullscreen) { - _this2.pdfPresentationMode = new _pdf_presentation_mode.PDFPresentationMode({ - container: container, - viewer: viewer, - pdfViewer: _this2.pdfViewer, - eventBus: eventBus, - contextMenuItems: appConfig.fullscreen - }); - } - _this2.passwordPrompt = new _password_prompt.PasswordPrompt(appConfig.passwordOverlay, _this2.overlayManager, _this2.l10n); - _this2.pdfOutlineViewer = new _pdf_outline_viewer.PDFOutlineViewer({ - container: appConfig.sidebar.outlineView, - eventBus: eventBus, - linkService: pdfLinkService - }); - _this2.pdfAttachmentViewer = new _pdf_attachment_viewer.PDFAttachmentViewer({ - container: appConfig.sidebar.attachmentsView, - eventBus: eventBus, - downloadManager: downloadManager - }); - var sidebarConfig = Object.create(appConfig.sidebar); - sidebarConfig.pdfViewer = _this2.pdfViewer; - sidebarConfig.pdfThumbnailViewer = _this2.pdfThumbnailViewer; - sidebarConfig.pdfOutlineViewer = _this2.pdfOutlineViewer; - sidebarConfig.eventBus = eventBus; - _this2.pdfSidebar = new _pdf_sidebar.PDFSidebar(sidebarConfig, _this2.l10n); - _this2.pdfSidebar.onToggled = _this2.forceRendering.bind(_this2); - resolve(undefined); - }); - }, - run: function run(config) { - this.initialize(config).then(webViewerInitialized); - }, - zoomIn: function zoomIn(ticks) { - var newScale = this.pdfViewer.currentScale; - do { - newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2); - newScale = Math.ceil(newScale * 10) / 10; - newScale = Math.min(_ui_utils.MAX_SCALE, newScale); - } while (--ticks > 0 && newScale < _ui_utils.MAX_SCALE); - this.pdfViewer.currentScaleValue = newScale; - }, - zoomOut: function zoomOut(ticks) { - var newScale = this.pdfViewer.currentScale; - do { - newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2); - newScale = Math.floor(newScale * 10) / 10; - newScale = Math.max(_ui_utils.MIN_SCALE, newScale); - } while (--ticks > 0 && newScale > _ui_utils.MIN_SCALE); - this.pdfViewer.currentScaleValue = newScale; - }, - - get pagesCount() { - return this.pdfDocument ? this.pdfDocument.numPages : 0; - }, - get pageRotation() { - return this.pdfViewer.pagesRotation; - }, - set page(val) { - this.pdfViewer.currentPageNumber = val; - }, - get page() { - return this.pdfViewer.currentPageNumber; - }, - get printing() { - return !!this.printService; - }, - get supportsPrinting() { - return PDFPrintServiceFactory.instance.supportsPrinting; - }, - get supportsFullscreen() { - var support = void 0; - var doc = document.documentElement; - support = !!(doc.requestFullscreen || doc.mozRequestFullScreen || doc.webkitRequestFullScreen || doc.msRequestFullscreen); - if (document.fullscreenEnabled === false || document.mozFullScreenEnabled === false || document.webkitFullscreenEnabled === false || document.msFullscreenEnabled === false) { - support = false; - } - if (support && _pdfjsLib.PDFJS.disableFullscreen === true) { - support = false; - } - return (0, _pdfjsLib.shadow)(this, 'supportsFullscreen', support); - }, - get supportsIntegratedFind() { - return this.externalServices.supportsIntegratedFind; - }, - get supportsDocumentFonts() { - return this.externalServices.supportsDocumentFonts; - }, - get supportsDocumentColors() { - return this.externalServices.supportsDocumentColors; - }, - get loadingBar() { - var bar = new _ui_utils.ProgressBar('#loadingBar'); - return (0, _pdfjsLib.shadow)(this, 'loadingBar', bar); - }, - get supportedMouseWheelZoomModifierKeys() { - return this.externalServices.supportedMouseWheelZoomModifierKeys; - }, - initPassiveLoading: function initPassiveLoading() { - throw new Error('Not implemented: initPassiveLoading'); - }, - setTitleUsingUrl: function setTitleUsingUrl(url) { - this.url = url; - this.baseUrl = url.split('#')[0]; - var title = (0, _ui_utils.getPDFFileNameFromURL)(url, ''); - if (!title) { - try { - title = decodeURIComponent((0, _pdfjsLib.getFilenameFromUrl)(url)) || url; - } catch (ex) { - title = url; - } - } - this.setTitle(title); - }, - setTitle: function setTitle(title) { - if (this.isViewerEmbedded) { - return; - } - document.title = title; - }, - close: function close() { - var errorWrapper = this.appConfig.errorWrapper.container; - errorWrapper.setAttribute('hidden', 'true'); - if (!this.pdfLoadingTask) { - return Promise.resolve(); - } - var promise = this.pdfLoadingTask.destroy(); - this.pdfLoadingTask = null; - if (this.pdfDocument) { - this.pdfDocument = null; - this.pdfThumbnailViewer.setDocument(null); - this.pdfViewer.setDocument(null); - this.pdfLinkService.setDocument(null, null); - this.pdfDocumentProperties.setDocument(null, null); - } - this.store = null; - this.isInitialViewSet = false; - this.downloadComplete = false; - this.pdfSidebar.reset(); - this.pdfOutlineViewer.reset(); - this.pdfAttachmentViewer.reset(); - this.findController.reset(); - this.findBar.reset(); - this.toolbar.reset(); - this.secondaryToolbar.reset(); - if (typeof PDFBug !== 'undefined') { - PDFBug.cleanup(); - } - return promise; - }, - open: function open(file, args) { - var _this3 = this; - - if (arguments.length > 2 || typeof args === 'number') { - return Promise.reject(new Error('Call of open() with obsolete signature.')); - } - if (this.pdfLoadingTask) { - return this.close().then(function () { - _this3.preferences.reload(); - return _this3.open(file, args); - }); - } - var parameters = Object.create(null), - scale = void 0; - if (typeof file === 'string') { - this.setTitleUsingUrl(file); - parameters.url = file; - } else if (file && 'byteLength' in file) { - parameters.data = file; - } else if (file.url && file.originalUrl) { - this.setTitleUsingUrl(file.originalUrl); - parameters.url = file.url; - } - if (args) { - for (var prop in args) { - parameters[prop] = args[prop]; - } - if (args.scale) { - scale = args.scale; - } - if (args.length) { - this.pdfDocumentProperties.setFileSize(args.length); - } - } - var loadingTask = (0, _pdfjsLib.getDocument)(parameters); - this.pdfLoadingTask = loadingTask; - loadingTask.onPassword = function (updateCallback, reason) { - _this3.passwordPrompt.setUpdateCallback(updateCallback, reason); - _this3.passwordPrompt.open(); - }; - loadingTask.onProgress = function (_ref) { - var loaded = _ref.loaded, - total = _ref.total; - - _this3.progress(loaded / total); - }; - loadingTask.onUnsupportedFeature = this.fallback.bind(this); - return loadingTask.promise.then(function (pdfDocument) { - _this3.load(pdfDocument, scale); - }, function (exception) { - var message = exception && exception.message; - var loadingErrorMessage = void 0; - if (exception instanceof _pdfjsLib.InvalidPDFException) { - loadingErrorMessage = _this3.l10n.get('invalid_file_error', null, 'Invalid or corrupted PDF file.'); - } else if (exception instanceof _pdfjsLib.MissingPDFException) { - loadingErrorMessage = _this3.l10n.get('missing_file_error', null, 'Missing PDF file.'); - } else if (exception instanceof _pdfjsLib.UnexpectedResponseException) { - loadingErrorMessage = _this3.l10n.get('unexpected_response_error', null, 'Unexpected server response.'); - } else { - loadingErrorMessage = _this3.l10n.get('loading_error', null, 'An error occurred while loading the PDF.'); - } - return loadingErrorMessage.then(function (msg) { - _this3.error(msg, { message: message }); - throw new Error(msg); - }); - }); - }, - download: function download() { - var _this4 = this; - - function downloadByUrl() { - downloadManager.downloadUrl(url, filename); - } - var url = this.baseUrl; - var filename = (0, _ui_utils.getPDFFileNameFromURL)(this.url); - var downloadManager = this.downloadManager; - downloadManager.onerror = function (err) { - _this4.error('PDF failed to download: ' + err); - }; - if (!this.pdfDocument || !this.downloadComplete) { - downloadByUrl(); - return; - } - this.pdfDocument.getData().then(function (data) { - var blob = (0, _pdfjsLib.createBlob)(data, 'application/pdf'); - downloadManager.download(blob, url, filename); - }).catch(downloadByUrl); - }, - fallback: function fallback(featureId) {}, - error: function error(message, moreInfo) { - var moreInfoText = [this.l10n.get('error_version_info', { - version: _pdfjsLib.version || '?', - build: _pdfjsLib.build || '?' - }, 'PDF.js v{{version}} (build: {{build}})')]; - if (moreInfo) { - moreInfoText.push(this.l10n.get('error_message', { message: moreInfo.message }, 'Message: {{message}}')); - if (moreInfo.stack) { - moreInfoText.push(this.l10n.get('error_stack', { stack: moreInfo.stack }, 'Stack: {{stack}}')); - } else { - if (moreInfo.filename) { - moreInfoText.push(this.l10n.get('error_file', { file: moreInfo.filename }, 'File: {{file}}')); - } - if (moreInfo.lineNumber) { - moreInfoText.push(this.l10n.get('error_line', { line: moreInfo.lineNumber }, 'Line: {{line}}')); - } - } - } - var errorWrapperConfig = this.appConfig.errorWrapper; - var errorWrapper = errorWrapperConfig.container; - errorWrapper.removeAttribute('hidden'); - var errorMessage = errorWrapperConfig.errorMessage; - errorMessage.textContent = message; - var closeButton = errorWrapperConfig.closeButton; - closeButton.onclick = function () { - errorWrapper.setAttribute('hidden', 'true'); - }; - var errorMoreInfo = errorWrapperConfig.errorMoreInfo; - var moreInfoButton = errorWrapperConfig.moreInfoButton; - var lessInfoButton = errorWrapperConfig.lessInfoButton; - moreInfoButton.onclick = function () { - errorMoreInfo.removeAttribute('hidden'); - moreInfoButton.setAttribute('hidden', 'true'); - lessInfoButton.removeAttribute('hidden'); - errorMoreInfo.style.height = errorMoreInfo.scrollHeight + 'px'; - }; - lessInfoButton.onclick = function () { - errorMoreInfo.setAttribute('hidden', 'true'); - moreInfoButton.removeAttribute('hidden'); - lessInfoButton.setAttribute('hidden', 'true'); - }; - moreInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; - lessInfoButton.oncontextmenu = _ui_utils.noContextMenuHandler; - closeButton.oncontextmenu = _ui_utils.noContextMenuHandler; - moreInfoButton.removeAttribute('hidden'); - lessInfoButton.setAttribute('hidden', 'true'); - Promise.all(moreInfoText).then(function (parts) { - errorMoreInfo.value = parts.join('\n'); - }); - }, - progress: function progress(level) { - var _this5 = this; - - if (this.downloadComplete) { - return; - } - var percent = Math.round(level * 100); - if (percent > this.loadingBar.percent || isNaN(percent)) { - this.loadingBar.percent = percent; - if (_pdfjsLib.PDFJS.disableAutoFetch && percent) { - if (this.disableAutoFetchLoadingBarTimeout) { - clearTimeout(this.disableAutoFetchLoadingBarTimeout); - this.disableAutoFetchLoadingBarTimeout = null; - } - this.loadingBar.show(); - this.disableAutoFetchLoadingBarTimeout = setTimeout(function () { - _this5.loadingBar.hide(); - _this5.disableAutoFetchLoadingBarTimeout = null; - }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT); - } - } - }, - load: function load(pdfDocument, scale) { - var _this6 = this; - - scale = scale || _ui_utils.UNKNOWN_SCALE; - this.pdfDocument = pdfDocument; - pdfDocument.getDownloadInfo().then(function () { - _this6.downloadComplete = true; - _this6.loadingBar.hide(); - firstPagePromise.then(function () { - _this6.eventBus.dispatch('documentload', { source: _this6 }); - }); - }); - var pageModePromise = pdfDocument.getPageMode().catch(function () {}); - this.toolbar.setPagesCount(pdfDocument.numPages, false); - this.secondaryToolbar.setPagesCount(pdfDocument.numPages); - var id = this.documentFingerprint = pdfDocument.fingerprint; - var store = this.store = new _view_history.ViewHistory(id); - var baseDocumentUrl = void 0; - baseDocumentUrl = null; - this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl); - this.pdfDocumentProperties.setDocument(pdfDocument, this.url); - var pdfViewer = this.pdfViewer; - pdfViewer.setDocument(pdfDocument); - var firstPagePromise = pdfViewer.firstPagePromise; - var pagesPromise = pdfViewer.pagesPromise; - var onePageRendered = pdfViewer.onePageRendered; - var pdfThumbnailViewer = this.pdfThumbnailViewer; - pdfThumbnailViewer.setDocument(pdfDocument); - firstPagePromise.then(function (pdfPage) { - _this6.loadingBar.setWidth(_this6.appConfig.viewerContainer); - if (!_pdfjsLib.PDFJS.disableHistory && !_this6.isViewerEmbedded) { - if (!_this6.viewerPrefs['showPreviousViewOnLoad']) { - _this6.pdfHistory.clearHistoryState(); - } - _this6.pdfHistory.initialize(_this6.documentFingerprint); - if (_this6.pdfHistory.initialDestination) { - _this6.initialDestination = _this6.pdfHistory.initialDestination; - } else if (_this6.pdfHistory.initialBookmark) { - _this6.initialBookmark = _this6.pdfHistory.initialBookmark; - } - } - var initialParams = { - destination: _this6.initialDestination, - bookmark: _this6.initialBookmark, - hash: null - }; - var storePromise = store.getMultiple({ - exists: false, - page: '1', - zoom: _ui_utils.DEFAULT_SCALE_VALUE, - scrollLeft: '0', - scrollTop: '0', - sidebarView: _pdf_sidebar.SidebarView.NONE - }).catch(function () {}); - Promise.all([storePromise, pageModePromise]).then(function (_ref2) { - var _ref3 = _slicedToArray(_ref2, 2), - _ref3$ = _ref3[0], - values = _ref3$ === undefined ? {} : _ref3$, - pageMode = _ref3[1]; - - var hash = _this6.viewerPrefs['defaultZoomValue'] ? 'zoom=' + _this6.viewerPrefs['defaultZoomValue'] : null; - var sidebarView = _this6.viewerPrefs['sidebarViewOnLoad']; - if (values.exists && _this6.viewerPrefs['showPreviousViewOnLoad']) { - hash = 'page=' + values.page + '&zoom=' + (_this6.viewerPrefs['defaultZoomValue'] || values.zoom) + ',' + values.scrollLeft + ',' + values.scrollTop; - sidebarView = sidebarView || values.sidebarView | 0; - } - if (pageMode && !_this6.viewerPrefs['disablePageMode']) { - sidebarView = sidebarView || apiPageModeToSidebarView(pageMode); - } - return { - hash: hash, - sidebarView: sidebarView - }; - }).then(function (_ref4) { - var hash = _ref4.hash, - sidebarView = _ref4.sidebarView; - - _this6.setInitialView(hash, { - sidebarView: sidebarView, - scale: scale - }); - initialParams.hash = hash; - if (!_this6.isViewerEmbedded) { - pdfViewer.focus(); - } - return pagesPromise; - }).then(function () { - if (!initialParams.destination && !initialParams.bookmark && !initialParams.hash) { - return; - } - if (pdfViewer.hasEqualPageSizes) { - return; - } - _this6.initialDestination = initialParams.destination; - _this6.initialBookmark = initialParams.bookmark; - pdfViewer.currentScaleValue = pdfViewer.currentScaleValue; - _this6.setInitialView(initialParams.hash); - }).then(function () { - pdfViewer.update(); - }); - }); - pdfDocument.getPageLabels().then(function (labels) { - if (!labels || _this6.viewerPrefs['disablePageLabels']) { - return; - } - var i = 0, - numLabels = labels.length; - if (numLabels !== _this6.pagesCount) { - console.error('The number of Page Labels does not match ' + 'the number of pages in the document.'); - return; - } - while (i < numLabels && labels[i] === (i + 1).toString()) { - i++; - } - if (i === numLabels) { - return; - } - pdfViewer.setPageLabels(labels); - pdfThumbnailViewer.setPageLabels(labels); - _this6.toolbar.setPagesCount(pdfDocument.numPages, true); - _this6.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); - }); - pagesPromise.then(function () { - if (!_this6.supportsPrinting) { - return; - } - pdfDocument.getJavaScript().then(function (javaScript) { - if (javaScript.length) { - console.warn('Warning: JavaScript is not supported'); - _this6.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.javaScript); - } - var regex = /\bprint\s*\(/; - for (var i = 0, ii = javaScript.length; i < ii; i++) { - var js = javaScript[i]; - if (js && regex.test(js)) { - setTimeout(function () { - window.print(); - }); - return; - } - } - }); - }); - Promise.all([onePageRendered, _ui_utils.animationStarted]).then(function () { - pdfDocument.getOutline().then(function (outline) { - _this6.pdfOutlineViewer.render({ outline: outline }); - }); - pdfDocument.getAttachments().then(function (attachments) { - _this6.pdfAttachmentViewer.render({ attachments: attachments }); - }); - }); - pdfDocument.getMetadata().then(function (_ref5) { - var info = _ref5.info, - metadata = _ref5.metadata; - - _this6.documentInfo = info; - _this6.metadata = metadata; - console.log('PDF ' + pdfDocument.fingerprint + ' [' + info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() + ' / ' + (info.Creator || '-').trim() + ']' + ' (PDF.js: ' + (_pdfjsLib.version || '-') + (!_pdfjsLib.PDFJS.disableWebGL ? ' [WebGL]' : '') + ')'); - var pdfTitle = void 0; - if (metadata && metadata.has('dc:title')) { - var title = metadata.get('dc:title'); - if (title !== 'Untitled') { - pdfTitle = title; - } - } - if (!pdfTitle && info && info['Title']) { - pdfTitle = info['Title']; - } - if (pdfTitle) { - _this6.setTitle(pdfTitle + ' - ' + document.title); - } - if (info.IsAcroFormPresent) { - console.warn('Warning: AcroForm/XFA is not supported'); - _this6.fallback(_pdfjsLib.UNSUPPORTED_FEATURES.forms); - } - }); - }, - setInitialView: function setInitialView(storedHash) { - var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; - var _options$scale = options.scale, - scale = _options$scale === undefined ? 0 : _options$scale, - _options$sidebarView = options.sidebarView, - sidebarView = _options$sidebarView === undefined ? _pdf_sidebar.SidebarView.NONE : _options$sidebarView; - - this.isInitialViewSet = true; - this.pdfSidebar.setInitialView(sidebarView); - if (this.initialDestination) { - this.pdfLinkService.navigateTo(this.initialDestination); - this.initialDestination = null; - } else if (this.initialBookmark) { - this.pdfLinkService.setHash(this.initialBookmark); - this.pdfHistory.push({ hash: this.initialBookmark }, true); - this.initialBookmark = null; - } else if (storedHash) { - this.pdfLinkService.setHash(storedHash); - } else if (scale) { - this.pdfViewer.currentScaleValue = scale; - this.page = 1; - } - this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber, this.pdfViewer.currentPageLabel); - this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber); - if (!this.pdfViewer.currentScaleValue) { - this.pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; - } - }, - cleanup: function cleanup() { - if (!this.pdfDocument) { - return; - } - this.pdfViewer.cleanup(); - this.pdfThumbnailViewer.cleanup(); - if (this.pdfViewer.renderer !== _ui_utils.RendererType.SVG) { - this.pdfDocument.cleanup(); - } - }, - forceRendering: function forceRendering() { - this.pdfRenderingQueue.printing = this.printing; - this.pdfRenderingQueue.isThumbnailViewEnabled = this.pdfSidebar.isThumbnailViewVisible; - this.pdfRenderingQueue.renderHighestPriority(); - }, - beforePrint: function beforePrint() { - var _this7 = this; - - if (this.printService) { - return; - } - if (!this.supportsPrinting) { - this.l10n.get('printing_not_supported', null, 'Warning: Printing is not fully supported by ' + 'this browser.').then(function (printMessage) { - _this7.error(printMessage); - }); - return; - } - if (!this.pdfViewer.pageViewsReady) { - this.l10n.get('printing_not_ready', null, 'Warning: The PDF is not fully loaded for printing.').then(function (notReadyMessage) { - window.alert(notReadyMessage); - }); - return; - } - var pagesOverview = this.pdfViewer.getPagesOverview(); - var printContainer = this.appConfig.printContainer; - var printService = PDFPrintServiceFactory.instance.createPrintService(this.pdfDocument, pagesOverview, printContainer, this.l10n); - this.printService = printService; - this.forceRendering(); - printService.layout(); - }, - - afterPrint: function pdfViewSetupAfterPrint() { - if (this.printService) { - this.printService.destroy(); - this.printService = null; - } - this.forceRendering(); - }, - rotatePages: function rotatePages(delta) { - if (!this.pdfDocument) { - return; - } - var pdfViewer = this.pdfViewer, - pdfThumbnailViewer = this.pdfThumbnailViewer; - - var pageNumber = pdfViewer.currentPageNumber; - var newRotation = (pdfViewer.pagesRotation + 360 + delta) % 360; - pdfViewer.pagesRotation = newRotation; - pdfThumbnailViewer.pagesRotation = newRotation; - this.forceRendering(); - pdfViewer.currentPageNumber = pageNumber; - }, - requestPresentationMode: function requestPresentationMode() { - if (!this.pdfPresentationMode) { - return; - } - this.pdfPresentationMode.request(); - }, - bindEvents: function bindEvents() { - var eventBus = this.eventBus, - _boundEvents = this._boundEvents; - - _boundEvents.beforePrint = this.beforePrint.bind(this); - _boundEvents.afterPrint = this.afterPrint.bind(this); - eventBus.on('resize', webViewerResize); - eventBus.on('hashchange', webViewerHashchange); - eventBus.on('beforeprint', _boundEvents.beforePrint); - eventBus.on('afterprint', _boundEvents.afterPrint); - eventBus.on('pagerendered', webViewerPageRendered); - eventBus.on('textlayerrendered', webViewerTextLayerRendered); - eventBus.on('updateviewarea', webViewerUpdateViewarea); - eventBus.on('pagechanging', webViewerPageChanging); - eventBus.on('scalechanging', webViewerScaleChanging); - eventBus.on('sidebarviewchanged', webViewerSidebarViewChanged); - eventBus.on('pagemode', webViewerPageMode); - eventBus.on('namedaction', webViewerNamedAction); - eventBus.on('presentationmodechanged', webViewerPresentationModeChanged); - eventBus.on('presentationmode', webViewerPresentationMode); - eventBus.on('openfile', webViewerOpenFile); - eventBus.on('print', webViewerPrint); - eventBus.on('download', webViewerDownload); - eventBus.on('firstpage', webViewerFirstPage); - eventBus.on('lastpage', webViewerLastPage); - eventBus.on('nextpage', webViewerNextPage); - eventBus.on('previouspage', webViewerPreviousPage); - eventBus.on('zoomin', webViewerZoomIn); - eventBus.on('zoomout', webViewerZoomOut); - eventBus.on('pagenumberchanged', webViewerPageNumberChanged); - eventBus.on('scalechanged', webViewerScaleChanged); - eventBus.on('rotatecw', webViewerRotateCw); - eventBus.on('rotateccw', webViewerRotateCcw); - eventBus.on('documentproperties', webViewerDocumentProperties); - eventBus.on('find', webViewerFind); - eventBus.on('findfromurlhash', webViewerFindFromUrlHash); - eventBus.on('fileinputchange', webViewerFileInputChange); - }, - bindWindowEvents: function bindWindowEvents() { - var eventBus = this.eventBus, - _boundEvents = this._boundEvents; - - _boundEvents.windowResize = function () { - eventBus.dispatch('resize'); - }; - _boundEvents.windowHashChange = function () { - eventBus.dispatch('hashchange', { hash: document.location.hash.substring(1) }); - }; - _boundEvents.windowBeforePrint = function () { - eventBus.dispatch('beforeprint'); - }; - _boundEvents.windowAfterPrint = function () { - eventBus.dispatch('afterprint'); - }; - window.addEventListener('wheel', webViewerWheel); - window.addEventListener('click', webViewerClick); - window.addEventListener('keydown', webViewerKeyDown); - window.addEventListener('resize', _boundEvents.windowResize); - window.addEventListener('hashchange', _boundEvents.windowHashChange); - window.addEventListener('beforeprint', _boundEvents.windowBeforePrint); - window.addEventListener('afterprint', _boundEvents.windowAfterPrint); - _boundEvents.windowChange = function (evt) { - var files = evt.target.files; - if (!files || files.length === 0) { - return; - } - eventBus.dispatch('fileinputchange', { fileInput: evt.target }); - }; - window.addEventListener('change', _boundEvents.windowChange); - }, - unbindEvents: function unbindEvents() { - var eventBus = this.eventBus, - _boundEvents = this._boundEvents; - - eventBus.off('resize', webViewerResize); - eventBus.off('hashchange', webViewerHashchange); - eventBus.off('beforeprint', _boundEvents.beforePrint); - eventBus.off('afterprint', _boundEvents.afterPrint); - eventBus.off('pagerendered', webViewerPageRendered); - eventBus.off('textlayerrendered', webViewerTextLayerRendered); - eventBus.off('updateviewarea', webViewerUpdateViewarea); - eventBus.off('pagechanging', webViewerPageChanging); - eventBus.off('scalechanging', webViewerScaleChanging); - eventBus.off('sidebarviewchanged', webViewerSidebarViewChanged); - eventBus.off('pagemode', webViewerPageMode); - eventBus.off('namedaction', webViewerNamedAction); - eventBus.off('presentationmodechanged', webViewerPresentationModeChanged); - eventBus.off('presentationmode', webViewerPresentationMode); - eventBus.off('openfile', webViewerOpenFile); - eventBus.off('print', webViewerPrint); - eventBus.off('download', webViewerDownload); - eventBus.off('firstpage', webViewerFirstPage); - eventBus.off('lastpage', webViewerLastPage); - eventBus.off('nextpage', webViewerNextPage); - eventBus.off('previouspage', webViewerPreviousPage); - eventBus.off('zoomin', webViewerZoomIn); - eventBus.off('zoomout', webViewerZoomOut); - eventBus.off('pagenumberchanged', webViewerPageNumberChanged); - eventBus.off('scalechanged', webViewerScaleChanged); - eventBus.off('rotatecw', webViewerRotateCw); - eventBus.off('rotateccw', webViewerRotateCcw); - eventBus.off('documentproperties', webViewerDocumentProperties); - eventBus.off('find', webViewerFind); - eventBus.off('findfromurlhash', webViewerFindFromUrlHash); - eventBus.off('fileinputchange', webViewerFileInputChange); - _boundEvents.beforePrint = null; - _boundEvents.afterPrint = null; - }, - unbindWindowEvents: function unbindWindowEvents() { - var _boundEvents = this._boundEvents; - - window.removeEventListener('wheel', webViewerWheel); - window.removeEventListener('click', webViewerClick); - window.removeEventListener('keydown', webViewerKeyDown); - window.removeEventListener('resize', _boundEvents.windowResize); - window.removeEventListener('hashchange', _boundEvents.windowHashChange); - window.removeEventListener('beforeprint', _boundEvents.windowBeforePrint); - window.removeEventListener('afterprint', _boundEvents.windowAfterPrint); - window.removeEventListener('change', _boundEvents.windowChange); - _boundEvents.windowChange = null; - _boundEvents.windowResize = null; - _boundEvents.windowHashChange = null; - _boundEvents.windowBeforePrint = null; - _boundEvents.windowAfterPrint = null; - } -}; -var validateFileURL = void 0; -{ - var HOSTED_VIEWER_ORIGINS = ['null', 'http://mozilla.github.io', 'https://mozilla.github.io']; - validateFileURL = function validateFileURL(file) { - if (file === undefined) { - return; - } - try { - var viewerOrigin = new URL(window.location.href).origin || 'null'; - if (HOSTED_VIEWER_ORIGINS.indexOf(viewerOrigin) >= 0) { - return; - } - var fileOrigin = new URL(file, window.location.href).origin; - if (fileOrigin !== viewerOrigin) { - throw new Error('file origin does not match viewer\'s'); - } - } catch (ex) { - var message = ex && ex.message; - PDFViewerApplication.l10n.get('loading_error', null, 'An error occurred while loading the PDF.').then(function (loadingErrorMessage) { - PDFViewerApplication.error(loadingErrorMessage, { message: message }); - }); - throw ex; - } - }; -} -function loadAndEnablePDFBug(enabledTabs) { - return new Promise(function (resolve, reject) { - var appConfig = PDFViewerApplication.appConfig; - var script = document.createElement('script'); - script.src = appConfig.debuggerScriptPath; - script.onload = function () { - PDFBug.enable(enabledTabs); - PDFBug.init({ - PDFJS: _pdfjsLib.PDFJS, - OPS: _pdfjsLib.OPS - }, appConfig.mainContainer); - resolve(); - }; - script.onerror = function () { - reject(new Error('Cannot load debugger at ' + script.src)); - }; - (document.getElementsByTagName('head')[0] || document.body).appendChild(script); - }); -} -function webViewerInitialized() { - var appConfig = PDFViewerApplication.appConfig; - var file = void 0; - var queryString = document.location.search.substring(1); - var params = (0, _ui_utils.parseQueryString)(queryString); - file = 'file' in params ? params.file : appConfig.defaultUrl; - validateFileURL(file); - var waitForBeforeOpening = []; - var fileInput = document.createElement('input'); - fileInput.id = appConfig.openFileInputName; - fileInput.className = 'fileInput'; - fileInput.setAttribute('type', 'file'); - fileInput.oncontextmenu = _ui_utils.noContextMenuHandler; - document.body.appendChild(fileInput); - if (!window.File || !window.FileReader || !window.FileList || !window.Blob) { - appConfig.toolbar.openFile.setAttribute('hidden', 'true'); - appConfig.secondaryToolbar.openFileButton.setAttribute('hidden', 'true'); - } else { - fileInput.value = null; - } - if (PDFViewerApplication.viewerPrefs['pdfBugEnabled']) { - var hash = document.location.hash.substring(1); - var hashParams = (0, _ui_utils.parseQueryString)(hash); - if ('disableworker' in hashParams) { - _pdfjsLib.PDFJS.disableWorker = hashParams['disableworker'] === 'true'; - } - if ('disablerange' in hashParams) { - _pdfjsLib.PDFJS.disableRange = hashParams['disablerange'] === 'true'; - } - if ('disablestream' in hashParams) { - _pdfjsLib.PDFJS.disableStream = hashParams['disablestream'] === 'true'; - } - if ('disableautofetch' in hashParams) { - _pdfjsLib.PDFJS.disableAutoFetch = hashParams['disableautofetch'] === 'true'; - } - if ('disablefontface' in hashParams) { - _pdfjsLib.PDFJS.disableFontFace = hashParams['disablefontface'] === 'true'; - } - if ('disablehistory' in hashParams) { - _pdfjsLib.PDFJS.disableHistory = hashParams['disablehistory'] === 'true'; - } - if ('webgl' in hashParams) { - _pdfjsLib.PDFJS.disableWebGL = hashParams['webgl'] !== 'true'; - } - if ('useonlycsszoom' in hashParams) { - _pdfjsLib.PDFJS.useOnlyCssZoom = hashParams['useonlycsszoom'] === 'true'; - } - if ('verbosity' in hashParams) { - _pdfjsLib.PDFJS.verbosity = hashParams['verbosity'] | 0; - } - if ('ignorecurrentpositiononzoom' in hashParams) { - _pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom = hashParams['ignorecurrentpositiononzoom'] === 'true'; - } - if ('textlayer' in hashParams) { - switch (hashParams['textlayer']) { - case 'off': - _pdfjsLib.PDFJS.disableTextLayer = true; - break; - case 'visible': - case 'shadow': - case 'hover': - var viewer = appConfig.viewerContainer; - viewer.classList.add('textLayer-' + hashParams['textlayer']); - break; - } - } - if ('pdfbug' in hashParams) { - _pdfjsLib.PDFJS.pdfBug = true; - var pdfBug = hashParams['pdfbug']; - var enabled = pdfBug.split(','); - waitForBeforeOpening.push(loadAndEnablePDFBug(enabled)); - } - } - if (!PDFViewerApplication.supportsPrinting) { - appConfig.toolbar.print.classList.add('hidden'); - appConfig.secondaryToolbar.printButton.classList.add('hidden'); - } - if (!PDFViewerApplication.supportsFullscreen) { - appConfig.toolbar.presentationModeButton.classList.add('hidden'); - appConfig.secondaryToolbar.presentationModeButton.classList.add('hidden'); - } - if (PDFViewerApplication.supportsIntegratedFind) { - appConfig.toolbar.viewFind.classList.add('hidden'); - } - appConfig.sidebar.mainContainer.addEventListener('transitionend', function (evt) { - if (evt.target === this) { - PDFViewerApplication.eventBus.dispatch('resize'); - } - }, true); - appConfig.sidebar.toggleButton.addEventListener('click', function () { - PDFViewerApplication.pdfSidebar.toggle(); - }); - Promise.all(waitForBeforeOpening).then(function () { - webViewerOpenFileViaURL(file); - }).catch(function (reason) { - PDFViewerApplication.l10n.get('loading_error', null, 'An error occurred while opening.').then(function (msg) { - PDFViewerApplication.error(msg, reason); - }); - }); -} -var webViewerOpenFileViaURL = void 0; -{ - webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) { - if (file && file.lastIndexOf('file:', 0) === 0) { - PDFViewerApplication.setTitleUsingUrl(file); - var xhr = new XMLHttpRequest(); - xhr.onload = function () { - PDFViewerApplication.open(new Uint8Array(xhr.response)); - }; - try { - xhr.open('GET', file); - xhr.responseType = 'arraybuffer'; - xhr.send(); - } catch (ex) { - PDFViewerApplication.l10n.get('loading_error', null, 'An error occurred while loading the PDF.').then(function (msg) { - PDFViewerApplication.error(msg, ex); - }); - } - return; - } - if (file) { - PDFViewerApplication.open(file); - } - }; -} -function webViewerPageRendered(evt) { - var pageNumber = evt.pageNumber; - var pageIndex = pageNumber - 1; - var pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex); - if (pageNumber === PDFViewerApplication.page) { - PDFViewerApplication.toolbar.updateLoadingIndicatorState(false); - } - if (!pageView) { - return; - } - if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { - var thumbnailView = PDFViewerApplication.pdfThumbnailViewer.getThumbnail(pageIndex); - thumbnailView.setImage(pageView); - } - if (_pdfjsLib.PDFJS.pdfBug && Stats.enabled && pageView.stats) { - Stats.add(pageNumber, pageView.stats); - } - if (pageView.error) { - PDFViewerApplication.l10n.get('rendering_error', null, 'An error occurred while rendering the page.').then(function (msg) { - PDFViewerApplication.error(msg, pageView.error); - }); - } -} -function webViewerTextLayerRendered(evt) {} -function webViewerPageMode(evt) { - var mode = evt.mode, - view = void 0; - switch (mode) { - case 'thumbs': - view = _pdf_sidebar.SidebarView.THUMBS; - break; - case 'bookmarks': - case 'outline': - view = _pdf_sidebar.SidebarView.OUTLINE; - break; - case 'attachments': - view = _pdf_sidebar.SidebarView.ATTACHMENTS; - break; - case 'none': - view = _pdf_sidebar.SidebarView.NONE; - break; - default: - console.error('Invalid "pagemode" hash parameter: ' + mode); - return; - } - PDFViewerApplication.pdfSidebar.switchView(view, true); -} -function webViewerNamedAction(evt) { - var action = evt.action; - switch (action) { - case 'GoToPage': - PDFViewerApplication.appConfig.toolbar.pageNumber.select(); - break; - case 'Find': - if (!PDFViewerApplication.supportsIntegratedFind) { - PDFViewerApplication.findBar.toggle(); - } - break; - } -} -function webViewerPresentationModeChanged(evt) { - var active = evt.active, - switchInProgress = evt.switchInProgress; - - PDFViewerApplication.pdfViewer.presentationModeState = switchInProgress ? _pdf_viewer.PresentationModeState.CHANGING : active ? _pdf_viewer.PresentationModeState.FULLSCREEN : _pdf_viewer.PresentationModeState.NORMAL; -} -function webViewerSidebarViewChanged(evt) { - PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled = PDFViewerApplication.pdfSidebar.isThumbnailViewVisible; - var store = PDFViewerApplication.store; - if (store && PDFViewerApplication.isInitialViewSet) { - store.set('sidebarView', evt.view).catch(function () {}); - } -} -function webViewerUpdateViewarea(evt) { - var location = evt.location, - store = PDFViewerApplication.store; - if (store && PDFViewerApplication.isInitialViewSet) { - store.setMultiple({ - 'exists': true, - 'page': location.pageNumber, - 'zoom': location.scale, - 'scrollLeft': location.left, - 'scrollTop': location.top - }).catch(function () {}); - } - var href = PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams); - PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href; - PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href = href; - PDFViewerApplication.pdfHistory.updateCurrentBookmark(location.pdfOpenParams, location.pageNumber); - var currentPage = PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1); - var loading = currentPage.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED; - PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading); -} -function webViewerResize() { - var pdfDocument = PDFViewerApplication.pdfDocument, - pdfViewer = PDFViewerApplication.pdfViewer; - - if (!pdfDocument) { - return; - } - var currentScaleValue = pdfViewer.currentScaleValue; - if (currentScaleValue === 'auto' || currentScaleValue === 'page-fit' || currentScaleValue === 'page-width') { - pdfViewer.currentScaleValue = currentScaleValue; - } - pdfViewer.update(); -} -function webViewerHashchange(evt) { - if (PDFViewerApplication.pdfHistory.isHashChangeUnlocked) { - var hash = evt.hash; - if (!hash) { - return; - } - if (!PDFViewerApplication.isInitialViewSet) { - PDFViewerApplication.initialBookmark = hash; - } else { - PDFViewerApplication.pdfLinkService.setHash(hash); - } - } -} -var webViewerFileInputChange = void 0; -{ - webViewerFileInputChange = function webViewerFileInputChange(evt) { - var file = evt.fileInput.files[0]; - if (!_pdfjsLib.PDFJS.disableCreateObjectURL && URL.createObjectURL) { - PDFViewerApplication.open(URL.createObjectURL(file)); - } else { - var fileReader = new FileReader(); - fileReader.onload = function webViewerChangeFileReaderOnload(evt) { - var buffer = evt.target.result; - PDFViewerApplication.open(new Uint8Array(buffer)); - }; - fileReader.readAsArrayBuffer(file); - } - PDFViewerApplication.setTitleUsingUrl(file.name); - var appConfig = PDFViewerApplication.appConfig; - appConfig.toolbar.viewBookmark.setAttribute('hidden', 'true'); - appConfig.secondaryToolbar.viewBookmarkButton.setAttribute('hidden', 'true'); - appConfig.toolbar.download.setAttribute('hidden', 'true'); - appConfig.secondaryToolbar.downloadButton.setAttribute('hidden', 'true'); - }; -} -function webViewerPresentationMode() { - PDFViewerApplication.requestPresentationMode(); -} -function webViewerOpenFile() { - var openFileInputName = PDFViewerApplication.appConfig.openFileInputName; - document.getElementById(openFileInputName).click(); -} -function webViewerPrint() { - window.print(); -} -function webViewerDownload() { - PDFViewerApplication.download(); -} -function webViewerFirstPage() { - if (PDFViewerApplication.pdfDocument) { - PDFViewerApplication.page = 1; - } -} -function webViewerLastPage() { - if (PDFViewerApplication.pdfDocument) { - PDFViewerApplication.page = PDFViewerApplication.pagesCount; - } -} -function webViewerNextPage() { - PDFViewerApplication.page++; -} -function webViewerPreviousPage() { - PDFViewerApplication.page--; -} -function webViewerZoomIn() { - PDFViewerApplication.zoomIn(); -} -function webViewerZoomOut() { - PDFViewerApplication.zoomOut(); -} -function webViewerPageNumberChanged(evt) { - var pdfViewer = PDFViewerApplication.pdfViewer; - pdfViewer.currentPageLabel = evt.value; - if (evt.value !== pdfViewer.currentPageNumber.toString() && evt.value !== pdfViewer.currentPageLabel) { - PDFViewerApplication.toolbar.setPageNumber(pdfViewer.currentPageNumber, pdfViewer.currentPageLabel); - } -} -function webViewerScaleChanged(evt) { - PDFViewerApplication.pdfViewer.currentScaleValue = evt.value; -} -function webViewerRotateCw() { - PDFViewerApplication.rotatePages(90); -} -function webViewerRotateCcw() { - PDFViewerApplication.rotatePages(-90); -} -function webViewerDocumentProperties() { - PDFViewerApplication.pdfDocumentProperties.open(); -} -function webViewerFind(evt) { - PDFViewerApplication.findController.executeCommand('find' + evt.type, { - query: evt.query, - phraseSearch: evt.phraseSearch, - caseSensitive: evt.caseSensitive, - highlightAll: evt.highlightAll, - findPrevious: evt.findPrevious - }); -} -function webViewerFindFromUrlHash(evt) { - PDFViewerApplication.findController.executeCommand('find', { - query: evt.query, - phraseSearch: evt.phraseSearch, - caseSensitive: false, - highlightAll: true, - findPrevious: false - }); -} -function webViewerScaleChanging(evt) { - PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale); - PDFViewerApplication.pdfViewer.update(); -} -function webViewerPageChanging(evt) { - var page = evt.pageNumber; - PDFViewerApplication.toolbar.setPageNumber(page, evt.pageLabel || null); - PDFViewerApplication.secondaryToolbar.setPageNumber(page); - if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) { - PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page); - } - if (_pdfjsLib.PDFJS.pdfBug && Stats.enabled) { - var pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1); - if (pageView.stats) { - Stats.add(page, pageView.stats); - } - } -} -var zoomDisabled = false, - zoomDisabledTimeout = void 0; -function webViewerWheel(evt) { - var pdfViewer = PDFViewerApplication.pdfViewer; - if (pdfViewer.isInPresentationMode) { - return; - } - if (evt.ctrlKey || evt.metaKey) { - var support = PDFViewerApplication.supportedMouseWheelZoomModifierKeys; - if (evt.ctrlKey && !support.ctrlKey || evt.metaKey && !support.metaKey) { - return; - } - evt.preventDefault(); - if (zoomDisabled) { - return; - } - var previousScale = pdfViewer.currentScale; - var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); - var MOUSE_WHEEL_DELTA_PER_PAGE_SCALE = 3.0; - var ticks = delta * MOUSE_WHEEL_DELTA_PER_PAGE_SCALE; - if (ticks < 0) { - PDFViewerApplication.zoomOut(-ticks); - } else { - PDFViewerApplication.zoomIn(ticks); - } - var currentScale = pdfViewer.currentScale; - if (previousScale !== currentScale) { - var scaleCorrectionFactor = currentScale / previousScale - 1; - var rect = pdfViewer.container.getBoundingClientRect(); - var dx = evt.clientX - rect.left; - var dy = evt.clientY - rect.top; - pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor; - pdfViewer.container.scrollTop += dy * scaleCorrectionFactor; - } - } else { - zoomDisabled = true; - clearTimeout(zoomDisabledTimeout); - zoomDisabledTimeout = setTimeout(function () { - zoomDisabled = false; - }, 1000); - } -} -function webViewerClick(evt) { - if (!PDFViewerApplication.secondaryToolbar.isOpen) { - return; - } - var appConfig = PDFViewerApplication.appConfig; - if (PDFViewerApplication.pdfViewer.containsElement(evt.target) || appConfig.toolbar.container.contains(evt.target) && evt.target !== appConfig.secondaryToolbar.toggleButton) { - PDFViewerApplication.secondaryToolbar.close(); - } -} -function webViewerKeyDown(evt) { - if (PDFViewerApplication.overlayManager.active) { - return; - } - var handled = false, - ensureViewerFocused = false; - var cmd = (evt.ctrlKey ? 1 : 0) | (evt.altKey ? 2 : 0) | (evt.shiftKey ? 4 : 0) | (evt.metaKey ? 8 : 0); - var pdfViewer = PDFViewerApplication.pdfViewer; - var isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode; - if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) { - switch (evt.keyCode) { - case 70: - if (!PDFViewerApplication.supportsIntegratedFind) { - PDFViewerApplication.findBar.open(); - handled = true; - } - break; - case 71: - if (!PDFViewerApplication.supportsIntegratedFind) { - var findState = PDFViewerApplication.findController.state; - if (findState) { - PDFViewerApplication.findController.executeCommand('findagain', { - query: findState.query, - phraseSearch: findState.phraseSearch, - caseSensitive: findState.caseSensitive, - highlightAll: findState.highlightAll, - findPrevious: cmd === 5 || cmd === 12 - }); - } - handled = true; - } - break; - case 61: - case 107: - case 187: - case 171: - if (!isViewerInPresentationMode) { - PDFViewerApplication.zoomIn(); - } - handled = true; - break; - case 173: - case 109: - case 189: - if (!isViewerInPresentationMode) { - PDFViewerApplication.zoomOut(); - } - handled = true; - break; - case 48: - case 96: - if (!isViewerInPresentationMode) { - setTimeout(function () { - pdfViewer.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; - }); - handled = false; - } - break; - case 38: - if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { - PDFViewerApplication.page = 1; - handled = true; - ensureViewerFocused = true; - } - break; - case 40: - if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { - PDFViewerApplication.page = PDFViewerApplication.pagesCount; - handled = true; - ensureViewerFocused = true; - } - break; - } - } - if (cmd === 1 || cmd === 8) { - switch (evt.keyCode) { - case 83: - PDFViewerApplication.download(); - handled = true; - break; - } - } - if (cmd === 3 || cmd === 10) { - switch (evt.keyCode) { - case 80: - PDFViewerApplication.requestPresentationMode(); - handled = true; - break; - case 71: - PDFViewerApplication.appConfig.toolbar.pageNumber.select(); - handled = true; - break; - } - } - if (handled) { - if (ensureViewerFocused && !isViewerInPresentationMode) { - pdfViewer.focus(); - } - evt.preventDefault(); - return; - } - var curElement = document.activeElement || document.querySelector(':focus'); - var curElementTagName = curElement && curElement.tagName.toUpperCase(); - if (curElementTagName === 'INPUT' || curElementTagName === 'TEXTAREA' || curElementTagName === 'SELECT') { - if (evt.keyCode !== 27) { - return; - } - } - if (cmd === 0) { - switch (evt.keyCode) { - case 38: - case 33: - case 8: - if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== 'page-fit') { - break; - } - case 37: - if (pdfViewer.isHorizontalScrollbarEnabled) { - break; - } - case 75: - case 80: - if (PDFViewerApplication.page > 1) { - PDFViewerApplication.page--; - } - handled = true; - break; - case 27: - if (PDFViewerApplication.secondaryToolbar.isOpen) { - PDFViewerApplication.secondaryToolbar.close(); - handled = true; - } - if (!PDFViewerApplication.supportsIntegratedFind && PDFViewerApplication.findBar.opened) { - PDFViewerApplication.findBar.close(); - handled = true; - } - break; - case 40: - case 34: - case 32: - if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== 'page-fit') { - break; - } - case 39: - if (pdfViewer.isHorizontalScrollbarEnabled) { - break; - } - case 74: - case 78: - if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) { - PDFViewerApplication.page++; - } - handled = true; - break; - case 36: - if (isViewerInPresentationMode || PDFViewerApplication.page > 1) { - PDFViewerApplication.page = 1; - handled = true; - ensureViewerFocused = true; - } - break; - case 35: - if (isViewerInPresentationMode || PDFViewerApplication.page < PDFViewerApplication.pagesCount) { - PDFViewerApplication.page = PDFViewerApplication.pagesCount; - handled = true; - ensureViewerFocused = true; - } - break; - case 83: - PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.SELECT); - break; - case 72: - PDFViewerApplication.pdfCursorTools.switchTool(_pdf_cursor_tools.CursorTool.HAND); - break; - case 82: - PDFViewerApplication.rotatePages(90); - break; - } - } - if (cmd === 4) { - switch (evt.keyCode) { - case 32: - if (!isViewerInPresentationMode && pdfViewer.currentScaleValue !== 'page-fit') { - break; - } - if (PDFViewerApplication.page > 1) { - PDFViewerApplication.page--; - } - handled = true; - break; - case 82: - PDFViewerApplication.rotatePages(-90); - break; - } - } - if (!handled && !isViewerInPresentationMode) { - if (evt.keyCode >= 33 && evt.keyCode <= 40 || evt.keyCode === 32 && curElementTagName !== 'BUTTON') { - ensureViewerFocused = true; - } - } - if (cmd === 2) { - switch (evt.keyCode) { - case 37: - if (isViewerInPresentationMode) { - PDFViewerApplication.pdfHistory.back(); - handled = true; - } - break; - case 39: - if (isViewerInPresentationMode) { - PDFViewerApplication.pdfHistory.forward(); - handled = true; - } - break; - } - } - if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) { - pdfViewer.focus(); - } - if (handled) { - evt.preventDefault(); - } -} -function apiPageModeToSidebarView(mode) { - switch (mode) { - case 'UseNone': - return _pdf_sidebar.SidebarView.NONE; - case 'UseThumbs': - return _pdf_sidebar.SidebarView.THUMBS; - case 'UseOutlines': - return _pdf_sidebar.SidebarView.OUTLINE; - case 'UseAttachments': - return _pdf_sidebar.SidebarView.ATTACHMENTS; - case 'UseOC': - } - return _pdf_sidebar.SidebarView.NONE; -} -var PDFPrintServiceFactory = { - instance: { - supportsPrinting: false, - createPrintService: function createPrintService() { - throw new Error('Not implemented: createPrintService'); - } - } -}; -exports.PDFViewerApplication = PDFViewerApplication; -exports.DefaultExternalServices = DefaultExternalServices; -exports.PDFPrintServiceFactory = PDFPrintServiceFactory; - -/***/ }), -/* 5 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SimpleLinkService = exports.PDFLinkService = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _dom_events = __webpack_require__(2); - -var _ui_utils = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var PDFLinkService = function () { - function PDFLinkService() { - var _ref = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}, - eventBus = _ref.eventBus; - - _classCallCheck(this, PDFLinkService); - - this.eventBus = eventBus || (0, _dom_events.getGlobalEventBus)(); - this.baseUrl = null; - this.pdfDocument = null; - this.pdfViewer = null; - this.pdfHistory = null; - this._pagesRefCache = null; - } - - _createClass(PDFLinkService, [{ - key: 'setDocument', - value: function setDocument(pdfDocument, baseUrl) { - this.baseUrl = baseUrl; - this.pdfDocument = pdfDocument; - this._pagesRefCache = Object.create(null); - } - }, { - key: 'setViewer', - value: function setViewer(pdfViewer) { - this.pdfViewer = pdfViewer; - } - }, { - key: 'setHistory', - value: function setHistory(pdfHistory) { - this.pdfHistory = pdfHistory; - } - }, { - key: 'navigateTo', - value: function navigateTo(dest) { - var _this = this; - - var goToDestination = function goToDestination(_ref2) { - var namedDest = _ref2.namedDest, - explicitDest = _ref2.explicitDest; - - var destRef = explicitDest[0], - pageNumber = void 0; - if (destRef instanceof Object) { - pageNumber = _this._cachedPageNumber(destRef); - if (pageNumber === null) { - _this.pdfDocument.getPageIndex(destRef).then(function (pageIndex) { - _this.cachePageRef(pageIndex + 1, destRef); - goToDestination({ - namedDest: namedDest, - explicitDest: explicitDest - }); - }).catch(function () { - console.error('PDFLinkService.navigateTo: "' + destRef + '" is not ' + ('a valid page reference, for dest="' + dest + '".')); - }); - return; - } - } else if ((destRef | 0) === destRef) { - pageNumber = destRef + 1; - } else { - console.error('PDFLinkService.navigateTo: "' + destRef + '" is not ' + ('a valid destination reference, for dest="' + dest + '".')); - return; - } - if (!pageNumber || pageNumber < 1 || pageNumber > _this.pagesCount) { - console.error('PDFLinkService.navigateTo: "' + pageNumber + '" is not ' + ('a valid page number, for dest="' + dest + '".')); - return; - } - _this.pdfViewer.scrollPageIntoView({ - pageNumber: pageNumber, - destArray: explicitDest - }); - if (_this.pdfHistory) { - _this.pdfHistory.push({ - dest: explicitDest, - hash: namedDest, - page: pageNumber - }); - } - }; - new Promise(function (resolve, reject) { - if (typeof dest === 'string') { - _this.pdfDocument.getDestination(dest).then(function (destArray) { - resolve({ - namedDest: dest, - explicitDest: destArray - }); - }); - return; - } - resolve({ - namedDest: '', - explicitDest: dest - }); - }).then(function (data) { - if (!(data.explicitDest instanceof Array)) { - console.error('PDFLinkService.navigateTo: "' + data.explicitDest + '" is' + (' not a valid destination array, for dest="' + dest + '".')); - return; - } - goToDestination(data); - }); - } - }, { - key: 'getDestinationHash', - value: function getDestinationHash(dest) { - if (typeof dest === 'string') { - return this.getAnchorUrl('#' + escape(dest)); - } - if (dest instanceof Array) { - var str = JSON.stringify(dest); - return this.getAnchorUrl('#' + escape(str)); - } - return this.getAnchorUrl(''); - } - }, { - key: 'getAnchorUrl', - value: function getAnchorUrl(anchor) { - return (this.baseUrl || '') + anchor; - } - }, { - key: 'setHash', - value: function setHash(hash) { - var pageNumber = void 0, - dest = void 0; - if (hash.indexOf('=') >= 0) { - var params = (0, _ui_utils.parseQueryString)(hash); - if ('search' in params) { - this.eventBus.dispatch('findfromurlhash', { - source: this, - query: params['search'].replace(/"/g, ''), - phraseSearch: params['phrase'] === 'true' - }); - } - if ('nameddest' in params) { - if (this.pdfHistory) { - this.pdfHistory.updateNextHashParam(params.nameddest); - } - this.navigateTo(params.nameddest); - return; - } - if ('page' in params) { - pageNumber = params.page | 0 || 1; - } - if ('zoom' in params) { - var zoomArgs = params.zoom.split(','); - var zoomArg = zoomArgs[0]; - var zoomArgNumber = parseFloat(zoomArg); - if (zoomArg.indexOf('Fit') === -1) { - dest = [null, { name: 'XYZ' }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null, zoomArgs.length > 2 ? zoomArgs[2] | 0 : null, zoomArgNumber ? zoomArgNumber / 100 : zoomArg]; - } else { - if (zoomArg === 'Fit' || zoomArg === 'FitB') { - dest = [null, { name: zoomArg }]; - } else if (zoomArg === 'FitH' || zoomArg === 'FitBH' || zoomArg === 'FitV' || zoomArg === 'FitBV') { - dest = [null, { name: zoomArg }, zoomArgs.length > 1 ? zoomArgs[1] | 0 : null]; - } else if (zoomArg === 'FitR') { - if (zoomArgs.length !== 5) { - console.error('PDFLinkService.setHash: Not enough parameters for "FitR".'); - } else { - dest = [null, { name: zoomArg }, zoomArgs[1] | 0, zoomArgs[2] | 0, zoomArgs[3] | 0, zoomArgs[4] | 0]; - } - } else { - console.error('PDFLinkService.setHash: "' + zoomArg + '" is not ' + 'a valid zoom value.'); - } - } - } - if (dest) { - this.pdfViewer.scrollPageIntoView({ - pageNumber: pageNumber || this.page, - destArray: dest, - allowNegativeOffset: true - }); - } else if (pageNumber) { - this.page = pageNumber; - } - if ('pagemode' in params) { - this.eventBus.dispatch('pagemode', { - source: this, - mode: params.pagemode - }); - } - } else { - if (/^\d+$/.test(hash) && hash <= this.pagesCount) { - console.warn('PDFLinkService_setHash: specifying a page number ' + 'directly after the hash symbol (#) is deprecated, ' + ('please use the "#page=' + hash + '" form instead.')); - this.page = hash | 0; - } - dest = unescape(hash); - try { - dest = JSON.parse(dest); - if (!(dest instanceof Array)) { - dest = dest.toString(); - } - } catch (ex) {} - if (typeof dest === 'string' || isValidExplicitDestination(dest)) { - if (this.pdfHistory) { - this.pdfHistory.updateNextHashParam(dest); - } - this.navigateTo(dest); - return; - } - console.error('PDFLinkService.setHash: "' + unescape(hash) + '" is not ' + 'a valid destination.'); - } - } - }, { - key: 'executeNamedAction', - value: function executeNamedAction(action) { - switch (action) { - case 'GoBack': - if (this.pdfHistory) { - this.pdfHistory.back(); - } - break; - case 'GoForward': - if (this.pdfHistory) { - this.pdfHistory.forward(); - } - break; - case 'NextPage': - if (this.page < this.pagesCount) { - this.page++; - } - break; - case 'PrevPage': - if (this.page > 1) { - this.page--; - } - break; - case 'LastPage': - this.page = this.pagesCount; - break; - case 'FirstPage': - this.page = 1; - break; - default: - break; - } - this.eventBus.dispatch('namedaction', { - source: this, - action: action - }); - } - }, { - key: 'onFileAttachmentAnnotation', - value: function onFileAttachmentAnnotation(_ref3) { - var id = _ref3.id, - filename = _ref3.filename, - content = _ref3.content; - - this.eventBus.dispatch('fileattachmentannotation', { - source: this, - id: id, - filename: filename, - content: content - }); - } - }, { - key: 'cachePageRef', - value: function cachePageRef(pageNum, pageRef) { - var refStr = pageRef.num + ' ' + pageRef.gen + ' R'; - this._pagesRefCache[refStr] = pageNum; - } - }, { - key: '_cachedPageNumber', - value: function _cachedPageNumber(pageRef) { - var refStr = pageRef.num + ' ' + pageRef.gen + ' R'; - return this._pagesRefCache && this._pagesRefCache[refStr] || null; - } - }, { - key: 'pagesCount', - get: function get() { - return this.pdfDocument ? this.pdfDocument.numPages : 0; - } - }, { - key: 'page', - get: function get() { - return this.pdfViewer.currentPageNumber; - }, - set: function set(value) { - this.pdfViewer.currentPageNumber = value; - } - }]); - - return PDFLinkService; -}(); - -function isValidExplicitDestination(dest) { - if (!(dest instanceof Array)) { - return false; - } - var destLength = dest.length, - allowNull = true; - if (destLength < 2) { - return false; - } - var page = dest[0]; - if (!((typeof page === 'undefined' ? 'undefined' : _typeof(page)) === 'object' && typeof page.num === 'number' && (page.num | 0) === page.num && typeof page.gen === 'number' && (page.gen | 0) === page.gen) && !(typeof page === 'number' && (page | 0) === page && page >= 0)) { - return false; - } - var zoom = dest[1]; - if (!((typeof zoom === 'undefined' ? 'undefined' : _typeof(zoom)) === 'object' && typeof zoom.name === 'string')) { - return false; - } - switch (zoom.name) { - case 'XYZ': - if (destLength !== 5) { - return false; - } - break; - case 'Fit': - case 'FitB': - return destLength === 2; - case 'FitH': - case 'FitBH': - case 'FitV': - case 'FitBV': - if (destLength !== 3) { - return false; - } - break; - case 'FitR': - if (destLength !== 6) { - return false; - } - allowNull = false; - break; - default: - return false; - } - for (var i = 2; i < destLength; i++) { - var param = dest[i]; - if (!(typeof param === 'number' || allowNull && param === null)) { - return false; - } - } - return true; -} - -var SimpleLinkService = function () { - function SimpleLinkService() { - _classCallCheck(this, SimpleLinkService); - } - - _createClass(SimpleLinkService, [{ - key: 'navigateTo', - value: function navigateTo(dest) {} - }, { - key: 'getDestinationHash', - value: function getDestinationHash(dest) { - return '#'; - } - }, { - key: 'getAnchorUrl', - value: function getAnchorUrl(hash) { - return '#'; - } - }, { - key: 'setHash', - value: function setHash(hash) {} - }, { - key: 'executeNamedAction', - value: function executeNamedAction(action) {} - }, { - key: 'onFileAttachmentAnnotation', - value: function onFileAttachmentAnnotation(_ref4) { - var id = _ref4.id, - filename = _ref4.filename, - content = _ref4.content; - } - }, { - key: 'cachePageRef', - value: function cachePageRef(pageNum, pageRef) {} - }, { - key: 'page', - get: function get() { - return 0; - }, - set: function set(value) {} - }]); - - return SimpleLinkService; -}(); - -exports.PDFLinkService = PDFLinkService; -exports.SimpleLinkService = SimpleLinkService; - -/***/ }), -/* 6 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFCursorTools = exports.CursorTool = undefined; - -var _slicedToArray = function () { function sliceIterator(arr, i) { 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"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _grab_to_pan = __webpack_require__(14); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var CursorTool = { - SELECT: 0, - HAND: 1, - ZOOM: 2 -}; - -var PDFCursorTools = function () { - function PDFCursorTools(_ref) { - var _this = this; - - var container = _ref.container, - eventBus = _ref.eventBus, - preferences = _ref.preferences; - - _classCallCheck(this, PDFCursorTools); - - this.container = container; - this.eventBus = eventBus; - this.active = CursorTool.SELECT; - this.activeBeforePresentationMode = null; - this.handTool = new _grab_to_pan.GrabToPan({ element: this.container }); - this._addEventListeners(); - Promise.all([preferences.get('cursorToolOnLoad'), preferences.get('enableHandToolOnLoad')]).then(function (_ref2) { - var _ref3 = _slicedToArray(_ref2, 2), - cursorToolPref = _ref3[0], - handToolPref = _ref3[1]; - - if (handToolPref === true) { - preferences.set('enableHandToolOnLoad', false); - if (cursorToolPref === CursorTool.SELECT) { - cursorToolPref = CursorTool.HAND; - preferences.set('cursorToolOnLoad', cursorToolPref).catch(function () {}); - } - } - _this.switchTool(cursorToolPref); - }).catch(function () {}); - } - - _createClass(PDFCursorTools, [{ - key: 'switchTool', - value: function switchTool(tool) { - var _this2 = this; - - if (this.activeBeforePresentationMode !== null) { - return; - } - if (tool === this.active) { - return; - } - var disableActiveTool = function disableActiveTool() { - switch (_this2.active) { - case CursorTool.SELECT: - break; - case CursorTool.HAND: - _this2.handTool.deactivate(); - break; - case CursorTool.ZOOM: - } - }; - switch (tool) { - case CursorTool.SELECT: - disableActiveTool(); - break; - case CursorTool.HAND: - disableActiveTool(); - this.handTool.activate(); - break; - case CursorTool.ZOOM: - default: - console.error('switchTool: "' + tool + '" is an unsupported value.'); - return; - } - this.active = tool; - this._dispatchEvent(); - } - }, { - key: '_dispatchEvent', - value: function _dispatchEvent() { - this.eventBus.dispatch('cursortoolchanged', { - source: this, - tool: this.active - }); - } - }, { - key: '_addEventListeners', - value: function _addEventListeners() { - var _this3 = this; - - this.eventBus.on('switchcursortool', function (evt) { - _this3.switchTool(evt.tool); - }); - this.eventBus.on('presentationmodechanged', function (evt) { - if (evt.switchInProgress) { - return; - } - var previouslyActive = void 0; - if (evt.active) { - previouslyActive = _this3.active; - _this3.switchTool(CursorTool.SELECT); - _this3.activeBeforePresentationMode = previouslyActive; - } else { - previouslyActive = _this3.activeBeforePresentationMode; - _this3.activeBeforePresentationMode = null; - _this3.switchTool(previouslyActive); - } - }); - } - }, { - key: 'activeTool', - get: function get() { - return this.active; - } - }]); - - return PDFCursorTools; -}(); - -exports.CursorTool = CursorTool; -exports.PDFCursorTools = PDFCursorTools; - -/***/ }), -/* 7 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFFindController = exports.FindState = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -var _ui_utils = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var FindState = { - FOUND: 0, - NOT_FOUND: 1, - WRAPPED: 2, - PENDING: 3 -}; -var FIND_SCROLL_OFFSET_TOP = -50; -var FIND_SCROLL_OFFSET_LEFT = -400; -var FIND_TIMEOUT = 250; -var CHARACTERS_TO_NORMALIZE = { - '\u2018': '\'', - '\u2019': '\'', - '\u201A': '\'', - '\u201B': '\'', - '\u201C': '"', - '\u201D': '"', - '\u201E': '"', - '\u201F': '"', - '\xBC': '1/4', - '\xBD': '1/2', - '\xBE': '3/4' -}; - -var PDFFindController = function () { - function PDFFindController(_ref) { - var pdfViewer = _ref.pdfViewer; - - _classCallCheck(this, PDFFindController); - - this.pdfViewer = pdfViewer; - this.onUpdateResultsCount = null; - this.onUpdateState = null; - this.reset(); - var replace = Object.keys(CHARACTERS_TO_NORMALIZE).join(''); - this.normalizationRegex = new RegExp('[' + replace + ']', 'g'); - } - - _createClass(PDFFindController, [{ - key: 'reset', - value: function reset() { - var _this = this; - - this.startedTextExtraction = false; - this.extractTextPromises = []; - this.pendingFindMatches = Object.create(null); - this.active = false; - this.pageContents = []; - this.pageMatches = []; - this.pageMatchesLength = null; - this.matchCount = 0; - this.selected = { - pageIdx: -1, - matchIdx: -1 - }; - this.offset = { - pageIdx: null, - matchIdx: null - }; - this.pagesToSearch = null; - this.resumePageIdx = null; - this.state = null; - this.dirtyMatch = false; - this.findTimeout = null; - this._firstPagePromise = new Promise(function (resolve) { - _this.resolveFirstPage = resolve; - }); - } - }, { - key: 'normalize', - value: function normalize(text) { - return text.replace(this.normalizationRegex, function (ch) { - return CHARACTERS_TO_NORMALIZE[ch]; - }); - } - }, { - key: '_prepareMatches', - value: function _prepareMatches(matchesWithLength, matches, matchesLength) { - function isSubTerm(matchesWithLength, currentIndex) { - var currentElem = matchesWithLength[currentIndex]; - var nextElem = matchesWithLength[currentIndex + 1]; - if (currentIndex < matchesWithLength.length - 1 && currentElem.match === nextElem.match) { - currentElem.skipped = true; - return true; - } - for (var i = currentIndex - 1; i >= 0; i--) { - var prevElem = matchesWithLength[i]; - if (prevElem.skipped) { - continue; - } - if (prevElem.match + prevElem.matchLength < currentElem.match) { - break; - } - if (prevElem.match + prevElem.matchLength >= currentElem.match + currentElem.matchLength) { - currentElem.skipped = true; - return true; - } - } - return false; - } - matchesWithLength.sort(function (a, b) { - return a.match === b.match ? a.matchLength - b.matchLength : a.match - b.match; - }); - for (var i = 0, len = matchesWithLength.length; i < len; i++) { - if (isSubTerm(matchesWithLength, i)) { - continue; - } - matches.push(matchesWithLength[i].match); - matchesLength.push(matchesWithLength[i].matchLength); - } - } - }, { - key: 'calcFindPhraseMatch', - value: function calcFindPhraseMatch(query, pageIndex, pageContent) { - var matches = []; - var queryLen = query.length; - var matchIdx = -queryLen; - while (true) { - matchIdx = pageContent.indexOf(query, matchIdx + queryLen); - if (matchIdx === -1) { - break; - } - matches.push(matchIdx); - } - this.pageMatches[pageIndex] = matches; - } - }, { - key: 'calcFindWordMatch', - value: function calcFindWordMatch(query, pageIndex, pageContent) { - var matchesWithLength = []; - var queryArray = query.match(/\S+/g); - for (var i = 0, len = queryArray.length; i < len; i++) { - var subquery = queryArray[i]; - var subqueryLen = subquery.length; - var matchIdx = -subqueryLen; - while (true) { - matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen); - if (matchIdx === -1) { - break; - } - matchesWithLength.push({ - match: matchIdx, - matchLength: subqueryLen, - skipped: false - }); - } - } - if (!this.pageMatchesLength) { - this.pageMatchesLength = []; - } - this.pageMatchesLength[pageIndex] = []; - this.pageMatches[pageIndex] = []; - this._prepareMatches(matchesWithLength, this.pageMatches[pageIndex], this.pageMatchesLength[pageIndex]); - } - }, { - key: 'calcFindMatch', - value: function calcFindMatch(pageIndex) { - var pageContent = this.normalize(this.pageContents[pageIndex]); - var query = this.normalize(this.state.query); - var caseSensitive = this.state.caseSensitive; - var phraseSearch = this.state.phraseSearch; - var queryLen = query.length; - if (queryLen === 0) { - return; - } - if (!caseSensitive) { - pageContent = pageContent.toLowerCase(); - query = query.toLowerCase(); - } - if (phraseSearch) { - this.calcFindPhraseMatch(query, pageIndex, pageContent); - } else { - this.calcFindWordMatch(query, pageIndex, pageContent); - } - this.updatePage(pageIndex); - if (this.resumePageIdx === pageIndex) { - this.resumePageIdx = null; - this.nextPageMatch(); - } - if (this.pageMatches[pageIndex].length > 0) { - this.matchCount += this.pageMatches[pageIndex].length; - this.updateUIResultsCount(); - } - } - }, { - key: 'extractText', - value: function extractText() { - var _this2 = this; - - if (this.startedTextExtraction) { - return; - } - this.startedTextExtraction = true; - this.pageContents.length = 0; - var promise = Promise.resolve(); - - var _loop = function _loop(i, ii) { - var extractTextCapability = (0, _pdfjsLib.createPromiseCapability)(); - _this2.extractTextPromises[i] = extractTextCapability.promise; - promise = promise.then(function () { - return _this2.pdfViewer.getPageTextContent(i).then(function (textContent) { - var textItems = textContent.items; - var strBuf = []; - for (var j = 0, jj = textItems.length; j < jj; j++) { - strBuf.push(textItems[j].str); - } - _this2.pageContents[i] = strBuf.join(''); - extractTextCapability.resolve(i); - }, function (reason) { - console.error('Unable to get page ' + (i + 1) + ' text content', reason); - _this2.pageContents[i] = ''; - extractTextCapability.resolve(i); - }); - }); - }; - - for (var i = 0, ii = this.pdfViewer.pagesCount; i < ii; i++) { - _loop(i, ii); - } - } - }, { - key: 'executeCommand', - value: function executeCommand(cmd, state) { - var _this3 = this; - - if (this.state === null || cmd !== 'findagain') { - this.dirtyMatch = true; - } - this.state = state; - this.updateUIState(FindState.PENDING); - this._firstPagePromise.then(function () { - _this3.extractText(); - clearTimeout(_this3.findTimeout); - if (cmd === 'find') { - _this3.findTimeout = setTimeout(_this3.nextMatch.bind(_this3), FIND_TIMEOUT); - } else { - _this3.nextMatch(); - } - }); - } - }, { - key: 'updatePage', - value: function updatePage(index) { - if (this.selected.pageIdx === index) { - this.pdfViewer.currentPageNumber = index + 1; - } - var page = this.pdfViewer.getPageView(index); - if (page.textLayer) { - page.textLayer.updateMatches(); - } - } - }, { - key: 'nextMatch', - value: function nextMatch() { - var _this4 = this; - - var previous = this.state.findPrevious; - var currentPageIndex = this.pdfViewer.currentPageNumber - 1; - var numPages = this.pdfViewer.pagesCount; - this.active = true; - if (this.dirtyMatch) { - this.dirtyMatch = false; - this.selected.pageIdx = this.selected.matchIdx = -1; - this.offset.pageIdx = currentPageIndex; - this.offset.matchIdx = null; - this.hadMatch = false; - this.resumePageIdx = null; - this.pageMatches = []; - this.matchCount = 0; - this.pageMatchesLength = null; - for (var i = 0; i < numPages; i++) { - this.updatePage(i); - if (!(i in this.pendingFindMatches)) { - this.pendingFindMatches[i] = true; - this.extractTextPromises[i].then(function (pageIdx) { - delete _this4.pendingFindMatches[pageIdx]; - _this4.calcFindMatch(pageIdx); - }); - } - } - } - if (this.state.query === '') { - this.updateUIState(FindState.FOUND); - return; - } - if (this.resumePageIdx) { - return; - } - var offset = this.offset; - this.pagesToSearch = numPages; - if (offset.matchIdx !== null) { - var numPageMatches = this.pageMatches[offset.pageIdx].length; - if (!previous && offset.matchIdx + 1 < numPageMatches || previous && offset.matchIdx > 0) { - this.hadMatch = true; - offset.matchIdx = previous ? offset.matchIdx - 1 : offset.matchIdx + 1; - this.updateMatch(true); - return; - } - this.advanceOffsetPage(previous); - } - this.nextPageMatch(); - } - }, { - key: 'matchesReady', - value: function matchesReady(matches) { - var offset = this.offset; - var numMatches = matches.length; - var previous = this.state.findPrevious; - if (numMatches) { - this.hadMatch = true; - offset.matchIdx = previous ? numMatches - 1 : 0; - this.updateMatch(true); - return true; - } - this.advanceOffsetPage(previous); - if (offset.wrapped) { - offset.matchIdx = null; - if (this.pagesToSearch < 0) { - this.updateMatch(false); - return true; - } - } - return false; - } - }, { - key: 'updateMatchPosition', - value: function updateMatchPosition(pageIndex, matchIndex, elements, beginIdx) { - if (this.selected.matchIdx === matchIndex && this.selected.pageIdx === pageIndex) { - var spot = { - top: FIND_SCROLL_OFFSET_TOP, - left: FIND_SCROLL_OFFSET_LEFT - }; - (0, _ui_utils.scrollIntoView)(elements[beginIdx], spot, true); - } - } - }, { - key: 'nextPageMatch', - value: function nextPageMatch() { - if (this.resumePageIdx !== null) { - console.error('There can only be one pending page.'); - } - var matches = null; - do { - var pageIdx = this.offset.pageIdx; - matches = this.pageMatches[pageIdx]; - if (!matches) { - this.resumePageIdx = pageIdx; - break; - } - } while (!this.matchesReady(matches)); - } - }, { - key: 'advanceOffsetPage', - value: function advanceOffsetPage(previous) { - var offset = this.offset; - var numPages = this.extractTextPromises.length; - offset.pageIdx = previous ? offset.pageIdx - 1 : offset.pageIdx + 1; - offset.matchIdx = null; - this.pagesToSearch--; - if (offset.pageIdx >= numPages || offset.pageIdx < 0) { - offset.pageIdx = previous ? numPages - 1 : 0; - offset.wrapped = true; - } - } - }, { - key: 'updateMatch', - value: function updateMatch() { - var found = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var state = FindState.NOT_FOUND; - var wrapped = this.offset.wrapped; - this.offset.wrapped = false; - if (found) { - var previousPage = this.selected.pageIdx; - this.selected.pageIdx = this.offset.pageIdx; - this.selected.matchIdx = this.offset.matchIdx; - state = wrapped ? FindState.WRAPPED : FindState.FOUND; - if (previousPage !== -1 && previousPage !== this.selected.pageIdx) { - this.updatePage(previousPage); - } - } - this.updateUIState(state, this.state.findPrevious); - if (this.selected.pageIdx !== -1) { - this.updatePage(this.selected.pageIdx); - } - } - }, { - key: 'updateUIResultsCount', - value: function updateUIResultsCount() { - if (this.onUpdateResultsCount) { - this.onUpdateResultsCount(this.matchCount); - } - } - }, { - key: 'updateUIState', - value: function updateUIState(state, previous) { - if (this.onUpdateState) { - this.onUpdateState(state, previous, this.matchCount); - } - } - }]); - - return PDFFindController; -}(); - -exports.FindState = FindState; -exports.PDFFindController = PDFFindController; - -/***/ }), -/* 8 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.GenericCom = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _app = __webpack_require__(4); - -var _preferences = __webpack_require__(28); - -var _download_manager = __webpack_require__(12); - -var _genericl10n = __webpack_require__(13); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -function _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return call && (typeof call === "object" || typeof call === "function") ? call : self; } - -function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; } - -; -var GenericCom = {}; - -var GenericPreferences = function (_BasePreferences) { - _inherits(GenericPreferences, _BasePreferences); - - function GenericPreferences() { - _classCallCheck(this, GenericPreferences); - - return _possibleConstructorReturn(this, (GenericPreferences.__proto__ || Object.getPrototypeOf(GenericPreferences)).apply(this, arguments)); - } - - _createClass(GenericPreferences, [{ - key: '_writeToStorage', - value: function _writeToStorage(prefObj) { - return new Promise(function (resolve) { - localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj)); - resolve(); - }); - } - }, { - key: '_readFromStorage', - value: function _readFromStorage(prefObj) { - return new Promise(function (resolve) { - var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences')); - resolve(readPrefs); - }); - } - }]); - - return GenericPreferences; -}(_preferences.BasePreferences); - -var GenericExternalServices = Object.create(_app.DefaultExternalServices); -GenericExternalServices.createDownloadManager = function () { - return new _download_manager.DownloadManager(); -}; -GenericExternalServices.createPreferences = function () { - return new GenericPreferences(); -}; -GenericExternalServices.createL10n = function () { - return new _genericl10n.GenericL10n(_pdfjsLib.PDFJS.locale); -}; -_app.PDFViewerApplication.externalServices = GenericExternalServices; -exports.GenericCom = GenericCom; - -/***/ }), -/* 9 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFPrintService = undefined; - -var _ui_utils = __webpack_require__(0); - -var _app = __webpack_require__(4); - -var _pdfjsLib = __webpack_require__(1); - -var activeService = null; -var overlayManager = null; -function renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) { - var scratchCanvas = activeService.scratchCanvas; - var PRINT_RESOLUTION = 150; - var PRINT_UNITS = PRINT_RESOLUTION / 72.0; - scratchCanvas.width = Math.floor(size.width * PRINT_UNITS); - scratchCanvas.height = Math.floor(size.height * PRINT_UNITS); - var width = Math.floor(size.width * _ui_utils.CSS_UNITS) + 'px'; - var height = Math.floor(size.height * _ui_utils.CSS_UNITS) + 'px'; - var ctx = scratchCanvas.getContext('2d'); - ctx.save(); - ctx.fillStyle = 'rgb(255, 255, 255)'; - ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height); - ctx.restore(); - return pdfDocument.getPage(pageNumber).then(function (pdfPage) { - var renderContext = { - canvasContext: ctx, - transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0], - viewport: pdfPage.getViewport(1, size.rotation), - intent: 'print' - }; - return pdfPage.render(renderContext).promise; - }).then(function () { - return { - width: width, - height: height - }; - }); -} -function PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) { - this.pdfDocument = pdfDocument; - this.pagesOverview = pagesOverview; - this.printContainer = printContainer; - this.l10n = l10n || _ui_utils.NullL10n; - this.currentPage = -1; - this.scratchCanvas = document.createElement('canvas'); -} -PDFPrintService.prototype = { - layout: function layout() { - this.throwIfInactive(); - var body = document.querySelector('body'); - body.setAttribute('data-pdfjsprinting', true); - var hasEqualPageSizes = this.pagesOverview.every(function (size) { - return size.width === this.pagesOverview[0].width && size.height === this.pagesOverview[0].height; - }, this); - if (!hasEqualPageSizes) { - console.warn('Not all pages have the same size. The printed ' + 'result may be incorrect!'); - } - this.pageStyleSheet = document.createElement('style'); - var pageSize = this.pagesOverview[0]; - this.pageStyleSheet.textContent = '@supports ((size:A4) and (size:1pt 1pt)) {' + '@page { size: ' + pageSize.width + 'pt ' + pageSize.height + 'pt;}' + '}'; - body.appendChild(this.pageStyleSheet); - }, - destroy: function destroy() { - if (activeService !== this) { - return; - } - this.printContainer.textContent = ''; - if (this.pageStyleSheet && this.pageStyleSheet.parentNode) { - this.pageStyleSheet.parentNode.removeChild(this.pageStyleSheet); - this.pageStyleSheet = null; - } - this.scratchCanvas.width = this.scratchCanvas.height = 0; - this.scratchCanvas = null; - activeService = null; - ensureOverlay().then(function () { - if (overlayManager.active !== 'printServiceOverlay') { - return; - } - overlayManager.close('printServiceOverlay'); - }); - }, - renderPages: function renderPages() { - var _this = this; - - var pageCount = this.pagesOverview.length; - var renderNextPage = function renderNextPage(resolve, reject) { - _this.throwIfInactive(); - if (++_this.currentPage >= pageCount) { - renderProgress(pageCount, pageCount, _this.l10n); - resolve(); - return; - } - var index = _this.currentPage; - renderProgress(index, pageCount, _this.l10n); - renderPage(_this, _this.pdfDocument, index + 1, _this.pagesOverview[index]).then(_this.useRenderedPage.bind(_this)).then(function () { - renderNextPage(resolve, reject); - }, reject); - }; - return new Promise(renderNextPage); - }, - useRenderedPage: function useRenderedPage(printItem) { - this.throwIfInactive(); - var img = document.createElement('img'); - img.style.width = printItem.width; - img.style.height = printItem.height; - var scratchCanvas = this.scratchCanvas; - if ('toBlob' in scratchCanvas && !_pdfjsLib.PDFJS.disableCreateObjectURL) { - scratchCanvas.toBlob(function (blob) { - img.src = URL.createObjectURL(blob); - }); - } else { - img.src = scratchCanvas.toDataURL(); - } - var wrapper = document.createElement('div'); - wrapper.appendChild(img); - this.printContainer.appendChild(wrapper); - return new Promise(function (resolve, reject) { - img.onload = resolve; - img.onerror = reject; - }); - }, - performPrint: function performPrint() { - var _this2 = this; - - this.throwIfInactive(); - return new Promise(function (resolve) { - setTimeout(function () { - if (!_this2.active) { - resolve(); - return; - } - print.call(window); - setTimeout(resolve, 20); - }, 0); - }); - }, - - get active() { - return this === activeService; - }, - throwIfInactive: function throwIfInactive() { - if (!this.active) { - throw new Error('This print request was cancelled or completed.'); - } - } -}; -var print = window.print; -window.print = function print() { - if (activeService) { - console.warn('Ignored window.print() because of a pending print job.'); - return; - } - ensureOverlay().then(function () { - if (activeService) { - overlayManager.open('printServiceOverlay'); - } - }); - try { - dispatchEvent('beforeprint'); - } finally { - if (!activeService) { - console.error('Expected print service to be initialized.'); - ensureOverlay().then(function () { - if (overlayManager.active === 'printServiceOverlay') { - overlayManager.close('printServiceOverlay'); - } - }); - return; - } - var activeServiceOnEntry = activeService; - activeService.renderPages().then(function () { - return activeServiceOnEntry.performPrint(); - }).catch(function () {}).then(function () { - if (activeServiceOnEntry.active) { - abort(); - } - }); - } -}; -function dispatchEvent(eventType) { - var event = document.createEvent('CustomEvent'); - event.initCustomEvent(eventType, false, false, 'custom'); - window.dispatchEvent(event); -} -function abort() { - if (activeService) { - activeService.destroy(); - dispatchEvent('afterprint'); - } -} -function renderProgress(index, total, l10n) { - var progressContainer = document.getElementById('printServiceOverlay'); - var progress = Math.round(100 * index / total); - var progressBar = progressContainer.querySelector('progress'); - var progressPerc = progressContainer.querySelector('.relative-progress'); - progressBar.value = progress; - l10n.get('print_progress_percent', { progress: progress }, progress + '%').then(function (msg) { - progressPerc.textContent = msg; - }); -} -var hasAttachEvent = !!document.attachEvent; -window.addEventListener('keydown', function (event) { - if (event.keyCode === 80 && (event.ctrlKey || event.metaKey) && !event.altKey && (!event.shiftKey || window.chrome || window.opera)) { - window.print(); - if (hasAttachEvent) { - return; - } - event.preventDefault(); - if (event.stopImmediatePropagation) { - event.stopImmediatePropagation(); - } else { - event.stopPropagation(); - } - return; - } -}, true); -if (hasAttachEvent) { - document.attachEvent('onkeydown', function (event) { - event = event || window.event; - if (event.keyCode === 80 && event.ctrlKey) { - event.keyCode = 0; - return false; - } - }); -} -if ('onbeforeprint' in window) { - var stopPropagationIfNeeded = function stopPropagationIfNeeded(event) { - if (event.detail !== 'custom' && event.stopImmediatePropagation) { - event.stopImmediatePropagation(); - } - }; - window.addEventListener('beforeprint', stopPropagationIfNeeded); - window.addEventListener('afterprint', stopPropagationIfNeeded); -} -var overlayPromise; -function ensureOverlay() { - if (!overlayPromise) { - overlayManager = _app.PDFViewerApplication.overlayManager; - if (!overlayManager) { - throw new Error('The overlay manager has not yet been initialized.'); - } - overlayPromise = overlayManager.register('printServiceOverlay', document.getElementById('printServiceOverlay'), abort, true); - document.getElementById('printCancel').onclick = abort; - } - return overlayPromise; -} -_app.PDFPrintServiceFactory.instance = { - supportsPrinting: true, - createPrintService: function createPrintService(pdfDocument, pagesOverview, printContainer, l10n) { - if (activeService) { - throw new Error('The print service is created and active.'); - } - activeService = new PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n); - return activeService; - } -}; -exports.PDFPrintService = PDFPrintService; - -/***/ }), -/* 10 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -document.webL10n = function (window, document, undefined) { - var gL10nData = {}; - var gTextData = ''; - var gTextProp = 'textContent'; - var gLanguage = ''; - var gMacros = {}; - var gReadyState = 'loading'; - var gAsyncResourceLoading = true; - function getL10nResourceLinks() { - return document.querySelectorAll('link[type="application/l10n"]'); - } - function getL10nDictionary() { - var script = document.querySelector('script[type="application/l10n"]'); - return script ? JSON.parse(script.innerHTML) : null; - } - function getTranslatableChildren(element) { - return element ? element.querySelectorAll('*[data-l10n-id]') : []; - } - function getL10nAttributes(element) { - if (!element) return {}; - var l10nId = element.getAttribute('data-l10n-id'); - var l10nArgs = element.getAttribute('data-l10n-args'); - var args = {}; - if (l10nArgs) { - try { - args = JSON.parse(l10nArgs); - } catch (e) { - console.warn('could not parse arguments for #' + l10nId); - } - } - return { - id: l10nId, - args: args - }; - } - function fireL10nReadyEvent(lang) { - var evtObject = document.createEvent('Event'); - evtObject.initEvent('localized', true, false); - evtObject.language = lang; - document.dispatchEvent(evtObject); - } - function xhrLoadText(url, onSuccess, onFailure) { - onSuccess = onSuccess || function _onSuccess(data) {}; - onFailure = onFailure || function _onFailure() {}; - var xhr = new XMLHttpRequest(); - xhr.open('GET', url, gAsyncResourceLoading); - if (xhr.overrideMimeType) { - xhr.overrideMimeType('text/plain; charset=utf-8'); - } - xhr.onreadystatechange = function () { - if (xhr.readyState == 4) { - if (xhr.status == 200 || xhr.status === 0) { - onSuccess(xhr.responseText); - } else { - onFailure(); - } - } - }; - xhr.onerror = onFailure; - xhr.ontimeout = onFailure; - try { - xhr.send(null); - } catch (e) { - onFailure(); - } - } - function parseResource(href, lang, successCallback, failureCallback) { - var baseURL = href.replace(/[^\/]*$/, '') || './'; - function evalString(text) { - if (text.lastIndexOf('\\') < 0) return text; - return text.replace(/\\\\/g, '\\').replace(/\\n/g, '\n').replace(/\\r/g, '\r').replace(/\\t/g, '\t').replace(/\\b/g, '\b').replace(/\\f/g, '\f').replace(/\\{/g, '{').replace(/\\}/g, '}').replace(/\\"/g, '"').replace(/\\'/g, "'"); - } - function parseProperties(text, parsedPropertiesCallback) { - var dictionary = {}; - var reBlank = /^\s*|\s*$/; - var reComment = /^\s*#|^\s*$/; - var reSection = /^\s*\[(.*)\]\s*$/; - var reImport = /^\s*@import\s+url\((.*)\)\s*$/i; - var reSplit = /^([^=\s]*)\s*=\s*(.+)$/; - function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) { - var entries = rawText.replace(reBlank, '').split(/[\r\n]+/); - var currentLang = '*'; - var genericLang = lang.split('-', 1)[0]; - var skipLang = false; - var match = ''; - function nextEntry() { - while (true) { - if (!entries.length) { - parsedRawLinesCallback(); - return; - } - var line = entries.shift(); - if (reComment.test(line)) continue; - if (extendedSyntax) { - match = reSection.exec(line); - if (match) { - currentLang = match[1].toLowerCase(); - skipLang = currentLang !== '*' && currentLang !== lang && currentLang !== genericLang; - continue; - } else if (skipLang) { - continue; - } - match = reImport.exec(line); - if (match) { - loadImport(baseURL + match[1], nextEntry); - return; - } - } - var tmp = line.match(reSplit); - if (tmp && tmp.length == 3) { - dictionary[tmp[1]] = evalString(tmp[2]); - } - } - } - nextEntry(); - } - function loadImport(url, callback) { - xhrLoadText(url, function (content) { - parseRawLines(content, false, callback); - }, function () { - console.warn(url + ' not found.'); - callback(); - }); - } - parseRawLines(text, true, function () { - parsedPropertiesCallback(dictionary); - }); - } - xhrLoadText(href, function (response) { - gTextData += response; - parseProperties(response, function (data) { - for (var key in data) { - var id, - prop, - index = key.lastIndexOf('.'); - if (index > 0) { - id = key.substring(0, index); - prop = key.substr(index + 1); - } else { - id = key; - prop = gTextProp; - } - if (!gL10nData[id]) { - gL10nData[id] = {}; - } - gL10nData[id][prop] = data[key]; - } - if (successCallback) { - successCallback(); - } - }); - }, failureCallback); - } - function loadLocale(lang, callback) { - if (lang) { - lang = lang.toLowerCase(); - } - callback = callback || function _callback() {}; - clear(); - gLanguage = lang; - var langLinks = getL10nResourceLinks(); - var langCount = langLinks.length; - if (langCount === 0) { - var dict = getL10nDictionary(); - if (dict && dict.locales && dict.default_locale) { - console.log('using the embedded JSON directory, early way out'); - gL10nData = dict.locales[lang]; - if (!gL10nData) { - var defaultLocale = dict.default_locale.toLowerCase(); - for (var anyCaseLang in dict.locales) { - anyCaseLang = anyCaseLang.toLowerCase(); - if (anyCaseLang === lang) { - gL10nData = dict.locales[lang]; - break; - } else if (anyCaseLang === defaultLocale) { - gL10nData = dict.locales[defaultLocale]; - } - } - } - callback(); - } else { - console.log('no resource to load, early way out'); - } - fireL10nReadyEvent(lang); - gReadyState = 'complete'; - return; - } - var onResourceLoaded = null; - var gResourceCount = 0; - onResourceLoaded = function onResourceLoaded() { - gResourceCount++; - if (gResourceCount >= langCount) { - callback(); - fireL10nReadyEvent(lang); - gReadyState = 'complete'; - } - }; - function L10nResourceLink(link) { - var href = link.href; - this.load = function (lang, callback) { - parseResource(href, lang, callback, function () { - console.warn(href + ' not found.'); - console.warn('"' + lang + '" resource not found'); - gLanguage = ''; - callback(); - }); - }; - } - for (var i = 0; i < langCount; i++) { - var resource = new L10nResourceLink(langLinks[i]); - resource.load(lang, onResourceLoaded); - } - } - function clear() { - gL10nData = {}; - gTextData = ''; - gLanguage = ''; - } - function getPluralRules(lang) { - var locales2rules = { - 'af': 3, - 'ak': 4, - 'am': 4, - 'ar': 1, - 'asa': 3, - 'az': 0, - 'be': 11, - 'bem': 3, - 'bez': 3, - 'bg': 3, - 'bh': 4, - 'bm': 0, - 'bn': 3, - 'bo': 0, - 'br': 20, - 'brx': 3, - 'bs': 11, - 'ca': 3, - 'cgg': 3, - 'chr': 3, - 'cs': 12, - 'cy': 17, - 'da': 3, - 'de': 3, - 'dv': 3, - 'dz': 0, - 'ee': 3, - 'el': 3, - 'en': 3, - 'eo': 3, - 'es': 3, - 'et': 3, - 'eu': 3, - 'fa': 0, - 'ff': 5, - 'fi': 3, - 'fil': 4, - 'fo': 3, - 'fr': 5, - 'fur': 3, - 'fy': 3, - 'ga': 8, - 'gd': 24, - 'gl': 3, - 'gsw': 3, - 'gu': 3, - 'guw': 4, - 'gv': 23, - 'ha': 3, - 'haw': 3, - 'he': 2, - 'hi': 4, - 'hr': 11, - 'hu': 0, - 'id': 0, - 'ig': 0, - 'ii': 0, - 'is': 3, - 'it': 3, - 'iu': 7, - 'ja': 0, - 'jmc': 3, - 'jv': 0, - 'ka': 0, - 'kab': 5, - 'kaj': 3, - 'kcg': 3, - 'kde': 0, - 'kea': 0, - 'kk': 3, - 'kl': 3, - 'km': 0, - 'kn': 0, - 'ko': 0, - 'ksb': 3, - 'ksh': 21, - 'ku': 3, - 'kw': 7, - 'lag': 18, - 'lb': 3, - 'lg': 3, - 'ln': 4, - 'lo': 0, - 'lt': 10, - 'lv': 6, - 'mas': 3, - 'mg': 4, - 'mk': 16, - 'ml': 3, - 'mn': 3, - 'mo': 9, - 'mr': 3, - 'ms': 0, - 'mt': 15, - 'my': 0, - 'nah': 3, - 'naq': 7, - 'nb': 3, - 'nd': 3, - 'ne': 3, - 'nl': 3, - 'nn': 3, - 'no': 3, - 'nr': 3, - 'nso': 4, - 'ny': 3, - 'nyn': 3, - 'om': 3, - 'or': 3, - 'pa': 3, - 'pap': 3, - 'pl': 13, - 'ps': 3, - 'pt': 3, - 'rm': 3, - 'ro': 9, - 'rof': 3, - 'ru': 11, - 'rwk': 3, - 'sah': 0, - 'saq': 3, - 'se': 7, - 'seh': 3, - 'ses': 0, - 'sg': 0, - 'sh': 11, - 'shi': 19, - 'sk': 12, - 'sl': 14, - 'sma': 7, - 'smi': 7, - 'smj': 7, - 'smn': 7, - 'sms': 7, - 'sn': 3, - 'so': 3, - 'sq': 3, - 'sr': 11, - 'ss': 3, - 'ssy': 3, - 'st': 3, - 'sv': 3, - 'sw': 3, - 'syr': 3, - 'ta': 3, - 'te': 3, - 'teo': 3, - 'th': 0, - 'ti': 4, - 'tig': 3, - 'tk': 3, - 'tl': 4, - 'tn': 3, - 'to': 0, - 'tr': 0, - 'ts': 3, - 'tzm': 22, - 'uk': 11, - 'ur': 3, - 've': 3, - 'vi': 0, - 'vun': 3, - 'wa': 4, - 'wae': 3, - 'wo': 0, - 'xh': 3, - 'xog': 3, - 'yo': 0, - 'zh': 0, - 'zu': 3 - }; - function isIn(n, list) { - return list.indexOf(n) !== -1; - } - function isBetween(n, start, end) { - return start <= n && n <= end; - } - var pluralRules = { - '0': function _(n) { - return 'other'; - }, - '1': function _(n) { - if (isBetween(n % 100, 3, 10)) return 'few'; - if (n === 0) return 'zero'; - if (isBetween(n % 100, 11, 99)) return 'many'; - if (n == 2) return 'two'; - if (n == 1) return 'one'; - return 'other'; - }, - '2': function _(n) { - if (n !== 0 && n % 10 === 0) return 'many'; - if (n == 2) return 'two'; - if (n == 1) return 'one'; - return 'other'; - }, - '3': function _(n) { - if (n == 1) return 'one'; - return 'other'; - }, - '4': function _(n) { - if (isBetween(n, 0, 1)) return 'one'; - return 'other'; - }, - '5': function _(n) { - if (isBetween(n, 0, 2) && n != 2) return 'one'; - return 'other'; - }, - '6': function _(n) { - if (n === 0) return 'zero'; - if (n % 10 == 1 && n % 100 != 11) return 'one'; - return 'other'; - }, - '7': function _(n) { - if (n == 2) return 'two'; - if (n == 1) return 'one'; - return 'other'; - }, - '8': function _(n) { - if (isBetween(n, 3, 6)) return 'few'; - if (isBetween(n, 7, 10)) return 'many'; - if (n == 2) return 'two'; - if (n == 1) return 'one'; - return 'other'; - }, - '9': function _(n) { - if (n === 0 || n != 1 && isBetween(n % 100, 1, 19)) return 'few'; - if (n == 1) return 'one'; - return 'other'; - }, - '10': function _(n) { - if (isBetween(n % 10, 2, 9) && !isBetween(n % 100, 11, 19)) return 'few'; - if (n % 10 == 1 && !isBetween(n % 100, 11, 19)) return 'one'; - return 'other'; - }, - '11': function _(n) { - if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; - if (n % 10 === 0 || isBetween(n % 10, 5, 9) || isBetween(n % 100, 11, 14)) return 'many'; - if (n % 10 == 1 && n % 100 != 11) return 'one'; - return 'other'; - }, - '12': function _(n) { - if (isBetween(n, 2, 4)) return 'few'; - if (n == 1) return 'one'; - return 'other'; - }, - '13': function _(n) { - if (isBetween(n % 10, 2, 4) && !isBetween(n % 100, 12, 14)) return 'few'; - if (n != 1 && isBetween(n % 10, 0, 1) || isBetween(n % 10, 5, 9) || isBetween(n % 100, 12, 14)) return 'many'; - if (n == 1) return 'one'; - return 'other'; - }, - '14': function _(n) { - if (isBetween(n % 100, 3, 4)) return 'few'; - if (n % 100 == 2) return 'two'; - if (n % 100 == 1) return 'one'; - return 'other'; - }, - '15': function _(n) { - if (n === 0 || isBetween(n % 100, 2, 10)) return 'few'; - if (isBetween(n % 100, 11, 19)) return 'many'; - if (n == 1) return 'one'; - return 'other'; - }, - '16': function _(n) { - if (n % 10 == 1 && n != 11) return 'one'; - return 'other'; - }, - '17': function _(n) { - if (n == 3) return 'few'; - if (n === 0) return 'zero'; - if (n == 6) return 'many'; - if (n == 2) return 'two'; - if (n == 1) return 'one'; - return 'other'; - }, - '18': function _(n) { - if (n === 0) return 'zero'; - if (isBetween(n, 0, 2) && n !== 0 && n != 2) return 'one'; - return 'other'; - }, - '19': function _(n) { - if (isBetween(n, 2, 10)) return 'few'; - if (isBetween(n, 0, 1)) return 'one'; - return 'other'; - }, - '20': function _(n) { - if ((isBetween(n % 10, 3, 4) || n % 10 == 9) && !(isBetween(n % 100, 10, 19) || isBetween(n % 100, 70, 79) || isBetween(n % 100, 90, 99))) return 'few'; - if (n % 1000000 === 0 && n !== 0) return 'many'; - if (n % 10 == 2 && !isIn(n % 100, [12, 72, 92])) return 'two'; - if (n % 10 == 1 && !isIn(n % 100, [11, 71, 91])) return 'one'; - return 'other'; - }, - '21': function _(n) { - if (n === 0) return 'zero'; - if (n == 1) return 'one'; - return 'other'; - }, - '22': function _(n) { - if (isBetween(n, 0, 1) || isBetween(n, 11, 99)) return 'one'; - return 'other'; - }, - '23': function _(n) { - if (isBetween(n % 10, 1, 2) || n % 20 === 0) return 'one'; - return 'other'; - }, - '24': function _(n) { - if (isBetween(n, 3, 10) || isBetween(n, 13, 19)) return 'few'; - if (isIn(n, [2, 12])) return 'two'; - if (isIn(n, [1, 11])) return 'one'; - return 'other'; - } - }; - var index = locales2rules[lang.replace(/-.*$/, '')]; - if (!(index in pluralRules)) { - console.warn('plural form unknown for [' + lang + ']'); - return function () { - return 'other'; - }; - } - return pluralRules[index]; - } - gMacros.plural = function (str, param, key, prop) { - var n = parseFloat(param); - if (isNaN(n)) return str; - if (prop != gTextProp) return str; - if (!gMacros._pluralRules) { - gMacros._pluralRules = getPluralRules(gLanguage); - } - var index = '[' + gMacros._pluralRules(n) + ']'; - if (n === 0 && key + '[zero]' in gL10nData) { - str = gL10nData[key + '[zero]'][prop]; - } else if (n == 1 && key + '[one]' in gL10nData) { - str = gL10nData[key + '[one]'][prop]; - } else if (n == 2 && key + '[two]' in gL10nData) { - str = gL10nData[key + '[two]'][prop]; - } else if (key + index in gL10nData) { - str = gL10nData[key + index][prop]; - } else if (key + '[other]' in gL10nData) { - str = gL10nData[key + '[other]'][prop]; - } - return str; - }; - function getL10nData(key, args, fallback) { - var data = gL10nData[key]; - if (!data) { - console.warn('#' + key + ' is undefined.'); - if (!fallback) { - return null; - } - data = fallback; - } - var rv = {}; - for (var prop in data) { - var str = data[prop]; - str = substIndexes(str, args, key, prop); - str = substArguments(str, args, key); - rv[prop] = str; - } - return rv; - } - function substIndexes(str, args, key, prop) { - var reIndex = /\{\[\s*([a-zA-Z]+)\(([a-zA-Z]+)\)\s*\]\}/; - var reMatch = reIndex.exec(str); - if (!reMatch || !reMatch.length) return str; - var macroName = reMatch[1]; - var paramName = reMatch[2]; - var param; - if (args && paramName in args) { - param = args[paramName]; - } else if (paramName in gL10nData) { - param = gL10nData[paramName]; - } - if (macroName in gMacros) { - var macro = gMacros[macroName]; - str = macro(str, param, key, prop); - } - return str; - } - function substArguments(str, args, key) { - var reArgs = /\{\{\s*(.+?)\s*\}\}/g; - return str.replace(reArgs, function (matched_text, arg) { - if (args && arg in args) { - return args[arg]; - } - if (arg in gL10nData) { - return gL10nData[arg]; - } - console.log('argument {{' + arg + '}} for #' + key + ' is undefined.'); - return matched_text; - }); - } - function translateElement(element) { - var l10n = getL10nAttributes(element); - if (!l10n.id) return; - var data = getL10nData(l10n.id, l10n.args); - if (!data) { - console.warn('#' + l10n.id + ' is undefined.'); - return; - } - if (data[gTextProp]) { - if (getChildElementCount(element) === 0) { - element[gTextProp] = data[gTextProp]; - } else { - var children = element.childNodes; - var found = false; - for (var i = 0, l = children.length; i < l; i++) { - if (children[i].nodeType === 3 && /\S/.test(children[i].nodeValue)) { - if (found) { - children[i].nodeValue = ''; - } else { - children[i].nodeValue = data[gTextProp]; - found = true; - } - } - } - if (!found) { - var textNode = document.createTextNode(data[gTextProp]); - element.insertBefore(textNode, element.firstChild); - } - } - delete data[gTextProp]; - } - for (var k in data) { - element[k] = data[k]; - } - } - function getChildElementCount(element) { - if (element.children) { - return element.children.length; - } - if (typeof element.childElementCount !== 'undefined') { - return element.childElementCount; - } - var count = 0; - for (var i = 0; i < element.childNodes.length; i++) { - count += element.nodeType === 1 ? 1 : 0; - } - return count; - } - function translateFragment(element) { - element = element || document.documentElement; - var children = getTranslatableChildren(element); - var elementCount = children.length; - for (var i = 0; i < elementCount; i++) { - translateElement(children[i]); - } - translateElement(element); - } - return { - get: function get(key, args, fallbackString) { - var index = key.lastIndexOf('.'); - var prop = gTextProp; - if (index > 0) { - prop = key.substr(index + 1); - key = key.substring(0, index); - } - var fallback; - if (fallbackString) { - fallback = {}; - fallback[prop] = fallbackString; - } - var data = getL10nData(key, args, fallback); - if (data && prop in data) { - return data[prop]; - } - return '{{' + key + '}}'; - }, - getData: function getData() { - return gL10nData; - }, - getText: function getText() { - return gTextData; - }, - getLanguage: function getLanguage() { - return gLanguage; - }, - setLanguage: function setLanguage(lang, callback) { - loadLocale(lang, function () { - if (callback) callback(); - }); - }, - getDirection: function getDirection() { - var rtlList = ['ar', 'he', 'fa', 'ps', 'ur']; - var shortCode = gLanguage.split('-', 1)[0]; - return rtlList.indexOf(shortCode) >= 0 ? 'rtl' : 'ltr'; - }, - translate: translateFragment, - getReadyState: function getReadyState() { - return gReadyState; - }, - ready: function ready(callback) { - if (!callback) { - return; - } else if (gReadyState == 'complete' || gReadyState == 'interactive') { - window.setTimeout(function () { - callback(); - }); - } else if (document.addEventListener) { - document.addEventListener('localized', function once() { - document.removeEventListener('localized', once); - callback(); - }); - } - } - }; -}(window, document); - -/***/ }), -/* 11 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.DefaultAnnotationLayerFactory = exports.AnnotationLayerBuilder = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -var _ui_utils = __webpack_require__(0); - -var _pdf_link_service = __webpack_require__(5); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var AnnotationLayerBuilder = function () { - function AnnotationLayerBuilder(_ref) { - var pageDiv = _ref.pageDiv, - pdfPage = _ref.pdfPage, - linkService = _ref.linkService, - downloadManager = _ref.downloadManager, - _ref$renderInteractiv = _ref.renderInteractiveForms, - renderInteractiveForms = _ref$renderInteractiv === undefined ? false : _ref$renderInteractiv, - _ref$l10n = _ref.l10n, - l10n = _ref$l10n === undefined ? _ui_utils.NullL10n : _ref$l10n; - - _classCallCheck(this, AnnotationLayerBuilder); - - this.pageDiv = pageDiv; - this.pdfPage = pdfPage; - this.linkService = linkService; - this.downloadManager = downloadManager; - this.renderInteractiveForms = renderInteractiveForms; - this.l10n = l10n; - this.div = null; - } - - _createClass(AnnotationLayerBuilder, [{ - key: 'render', - value: function render(viewport) { - var _this = this; - - var intent = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'display'; - - this.pdfPage.getAnnotations({ intent: intent }).then(function (annotations) { - var parameters = { - viewport: viewport.clone({ dontFlip: true }), - div: _this.div, - annotations: annotations, - page: _this.pdfPage, - renderInteractiveForms: _this.renderInteractiveForms, - linkService: _this.linkService, - downloadManager: _this.downloadManager - }; - if (_this.div) { - _pdfjsLib.AnnotationLayer.update(parameters); - } else { - if (annotations.length === 0) { - return; - } - _this.div = document.createElement('div'); - _this.div.className = 'annotationLayer'; - _this.pageDiv.appendChild(_this.div); - parameters.div = _this.div; - _pdfjsLib.AnnotationLayer.render(parameters); - _this.l10n.translate(_this.div); - } - }); - } - }, { - key: 'hide', - value: function hide() { - if (!this.div) { - return; - } - this.div.setAttribute('hidden', 'true'); - } - }]); - - return AnnotationLayerBuilder; -}(); - -var DefaultAnnotationLayerFactory = function () { - function DefaultAnnotationLayerFactory() { - _classCallCheck(this, DefaultAnnotationLayerFactory); - } - - _createClass(DefaultAnnotationLayerFactory, [{ - key: 'createAnnotationLayerBuilder', - value: function createAnnotationLayerBuilder(pageDiv, pdfPage) { - var renderInteractiveForms = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var l10n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _ui_utils.NullL10n; - - return new AnnotationLayerBuilder({ - pageDiv: pageDiv, - pdfPage: pdfPage, - renderInteractiveForms: renderInteractiveForms, - linkService: new _pdf_link_service.SimpleLinkService(), - l10n: l10n - }); - } - }]); - - return DefaultAnnotationLayerFactory; -}(); - -exports.AnnotationLayerBuilder = AnnotationLayerBuilder; -exports.DefaultAnnotationLayerFactory = DefaultAnnotationLayerFactory; - -/***/ }), -/* 12 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.DownloadManager = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -; -function _download(blobUrl, filename) { - var a = document.createElement('a'); - if (a.click) { - a.href = blobUrl; - a.target = '_parent'; - if ('download' in a) { - a.download = filename; - } - (document.body || document.documentElement).appendChild(a); - a.click(); - a.parentNode.removeChild(a); - } else { - if (window.top === window && blobUrl.split('#')[0] === window.location.href.split('#')[0]) { - var padCharacter = blobUrl.indexOf('?') === -1 ? '?' : '&'; - blobUrl = blobUrl.replace(/#|$/, padCharacter + '$&'); - } - window.open(blobUrl, '_parent'); - } -} - -var DownloadManager = function () { - function DownloadManager() { - _classCallCheck(this, DownloadManager); - } - - _createClass(DownloadManager, [{ - key: 'downloadUrl', - value: function downloadUrl(url, filename) { - if (!(0, _pdfjsLib.createValidAbsoluteUrl)(url, 'http://example.com')) { - return; - } - _download(url + '#pdfjs.action=download', filename); - } - }, { - key: 'downloadData', - value: function downloadData(data, filename, contentType) { - if (navigator.msSaveBlob) { - return navigator.msSaveBlob(new Blob([data], { type: contentType }), filename); - } - var blobUrl = (0, _pdfjsLib.createObjectURL)(data, contentType, _pdfjsLib.PDFJS.disableCreateObjectURL); - _download(blobUrl, filename); - } - }, { - key: 'download', - value: function download(blob, url, filename) { - if (navigator.msSaveBlob) { - if (!navigator.msSaveBlob(blob, filename)) { - this.downloadUrl(url, filename); - } - return; - } - if (_pdfjsLib.PDFJS.disableCreateObjectURL) { - this.downloadUrl(url, filename); - return; - } - var blobUrl = URL.createObjectURL(blob); - _download(blobUrl, filename); - } - }]); - - return DownloadManager; -}(); - -exports.DownloadManager = DownloadManager; - -/***/ }), -/* 13 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.GenericL10n = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -__webpack_require__(10); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var webL10n = document.webL10n; - -var GenericL10n = function () { - function GenericL10n(lang) { - _classCallCheck(this, GenericL10n); - - this._lang = lang; - this._ready = new Promise(function (resolve, reject) { - webL10n.setLanguage(lang, function () { - resolve(webL10n); - }); - }); - } - - _createClass(GenericL10n, [{ - key: 'getDirection', - value: function getDirection() { - return this._ready.then(function (l10n) { - return l10n.getDirection(); - }); - } - }, { - key: 'get', - value: function get(property, args, fallback) { - return this._ready.then(function (l10n) { - return l10n.get(property, args, fallback); - }); - } - }, { - key: 'translate', - value: function translate(element) { - return this._ready.then(function (l10n) { - return l10n.translate(element); - }); - } - }]); - - return GenericL10n; -}(); - -exports.GenericL10n = GenericL10n; - -/***/ }), -/* 14 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -function GrabToPan(options) { - this.element = options.element; - this.document = options.element.ownerDocument; - if (typeof options.ignoreTarget === 'function') { - this.ignoreTarget = options.ignoreTarget; - } - this.onActiveChanged = options.onActiveChanged; - this.activate = this.activate.bind(this); - this.deactivate = this.deactivate.bind(this); - this.toggle = this.toggle.bind(this); - this._onmousedown = this._onmousedown.bind(this); - this._onmousemove = this._onmousemove.bind(this); - this._endPan = this._endPan.bind(this); - var overlay = this.overlay = document.createElement('div'); - overlay.className = 'grab-to-pan-grabbing'; -} -GrabToPan.prototype = { - CSS_CLASS_GRAB: 'grab-to-pan-grab', - activate: function GrabToPan_activate() { - if (!this.active) { - this.active = true; - this.element.addEventListener('mousedown', this._onmousedown, true); - this.element.classList.add(this.CSS_CLASS_GRAB); - if (this.onActiveChanged) { - this.onActiveChanged(true); - } - } - }, - deactivate: function GrabToPan_deactivate() { - if (this.active) { - this.active = false; - this.element.removeEventListener('mousedown', this._onmousedown, true); - this._endPan(); - this.element.classList.remove(this.CSS_CLASS_GRAB); - if (this.onActiveChanged) { - this.onActiveChanged(false); - } - } - }, - toggle: function GrabToPan_toggle() { - if (this.active) { - this.deactivate(); - } else { - this.activate(); - } - }, - ignoreTarget: function GrabToPan_ignoreTarget(node) { - return node[matchesSelector]('a[href], a[href] *, input, textarea, button, button *, select, option'); - }, - _onmousedown: function GrabToPan__onmousedown(event) { - if (event.button !== 0 || this.ignoreTarget(event.target)) { - return; - } - if (event.originalTarget) { - try { - event.originalTarget.tagName; - } catch (e) { - return; - } - } - this.scrollLeftStart = this.element.scrollLeft; - this.scrollTopStart = this.element.scrollTop; - this.clientXStart = event.clientX; - this.clientYStart = event.clientY; - this.document.addEventListener('mousemove', this._onmousemove, true); - this.document.addEventListener('mouseup', this._endPan, true); - this.element.addEventListener('scroll', this._endPan, true); - event.preventDefault(); - event.stopPropagation(); - var focusedElement = document.activeElement; - if (focusedElement && !focusedElement.contains(event.target)) { - focusedElement.blur(); - } - }, - _onmousemove: function GrabToPan__onmousemove(event) { - this.element.removeEventListener('scroll', this._endPan, true); - if (isLeftMouseReleased(event)) { - this._endPan(); - return; - } - var xDiff = event.clientX - this.clientXStart; - var yDiff = event.clientY - this.clientYStart; - var scrollTop = this.scrollTopStart - yDiff; - var scrollLeft = this.scrollLeftStart - xDiff; - if (this.element.scrollTo) { - this.element.scrollTo({ - top: scrollTop, - left: scrollLeft, - behavior: 'instant' - }); - } else { - this.element.scrollTop = scrollTop; - this.element.scrollLeft = scrollLeft; - } - if (!this.overlay.parentNode) { - document.body.appendChild(this.overlay); - } - }, - _endPan: function GrabToPan__endPan() { - this.element.removeEventListener('scroll', this._endPan, true); - this.document.removeEventListener('mousemove', this._onmousemove, true); - this.document.removeEventListener('mouseup', this._endPan, true); - this.overlay.remove(); - } -}; -var matchesSelector; -['webkitM', 'mozM', 'msM', 'oM', 'm'].some(function (prefix) { - var name = prefix + 'atches'; - if (name in document.documentElement) { - matchesSelector = name; - } - name += 'Selector'; - if (name in document.documentElement) { - matchesSelector = name; - } - return matchesSelector; -}); -var isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9; -var chrome = window.chrome; -var isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app); -var isSafari6plus = /Apple/.test(navigator.vendor) && /Version\/([6-9]\d*|[1-5]\d+)/.test(navigator.userAgent); -function isLeftMouseReleased(event) { - if ('buttons' in event && isNotIEorIsIE10plus) { - return !(event.buttons & 1); - } - if (isChrome15OrOpera15plus || isSafari6plus) { - return event.which === 0; - } -} -exports.GrabToPan = GrabToPan; - -/***/ }), -/* 15 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var OverlayManager = function () { - function OverlayManager() { - _classCallCheck(this, OverlayManager); - - this._overlays = {}; - this._active = null; - this._keyDownBound = this._keyDown.bind(this); - } - - _createClass(OverlayManager, [{ - key: 'register', - value: function register(name, element) { - var _this = this; - - var callerCloseMethod = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; - var canForceClose = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - return new Promise(function (resolve) { - var container = void 0; - if (!name || !element || !(container = element.parentNode)) { - throw new Error('Not enough parameters.'); - } else if (_this._overlays[name]) { - throw new Error('The overlay is already registered.'); - } - _this._overlays[name] = { - element: element, - container: container, - callerCloseMethod: callerCloseMethod, - canForceClose: canForceClose - }; - resolve(); - }); - } - }, { - key: 'unregister', - value: function unregister(name) { - var _this2 = this; - - return new Promise(function (resolve) { - if (!_this2._overlays[name]) { - throw new Error('The overlay does not exist.'); - } else if (_this2._active === name) { - throw new Error('The overlay cannot be removed while it is active.'); - } - delete _this2._overlays[name]; - resolve(); - }); - } - }, { - key: 'open', - value: function open(name) { - var _this3 = this; - - return new Promise(function (resolve) { - if (!_this3._overlays[name]) { - throw new Error('The overlay does not exist.'); - } else if (_this3._active) { - if (_this3._overlays[name].canForceClose) { - _this3._closeThroughCaller(); - } else if (_this3._active === name) { - throw new Error('The overlay is already active.'); - } else { - throw new Error('Another overlay is currently active.'); - } - } - _this3._active = name; - _this3._overlays[_this3._active].element.classList.remove('hidden'); - _this3._overlays[_this3._active].container.classList.remove('hidden'); - window.addEventListener('keydown', _this3._keyDownBound); - resolve(); - }); - } - }, { - key: 'close', - value: function close(name) { - var _this4 = this; - - return new Promise(function (resolve) { - if (!_this4._overlays[name]) { - throw new Error('The overlay does not exist.'); - } else if (!_this4._active) { - throw new Error('The overlay is currently not active.'); - } else if (_this4._active !== name) { - throw new Error('Another overlay is currently active.'); - } - _this4._overlays[_this4._active].container.classList.add('hidden'); - _this4._overlays[_this4._active].element.classList.add('hidden'); - _this4._active = null; - window.removeEventListener('keydown', _this4._keyDownBound); - resolve(); - }); - } - }, { - key: '_keyDown', - value: function _keyDown(evt) { - if (this._active && evt.keyCode === 27) { - this._closeThroughCaller(); - evt.preventDefault(); - } - } - }, { - key: '_closeThroughCaller', - value: function _closeThroughCaller() { - if (this._overlays[this._active].callerCloseMethod) { - this._overlays[this._active].callerCloseMethod(); - } - if (this._active) { - this.close(this._active); - } - } - }, { - key: 'active', - get: function get() { - return this._active; - } - }]); - - return OverlayManager; -}(); - -exports.OverlayManager = OverlayManager; - -/***/ }), -/* 16 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PasswordPrompt = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var PasswordPrompt = function () { - function PasswordPrompt(options, overlayManager) { - var _this = this; - - var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n; - - _classCallCheck(this, PasswordPrompt); - - this.overlayName = options.overlayName; - this.container = options.container; - this.label = options.label; - this.input = options.input; - this.submitButton = options.submitButton; - this.cancelButton = options.cancelButton; - this.overlayManager = overlayManager; - this.l10n = l10n; - this.updateCallback = null; - this.reason = null; - this.submitButton.addEventListener('click', this.verify.bind(this)); - this.cancelButton.addEventListener('click', this.close.bind(this)); - this.input.addEventListener('keydown', function (e) { - if (e.keyCode === 13) { - _this.verify(); - } - }); - this.overlayManager.register(this.overlayName, this.container, this.close.bind(this), true); - } - - _createClass(PasswordPrompt, [{ - key: 'open', - value: function open() { - var _this2 = this; - - this.overlayManager.open(this.overlayName).then(function () { - _this2.input.focus(); - var promptString = void 0; - if (_this2.reason === _pdfjsLib.PasswordResponses.INCORRECT_PASSWORD) { - promptString = _this2.l10n.get('password_invalid', null, 'Invalid password. Please try again.'); - } else { - promptString = _this2.l10n.get('password_label', null, 'Enter the password to open this PDF file.'); - } - promptString.then(function (msg) { - _this2.label.textContent = msg; - }); - }); - } - }, { - key: 'close', - value: function close() { - var _this3 = this; - - this.overlayManager.close(this.overlayName).then(function () { - _this3.input.value = ''; - }); - } - }, { - key: 'verify', - value: function verify() { - var password = this.input.value; - if (password && password.length > 0) { - this.close(); - return this.updateCallback(password); - } - } - }, { - key: 'setUpdateCallback', - value: function setUpdateCallback(updateCallback, reason) { - this.updateCallback = updateCallback; - this.reason = reason; - } - }]); - - return PasswordPrompt; -}(); - -exports.PasswordPrompt = PasswordPrompt; - -/***/ }), -/* 17 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFAttachmentViewer = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var PDFAttachmentViewer = function () { - function PDFAttachmentViewer(_ref) { - var container = _ref.container, - eventBus = _ref.eventBus, - downloadManager = _ref.downloadManager; - - _classCallCheck(this, PDFAttachmentViewer); - - this.attachments = null; - this.container = container; - this.eventBus = eventBus; - this.downloadManager = downloadManager; - this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)(); - this.eventBus.on('fileattachmentannotation', this._appendAttachment.bind(this)); - } - - _createClass(PDFAttachmentViewer, [{ - key: 'reset', - value: function reset() { - var keepRenderedCapability = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - this.attachments = null; - this.container.textContent = ''; - if (!keepRenderedCapability) { - this._renderedCapability = (0, _pdfjsLib.createPromiseCapability)(); - } - } - }, { - key: '_dispatchEvent', - value: function _dispatchEvent(attachmentsCount) { - this.eventBus.dispatch('attachmentsloaded', { - source: this, - attachmentsCount: attachmentsCount - }); - this._renderedCapability.resolve(); - } - }, { - key: '_bindPdfLink', - value: function _bindPdfLink(button, content, filename) { - if (_pdfjsLib.PDFJS.disableCreateObjectURL) { - throw new Error('bindPdfLink: ' + 'Unsupported "PDFJS.disableCreateObjectURL" value.'); - } - var blobUrl = void 0; - button.onclick = function () { - if (!blobUrl) { - blobUrl = (0, _pdfjsLib.createObjectURL)(content, 'application/pdf'); - } - var viewerUrl = void 0; - viewerUrl = '?file=' + encodeURIComponent(blobUrl + '#' + filename); - window.open(viewerUrl); - return false; - }; - } - }, { - key: '_bindLink', - value: function _bindLink(button, content, filename) { - var _this = this; - - button.onclick = function () { - _this.downloadManager.downloadData(content, filename, ''); - return false; - }; - } - }, { - key: 'render', - value: function render(_ref2) { - var attachments = _ref2.attachments, - _ref2$keepRenderedCap = _ref2.keepRenderedCapability, - keepRenderedCapability = _ref2$keepRenderedCap === undefined ? false : _ref2$keepRenderedCap; - - var attachmentsCount = 0; - if (this.attachments) { - this.reset(keepRenderedCapability === true); - } - this.attachments = attachments || null; - if (!attachments) { - this._dispatchEvent(attachmentsCount); - return; - } - var names = Object.keys(attachments).sort(function (a, b) { - return a.toLowerCase().localeCompare(b.toLowerCase()); - }); - attachmentsCount = names.length; - for (var i = 0; i < attachmentsCount; i++) { - var item = attachments[names[i]]; - var filename = (0, _pdfjsLib.removeNullCharacters)((0, _pdfjsLib.getFilenameFromUrl)(item.filename)); - var div = document.createElement('div'); - div.className = 'attachmentsItem'; - var button = document.createElement('button'); - button.textContent = filename; - if (/\.pdf$/i.test(filename) && !_pdfjsLib.PDFJS.disableCreateObjectURL) { - this._bindPdfLink(button, item.content, filename); - } else { - this._bindLink(button, item.content, filename); - } - div.appendChild(button); - this.container.appendChild(div); - } - this._dispatchEvent(attachmentsCount); - } - }, { - key: '_appendAttachment', - value: function _appendAttachment(_ref3) { - var _this2 = this; - - var id = _ref3.id, - filename = _ref3.filename, - content = _ref3.content; - - this._renderedCapability.promise.then(function () { - var attachments = _this2.attachments; - if (!attachments) { - attachments = Object.create(null); - } else { - for (var name in attachments) { - if (id === name) { - return; - } - } - } - attachments[id] = { - filename: filename, - content: content - }; - _this2.render({ - attachments: attachments, - keepRenderedCapability: true - }); - }); - } - }]); - - return PDFAttachmentViewer; -}(); - -exports.PDFAttachmentViewer = PDFAttachmentViewer; - -/***/ }), -/* 18 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFDocumentProperties = undefined; - -var _slicedToArray = function () { function sliceIterator(arr, i) { 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"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var DEFAULT_FIELD_CONTENT = '-'; - -var PDFDocumentProperties = function () { - function PDFDocumentProperties(_ref, overlayManager) { - var overlayName = _ref.overlayName, - fields = _ref.fields, - container = _ref.container, - closeButton = _ref.closeButton; - var l10n = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : _ui_utils.NullL10n; - - _classCallCheck(this, PDFDocumentProperties); - - this.overlayName = overlayName; - this.fields = fields; - this.container = container; - this.overlayManager = overlayManager; - this.l10n = l10n; - this._reset(); - if (closeButton) { - closeButton.addEventListener('click', this.close.bind(this)); - } - this.overlayManager.register(this.overlayName, this.container, this.close.bind(this)); - } - - _createClass(PDFDocumentProperties, [{ - key: 'open', - value: function open() { - var _this = this; - - var freezeFieldData = function freezeFieldData(data) { - Object.defineProperty(_this, 'fieldData', { - value: Object.freeze(data), - writable: false, - enumerable: true, - configurable: true - }); - }; - Promise.all([this.overlayManager.open(this.overlayName), this._dataAvailableCapability.promise]).then(function () { - if (_this.fieldData) { - _this._updateUI(); - return; - } - _this.pdfDocument.getMetadata().then(function (_ref2) { - var info = _ref2.info, - metadata = _ref2.metadata; - - return Promise.all([info, metadata, _this._parseFileSize(_this.maybeFileSize), _this._parseDate(info.CreationDate), _this._parseDate(info.ModDate)]); - }).then(function (_ref3) { - var _ref4 = _slicedToArray(_ref3, 5), - info = _ref4[0], - metadata = _ref4[1], - fileSize = _ref4[2], - creationDate = _ref4[3], - modificationDate = _ref4[4]; - - freezeFieldData({ - 'fileName': (0, _ui_utils.getPDFFileNameFromURL)(_this.url), - 'fileSize': fileSize, - 'title': info.Title, - 'author': info.Author, - 'subject': info.Subject, - 'keywords': info.Keywords, - 'creationDate': creationDate, - 'modificationDate': modificationDate, - 'creator': info.Creator, - 'producer': info.Producer, - 'version': info.PDFFormatVersion, - 'pageCount': _this.pdfDocument.numPages - }); - _this._updateUI(); - return _this.pdfDocument.getDownloadInfo(); - }).then(function (_ref5) { - var length = _ref5.length; - - return _this._parseFileSize(length); - }).then(function (fileSize) { - var data = (0, _ui_utils.cloneObj)(_this.fieldData); - data['fileSize'] = fileSize; - freezeFieldData(data); - _this._updateUI(); - }); - }); - } - }, { - key: 'close', - value: function close() { - this.overlayManager.close(this.overlayName); - } - }, { - key: 'setDocument', - value: function setDocument(pdfDocument, url) { - if (this.pdfDocument) { - this._reset(); - this._updateUI(true); - } - if (!pdfDocument) { - return; - } - this.pdfDocument = pdfDocument; - this.url = url; - this._dataAvailableCapability.resolve(); - } - }, { - key: 'setFileSize', - value: function setFileSize(fileSize) { - if (typeof fileSize === 'number' && fileSize > 0) { - this.maybeFileSize = fileSize; - } - } - }, { - key: '_reset', - value: function _reset() { - this.pdfDocument = null; - this.url = null; - this.maybeFileSize = 0; - delete this.fieldData; - this._dataAvailableCapability = (0, _pdfjsLib.createPromiseCapability)(); - } - }, { - key: '_updateUI', - value: function _updateUI() { - var reset = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (reset || !this.fieldData) { - for (var id in this.fields) { - this.fields[id].textContent = DEFAULT_FIELD_CONTENT; - } - return; - } - if (this.overlayManager.active !== this.overlayName) { - return; - } - for (var _id in this.fields) { - var content = this.fieldData[_id]; - this.fields[_id].textContent = content || content === 0 ? content : DEFAULT_FIELD_CONTENT; - } - } - }, { - key: '_parseFileSize', - value: function _parseFileSize() { - var fileSize = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - - var kb = fileSize / 1024; - if (!kb) { - return Promise.resolve(undefined); - } else if (kb < 1024) { - return this.l10n.get('document_properties_kb', { - size_kb: (+kb.toPrecision(3)).toLocaleString(), - size_b: fileSize.toLocaleString() - }, '{{size_kb}} KB ({{size_b}} bytes)'); - } - return this.l10n.get('document_properties_mb', { - size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(), - size_b: fileSize.toLocaleString() - }, '{{size_mb}} MB ({{size_b}} bytes)'); - } - }, { - key: '_parseDate', - value: function _parseDate(inputDate) { - if (!inputDate) { - return; - } - var dateToParse = inputDate; - if (dateToParse.substring(0, 2) === 'D:') { - dateToParse = dateToParse.substring(2); - } - var year = parseInt(dateToParse.substring(0, 4), 10); - var month = parseInt(dateToParse.substring(4, 6), 10) - 1; - var day = parseInt(dateToParse.substring(6, 8), 10); - var hours = parseInt(dateToParse.substring(8, 10), 10); - var minutes = parseInt(dateToParse.substring(10, 12), 10); - var seconds = parseInt(dateToParse.substring(12, 14), 10); - var utRel = dateToParse.substring(14, 15); - var offsetHours = parseInt(dateToParse.substring(15, 17), 10); - var offsetMinutes = parseInt(dateToParse.substring(18, 20), 10); - if (utRel === '-') { - hours += offsetHours; - minutes += offsetMinutes; - } else if (utRel === '+') { - hours -= offsetHours; - minutes -= offsetMinutes; - } - var date = new Date(Date.UTC(year, month, day, hours, minutes, seconds)); - var dateString = date.toLocaleDateString(); - var timeString = date.toLocaleTimeString(); - return this.l10n.get('document_properties_date_string', { - date: dateString, - time: timeString - }, '{{date}}, {{time}}'); - } - }]); - - return PDFDocumentProperties; -}(); - -exports.PDFDocumentProperties = PDFDocumentProperties; - -/***/ }), -/* 19 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFFindBar = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdf_find_controller = __webpack_require__(7); - -var _ui_utils = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var PDFFindBar = function () { - function PDFFindBar(options) { - var _this = this; - - var l10n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _ui_utils.NullL10n; - - _classCallCheck(this, PDFFindBar); - - this.opened = false; - this.bar = options.bar || null; - this.toggleButton = options.toggleButton || null; - this.findField = options.findField || null; - this.highlightAll = options.highlightAllCheckbox || null; - this.caseSensitive = options.caseSensitiveCheckbox || null; - this.findMsg = options.findMsg || null; - this.findResultsCount = options.findResultsCount || null; - this.findStatusIcon = options.findStatusIcon || null; - this.findPreviousButton = options.findPreviousButton || null; - this.findNextButton = options.findNextButton || null; - this.findController = options.findController || null; - this.eventBus = options.eventBus; - this.l10n = l10n; - if (this.findController === null) { - throw new Error('PDFFindBar cannot be used without a ' + 'PDFFindController instance.'); - } - this.toggleButton.addEventListener('click', function () { - _this.toggle(); - }); - this.findField.addEventListener('input', function () { - _this.dispatchEvent(''); - }); - this.bar.addEventListener('keydown', function (e) { - switch (e.keyCode) { - case 13: - if (e.target === _this.findField) { - _this.dispatchEvent('again', e.shiftKey); - } - break; - case 27: - _this.close(); - break; - } - }); - this.findPreviousButton.addEventListener('click', function () { - _this.dispatchEvent('again', true); - }); - this.findNextButton.addEventListener('click', function () { - _this.dispatchEvent('again', false); - }); - this.highlightAll.addEventListener('click', function () { - _this.dispatchEvent('highlightallchange'); - }); - this.caseSensitive.addEventListener('click', function () { - _this.dispatchEvent('casesensitivitychange'); - }); - this.eventBus.on('resize', this._adjustWidth.bind(this)); - } - - _createClass(PDFFindBar, [{ - key: 'reset', - value: function reset() { - this.updateUIState(); - } - }, { - key: 'dispatchEvent', - value: function dispatchEvent(type, findPrev) { - this.eventBus.dispatch('find', { - source: this, - type: type, - query: this.findField.value, - caseSensitive: this.caseSensitive.checked, - phraseSearch: true, - highlightAll: this.highlightAll.checked, - findPrevious: findPrev - }); - } - }, { - key: 'updateUIState', - value: function updateUIState(state, previous, matchCount) { - var _this2 = this; - - var notFound = false; - var findMsg = ''; - var status = ''; - switch (state) { - case _pdf_find_controller.FindState.FOUND: - break; - case _pdf_find_controller.FindState.PENDING: - status = 'pending'; - break; - case _pdf_find_controller.FindState.NOT_FOUND: - findMsg = this.l10n.get('find_not_found', null, 'Phrase not found'); - notFound = true; - break; - case _pdf_find_controller.FindState.WRAPPED: - if (previous) { - findMsg = this.l10n.get('find_reached_top', null, 'Reached top of document, continued from bottom'); - } else { - findMsg = this.l10n.get('find_reached_bottom', null, 'Reached end of document, continued from top'); - } - break; - } - if (notFound) { - this.findField.classList.add('notFound'); - } else { - this.findField.classList.remove('notFound'); - } - this.findField.setAttribute('data-status', status); - Promise.resolve(findMsg).then(function (msg) { - _this2.findMsg.textContent = msg; - _this2._adjustWidth(); - }); - this.updateResultsCount(matchCount); - } - }, { - key: 'updateResultsCount', - value: function updateResultsCount(matchCount) { - if (!this.findResultsCount) { - return; - } - if (!matchCount) { - this.findResultsCount.classList.add('hidden'); - this.findResultsCount.textContent = ''; - } else { - this.findResultsCount.textContent = matchCount.toLocaleString(); - this.findResultsCount.classList.remove('hidden'); - } - this._adjustWidth(); - } - }, { - key: 'open', - value: function open() { - if (!this.opened) { - this.opened = true; - this.toggleButton.classList.add('toggled'); - this.bar.classList.remove('hidden'); - } - this.findField.select(); - this.findField.focus(); - this._adjustWidth(); - } - }, { - key: 'close', - value: function close() { - if (!this.opened) { - return; - } - this.opened = false; - this.toggleButton.classList.remove('toggled'); - this.bar.classList.add('hidden'); - this.findController.active = false; - } - }, { - key: 'toggle', - value: function toggle() { - if (this.opened) { - this.close(); - } else { - this.open(); - } - } - }, { - key: '_adjustWidth', - value: function _adjustWidth() { - if (!this.opened) { - return; - } - this.bar.classList.remove('wrapContainers'); - var findbarHeight = this.bar.clientHeight; - var inputContainerHeight = this.bar.firstElementChild.clientHeight; - if (findbarHeight > inputContainerHeight) { - this.bar.classList.add('wrapContainers'); - } - } - }]); - - return PDFFindBar; -}(); - -exports.PDFFindBar = PDFFindBar; - -/***/ }), -/* 20 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFHistory = undefined; - -var _dom_events = __webpack_require__(2); - -function PDFHistory(options) { - this.linkService = options.linkService; - this.eventBus = options.eventBus || (0, _dom_events.getGlobalEventBus)(); - this.initialized = false; - this.initialDestination = null; - this.initialBookmark = null; -} -PDFHistory.prototype = { - initialize: function pdfHistoryInitialize(fingerprint) { - this.initialized = true; - this.reInitialized = false; - this.allowHashChange = true; - this.historyUnlocked = true; - this.isViewerInPresentationMode = false; - this.previousHash = window.location.hash.substring(1); - this.currentBookmark = ''; - this.currentPage = 0; - this.updatePreviousBookmark = false; - this.previousBookmark = ''; - this.previousPage = 0; - this.nextHashParam = ''; - this.fingerprint = fingerprint; - this.currentUid = this.uid = 0; - this.current = {}; - var state = window.history.state; - if (this._isStateObjectDefined(state)) { - if (state.target.dest) { - this.initialDestination = state.target.dest; - } else { - this.initialBookmark = state.target.hash; - } - this.currentUid = state.uid; - this.uid = state.uid + 1; - this.current = state.target; - } else { - if (state && state.fingerprint && this.fingerprint !== state.fingerprint) { - this.reInitialized = true; - } - this._pushOrReplaceState({ fingerprint: this.fingerprint }, true); - } - var self = this; - window.addEventListener('popstate', function pdfHistoryPopstate(evt) { - if (!self.historyUnlocked) { - return; - } - if (evt.state) { - self._goTo(evt.state); - return; - } - if (self.uid === 0) { - var previousParams = self.previousHash && self.currentBookmark && self.previousHash !== self.currentBookmark ? { - hash: self.currentBookmark, - page: self.currentPage - } : { page: 1 }; - replacePreviousHistoryState(previousParams, function () { - updateHistoryWithCurrentHash(); - }); - } else { - updateHistoryWithCurrentHash(); - } - }); - function updateHistoryWithCurrentHash() { - self.previousHash = window.location.hash.slice(1); - self._pushToHistory({ hash: self.previousHash }, false, true); - self._updatePreviousBookmark(); - } - function replacePreviousHistoryState(params, callback) { - self.historyUnlocked = false; - self.allowHashChange = false; - window.addEventListener('popstate', rewriteHistoryAfterBack); - history.back(); - function rewriteHistoryAfterBack() { - window.removeEventListener('popstate', rewriteHistoryAfterBack); - window.addEventListener('popstate', rewriteHistoryAfterForward); - self._pushToHistory(params, false, true); - history.forward(); - } - function rewriteHistoryAfterForward() { - window.removeEventListener('popstate', rewriteHistoryAfterForward); - self.allowHashChange = true; - self.historyUnlocked = true; - callback(); - } - } - function pdfHistoryBeforeUnload() { - var previousParams = self._getPreviousParams(null, true); - if (previousParams) { - var replacePrevious = !self.current.dest && self.current.hash !== self.previousHash; - self._pushToHistory(previousParams, false, replacePrevious); - self._updatePreviousBookmark(); - } - window.removeEventListener('beforeunload', pdfHistoryBeforeUnload); - } - window.addEventListener('beforeunload', pdfHistoryBeforeUnload); - window.addEventListener('pageshow', function pdfHistoryPageShow(evt) { - window.addEventListener('beforeunload', pdfHistoryBeforeUnload); - }); - self.eventBus.on('presentationmodechanged', function (e) { - self.isViewerInPresentationMode = e.active; - }); - }, - clearHistoryState: function pdfHistory_clearHistoryState() { - this._pushOrReplaceState(null, true); - }, - _isStateObjectDefined: function pdfHistory_isStateObjectDefined(state) { - return state && state.uid >= 0 && state.fingerprint && this.fingerprint === state.fingerprint && state.target && state.target.hash ? true : false; - }, - _pushOrReplaceState: function pdfHistory_pushOrReplaceState(stateObj, replace) { - if (replace) { - window.history.replaceState(stateObj, '', document.URL); - } else { - window.history.pushState(stateObj, '', document.URL); - } - }, - get isHashChangeUnlocked() { - if (!this.initialized) { - return true; - } - return this.allowHashChange; - }, - _updatePreviousBookmark: function pdfHistory_updatePreviousBookmark() { - if (this.updatePreviousBookmark && this.currentBookmark && this.currentPage) { - this.previousBookmark = this.currentBookmark; - this.previousPage = this.currentPage; - this.updatePreviousBookmark = false; - } - }, - updateCurrentBookmark: function pdfHistoryUpdateCurrentBookmark(bookmark, pageNum) { - if (this.initialized) { - this.currentBookmark = bookmark.substring(1); - this.currentPage = pageNum | 0; - this._updatePreviousBookmark(); - } - }, - updateNextHashParam: function pdfHistoryUpdateNextHashParam(param) { - if (this.initialized) { - this.nextHashParam = param; - } - }, - push: function pdfHistoryPush(params, isInitialBookmark) { - if (!(this.initialized && this.historyUnlocked)) { - return; - } - if (params.dest && !params.hash) { - params.hash = this.current.hash && this.current.dest && this.current.dest === params.dest ? this.current.hash : this.linkService.getDestinationHash(params.dest).split('#')[1]; - } - if (params.page) { - params.page |= 0; - } - if (isInitialBookmark) { - var target = window.history.state.target; - if (!target) { - this._pushToHistory(params, false); - this.previousHash = window.location.hash.substring(1); - } - this.updatePreviousBookmark = this.nextHashParam ? false : true; - if (target) { - this._updatePreviousBookmark(); - } - return; - } - if (this.nextHashParam) { - if (this.nextHashParam === params.hash) { - this.nextHashParam = null; - this.updatePreviousBookmark = true; - return; - } - this.nextHashParam = null; - } - if (params.hash) { - if (this.current.hash) { - if (this.current.hash !== params.hash) { - this._pushToHistory(params, true); - } else { - if (!this.current.page && params.page) { - this._pushToHistory(params, false, true); - } - this.updatePreviousBookmark = true; - } - } else { - this._pushToHistory(params, true); - } - } else if (this.current.page && params.page && this.current.page !== params.page) { - this._pushToHistory(params, true); - } - }, - _getPreviousParams: function pdfHistory_getPreviousParams(onlyCheckPage, beforeUnload) { - if (!(this.currentBookmark && this.currentPage)) { - return null; - } else if (this.updatePreviousBookmark) { - this.updatePreviousBookmark = false; - } - if (this.uid > 0 && !(this.previousBookmark && this.previousPage)) { - return null; - } - if (!this.current.dest && !onlyCheckPage || beforeUnload) { - if (this.previousBookmark === this.currentBookmark) { - return null; - } - } else if (this.current.page || onlyCheckPage) { - if (this.previousPage === this.currentPage) { - return null; - } - } else { - return null; - } - var params = { - hash: this.currentBookmark, - page: this.currentPage - }; - if (this.isViewerInPresentationMode) { - params.hash = null; - } - return params; - }, - _stateObj: function pdfHistory_stateObj(params) { - return { - fingerprint: this.fingerprint, - uid: this.uid, - target: params - }; - }, - _pushToHistory: function pdfHistory_pushToHistory(params, addPrevious, overwrite) { - if (!this.initialized) { - return; - } - if (!params.hash && params.page) { - params.hash = 'page=' + params.page; - } - if (addPrevious && !overwrite) { - var previousParams = this._getPreviousParams(); - if (previousParams) { - var replacePrevious = !this.current.dest && this.current.hash !== this.previousHash; - this._pushToHistory(previousParams, false, replacePrevious); - } - } - this._pushOrReplaceState(this._stateObj(params), overwrite || this.uid === 0); - this.currentUid = this.uid++; - this.current = params; - this.updatePreviousBookmark = true; - }, - _goTo: function pdfHistory_goTo(state) { - if (!(this.initialized && this.historyUnlocked && this._isStateObjectDefined(state))) { - return; - } - if (!this.reInitialized && state.uid < this.currentUid) { - var previousParams = this._getPreviousParams(true); - if (previousParams) { - this._pushToHistory(this.current, false); - this._pushToHistory(previousParams, false); - this.currentUid = state.uid; - window.history.back(); - return; - } - } - this.historyUnlocked = false; - if (state.target.dest) { - this.linkService.navigateTo(state.target.dest); - } else { - this.linkService.setHash(state.target.hash); - } - this.currentUid = state.uid; - if (state.uid > this.uid) { - this.uid = state.uid; - } - this.current = state.target; - this.updatePreviousBookmark = true; - var currentHash = window.location.hash.substring(1); - if (this.previousHash !== currentHash) { - this.allowHashChange = false; - } - this.previousHash = currentHash; - this.historyUnlocked = true; - }, - back: function pdfHistoryBack() { - this.go(-1); - }, - forward: function pdfHistoryForward() { - this.go(1); - }, - go: function pdfHistoryGo(direction) { - if (this.initialized && this.historyUnlocked) { - var state = window.history.state; - if (direction === -1 && state && state.uid > 0) { - window.history.back(); - } else if (direction === 1 && state && state.uid < this.uid - 1) { - window.history.forward(); - } - } - } -}; -exports.PDFHistory = PDFHistory; - -/***/ }), -/* 21 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFOutlineViewer = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var DEFAULT_TITLE = '\u2013'; - -var PDFOutlineViewer = function () { - function PDFOutlineViewer(_ref) { - var container = _ref.container, - linkService = _ref.linkService, - eventBus = _ref.eventBus; - - _classCallCheck(this, PDFOutlineViewer); - - this.outline = null; - this.lastToggleIsShow = true; - this.container = container; - this.linkService = linkService; - this.eventBus = eventBus; - } - - _createClass(PDFOutlineViewer, [{ - key: 'reset', - value: function reset() { - this.outline = null; - this.lastToggleIsShow = true; - this.container.textContent = ''; - this.container.classList.remove('outlineWithDeepNesting'); - } - }, { - key: '_dispatchEvent', - value: function _dispatchEvent(outlineCount) { - this.eventBus.dispatch('outlineloaded', { - source: this, - outlineCount: outlineCount - }); - } - }, { - key: '_bindLink', - value: function _bindLink(element, item) { - var _this = this; - - if (item.url) { - (0, _pdfjsLib.addLinkAttributes)(element, { - url: item.url, - target: item.newWindow ? _pdfjsLib.PDFJS.LinkTarget.BLANK : undefined - }); - return; - } - var destination = item.dest; - element.href = this.linkService.getDestinationHash(destination); - element.onclick = function () { - if (destination) { - _this.linkService.navigateTo(destination); - } - return false; - }; - } - }, { - key: '_setStyles', - value: function _setStyles(element, item) { - var styleStr = ''; - if (item.bold) { - styleStr += 'font-weight: bold;'; - } - if (item.italic) { - styleStr += 'font-style: italic;'; - } - if (styleStr) { - element.setAttribute('style', styleStr); - } - } - }, { - key: '_addToggleButton', - value: function _addToggleButton(div) { - var _this2 = this; - - var toggler = document.createElement('div'); - toggler.className = 'outlineItemToggler'; - toggler.onclick = function (evt) { - evt.stopPropagation(); - toggler.classList.toggle('outlineItemsHidden'); - if (evt.shiftKey) { - var shouldShowAll = !toggler.classList.contains('outlineItemsHidden'); - _this2._toggleOutlineItem(div, shouldShowAll); - } - }; - div.insertBefore(toggler, div.firstChild); - } - }, { - key: '_toggleOutlineItem', - value: function _toggleOutlineItem(root, show) { - this.lastToggleIsShow = show; - var togglers = root.querySelectorAll('.outlineItemToggler'); - for (var i = 0, ii = togglers.length; i < ii; ++i) { - togglers[i].classList[show ? 'remove' : 'add']('outlineItemsHidden'); - } - } - }, { - key: 'toggleOutlineTree', - value: function toggleOutlineTree() { - if (!this.outline) { - return; - } - this._toggleOutlineItem(this.container, !this.lastToggleIsShow); - } - }, { - key: 'render', - value: function render(_ref2) { - var outline = _ref2.outline; - - var outlineCount = 0; - if (this.outline) { - this.reset(); - } - this.outline = outline || null; - if (!outline) { - this._dispatchEvent(outlineCount); - return; - } - var fragment = document.createDocumentFragment(); - var queue = [{ - parent: fragment, - items: this.outline - }]; - var hasAnyNesting = false; - while (queue.length > 0) { - var levelData = queue.shift(); - for (var i = 0, len = levelData.items.length; i < len; i++) { - var item = levelData.items[i]; - var div = document.createElement('div'); - div.className = 'outlineItem'; - var element = document.createElement('a'); - this._bindLink(element, item); - this._setStyles(element, item); - element.textContent = (0, _pdfjsLib.removeNullCharacters)(item.title) || DEFAULT_TITLE; - div.appendChild(element); - if (item.items.length > 0) { - hasAnyNesting = true; - this._addToggleButton(div); - var itemsDiv = document.createElement('div'); - itemsDiv.className = 'outlineItems'; - div.appendChild(itemsDiv); - queue.push({ - parent: itemsDiv, - items: item.items - }); - } - levelData.parent.appendChild(div); - outlineCount++; - } - } - if (hasAnyNesting) { - this.container.classList.add('outlineWithDeepNesting'); - } - this.container.appendChild(fragment); - this._dispatchEvent(outlineCount); - } - }]); - - return PDFOutlineViewer; -}(); - -exports.PDFOutlineViewer = PDFOutlineViewer; - -/***/ }), -/* 22 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFPageView = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -var _pdfjsLib = __webpack_require__(1); - -var _dom_events = __webpack_require__(2); - -var _pdf_rendering_queue = __webpack_require__(3); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var PDFPageView = function () { - function PDFPageView(options) { - _classCallCheck(this, PDFPageView); - - var container = options.container; - var defaultViewport = options.defaultViewport; - this.id = options.id; - this.renderingId = 'page' + this.id; - this.pdfPage = null; - this.pageLabel = null; - this.rotation = 0; - this.scale = options.scale || _ui_utils.DEFAULT_SCALE; - this.viewport = defaultViewport; - this.pdfPageRotate = defaultViewport.rotation; - this.hasRestrictedScaling = false; - this.enhanceTextSelection = options.enhanceTextSelection || false; - this.renderInteractiveForms = options.renderInteractiveForms || false; - this.eventBus = options.eventBus || (0, _dom_events.getGlobalEventBus)(); - this.renderingQueue = options.renderingQueue; - this.textLayerFactory = options.textLayerFactory; - this.annotationLayerFactory = options.annotationLayerFactory; - this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; - this.l10n = options.l10n || _ui_utils.NullL10n; - this.paintTask = null; - this.paintedViewportMap = new WeakMap(); - this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; - this.resume = null; - this.error = null; - this.onBeforeDraw = null; - this.onAfterDraw = null; - this.annotationLayer = null; - this.textLayer = null; - this.zoomLayer = null; - var div = document.createElement('div'); - div.className = 'page'; - div.style.width = Math.floor(this.viewport.width) + 'px'; - div.style.height = Math.floor(this.viewport.height) + 'px'; - div.setAttribute('data-page-number', this.id); - this.div = div; - container.appendChild(div); - } - - _createClass(PDFPageView, [{ - key: 'setPdfPage', - value: function setPdfPage(pdfPage) { - this.pdfPage = pdfPage; - this.pdfPageRotate = pdfPage.rotate; - var totalRotation = (this.rotation + this.pdfPageRotate) % 360; - this.viewport = pdfPage.getViewport(this.scale * _ui_utils.CSS_UNITS, totalRotation); - this.stats = pdfPage.stats; - this.reset(); - } - }, { - key: 'destroy', - value: function destroy() { - this.reset(); - if (this.pdfPage) { - this.pdfPage.cleanup(); - this.pdfPage = null; - } - } - }, { - key: '_resetZoomLayer', - value: function _resetZoomLayer() { - var removeFromDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (!this.zoomLayer) { - return; - } - var zoomLayerCanvas = this.zoomLayer.firstChild; - this.paintedViewportMap.delete(zoomLayerCanvas); - zoomLayerCanvas.width = 0; - zoomLayerCanvas.height = 0; - if (removeFromDOM) { - this.zoomLayer.remove(); - } - this.zoomLayer = null; - } - }, { - key: 'reset', - value: function reset() { - var keepZoomLayer = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - var keepAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - this.cancelRendering(); - var div = this.div; - div.style.width = Math.floor(this.viewport.width) + 'px'; - div.style.height = Math.floor(this.viewport.height) + 'px'; - var childNodes = div.childNodes; - var currentZoomLayerNode = keepZoomLayer && this.zoomLayer || null; - var currentAnnotationNode = keepAnnotations && this.annotationLayer && this.annotationLayer.div || null; - for (var i = childNodes.length - 1; i >= 0; i--) { - var node = childNodes[i]; - if (currentZoomLayerNode === node || currentAnnotationNode === node) { - continue; - } - div.removeChild(node); - } - div.removeAttribute('data-loaded'); - if (currentAnnotationNode) { - this.annotationLayer.hide(); - } else { - this.annotationLayer = null; - } - if (!currentZoomLayerNode) { - if (this.canvas) { - this.paintedViewportMap.delete(this.canvas); - this.canvas.width = 0; - this.canvas.height = 0; - delete this.canvas; - } - this._resetZoomLayer(); - } - if (this.svg) { - this.paintedViewportMap.delete(this.svg); - delete this.svg; - } - this.loadingIconDiv = document.createElement('div'); - this.loadingIconDiv.className = 'loadingIcon'; - div.appendChild(this.loadingIconDiv); - } - }, { - key: 'update', - value: function update(scale, rotation) { - this.scale = scale || this.scale; - if (typeof rotation !== 'undefined') { - this.rotation = rotation; - } - var totalRotation = (this.rotation + this.pdfPageRotate) % 360; - this.viewport = this.viewport.clone({ - scale: this.scale * _ui_utils.CSS_UNITS, - rotation: totalRotation - }); - if (this.svg) { - this.cssTransform(this.svg, true); - this.eventBus.dispatch('pagerendered', { - source: this, - pageNumber: this.id, - cssTransform: true - }); - return; - } - var isScalingRestricted = false; - if (this.canvas && _pdfjsLib.PDFJS.maxCanvasPixels > 0) { - var outputScale = this.outputScale; - if ((Math.floor(this.viewport.width) * outputScale.sx | 0) * (Math.floor(this.viewport.height) * outputScale.sy | 0) > _pdfjsLib.PDFJS.maxCanvasPixels) { - isScalingRestricted = true; - } - } - if (this.canvas) { - if (_pdfjsLib.PDFJS.useOnlyCssZoom || this.hasRestrictedScaling && isScalingRestricted) { - this.cssTransform(this.canvas, true); - this.eventBus.dispatch('pagerendered', { - source: this, - pageNumber: this.id, - cssTransform: true - }); - return; - } - if (!this.zoomLayer && !this.canvas.hasAttribute('hidden')) { - this.zoomLayer = this.canvas.parentNode; - this.zoomLayer.style.position = 'absolute'; - } - } - if (this.zoomLayer) { - this.cssTransform(this.zoomLayer.firstChild); - } - this.reset(true, true); - } - }, { - key: 'cancelRendering', - value: function cancelRendering() { - if (this.paintTask) { - this.paintTask.cancel(); - this.paintTask = null; - } - this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; - this.resume = null; - if (this.textLayer) { - this.textLayer.cancel(); - this.textLayer = null; - } - } - }, { - key: 'cssTransform', - value: function cssTransform(target) { - var redrawAnnotations = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var width = this.viewport.width; - var height = this.viewport.height; - var div = this.div; - target.style.width = target.parentNode.style.width = div.style.width = Math.floor(width) + 'px'; - target.style.height = target.parentNode.style.height = div.style.height = Math.floor(height) + 'px'; - var relativeRotation = this.viewport.rotation - this.paintedViewportMap.get(target).rotation; - var absRotation = Math.abs(relativeRotation); - var scaleX = 1, - scaleY = 1; - if (absRotation === 90 || absRotation === 270) { - scaleX = height / width; - scaleY = width / height; - } - var cssTransform = 'rotate(' + relativeRotation + 'deg) ' + 'scale(' + scaleX + ',' + scaleY + ')'; - _pdfjsLib.CustomStyle.setProp('transform', target, cssTransform); - if (this.textLayer) { - var textLayerViewport = this.textLayer.viewport; - var textRelativeRotation = this.viewport.rotation - textLayerViewport.rotation; - var textAbsRotation = Math.abs(textRelativeRotation); - var scale = width / textLayerViewport.width; - if (textAbsRotation === 90 || textAbsRotation === 270) { - scale = width / textLayerViewport.height; - } - var textLayerDiv = this.textLayer.textLayerDiv; - var transX = void 0, - transY = void 0; - switch (textAbsRotation) { - case 0: - transX = transY = 0; - break; - case 90: - transX = 0; - transY = '-' + textLayerDiv.style.height; - break; - case 180: - transX = '-' + textLayerDiv.style.width; - transY = '-' + textLayerDiv.style.height; - break; - case 270: - transX = '-' + textLayerDiv.style.width; - transY = 0; - break; - default: - console.error('Bad rotation value.'); - break; - } - _pdfjsLib.CustomStyle.setProp('transform', textLayerDiv, 'rotate(' + textAbsRotation + 'deg) ' + 'scale(' + scale + ', ' + scale + ') ' + 'translate(' + transX + ', ' + transY + ')'); - _pdfjsLib.CustomStyle.setProp('transformOrigin', textLayerDiv, '0% 0%'); - } - if (redrawAnnotations && this.annotationLayer) { - this.annotationLayer.render(this.viewport, 'display'); - } - } - }, { - key: 'getPagePoint', - value: function getPagePoint(x, y) { - return this.viewport.convertToPdfPoint(x, y); - } - }, { - key: 'draw', - value: function draw() { - var _this = this; - - if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { - console.error('Must be in new state before drawing'); - this.reset(); - } - if (!this.pdfPage) { - this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; - return Promise.reject(new Error('Page is not loaded')); - } - this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; - var pdfPage = this.pdfPage; - var div = this.div; - var canvasWrapper = document.createElement('div'); - canvasWrapper.style.width = div.style.width; - canvasWrapper.style.height = div.style.height; - canvasWrapper.classList.add('canvasWrapper'); - if (this.annotationLayer && this.annotationLayer.div) { - div.insertBefore(canvasWrapper, this.annotationLayer.div); - } else { - div.appendChild(canvasWrapper); - } - var textLayer = null; - if (this.textLayerFactory) { - var textLayerDiv = document.createElement('div'); - textLayerDiv.className = 'textLayer'; - textLayerDiv.style.width = canvasWrapper.style.width; - textLayerDiv.style.height = canvasWrapper.style.height; - if (this.annotationLayer && this.annotationLayer.div) { - div.insertBefore(textLayerDiv, this.annotationLayer.div); - } else { - div.appendChild(textLayerDiv); - } - textLayer = this.textLayerFactory.createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport, this.enhanceTextSelection); - } - this.textLayer = textLayer; - var renderContinueCallback = null; - if (this.renderingQueue) { - renderContinueCallback = function renderContinueCallback(cont) { - if (!_this.renderingQueue.isHighestPriority(_this)) { - _this.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; - _this.resume = function () { - _this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; - cont(); - }; - return; - } - cont(); - }; - } - var finishPaintTask = function finishPaintTask(error) { - if (paintTask === _this.paintTask) { - _this.paintTask = null; - } - if (error === 'cancelled' || error instanceof _pdfjsLib.RenderingCancelledException) { - _this.error = null; - return Promise.resolve(undefined); - } - _this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; - if (_this.loadingIconDiv) { - div.removeChild(_this.loadingIconDiv); - delete _this.loadingIconDiv; - } - _this._resetZoomLayer(true); - _this.error = error; - _this.stats = pdfPage.stats; - if (_this.onAfterDraw) { - _this.onAfterDraw(); - } - _this.eventBus.dispatch('pagerendered', { - source: _this, - pageNumber: _this.id, - cssTransform: false - }); - if (error) { - return Promise.reject(error); - } - return Promise.resolve(undefined); - }; - var paintTask = this.renderer === _ui_utils.RendererType.SVG ? this.paintOnSvg(canvasWrapper) : this.paintOnCanvas(canvasWrapper); - paintTask.onRenderContinue = renderContinueCallback; - this.paintTask = paintTask; - var resultPromise = paintTask.promise.then(function () { - return finishPaintTask(null).then(function () { - if (textLayer) { - var readableStream = pdfPage.streamTextContent({ normalizeWhitespace: true }); - textLayer.setTextContentStream(readableStream); - textLayer.render(); - } - }); - }, function (reason) { - return finishPaintTask(reason); - }); - if (this.annotationLayerFactory) { - if (!this.annotationLayer) { - this.annotationLayer = this.annotationLayerFactory.createAnnotationLayerBuilder(div, pdfPage, this.renderInteractiveForms, this.l10n); - } - this.annotationLayer.render(this.viewport, 'display'); - } - div.setAttribute('data-loaded', true); - if (this.onBeforeDraw) { - this.onBeforeDraw(); - } - return resultPromise; - } - }, { - key: 'paintOnCanvas', - value: function paintOnCanvas(canvasWrapper) { - var renderCapability = (0, _pdfjsLib.createPromiseCapability)(); - var result = { - promise: renderCapability.promise, - onRenderContinue: function onRenderContinue(cont) { - cont(); - }, - cancel: function cancel() { - renderTask.cancel(); - } - }; - var viewport = this.viewport; - var canvas = document.createElement('canvas'); - canvas.id = this.renderingId; - canvas.setAttribute('hidden', 'hidden'); - var isCanvasHidden = true; - var showCanvas = function showCanvas() { - if (isCanvasHidden) { - canvas.removeAttribute('hidden'); - isCanvasHidden = false; - } - }; - canvasWrapper.appendChild(canvas); - this.canvas = canvas; - canvas.mozOpaque = true; - var ctx = canvas.getContext('2d', { alpha: false }); - var outputScale = (0, _ui_utils.getOutputScale)(ctx); - this.outputScale = outputScale; - if (_pdfjsLib.PDFJS.useOnlyCssZoom) { - var actualSizeViewport = viewport.clone({ scale: _ui_utils.CSS_UNITS }); - outputScale.sx *= actualSizeViewport.width / viewport.width; - outputScale.sy *= actualSizeViewport.height / viewport.height; - outputScale.scaled = true; - } - if (_pdfjsLib.PDFJS.maxCanvasPixels > 0) { - var pixelsInViewport = viewport.width * viewport.height; - var maxScale = Math.sqrt(_pdfjsLib.PDFJS.maxCanvasPixels / pixelsInViewport); - if (outputScale.sx > maxScale || outputScale.sy > maxScale) { - outputScale.sx = maxScale; - outputScale.sy = maxScale; - outputScale.scaled = true; - this.hasRestrictedScaling = true; - } else { - this.hasRestrictedScaling = false; - } - } - var sfx = (0, _ui_utils.approximateFraction)(outputScale.sx); - var sfy = (0, _ui_utils.approximateFraction)(outputScale.sy); - canvas.width = (0, _ui_utils.roundToDivide)(viewport.width * outputScale.sx, sfx[0]); - canvas.height = (0, _ui_utils.roundToDivide)(viewport.height * outputScale.sy, sfy[0]); - canvas.style.width = (0, _ui_utils.roundToDivide)(viewport.width, sfx[1]) + 'px'; - canvas.style.height = (0, _ui_utils.roundToDivide)(viewport.height, sfy[1]) + 'px'; - this.paintedViewportMap.set(canvas, viewport); - var transform = !outputScale.scaled ? null : [outputScale.sx, 0, 0, outputScale.sy, 0, 0]; - var renderContext = { - canvasContext: ctx, - transform: transform, - viewport: this.viewport, - renderInteractiveForms: this.renderInteractiveForms - }; - var renderTask = this.pdfPage.render(renderContext); - renderTask.onContinue = function (cont) { - showCanvas(); - if (result.onRenderContinue) { - result.onRenderContinue(cont); - } else { - cont(); - } - }; - renderTask.promise.then(function () { - showCanvas(); - renderCapability.resolve(undefined); - }, function (error) { - showCanvas(); - renderCapability.reject(error); - }); - return result; - } - }, { - key: 'paintOnSvg', - value: function paintOnSvg(wrapper) { - var _this2 = this; - - var cancelled = false; - var ensureNotCancelled = function ensureNotCancelled() { - if (cancelled) { - if (_pdfjsLib.PDFJS.pdfjsNext) { - throw new _pdfjsLib.RenderingCancelledException('Rendering cancelled, page ' + _this2.id, 'svg'); - } else { - throw 'cancelled'; - } - } - }; - var pdfPage = this.pdfPage; - var actualSizeViewport = this.viewport.clone({ scale: _ui_utils.CSS_UNITS }); - var promise = pdfPage.getOperatorList().then(function (opList) { - ensureNotCancelled(); - var svgGfx = new _pdfjsLib.SVGGraphics(pdfPage.commonObjs, pdfPage.objs); - return svgGfx.getSVG(opList, actualSizeViewport).then(function (svg) { - ensureNotCancelled(); - _this2.svg = svg; - _this2.paintedViewportMap.set(svg, actualSizeViewport); - svg.style.width = wrapper.style.width; - svg.style.height = wrapper.style.height; - _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; - wrapper.appendChild(svg); - }); - }); - return { - promise: promise, - onRenderContinue: function onRenderContinue(cont) { - cont(); - }, - cancel: function cancel() { - cancelled = true; - } - }; - } - }, { - key: 'setPageLabel', - value: function setPageLabel(label) { - this.pageLabel = typeof label === 'string' ? label : null; - if (this.pageLabel !== null) { - this.div.setAttribute('data-page-label', this.pageLabel); - } else { - this.div.removeAttribute('data-page-label'); - } - } - }, { - key: 'width', - get: function get() { - return this.viewport.width; - } - }, { - key: 'height', - get: function get() { - return this.viewport.height; - } - }]); - - return PDFPageView; -}(); - -exports.PDFPageView = PDFPageView; - -/***/ }), -/* 23 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFPresentationMode = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500; -var DELAY_BEFORE_HIDING_CONTROLS = 3000; -var ACTIVE_SELECTOR = 'pdfPresentationMode'; -var CONTROLS_SELECTOR = 'pdfPresentationModeControls'; -var MOUSE_SCROLL_COOLDOWN_TIME = 50; -var PAGE_SWITCH_THRESHOLD = 0.1; -var SWIPE_MIN_DISTANCE_THRESHOLD = 50; -var SWIPE_ANGLE_THRESHOLD = Math.PI / 6; - -var PDFPresentationMode = function () { - function PDFPresentationMode(_ref) { - var _this = this; - - var container = _ref.container, - _ref$viewer = _ref.viewer, - viewer = _ref$viewer === undefined ? null : _ref$viewer, - pdfViewer = _ref.pdfViewer, - eventBus = _ref.eventBus, - _ref$contextMenuItems = _ref.contextMenuItems, - contextMenuItems = _ref$contextMenuItems === undefined ? null : _ref$contextMenuItems; - - _classCallCheck(this, PDFPresentationMode); - - this.container = container; - this.viewer = viewer || container.firstElementChild; - this.pdfViewer = pdfViewer; - this.eventBus = eventBus; - this.active = false; - this.args = null; - this.contextMenuOpen = false; - this.mouseScrollTimeStamp = 0; - this.mouseScrollDelta = 0; - this.touchSwipeState = null; - if (contextMenuItems) { - contextMenuItems.contextFirstPage.addEventListener('click', function () { - _this.contextMenuOpen = false; - _this.eventBus.dispatch('firstpage'); - }); - contextMenuItems.contextLastPage.addEventListener('click', function () { - _this.contextMenuOpen = false; - _this.eventBus.dispatch('lastpage'); - }); - contextMenuItems.contextPageRotateCw.addEventListener('click', function () { - _this.contextMenuOpen = false; - _this.eventBus.dispatch('rotatecw'); - }); - contextMenuItems.contextPageRotateCcw.addEventListener('click', function () { - _this.contextMenuOpen = false; - _this.eventBus.dispatch('rotateccw'); - }); - } - } - - _createClass(PDFPresentationMode, [{ - key: 'request', - value: function request() { - if (this.switchInProgress || this.active || !this.viewer.hasChildNodes()) { - return false; - } - this._addFullscreenChangeListeners(); - this._setSwitchInProgress(); - this._notifyStateChange(); - if (this.container.requestFullscreen) { - this.container.requestFullscreen(); - } else if (this.container.mozRequestFullScreen) { - this.container.mozRequestFullScreen(); - } else if (this.container.webkitRequestFullscreen) { - this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT); - } else if (this.container.msRequestFullscreen) { - this.container.msRequestFullscreen(); - } else { - return false; - } - this.args = { - page: this.pdfViewer.currentPageNumber, - previousScale: this.pdfViewer.currentScaleValue - }; - return true; - } - }, { - key: '_mouseWheel', - value: function _mouseWheel(evt) { - if (!this.active) { - return; - } - evt.preventDefault(); - var delta = (0, _ui_utils.normalizeWheelEventDelta)(evt); - var currentTime = new Date().getTime(); - var storedTime = this.mouseScrollTimeStamp; - if (currentTime > storedTime && currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) { - return; - } - if (this.mouseScrollDelta > 0 && delta < 0 || this.mouseScrollDelta < 0 && delta > 0) { - this._resetMouseScrollState(); - } - this.mouseScrollDelta += delta; - if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) { - var totalDelta = this.mouseScrollDelta; - this._resetMouseScrollState(); - var success = totalDelta > 0 ? this._goToPreviousPage() : this._goToNextPage(); - if (success) { - this.mouseScrollTimeStamp = currentTime; - } - } - } - }, { - key: '_goToPreviousPage', - value: function _goToPreviousPage() { - var page = this.pdfViewer.currentPageNumber; - if (page <= 1) { - return false; - } - this.pdfViewer.currentPageNumber = page - 1; - return true; - } - }, { - key: '_goToNextPage', - value: function _goToNextPage() { - var page = this.pdfViewer.currentPageNumber; - if (page >= this.pdfViewer.pagesCount) { - return false; - } - this.pdfViewer.currentPageNumber = page + 1; - return true; - } - }, { - key: '_notifyStateChange', - value: function _notifyStateChange() { - this.eventBus.dispatch('presentationmodechanged', { - source: this, - active: this.active, - switchInProgress: !!this.switchInProgress - }); - } - }, { - key: '_setSwitchInProgress', - value: function _setSwitchInProgress() { - var _this2 = this; - - if (this.switchInProgress) { - clearTimeout(this.switchInProgress); - } - this.switchInProgress = setTimeout(function () { - _this2._removeFullscreenChangeListeners(); - delete _this2.switchInProgress; - _this2._notifyStateChange(); - }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS); - } - }, { - key: '_resetSwitchInProgress', - value: function _resetSwitchInProgress() { - if (this.switchInProgress) { - clearTimeout(this.switchInProgress); - delete this.switchInProgress; - } - } - }, { - key: '_enter', - value: function _enter() { - var _this3 = this; - - this.active = true; - this._resetSwitchInProgress(); - this._notifyStateChange(); - this.container.classList.add(ACTIVE_SELECTOR); - setTimeout(function () { - _this3.pdfViewer.currentPageNumber = _this3.args.page; - _this3.pdfViewer.currentScaleValue = 'page-fit'; - }, 0); - this._addWindowListeners(); - this._showControls(); - this.contextMenuOpen = false; - this.container.setAttribute('contextmenu', 'viewerContextMenu'); - window.getSelection().removeAllRanges(); - } - }, { - key: '_exit', - value: function _exit() { - var _this4 = this; - - var page = this.pdfViewer.currentPageNumber; - this.container.classList.remove(ACTIVE_SELECTOR); - setTimeout(function () { - _this4.active = false; - _this4._removeFullscreenChangeListeners(); - _this4._notifyStateChange(); - _this4.pdfViewer.currentScaleValue = _this4.args.previousScale; - _this4.pdfViewer.currentPageNumber = page; - _this4.args = null; - }, 0); - this._removeWindowListeners(); - this._hideControls(); - this._resetMouseScrollState(); - this.container.removeAttribute('contextmenu'); - this.contextMenuOpen = false; - } - }, { - key: '_mouseDown', - value: function _mouseDown(evt) { - if (this.contextMenuOpen) { - this.contextMenuOpen = false; - evt.preventDefault(); - return; - } - if (evt.button === 0) { - var isInternalLink = evt.target.href && evt.target.classList.contains('internalLink'); - if (!isInternalLink) { - evt.preventDefault(); - if (evt.shiftKey) { - this._goToPreviousPage(); - } else { - this._goToNextPage(); - } - } - } - } - }, { - key: '_contextMenu', - value: function _contextMenu() { - this.contextMenuOpen = true; - } - }, { - key: '_showControls', - value: function _showControls() { - var _this5 = this; - - if (this.controlsTimeout) { - clearTimeout(this.controlsTimeout); - } else { - this.container.classList.add(CONTROLS_SELECTOR); - } - this.controlsTimeout = setTimeout(function () { - _this5.container.classList.remove(CONTROLS_SELECTOR); - delete _this5.controlsTimeout; - }, DELAY_BEFORE_HIDING_CONTROLS); - } - }, { - key: '_hideControls', - value: function _hideControls() { - if (!this.controlsTimeout) { - return; - } - clearTimeout(this.controlsTimeout); - this.container.classList.remove(CONTROLS_SELECTOR); - delete this.controlsTimeout; - } - }, { - key: '_resetMouseScrollState', - value: function _resetMouseScrollState() { - this.mouseScrollTimeStamp = 0; - this.mouseScrollDelta = 0; - } - }, { - key: '_touchSwipe', - value: function _touchSwipe(evt) { - if (!this.active) { - return; - } - if (evt.touches.length > 1) { - this.touchSwipeState = null; - return; - } - switch (evt.type) { - case 'touchstart': - this.touchSwipeState = { - startX: evt.touches[0].pageX, - startY: evt.touches[0].pageY, - endX: evt.touches[0].pageX, - endY: evt.touches[0].pageY - }; - break; - case 'touchmove': - if (this.touchSwipeState === null) { - return; - } - this.touchSwipeState.endX = evt.touches[0].pageX; - this.touchSwipeState.endY = evt.touches[0].pageY; - evt.preventDefault(); - break; - case 'touchend': - if (this.touchSwipeState === null) { - return; - } - var delta = 0; - var dx = this.touchSwipeState.endX - this.touchSwipeState.startX; - var dy = this.touchSwipeState.endY - this.touchSwipeState.startY; - var absAngle = Math.abs(Math.atan2(dy, dx)); - if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD && (absAngle <= SWIPE_ANGLE_THRESHOLD || absAngle >= Math.PI - SWIPE_ANGLE_THRESHOLD)) { - delta = dx; - } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD && Math.abs(absAngle - Math.PI / 2) <= SWIPE_ANGLE_THRESHOLD) { - delta = dy; - } - if (delta > 0) { - this._goToPreviousPage(); - } else if (delta < 0) { - this._goToNextPage(); - } - break; - } - } - }, { - key: '_addWindowListeners', - value: function _addWindowListeners() { - this.showControlsBind = this._showControls.bind(this); - this.mouseDownBind = this._mouseDown.bind(this); - this.mouseWheelBind = this._mouseWheel.bind(this); - this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this); - this.contextMenuBind = this._contextMenu.bind(this); - this.touchSwipeBind = this._touchSwipe.bind(this); - window.addEventListener('mousemove', this.showControlsBind); - window.addEventListener('mousedown', this.mouseDownBind); - window.addEventListener('wheel', this.mouseWheelBind); - window.addEventListener('keydown', this.resetMouseScrollStateBind); - window.addEventListener('contextmenu', this.contextMenuBind); - window.addEventListener('touchstart', this.touchSwipeBind); - window.addEventListener('touchmove', this.touchSwipeBind); - window.addEventListener('touchend', this.touchSwipeBind); - } - }, { - key: '_removeWindowListeners', - value: function _removeWindowListeners() { - window.removeEventListener('mousemove', this.showControlsBind); - window.removeEventListener('mousedown', this.mouseDownBind); - window.removeEventListener('wheel', this.mouseWheelBind); - window.removeEventListener('keydown', this.resetMouseScrollStateBind); - window.removeEventListener('contextmenu', this.contextMenuBind); - window.removeEventListener('touchstart', this.touchSwipeBind); - window.removeEventListener('touchmove', this.touchSwipeBind); - window.removeEventListener('touchend', this.touchSwipeBind); - delete this.showControlsBind; - delete this.mouseDownBind; - delete this.mouseWheelBind; - delete this.resetMouseScrollStateBind; - delete this.contextMenuBind; - delete this.touchSwipeBind; - } - }, { - key: '_fullscreenChange', - value: function _fullscreenChange() { - if (this.isFullscreen) { - this._enter(); - } else { - this._exit(); - } - } - }, { - key: '_addFullscreenChangeListeners', - value: function _addFullscreenChangeListeners() { - this.fullscreenChangeBind = this._fullscreenChange.bind(this); - window.addEventListener('fullscreenchange', this.fullscreenChangeBind); - window.addEventListener('mozfullscreenchange', this.fullscreenChangeBind); - window.addEventListener('webkitfullscreenchange', this.fullscreenChangeBind); - window.addEventListener('MSFullscreenChange', this.fullscreenChangeBind); - } - }, { - key: '_removeFullscreenChangeListeners', - value: function _removeFullscreenChangeListeners() { - window.removeEventListener('fullscreenchange', this.fullscreenChangeBind); - window.removeEventListener('mozfullscreenchange', this.fullscreenChangeBind); - window.removeEventListener('webkitfullscreenchange', this.fullscreenChangeBind); - window.removeEventListener('MSFullscreenChange', this.fullscreenChangeBind); - delete this.fullscreenChangeBind; - } - }, { - key: 'isFullscreen', - get: function get() { - return !!(document.fullscreenElement || document.mozFullScreen || document.webkitIsFullScreen || document.msFullscreenElement); - } - }]); - - return PDFPresentationMode; -}(); - -exports.PDFPresentationMode = PDFPresentationMode; - -/***/ }), -/* 24 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFSidebar = exports.SidebarView = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -var _pdf_rendering_queue = __webpack_require__(3); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var UI_NOTIFICATION_CLASS = 'pdfSidebarNotification'; -var SidebarView = { - NONE: 0, - THUMBS: 1, - OUTLINE: 2, - ATTACHMENTS: 3 -}; - -var PDFSidebar = function () { - function PDFSidebar(options) { - var l10n = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _ui_utils.NullL10n; - - _classCallCheck(this, PDFSidebar); - - this.isOpen = false; - this.active = SidebarView.THUMBS; - this.isInitialViewSet = false; - this.onToggled = null; - this.pdfViewer = options.pdfViewer; - this.pdfThumbnailViewer = options.pdfThumbnailViewer; - this.pdfOutlineViewer = options.pdfOutlineViewer; - this.mainContainer = options.mainContainer; - this.outerContainer = options.outerContainer; - this.eventBus = options.eventBus; - this.toggleButton = options.toggleButton; - this.thumbnailButton = options.thumbnailButton; - this.outlineButton = options.outlineButton; - this.attachmentsButton = options.attachmentsButton; - this.thumbnailView = options.thumbnailView; - this.outlineView = options.outlineView; - this.attachmentsView = options.attachmentsView; - this.disableNotification = options.disableNotification || false; - this.l10n = l10n; - this._addEventListeners(); - } - - _createClass(PDFSidebar, [{ - key: 'reset', - value: function reset() { - this.isInitialViewSet = false; - this._hideUINotification(null); - this.switchView(SidebarView.THUMBS); - this.outlineButton.disabled = false; - this.attachmentsButton.disabled = false; - } - }, { - key: 'setInitialView', - value: function setInitialView(view) { - if (this.isInitialViewSet) { - return; - } - this.isInitialViewSet = true; - if (this.isOpen && view === SidebarView.NONE) { - this._dispatchEvent(); - return; - } - var isViewPreserved = view === this.visibleView; - this.switchView(view, true); - if (isViewPreserved) { - this._dispatchEvent(); - } - } - }, { - key: 'switchView', - value: function switchView(view) { - var forceOpen = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (view === SidebarView.NONE) { - this.close(); - return; - } - var isViewChanged = view !== this.active; - var shouldForceRendering = false; - switch (view) { - case SidebarView.THUMBS: - this.thumbnailButton.classList.add('toggled'); - this.outlineButton.classList.remove('toggled'); - this.attachmentsButton.classList.remove('toggled'); - this.thumbnailView.classList.remove('hidden'); - this.outlineView.classList.add('hidden'); - this.attachmentsView.classList.add('hidden'); - if (this.isOpen && isViewChanged) { - this._updateThumbnailViewer(); - shouldForceRendering = true; - } - break; - case SidebarView.OUTLINE: - if (this.outlineButton.disabled) { - return; - } - this.thumbnailButton.classList.remove('toggled'); - this.outlineButton.classList.add('toggled'); - this.attachmentsButton.classList.remove('toggled'); - this.thumbnailView.classList.add('hidden'); - this.outlineView.classList.remove('hidden'); - this.attachmentsView.classList.add('hidden'); - break; - case SidebarView.ATTACHMENTS: - if (this.attachmentsButton.disabled) { - return; - } - this.thumbnailButton.classList.remove('toggled'); - this.outlineButton.classList.remove('toggled'); - this.attachmentsButton.classList.add('toggled'); - this.thumbnailView.classList.add('hidden'); - this.outlineView.classList.add('hidden'); - this.attachmentsView.classList.remove('hidden'); - break; - default: - console.error('PDFSidebar_switchView: "' + view + '" is an unsupported value.'); - return; - } - this.active = view | 0; - if (forceOpen && !this.isOpen) { - this.open(); - return; - } - if (shouldForceRendering) { - this._forceRendering(); - } - if (isViewChanged) { - this._dispatchEvent(); - } - this._hideUINotification(this.active); - } - }, { - key: 'open', - value: function open() { - if (this.isOpen) { - return; - } - this.isOpen = true; - this.toggleButton.classList.add('toggled'); - this.outerContainer.classList.add('sidebarMoving'); - this.outerContainer.classList.add('sidebarOpen'); - if (this.active === SidebarView.THUMBS) { - this._updateThumbnailViewer(); - } - this._forceRendering(); - this._dispatchEvent(); - this._hideUINotification(this.active); - } - }, { - key: 'close', - value: function close() { - if (!this.isOpen) { - return; - } - this.isOpen = false; - this.toggleButton.classList.remove('toggled'); - this.outerContainer.classList.add('sidebarMoving'); - this.outerContainer.classList.remove('sidebarOpen'); - this._forceRendering(); - this._dispatchEvent(); - } - }, { - key: 'toggle', - value: function toggle() { - if (this.isOpen) { - this.close(); - } else { - this.open(); - } - } - }, { - key: '_dispatchEvent', - value: function _dispatchEvent() { - this.eventBus.dispatch('sidebarviewchanged', { - source: this, - view: this.visibleView - }); - } - }, { - key: '_forceRendering', - value: function _forceRendering() { - if (this.onToggled) { - this.onToggled(); - } else { - this.pdfViewer.forceRendering(); - this.pdfThumbnailViewer.forceRendering(); - } - } - }, { - key: '_updateThumbnailViewer', - value: function _updateThumbnailViewer() { - var pdfViewer = this.pdfViewer, - pdfThumbnailViewer = this.pdfThumbnailViewer; - - var pagesCount = pdfViewer.pagesCount; - for (var pageIndex = 0; pageIndex < pagesCount; pageIndex++) { - var pageView = pdfViewer.getPageView(pageIndex); - if (pageView && pageView.renderingState === _pdf_rendering_queue.RenderingStates.FINISHED) { - var thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex); - thumbnailView.setImage(pageView); - } - } - pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber); - } - }, { - key: '_showUINotification', - value: function _showUINotification(view) { - var _this = this; - - if (this.disableNotification) { - return; - } - this.l10n.get('toggle_sidebar_notification.title', null, 'Toggle Sidebar (document contains outline/attachments)').then(function (msg) { - _this.toggleButton.title = msg; - }); - if (!this.isOpen) { - this.toggleButton.classList.add(UI_NOTIFICATION_CLASS); - } else if (view === this.active) { - return; - } - switch (view) { - case SidebarView.OUTLINE: - this.outlineButton.classList.add(UI_NOTIFICATION_CLASS); - break; - case SidebarView.ATTACHMENTS: - this.attachmentsButton.classList.add(UI_NOTIFICATION_CLASS); - break; - } - } - }, { - key: '_hideUINotification', - value: function _hideUINotification(view) { - var _this2 = this; - - if (this.disableNotification) { - return; - } - var removeNotification = function removeNotification(view) { - switch (view) { - case SidebarView.OUTLINE: - _this2.outlineButton.classList.remove(UI_NOTIFICATION_CLASS); - break; - case SidebarView.ATTACHMENTS: - _this2.attachmentsButton.classList.remove(UI_NOTIFICATION_CLASS); - break; - } - }; - if (!this.isOpen && view !== null) { - return; - } - this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS); - if (view !== null) { - removeNotification(view); - return; - } - for (view in SidebarView) { - removeNotification(SidebarView[view]); - } - this.l10n.get('toggle_sidebar.title', null, 'Toggle Sidebar').then(function (msg) { - _this2.toggleButton.title = msg; - }); - } - }, { - key: '_addEventListeners', - value: function _addEventListeners() { - var _this3 = this; - - this.mainContainer.addEventListener('transitionend', function (evt) { - if (evt.target === _this3.mainContainer) { - _this3.outerContainer.classList.remove('sidebarMoving'); - } - }); - this.thumbnailButton.addEventListener('click', function () { - _this3.switchView(SidebarView.THUMBS); - }); - this.outlineButton.addEventListener('click', function () { - _this3.switchView(SidebarView.OUTLINE); - }); - this.outlineButton.addEventListener('dblclick', function () { - _this3.pdfOutlineViewer.toggleOutlineTree(); - }); - this.attachmentsButton.addEventListener('click', function () { - _this3.switchView(SidebarView.ATTACHMENTS); - }); - this.eventBus.on('outlineloaded', function (evt) { - var outlineCount = evt.outlineCount; - _this3.outlineButton.disabled = !outlineCount; - if (outlineCount) { - _this3._showUINotification(SidebarView.OUTLINE); - } else if (_this3.active === SidebarView.OUTLINE) { - _this3.switchView(SidebarView.THUMBS); - } - }); - this.eventBus.on('attachmentsloaded', function (evt) { - var attachmentsCount = evt.attachmentsCount; - _this3.attachmentsButton.disabled = !attachmentsCount; - if (attachmentsCount) { - _this3._showUINotification(SidebarView.ATTACHMENTS); - } else if (_this3.active === SidebarView.ATTACHMENTS) { - _this3.switchView(SidebarView.THUMBS); - } - }); - this.eventBus.on('presentationmodechanged', function (evt) { - if (!evt.active && !evt.switchInProgress && _this3.isThumbnailViewVisible) { - _this3._updateThumbnailViewer(); - } - }); - } - }, { - key: 'visibleView', - get: function get() { - return this.isOpen ? this.active : SidebarView.NONE; - } - }, { - key: 'isThumbnailViewVisible', - get: function get() { - return this.isOpen && this.active === SidebarView.THUMBS; - } - }, { - key: 'isOutlineViewVisible', - get: function get() { - return this.isOpen && this.active === SidebarView.OUTLINE; - } - }, { - key: 'isAttachmentsViewVisible', - get: function get() { - return this.isOpen && this.active === SidebarView.ATTACHMENTS; - } - }]); - - return PDFSidebar; -}(); - -exports.SidebarView = SidebarView; -exports.PDFSidebar = PDFSidebar; - -/***/ }), -/* 25 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFThumbnailView = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -var _ui_utils = __webpack_require__(0); - -var _pdf_rendering_queue = __webpack_require__(3); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var MAX_NUM_SCALING_STEPS = 3; -var THUMBNAIL_CANVAS_BORDER_WIDTH = 1; -var THUMBNAIL_WIDTH = 98; -var TempImageFactory = function TempImageFactoryClosure() { - var tempCanvasCache = null; - return { - getCanvas: function getCanvas(width, height) { - var tempCanvas = tempCanvasCache; - if (!tempCanvas) { - tempCanvas = document.createElement('canvas'); - tempCanvasCache = tempCanvas; - } - tempCanvas.width = width; - tempCanvas.height = height; - tempCanvas.mozOpaque = true; - var ctx = tempCanvas.getContext('2d', { alpha: false }); - ctx.save(); - ctx.fillStyle = 'rgb(255, 255, 255)'; - ctx.fillRect(0, 0, width, height); - ctx.restore(); - return tempCanvas; - }, - destroyCanvas: function destroyCanvas() { - var tempCanvas = tempCanvasCache; - if (tempCanvas) { - tempCanvas.width = 0; - tempCanvas.height = 0; - } - tempCanvasCache = null; - } - }; -}(); - -var PDFThumbnailView = function () { - function PDFThumbnailView(_ref) { - var container = _ref.container, - id = _ref.id, - defaultViewport = _ref.defaultViewport, - linkService = _ref.linkService, - renderingQueue = _ref.renderingQueue, - _ref$disableCanvasToI = _ref.disableCanvasToImageConversion, - disableCanvasToImageConversion = _ref$disableCanvasToI === undefined ? false : _ref$disableCanvasToI, - _ref$l10n = _ref.l10n, - l10n = _ref$l10n === undefined ? _ui_utils.NullL10n : _ref$l10n; - - _classCallCheck(this, PDFThumbnailView); - - this.id = id; - this.renderingId = 'thumbnail' + id; - this.pageLabel = null; - this.pdfPage = null; - this.rotation = 0; - this.viewport = defaultViewport; - this.pdfPageRotate = defaultViewport.rotation; - this.linkService = linkService; - this.renderingQueue = renderingQueue; - this.renderTask = null; - this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; - this.resume = null; - this.disableCanvasToImageConversion = disableCanvasToImageConversion; - this.pageWidth = this.viewport.width; - this.pageHeight = this.viewport.height; - this.pageRatio = this.pageWidth / this.pageHeight; - this.canvasWidth = THUMBNAIL_WIDTH; - this.canvasHeight = this.canvasWidth / this.pageRatio | 0; - this.scale = this.canvasWidth / this.pageWidth; - this.l10n = l10n; - var anchor = document.createElement('a'); - anchor.href = linkService.getAnchorUrl('#page=' + id); - this.l10n.get('thumb_page_title', { page: id }, 'Page {{page}}').then(function (msg) { - anchor.title = msg; - }); - anchor.onclick = function () { - linkService.page = id; - return false; - }; - this.anchor = anchor; - var div = document.createElement('div'); - div.className = 'thumbnail'; - div.setAttribute('data-page-number', this.id); - this.div = div; - if (id === 1) { - div.classList.add('selected'); - } - var ring = document.createElement('div'); - ring.className = 'thumbnailSelectionRing'; - var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; - ring.style.width = this.canvasWidth + borderAdjustment + 'px'; - ring.style.height = this.canvasHeight + borderAdjustment + 'px'; - this.ring = ring; - div.appendChild(ring); - anchor.appendChild(div); - container.appendChild(anchor); - } - - _createClass(PDFThumbnailView, [{ - key: 'setPdfPage', - value: function setPdfPage(pdfPage) { - this.pdfPage = pdfPage; - this.pdfPageRotate = pdfPage.rotate; - var totalRotation = (this.rotation + this.pdfPageRotate) % 360; - this.viewport = pdfPage.getViewport(1, totalRotation); - this.reset(); - } - }, { - key: 'reset', - value: function reset() { - this.cancelRendering(); - this.pageWidth = this.viewport.width; - this.pageHeight = this.viewport.height; - this.pageRatio = this.pageWidth / this.pageHeight; - this.canvasHeight = this.canvasWidth / this.pageRatio | 0; - this.scale = this.canvasWidth / this.pageWidth; - this.div.removeAttribute('data-loaded'); - var ring = this.ring; - var childNodes = ring.childNodes; - for (var i = childNodes.length - 1; i >= 0; i--) { - ring.removeChild(childNodes[i]); - } - var borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH; - ring.style.width = this.canvasWidth + borderAdjustment + 'px'; - ring.style.height = this.canvasHeight + borderAdjustment + 'px'; - if (this.canvas) { - this.canvas.width = 0; - this.canvas.height = 0; - delete this.canvas; - } - if (this.image) { - this.image.removeAttribute('src'); - delete this.image; - } - } - }, { - key: 'update', - value: function update(rotation) { - if (typeof rotation !== 'undefined') { - this.rotation = rotation; - } - var totalRotation = (this.rotation + this.pdfPageRotate) % 360; - this.viewport = this.viewport.clone({ - scale: 1, - rotation: totalRotation - }); - this.reset(); - } - }, { - key: 'cancelRendering', - value: function cancelRendering() { - if (this.renderTask) { - this.renderTask.cancel(); - this.renderTask = null; - } - this.renderingState = _pdf_rendering_queue.RenderingStates.INITIAL; - this.resume = null; - } - }, { - key: '_getPageDrawContext', - value: function _getPageDrawContext() { - var noCtxScale = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var canvas = document.createElement('canvas'); - this.canvas = canvas; - canvas.mozOpaque = true; - var ctx = canvas.getContext('2d', { alpha: false }); - var outputScale = (0, _ui_utils.getOutputScale)(ctx); - canvas.width = this.canvasWidth * outputScale.sx | 0; - canvas.height = this.canvasHeight * outputScale.sy | 0; - canvas.style.width = this.canvasWidth + 'px'; - canvas.style.height = this.canvasHeight + 'px'; - if (!noCtxScale && outputScale.scaled) { - ctx.scale(outputScale.sx, outputScale.sy); - } - return ctx; - } - }, { - key: '_convertCanvasToImage', - value: function _convertCanvasToImage() { - var _this = this; - - if (!this.canvas) { - return; - } - if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { - return; - } - var id = this.renderingId; - var className = 'thumbnailImage'; - if (this.disableCanvasToImageConversion) { - this.canvas.id = id; - this.canvas.className = className; - this.l10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}').then(function (msg) { - _this.canvas.setAttribute('aria-label', msg); - }); - this.div.setAttribute('data-loaded', true); - this.ring.appendChild(this.canvas); - return; - } - var image = document.createElement('img'); - image.id = id; - image.className = className; - this.l10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}').then(function (msg) { - image.setAttribute('aria-label', msg); - }); - image.style.width = this.canvasWidth + 'px'; - image.style.height = this.canvasHeight + 'px'; - image.src = this.canvas.toDataURL(); - this.image = image; - this.div.setAttribute('data-loaded', true); - this.ring.appendChild(image); - this.canvas.width = 0; - this.canvas.height = 0; - delete this.canvas; - } - }, { - key: 'draw', - value: function draw() { - var _this2 = this; - - if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { - console.error('Must be in new state before drawing'); - return Promise.resolve(undefined); - } - this.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; - var renderCapability = (0, _pdfjsLib.createPromiseCapability)(); - var finishRenderTask = function finishRenderTask(error) { - if (renderTask === _this2.renderTask) { - _this2.renderTask = null; - } - if (error === 'cancelled' || error instanceof _pdfjsLib.RenderingCancelledException) { - renderCapability.resolve(undefined); - return; - } - _this2.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; - _this2._convertCanvasToImage(); - if (!error) { - renderCapability.resolve(undefined); - } else { - renderCapability.reject(error); - } - }; - var ctx = this._getPageDrawContext(); - var drawViewport = this.viewport.clone({ scale: this.scale }); - var renderContinueCallback = function renderContinueCallback(cont) { - if (!_this2.renderingQueue.isHighestPriority(_this2)) { - _this2.renderingState = _pdf_rendering_queue.RenderingStates.PAUSED; - _this2.resume = function () { - _this2.renderingState = _pdf_rendering_queue.RenderingStates.RUNNING; - cont(); - }; - return; - } - cont(); - }; - var renderContext = { - canvasContext: ctx, - viewport: drawViewport - }; - var renderTask = this.renderTask = this.pdfPage.render(renderContext); - renderTask.onContinue = renderContinueCallback; - renderTask.promise.then(function () { - finishRenderTask(null); - }, function (error) { - finishRenderTask(error); - }); - return renderCapability.promise; - } - }, { - key: 'setImage', - value: function setImage(pageView) { - if (this.renderingState !== _pdf_rendering_queue.RenderingStates.INITIAL) { - return; - } - var img = pageView.canvas; - if (!img) { - return; - } - if (!this.pdfPage) { - this.setPdfPage(pageView.pdfPage); - } - this.renderingState = _pdf_rendering_queue.RenderingStates.FINISHED; - var ctx = this._getPageDrawContext(true); - var canvas = ctx.canvas; - if (img.width <= 2 * canvas.width) { - ctx.drawImage(img, 0, 0, img.width, img.height, 0, 0, canvas.width, canvas.height); - this._convertCanvasToImage(); - return; - } - var reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS; - var reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS; - var reducedImage = TempImageFactory.getCanvas(reducedWidth, reducedHeight); - var reducedImageCtx = reducedImage.getContext('2d'); - while (reducedWidth > img.width || reducedHeight > img.height) { - reducedWidth >>= 1; - reducedHeight >>= 1; - } - reducedImageCtx.drawImage(img, 0, 0, img.width, img.height, 0, 0, reducedWidth, reducedHeight); - while (reducedWidth > 2 * canvas.width) { - reducedImageCtx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, reducedWidth >> 1, reducedHeight >> 1); - reducedWidth >>= 1; - reducedHeight >>= 1; - } - ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight, 0, 0, canvas.width, canvas.height); - this._convertCanvasToImage(); - } - }, { - key: 'setPageLabel', - value: function setPageLabel(label) { - var _this3 = this; - - this.pageLabel = typeof label === 'string' ? label : null; - this.l10n.get('thumb_page_title', { page: this.pageId }, 'Page {{page}}').then(function (msg) { - _this3.anchor.title = msg; - }); - if (this.renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { - return; - } - this.l10n.get('thumb_page_canvas', { page: this.pageId }, 'Thumbnail of Page {{page}}').then(function (ariaLabel) { - if (_this3.image) { - _this3.image.setAttribute('aria-label', ariaLabel); - } else if (_this3.disableCanvasToImageConversion && _this3.canvas) { - _this3.canvas.setAttribute('aria-label', ariaLabel); - } - }); - } - }, { - key: 'pageId', - get: function get() { - return this.pageLabel !== null ? this.pageLabel : this.id; - } - }], [{ - key: 'cleanup', - value: function cleanup() { - TempImageFactory.destroyCanvas(); - } - }]); - - return PDFThumbnailView; -}(); - -exports.PDFThumbnailView = PDFThumbnailView; - -/***/ }), -/* 26 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFThumbnailViewer = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -var _pdf_thumbnail_view = __webpack_require__(25); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var THUMBNAIL_SCROLL_MARGIN = -19; - -var PDFThumbnailViewer = function () { - function PDFThumbnailViewer(_ref) { - var container = _ref.container, - linkService = _ref.linkService, - renderingQueue = _ref.renderingQueue, - _ref$l10n = _ref.l10n, - l10n = _ref$l10n === undefined ? _ui_utils.NullL10n : _ref$l10n; - - _classCallCheck(this, PDFThumbnailViewer); - - this.container = container; - this.linkService = linkService; - this.renderingQueue = renderingQueue; - this.l10n = l10n; - this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdated.bind(this)); - this._resetView(); - } - - _createClass(PDFThumbnailViewer, [{ - key: '_scrollUpdated', - value: function _scrollUpdated() { - this.renderingQueue.renderHighestPriority(); - } - }, { - key: 'getThumbnail', - value: function getThumbnail(index) { - return this._thumbnails[index]; - } - }, { - key: '_getVisibleThumbs', - value: function _getVisibleThumbs() { - return (0, _ui_utils.getVisibleElements)(this.container, this._thumbnails); - } - }, { - key: 'scrollThumbnailIntoView', - value: function scrollThumbnailIntoView(page) { - var selected = document.querySelector('.thumbnail.selected'); - if (selected) { - selected.classList.remove('selected'); - } - var thumbnail = document.querySelector('div.thumbnail[data-page-number="' + page + '"]'); - if (thumbnail) { - thumbnail.classList.add('selected'); - } - var visibleThumbs = this._getVisibleThumbs(); - var numVisibleThumbs = visibleThumbs.views.length; - if (numVisibleThumbs > 0) { - var first = visibleThumbs.first.id; - var last = numVisibleThumbs > 1 ? visibleThumbs.last.id : first; - if (page <= first || page >= last) { - (0, _ui_utils.scrollIntoView)(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN }); - } - } - } - }, { - key: 'cleanup', - value: function cleanup() { - _pdf_thumbnail_view.PDFThumbnailView.cleanup(); - } - }, { - key: '_resetView', - value: function _resetView() { - this._thumbnails = []; - this._pageLabels = null; - this._pagesRotation = 0; - this._pagesRequests = []; - this.container.textContent = ''; - } - }, { - key: 'setDocument', - value: function setDocument(pdfDocument) { - var _this = this; - - if (this.pdfDocument) { - this._cancelRendering(); - this._resetView(); - } - this.pdfDocument = pdfDocument; - if (!pdfDocument) { - return; - } - pdfDocument.getPage(1).then(function (firstPage) { - var pagesCount = pdfDocument.numPages; - var viewport = firstPage.getViewport(1.0); - for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { - var thumbnail = new _pdf_thumbnail_view.PDFThumbnailView({ - container: _this.container, - id: pageNum, - defaultViewport: viewport.clone(), - linkService: _this.linkService, - renderingQueue: _this.renderingQueue, - disableCanvasToImageConversion: false, - l10n: _this.l10n - }); - _this._thumbnails.push(thumbnail); - } - }).catch(function (reason) { - console.error('Unable to initialize thumbnail viewer', reason); - }); - } - }, { - key: '_cancelRendering', - value: function _cancelRendering() { - for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { - if (this._thumbnails[i]) { - this._thumbnails[i].cancelRendering(); - } - } - } - }, { - key: 'setPageLabels', - value: function setPageLabels(labels) { - if (!this.pdfDocument) { - return; - } - if (!labels) { - this._pageLabels = null; - } else if (!(labels instanceof Array && this.pdfDocument.numPages === labels.length)) { - this._pageLabels = null; - console.error('PDFThumbnailViewer_setPageLabels: Invalid page labels.'); - } else { - this._pageLabels = labels; - } - for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { - var label = this._pageLabels && this._pageLabels[i]; - this._thumbnails[i].setPageLabel(label); - } - } - }, { - key: '_ensurePdfPageLoaded', - value: function _ensurePdfPageLoaded(thumbView) { - var _this2 = this; - - if (thumbView.pdfPage) { - return Promise.resolve(thumbView.pdfPage); - } - var pageNumber = thumbView.id; - if (this._pagesRequests[pageNumber]) { - return this._pagesRequests[pageNumber]; - } - var promise = this.pdfDocument.getPage(pageNumber).then(function (pdfPage) { - thumbView.setPdfPage(pdfPage); - _this2._pagesRequests[pageNumber] = null; - return pdfPage; - }).catch(function (reason) { - console.error('Unable to get page for thumb view', reason); - _this2._pagesRequests[pageNumber] = null; - }); - this._pagesRequests[pageNumber] = promise; - return promise; - } - }, { - key: 'forceRendering', - value: function forceRendering() { - var _this3 = this; - - var visibleThumbs = this._getVisibleThumbs(); - var thumbView = this.renderingQueue.getHighestPriority(visibleThumbs, this._thumbnails, this.scroll.down); - if (thumbView) { - this._ensurePdfPageLoaded(thumbView).then(function () { - _this3.renderingQueue.renderView(thumbView); - }); - return true; - } - return false; - } - }, { - key: 'pagesRotation', - get: function get() { - return this._pagesRotation; - }, - set: function set(rotation) { - if (!(typeof rotation === 'number' && rotation % 90 === 0)) { - throw new Error('Invalid thumbnails rotation angle.'); - } - if (!this.pdfDocument) { - return; - } - this._pagesRotation = rotation; - for (var i = 0, ii = this._thumbnails.length; i < ii; i++) { - this._thumbnails[i].update(rotation); - } - } - }]); - - return PDFThumbnailViewer; -}(); - -exports.PDFThumbnailViewer = PDFThumbnailViewer; - -/***/ }), -/* 27 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.PDFViewer = exports.PresentationModeState = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdfjsLib = __webpack_require__(1); - -var _ui_utils = __webpack_require__(0); - -var _pdf_rendering_queue = __webpack_require__(3); - -var _annotation_layer_builder = __webpack_require__(11); - -var _dom_events = __webpack_require__(2); - -var _pdf_page_view = __webpack_require__(22); - -var _pdf_link_service = __webpack_require__(5); - -var _text_layer_builder = __webpack_require__(30); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var PresentationModeState = { - UNKNOWN: 0, - NORMAL: 1, - CHANGING: 2, - FULLSCREEN: 3 -}; -var DEFAULT_CACHE_SIZE = 10; -function PDFPageViewBuffer(size) { - var data = []; - this.push = function cachePush(view) { - var i = data.indexOf(view); - if (i >= 0) { - data.splice(i, 1); - } - data.push(view); - if (data.length > size) { - data.shift().destroy(); - } - }; - this.resize = function (newSize) { - size = newSize; - while (data.length > size) { - data.shift().destroy(); - } - }; -} -function isSameScale(oldScale, newScale) { - if (newScale === oldScale) { - return true; - } - if (Math.abs(newScale - oldScale) < 1e-15) { - return true; - } - return false; -} -function isPortraitOrientation(size) { - return size.width <= size.height; -} - -var PDFViewer = function () { - function PDFViewer(options) { - _classCallCheck(this, PDFViewer); - - this.container = options.container; - this.viewer = options.viewer || options.container.firstElementChild; - this.eventBus = options.eventBus || (0, _dom_events.getGlobalEventBus)(); - this.linkService = options.linkService || new _pdf_link_service.SimpleLinkService(); - this.downloadManager = options.downloadManager || null; - this.removePageBorders = options.removePageBorders || false; - this.enhanceTextSelection = options.enhanceTextSelection || false; - this.renderInteractiveForms = options.renderInteractiveForms || false; - this.enablePrintAutoRotate = options.enablePrintAutoRotate || false; - this.renderer = options.renderer || _ui_utils.RendererType.CANVAS; - this.l10n = options.l10n || _ui_utils.NullL10n; - this.defaultRenderingQueue = !options.renderingQueue; - if (this.defaultRenderingQueue) { - this.renderingQueue = new _pdf_rendering_queue.PDFRenderingQueue(); - this.renderingQueue.setViewer(this); - } else { - this.renderingQueue = options.renderingQueue; - } - this.scroll = (0, _ui_utils.watchScroll)(this.container, this._scrollUpdate.bind(this)); - this.presentationModeState = PresentationModeState.UNKNOWN; - this._resetView(); - if (this.removePageBorders) { - this.viewer.classList.add('removePageBorders'); - } - } - - _createClass(PDFViewer, [{ - key: 'getPageView', - value: function getPageView(index) { - return this._pages[index]; - } - }, { - key: '_setCurrentPageNumber', - value: function _setCurrentPageNumber(val) { - var resetCurrentPageView = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - if (this._currentPageNumber === val) { - if (resetCurrentPageView) { - this._resetCurrentPageView(); - } - return; - } - if (!(0 < val && val <= this.pagesCount)) { - console.error('PDFViewer._setCurrentPageNumber: "' + val + '" is out of bounds.'); - return; - } - var arg = { - source: this, - pageNumber: val, - pageLabel: this._pageLabels && this._pageLabels[val - 1] - }; - this._currentPageNumber = val; - this.eventBus.dispatch('pagechanging', arg); - this.eventBus.dispatch('pagechange', arg); - if (resetCurrentPageView) { - this._resetCurrentPageView(); - } - } - }, { - key: 'setDocument', - value: function setDocument(pdfDocument) { - var _this = this; - - if (this.pdfDocument) { - this._cancelRendering(); - this._resetView(); - } - this.pdfDocument = pdfDocument; - if (!pdfDocument) { - return; - } - var pagesCount = pdfDocument.numPages; - var pagesCapability = (0, _pdfjsLib.createPromiseCapability)(); - this.pagesPromise = pagesCapability.promise; - pagesCapability.promise.then(function () { - _this._pageViewsReady = true; - _this.eventBus.dispatch('pagesloaded', { - source: _this, - pagesCount: pagesCount - }); - }); - var isOnePageRenderedResolved = false; - var onePageRenderedCapability = (0, _pdfjsLib.createPromiseCapability)(); - this.onePageRendered = onePageRenderedCapability.promise; - var bindOnAfterAndBeforeDraw = function bindOnAfterAndBeforeDraw(pageView) { - pageView.onBeforeDraw = function () { - _this._buffer.push(pageView); - }; - pageView.onAfterDraw = function () { - if (!isOnePageRenderedResolved) { - isOnePageRenderedResolved = true; - onePageRenderedCapability.resolve(); - } - }; - }; - var firstPagePromise = pdfDocument.getPage(1); - this.firstPagePromise = firstPagePromise; - firstPagePromise.then(function (pdfPage) { - var scale = _this.currentScale; - var viewport = pdfPage.getViewport(scale * _ui_utils.CSS_UNITS); - for (var pageNum = 1; pageNum <= pagesCount; ++pageNum) { - var textLayerFactory = null; - if (!_pdfjsLib.PDFJS.disableTextLayer) { - textLayerFactory = _this; - } - var pageView = new _pdf_page_view.PDFPageView({ - container: _this.viewer, - eventBus: _this.eventBus, - id: pageNum, - scale: scale, - defaultViewport: viewport.clone(), - renderingQueue: _this.renderingQueue, - textLayerFactory: textLayerFactory, - annotationLayerFactory: _this, - enhanceTextSelection: _this.enhanceTextSelection, - renderInteractiveForms: _this.renderInteractiveForms, - renderer: _this.renderer, - l10n: _this.l10n - }); - bindOnAfterAndBeforeDraw(pageView); - _this._pages.push(pageView); - } - onePageRenderedCapability.promise.then(function () { - if (_pdfjsLib.PDFJS.disableAutoFetch) { - pagesCapability.resolve(); - return; - } - var getPagesLeft = pagesCount; - - var _loop = function _loop(_pageNum) { - pdfDocument.getPage(_pageNum).then(function (pdfPage) { - var pageView = _this._pages[_pageNum - 1]; - if (!pageView.pdfPage) { - pageView.setPdfPage(pdfPage); - } - _this.linkService.cachePageRef(_pageNum, pdfPage.ref); - if (--getPagesLeft === 0) { - pagesCapability.resolve(); - } - }, function (reason) { - console.error('Unable to get page ' + _pageNum + ' to initialize viewer', reason); - if (--getPagesLeft === 0) { - pagesCapability.resolve(); - } - }); - }; - - for (var _pageNum = 1; _pageNum <= pagesCount; ++_pageNum) { - _loop(_pageNum); - } - }); - _this.eventBus.dispatch('pagesinit', { source: _this }); - if (_this.defaultRenderingQueue) { - _this.update(); - } - if (_this.findController) { - _this.findController.resolveFirstPage(); - } - }).catch(function (reason) { - console.error('Unable to initialize viewer', reason); - }); - } - }, { - key: 'setPageLabels', - value: function setPageLabels(labels) { - if (!this.pdfDocument) { - return; - } - if (!labels) { - this._pageLabels = null; - } else if (!(labels instanceof Array && this.pdfDocument.numPages === labels.length)) { - this._pageLabels = null; - console.error('PDFViewer.setPageLabels: Invalid page labels.'); - } else { - this._pageLabels = labels; - } - for (var i = 0, ii = this._pages.length; i < ii; i++) { - var pageView = this._pages[i]; - var label = this._pageLabels && this._pageLabels[i]; - pageView.setPageLabel(label); - } - } - }, { - key: '_resetView', - value: function _resetView() { - this._pages = []; - this._currentPageNumber = 1; - this._currentScale = _ui_utils.UNKNOWN_SCALE; - this._currentScaleValue = null; - this._pageLabels = null; - this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE); - this._location = null; - this._pagesRotation = 0; - this._pagesRequests = []; - this._pageViewsReady = false; - this.viewer.textContent = ''; - } - }, { - key: '_scrollUpdate', - value: function _scrollUpdate() { - if (this.pagesCount === 0) { - return; - } - this.update(); - } - }, { - key: '_setScaleDispatchEvent', - value: function _setScaleDispatchEvent(newScale, newValue) { - var preset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - - var arg = { - source: this, - scale: newScale, - presetValue: preset ? newValue : undefined - }; - this.eventBus.dispatch('scalechanging', arg); - this.eventBus.dispatch('scalechange', arg); - } - }, { - key: '_setScaleUpdatePages', - value: function _setScaleUpdatePages(newScale, newValue) { - var noScroll = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var preset = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - this._currentScaleValue = newValue.toString(); - if (isSameScale(this._currentScale, newScale)) { - if (preset) { - this._setScaleDispatchEvent(newScale, newValue, true); - } - return; - } - for (var i = 0, ii = this._pages.length; i < ii; i++) { - this._pages[i].update(newScale); - } - this._currentScale = newScale; - if (!noScroll) { - var page = this._currentPageNumber, - dest = void 0; - if (this._location && !_pdfjsLib.PDFJS.ignoreCurrentPositionOnZoom && !(this.isInPresentationMode || this.isChangingPresentationMode)) { - page = this._location.pageNumber; - dest = [null, { name: 'XYZ' }, this._location.left, this._location.top, null]; - } - this.scrollPageIntoView({ - pageNumber: page, - destArray: dest, - allowNegativeOffset: true - }); - } - this._setScaleDispatchEvent(newScale, newValue, preset); - if (this.defaultRenderingQueue) { - this.update(); - } - } - }, { - key: '_setScale', - value: function _setScale(value) { - var noScroll = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - - var scale = parseFloat(value); - if (scale > 0) { - this._setScaleUpdatePages(scale, value, noScroll, false); - } else { - var currentPage = this._pages[this._currentPageNumber - 1]; - if (!currentPage) { - return; - } - var hPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; - var vPadding = this.isInPresentationMode || this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; - var pageWidthScale = (this.container.clientWidth - hPadding) / currentPage.width * currentPage.scale; - var pageHeightScale = (this.container.clientHeight - vPadding) / currentPage.height * currentPage.scale; - switch (value) { - case 'page-actual': - scale = 1; - break; - case 'page-width': - scale = pageWidthScale; - break; - case 'page-height': - scale = pageHeightScale; - break; - case 'page-fit': - scale = Math.min(pageWidthScale, pageHeightScale); - break; - case 'auto': - var isLandscape = currentPage.width > currentPage.height; - var horizontalScale = isLandscape ? Math.min(pageHeightScale, pageWidthScale) : pageWidthScale; - scale = Math.min(_ui_utils.MAX_AUTO_SCALE, horizontalScale); - break; - default: - console.error('PDFViewer._setScale: "' + value + '" is an unknown zoom value.'); - return; - } - this._setScaleUpdatePages(scale, value, noScroll, true); - } - } - }, { - key: '_resetCurrentPageView', - value: function _resetCurrentPageView() { - if (this.isInPresentationMode) { - this._setScale(this._currentScaleValue, true); - } - var pageView = this._pages[this._currentPageNumber - 1]; - (0, _ui_utils.scrollIntoView)(pageView.div); - } - }, { - key: 'scrollPageIntoView', - value: function scrollPageIntoView(params) { - if (!this.pdfDocument) { - return; - } - if (arguments.length > 1 || typeof params === 'number') { - console.warn('Call of scrollPageIntoView() with obsolete signature.'); - var paramObj = {}; - if (typeof params === 'number') { - paramObj.pageNumber = params; - } - if (arguments[1] instanceof Array) { - paramObj.destArray = arguments[1]; - } - params = paramObj; - } - var pageNumber = params.pageNumber || 0; - var dest = params.destArray || null; - var allowNegativeOffset = params.allowNegativeOffset || false; - if (this.isInPresentationMode || !dest) { - this._setCurrentPageNumber(pageNumber, true); - return; - } - var pageView = this._pages[pageNumber - 1]; - if (!pageView) { - console.error('PDFViewer.scrollPageIntoView: Invalid "pageNumber" parameter.'); - return; - } - var x = 0, - y = 0; - var width = 0, - height = 0, - widthScale = void 0, - heightScale = void 0; - var changeOrientation = pageView.rotation % 180 === 0 ? false : true; - var pageWidth = (changeOrientation ? pageView.height : pageView.width) / pageView.scale / _ui_utils.CSS_UNITS; - var pageHeight = (changeOrientation ? pageView.width : pageView.height) / pageView.scale / _ui_utils.CSS_UNITS; - var scale = 0; - switch (dest[1].name) { - case 'XYZ': - x = dest[2]; - y = dest[3]; - scale = dest[4]; - x = x !== null ? x : 0; - y = y !== null ? y : pageHeight; - break; - case 'Fit': - case 'FitB': - scale = 'page-fit'; - break; - case 'FitH': - case 'FitBH': - y = dest[2]; - scale = 'page-width'; - if (y === null && this._location) { - x = this._location.left; - y = this._location.top; - } - break; - case 'FitV': - case 'FitBV': - x = dest[2]; - width = pageWidth; - height = pageHeight; - scale = 'page-height'; - break; - case 'FitR': - x = dest[2]; - y = dest[3]; - width = dest[4] - x; - height = dest[5] - y; - var hPadding = this.removePageBorders ? 0 : _ui_utils.SCROLLBAR_PADDING; - var vPadding = this.removePageBorders ? 0 : _ui_utils.VERTICAL_PADDING; - widthScale = (this.container.clientWidth - hPadding) / width / _ui_utils.CSS_UNITS; - heightScale = (this.container.clientHeight - vPadding) / height / _ui_utils.CSS_UNITS; - scale = Math.min(Math.abs(widthScale), Math.abs(heightScale)); - break; - default: - console.error('PDFViewer.scrollPageIntoView: "' + dest[1].name + '" ' + 'is not a valid destination type.'); - return; - } - if (scale && scale !== this._currentScale) { - this.currentScaleValue = scale; - } else if (this._currentScale === _ui_utils.UNKNOWN_SCALE) { - this.currentScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; - } - if (scale === 'page-fit' && !dest[4]) { - (0, _ui_utils.scrollIntoView)(pageView.div); - return; - } - var boundingRect = [pageView.viewport.convertToViewportPoint(x, y), pageView.viewport.convertToViewportPoint(x + width, y + height)]; - var left = Math.min(boundingRect[0][0], boundingRect[1][0]); - var top = Math.min(boundingRect[0][1], boundingRect[1][1]); - if (!allowNegativeOffset) { - left = Math.max(left, 0); - top = Math.max(top, 0); - } - (0, _ui_utils.scrollIntoView)(pageView.div, { - left: left, - top: top - }); - } - }, { - key: '_updateLocation', - value: function _updateLocation(firstPage) { - var currentScale = this._currentScale; - var currentScaleValue = this._currentScaleValue; - var normalizedScaleValue = parseFloat(currentScaleValue) === currentScale ? Math.round(currentScale * 10000) / 100 : currentScaleValue; - var pageNumber = firstPage.id; - var pdfOpenParams = '#page=' + pageNumber; - pdfOpenParams += '&zoom=' + normalizedScaleValue; - var currentPageView = this._pages[pageNumber - 1]; - var container = this.container; - var topLeft = currentPageView.getPagePoint(container.scrollLeft - firstPage.x, container.scrollTop - firstPage.y); - var intLeft = Math.round(topLeft[0]); - var intTop = Math.round(topLeft[1]); - pdfOpenParams += ',' + intLeft + ',' + intTop; - this._location = { - pageNumber: pageNumber, - scale: normalizedScaleValue, - top: intTop, - left: intLeft, - pdfOpenParams: pdfOpenParams - }; - } - }, { - key: 'update', - value: function update() { - var visible = this._getVisiblePages(); - var visiblePages = visible.views; - if (visiblePages.length === 0) { - return; - } - var suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE, 2 * visiblePages.length + 1); - this._buffer.resize(suggestedCacheSize); - this.renderingQueue.renderHighestPriority(visible); - var currentId = this._currentPageNumber; - var firstPage = visible.first; - var stillFullyVisible = false; - for (var i = 0, ii = visiblePages.length; i < ii; ++i) { - var page = visiblePages[i]; - if (page.percent < 100) { - break; - } - if (page.id === currentId) { - stillFullyVisible = true; - break; - } - } - if (!stillFullyVisible) { - currentId = visiblePages[0].id; - } - if (!this.isInPresentationMode) { - this._setCurrentPageNumber(currentId); - } - this._updateLocation(firstPage); - this.eventBus.dispatch('updateviewarea', { - source: this, - location: this._location - }); - } - }, { - key: 'containsElement', - value: function containsElement(element) { - return this.container.contains(element); - } - }, { - key: 'focus', - value: function focus() { - this.container.focus(); - } - }, { - key: '_getVisiblePages', - value: function _getVisiblePages() { - if (!this.isInPresentationMode) { - return (0, _ui_utils.getVisibleElements)(this.container, this._pages, true); - } - var visible = []; - var currentPage = this._pages[this._currentPageNumber - 1]; - visible.push({ - id: currentPage.id, - view: currentPage - }); - return { - first: currentPage, - last: currentPage, - views: visible - }; - } - }, { - key: 'cleanup', - value: function cleanup() { - for (var i = 0, ii = this._pages.length; i < ii; i++) { - if (this._pages[i] && this._pages[i].renderingState !== _pdf_rendering_queue.RenderingStates.FINISHED) { - this._pages[i].reset(); - } - } - } - }, { - key: '_cancelRendering', - value: function _cancelRendering() { - for (var i = 0, ii = this._pages.length; i < ii; i++) { - if (this._pages[i]) { - this._pages[i].cancelRendering(); - } - } - } - }, { - key: '_ensurePdfPageLoaded', - value: function _ensurePdfPageLoaded(pageView) { - var _this2 = this; - - if (pageView.pdfPage) { - return Promise.resolve(pageView.pdfPage); - } - var pageNumber = pageView.id; - if (this._pagesRequests[pageNumber]) { - return this._pagesRequests[pageNumber]; - } - var promise = this.pdfDocument.getPage(pageNumber).then(function (pdfPage) { - if (!pageView.pdfPage) { - pageView.setPdfPage(pdfPage); - } - _this2._pagesRequests[pageNumber] = null; - return pdfPage; - }).catch(function (reason) { - console.error('Unable to get page for page view', reason); - _this2._pagesRequests[pageNumber] = null; - }); - this._pagesRequests[pageNumber] = promise; - return promise; - } - }, { - key: 'forceRendering', - value: function forceRendering(currentlyVisiblePages) { - var _this3 = this; - - var visiblePages = currentlyVisiblePages || this._getVisiblePages(); - var pageView = this.renderingQueue.getHighestPriority(visiblePages, this._pages, this.scroll.down); - if (pageView) { - this._ensurePdfPageLoaded(pageView).then(function () { - _this3.renderingQueue.renderView(pageView); - }); - return true; - } - return false; - } - }, { - key: 'getPageTextContent', - value: function getPageTextContent(pageIndex) { - return this.pdfDocument.getPage(pageIndex + 1).then(function (page) { - return page.getTextContent({ normalizeWhitespace: true }); - }); - } - }, { - key: 'createTextLayerBuilder', - value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) { - var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - return new _text_layer_builder.TextLayerBuilder({ - textLayerDiv: textLayerDiv, - eventBus: this.eventBus, - pageIndex: pageIndex, - viewport: viewport, - findController: this.isInPresentationMode ? null : this.findController, - enhanceTextSelection: this.isInPresentationMode ? false : enhanceTextSelection - }); - } - }, { - key: 'createAnnotationLayerBuilder', - value: function createAnnotationLayerBuilder(pageDiv, pdfPage) { - var renderInteractiveForms = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false; - var l10n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _ui_utils.NullL10n; - - return new _annotation_layer_builder.AnnotationLayerBuilder({ - pageDiv: pageDiv, - pdfPage: pdfPage, - renderInteractiveForms: renderInteractiveForms, - linkService: this.linkService, - downloadManager: this.downloadManager, - l10n: l10n - }); - } - }, { - key: 'setFindController', - value: function setFindController(findController) { - this.findController = findController; - } - }, { - key: 'getPagesOverview', - value: function getPagesOverview() { - var pagesOverview = this._pages.map(function (pageView) { - var viewport = pageView.pdfPage.getViewport(1); - return { - width: viewport.width, - height: viewport.height, - rotation: viewport.rotation - }; - }); - if (!this.enablePrintAutoRotate) { - return pagesOverview; - } - var isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]); - return pagesOverview.map(function (size) { - if (isFirstPagePortrait === isPortraitOrientation(size)) { - return size; - } - return { - width: size.height, - height: size.width, - rotation: (size.rotation + 90) % 360 - }; - }); - } - }, { - key: 'pagesCount', - get: function get() { - return this._pages.length; - } - }, { - key: 'pageViewsReady', - get: function get() { - return this._pageViewsReady; - } - }, { - key: 'currentPageNumber', - get: function get() { - return this._currentPageNumber; - }, - set: function set(val) { - if ((val | 0) !== val) { - throw new Error('Invalid page number.'); - } - if (!this.pdfDocument) { - return; - } - this._setCurrentPageNumber(val, true); - } - }, { - key: 'currentPageLabel', - get: function get() { - return this._pageLabels && this._pageLabels[this._currentPageNumber - 1]; - }, - set: function set(val) { - var pageNumber = val | 0; - if (this._pageLabels) { - var i = this._pageLabels.indexOf(val); - if (i >= 0) { - pageNumber = i + 1; - } - } - this.currentPageNumber = pageNumber; - } - }, { - key: 'currentScale', - get: function get() { - return this._currentScale !== _ui_utils.UNKNOWN_SCALE ? this._currentScale : _ui_utils.DEFAULT_SCALE; - }, - set: function set(val) { - if (isNaN(val)) { - throw new Error('Invalid numeric scale'); - } - if (!this.pdfDocument) { - return; - } - this._setScale(val, false); - } - }, { - key: 'currentScaleValue', - get: function get() { - return this._currentScaleValue; - }, - set: function set(val) { - if (!this.pdfDocument) { - return; - } - this._setScale(val, false); - } - }, { - key: 'pagesRotation', - get: function get() { - return this._pagesRotation; - }, - set: function set(rotation) { - if (!(typeof rotation === 'number' && rotation % 90 === 0)) { - throw new Error('Invalid pages rotation angle.'); - } - if (!this.pdfDocument) { - return; - } - this._pagesRotation = rotation; - for (var i = 0, ii = this._pages.length; i < ii; i++) { - var pageView = this._pages[i]; - pageView.update(pageView.scale, rotation); - } - this._setScale(this._currentScaleValue, true); - if (this.defaultRenderingQueue) { - this.update(); - } - } - }, { - key: 'isInPresentationMode', - get: function get() { - return this.presentationModeState === PresentationModeState.FULLSCREEN; - } - }, { - key: 'isChangingPresentationMode', - get: function get() { - return this.presentationModeState === PresentationModeState.CHANGING; - } - }, { - key: 'isHorizontalScrollbarEnabled', - get: function get() { - return this.isInPresentationMode ? false : this.container.scrollWidth > this.container.clientWidth; - } - }, { - key: 'hasEqualPageSizes', - get: function get() { - var firstPageView = this._pages[0]; - for (var i = 1, ii = this._pages.length; i < ii; ++i) { - var pageView = this._pages[i]; - if (pageView.width !== firstPageView.width || pageView.height !== firstPageView.height) { - return false; - } - } - return true; - } - }]); - - return PDFViewer; -}(); - -exports.PresentationModeState = PresentationModeState; -exports.PDFViewer = PDFViewer; - -/***/ }), -/* 28 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.BasePreferences = undefined; - -var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var defaultPreferences = null; -function getDefaultPreferences() { - if (!defaultPreferences) { - defaultPreferences = Promise.resolve({ - "showPreviousViewOnLoad": true, - "defaultZoomValue": "", - "sidebarViewOnLoad": 0, - "enableHandToolOnLoad": false, - "cursorToolOnLoad": 0, - "enableWebGL": false, - "pdfBugEnabled": false, - "disableRange": false, - "disableStream": false, - "disableAutoFetch": false, - "disableFontFace": false, - "disableTextLayer": false, - "useOnlyCssZoom": false, - "externalLinkTarget": 0, - "enhanceTextSelection": false, - "renderer": "canvas", - "renderInteractiveForms": false, - "enablePrintAutoRotate": false, - "disablePageMode": false, - "disablePageLabels": false - }); - } - return defaultPreferences; -} - -var BasePreferences = function () { - function BasePreferences() { - var _this = this; - - _classCallCheck(this, BasePreferences); - - if (this.constructor === BasePreferences) { - throw new Error('Cannot initialize BasePreferences.'); - } - this.prefs = null; - this._initializedPromise = getDefaultPreferences().then(function (defaults) { - Object.defineProperty(_this, 'defaults', { - value: Object.freeze(defaults), - writable: false, - enumerable: true, - configurable: false - }); - _this.prefs = (0, _ui_utils.cloneObj)(defaults); - return _this._readFromStorage(defaults); - }).then(function (prefObj) { - if (prefObj) { - _this.prefs = prefObj; - } - }); - } - - _createClass(BasePreferences, [{ - key: "_writeToStorage", - value: function _writeToStorage(prefObj) { - return Promise.reject(new Error('Not implemented: _writeToStorage')); - } - }, { - key: "_readFromStorage", - value: function _readFromStorage(prefObj) { - return Promise.reject(new Error('Not implemented: _readFromStorage')); - } - }, { - key: "reset", - value: function reset() { - var _this2 = this; - - return this._initializedPromise.then(function () { - _this2.prefs = (0, _ui_utils.cloneObj)(_this2.defaults); - return _this2._writeToStorage(_this2.defaults); - }); - } - }, { - key: "reload", - value: function reload() { - var _this3 = this; - - return this._initializedPromise.then(function () { - return _this3._readFromStorage(_this3.defaults); - }).then(function (prefObj) { - if (prefObj) { - _this3.prefs = prefObj; - } - }); - } - }, { - key: "set", - value: function set(name, value) { - var _this4 = this; - - return this._initializedPromise.then(function () { - if (_this4.defaults[name] === undefined) { - throw new Error("Set preference: \"" + name + "\" is undefined."); - } else if (value === undefined) { - throw new Error('Set preference: no value is specified.'); - } - var valueType = typeof value === "undefined" ? "undefined" : _typeof(value); - var defaultType = _typeof(_this4.defaults[name]); - if (valueType !== defaultType) { - if (valueType === 'number' && defaultType === 'string') { - value = value.toString(); - } else { - throw new Error("Set preference: \"" + value + "\" is a " + valueType + ", " + ("expected a " + defaultType + ".")); - } - } else { - if (valueType === 'number' && (value | 0) !== value) { - throw new Error("Set preference: \"" + value + "\" must be an integer."); - } - } - _this4.prefs[name] = value; - return _this4._writeToStorage(_this4.prefs); - }); - } - }, { - key: "get", - value: function get(name) { - var _this5 = this; - - return this._initializedPromise.then(function () { - var defaultValue = _this5.defaults[name]; - if (defaultValue === undefined) { - throw new Error("Get preference: \"" + name + "\" is undefined."); - } else { - var prefValue = _this5.prefs[name]; - if (prefValue !== undefined) { - return prefValue; - } - } - return defaultValue; - }); - } - }]); - - return BasePreferences; -}(); - -exports.BasePreferences = BasePreferences; - -/***/ }), -/* 29 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.SecondaryToolbar = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _pdf_cursor_tools = __webpack_require__(6); - -var _ui_utils = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var SecondaryToolbar = function () { - function SecondaryToolbar(options, mainContainer, eventBus) { - _classCallCheck(this, SecondaryToolbar); - - this.toolbar = options.toolbar; - this.toggleButton = options.toggleButton; - this.toolbarButtonContainer = options.toolbarButtonContainer; - this.buttons = [{ - element: options.presentationModeButton, - eventName: 'presentationmode', - close: true - }, { - element: options.openFileButton, - eventName: 'openfile', - close: true - }, { - element: options.printButton, - eventName: 'print', - close: true - }, { - element: options.downloadButton, - eventName: 'download', - close: true - }, { - element: options.viewBookmarkButton, - eventName: null, - close: true - }, { - element: options.firstPageButton, - eventName: 'firstpage', - close: true - }, { - element: options.lastPageButton, - eventName: 'lastpage', - close: true - }, { - element: options.pageRotateCwButton, - eventName: 'rotatecw', - close: false - }, { - element: options.pageRotateCcwButton, - eventName: 'rotateccw', - close: false - }, { - element: options.cursorSelectToolButton, - eventName: 'switchcursortool', - eventDetails: { tool: _pdf_cursor_tools.CursorTool.SELECT }, - close: true - }, { - element: options.cursorHandToolButton, - eventName: 'switchcursortool', - eventDetails: { tool: _pdf_cursor_tools.CursorTool.HAND }, - close: true - }, { - element: options.documentPropertiesButton, - eventName: 'documentproperties', - close: true - }]; - this.items = { - firstPage: options.firstPageButton, - lastPage: options.lastPageButton, - pageRotateCw: options.pageRotateCwButton, - pageRotateCcw: options.pageRotateCcwButton - }; - this.mainContainer = mainContainer; - this.eventBus = eventBus; - this.opened = false; - this.containerHeight = null; - this.previousContainerHeight = null; - this.reset(); - this._bindClickListeners(); - this._bindCursorToolsListener(options); - this.eventBus.on('resize', this._setMaxHeight.bind(this)); - } - - _createClass(SecondaryToolbar, [{ - key: 'setPageNumber', - value: function setPageNumber(pageNumber) { - this.pageNumber = pageNumber; - this._updateUIState(); - } - }, { - key: 'setPagesCount', - value: function setPagesCount(pagesCount) { - this.pagesCount = pagesCount; - this._updateUIState(); - } - }, { - key: 'reset', - value: function reset() { - this.pageNumber = 0; - this.pagesCount = 0; - this._updateUIState(); - } - }, { - key: '_updateUIState', - value: function _updateUIState() { - this.items.firstPage.disabled = this.pageNumber <= 1; - this.items.lastPage.disabled = this.pageNumber >= this.pagesCount; - this.items.pageRotateCw.disabled = this.pagesCount === 0; - this.items.pageRotateCcw.disabled = this.pagesCount === 0; - } - }, { - key: '_bindClickListeners', - value: function _bindClickListeners() { - var _this = this; - - this.toggleButton.addEventListener('click', this.toggle.bind(this)); - - var _loop = function _loop(button) { - var _buttons$button = _this.buttons[button], - element = _buttons$button.element, - eventName = _buttons$button.eventName, - close = _buttons$button.close, - eventDetails = _buttons$button.eventDetails; - - element.addEventListener('click', function (evt) { - if (eventName !== null) { - var details = { source: _this }; - for (var property in eventDetails) { - details[property] = eventDetails[property]; - } - _this.eventBus.dispatch(eventName, details); - } - if (close) { - _this.close(); - } - }); - }; - - for (var button in this.buttons) { - _loop(button); - } - } - }, { - key: '_bindCursorToolsListener', - value: function _bindCursorToolsListener(buttons) { - this.eventBus.on('cursortoolchanged', function (evt) { - buttons.cursorSelectToolButton.classList.remove('toggled'); - buttons.cursorHandToolButton.classList.remove('toggled'); - switch (evt.tool) { - case _pdf_cursor_tools.CursorTool.SELECT: - buttons.cursorSelectToolButton.classList.add('toggled'); - break; - case _pdf_cursor_tools.CursorTool.HAND: - buttons.cursorHandToolButton.classList.add('toggled'); - break; - } - }); - } - }, { - key: 'open', - value: function open() { - if (this.opened) { - return; - } - this.opened = true; - this._setMaxHeight(); - this.toggleButton.classList.add('toggled'); - this.toolbar.classList.remove('hidden'); - } - }, { - key: 'close', - value: function close() { - if (!this.opened) { - return; - } - this.opened = false; - this.toolbar.classList.add('hidden'); - this.toggleButton.classList.remove('toggled'); - } - }, { - key: 'toggle', - value: function toggle() { - if (this.opened) { - this.close(); - } else { - this.open(); - } - } - }, { - key: '_setMaxHeight', - value: function _setMaxHeight() { - if (!this.opened) { - return; - } - this.containerHeight = this.mainContainer.clientHeight; - if (this.containerHeight === this.previousContainerHeight) { - return; - } - this.toolbarButtonContainer.setAttribute('style', 'max-height: ' + (this.containerHeight - _ui_utils.SCROLLBAR_PADDING) + 'px;'); - this.previousContainerHeight = this.containerHeight; - } - }, { - key: 'isOpen', - get: function get() { - return this.opened; - } - }]); - - return SecondaryToolbar; -}(); - -exports.SecondaryToolbar = SecondaryToolbar; - -/***/ }), -/* 30 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.DefaultTextLayerFactory = exports.TextLayerBuilder = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _dom_events = __webpack_require__(2); - -var _pdfjsLib = __webpack_require__(1); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var EXPAND_DIVS_TIMEOUT = 300; - -var TextLayerBuilder = function () { - function TextLayerBuilder(_ref) { - var textLayerDiv = _ref.textLayerDiv, - eventBus = _ref.eventBus, - pageIndex = _ref.pageIndex, - viewport = _ref.viewport, - _ref$findController = _ref.findController, - findController = _ref$findController === undefined ? null : _ref$findController, - _ref$enhanceTextSelec = _ref.enhanceTextSelection, - enhanceTextSelection = _ref$enhanceTextSelec === undefined ? false : _ref$enhanceTextSelec; - - _classCallCheck(this, TextLayerBuilder); - - this.textLayerDiv = textLayerDiv; - this.eventBus = eventBus || (0, _dom_events.getGlobalEventBus)(); - this.textContent = null; - this.textContentItemsStr = []; - this.textContentStream = null; - this.renderingDone = false; - this.pageIdx = pageIndex; - this.pageNumber = this.pageIdx + 1; - this.matches = []; - this.viewport = viewport; - this.textDivs = []; - this.findController = findController; - this.textLayerRenderTask = null; - this.enhanceTextSelection = enhanceTextSelection; - this._bindMouse(); - } - - _createClass(TextLayerBuilder, [{ - key: '_finishRendering', - value: function _finishRendering() { - this.renderingDone = true; - if (!this.enhanceTextSelection) { - var endOfContent = document.createElement('div'); - endOfContent.className = 'endOfContent'; - this.textLayerDiv.appendChild(endOfContent); - } - this.eventBus.dispatch('textlayerrendered', { - source: this, - pageNumber: this.pageNumber, - numTextDivs: this.textDivs.length - }); - } - }, { - key: 'render', - value: function render() { - var _this = this; - - var timeout = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; - - if (!(this.textContent || this.textContentStream) || this.renderingDone) { - return; - } - this.cancel(); - this.textDivs = []; - var textLayerFrag = document.createDocumentFragment(); - this.textLayerRenderTask = (0, _pdfjsLib.renderTextLayer)({ - textContent: this.textContent, - textContentStream: this.textContentStream, - container: textLayerFrag, - viewport: this.viewport, - textDivs: this.textDivs, - textContentItemsStr: this.textContentItemsStr, - timeout: timeout, - enhanceTextSelection: this.enhanceTextSelection - }); - this.textLayerRenderTask.promise.then(function () { - _this.textLayerDiv.appendChild(textLayerFrag); - _this._finishRendering(); - _this.updateMatches(); - }, function (reason) {}); - } - }, { - key: 'cancel', - value: function cancel() { - if (this.textLayerRenderTask) { - this.textLayerRenderTask.cancel(); - this.textLayerRenderTask = null; - } - } - }, { - key: 'setTextContentStream', - value: function setTextContentStream(readableStream) { - this.cancel(); - this.textContentStream = readableStream; - } - }, { - key: 'setTextContent', - value: function setTextContent(textContent) { - this.cancel(); - this.textContent = textContent; - } - }, { - key: 'convertMatches', - value: function convertMatches(matches, matchesLength) { - var i = 0; - var iIndex = 0; - var textContentItemsStr = this.textContentItemsStr; - var end = textContentItemsStr.length - 1; - var queryLen = this.findController === null ? 0 : this.findController.state.query.length; - var ret = []; - if (!matches) { - return ret; - } - for (var m = 0, len = matches.length; m < len; m++) { - var matchIdx = matches[m]; - while (i !== end && matchIdx >= iIndex + textContentItemsStr[i].length) { - iIndex += textContentItemsStr[i].length; - i++; - } - if (i === textContentItemsStr.length) { - console.error('Could not find a matching mapping'); - } - var match = { - begin: { - divIdx: i, - offset: matchIdx - iIndex - } - }; - if (matchesLength) { - matchIdx += matchesLength[m]; - } else { - matchIdx += queryLen; - } - while (i !== end && matchIdx > iIndex + textContentItemsStr[i].length) { - iIndex += textContentItemsStr[i].length; - i++; - } - match.end = { - divIdx: i, - offset: matchIdx - iIndex - }; - ret.push(match); - } - return ret; - } - }, { - key: 'renderMatches', - value: function renderMatches(matches) { - if (matches.length === 0) { - return; - } - var textContentItemsStr = this.textContentItemsStr; - var textDivs = this.textDivs; - var prevEnd = null; - var pageIdx = this.pageIdx; - var isSelectedPage = this.findController === null ? false : pageIdx === this.findController.selected.pageIdx; - var selectedMatchIdx = this.findController === null ? -1 : this.findController.selected.matchIdx; - var highlightAll = this.findController === null ? false : this.findController.state.highlightAll; - var infinity = { - divIdx: -1, - offset: undefined - }; - function beginText(begin, className) { - var divIdx = begin.divIdx; - textDivs[divIdx].textContent = ''; - appendTextToDiv(divIdx, 0, begin.offset, className); - } - function appendTextToDiv(divIdx, fromOffset, toOffset, className) { - var div = textDivs[divIdx]; - var content = textContentItemsStr[divIdx].substring(fromOffset, toOffset); - var node = document.createTextNode(content); - if (className) { - var span = document.createElement('span'); - span.className = className; - span.appendChild(node); - div.appendChild(span); - return; - } - div.appendChild(node); - } - var i0 = selectedMatchIdx, - i1 = i0 + 1; - if (highlightAll) { - i0 = 0; - i1 = matches.length; - } else if (!isSelectedPage) { - return; - } - for (var i = i0; i < i1; i++) { - var match = matches[i]; - var begin = match.begin; - var end = match.end; - var isSelected = isSelectedPage && i === selectedMatchIdx; - var highlightSuffix = isSelected ? ' selected' : ''; - if (this.findController) { - this.findController.updateMatchPosition(pageIdx, i, textDivs, begin.divIdx); - } - if (!prevEnd || begin.divIdx !== prevEnd.divIdx) { - if (prevEnd !== null) { - appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); - } - beginText(begin); - } else { - appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset); - } - if (begin.divIdx === end.divIdx) { - appendTextToDiv(begin.divIdx, begin.offset, end.offset, 'highlight' + highlightSuffix); - } else { - appendTextToDiv(begin.divIdx, begin.offset, infinity.offset, 'highlight begin' + highlightSuffix); - for (var n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) { - textDivs[n0].className = 'highlight middle' + highlightSuffix; - } - beginText(end, 'highlight end' + highlightSuffix); - } - prevEnd = end; - } - if (prevEnd) { - appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset); - } - } - }, { - key: 'updateMatches', - value: function updateMatches() { - if (!this.renderingDone) { - return; - } - var matches = this.matches; - var textDivs = this.textDivs; - var textContentItemsStr = this.textContentItemsStr; - var clearedUntilDivIdx = -1; - for (var i = 0, len = matches.length; i < len; i++) { - var match = matches[i]; - var begin = Math.max(clearedUntilDivIdx, match.begin.divIdx); - for (var n = begin, end = match.end.divIdx; n <= end; n++) { - var div = textDivs[n]; - div.textContent = textContentItemsStr[n]; - div.className = ''; - } - clearedUntilDivIdx = match.end.divIdx + 1; - } - if (this.findController === null || !this.findController.active) { - return; - } - var pageMatches = void 0, - pageMatchesLength = void 0; - if (this.findController !== null) { - pageMatches = this.findController.pageMatches[this.pageIdx] || null; - pageMatchesLength = this.findController.pageMatchesLength ? this.findController.pageMatchesLength[this.pageIdx] || null : null; - } - this.matches = this.convertMatches(pageMatches, pageMatchesLength); - this.renderMatches(this.matches); - } - }, { - key: '_bindMouse', - value: function _bindMouse() { - var _this2 = this; - - var div = this.textLayerDiv; - var expandDivsTimer = null; - div.addEventListener('mousedown', function (evt) { - if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) { - _this2.textLayerRenderTask.expandTextDivs(true); - if (expandDivsTimer) { - clearTimeout(expandDivsTimer); - expandDivsTimer = null; - } - return; - } - var end = div.querySelector('.endOfContent'); - if (!end) { - return; - } - var adjustTop = evt.target !== div; - adjustTop = adjustTop && window.getComputedStyle(end).getPropertyValue('-moz-user-select') !== 'none'; - if (adjustTop) { - var divBounds = div.getBoundingClientRect(); - var r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height); - end.style.top = (r * 100).toFixed(2) + '%'; - } - end.classList.add('active'); - }); - div.addEventListener('mouseup', function () { - if (_this2.enhanceTextSelection && _this2.textLayerRenderTask) { - expandDivsTimer = setTimeout(function () { - if (_this2.textLayerRenderTask) { - _this2.textLayerRenderTask.expandTextDivs(false); - } - expandDivsTimer = null; - }, EXPAND_DIVS_TIMEOUT); - return; - } - var end = div.querySelector('.endOfContent'); - if (!end) { - return; - } - end.style.top = ''; - end.classList.remove('active'); - }); - } - }]); - - return TextLayerBuilder; -}(); - -var DefaultTextLayerFactory = function () { - function DefaultTextLayerFactory() { - _classCallCheck(this, DefaultTextLayerFactory); - } - - _createClass(DefaultTextLayerFactory, [{ - key: 'createTextLayerBuilder', - value: function createTextLayerBuilder(textLayerDiv, pageIndex, viewport) { - var enhanceTextSelection = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false; - - return new TextLayerBuilder({ - textLayerDiv: textLayerDiv, - pageIndex: pageIndex, - viewport: viewport, - enhanceTextSelection: enhanceTextSelection - }); - } - }]); - - return DefaultTextLayerFactory; -}(); - -exports.TextLayerBuilder = TextLayerBuilder; -exports.DefaultTextLayerFactory = DefaultTextLayerFactory; - -/***/ }), -/* 31 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); -exports.Toolbar = undefined; - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -var _ui_utils = __webpack_require__(0); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading'; -var SCALE_SELECT_CONTAINER_PADDING = 8; -var SCALE_SELECT_PADDING = 22; - -var Toolbar = function () { - function Toolbar(options, mainContainer, eventBus) { - var l10n = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : _ui_utils.NullL10n; - - _classCallCheck(this, Toolbar); - - this.toolbar = options.container; - this.mainContainer = mainContainer; - this.eventBus = eventBus; - this.l10n = l10n; - this.items = options; - this._wasLocalized = false; - this.reset(); - this._bindListeners(); - } - - _createClass(Toolbar, [{ - key: 'setPageNumber', - value: function setPageNumber(pageNumber, pageLabel) { - this.pageNumber = pageNumber; - this.pageLabel = pageLabel; - this._updateUIState(false); - } - }, { - key: 'setPagesCount', - value: function setPagesCount(pagesCount, hasPageLabels) { - this.pagesCount = pagesCount; - this.hasPageLabels = hasPageLabels; - this._updateUIState(true); - } - }, { - key: 'setPageScale', - value: function setPageScale(pageScaleValue, pageScale) { - this.pageScaleValue = pageScaleValue; - this.pageScale = pageScale; - this._updateUIState(false); - } - }, { - key: 'reset', - value: function reset() { - this.pageNumber = 0; - this.pageLabel = null; - this.hasPageLabels = false; - this.pagesCount = 0; - this.pageScaleValue = _ui_utils.DEFAULT_SCALE_VALUE; - this.pageScale = _ui_utils.DEFAULT_SCALE; - this._updateUIState(true); - } - }, { - key: '_bindListeners', - value: function _bindListeners() { - var _this = this; - - var eventBus = this.eventBus, - items = this.items; - - var self = this; - items.previous.addEventListener('click', function () { - eventBus.dispatch('previouspage'); - }); - items.next.addEventListener('click', function () { - eventBus.dispatch('nextpage'); - }); - items.zoomIn.addEventListener('click', function () { - eventBus.dispatch('zoomin'); - }); - items.zoomOut.addEventListener('click', function () { - eventBus.dispatch('zoomout'); - }); - items.pageNumber.addEventListener('click', function () { - this.select(); - }); - items.pageNumber.addEventListener('change', function () { - eventBus.dispatch('pagenumberchanged', { - source: self, - value: this.value - }); - }); - items.scaleSelect.addEventListener('change', function () { - if (this.value === 'custom') { - return; - } - eventBus.dispatch('scalechanged', { - source: self, - value: this.value - }); - }); - items.presentationModeButton.addEventListener('click', function () { - eventBus.dispatch('presentationmode'); - }); - items.openFile.addEventListener('click', function () { - eventBus.dispatch('openfile'); - }); - items.print.addEventListener('click', function () { - eventBus.dispatch('print'); - }); - items.download.addEventListener('click', function () { - eventBus.dispatch('download'); - }); - items.scaleSelect.oncontextmenu = _ui_utils.noContextMenuHandler; - eventBus.on('localized', function () { - _this._localized(); - }); - } - }, { - key: '_localized', - value: function _localized() { - this._wasLocalized = true; - this._adjustScaleWidth(); - this._updateUIState(true); - } - }, { - key: '_updateUIState', - value: function _updateUIState() { - var resetNumPages = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - if (!this._wasLocalized) { - return; - } - var pageNumber = this.pageNumber, - pagesCount = this.pagesCount, - items = this.items; - - var scaleValue = (this.pageScaleValue || this.pageScale).toString(); - var scale = this.pageScale; - if (resetNumPages) { - if (this.hasPageLabels) { - items.pageNumber.type = 'text'; - } else { - items.pageNumber.type = 'number'; - this.l10n.get('of_pages', { pagesCount: pagesCount }, 'of {{pagesCount}}').then(function (msg) { - items.numPages.textContent = msg; - }); - } - items.pageNumber.max = pagesCount; - } - if (this.hasPageLabels) { - items.pageNumber.value = this.pageLabel; - this.l10n.get('page_of_pages', { - pageNumber: pageNumber, - pagesCount: pagesCount - }, '({{pageNumber}} of {{pagesCount}})').then(function (msg) { - items.numPages.textContent = msg; - }); - } else { - items.pageNumber.value = pageNumber; - } - items.previous.disabled = pageNumber <= 1; - items.next.disabled = pageNumber >= pagesCount; - items.zoomOut.disabled = scale <= _ui_utils.MIN_SCALE; - items.zoomIn.disabled = scale >= _ui_utils.MAX_SCALE; - var customScale = Math.round(scale * 10000) / 100; - this.l10n.get('page_scale_percent', { scale: customScale }, '{{scale}}%').then(function (msg) { - var options = items.scaleSelect.options; - var predefinedValueFound = false; - for (var i = 0, ii = options.length; i < ii; i++) { - var option = options[i]; - if (option.value !== scaleValue) { - option.selected = false; - continue; - } - option.selected = true; - predefinedValueFound = true; - } - if (!predefinedValueFound) { - items.customScaleOption.textContent = msg; - items.customScaleOption.selected = true; - } - }); - } - }, { - key: 'updateLoadingIndicatorState', - value: function updateLoadingIndicatorState() { - var loading = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; - - var pageNumberInput = this.items.pageNumber; - if (loading) { - pageNumberInput.classList.add(PAGE_NUMBER_LOADING_INDICATOR); - } else { - pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR); - } - } - }, { - key: '_adjustScaleWidth', - value: function _adjustScaleWidth() { - var container = this.items.scaleSelectContainer; - var select = this.items.scaleSelect; - _ui_utils.animationStarted.then(function () { - if (container.clientWidth === 0) { - container.setAttribute('style', 'display: inherit;'); - } - if (container.clientWidth > 0) { - select.setAttribute('style', 'min-width: inherit;'); - var width = select.clientWidth + SCALE_SELECT_CONTAINER_PADDING; - select.setAttribute('style', 'min-width: ' + (width + SCALE_SELECT_PADDING) + 'px;'); - container.setAttribute('style', 'min-width: ' + width + 'px; ' + 'max-width: ' + width + 'px;'); - } - }); - } - }]); - - return Toolbar; -}(); - -exports.Toolbar = Toolbar; - -/***/ }), -/* 32 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -Object.defineProperty(exports, "__esModule", { - value: true -}); - -var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }(); - -function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } - -var DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20; - -var ViewHistory = function () { - function ViewHistory(fingerprint) { - var _this = this; - - var cacheSize = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : DEFAULT_VIEW_HISTORY_CACHE_SIZE; - - _classCallCheck(this, ViewHistory); - - this.fingerprint = fingerprint; - this.cacheSize = cacheSize; - this._initializedPromise = this._readFromStorage().then(function (databaseStr) { - var database = JSON.parse(databaseStr || '{}'); - if (!('files' in database)) { - database.files = []; - } - if (database.files.length >= _this.cacheSize) { - database.files.shift(); - } - var index = void 0; - for (var i = 0, length = database.files.length; i < length; i++) { - var branch = database.files[i]; - if (branch.fingerprint === _this.fingerprint) { - index = i; - break; - } - } - if (typeof index !== 'number') { - index = database.files.push({ fingerprint: _this.fingerprint }) - 1; - } - _this.file = database.files[index]; - _this.database = database; - }); - } - - _createClass(ViewHistory, [{ - key: '_writeToStorage', - value: function _writeToStorage() { - var _this2 = this; - - return new Promise(function (resolve) { - var databaseStr = JSON.stringify(_this2.database); - localStorage.setItem('pdfjs.history', databaseStr); - resolve(); - }); - } - }, { - key: '_readFromStorage', - value: function _readFromStorage() { - return new Promise(function (resolve) { - var value = localStorage.getItem('pdfjs.history'); - if (!value) { - var databaseStr = localStorage.getItem('database'); - if (databaseStr) { - try { - var database = JSON.parse(databaseStr); - if (typeof database.files[0].fingerprint === 'string') { - localStorage.setItem('pdfjs.history', databaseStr); - localStorage.removeItem('database'); - value = databaseStr; - } - } catch (ex) {} - } - } - resolve(value); - }); - } - }, { - key: 'set', - value: function set(name, val) { - var _this3 = this; - - return this._initializedPromise.then(function () { - _this3.file[name] = val; - return _this3._writeToStorage(); - }); - } - }, { - key: 'setMultiple', - value: function setMultiple(properties) { - var _this4 = this; - - return this._initializedPromise.then(function () { - for (var name in properties) { - _this4.file[name] = properties[name]; - } - return _this4._writeToStorage(); - }); - } - }, { - key: 'get', - value: function get(name, defaultValue) { - var _this5 = this; - - return this._initializedPromise.then(function () { - var val = _this5.file[name]; - return val !== undefined ? val : defaultValue; - }); - } - }, { - key: 'getMultiple', - value: function getMultiple(properties) { - var _this6 = this; - - return this._initializedPromise.then(function () { - var values = Object.create(null); - for (var name in properties) { - var val = _this6.file[name]; - values[name] = val !== undefined ? val : properties[name]; - } - return values; - }); - } - }]); - - return ViewHistory; -}(); - -exports.ViewHistory = ViewHistory; - -/***/ }), -/* 33 */ -/***/ (function(module, exports, __webpack_require__) { - -"use strict"; - - -var DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf'; -; -var pdfjsWebApp = void 0; -{ - pdfjsWebApp = __webpack_require__(4); -} -; -{ - __webpack_require__(8); -} -; -{ - __webpack_require__(9); -} -function getViewerConfiguration() { - return { - appContainer: document.body, - mainContainer: document.getElementById('viewerContainer'), - viewerContainer: document.getElementById('viewer'), - eventBus: null, - toolbar: { - container: document.getElementById('toolbarViewer'), - numPages: document.getElementById('numPages'), - pageNumber: document.getElementById('pageNumber'), - scaleSelectContainer: document.getElementById('scaleSelectContainer'), - scaleSelect: document.getElementById('scaleSelect'), - customScaleOption: document.getElementById('customScaleOption'), - previous: document.getElementById('previous'), - next: document.getElementById('next'), - zoomIn: document.getElementById('zoomIn'), - zoomOut: document.getElementById('zoomOut'), - viewFind: document.getElementById('viewFind'), - openFile: document.getElementById('openFile'), - print: document.getElementById('print'), - presentationModeButton: document.getElementById('presentationMode'), - download: document.getElementById('download'), - viewBookmark: document.getElementById('viewBookmark') - }, - secondaryToolbar: { - toolbar: document.getElementById('secondaryToolbar'), - toggleButton: document.getElementById('secondaryToolbarToggle'), - toolbarButtonContainer: document.getElementById('secondaryToolbarButtonContainer'), - presentationModeButton: document.getElementById('secondaryPresentationMode'), - openFileButton: document.getElementById('secondaryOpenFile'), - printButton: document.getElementById('secondaryPrint'), - downloadButton: document.getElementById('secondaryDownload'), - viewBookmarkButton: document.getElementById('secondaryViewBookmark'), - firstPageButton: document.getElementById('firstPage'), - lastPageButton: document.getElementById('lastPage'), - pageRotateCwButton: document.getElementById('pageRotateCw'), - pageRotateCcwButton: document.getElementById('pageRotateCcw'), - cursorSelectToolButton: document.getElementById('cursorSelectTool'), - cursorHandToolButton: document.getElementById('cursorHandTool'), - documentPropertiesButton: document.getElementById('documentProperties') - }, - fullscreen: { - contextFirstPage: document.getElementById('contextFirstPage'), - contextLastPage: document.getElementById('contextLastPage'), - contextPageRotateCw: document.getElementById('contextPageRotateCw'), - contextPageRotateCcw: document.getElementById('contextPageRotateCcw') - }, - sidebar: { - mainContainer: document.getElementById('mainContainer'), - outerContainer: document.getElementById('outerContainer'), - toggleButton: document.getElementById('sidebarToggle'), - thumbnailButton: document.getElementById('viewThumbnail'), - outlineButton: document.getElementById('viewOutline'), - attachmentsButton: document.getElementById('viewAttachments'), - thumbnailView: document.getElementById('thumbnailView'), - outlineView: document.getElementById('outlineView'), - attachmentsView: document.getElementById('attachmentsView') - }, - findBar: { - bar: document.getElementById('findbar'), - toggleButton: document.getElementById('viewFind'), - findField: document.getElementById('findInput'), - highlightAllCheckbox: document.getElementById('findHighlightAll'), - caseSensitiveCheckbox: document.getElementById('findMatchCase'), - findMsg: document.getElementById('findMsg'), - findResultsCount: document.getElementById('findResultsCount'), - findStatusIcon: document.getElementById('findStatusIcon'), - findPreviousButton: document.getElementById('findPrevious'), - findNextButton: document.getElementById('findNext') - }, - passwordOverlay: { - overlayName: 'passwordOverlay', - container: document.getElementById('passwordOverlay'), - label: document.getElementById('passwordText'), - input: document.getElementById('password'), - submitButton: document.getElementById('passwordSubmit'), - cancelButton: document.getElementById('passwordCancel') - }, - documentProperties: { - overlayName: 'documentPropertiesOverlay', - container: document.getElementById('documentPropertiesOverlay'), - closeButton: document.getElementById('documentPropertiesClose'), - fields: { - 'fileName': document.getElementById('fileNameField'), - 'fileSize': document.getElementById('fileSizeField'), - 'title': document.getElementById('titleField'), - 'author': document.getElementById('authorField'), - 'subject': document.getElementById('subjectField'), - 'keywords': document.getElementById('keywordsField'), - 'creationDate': document.getElementById('creationDateField'), - 'modificationDate': document.getElementById('modificationDateField'), - 'creator': document.getElementById('creatorField'), - 'producer': document.getElementById('producerField'), - 'version': document.getElementById('versionField'), - 'pageCount': document.getElementById('pageCountField') - } - }, - errorWrapper: { - container: document.getElementById('errorWrapper'), - errorMessage: document.getElementById('errorMessage'), - closeButton: document.getElementById('errorClose'), - errorMoreInfo: document.getElementById('errorMoreInfo'), - moreInfoButton: document.getElementById('errorShowMore'), - lessInfoButton: document.getElementById('errorShowLess') - }, - printContainer: document.getElementById('printContainer'), - openFileInputName: 'fileInput', - debuggerScriptPath: './debugger.js', - defaultUrl: DEFAULT_URL - }; -} -function webViewerLoad() { - var config = getViewerConfiguration(); - window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication; - pdfjsWebApp.PDFViewerApplication.run(config); -} -if (document.readyState === 'interactive' || document.readyState === 'complete') { - webViewerLoad(); -} else { - document.addEventListener('DOMContentLoaded', webViewerLoad, true); -} - -/***/ }) -/******/ ]); -//# sourceMappingURL=viewer.js.map \ No newline at end of file diff --git a/example/include/pdf/web/viewer.js.map b/example/include/pdf/web/viewer.js.map deleted file mode 100644 index 018b089..0000000 --- a/example/include/pdf/web/viewer.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"sources":["webpack:///webpack/bootstrap 67a151ebb5e544e5a40d","webpack:///web/ui_utils.js","webpack:///web/pdfjs.js","webpack:///web/dom_events.js","webpack:///web/pdf_rendering_queue.js","webpack:///web/app.js","webpack:///web/pdf_link_service.js","webpack:///web/pdf_cursor_tools.js","webpack:///web/pdf_find_controller.js","webpack:///web/genericcom.js","webpack:///web/pdf_print_service.js","webpack:///external/webL10n/l10n.js","webpack:///web/annotation_layer_builder.js","webpack:///web/download_manager.js","webpack:///web/genericl10n.js","webpack:///web/grab_to_pan.js","webpack:///web/overlay_manager.js","webpack:///web/password_prompt.js","webpack:///web/pdf_attachment_viewer.js","webpack:///web/pdf_document_properties.js","webpack:///web/pdf_find_bar.js","webpack:///web/pdf_history.js","webpack:///web/pdf_outline_viewer.js","webpack:///web/pdf_page_view.js","webpack:///web/pdf_presentation_mode.js","webpack:///web/pdf_sidebar.js","webpack:///web/pdf_thumbnail_view.js","webpack:///web/pdf_thumbnail_viewer.js","webpack:///web/pdf_viewer.js","webpack:///web/preferences.js","webpack:///web/secondary_toolbar.js","webpack:///web/text_layer_builder.js","webpack:///web/toolbar.js","webpack:///web/view_history.js","webpack:///web/viewer.js"],"names":[],"mappings":"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QoB;AAgVxD,WAAS,QAAQ;AACf,gBAAY;AACZ,gBAAY;AACZ,gBAAY;AAnV0C;AAyWxD,WAAS,eAAe,MAAM;AAC5B,QAAI;AACF,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,aAAO;AACP,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,aAAO;AACP,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,aAAO;AACP,aAAO;AACP,aAAO;AACP,aAAO;AACP,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,aAAO;AACP,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,YAAM;AACN,aAAO;AACP,YAAM;AACN,aAAO;AACP,YAAM;AACN,YAAM;AACN,YAAM;AACN,a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","file":"viewer.js","sourcesContent":[" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// identity function for calling harmony imports with the correct context\n \t__webpack_require__.i = function(value) { return value; };\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 33);\n\n\n\n// WEBPACK FOOTER //\n// webpack/bootstrap 67a151ebb5e544e5a40d","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { PDFJS } from 'pdfjs-lib';\n\nconst CSS_UNITS = 96.0 / 72.0;\nconst DEFAULT_SCALE_VALUE = 'auto';\nconst DEFAULT_SCALE = 1.0;\nconst MIN_SCALE = 0.25;\nconst MAX_SCALE = 10.0;\nconst UNKNOWN_SCALE = 0;\nconst MAX_AUTO_SCALE = 1.25;\nconst SCROLLBAR_PADDING = 40;\nconst VERTICAL_PADDING = 5;\n\nconst RendererType = {\n CANVAS: 'canvas',\n SVG: 'svg',\n};\n\n// Replaces {{arguments}} with their values.\nfunction formatL10nValue(text, args) {\n if (!args) {\n return text;\n }\n return text.replace(/\\{\\{\\s*(\\w+)\\s*\\}\\}/g, (all, name) => {\n return (name in args ? args[name] : '{{' + name + '}}');\n });\n}\n\n/**\n * No-op implemetation of the localization service.\n * @implements {IL10n}\n */\nlet NullL10n = {\n get(property, args, fallback) {\n return Promise.resolve(formatL10nValue(fallback, args));\n },\n\n translate(element) {\n return Promise.resolve();\n },\n};\n\n/**\n * Disables fullscreen support, and by extension Presentation Mode,\n * in browsers which support the fullscreen API.\n * @var {boolean}\n */\nPDFJS.disableFullscreen = (PDFJS.disableFullscreen === undefined ?\n false : PDFJS.disableFullscreen);\n\n/**\n * Enables CSS only zooming.\n * @var {boolean}\n */\nPDFJS.useOnlyCssZoom = (PDFJS.useOnlyCssZoom === undefined ?\n false : PDFJS.useOnlyCssZoom);\n\n/**\n * The maximum supported canvas size in total pixels e.g. width * height.\n * The default value is 4096 * 4096. Use -1 for no limit.\n * @var {number}\n */\nPDFJS.maxCanvasPixels = (PDFJS.maxCanvasPixels === undefined ?\n 16777216 : PDFJS.maxCanvasPixels);\n\n/**\n * Disables saving of the last position of the viewed PDF.\n * @var {boolean}\n */\nPDFJS.disableHistory = (PDFJS.disableHistory === undefined ?\n false : PDFJS.disableHistory);\n\n/**\n * Disables creation of the text layer that used for text selection and search.\n * @var {boolean}\n */\nPDFJS.disableTextLayer = (PDFJS.disableTextLayer === undefined ?\n false : PDFJS.disableTextLayer);\n\n/**\n * Disables maintaining the current position in the document when zooming.\n */\nPDFJS.ignoreCurrentPositionOnZoom = (PDFJS.ignoreCurrentPositionOnZoom ===\n undefined ? false : PDFJS.ignoreCurrentPositionOnZoom);\n\nif (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n /**\n * Interface locale settings.\n * @var {string}\n */\n PDFJS.locale =\n (PDFJS.locale === undefined && typeof navigator !== 'undefined' ?\n navigator.language : PDFJS.locale);\n}\n\n/**\n * Returns scale factor for the canvas. It makes sense for the HiDPI displays.\n * @return {Object} The object with horizontal (sx) and vertical (sy)\n scales. The scaled property is set to false if scaling is\n not required, true otherwise.\n */\nfunction getOutputScale(ctx) {\n let devicePixelRatio = window.devicePixelRatio || 1;\n let backingStoreRatio = ctx.webkitBackingStorePixelRatio ||\n ctx.mozBackingStorePixelRatio ||\n ctx.msBackingStorePixelRatio ||\n ctx.oBackingStorePixelRatio ||\n ctx.backingStorePixelRatio || 1;\n let pixelRatio = devicePixelRatio / backingStoreRatio;\n return {\n sx: pixelRatio,\n sy: pixelRatio,\n scaled: pixelRatio !== 1,\n };\n}\n\n/**\n * Scrolls specified element into view of its parent.\n * @param {Object} element - The element to be visible.\n * @param {Object} spot - An object with optional top and left properties,\n * specifying the offset from the top left edge.\n * @param {boolean} skipOverflowHiddenElements - Ignore elements that have\n * the CSS rule `overflow: hidden;` set. The default is false.\n */\nfunction scrollIntoView(element, spot, skipOverflowHiddenElements = false) {\n // Assuming offsetParent is available (it's not available when viewer is in\n // hidden iframe or object). We have to scroll: if the offsetParent is not set\n // producing the error. See also animationStarted.\n let parent = element.offsetParent;\n if (!parent) {\n console.error('offsetParent is not set -- cannot scroll');\n return;\n }\n let offsetY = element.offsetTop + element.clientTop;\n let offsetX = element.offsetLeft + element.clientLeft;\n while (parent.clientHeight === parent.scrollHeight ||\n (skipOverflowHiddenElements &&\n getComputedStyle(parent).overflow === 'hidden')) {\n if (parent.dataset._scaleY) {\n offsetY /= parent.dataset._scaleY;\n offsetX /= parent.dataset._scaleX;\n }\n offsetY += parent.offsetTop;\n offsetX += parent.offsetLeft;\n parent = parent.offsetParent;\n if (!parent) {\n return; // no need to scroll\n }\n }\n if (spot) {\n if (spot.top !== undefined) {\n offsetY += spot.top;\n }\n if (spot.left !== undefined) {\n offsetX += spot.left;\n parent.scrollLeft = offsetX;\n }\n }\n parent.scrollTop = offsetY;\n}\n\n/**\n * Helper function to start monitoring the scroll event and converting them into\n * PDF.js friendly one: with scroll debounce and scroll direction.\n */\nfunction watchScroll(viewAreaElement, callback) {\n let debounceScroll = function(evt) {\n if (rAF) {\n return;\n }\n // schedule an invocation of scroll for next animation frame.\n rAF = window.requestAnimationFrame(function viewAreaElementScrolled() {\n rAF = null;\n\n let currentY = viewAreaElement.scrollTop;\n let lastY = state.lastY;\n if (currentY !== lastY) {\n state.down = currentY > lastY;\n }\n state.lastY = currentY;\n callback(state);\n });\n };\n\n let state = {\n down: true,\n lastY: viewAreaElement.scrollTop,\n _eventHandler: debounceScroll,\n };\n\n let rAF = null;\n viewAreaElement.addEventListener('scroll', debounceScroll, true);\n return state;\n}\n\n/**\n * Helper function to parse query string (e.g. ?param1=value&parm2=...).\n */\nfunction parseQueryString(query) {\n let parts = query.split('&');\n let params = Object.create(null);\n for (let i = 0, ii = parts.length; i < ii; ++i) {\n let param = parts[i].split('=');\n let key = param[0].toLowerCase();\n let value = param.length > 1 ? param[1] : null;\n params[decodeURIComponent(key)] = decodeURIComponent(value);\n }\n return params;\n}\n\n/**\n * Use binary search to find the index of the first item in a given array which\n * passes a given condition. The items are expected to be sorted in the sense\n * that if the condition is true for one item in the array, then it is also true\n * for all following items.\n *\n * @returns {Number} Index of the first array element to pass the test,\n * or |items.length| if no such element exists.\n */\nfunction binarySearchFirstItem(items, condition) {\n let minIndex = 0;\n let maxIndex = items.length - 1;\n\n if (items.length === 0 || !condition(items[maxIndex])) {\n return items.length;\n }\n if (condition(items[minIndex])) {\n return minIndex;\n }\n\n while (minIndex < maxIndex) {\n let currentIndex = (minIndex + maxIndex) >> 1;\n let currentItem = items[currentIndex];\n if (condition(currentItem)) {\n maxIndex = currentIndex;\n } else {\n minIndex = currentIndex + 1;\n }\n }\n return minIndex; /* === maxIndex */\n}\n\n/**\n * Approximates float number as a fraction using Farey sequence (max order\n * of 8).\n * @param {number} x - Positive float number.\n * @returns {Array} Estimated fraction: the first array item is a numerator,\n * the second one is a denominator.\n */\nfunction approximateFraction(x) {\n // Fast paths for int numbers or their inversions.\n if (Math.floor(x) === x) {\n return [x, 1];\n }\n let xinv = 1 / x;\n let limit = 8;\n if (xinv > limit) {\n return [1, limit];\n } else if (Math.floor(xinv) === xinv) {\n return [1, xinv];\n }\n\n let x_ = x > 1 ? xinv : x;\n // a/b and c/d are neighbours in Farey sequence.\n let a = 0, b = 1, c = 1, d = 1;\n // Limiting search to order 8.\n while (true) {\n // Generating next term in sequence (order of q).\n let p = a + c, q = b + d;\n if (q > limit) {\n break;\n }\n if (x_ <= p / q) {\n c = p; d = q;\n } else {\n a = p; b = q;\n }\n }\n let result;\n // Select closest of the neighbours to x.\n if (x_ - a / b < c / d - x_) {\n result = x_ === x ? [a, b] : [b, a];\n } else {\n result = x_ === x ? [c, d] : [d, c];\n }\n return result;\n}\n\nfunction roundToDivide(x, div) {\n let r = x % div;\n return r === 0 ? x : Math.round(x - r + div);\n}\n\n/**\n * Generic helper to find out what elements are visible within a scroll pane.\n */\nfunction getVisibleElements(scrollEl, views, sortByVisibility = false) {\n let top = scrollEl.scrollTop, bottom = top + scrollEl.clientHeight;\n let left = scrollEl.scrollLeft, right = left + scrollEl.clientWidth;\n\n function isElementBottomBelowViewTop(view) {\n let element = view.div;\n let elementBottom =\n element.offsetTop + element.clientTop + element.clientHeight;\n return elementBottom > top;\n }\n\n let visible = [], view, element;\n let currentHeight, viewHeight, hiddenHeight, percentHeight;\n let currentWidth, viewWidth;\n let firstVisibleElementInd = views.length === 0 ? 0 :\n binarySearchFirstItem(views, isElementBottomBelowViewTop);\n\n for (let i = firstVisibleElementInd, ii = views.length; i < ii; i++) {\n view = views[i];\n element = view.div;\n currentHeight = element.offsetTop + element.clientTop;\n viewHeight = element.clientHeight;\n\n if (currentHeight > bottom) {\n break;\n }\n\n currentWidth = element.offsetLeft + element.clientLeft;\n viewWidth = element.clientWidth;\n if (currentWidth + viewWidth < left || currentWidth > right) {\n continue;\n }\n hiddenHeight = Math.max(0, top - currentHeight) +\n Math.max(0, currentHeight + viewHeight - bottom);\n percentHeight = ((viewHeight - hiddenHeight) * 100 / viewHeight) | 0;\n\n visible.push({\n id: view.id,\n x: currentWidth,\n y: currentHeight,\n view,\n percent: percentHeight,\n });\n }\n\n let first = visible[0];\n let last = visible[visible.length - 1];\n\n if (sortByVisibility) {\n visible.sort(function(a, b) {\n let pc = a.percent - b.percent;\n if (Math.abs(pc) > 0.001) {\n return -pc;\n }\n return a.id - b.id; // ensure stability\n });\n }\n return { first, last, views: visible, };\n}\n\n/**\n * Event handler to suppress context menu.\n */\nfunction noContextMenuHandler(evt) {\n evt.preventDefault();\n}\n\nfunction isDataSchema(url) {\n let i = 0, ii = url.length;\n while (i < ii && url[i].trim() === '') {\n i++;\n }\n return url.substr(i, 5).toLowerCase() === 'data:';\n}\n\n/**\n * Returns the filename or guessed filename from the url (see issue 3455).\n * @param {string} url - The original PDF location.\n * @param {string} defaultFilename - The value returned if the filename is\n * unknown, or the protocol is unsupported.\n * @returns {string} Guessed PDF filename.\n */\nfunction getPDFFileNameFromURL(url, defaultFilename = 'document.pdf') {\n if (isDataSchema(url)) {\n console.warn('getPDFFileNameFromURL: ' +\n 'ignoring \"data:\" URL for performance reasons.');\n return defaultFilename;\n }\n const reURI = /^(?:(?:[^:]+:)?\\/\\/[^\\/]+)?([^?#]*)(\\?[^#]*)?(#.*)?$/;\n // SCHEME HOST 1.PATH 2.QUERY 3.REF\n // Pattern to get last matching NAME.pdf\n const reFilename = /[^\\/?#=]+\\.pdf\\b(?!.*\\.pdf\\b)/i;\n let splitURI = reURI.exec(url);\n let suggestedFilename = reFilename.exec(splitURI[1]) ||\n reFilename.exec(splitURI[2]) ||\n reFilename.exec(splitURI[3]);\n if (suggestedFilename) {\n suggestedFilename = suggestedFilename[0];\n if (suggestedFilename.indexOf('%') !== -1) {\n // URL-encoded %2Fpath%2Fto%2Ffile.pdf should be file.pdf\n try {\n suggestedFilename =\n reFilename.exec(decodeURIComponent(suggestedFilename))[0];\n } catch (ex) { // Possible (extremely rare) errors:\n // URIError \"Malformed URI\", e.g. for \"%AA.pdf\"\n // TypeError \"null has no properties\", e.g. for \"%2F.pdf\"\n }\n }\n }\n return suggestedFilename || defaultFilename;\n}\n\nfunction normalizeWheelEventDelta(evt) {\n let delta = Math.sqrt(evt.deltaX * evt.deltaX + evt.deltaY * evt.deltaY);\n let angle = Math.atan2(evt.deltaY, evt.deltaX);\n if (-0.25 * Math.PI < angle && angle < 0.75 * Math.PI) {\n // All that is left-up oriented has to change the sign.\n delta = -delta;\n }\n\n const MOUSE_DOM_DELTA_PIXEL_MODE = 0;\n const MOUSE_DOM_DELTA_LINE_MODE = 1;\n const MOUSE_PIXELS_PER_LINE = 30;\n const MOUSE_LINES_PER_PAGE = 30;\n\n // Converts delta to per-page units\n if (evt.deltaMode === MOUSE_DOM_DELTA_PIXEL_MODE) {\n delta /= MOUSE_PIXELS_PER_LINE * MOUSE_LINES_PER_PAGE;\n } else if (evt.deltaMode === MOUSE_DOM_DELTA_LINE_MODE) {\n delta /= MOUSE_LINES_PER_PAGE;\n }\n return delta;\n}\n\nfunction cloneObj(obj) {\n let result = Object.create(null);\n for (let i in obj) {\n if (Object.prototype.hasOwnProperty.call(obj, i)) {\n result[i] = obj[i];\n }\n }\n return result;\n}\n\n/**\n * Promise that is resolved when DOM window becomes visible.\n */\nlet animationStarted = new Promise(function (resolve) {\n window.requestAnimationFrame(resolve);\n});\n\n/**\n * (deprecated) External localization service.\n */\nlet mozL10n;\n\n/**\n * (deprecated) Promise that is resolved when UI localization is finished.\n */\nlet localized = Promise.resolve();\n\n/**\n * Simple event bus for an application. Listeners are attached using the\n * `on` and `off` methods. To raise an event, the `dispatch` method shall be\n * used.\n */\nclass EventBus {\n constructor() {\n this._listeners = Object.create(null);\n }\n\n on(eventName, listener) {\n let eventListeners = this._listeners[eventName];\n if (!eventListeners) {\n eventListeners = [];\n this._listeners[eventName] = eventListeners;\n }\n eventListeners.push(listener);\n }\n\n off(eventName, listener) {\n let eventListeners = this._listeners[eventName];\n let i;\n if (!eventListeners || ((i = eventListeners.indexOf(listener)) < 0)) {\n return;\n }\n eventListeners.splice(i, 1);\n }\n\n dispatch(eventName) {\n let eventListeners = this._listeners[eventName];\n if (!eventListeners || eventListeners.length === 0) {\n return;\n }\n // Passing all arguments after the eventName to the listeners.\n let args = Array.prototype.slice.call(arguments, 1);\n // Making copy of the listeners array in case if it will be modified\n // during dispatch.\n eventListeners.slice(0).forEach(function (listener) {\n listener.apply(null, args);\n });\n }\n}\n\nfunction clamp(v, min, max) {\n return Math.min(Math.max(v, min), max);\n}\n\nclass ProgressBar {\n constructor(id, { height, width, units, } = {}) {\n this.visible = true;\n\n // Fetch the sub-elements for later.\n this.div = document.querySelector(id + ' .progress');\n // Get the loading bar element, so it can be resized to fit the viewer.\n this.bar = this.div.parentNode;\n\n // Get options, with sensible defaults.\n this.height = height || 100;\n this.width = width || 100;\n this.units = units || '%';\n\n // Initialize heights.\n this.div.style.height = this.height + this.units;\n this.percent = 0;\n }\n\n _updateBar() {\n if (this._indeterminate) {\n this.div.classList.add('indeterminate');\n this.div.style.width = this.width + this.units;\n return;\n }\n\n this.div.classList.remove('indeterminate');\n let progressSize = this.width * this._percent / 100;\n this.div.style.width = progressSize + this.units;\n }\n\n get percent() {\n return this._percent;\n }\n\n set percent(val) {\n this._indeterminate = isNaN(val);\n this._percent = clamp(val, 0, 100);\n this._updateBar();\n }\n\n setWidth(viewer) {\n if (!viewer) {\n return;\n }\n let container = viewer.parentNode;\n let scrollbarWidth = container.offsetWidth - viewer.offsetWidth;\n if (scrollbarWidth > 0) {\n this.bar.setAttribute('style', 'width: calc(100% - ' +\n scrollbarWidth + 'px);');\n }\n }\n\n hide() {\n if (!this.visible) {\n return;\n }\n this.visible = false;\n this.bar.classList.add('hidden');\n document.body.classList.remove('loadingInProgress');\n }\n\n show() {\n if (this.visible) {\n return;\n }\n this.visible = true;\n document.body.classList.add('loadingInProgress');\n this.bar.classList.remove('hidden');\n }\n}\n\nexport {\n CSS_UNITS,\n DEFAULT_SCALE_VALUE,\n DEFAULT_SCALE,\n MIN_SCALE,\n MAX_SCALE,\n UNKNOWN_SCALE,\n MAX_AUTO_SCALE,\n SCROLLBAR_PADDING,\n VERTICAL_PADDING,\n cloneObj,\n RendererType,\n mozL10n,\n NullL10n,\n EventBus,\n ProgressBar,\n getPDFFileNameFromURL,\n noContextMenuHandler,\n parseQueryString,\n getVisibleElements,\n roundToDivide,\n approximateFraction,\n getOutputScale,\n scrollIntoView,\n watchScroll,\n binarySearchFirstItem,\n normalizeWheelEventDelta,\n animationStarted,\n localized,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/ui_utils.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals module, __non_webpack_require__ */\n\n'use strict';\n\nvar pdfjsLib;\nif (typeof window !== 'undefined' && window['pdfjs-dist/build/pdf']) {\n pdfjsLib = window['pdfjs-dist/build/pdf'];\n} else {\n pdfjsLib = __non_webpack_require__('../build/pdf.js');\n}\nmodule.exports = pdfjsLib;\n\n\n\n// WEBPACK FOOTER //\n// web/pdfjs.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { EventBus } from './ui_utils';\n\n// Attaching to the application event bus to dispatch events to the DOM for\n// backwards viewer API compatibility.\nfunction attachDOMEventsToEventBus(eventBus) {\n eventBus.on('documentload', function() {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('documentload', true, true, {});\n window.dispatchEvent(event);\n });\n eventBus.on('pagerendered', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagerendered', true, true, {\n pageNumber: evt.pageNumber,\n cssTransform: evt.cssTransform,\n });\n evt.source.div.dispatchEvent(event);\n });\n eventBus.on('textlayerrendered', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('textlayerrendered', true, true, {\n pageNumber: evt.pageNumber,\n });\n evt.source.textLayerDiv.dispatchEvent(event);\n });\n eventBus.on('pagechange', function(evt) {\n let event = document.createEvent('UIEvents');\n event.initUIEvent('pagechange', true, true, window, 0);\n event.pageNumber = evt.pageNumber;\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('pagesinit', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagesinit', true, true, null);\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('pagesloaded', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagesloaded', true, true, {\n pagesCount: evt.pagesCount,\n });\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('scalechange', function(evt) {\n let event = document.createEvent('UIEvents');\n event.initUIEvent('scalechange', true, true, window, 0);\n event.scale = evt.scale;\n event.presetValue = evt.presetValue;\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('updateviewarea', function(evt) {\n let event = document.createEvent('UIEvents');\n event.initUIEvent('updateviewarea', true, true, window, 0);\n event.location = evt.location;\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('find', function(evt) {\n if (evt.source === window) {\n return; // event comes from FirefoxCom, no need to replicate\n }\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('find' + evt.type, true, true, {\n query: evt.query,\n phraseSearch: evt.phraseSearch,\n caseSensitive: evt.caseSensitive,\n highlightAll: evt.highlightAll,\n findPrevious: evt.findPrevious,\n });\n window.dispatchEvent(event);\n });\n eventBus.on('attachmentsloaded', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('attachmentsloaded', true, true, {\n attachmentsCount: evt.attachmentsCount,\n });\n evt.source.container.dispatchEvent(event);\n });\n eventBus.on('sidebarviewchanged', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('sidebarviewchanged', true, true, {\n view: evt.view,\n });\n evt.source.outerContainer.dispatchEvent(event);\n });\n eventBus.on('pagemode', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('pagemode', true, true, {\n mode: evt.mode,\n });\n evt.source.pdfViewer.container.dispatchEvent(event);\n });\n eventBus.on('namedaction', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('namedaction', true, true, {\n action: evt.action,\n });\n evt.source.pdfViewer.container.dispatchEvent(event);\n });\n eventBus.on('presentationmodechanged', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('presentationmodechanged', true, true, {\n active: evt.active,\n switchInProgress: evt.switchInProgress,\n });\n window.dispatchEvent(event);\n });\n eventBus.on('outlineloaded', function(evt) {\n let event = document.createEvent('CustomEvent');\n event.initCustomEvent('outlineloaded', true, true, {\n outlineCount: evt.outlineCount,\n });\n evt.source.container.dispatchEvent(event);\n });\n}\n\nlet globalEventBus = null;\nfunction getGlobalEventBus() {\n if (globalEventBus) {\n return globalEventBus;\n }\n globalEventBus = new EventBus();\n attachDOMEventsToEventBus(globalEventBus);\n return globalEventBus;\n}\n\nexport {\n attachDOMEventsToEventBus,\n getGlobalEventBus,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/dom_events.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst CLEANUP_TIMEOUT = 30000;\n\nconst RenderingStates = {\n INITIAL: 0,\n RUNNING: 1,\n PAUSED: 2,\n FINISHED: 3,\n};\n\n/**\n * Controls rendering of the views for pages and thumbnails.\n */\nclass PDFRenderingQueue {\n constructor() {\n this.pdfViewer = null;\n this.pdfThumbnailViewer = null;\n this.onIdle = null;\n this.highestPriorityPage = null;\n this.idleTimeout = null;\n this.printing = false;\n this.isThumbnailViewEnabled = false;\n }\n\n /**\n * @param {PDFViewer} pdfViewer\n */\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n /**\n * @param {PDFThumbnailViewer} pdfThumbnailViewer\n */\n setThumbnailViewer(pdfThumbnailViewer) {\n this.pdfThumbnailViewer = pdfThumbnailViewer;\n }\n\n /**\n * @param {IRenderableView} view\n * @returns {boolean}\n */\n isHighestPriority(view) {\n return this.highestPriorityPage === view.renderingId;\n }\n\n /**\n * @param {Object} currentlyVisiblePages\n */\n renderHighestPriority(currentlyVisiblePages) {\n if (this.idleTimeout) {\n clearTimeout(this.idleTimeout);\n this.idleTimeout = null;\n }\n\n // Pages have a higher priority than thumbnails, so check them first.\n if (this.pdfViewer.forceRendering(currentlyVisiblePages)) {\n return;\n }\n // No pages needed rendering, so check thumbnails.\n if (this.pdfThumbnailViewer && this.isThumbnailViewEnabled) {\n if (this.pdfThumbnailViewer.forceRendering()) {\n return;\n }\n }\n\n if (this.printing) {\n // If printing is currently ongoing do not reschedule cleanup.\n return;\n }\n\n if (this.onIdle) {\n this.idleTimeout = setTimeout(this.onIdle.bind(this), CLEANUP_TIMEOUT);\n }\n }\n\n /**\n * @param {Object} visible\n * @param {Array} views\n * @param {boolean} scrolledDown\n */\n getHighestPriority(visible, views, scrolledDown) {\n /**\n * The state has changed. Figure out which page has the highest priority to\n * render next (if any).\n *\n * Priority:\n * 1. visible pages\n * 2. if last scrolled down, the page after the visible pages, or\n * if last scrolled up, the page before the visible pages\n */\n var visibleViews = visible.views;\n\n var numVisible = visibleViews.length;\n if (numVisible === 0) {\n return false;\n }\n for (var i = 0; i < numVisible; ++i) {\n var view = visibleViews[i].view;\n if (!this.isViewFinished(view)) {\n return view;\n }\n }\n\n // All the visible views have rendered; try to render next/previous pages.\n if (scrolledDown) {\n var nextPageIndex = visible.last.id;\n // IDs start at 1, so no need to add 1.\n if (views[nextPageIndex] && !this.isViewFinished(views[nextPageIndex])) {\n return views[nextPageIndex];\n }\n } else {\n var previousPageIndex = visible.first.id - 2;\n if (views[previousPageIndex] &&\n !this.isViewFinished(views[previousPageIndex])) {\n return views[previousPageIndex];\n }\n }\n // Everything that needs to be rendered has been.\n return null;\n }\n\n /**\n * @param {IRenderableView} view\n * @returns {boolean}\n */\n isViewFinished(view) {\n return view.renderingState === RenderingStates.FINISHED;\n }\n\n /**\n * Render a page or thumbnail view. This calls the appropriate function\n * based on the views state. If the view is already rendered it will return\n * `false`.\n *\n * @param {IRenderableView} view\n */\n renderView(view) {\n switch (view.renderingState) {\n case RenderingStates.FINISHED:\n return false;\n case RenderingStates.PAUSED:\n this.highestPriorityPage = view.renderingId;\n view.resume();\n break;\n case RenderingStates.RUNNING:\n this.highestPriorityPage = view.renderingId;\n break;\n case RenderingStates.INITIAL:\n this.highestPriorityPage = view.renderingId;\n var continueRendering = () => {\n this.renderHighestPriority();\n };\n view.draw().then(continueRendering, continueRendering);\n break;\n }\n return true;\n }\n}\n\nexport {\n RenderingStates,\n PDFRenderingQueue,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_rendering_queue.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals PDFBug, Stats */\n\nimport {\n animationStarted, DEFAULT_SCALE_VALUE, getPDFFileNameFromURL, MAX_SCALE,\n MIN_SCALE, noContextMenuHandler, normalizeWheelEventDelta,\n parseQueryString, ProgressBar, RendererType, UNKNOWN_SCALE\n} from './ui_utils';\nimport {\n build, createBlob, getDocument, getFilenameFromUrl, InvalidPDFException,\n MissingPDFException, OPS, PDFJS, shadow, UnexpectedResponseException,\n UNSUPPORTED_FEATURES, version\n} from 'pdfjs-lib';\nimport { CursorTool, PDFCursorTools } from './pdf_cursor_tools';\nimport { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';\nimport { PDFSidebar, SidebarView } from './pdf_sidebar';\nimport { PDFViewer, PresentationModeState } from './pdf_viewer';\nimport { getGlobalEventBus } from './dom_events';\nimport { OverlayManager } from './overlay_manager';\nimport { PasswordPrompt } from './password_prompt';\nimport { PDFAttachmentViewer } from './pdf_attachment_viewer';\nimport { PDFDocumentProperties } from './pdf_document_properties';\nimport { PDFFindBar } from './pdf_find_bar';\nimport { PDFFindController } from './pdf_find_controller';\nimport { PDFHistory } from './pdf_history';\nimport { PDFLinkService } from './pdf_link_service';\nimport { PDFOutlineViewer } from './pdf_outline_viewer';\nimport { PDFPresentationMode } from './pdf_presentation_mode';\nimport { PDFThumbnailViewer } from './pdf_thumbnail_viewer';\nimport { SecondaryToolbar } from './secondary_toolbar';\nimport { Toolbar } from './toolbar';\nimport { ViewHistory } from './view_history';\n\nconst DEFAULT_SCALE_DELTA = 1.1;\nconst DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT = 5000;\n\nfunction configure(PDFJS) {\n PDFJS.imageResourcesPath = './images/';\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL || GENERIC || CHROME')) {\n PDFJS.workerSrc = '../build/pdf.worker.js';\n }\n if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {\n PDFJS.cMapUrl = '../external/bcmaps/';\n PDFJS.cMapPacked = true;\n PDFJS.workerSrc = '../src/worker_loader.js';\n PDFJS.pdfjsNext = true;\n } else {\n PDFJS.cMapUrl = '../web/cmaps/';\n PDFJS.cMapPacked = true;\n }\n}\n\nconst DefaultExternalServices = {\n updateFindControlState(data) {},\n initPassiveLoading(callbacks) {},\n fallback(data, callback) {},\n reportTelemetry(data) {},\n createDownloadManager() {\n throw new Error('Not implemented: createDownloadManager');\n },\n createPreferences() {\n throw new Error('Not implemented: createPreferences');\n },\n createL10n() {\n throw new Error('Not implemented: createL10n');\n },\n supportsIntegratedFind: false,\n supportsDocumentFonts: true,\n supportsDocumentColors: true,\n supportedMouseWheelZoomModifierKeys: {\n ctrlKey: true,\n metaKey: true,\n },\n};\n\nlet PDFViewerApplication = {\n initialBookmark: document.location.hash.substring(1),\n initialDestination: null,\n initialized: false,\n fellback: false,\n appConfig: null,\n pdfDocument: null,\n pdfLoadingTask: null,\n printService: null,\n /** @type {PDFViewer} */\n pdfViewer: null,\n /** @type {PDFThumbnailViewer} */\n pdfThumbnailViewer: null,\n /** @type {PDFRenderingQueue} */\n pdfRenderingQueue: null,\n /** @type {PDFPresentationMode} */\n pdfPresentationMode: null,\n /** @type {PDFDocumentProperties} */\n pdfDocumentProperties: null,\n /** @type {PDFLinkService} */\n pdfLinkService: null,\n /** @type {PDFHistory} */\n pdfHistory: null,\n /** @type {PDFSidebar} */\n pdfSidebar: null,\n /** @type {PDFOutlineViewer} */\n pdfOutlineViewer: null,\n /** @type {PDFAttachmentViewer} */\n pdfAttachmentViewer: null,\n /** @type {PDFCursorTools} */\n pdfCursorTools: null,\n /** @type {ViewHistory} */\n store: null,\n /** @type {DownloadManager} */\n downloadManager: null,\n /** @type {OverlayManager} */\n overlayManager: null,\n /** @type {Preferences} */\n preferences: null,\n /** @type {Toolbar} */\n toolbar: null,\n /** @type {SecondaryToolbar} */\n secondaryToolbar: null,\n /** @type {EventBus} */\n eventBus: null,\n /** @type {IL10n} */\n l10n: null,\n isInitialViewSet: false,\n downloadComplete: false,\n viewerPrefs: {\n sidebarViewOnLoad: SidebarView.NONE,\n pdfBugEnabled: false,\n showPreviousViewOnLoad: true,\n defaultZoomValue: '',\n disablePageMode: false,\n disablePageLabels: false,\n renderer: 'canvas',\n enhanceTextSelection: false,\n renderInteractiveForms: false,\n enablePrintAutoRotate: false,\n },\n isViewerEmbedded: (window.parent !== window),\n url: '',\n baseUrl: '',\n externalServices: DefaultExternalServices,\n _boundEvents: {},\n\n // Called once when the document is loaded.\n initialize(appConfig) {\n this.preferences = this.externalServices.createPreferences();\n\n configure(PDFJS);\n this.appConfig = appConfig;\n\n return this._readPreferences().then(() => {\n return this._initializeL10n();\n }).then(() => {\n return this._initializeViewerComponents();\n }).then(() => {\n // Bind the various event handlers *after* the viewer has been\n // initialized, to prevent errors if an event arrives too soon.\n this.bindEvents();\n this.bindWindowEvents();\n\n // We can start UI localization now.\n let appContainer = appConfig.appContainer || document.documentElement;\n this.l10n.translate(appContainer).then(() => {\n // Dispatch the 'localized' event on the `eventBus` once the viewer\n // has been fully initialized and translated.\n this.eventBus.dispatch('localized');\n });\n\n if (this.isViewerEmbedded && !PDFJS.isExternalLinkTargetSet()) {\n // Prevent external links from \"replacing\" the viewer,\n // when it's embedded in e.g. an iframe or an object.\n PDFJS.externalLinkTarget = PDFJS.LinkTarget.TOP;\n }\n\n this.initialized = true;\n });\n },\n\n /**\n * @private\n */\n _readPreferences() {\n let { preferences, viewerPrefs, } = this;\n\n return Promise.all([\n preferences.get('enableWebGL').then(function resolved(value) {\n PDFJS.disableWebGL = !value;\n }),\n preferences.get('sidebarViewOnLoad').then(function resolved(value) {\n viewerPrefs['sidebarViewOnLoad'] = value;\n }),\n preferences.get('pdfBugEnabled').then(function resolved(value) {\n viewerPrefs['pdfBugEnabled'] = value;\n }),\n preferences.get('showPreviousViewOnLoad').then(function resolved(value) {\n viewerPrefs['showPreviousViewOnLoad'] = value;\n }),\n preferences.get('defaultZoomValue').then(function resolved(value) {\n viewerPrefs['defaultZoomValue'] = value;\n }),\n preferences.get('enhanceTextSelection').then(function resolved(value) {\n viewerPrefs['enhanceTextSelection'] = value;\n }),\n preferences.get('disableTextLayer').then(function resolved(value) {\n if (PDFJS.disableTextLayer === true) {\n return;\n }\n PDFJS.disableTextLayer = value;\n }),\n preferences.get('disableRange').then(function resolved(value) {\n if (PDFJS.disableRange === true) {\n return;\n }\n PDFJS.disableRange = value;\n }),\n preferences.get('disableStream').then(function resolved(value) {\n if (PDFJS.disableStream === true) {\n return;\n }\n PDFJS.disableStream = value;\n }),\n preferences.get('disableAutoFetch').then(function resolved(value) {\n PDFJS.disableAutoFetch = value;\n }),\n preferences.get('disableFontFace').then(function resolved(value) {\n if (PDFJS.disableFontFace === true) {\n return;\n }\n PDFJS.disableFontFace = value;\n }),\n preferences.get('useOnlyCssZoom').then(function resolved(value) {\n PDFJS.useOnlyCssZoom = value;\n }),\n preferences.get('externalLinkTarget').then(function resolved(value) {\n if (PDFJS.isExternalLinkTargetSet()) {\n return;\n }\n PDFJS.externalLinkTarget = value;\n }),\n preferences.get('renderer').then(function resolved(value) {\n viewerPrefs['renderer'] = value;\n }),\n preferences.get('renderInteractiveForms').then(function resolved(value) {\n viewerPrefs['renderInteractiveForms'] = value;\n }),\n preferences.get('disablePageMode').then(function resolved(value) {\n viewerPrefs['disablePageMode'] = value;\n }),\n preferences.get('disablePageLabels').then(function resolved(value) {\n viewerPrefs['disablePageLabels'] = value;\n }),\n preferences.get('enablePrintAutoRotate').then(function resolved(value) {\n viewerPrefs['enablePrintAutoRotate'] = value;\n }),\n ]).catch(function(reason) { });\n },\n\n _initializeL10n() {\n // Locale can be changed only when special debugging flags is present in\n // the hash section of the URL, or development version of viewer is used.\n // It is not possible to change locale for Firefox extension builds.\n if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION') ||\n (!PDFJSDev.test('FIREFOX || MOZCENTRAL') &&\n this.viewerPrefs['pdfBugEnabled'])) {\n let hash = document.location.hash.substring(1);\n let hashParams = parseQueryString(hash);\n if ('locale' in hashParams) {\n PDFJS.locale = hashParams['locale'];\n }\n }\n this.l10n = this.externalServices.createL10n();\n return this.l10n.getDirection().then((dir) => {\n document.getElementsByTagName('html')[0].dir = dir;\n });\n },\n\n /**\n * @private\n */\n _initializeViewerComponents() {\n let appConfig = this.appConfig;\n\n return new Promise((resolve, reject) => {\n this.overlayManager = new OverlayManager();\n\n let eventBus = appConfig.eventBus || getGlobalEventBus();\n this.eventBus = eventBus;\n\n let pdfRenderingQueue = new PDFRenderingQueue();\n pdfRenderingQueue.onIdle = this.cleanup.bind(this);\n this.pdfRenderingQueue = pdfRenderingQueue;\n\n let pdfLinkService = new PDFLinkService({\n eventBus,\n });\n this.pdfLinkService = pdfLinkService;\n\n let downloadManager = this.externalServices.createDownloadManager();\n this.downloadManager = downloadManager;\n\n let container = appConfig.mainContainer;\n let viewer = appConfig.viewerContainer;\n this.pdfViewer = new PDFViewer({\n container,\n viewer,\n eventBus,\n renderingQueue: pdfRenderingQueue,\n linkService: pdfLinkService,\n downloadManager,\n renderer: this.viewerPrefs['renderer'],\n l10n: this.l10n,\n enhanceTextSelection: this.viewerPrefs['enhanceTextSelection'],\n renderInteractiveForms: this.viewerPrefs['renderInteractiveForms'],\n enablePrintAutoRotate: this.viewerPrefs['enablePrintAutoRotate'],\n });\n pdfRenderingQueue.setViewer(this.pdfViewer);\n pdfLinkService.setViewer(this.pdfViewer);\n\n let thumbnailContainer = appConfig.sidebar.thumbnailView;\n this.pdfThumbnailViewer = new PDFThumbnailViewer({\n container: thumbnailContainer,\n renderingQueue: pdfRenderingQueue,\n linkService: pdfLinkService,\n l10n: this.l10n,\n });\n pdfRenderingQueue.setThumbnailViewer(this.pdfThumbnailViewer);\n\n this.pdfHistory = new PDFHistory({\n linkService: pdfLinkService,\n eventBus,\n });\n pdfLinkService.setHistory(this.pdfHistory);\n\n this.findController = new PDFFindController({\n pdfViewer: this.pdfViewer,\n });\n this.findController.onUpdateResultsCount = (matchCount) => {\n if (this.supportsIntegratedFind) {\n return;\n }\n this.findBar.updateResultsCount(matchCount);\n };\n this.findController.onUpdateState = (state, previous, matchCount) => {\n if (this.supportsIntegratedFind) {\n this.externalServices.updateFindControlState({\n result: state,\n findPrevious: previous,\n });\n } else {\n this.findBar.updateUIState(state, previous, matchCount);\n }\n };\n\n this.pdfViewer.setFindController(this.findController);\n\n // TODO: improve `PDFFindBar` constructor parameter passing\n let findBarConfig = Object.create(appConfig.findBar);\n findBarConfig.findController = this.findController;\n findBarConfig.eventBus = eventBus;\n this.findBar = new PDFFindBar(findBarConfig, this.l10n);\n\n this.pdfDocumentProperties =\n new PDFDocumentProperties(appConfig.documentProperties,\n this.overlayManager, this.l10n);\n\n this.pdfCursorTools = new PDFCursorTools({\n container,\n eventBus,\n preferences: this.preferences,\n });\n\n this.toolbar = new Toolbar(appConfig.toolbar, container, eventBus,\n this.l10n);\n\n this.secondaryToolbar =\n new SecondaryToolbar(appConfig.secondaryToolbar, container, eventBus);\n\n if (this.supportsFullscreen) {\n this.pdfPresentationMode = new PDFPresentationMode({\n container,\n viewer,\n pdfViewer: this.pdfViewer,\n eventBus,\n contextMenuItems: appConfig.fullscreen,\n });\n }\n\n this.passwordPrompt = new PasswordPrompt(appConfig.passwordOverlay,\n this.overlayManager, this.l10n);\n\n this.pdfOutlineViewer = new PDFOutlineViewer({\n container: appConfig.sidebar.outlineView,\n eventBus,\n linkService: pdfLinkService,\n });\n\n this.pdfAttachmentViewer = new PDFAttachmentViewer({\n container: appConfig.sidebar.attachmentsView,\n eventBus,\n downloadManager,\n });\n\n // TODO: improve `PDFSidebar` constructor parameter passing\n let sidebarConfig = Object.create(appConfig.sidebar);\n sidebarConfig.pdfViewer = this.pdfViewer;\n sidebarConfig.pdfThumbnailViewer = this.pdfThumbnailViewer;\n sidebarConfig.pdfOutlineViewer = this.pdfOutlineViewer;\n sidebarConfig.eventBus = eventBus;\n this.pdfSidebar = new PDFSidebar(sidebarConfig, this.l10n);\n this.pdfSidebar.onToggled = this.forceRendering.bind(this);\n\n resolve(undefined);\n });\n },\n\n run(config) {\n this.initialize(config).then(webViewerInitialized);\n },\n\n zoomIn(ticks) {\n let newScale = this.pdfViewer.currentScale;\n do {\n newScale = (newScale * DEFAULT_SCALE_DELTA).toFixed(2);\n newScale = Math.ceil(newScale * 10) / 10;\n newScale = Math.min(MAX_SCALE, newScale);\n } while (--ticks > 0 && newScale < MAX_SCALE);\n this.pdfViewer.currentScaleValue = newScale;\n },\n\n zoomOut(ticks) {\n let newScale = this.pdfViewer.currentScale;\n do {\n newScale = (newScale / DEFAULT_SCALE_DELTA).toFixed(2);\n newScale = Math.floor(newScale * 10) / 10;\n newScale = Math.max(MIN_SCALE, newScale);\n } while (--ticks > 0 && newScale > MIN_SCALE);\n this.pdfViewer.currentScaleValue = newScale;\n },\n\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n },\n\n get pageRotation() {\n return this.pdfViewer.pagesRotation;\n },\n\n set page(val) {\n this.pdfViewer.currentPageNumber = val;\n },\n\n get page() {\n return this.pdfViewer.currentPageNumber;\n },\n\n get printing() {\n return !!this.printService;\n },\n\n get supportsPrinting() {\n return PDFPrintServiceFactory.instance.supportsPrinting;\n },\n\n get supportsFullscreen() {\n let support;\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('MOZCENTRAL')) {\n support = document.fullscreenEnabled === true ||\n document.mozFullScreenEnabled === true;\n } else {\n let doc = document.documentElement;\n support = !!(doc.requestFullscreen || doc.mozRequestFullScreen ||\n doc.webkitRequestFullScreen || doc.msRequestFullscreen);\n\n if (document.fullscreenEnabled === false ||\n document.mozFullScreenEnabled === false ||\n document.webkitFullscreenEnabled === false ||\n document.msFullscreenEnabled === false) {\n support = false;\n }\n }\n if (support && PDFJS.disableFullscreen === true) {\n support = false;\n }\n\n return shadow(this, 'supportsFullscreen', support);\n },\n\n get supportsIntegratedFind() {\n return this.externalServices.supportsIntegratedFind;\n },\n\n get supportsDocumentFonts() {\n return this.externalServices.supportsDocumentFonts;\n },\n\n get supportsDocumentColors() {\n return this.externalServices.supportsDocumentColors;\n },\n\n get loadingBar() {\n let bar = new ProgressBar('#loadingBar');\n return shadow(this, 'loadingBar', bar);\n },\n\n get supportedMouseWheelZoomModifierKeys() {\n return this.externalServices.supportedMouseWheelZoomModifierKeys;\n },\n\n initPassiveLoading() {\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {\n throw new Error('Not implemented: initPassiveLoading');\n }\n this.externalServices.initPassiveLoading({\n onOpenWithTransport(url, length, transport) {\n PDFViewerApplication.open(url, { range: transport, });\n\n if (length) {\n PDFViewerApplication.pdfDocumentProperties.setFileSize(length);\n }\n },\n onOpenWithData(data) {\n PDFViewerApplication.open(data);\n },\n onOpenWithURL(url, length, originalURL) {\n let file = url, args = null;\n if (length !== undefined) {\n args = { length, };\n }\n if (originalURL !== undefined) {\n file = { file: url, originalURL, };\n }\n PDFViewerApplication.open(file, args);\n },\n onError(err) {\n PDFViewerApplication.l10n.get('loading_error', null,\n 'An error occurred while loading the PDF.').then((msg) => {\n PDFViewerApplication.error(msg, err);\n });\n },\n onProgress(loaded, total) {\n PDFViewerApplication.progress(loaded / total);\n },\n });\n },\n\n setTitleUsingUrl(url) {\n this.url = url;\n this.baseUrl = url.split('#')[0];\n let title = getPDFFileNameFromURL(url, '');\n if (!title) {\n try {\n title = decodeURIComponent(getFilenameFromUrl(url)) || url;\n } catch (ex) {\n // decodeURIComponent may throw URIError,\n // fall back to using the unprocessed url in that case\n title = url;\n }\n }\n this.setTitle(title);\n },\n\n setTitle(title) {\n if (this.isViewerEmbedded) {\n // Embedded PDF viewers should not be changing their parent page's title.\n return;\n }\n document.title = title;\n },\n\n /**\n * Closes opened PDF document.\n * @returns {Promise} - Returns the promise, which is resolved when all\n * destruction is completed.\n */\n close() {\n let errorWrapper = this.appConfig.errorWrapper.container;\n errorWrapper.setAttribute('hidden', 'true');\n\n if (!this.pdfLoadingTask) {\n return Promise.resolve();\n }\n\n let promise = this.pdfLoadingTask.destroy();\n this.pdfLoadingTask = null;\n\n if (this.pdfDocument) {\n this.pdfDocument = null;\n\n this.pdfThumbnailViewer.setDocument(null);\n this.pdfViewer.setDocument(null);\n this.pdfLinkService.setDocument(null, null);\n this.pdfDocumentProperties.setDocument(null, null);\n }\n this.store = null;\n this.isInitialViewSet = false;\n this.downloadComplete = false;\n\n this.pdfSidebar.reset();\n this.pdfOutlineViewer.reset();\n this.pdfAttachmentViewer.reset();\n\n this.findController.reset();\n this.findBar.reset();\n this.toolbar.reset();\n this.secondaryToolbar.reset();\n\n if (typeof PDFBug !== 'undefined') {\n PDFBug.cleanup();\n }\n return promise;\n },\n\n /**\n * Opens PDF document specified by URL or array with additional arguments.\n * @param {string|TypedArray|ArrayBuffer} file - PDF location or binary data.\n * @param {Object} args - (optional) Additional arguments for the getDocument\n * call, e.g. HTTP headers ('httpHeaders') or\n * alternative data transport ('range').\n * @returns {Promise} - Returns the promise, which is resolved when document\n * is opened.\n */\n open(file, args) {\n if ((typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) &&\n (arguments.length > 2 || typeof args === 'number')) {\n return Promise.reject(\n new Error('Call of open() with obsolete signature.'));\n }\n if (this.pdfLoadingTask) {\n // We need to destroy already opened document.\n return this.close().then(() => {\n // Reload the preferences if a document was previously opened.\n this.preferences.reload();\n // ... and repeat the open() call.\n return this.open(file, args);\n });\n }\n\n let parameters = Object.create(null), scale;\n if (typeof file === 'string') { // URL\n this.setTitleUsingUrl(file);\n parameters.url = file;\n } else if (file && 'byteLength' in file) { // ArrayBuffer\n parameters.data = file;\n } else if (file.url && file.originalUrl) {\n this.setTitleUsingUrl(file.originalUrl);\n parameters.url = file.url;\n }\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {\n parameters.docBaseUrl = this.baseUrl;\n }\n\n if (args) {\n for (let prop in args) {\n parameters[prop] = args[prop];\n }\n\n if (args.scale) {\n scale = args.scale;\n }\n if (args.length) {\n this.pdfDocumentProperties.setFileSize(args.length);\n }\n }\n\n let loadingTask = getDocument(parameters);\n this.pdfLoadingTask = loadingTask;\n\n loadingTask.onPassword = (updateCallback, reason) => {\n this.passwordPrompt.setUpdateCallback(updateCallback, reason);\n this.passwordPrompt.open();\n };\n\n loadingTask.onProgress = ({ loaded, total, }) => {\n this.progress(loaded / total);\n };\n\n // Listen for unsupported features to trigger the fallback UI.\n loadingTask.onUnsupportedFeature = this.fallback.bind(this);\n\n return loadingTask.promise.then((pdfDocument) => {\n this.load(pdfDocument, scale);\n }, (exception) => {\n let message = exception && exception.message;\n let loadingErrorMessage;\n if (exception instanceof InvalidPDFException) {\n // change error message also for other builds\n loadingErrorMessage = this.l10n.get('invalid_file_error', null,\n 'Invalid or corrupted PDF file.');\n } else if (exception instanceof MissingPDFException) {\n // special message for missing PDF's\n loadingErrorMessage = this.l10n.get('missing_file_error', null,\n 'Missing PDF file.');\n } else if (exception instanceof UnexpectedResponseException) {\n loadingErrorMessage = this.l10n.get('unexpected_response_error', null,\n 'Unexpected server response.');\n } else {\n loadingErrorMessage = this.l10n.get('loading_error', null,\n 'An error occurred while loading the PDF.');\n }\n\n return loadingErrorMessage.then((msg) => {\n this.error(msg, { message, });\n throw new Error(msg);\n });\n });\n },\n\n download() {\n function downloadByUrl() {\n downloadManager.downloadUrl(url, filename);\n }\n\n let url = this.baseUrl;\n // Use this.url instead of this.baseUrl to perform filename detection based\n // on the reference fragment as ultimate fallback if needed.\n let filename = getPDFFileNameFromURL(this.url);\n let downloadManager = this.downloadManager;\n downloadManager.onerror = (err) => {\n // This error won't really be helpful because it's likely the\n // fallback won't work either (or is already open).\n this.error(`PDF failed to download: ${err}`);\n };\n\n // When the PDF document isn't ready, or the PDF file is still downloading,\n // simply download using the URL.\n if (!this.pdfDocument || !this.downloadComplete) {\n downloadByUrl();\n return;\n }\n\n this.pdfDocument.getData().then(function(data) {\n let blob = createBlob(data, 'application/pdf');\n downloadManager.download(blob, url, filename);\n }).catch(downloadByUrl); // Error occurred, try downloading with the URL.\n },\n\n fallback(featureId) {\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n // Only trigger the fallback once so we don't spam the user with messages\n // for one PDF.\n if (this.fellback) {\n return;\n }\n this.fellback = true;\n this.externalServices.fallback({\n featureId,\n url: this.baseUrl,\n }, function response(download) {\n if (!download) {\n return;\n }\n PDFViewerApplication.download();\n });\n }\n },\n\n /**\n * Show the error box.\n * @param {String} message A message that is human readable.\n * @param {Object} moreInfo (optional) Further information about the error\n * that is more technical. Should have a 'message'\n * and optionally a 'stack' property.\n */\n error(message, moreInfo) {\n let moreInfoText = [this.l10n.get('error_version_info',\n { version: version || '?', build: build || '?', },\n 'PDF.js v{{version}} (build: {{build}})')];\n if (moreInfo) {\n moreInfoText.push(\n this.l10n.get('error_message', { message: moreInfo.message, },\n 'Message: {{message}}'));\n if (moreInfo.stack) {\n moreInfoText.push(\n this.l10n.get('error_stack', { stack: moreInfo.stack, },\n 'Stack: {{stack}}'));\n } else {\n if (moreInfo.filename) {\n moreInfoText.push(\n this.l10n.get('error_file', { file: moreInfo.filename, },\n 'File: {{file}}'));\n }\n if (moreInfo.lineNumber) {\n moreInfoText.push(\n this.l10n.get('error_line', { line: moreInfo.lineNumber, },\n 'Line: {{line}}'));\n }\n }\n }\n\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n let errorWrapperConfig = this.appConfig.errorWrapper;\n let errorWrapper = errorWrapperConfig.container;\n errorWrapper.removeAttribute('hidden');\n\n let errorMessage = errorWrapperConfig.errorMessage;\n errorMessage.textContent = message;\n\n let closeButton = errorWrapperConfig.closeButton;\n closeButton.onclick = function() {\n errorWrapper.setAttribute('hidden', 'true');\n };\n\n let errorMoreInfo = errorWrapperConfig.errorMoreInfo;\n let moreInfoButton = errorWrapperConfig.moreInfoButton;\n let lessInfoButton = errorWrapperConfig.lessInfoButton;\n moreInfoButton.onclick = function() {\n errorMoreInfo.removeAttribute('hidden');\n moreInfoButton.setAttribute('hidden', 'true');\n lessInfoButton.removeAttribute('hidden');\n errorMoreInfo.style.height = errorMoreInfo.scrollHeight + 'px';\n };\n lessInfoButton.onclick = function() {\n errorMoreInfo.setAttribute('hidden', 'true');\n moreInfoButton.removeAttribute('hidden');\n lessInfoButton.setAttribute('hidden', 'true');\n };\n moreInfoButton.oncontextmenu = noContextMenuHandler;\n lessInfoButton.oncontextmenu = noContextMenuHandler;\n closeButton.oncontextmenu = noContextMenuHandler;\n moreInfoButton.removeAttribute('hidden');\n lessInfoButton.setAttribute('hidden', 'true');\n Promise.all(moreInfoText).then((parts) => {\n errorMoreInfo.value = parts.join('\\n');\n });\n } else {\n console.error(message + '\\n' + moreInfoText);\n this.fallback();\n }\n },\n\n progress(level) {\n if (this.downloadComplete) {\n // Don't accidentally show the loading bar again when the entire file has\n // already been fetched (only an issue when disableAutoFetch is enabled).\n return;\n }\n let percent = Math.round(level * 100);\n // When we transition from full request to range requests, it's possible\n // that we discard some of the loaded data. This can cause the loading\n // bar to move backwards. So prevent this by only updating the bar if it\n // increases.\n if (percent > this.loadingBar.percent || isNaN(percent)) {\n this.loadingBar.percent = percent;\n\n // When disableAutoFetch is enabled, it's not uncommon for the entire file\n // to never be fetched (depends on e.g. the file structure). In this case\n // the loading bar will not be completely filled, nor will it be hidden.\n // To prevent displaying a partially filled loading bar permanently, we\n // hide it when no data has been loaded during a certain amount of time.\n if (PDFJS.disableAutoFetch && percent) {\n if (this.disableAutoFetchLoadingBarTimeout) {\n clearTimeout(this.disableAutoFetchLoadingBarTimeout);\n this.disableAutoFetchLoadingBarTimeout = null;\n }\n this.loadingBar.show();\n\n this.disableAutoFetchLoadingBarTimeout = setTimeout(() => {\n this.loadingBar.hide();\n this.disableAutoFetchLoadingBarTimeout = null;\n }, DISABLE_AUTO_FETCH_LOADING_BAR_TIMEOUT);\n }\n }\n },\n\n load(pdfDocument, scale) {\n scale = scale || UNKNOWN_SCALE;\n this.pdfDocument = pdfDocument;\n\n pdfDocument.getDownloadInfo().then(() => {\n this.downloadComplete = true;\n this.loadingBar.hide();\n\n firstPagePromise.then(() => {\n this.eventBus.dispatch('documentload', { source: this, });\n });\n });\n\n // Since the `setInitialView` call below depends on this being resolved,\n // fetch it early to avoid delaying initial rendering of the PDF document.\n let pageModePromise = pdfDocument.getPageMode().catch(\n function() { /* Avoid breaking initial rendering; ignoring errors. */ });\n\n this.toolbar.setPagesCount(pdfDocument.numPages, false);\n this.secondaryToolbar.setPagesCount(pdfDocument.numPages);\n\n let id = this.documentFingerprint = pdfDocument.fingerprint;\n let store = this.store = new ViewHistory(id);\n\n let baseDocumentUrl;\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n baseDocumentUrl = null;\n } else if (PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n baseDocumentUrl = this.baseUrl;\n } else if (PDFJSDev.test('CHROME')) {\n baseDocumentUrl = location.href.split('#')[0];\n }\n this.pdfLinkService.setDocument(pdfDocument, baseDocumentUrl);\n this.pdfDocumentProperties.setDocument(pdfDocument, this.url);\n\n let pdfViewer = this.pdfViewer;\n pdfViewer.setDocument(pdfDocument);\n let firstPagePromise = pdfViewer.firstPagePromise;\n let pagesPromise = pdfViewer.pagesPromise;\n let onePageRendered = pdfViewer.onePageRendered;\n\n let pdfThumbnailViewer = this.pdfThumbnailViewer;\n pdfThumbnailViewer.setDocument(pdfDocument);\n\n firstPagePromise.then((pdfPage) => {\n this.loadingBar.setWidth(this.appConfig.viewerContainer);\n\n if (!PDFJS.disableHistory && !this.isViewerEmbedded) {\n // The browsing history is only enabled when the viewer is standalone,\n // i.e. not when it is embedded in a web page.\n if (!this.viewerPrefs['showPreviousViewOnLoad']) {\n this.pdfHistory.clearHistoryState();\n }\n this.pdfHistory.initialize(this.documentFingerprint);\n\n if (this.pdfHistory.initialDestination) {\n this.initialDestination = this.pdfHistory.initialDestination;\n } else if (this.pdfHistory.initialBookmark) {\n this.initialBookmark = this.pdfHistory.initialBookmark;\n }\n }\n\n let initialParams = {\n destination: this.initialDestination,\n bookmark: this.initialBookmark,\n hash: null,\n };\n let storePromise = store.getMultiple({\n exists: false,\n page: '1',\n zoom: DEFAULT_SCALE_VALUE,\n scrollLeft: '0',\n scrollTop: '0',\n sidebarView: SidebarView.NONE,\n }).catch(() => { /* Unable to read from storage; ignoring errors. */ });\n\n Promise.all([storePromise, pageModePromise]).then(\n ([values = {}, pageMode]) => {\n // Initialize the default values, from user preferences.\n let hash = this.viewerPrefs['defaultZoomValue'] ?\n ('zoom=' + this.viewerPrefs['defaultZoomValue']) : null;\n let sidebarView = this.viewerPrefs['sidebarViewOnLoad'];\n\n if (values.exists && this.viewerPrefs['showPreviousViewOnLoad']) {\n hash = 'page=' + values.page +\n '&zoom=' + (this.viewerPrefs['defaultZoomValue'] || values.zoom) +\n ',' + values.scrollLeft + ',' + values.scrollTop;\n sidebarView = sidebarView || (values.sidebarView | 0);\n }\n if (pageMode && !this.viewerPrefs['disablePageMode']) {\n // Always let the user preference/history take precedence.\n sidebarView = sidebarView || apiPageModeToSidebarView(pageMode);\n }\n return {\n hash,\n sidebarView,\n };\n }).then(({ hash, sidebarView, }) => {\n this.setInitialView(hash, { sidebarView, scale, });\n initialParams.hash = hash;\n\n // Make all navigation keys work on document load,\n // unless the viewer is embedded in a web page.\n if (!this.isViewerEmbedded) {\n pdfViewer.focus();\n }\n return pagesPromise;\n }).then(() => {\n // For documents with different page sizes, once all pages are resolved,\n // ensure that the correct location becomes visible on load.\n if (!initialParams.destination && !initialParams.bookmark &&\n !initialParams.hash) {\n return;\n }\n if (pdfViewer.hasEqualPageSizes) {\n return;\n }\n this.initialDestination = initialParams.destination;\n this.initialBookmark = initialParams.bookmark;\n\n pdfViewer.currentScaleValue = pdfViewer.currentScaleValue;\n this.setInitialView(initialParams.hash);\n }).then(function() {\n // At this point, rendering of the initial page(s) should always have\n // started (and may even have completed).\n // To prevent any future issues, e.g. the document being completely\n // blank on load, always trigger rendering here.\n pdfViewer.update();\n });\n });\n\n pdfDocument.getPageLabels().then((labels) => {\n if (!labels || this.viewerPrefs['disablePageLabels']) {\n return;\n }\n let i = 0, numLabels = labels.length;\n if (numLabels !== this.pagesCount) {\n console.error('The number of Page Labels does not match ' +\n 'the number of pages in the document.');\n return;\n }\n // Ignore page labels that correspond to standard page numbering.\n while (i < numLabels && labels[i] === (i + 1).toString()) {\n i++;\n }\n if (i === numLabels) {\n return;\n }\n\n pdfViewer.setPageLabels(labels);\n pdfThumbnailViewer.setPageLabels(labels);\n\n // Changing toolbar page display to use labels and we need to set\n // the label of the current page.\n this.toolbar.setPagesCount(pdfDocument.numPages, true);\n this.toolbar.setPageNumber(pdfViewer.currentPageNumber,\n pdfViewer.currentPageLabel);\n });\n\n pagesPromise.then(() => {\n if (!this.supportsPrinting) {\n return;\n }\n pdfDocument.getJavaScript().then((javaScript) => {\n if (javaScript.length) {\n console.warn('Warning: JavaScript is not supported');\n this.fallback(UNSUPPORTED_FEATURES.javaScript);\n }\n // Hack to support auto printing.\n let regex = /\\bprint\\s*\\(/;\n for (let i = 0, ii = javaScript.length; i < ii; i++) {\n let js = javaScript[i];\n if (js && regex.test(js)) {\n setTimeout(function() {\n window.print();\n });\n return;\n }\n }\n });\n });\n\n Promise.all([onePageRendered, animationStarted]).then(() => {\n pdfDocument.getOutline().then((outline) => {\n this.pdfOutlineViewer.render({ outline, });\n });\n pdfDocument.getAttachments().then((attachments) => {\n this.pdfAttachmentViewer.render({ attachments, });\n });\n });\n\n pdfDocument.getMetadata().then(({ info, metadata, }) => {\n this.documentInfo = info;\n this.metadata = metadata;\n\n // Provides some basic debug information\n console.log('PDF ' + pdfDocument.fingerprint + ' [' +\n info.PDFFormatVersion + ' ' + (info.Producer || '-').trim() +\n ' / ' + (info.Creator || '-').trim() + ']' +\n ' (PDF.js: ' + (version || '-') +\n (!PDFJS.disableWebGL ? ' [WebGL]' : '') + ')');\n\n let pdfTitle;\n if (metadata && metadata.has('dc:title')) {\n let title = metadata.get('dc:title');\n // Ghostscript sometimes return 'Untitled', sets the title to 'Untitled'\n if (title !== 'Untitled') {\n pdfTitle = title;\n }\n }\n\n if (!pdfTitle && info && info['Title']) {\n pdfTitle = info['Title'];\n }\n\n if (pdfTitle) {\n this.setTitle(pdfTitle + ' - ' + document.title);\n }\n\n if (info.IsAcroFormPresent) {\n console.warn('Warning: AcroForm/XFA is not supported');\n this.fallback(UNSUPPORTED_FEATURES.forms);\n }\n\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n let versionId = String(info.PDFFormatVersion).slice(-1) | 0;\n let generatorId = 0;\n const KNOWN_GENERATORS = [\n 'acrobat distiller', 'acrobat pdfwriter', 'adobe livecycle',\n 'adobe pdf library', 'adobe photoshop', 'ghostscript', 'tcpdf',\n 'cairo', 'dvipdfm', 'dvips', 'pdftex', 'pdfkit', 'itext', 'prince',\n 'quarkxpress', 'mac os x', 'microsoft', 'openoffice', 'oracle',\n 'luradocument', 'pdf-xchange', 'antenna house', 'aspose.cells', 'fpdf'\n ];\n if (info.Producer) {\n KNOWN_GENERATORS.some(function (generator, s, i) {\n if (generator.indexOf(s) < 0) {\n return false;\n }\n generatorId = i + 1;\n return true;\n }.bind(null, info.Producer.toLowerCase()));\n }\n let formType = !info.IsAcroFormPresent ? null : info.IsXFAPresent ?\n 'xfa' : 'acroform';\n this.externalServices.reportTelemetry({\n type: 'documentInfo',\n version: versionId,\n generator: generatorId,\n formType,\n });\n }\n });\n },\n\n setInitialView(storedHash, options = {}) {\n let { scale = 0, sidebarView = SidebarView.NONE, } = options;\n\n this.isInitialViewSet = true;\n this.pdfSidebar.setInitialView(sidebarView);\n\n if (this.initialDestination) {\n this.pdfLinkService.navigateTo(this.initialDestination);\n this.initialDestination = null;\n } else if (this.initialBookmark) {\n this.pdfLinkService.setHash(this.initialBookmark);\n this.pdfHistory.push({ hash: this.initialBookmark, }, true);\n this.initialBookmark = null;\n } else if (storedHash) {\n this.pdfLinkService.setHash(storedHash);\n } else if (scale) {\n this.pdfViewer.currentScaleValue = scale;\n this.page = 1;\n }\n\n // Ensure that the correct page number is displayed in the UI,\n // even if the active page didn't change during document load.\n this.toolbar.setPageNumber(this.pdfViewer.currentPageNumber,\n this.pdfViewer.currentPageLabel);\n this.secondaryToolbar.setPageNumber(this.pdfViewer.currentPageNumber);\n\n if (!this.pdfViewer.currentScaleValue) {\n // Scale was not initialized: invalid bookmark or scale was not specified.\n // Setting the default one.\n this.pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n }\n },\n\n cleanup() {\n if (!this.pdfDocument) {\n return; // run cleanup when document is loaded\n }\n this.pdfViewer.cleanup();\n this.pdfThumbnailViewer.cleanup();\n\n // We don't want to remove fonts used by active page SVGs.\n if (this.pdfViewer.renderer !== RendererType.SVG) {\n this.pdfDocument.cleanup();\n }\n },\n\n forceRendering() {\n this.pdfRenderingQueue.printing = this.printing;\n this.pdfRenderingQueue.isThumbnailViewEnabled =\n this.pdfSidebar.isThumbnailViewVisible;\n this.pdfRenderingQueue.renderHighestPriority();\n },\n\n beforePrint() {\n if (this.printService) {\n // There is no way to suppress beforePrint/afterPrint events,\n // but PDFPrintService may generate double events -- this will ignore\n // the second event that will be coming from native window.print().\n return;\n }\n\n if (!this.supportsPrinting) {\n this.l10n.get('printing_not_supported', null,\n 'Warning: Printing is not fully supported by ' +\n 'this browser.').then((printMessage) => {\n this.error(printMessage);\n });\n return;\n }\n\n // The beforePrint is a sync method and we need to know layout before\n // returning from this method. Ensure that we can get sizes of the pages.\n if (!this.pdfViewer.pageViewsReady) {\n this.l10n.get('printing_not_ready', null,\n 'Warning: The PDF is not fully loaded for printing.').\n then((notReadyMessage) => {\n window.alert(notReadyMessage);\n });\n return;\n }\n\n let pagesOverview = this.pdfViewer.getPagesOverview();\n let printContainer = this.appConfig.printContainer;\n let printService = PDFPrintServiceFactory.instance.createPrintService(\n this.pdfDocument, pagesOverview, printContainer, this.l10n);\n this.printService = printService;\n this.forceRendering();\n\n printService.layout();\n\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n this.externalServices.reportTelemetry({\n type: 'print',\n });\n }\n },\n\n afterPrint: function pdfViewSetupAfterPrint() {\n if (this.printService) {\n this.printService.destroy();\n this.printService = null;\n }\n this.forceRendering();\n },\n\n rotatePages(delta) {\n if (!this.pdfDocument) {\n return;\n }\n let { pdfViewer, pdfThumbnailViewer, } = this;\n let pageNumber = pdfViewer.currentPageNumber;\n let newRotation = (pdfViewer.pagesRotation + 360 + delta) % 360;\n\n pdfViewer.pagesRotation = newRotation;\n pdfThumbnailViewer.pagesRotation = newRotation;\n\n this.forceRendering();\n // Ensure that the active page doesn't change during rotation.\n pdfViewer.currentPageNumber = pageNumber;\n },\n\n requestPresentationMode() {\n if (!this.pdfPresentationMode) {\n return;\n }\n this.pdfPresentationMode.request();\n },\n\n bindEvents() {\n let { eventBus, _boundEvents, } = this;\n\n _boundEvents.beforePrint = this.beforePrint.bind(this);\n _boundEvents.afterPrint = this.afterPrint.bind(this);\n\n eventBus.on('resize', webViewerResize);\n eventBus.on('hashchange', webViewerHashchange);\n eventBus.on('beforeprint', _boundEvents.beforePrint);\n eventBus.on('afterprint', _boundEvents.afterPrint);\n eventBus.on('pagerendered', webViewerPageRendered);\n eventBus.on('textlayerrendered', webViewerTextLayerRendered);\n eventBus.on('updateviewarea', webViewerUpdateViewarea);\n eventBus.on('pagechanging', webViewerPageChanging);\n eventBus.on('scalechanging', webViewerScaleChanging);\n eventBus.on('sidebarviewchanged', webViewerSidebarViewChanged);\n eventBus.on('pagemode', webViewerPageMode);\n eventBus.on('namedaction', webViewerNamedAction);\n eventBus.on('presentationmodechanged', webViewerPresentationModeChanged);\n eventBus.on('presentationmode', webViewerPresentationMode);\n eventBus.on('openfile', webViewerOpenFile);\n eventBus.on('print', webViewerPrint);\n eventBus.on('download', webViewerDownload);\n eventBus.on('firstpage', webViewerFirstPage);\n eventBus.on('lastpage', webViewerLastPage);\n eventBus.on('nextpage', webViewerNextPage);\n eventBus.on('previouspage', webViewerPreviousPage);\n eventBus.on('zoomin', webViewerZoomIn);\n eventBus.on('zoomout', webViewerZoomOut);\n eventBus.on('pagenumberchanged', webViewerPageNumberChanged);\n eventBus.on('scalechanged', webViewerScaleChanged);\n eventBus.on('rotatecw', webViewerRotateCw);\n eventBus.on('rotateccw', webViewerRotateCcw);\n eventBus.on('documentproperties', webViewerDocumentProperties);\n eventBus.on('find', webViewerFind);\n eventBus.on('findfromurlhash', webViewerFindFromUrlHash);\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n eventBus.on('fileinputchange', webViewerFileInputChange);\n }\n },\n\n bindWindowEvents() {\n let { eventBus, _boundEvents, } = this;\n\n _boundEvents.windowResize = () => {\n eventBus.dispatch('resize');\n };\n _boundEvents.windowHashChange = () => {\n eventBus.dispatch('hashchange', {\n hash: document.location.hash.substring(1),\n });\n };\n _boundEvents.windowBeforePrint = () => {\n eventBus.dispatch('beforeprint');\n };\n _boundEvents.windowAfterPrint = () => {\n eventBus.dispatch('afterprint');\n };\n\n window.addEventListener('wheel', webViewerWheel);\n window.addEventListener('click', webViewerClick);\n window.addEventListener('keydown', webViewerKeyDown);\n window.addEventListener('resize', _boundEvents.windowResize);\n window.addEventListener('hashchange', _boundEvents.windowHashChange);\n window.addEventListener('beforeprint', _boundEvents.windowBeforePrint);\n window.addEventListener('afterprint', _boundEvents.windowAfterPrint);\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n _boundEvents.windowChange = (evt) => {\n let files = evt.target.files;\n if (!files || files.length === 0) {\n return;\n }\n eventBus.dispatch('fileinputchange', {\n fileInput: evt.target,\n });\n };\n window.addEventListener('change', _boundEvents.windowChange);\n }\n },\n\n unbindEvents() {\n let { eventBus, _boundEvents, } = this;\n\n eventBus.off('resize', webViewerResize);\n eventBus.off('hashchange', webViewerHashchange);\n eventBus.off('beforeprint', _boundEvents.beforePrint);\n eventBus.off('afterprint', _boundEvents.afterPrint);\n eventBus.off('pagerendered', webViewerPageRendered);\n eventBus.off('textlayerrendered', webViewerTextLayerRendered);\n eventBus.off('updateviewarea', webViewerUpdateViewarea);\n eventBus.off('pagechanging', webViewerPageChanging);\n eventBus.off('scalechanging', webViewerScaleChanging);\n eventBus.off('sidebarviewchanged', webViewerSidebarViewChanged);\n eventBus.off('pagemode', webViewerPageMode);\n eventBus.off('namedaction', webViewerNamedAction);\n eventBus.off('presentationmodechanged', webViewerPresentationModeChanged);\n eventBus.off('presentationmode', webViewerPresentationMode);\n eventBus.off('openfile', webViewerOpenFile);\n eventBus.off('print', webViewerPrint);\n eventBus.off('download', webViewerDownload);\n eventBus.off('firstpage', webViewerFirstPage);\n eventBus.off('lastpage', webViewerLastPage);\n eventBus.off('nextpage', webViewerNextPage);\n eventBus.off('previouspage', webViewerPreviousPage);\n eventBus.off('zoomin', webViewerZoomIn);\n eventBus.off('zoomout', webViewerZoomOut);\n eventBus.off('pagenumberchanged', webViewerPageNumberChanged);\n eventBus.off('scalechanged', webViewerScaleChanged);\n eventBus.off('rotatecw', webViewerRotateCw);\n eventBus.off('rotateccw', webViewerRotateCcw);\n eventBus.off('documentproperties', webViewerDocumentProperties);\n eventBus.off('find', webViewerFind);\n eventBus.off('findfromurlhash', webViewerFindFromUrlHash);\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n eventBus.off('fileinputchange', webViewerFileInputChange);\n }\n\n _boundEvents.beforePrint = null;\n _boundEvents.afterPrint = null;\n },\n\n unbindWindowEvents() {\n let { _boundEvents, } = this;\n\n window.removeEventListener('wheel', webViewerWheel);\n window.removeEventListener('click', webViewerClick);\n window.removeEventListener('keydown', webViewerKeyDown);\n window.removeEventListener('resize', _boundEvents.windowResize);\n window.removeEventListener('hashchange', _boundEvents.windowHashChange);\n window.removeEventListener('beforeprint', _boundEvents.windowBeforePrint);\n window.removeEventListener('afterprint', _boundEvents.windowAfterPrint);\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n window.removeEventListener('change', _boundEvents.windowChange);\n _boundEvents.windowChange = null;\n }\n\n _boundEvents.windowResize = null;\n _boundEvents.windowHashChange = null;\n _boundEvents.windowBeforePrint = null;\n _boundEvents.windowAfterPrint = null;\n },\n};\n\nlet validateFileURL;\nif (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n const HOSTED_VIEWER_ORIGINS = ['null',\n 'http://mozilla.github.io', 'https://mozilla.github.io'];\n validateFileURL = function validateFileURL(file) {\n if (file === undefined) {\n return;\n }\n try {\n let viewerOrigin = new URL(window.location.href).origin || 'null';\n if (HOSTED_VIEWER_ORIGINS.indexOf(viewerOrigin) >= 0) {\n // Hosted or local viewer, allow for any file locations\n return;\n }\n let fileOrigin = new URL(file, window.location.href).origin;\n // Removing of the following line will not guarantee that the viewer will\n // start accepting URLs from foreign origin -- CORS headers on the remote\n // server must be properly configured.\n if (fileOrigin !== viewerOrigin) {\n throw new Error('file origin does not match viewer\\'s');\n }\n } catch (ex) {\n let message = ex && ex.message;\n PDFViewerApplication.l10n.get('loading_error', null,\n 'An error occurred while loading the PDF.').\n then((loadingErrorMessage) => {\n PDFViewerApplication.error(loadingErrorMessage, { message, });\n });\n throw ex;\n }\n };\n}\n\nfunction loadAndEnablePDFBug(enabledTabs) {\n return new Promise(function (resolve, reject) {\n let appConfig = PDFViewerApplication.appConfig;\n let script = document.createElement('script');\n script.src = appConfig.debuggerScriptPath;\n script.onload = function () {\n PDFBug.enable(enabledTabs);\n PDFBug.init({\n PDFJS,\n OPS,\n }, appConfig.mainContainer);\n resolve();\n };\n script.onerror = function () {\n reject(new Error('Cannot load debugger at ' + script.src));\n };\n (document.getElementsByTagName('head')[0] || document.body).\n appendChild(script);\n });\n}\n\nfunction webViewerInitialized() {\n let appConfig = PDFViewerApplication.appConfig;\n let file;\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n let queryString = document.location.search.substring(1);\n let params = parseQueryString(queryString);\n file = 'file' in params ? params.file : appConfig.defaultUrl;\n validateFileURL(file);\n } else if (PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n file = window.location.href.split('#')[0];\n } else if (PDFJSDev.test('CHROME')) {\n file = appConfig.defaultUrl;\n }\n\n let waitForBeforeOpening = [];\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n let fileInput = document.createElement('input');\n fileInput.id = appConfig.openFileInputName;\n fileInput.className = 'fileInput';\n fileInput.setAttribute('type', 'file');\n fileInput.oncontextmenu = noContextMenuHandler;\n document.body.appendChild(fileInput);\n\n if (!window.File || !window.FileReader ||\n !window.FileList || !window.Blob) {\n appConfig.toolbar.openFile.setAttribute('hidden', 'true');\n appConfig.secondaryToolbar.openFileButton.setAttribute('hidden', 'true');\n } else {\n fileInput.value = null;\n }\n } else {\n appConfig.toolbar.openFile.setAttribute('hidden', 'true');\n appConfig.secondaryToolbar.openFileButton.setAttribute('hidden', 'true');\n }\n\n if ((typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) ||\n PDFViewerApplication.viewerPrefs['pdfBugEnabled']) {\n // Special debugging flags in the hash section of the URL.\n let hash = document.location.hash.substring(1);\n let hashParams = parseQueryString(hash);\n\n if ('disableworker' in hashParams) {\n PDFJS.disableWorker = (hashParams['disableworker'] === 'true');\n }\n if ('disablerange' in hashParams) {\n PDFJS.disableRange = (hashParams['disablerange'] === 'true');\n }\n if ('disablestream' in hashParams) {\n PDFJS.disableStream = (hashParams['disablestream'] === 'true');\n }\n if ('disableautofetch' in hashParams) {\n PDFJS.disableAutoFetch = (hashParams['disableautofetch'] === 'true');\n }\n if ('disablefontface' in hashParams) {\n PDFJS.disableFontFace = (hashParams['disablefontface'] === 'true');\n }\n if ('disablehistory' in hashParams) {\n PDFJS.disableHistory = (hashParams['disablehistory'] === 'true');\n }\n if ('webgl' in hashParams) {\n PDFJS.disableWebGL = (hashParams['webgl'] !== 'true');\n }\n if ('useonlycsszoom' in hashParams) {\n PDFJS.useOnlyCssZoom = (hashParams['useonlycsszoom'] === 'true');\n }\n if ('verbosity' in hashParams) {\n PDFJS.verbosity = hashParams['verbosity'] | 0;\n }\n if ('ignorecurrentpositiononzoom' in hashParams) {\n PDFJS.ignoreCurrentPositionOnZoom =\n (hashParams['ignorecurrentpositiononzoom'] === 'true');\n }\n if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {\n if ('disablebcmaps' in hashParams && hashParams['disablebcmaps']) {\n PDFJS.cMapUrl = '../external/cmaps/';\n PDFJS.cMapPacked = false;\n }\n }\n if ('textlayer' in hashParams) {\n switch (hashParams['textlayer']) {\n case 'off':\n PDFJS.disableTextLayer = true;\n break;\n case 'visible':\n case 'shadow':\n case 'hover':\n let viewer = appConfig.viewerContainer;\n viewer.classList.add('textLayer-' + hashParams['textlayer']);\n break;\n }\n }\n if ('pdfbug' in hashParams) {\n PDFJS.pdfBug = true;\n let pdfBug = hashParams['pdfbug'];\n let enabled = pdfBug.split(',');\n waitForBeforeOpening.push(loadAndEnablePDFBug(enabled));\n }\n }\n\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL') &&\n !PDFViewerApplication.supportsDocumentFonts) {\n PDFJS.disableFontFace = true;\n PDFViewerApplication.l10n.get('web_fonts_disabled', null,\n 'Web fonts are disabled: unable to use embedded PDF fonts.').\n then((msg) => {\n console.warn(msg);\n });\n }\n\n if (!PDFViewerApplication.supportsPrinting) {\n appConfig.toolbar.print.classList.add('hidden');\n appConfig.secondaryToolbar.printButton.classList.add('hidden');\n }\n\n if (!PDFViewerApplication.supportsFullscreen) {\n appConfig.toolbar.presentationModeButton.classList.add('hidden');\n appConfig.secondaryToolbar.presentationModeButton.classList.add('hidden');\n }\n\n if (PDFViewerApplication.supportsIntegratedFind) {\n appConfig.toolbar.viewFind.classList.add('hidden');\n }\n\n appConfig.sidebar.mainContainer.addEventListener('transitionend',\n function(evt) {\n if (evt.target === /* mainContainer */ this) {\n PDFViewerApplication.eventBus.dispatch('resize');\n }\n }, true);\n\n appConfig.sidebar.toggleButton.addEventListener('click', function() {\n PDFViewerApplication.pdfSidebar.toggle();\n });\n\n Promise.all(waitForBeforeOpening).then(function () {\n webViewerOpenFileViaURL(file);\n }).catch(function (reason) {\n PDFViewerApplication.l10n.get('loading_error', null,\n 'An error occurred while opening.').then((msg) => {\n PDFViewerApplication.error(msg, reason);\n });\n });\n}\n\nlet webViewerOpenFileViaURL;\nif (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) {\n if (file && file.lastIndexOf('file:', 0) === 0) {\n // file:-scheme. Load the contents in the main thread because QtWebKit\n // cannot load file:-URLs in a Web Worker. file:-URLs are usually loaded\n // very quickly, so there is no need to set up progress event listeners.\n PDFViewerApplication.setTitleUsingUrl(file);\n let xhr = new XMLHttpRequest();\n xhr.onload = function() {\n PDFViewerApplication.open(new Uint8Array(xhr.response));\n };\n try {\n xhr.open('GET', file);\n xhr.responseType = 'arraybuffer';\n xhr.send();\n } catch (ex) {\n PDFViewerApplication.l10n.get('loading_error', null,\n 'An error occurred while loading the PDF.').then((msg) => {\n PDFViewerApplication.error(msg, ex);\n });\n }\n return;\n }\n\n if (file) {\n PDFViewerApplication.open(file);\n }\n };\n} else if (PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {\n webViewerOpenFileViaURL = function webViewerOpenFileViaURL(file) {\n PDFViewerApplication.setTitleUsingUrl(file);\n PDFViewerApplication.initPassiveLoading();\n };\n} else {\n webViewerOpenFileViaURL = function webViewerOpenFileURL(file) {\n if (file) {\n throw new Error('Not implemented: webViewerOpenFileURL');\n }\n };\n}\n\nfunction webViewerPageRendered(evt) {\n let pageNumber = evt.pageNumber;\n let pageIndex = pageNumber - 1;\n let pageView = PDFViewerApplication.pdfViewer.getPageView(pageIndex);\n\n // If the page is still visible when it has finished rendering,\n // ensure that the page number input loading indicator is hidden.\n if (pageNumber === PDFViewerApplication.page) {\n PDFViewerApplication.toolbar.updateLoadingIndicatorState(false);\n }\n\n // Prevent errors in the edge-case where the PDF document is removed *before*\n // the 'pagerendered' event handler is invoked.\n if (!pageView) {\n return;\n }\n\n // Use the rendered page to set the corresponding thumbnail image.\n if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {\n let thumbnailView = PDFViewerApplication.pdfThumbnailViewer.\n getThumbnail(pageIndex);\n thumbnailView.setImage(pageView);\n }\n\n if (PDFJS.pdfBug && Stats.enabled && pageView.stats) {\n Stats.add(pageNumber, pageView.stats);\n }\n\n if (pageView.error) {\n PDFViewerApplication.l10n.get('rendering_error', null,\n 'An error occurred while rendering the page.').then((msg) => {\n PDFViewerApplication.error(msg, pageView.error);\n });\n }\n\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n PDFViewerApplication.externalServices.reportTelemetry({\n type: 'pageInfo',\n });\n // It is a good time to report stream and font types.\n PDFViewerApplication.pdfDocument.getStats().then(function (stats) {\n PDFViewerApplication.externalServices.reportTelemetry({\n type: 'documentStats',\n stats,\n });\n });\n }\n}\n\nfunction webViewerTextLayerRendered(evt) {\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL') &&\n evt.numTextDivs > 0 && !PDFViewerApplication.supportsDocumentColors) {\n PDFViewerApplication.l10n.get('document_colors_not_allowed', null,\n 'PDF documents are not allowed to use their own colors: ' +\n '\\'Allow pages to choose their own colors\\' ' +\n 'is deactivated in the browser.').\n then((msg) => {\n console.error(msg);\n });\n PDFViewerApplication.fallback();\n }\n}\n\nfunction webViewerPageMode(evt) {\n // Handle the 'pagemode' hash parameter, see also `PDFLinkService_setHash`.\n let mode = evt.mode, view;\n switch (mode) {\n case 'thumbs':\n view = SidebarView.THUMBS;\n break;\n case 'bookmarks':\n case 'outline':\n view = SidebarView.OUTLINE;\n break;\n case 'attachments':\n view = SidebarView.ATTACHMENTS;\n break;\n case 'none':\n view = SidebarView.NONE;\n break;\n default:\n console.error('Invalid \"pagemode\" hash parameter: ' + mode);\n return;\n }\n PDFViewerApplication.pdfSidebar.switchView(view, /* forceOpen = */ true);\n}\n\nfunction webViewerNamedAction(evt) {\n // Processing couple of named actions that might be useful.\n // See also PDFLinkService.executeNamedAction\n let action = evt.action;\n switch (action) {\n case 'GoToPage':\n PDFViewerApplication.appConfig.toolbar.pageNumber.select();\n break;\n\n case 'Find':\n if (!PDFViewerApplication.supportsIntegratedFind) {\n PDFViewerApplication.findBar.toggle();\n }\n break;\n }\n}\n\nfunction webViewerPresentationModeChanged(evt) {\n let { active, switchInProgress, } = evt;\n PDFViewerApplication.pdfViewer.presentationModeState =\n switchInProgress ? PresentationModeState.CHANGING :\n active ? PresentationModeState.FULLSCREEN : PresentationModeState.NORMAL;\n}\n\nfunction webViewerSidebarViewChanged(evt) {\n PDFViewerApplication.pdfRenderingQueue.isThumbnailViewEnabled =\n PDFViewerApplication.pdfSidebar.isThumbnailViewVisible;\n\n let store = PDFViewerApplication.store;\n if (store && PDFViewerApplication.isInitialViewSet) {\n // Only update the storage when the document has been loaded *and* rendered.\n store.set('sidebarView', evt.view).catch(function() { });\n }\n}\n\nfunction webViewerUpdateViewarea(evt) {\n let location = evt.location, store = PDFViewerApplication.store;\n\n if (store && PDFViewerApplication.isInitialViewSet) {\n store.setMultiple({\n 'exists': true,\n 'page': location.pageNumber,\n 'zoom': location.scale,\n 'scrollLeft': location.left,\n 'scrollTop': location.top,\n }).catch(function() { /* unable to write to storage */ });\n }\n let href =\n PDFViewerApplication.pdfLinkService.getAnchorUrl(location.pdfOpenParams);\n PDFViewerApplication.appConfig.toolbar.viewBookmark.href = href;\n PDFViewerApplication.appConfig.secondaryToolbar.viewBookmarkButton.href =\n href;\n\n // Update the current bookmark in the browsing history.\n PDFViewerApplication.pdfHistory.updateCurrentBookmark(location.pdfOpenParams,\n location.pageNumber);\n\n // Show/hide the loading indicator in the page number input element.\n let currentPage =\n PDFViewerApplication.pdfViewer.getPageView(PDFViewerApplication.page - 1);\n let loading = currentPage.renderingState !== RenderingStates.FINISHED;\n PDFViewerApplication.toolbar.updateLoadingIndicatorState(loading);\n}\n\nfunction webViewerResize() {\n let { pdfDocument, pdfViewer, } = PDFViewerApplication;\n if (!pdfDocument) {\n return;\n }\n let currentScaleValue = pdfViewer.currentScaleValue;\n if (currentScaleValue === 'auto' ||\n currentScaleValue === 'page-fit' ||\n currentScaleValue === 'page-width') {\n // Note: the scale is constant for 'page-actual'.\n pdfViewer.currentScaleValue = currentScaleValue;\n }\n pdfViewer.update();\n}\n\nfunction webViewerHashchange(evt) {\n if (PDFViewerApplication.pdfHistory.isHashChangeUnlocked) {\n let hash = evt.hash;\n if (!hash) {\n return;\n }\n if (!PDFViewerApplication.isInitialViewSet) {\n PDFViewerApplication.initialBookmark = hash;\n } else {\n PDFViewerApplication.pdfLinkService.setHash(hash);\n }\n }\n}\n\nlet webViewerFileInputChange;\nif (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n webViewerFileInputChange = function webViewerFileInputChange(evt) {\n let file = evt.fileInput.files[0];\n\n if (!PDFJS.disableCreateObjectURL && URL.createObjectURL) {\n PDFViewerApplication.open(URL.createObjectURL(file));\n } else {\n // Read the local file into a Uint8Array.\n let fileReader = new FileReader();\n fileReader.onload = function webViewerChangeFileReaderOnload(evt) {\n let buffer = evt.target.result;\n PDFViewerApplication.open(new Uint8Array(buffer));\n };\n fileReader.readAsArrayBuffer(file);\n }\n\n PDFViewerApplication.setTitleUsingUrl(file.name);\n\n // URL does not reflect proper document location - hiding some icons.\n let appConfig = PDFViewerApplication.appConfig;\n appConfig.toolbar.viewBookmark.setAttribute('hidden', 'true');\n appConfig.secondaryToolbar.viewBookmarkButton.setAttribute('hidden',\n 'true');\n appConfig.toolbar.download.setAttribute('hidden', 'true');\n appConfig.secondaryToolbar.downloadButton.setAttribute('hidden', 'true');\n };\n}\n\nfunction webViewerPresentationMode() {\n PDFViewerApplication.requestPresentationMode();\n}\nfunction webViewerOpenFile() {\n let openFileInputName = PDFViewerApplication.appConfig.openFileInputName;\n document.getElementById(openFileInputName).click();\n}\nfunction webViewerPrint() {\n window.print();\n}\nfunction webViewerDownload() {\n PDFViewerApplication.download();\n}\nfunction webViewerFirstPage() {\n if (PDFViewerApplication.pdfDocument) {\n PDFViewerApplication.page = 1;\n }\n}\nfunction webViewerLastPage() {\n if (PDFViewerApplication.pdfDocument) {\n PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n }\n}\nfunction webViewerNextPage() {\n PDFViewerApplication.page++;\n}\nfunction webViewerPreviousPage() {\n PDFViewerApplication.page--;\n}\nfunction webViewerZoomIn() {\n PDFViewerApplication.zoomIn();\n}\nfunction webViewerZoomOut() {\n PDFViewerApplication.zoomOut();\n}\nfunction webViewerPageNumberChanged(evt) {\n let pdfViewer = PDFViewerApplication.pdfViewer;\n pdfViewer.currentPageLabel = evt.value;\n\n // Ensure that the page number input displays the correct value, even if the\n // value entered by the user was invalid (e.g. a floating point number).\n if (evt.value !== pdfViewer.currentPageNumber.toString() &&\n evt.value !== pdfViewer.currentPageLabel) {\n PDFViewerApplication.toolbar.setPageNumber(\n pdfViewer.currentPageNumber, pdfViewer.currentPageLabel);\n }\n}\nfunction webViewerScaleChanged(evt) {\n PDFViewerApplication.pdfViewer.currentScaleValue = evt.value;\n}\nfunction webViewerRotateCw() {\n PDFViewerApplication.rotatePages(90);\n}\nfunction webViewerRotateCcw() {\n PDFViewerApplication.rotatePages(-90);\n}\nfunction webViewerDocumentProperties() {\n PDFViewerApplication.pdfDocumentProperties.open();\n}\n\nfunction webViewerFind(evt) {\n PDFViewerApplication.findController.executeCommand('find' + evt.type, {\n query: evt.query,\n phraseSearch: evt.phraseSearch,\n caseSensitive: evt.caseSensitive,\n highlightAll: evt.highlightAll,\n findPrevious: evt.findPrevious,\n });\n}\n\nfunction webViewerFindFromUrlHash(evt) {\n PDFViewerApplication.findController.executeCommand('find', {\n query: evt.query,\n phraseSearch: evt.phraseSearch,\n caseSensitive: false,\n highlightAll: true,\n findPrevious: false,\n });\n}\n\nfunction webViewerScaleChanging(evt) {\n PDFViewerApplication.toolbar.setPageScale(evt.presetValue, evt.scale);\n\n PDFViewerApplication.pdfViewer.update();\n}\n\nfunction webViewerPageChanging(evt) {\n let page = evt.pageNumber;\n\n PDFViewerApplication.toolbar.setPageNumber(page, evt.pageLabel || null);\n PDFViewerApplication.secondaryToolbar.setPageNumber(page);\n\n if (PDFViewerApplication.pdfSidebar.isThumbnailViewVisible) {\n PDFViewerApplication.pdfThumbnailViewer.scrollThumbnailIntoView(page);\n }\n\n // we need to update stats\n if (PDFJS.pdfBug && Stats.enabled) {\n let pageView = PDFViewerApplication.pdfViewer.getPageView(page - 1);\n if (pageView.stats) {\n Stats.add(page, pageView.stats);\n }\n }\n}\n\nlet zoomDisabled = false, zoomDisabledTimeout;\nfunction webViewerWheel(evt) {\n let pdfViewer = PDFViewerApplication.pdfViewer;\n if (pdfViewer.isInPresentationMode) {\n return;\n }\n\n if (evt.ctrlKey || evt.metaKey) {\n let support = PDFViewerApplication.supportedMouseWheelZoomModifierKeys;\n if ((evt.ctrlKey && !support.ctrlKey) ||\n (evt.metaKey && !support.metaKey)) {\n return;\n }\n // Only zoom the pages, not the entire viewer.\n evt.preventDefault();\n // NOTE: this check must be placed *after* preventDefault.\n if (zoomDisabled) {\n return;\n }\n\n let previousScale = pdfViewer.currentScale;\n\n let delta = normalizeWheelEventDelta(evt);\n\n const MOUSE_WHEEL_DELTA_PER_PAGE_SCALE = 3.0;\n let ticks = delta * MOUSE_WHEEL_DELTA_PER_PAGE_SCALE;\n if (ticks < 0) {\n PDFViewerApplication.zoomOut(-ticks);\n } else {\n PDFViewerApplication.zoomIn(ticks);\n }\n\n let currentScale = pdfViewer.currentScale;\n if (previousScale !== currentScale) {\n // After scaling the page via zoomIn/zoomOut, the position of the upper-\n // left corner is restored. When the mouse wheel is used, the position\n // under the cursor should be restored instead.\n let scaleCorrectionFactor = currentScale / previousScale - 1;\n let rect = pdfViewer.container.getBoundingClientRect();\n let dx = evt.clientX - rect.left;\n let dy = evt.clientY - rect.top;\n pdfViewer.container.scrollLeft += dx * scaleCorrectionFactor;\n pdfViewer.container.scrollTop += dy * scaleCorrectionFactor;\n }\n } else {\n zoomDisabled = true;\n clearTimeout(zoomDisabledTimeout);\n zoomDisabledTimeout = setTimeout(function () {\n zoomDisabled = false;\n }, 1000);\n }\n}\n\nfunction webViewerClick(evt) {\n if (!PDFViewerApplication.secondaryToolbar.isOpen) {\n return;\n }\n let appConfig = PDFViewerApplication.appConfig;\n if (PDFViewerApplication.pdfViewer.containsElement(evt.target) ||\n (appConfig.toolbar.container.contains(evt.target) &&\n evt.target !== appConfig.secondaryToolbar.toggleButton)) {\n PDFViewerApplication.secondaryToolbar.close();\n }\n}\n\nfunction webViewerKeyDown(evt) {\n if (PDFViewerApplication.overlayManager.active) {\n return;\n }\n\n let handled = false, ensureViewerFocused = false;\n let cmd = (evt.ctrlKey ? 1 : 0) |\n (evt.altKey ? 2 : 0) |\n (evt.shiftKey ? 4 : 0) |\n (evt.metaKey ? 8 : 0);\n\n let pdfViewer = PDFViewerApplication.pdfViewer;\n let isViewerInPresentationMode = pdfViewer && pdfViewer.isInPresentationMode;\n\n // First, handle the key bindings that are independent whether an input\n // control is selected or not.\n if (cmd === 1 || cmd === 8 || cmd === 5 || cmd === 12) {\n // either CTRL or META key with optional SHIFT.\n switch (evt.keyCode) {\n case 70: // f\n if (!PDFViewerApplication.supportsIntegratedFind) {\n PDFViewerApplication.findBar.open();\n handled = true;\n }\n break;\n case 71: // g\n if (!PDFViewerApplication.supportsIntegratedFind) {\n let findState = PDFViewerApplication.findController.state;\n if (findState) {\n PDFViewerApplication.findController.executeCommand('findagain', {\n query: findState.query,\n phraseSearch: findState.phraseSearch,\n caseSensitive: findState.caseSensitive,\n highlightAll: findState.highlightAll,\n findPrevious: cmd === 5 || cmd === 12,\n });\n }\n handled = true;\n }\n break;\n case 61: // FF/Mac '='\n case 107: // FF '+' and '='\n case 187: // Chrome '+'\n case 171: // FF with German keyboard\n if (!isViewerInPresentationMode) {\n PDFViewerApplication.zoomIn();\n }\n handled = true;\n break;\n case 173: // FF/Mac '-'\n case 109: // FF '-'\n case 189: // Chrome '-'\n if (!isViewerInPresentationMode) {\n PDFViewerApplication.zoomOut();\n }\n handled = true;\n break;\n case 48: // '0'\n case 96: // '0' on Numpad of Swedish keyboard\n if (!isViewerInPresentationMode) {\n // keeping it unhandled (to restore page zoom to 100%)\n setTimeout(function () {\n // ... and resetting the scale after browser adjusts its scale\n pdfViewer.currentScaleValue = DEFAULT_SCALE_VALUE;\n });\n handled = false;\n }\n break;\n\n case 38: // up arrow\n if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n PDFViewerApplication.page = 1;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n case 40: // down arrow\n if (isViewerInPresentationMode ||\n PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n }\n }\n\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n // CTRL or META without shift\n if (cmd === 1 || cmd === 8) {\n switch (evt.keyCode) {\n case 83: // s\n PDFViewerApplication.download();\n handled = true;\n break;\n }\n }\n }\n\n // CTRL+ALT or Option+Command\n if (cmd === 3 || cmd === 10) {\n switch (evt.keyCode) {\n case 80: // p\n PDFViewerApplication.requestPresentationMode();\n handled = true;\n break;\n case 71: // g\n // focuses input#pageNumber field\n PDFViewerApplication.appConfig.toolbar.pageNumber.select();\n handled = true;\n break;\n }\n }\n\n if (handled) {\n if (ensureViewerFocused && !isViewerInPresentationMode) {\n pdfViewer.focus();\n }\n evt.preventDefault();\n return;\n }\n\n // Some shortcuts should not get handled if a control/input element\n // is selected.\n let curElement = document.activeElement || document.querySelector(':focus');\n let curElementTagName = curElement && curElement.tagName.toUpperCase();\n if (curElementTagName === 'INPUT' ||\n curElementTagName === 'TEXTAREA' ||\n curElementTagName === 'SELECT') {\n // Make sure that the secondary toolbar is closed when Escape is pressed.\n if (evt.keyCode !== 27) { // 'Esc'\n return;\n }\n }\n\n if (cmd === 0) { // no control key pressed at all.\n switch (evt.keyCode) {\n case 38: // up arrow\n case 33: // pg up\n case 8: // backspace\n if (!isViewerInPresentationMode &&\n pdfViewer.currentScaleValue !== 'page-fit') {\n break;\n }\n /* in presentation mode */\n /* falls through */\n case 37: // left arrow\n // horizontal scrolling using arrow keys\n if (pdfViewer.isHorizontalScrollbarEnabled) {\n break;\n }\n /* falls through */\n case 75: // 'k'\n case 80: // 'p'\n if (PDFViewerApplication.page > 1) {\n PDFViewerApplication.page--;\n }\n handled = true;\n break;\n case 27: // esc key\n if (PDFViewerApplication.secondaryToolbar.isOpen) {\n PDFViewerApplication.secondaryToolbar.close();\n handled = true;\n }\n if (!PDFViewerApplication.supportsIntegratedFind &&\n PDFViewerApplication.findBar.opened) {\n PDFViewerApplication.findBar.close();\n handled = true;\n }\n break;\n case 40: // down arrow\n case 34: // pg down\n case 32: // spacebar\n if (!isViewerInPresentationMode &&\n pdfViewer.currentScaleValue !== 'page-fit') {\n break;\n }\n /* falls through */\n case 39: // right arrow\n // horizontal scrolling using arrow keys\n if (pdfViewer.isHorizontalScrollbarEnabled) {\n break;\n }\n /* falls through */\n case 74: // 'j'\n case 78: // 'n'\n if (PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n PDFViewerApplication.page++;\n }\n handled = true;\n break;\n\n case 36: // home\n if (isViewerInPresentationMode || PDFViewerApplication.page > 1) {\n PDFViewerApplication.page = 1;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n case 35: // end\n if (isViewerInPresentationMode ||\n PDFViewerApplication.page < PDFViewerApplication.pagesCount) {\n PDFViewerApplication.page = PDFViewerApplication.pagesCount;\n handled = true;\n ensureViewerFocused = true;\n }\n break;\n\n case 83: // 's'\n PDFViewerApplication.pdfCursorTools.switchTool(CursorTool.SELECT);\n break;\n case 72: // 'h'\n PDFViewerApplication.pdfCursorTools.switchTool(CursorTool.HAND);\n break;\n\n case 82: // 'r'\n PDFViewerApplication.rotatePages(90);\n break;\n }\n }\n\n if (cmd === 4) { // shift-key\n switch (evt.keyCode) {\n case 32: // spacebar\n if (!isViewerInPresentationMode &&\n pdfViewer.currentScaleValue !== 'page-fit') {\n break;\n }\n if (PDFViewerApplication.page > 1) {\n PDFViewerApplication.page--;\n }\n handled = true;\n break;\n\n case 82: // 'r'\n PDFViewerApplication.rotatePages(-90);\n break;\n }\n }\n\n if (!handled && !isViewerInPresentationMode) {\n // 33=Page Up 34=Page Down 35=End 36=Home\n // 37=Left 38=Up 39=Right 40=Down\n // 32=Spacebar\n if ((evt.keyCode >= 33 && evt.keyCode <= 40) ||\n (evt.keyCode === 32 && curElementTagName !== 'BUTTON')) {\n ensureViewerFocused = true;\n }\n }\n\n if (cmd === 2) { // alt-key\n switch (evt.keyCode) {\n case 37: // left arrow\n if (isViewerInPresentationMode) {\n PDFViewerApplication.pdfHistory.back();\n handled = true;\n }\n break;\n case 39: // right arrow\n if (isViewerInPresentationMode) {\n PDFViewerApplication.pdfHistory.forward();\n handled = true;\n }\n break;\n }\n }\n\n if (ensureViewerFocused && !pdfViewer.containsElement(curElement)) {\n // The page container is not focused, but a page navigation key has been\n // pressed. Change the focus to the viewer container to make sure that\n // navigation by keyboard works as expected.\n pdfViewer.focus();\n }\n\n if (handled) {\n evt.preventDefault();\n }\n}\n\n/**\n * Converts API PageMode values to the format used by `PDFSidebar`.\n * NOTE: There's also a \"FullScreen\" parameter which is not possible to support,\n * since the Fullscreen API used in browsers requires that entering\n * fullscreen mode only occurs as a result of a user-initiated event.\n * @param {string} mode - The API PageMode value.\n * @returns {number} A value from {SidebarView}.\n */\nfunction apiPageModeToSidebarView(mode) {\n switch (mode) {\n case 'UseNone':\n return SidebarView.NONE;\n case 'UseThumbs':\n return SidebarView.THUMBS;\n case 'UseOutlines':\n return SidebarView.OUTLINE;\n case 'UseAttachments':\n return SidebarView.ATTACHMENTS;\n case 'UseOC':\n // Not implemented, since we don't support Optional Content Groups yet.\n }\n return SidebarView.NONE; // Default value.\n}\n\n/* Abstract factory for the print service. */\nlet PDFPrintServiceFactory = {\n instance: {\n supportsPrinting: false,\n createPrintService() {\n throw new Error('Not implemented: createPrintService');\n },\n },\n};\n\nexport {\n PDFViewerApplication,\n DefaultExternalServices,\n PDFPrintServiceFactory,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/app.js","/* Copyright 2015 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalEventBus } from './dom_events';\nimport { parseQueryString } from './ui_utils';\n\n/**\n * @typedef {Object} PDFLinkServiceOptions\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * Performs navigation functions inside PDF, such as opening specified page,\n * or destination.\n * @implements {IPDFLinkService}\n */\nclass PDFLinkService {\n /**\n * @param {PDFLinkServiceOptions} options\n */\n constructor({ eventBus, } = {}) {\n this.eventBus = eventBus || getGlobalEventBus();\n this.baseUrl = null;\n this.pdfDocument = null;\n this.pdfViewer = null;\n this.pdfHistory = null;\n\n this._pagesRefCache = null;\n }\n\n setDocument(pdfDocument, baseUrl) {\n this.baseUrl = baseUrl;\n this.pdfDocument = pdfDocument;\n this._pagesRefCache = Object.create(null);\n }\n\n setViewer(pdfViewer) {\n this.pdfViewer = pdfViewer;\n }\n\n setHistory(pdfHistory) {\n this.pdfHistory = pdfHistory;\n }\n\n /**\n * @returns {number}\n */\n get pagesCount() {\n return this.pdfDocument ? this.pdfDocument.numPages : 0;\n }\n\n /**\n * @returns {number}\n */\n get page() {\n return this.pdfViewer.currentPageNumber;\n }\n\n /**\n * @param {number} value\n */\n set page(value) {\n this.pdfViewer.currentPageNumber = value;\n }\n\n /**\n * @param {string|Array} dest - The named, or explicit, PDF destination.\n */\n navigateTo(dest) {\n let goToDestination = ({ namedDest, explicitDest, }) => {\n // Dest array looks like that: \n let destRef = explicitDest[0], pageNumber;\n\n if (destRef instanceof Object) {\n pageNumber = this._cachedPageNumber(destRef);\n\n if (pageNumber === null) {\n // Fetch the page reference if it's not yet available. This could\n // only occur during loading, before all pages have been resolved.\n this.pdfDocument.getPageIndex(destRef).then((pageIndex) => {\n this.cachePageRef(pageIndex + 1, destRef);\n goToDestination({ namedDest, explicitDest, });\n }).catch(() => {\n console.error(`PDFLinkService.navigateTo: \"${destRef}\" is not ` +\n `a valid page reference, for dest=\"${dest}\".`);\n });\n return;\n }\n } else if ((destRef | 0) === destRef) { // Integer\n pageNumber = destRef + 1;\n } else {\n console.error(`PDFLinkService.navigateTo: \"${destRef}\" is not ` +\n `a valid destination reference, for dest=\"${dest}\".`);\n return;\n }\n if (!pageNumber || pageNumber < 1 || pageNumber > this.pagesCount) {\n console.error(`PDFLinkService.navigateTo: \"${pageNumber}\" is not ` +\n `a valid page number, for dest=\"${dest}\".`);\n return;\n }\n\n this.pdfViewer.scrollPageIntoView({\n pageNumber,\n destArray: explicitDest,\n });\n\n if (this.pdfHistory) { // Update the browsing history, if enabled.\n this.pdfHistory.push({\n dest: explicitDest,\n hash: namedDest,\n page: pageNumber,\n });\n }\n };\n\n new Promise((resolve, reject) => {\n if (typeof dest === 'string') {\n this.pdfDocument.getDestination(dest).then((destArray) => {\n resolve({\n namedDest: dest,\n explicitDest: destArray,\n });\n });\n return;\n }\n resolve({\n namedDest: '',\n explicitDest: dest,\n });\n }).then((data) => {\n if (!(data.explicitDest instanceof Array)) {\n console.error(`PDFLinkService.navigateTo: \"${data.explicitDest}\" is` +\n ` not a valid destination array, for dest=\"${dest}\".`);\n return;\n }\n goToDestination(data);\n });\n }\n\n /**\n * @param {string|Array} dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n if (typeof dest === 'string') {\n return this.getAnchorUrl('#' + escape(dest));\n }\n if (dest instanceof Array) {\n let str = JSON.stringify(dest);\n return this.getAnchorUrl('#' + escape(str));\n }\n return this.getAnchorUrl('');\n }\n\n /**\n * Prefix the full url on anchor links to make sure that links are resolved\n * relative to the current URL instead of the one defined in .\n * @param {String} anchor The anchor hash, including the #.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(anchor) {\n return (this.baseUrl || '') + anchor;\n }\n\n /**\n * @param {string} hash\n */\n setHash(hash) {\n let pageNumber, dest;\n if (hash.indexOf('=') >= 0) {\n let params = parseQueryString(hash);\n if ('search' in params) {\n this.eventBus.dispatch('findfromurlhash', {\n source: this,\n query: params['search'].replace(/\"/g, ''),\n phraseSearch: (params['phrase'] === 'true'),\n });\n }\n // borrowing syntax from \"Parameters for Opening PDF Files\"\n if ('nameddest' in params) {\n if (this.pdfHistory) {\n this.pdfHistory.updateNextHashParam(params.nameddest);\n }\n this.navigateTo(params.nameddest);\n return;\n }\n if ('page' in params) {\n pageNumber = (params.page | 0) || 1;\n }\n if ('zoom' in params) {\n // Build the destination array.\n let zoomArgs = params.zoom.split(','); // scale,left,top\n let zoomArg = zoomArgs[0];\n let zoomArgNumber = parseFloat(zoomArg);\n\n if (zoomArg.indexOf('Fit') === -1) {\n // If the zoomArg is a number, it has to get divided by 100. If it's\n // a string, it should stay as it is.\n dest = [null, { name: 'XYZ', },\n zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null,\n zoomArgs.length > 2 ? (zoomArgs[2] | 0) : null,\n (zoomArgNumber ? zoomArgNumber / 100 : zoomArg)];\n } else {\n if (zoomArg === 'Fit' || zoomArg === 'FitB') {\n dest = [null, { name: zoomArg, }];\n } else if ((zoomArg === 'FitH' || zoomArg === 'FitBH') ||\n (zoomArg === 'FitV' || zoomArg === 'FitBV')) {\n dest = [null, { name: zoomArg, },\n zoomArgs.length > 1 ? (zoomArgs[1] | 0) : null];\n } else if (zoomArg === 'FitR') {\n if (zoomArgs.length !== 5) {\n console.error(\n 'PDFLinkService.setHash: Not enough parameters for \"FitR\".');\n } else {\n dest = [null, { name: zoomArg, },\n (zoomArgs[1] | 0), (zoomArgs[2] | 0),\n (zoomArgs[3] | 0), (zoomArgs[4] | 0)];\n }\n } else {\n console.error(`PDFLinkService.setHash: \"${zoomArg}\" is not ` +\n 'a valid zoom value.');\n }\n }\n }\n if (dest) {\n this.pdfViewer.scrollPageIntoView({\n pageNumber: pageNumber || this.page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n } else if (pageNumber) {\n this.page = pageNumber; // simple page\n }\n if ('pagemode' in params) {\n this.eventBus.dispatch('pagemode', {\n source: this,\n mode: params.pagemode,\n });\n }\n } else { // Named (or explicit) destination.\n if ((typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) &&\n /^\\d+$/.test(hash) && hash <= this.pagesCount) {\n console.warn('PDFLinkService_setHash: specifying a page number ' +\n 'directly after the hash symbol (#) is deprecated, ' +\n `please use the \"#page=${hash}\" form instead.`);\n this.page = hash | 0;\n }\n\n dest = unescape(hash);\n try {\n dest = JSON.parse(dest);\n\n if (!(dest instanceof Array)) {\n // Avoid incorrectly rejecting a valid named destination, such as\n // e.g. \"4.3\" or \"true\", because `JSON.parse` converted its type.\n dest = dest.toString();\n }\n } catch (ex) {}\n\n if (typeof dest === 'string' || isValidExplicitDestination(dest)) {\n if (this.pdfHistory) {\n this.pdfHistory.updateNextHashParam(dest);\n }\n this.navigateTo(dest);\n return;\n }\n console.error(`PDFLinkService.setHash: \"${unescape(hash)}\" is not ` +\n 'a valid destination.');\n }\n }\n\n /**\n * @param {string} action\n */\n executeNamedAction(action) {\n // See PDF reference, table 8.45 - Named action\n switch (action) {\n case 'GoBack':\n if (this.pdfHistory) {\n this.pdfHistory.back();\n }\n break;\n\n case 'GoForward':\n if (this.pdfHistory) {\n this.pdfHistory.forward();\n }\n break;\n\n case 'NextPage':\n if (this.page < this.pagesCount) {\n this.page++;\n }\n break;\n\n case 'PrevPage':\n if (this.page > 1) {\n this.page--;\n }\n break;\n\n case 'LastPage':\n this.page = this.pagesCount;\n break;\n\n case 'FirstPage':\n this.page = 1;\n break;\n\n default:\n break; // No action according to spec\n }\n\n this.eventBus.dispatch('namedaction', {\n source: this,\n action,\n });\n }\n\n /**\n * @param {Object} params\n */\n onFileAttachmentAnnotation({ id, filename, content, }) {\n this.eventBus.dispatch('fileattachmentannotation', {\n source: this,\n id,\n filename,\n content,\n });\n }\n\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {\n let refStr = pageRef.num + ' ' + pageRef.gen + ' R';\n this._pagesRefCache[refStr] = pageNum;\n }\n\n _cachedPageNumber(pageRef) {\n let refStr = pageRef.num + ' ' + pageRef.gen + ' R';\n return (this._pagesRefCache && this._pagesRefCache[refStr]) || null;\n }\n}\n\nfunction isValidExplicitDestination(dest) {\n if (!(dest instanceof Array)) {\n return false;\n }\n let destLength = dest.length, allowNull = true;\n if (destLength < 2) {\n return false;\n }\n let page = dest[0];\n if (!(typeof page === 'object' &&\n typeof page.num === 'number' && (page.num | 0) === page.num &&\n typeof page.gen === 'number' && (page.gen | 0) === page.gen) &&\n !(typeof page === 'number' && (page | 0) === page && page >= 0)) {\n return false;\n }\n let zoom = dest[1];\n if (!(typeof zoom === 'object' && typeof zoom.name === 'string')) {\n return false;\n }\n switch (zoom.name) {\n case 'XYZ':\n if (destLength !== 5) {\n return false;\n }\n break;\n case 'Fit':\n case 'FitB':\n return destLength === 2;\n case 'FitH':\n case 'FitBH':\n case 'FitV':\n case 'FitBV':\n if (destLength !== 3) {\n return false;\n }\n break;\n case 'FitR':\n if (destLength !== 6) {\n return false;\n }\n allowNull = false;\n break;\n default:\n return false;\n }\n for (let i = 2; i < destLength; i++) {\n let param = dest[i];\n if (!(typeof param === 'number' || (allowNull && param === null))) {\n return false;\n }\n }\n return true;\n}\n\nclass SimpleLinkService {\n /**\n * @returns {number}\n */\n get page() {\n return 0;\n }\n /**\n * @param {number} value\n */\n set page(value) {}\n /**\n * @param dest - The PDF destination object.\n */\n navigateTo(dest) {}\n /**\n * @param dest - The PDF destination object.\n * @returns {string} The hyperlink to the PDF object.\n */\n getDestinationHash(dest) {\n return '#';\n }\n /**\n * @param hash - The PDF parameters/hash.\n * @returns {string} The hyperlink to the PDF object.\n */\n getAnchorUrl(hash) {\n return '#';\n }\n /**\n * @param {string} hash\n */\n setHash(hash) {}\n /**\n * @param {string} action\n */\n executeNamedAction(action) {}\n /**\n * @param {Object} params\n */\n onFileAttachmentAnnotation({ id, filename, content, }) {}\n /**\n * @param {number} pageNum - page number.\n * @param {Object} pageRef - reference to the page.\n */\n cachePageRef(pageNum, pageRef) {}\n}\n\nexport {\n PDFLinkService,\n SimpleLinkService,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_link_service.js","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { GrabToPan } from './grab_to_pan';\n\nconst CursorTool = {\n SELECT: 0, // The default value.\n HAND: 1,\n ZOOM: 2,\n};\n\n/**\n * @typedef {Object} PDFCursorToolsOptions\n * @property {HTMLDivElement} container - The document container.\n * @property {EventBus} eventBus - The application event bus.\n * @property {BasePreferences} preferences - Object for reading/writing\n * persistent settings.\n */\n\nclass PDFCursorTools {\n /**\n * @param {PDFCursorToolsOptions} options\n */\n constructor({ container, eventBus, preferences, }) {\n this.container = container;\n this.eventBus = eventBus;\n\n this.active = CursorTool.SELECT;\n this.activeBeforePresentationMode = null;\n\n this.handTool = new GrabToPan({\n element: this.container,\n });\n\n this._addEventListeners();\n\n Promise.all([\n preferences.get('cursorToolOnLoad'),\n preferences.get('enableHandToolOnLoad')\n ]).then(([cursorToolPref, handToolPref]) => {\n // If the 'cursorToolOnLoad' preference has not been set to a non-default\n // value, attempt to convert the old 'enableHandToolOnLoad' preference.\n // TODO: Remove this conversion after a suitable number of releases.\n if (handToolPref === true) {\n preferences.set('enableHandToolOnLoad', false);\n\n if (cursorToolPref === CursorTool.SELECT) {\n cursorToolPref = CursorTool.HAND;\n preferences.set('cursorToolOnLoad', cursorToolPref).catch(() => { });\n }\n }\n this.switchTool(cursorToolPref);\n }).catch(() => { });\n }\n\n /**\n * @returns {number} One of the values in {CursorTool}.\n */\n get activeTool() {\n return this.active;\n }\n\n /**\n * NOTE: This method is ignored while Presentation Mode is active.\n * @param {number} tool - The cursor mode that should be switched to,\n * must be one of the values in {CursorTool}.\n */\n switchTool(tool) {\n if (this.activeBeforePresentationMode !== null) {\n return; // Cursor tools cannot be used in Presentation Mode.\n }\n if (tool === this.active) {\n return; // The requested tool is already active.\n }\n\n let disableActiveTool = () => {\n switch (this.active) {\n case CursorTool.SELECT:\n break;\n case CursorTool.HAND:\n this.handTool.deactivate();\n break;\n case CursorTool.ZOOM:\n /* falls through */\n }\n };\n\n switch (tool) { // Enable the new cursor tool.\n case CursorTool.SELECT:\n disableActiveTool();\n break;\n case CursorTool.HAND:\n disableActiveTool();\n this.handTool.activate();\n break;\n case CursorTool.ZOOM:\n /* falls through */\n default:\n console.error(`switchTool: \"${tool}\" is an unsupported value.`);\n return;\n }\n // Update the active tool *after* it has been validated above,\n // in order to prevent setting it to an invalid state.\n this.active = tool;\n\n this._dispatchEvent();\n }\n\n /**\n * @private\n */\n _dispatchEvent() {\n this.eventBus.dispatch('cursortoolchanged', {\n source: this,\n tool: this.active,\n });\n }\n\n /**\n * @private\n */\n _addEventListeners() {\n this.eventBus.on('switchcursortool', (evt) => {\n this.switchTool(evt.tool);\n });\n\n this.eventBus.on('presentationmodechanged', (evt) => {\n if (evt.switchInProgress) {\n return;\n }\n let previouslyActive;\n\n if (evt.active) {\n previouslyActive = this.active;\n\n this.switchTool(CursorTool.SELECT);\n this.activeBeforePresentationMode = previouslyActive;\n } else {\n previouslyActive = this.activeBeforePresentationMode;\n\n this.activeBeforePresentationMode = null;\n this.switchTool(previouslyActive);\n }\n });\n }\n}\n\nexport {\n CursorTool,\n PDFCursorTools,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_cursor_tools.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createPromiseCapability } from 'pdfjs-lib';\nimport { scrollIntoView } from './ui_utils';\n\nconst FindState = {\n FOUND: 0,\n NOT_FOUND: 1,\n WRAPPED: 2,\n PENDING: 3,\n};\n\nconst FIND_SCROLL_OFFSET_TOP = -50;\nconst FIND_SCROLL_OFFSET_LEFT = -400;\nconst FIND_TIMEOUT = 250; // ms\n\nconst CHARACTERS_TO_NORMALIZE = {\n '\\u2018': '\\'', // Left single quotation mark\n '\\u2019': '\\'', // Right single quotation mark\n '\\u201A': '\\'', // Single low-9 quotation mark\n '\\u201B': '\\'', // Single high-reversed-9 quotation mark\n '\\u201C': '\"', // Left double quotation mark\n '\\u201D': '\"', // Right double quotation mark\n '\\u201E': '\"', // Double low-9 quotation mark\n '\\u201F': '\"', // Double high-reversed-9 quotation mark\n '\\u00BC': '1/4', // Vulgar fraction one quarter\n '\\u00BD': '1/2', // Vulgar fraction one half\n '\\u00BE': '3/4', // Vulgar fraction three quarters\n};\n\n/**\n * Provides search functionality to find a given string in a PDF document.\n */\nclass PDFFindController {\n constructor({ pdfViewer, }) {\n this.pdfViewer = pdfViewer;\n\n this.onUpdateResultsCount = null;\n this.onUpdateState = null;\n\n this.reset();\n\n // Compile the regular expression for text normalization once.\n let replace = Object.keys(CHARACTERS_TO_NORMALIZE).join('');\n this.normalizationRegex = new RegExp('[' + replace + ']', 'g');\n }\n\n reset() {\n this.startedTextExtraction = false;\n this.extractTextPromises = [];\n this.pendingFindMatches = Object.create(null);\n this.active = false; // If active, find results will be highlighted.\n this.pageContents = []; // Stores the text for each page.\n this.pageMatches = [];\n this.pageMatchesLength = null;\n this.matchCount = 0;\n this.selected = { // Currently selected match.\n pageIdx: -1,\n matchIdx: -1,\n };\n this.offset = { // Where the find algorithm currently is in the document.\n pageIdx: null,\n matchIdx: null,\n };\n this.pagesToSearch = null;\n this.resumePageIdx = null;\n this.state = null;\n this.dirtyMatch = false;\n this.findTimeout = null;\n\n this._firstPagePromise = new Promise((resolve) => {\n this.resolveFirstPage = resolve;\n });\n }\n\n normalize(text) {\n return text.replace(this.normalizationRegex, function (ch) {\n return CHARACTERS_TO_NORMALIZE[ch];\n });\n }\n\n /**\n * Helper for multi-term search that fills the `matchesWithLength` array\n * and handles cases where one search term includes another search term (for\n * example, \"tamed tame\" or \"this is\"). It looks for intersecting terms in\n * the `matches` and keeps elements with a longer match length.\n */\n _prepareMatches(matchesWithLength, matches, matchesLength) {\n function isSubTerm(matchesWithLength, currentIndex) {\n let currentElem = matchesWithLength[currentIndex];\n let nextElem = matchesWithLength[currentIndex + 1];\n\n // Check for cases like \"TAMEd TAME\".\n if (currentIndex < matchesWithLength.length - 1 &&\n currentElem.match === nextElem.match) {\n currentElem.skipped = true;\n return true;\n }\n\n // Check for cases like \"thIS IS\".\n for (let i = currentIndex - 1; i >= 0; i--) {\n let prevElem = matchesWithLength[i];\n if (prevElem.skipped) {\n continue;\n }\n if (prevElem.match + prevElem.matchLength < currentElem.match) {\n break;\n }\n if (prevElem.match + prevElem.matchLength >=\n currentElem.match + currentElem.matchLength) {\n currentElem.skipped = true;\n return true;\n }\n }\n return false;\n }\n\n // Sort the array of `{ match: , matchLength: }`\n // objects on increasing index first and on the length otherwise.\n matchesWithLength.sort(function(a, b) {\n return a.match === b.match ? a.matchLength - b.matchLength :\n a.match - b.match;\n });\n for (let i = 0, len = matchesWithLength.length; i < len; i++) {\n if (isSubTerm(matchesWithLength, i)) {\n continue;\n }\n matches.push(matchesWithLength[i].match);\n matchesLength.push(matchesWithLength[i].matchLength);\n }\n }\n\n calcFindPhraseMatch(query, pageIndex, pageContent) {\n let matches = [];\n let queryLen = query.length;\n let matchIdx = -queryLen;\n while (true) {\n matchIdx = pageContent.indexOf(query, matchIdx + queryLen);\n if (matchIdx === -1) {\n break;\n }\n matches.push(matchIdx);\n }\n this.pageMatches[pageIndex] = matches;\n }\n\n calcFindWordMatch(query, pageIndex, pageContent) {\n let matchesWithLength = [];\n // Divide the query into pieces and search for text in each piece.\n let queryArray = query.match(/\\S+/g);\n for (let i = 0, len = queryArray.length; i < len; i++) {\n let subquery = queryArray[i];\n let subqueryLen = subquery.length;\n let matchIdx = -subqueryLen;\n while (true) {\n matchIdx = pageContent.indexOf(subquery, matchIdx + subqueryLen);\n if (matchIdx === -1) {\n break;\n }\n // Other searches do not, so we store the length.\n matchesWithLength.push({\n match: matchIdx,\n matchLength: subqueryLen,\n skipped: false,\n });\n }\n }\n\n // Prepare arrays for storing the matches.\n if (!this.pageMatchesLength) {\n this.pageMatchesLength = [];\n }\n this.pageMatchesLength[pageIndex] = [];\n this.pageMatches[pageIndex] = [];\n\n // Sort `matchesWithLength`, remove intersecting terms and put the result\n // into the two arrays.\n this._prepareMatches(matchesWithLength, this.pageMatches[pageIndex],\n this.pageMatchesLength[pageIndex]);\n }\n\n calcFindMatch(pageIndex) {\n let pageContent = this.normalize(this.pageContents[pageIndex]);\n let query = this.normalize(this.state.query);\n let caseSensitive = this.state.caseSensitive;\n let phraseSearch = this.state.phraseSearch;\n let queryLen = query.length;\n\n if (queryLen === 0) {\n // Do nothing: the matches should be wiped out already.\n return;\n }\n\n if (!caseSensitive) {\n pageContent = pageContent.toLowerCase();\n query = query.toLowerCase();\n }\n\n if (phraseSearch) {\n this.calcFindPhraseMatch(query, pageIndex, pageContent);\n } else {\n this.calcFindWordMatch(query, pageIndex, pageContent);\n }\n\n this.updatePage(pageIndex);\n if (this.resumePageIdx === pageIndex) {\n this.resumePageIdx = null;\n this.nextPageMatch();\n }\n\n // Update the match count.\n if (this.pageMatches[pageIndex].length > 0) {\n this.matchCount += this.pageMatches[pageIndex].length;\n this.updateUIResultsCount();\n }\n }\n\n extractText() {\n if (this.startedTextExtraction) {\n return;\n }\n this.startedTextExtraction = true;\n this.pageContents.length = 0;\n\n let promise = Promise.resolve();\n for (let i = 0, ii = this.pdfViewer.pagesCount; i < ii; i++) {\n let extractTextCapability = createPromiseCapability();\n this.extractTextPromises[i] = extractTextCapability.promise;\n\n promise = promise.then(() => {\n return this.pdfViewer.getPageTextContent(i).then((textContent) => {\n let textItems = textContent.items;\n let strBuf = [];\n\n for (let j = 0, jj = textItems.length; j < jj; j++) {\n strBuf.push(textItems[j].str);\n }\n // Store the pageContent as a string.\n this.pageContents[i] = strBuf.join('');\n extractTextCapability.resolve(i);\n }, (reason) => {\n console.error(`Unable to get page ${i + 1} text content`, reason);\n // Page error -- assuming no text content.\n this.pageContents[i] = '';\n extractTextCapability.resolve(i);\n });\n });\n }\n }\n\n executeCommand(cmd, state) {\n if (this.state === null || cmd !== 'findagain') {\n this.dirtyMatch = true;\n }\n this.state = state;\n this.updateUIState(FindState.PENDING);\n\n this._firstPagePromise.then(() => {\n this.extractText();\n\n clearTimeout(this.findTimeout);\n if (cmd === 'find') {\n // Trigger the find action with a small delay to avoid starting the\n // search when the user is still typing (saving resources).\n this.findTimeout = setTimeout(this.nextMatch.bind(this), FIND_TIMEOUT);\n } else {\n this.nextMatch();\n }\n });\n }\n\n updatePage(index) {\n if (this.selected.pageIdx === index) {\n // If the page is selected, scroll the page into view, which triggers\n // rendering the page, which adds the textLayer. Once the textLayer is\n // build, it will scroll onto the selected match.\n this.pdfViewer.currentPageNumber = index + 1;\n }\n\n let page = this.pdfViewer.getPageView(index);\n if (page.textLayer) {\n page.textLayer.updateMatches();\n }\n }\n\n nextMatch() {\n let previous = this.state.findPrevious;\n let currentPageIndex = this.pdfViewer.currentPageNumber - 1;\n let numPages = this.pdfViewer.pagesCount;\n\n this.active = true;\n\n if (this.dirtyMatch) {\n // Need to recalculate the matches, reset everything.\n this.dirtyMatch = false;\n this.selected.pageIdx = this.selected.matchIdx = -1;\n this.offset.pageIdx = currentPageIndex;\n this.offset.matchIdx = null;\n this.hadMatch = false;\n this.resumePageIdx = null;\n this.pageMatches = [];\n this.matchCount = 0;\n this.pageMatchesLength = null;\n\n for (let i = 0; i < numPages; i++) {\n // Wipe out any previously highlighted matches.\n this.updatePage(i);\n\n // Start finding the matches as soon as the text is extracted.\n if (!(i in this.pendingFindMatches)) {\n this.pendingFindMatches[i] = true;\n this.extractTextPromises[i].then((pageIdx) => {\n delete this.pendingFindMatches[pageIdx];\n this.calcFindMatch(pageIdx);\n });\n }\n }\n }\n\n // If there's no query there's no point in searching.\n if (this.state.query === '') {\n this.updateUIState(FindState.FOUND);\n return;\n }\n\n // If we're waiting on a page, we return since we can't do anything else.\n if (this.resumePageIdx) {\n return;\n }\n\n let offset = this.offset;\n // Keep track of how many pages we should maximally iterate through.\n this.pagesToSearch = numPages;\n // If there's already a `matchIdx` that means we are iterating through a\n // page's matches.\n if (offset.matchIdx !== null) {\n let numPageMatches = this.pageMatches[offset.pageIdx].length;\n if ((!previous && offset.matchIdx + 1 < numPageMatches) ||\n (previous && offset.matchIdx > 0)) {\n // The simple case; we just have advance the matchIdx to select\n // the next match on the page.\n this.hadMatch = true;\n offset.matchIdx = (previous ? offset.matchIdx - 1 :\n offset.matchIdx + 1);\n this.updateMatch(true);\n return;\n }\n // We went beyond the current page's matches, so we advance to\n // the next page.\n this.advanceOffsetPage(previous);\n }\n // Start searching through the page.\n this.nextPageMatch();\n }\n\n matchesReady(matches) {\n let offset = this.offset;\n let numMatches = matches.length;\n let previous = this.state.findPrevious;\n\n if (numMatches) {\n // There were matches for the page, so initialize `matchIdx`.\n this.hadMatch = true;\n offset.matchIdx = (previous ? numMatches - 1 : 0);\n this.updateMatch(true);\n return true;\n }\n // No matches, so attempt to search the next page.\n this.advanceOffsetPage(previous);\n if (offset.wrapped) {\n offset.matchIdx = null;\n if (this.pagesToSearch < 0) {\n // No point in wrapping again, there were no matches.\n this.updateMatch(false);\n // While matches were not found, searching for a page\n // with matches should nevertheless halt.\n return true;\n }\n }\n // Matches were not found (and searching is not done).\n return false;\n }\n\n /**\n * Called from the text layer when match presentation is updated.\n *\n * @param {number} pageIndex - The index of the page.\n * @param {number} matchIndex - The index of the match.\n * @param {Array} elements - Text layer `div` elements.\n * @param {number} beginIdx - Start index of the `div` array for the match.\n */\n updateMatchPosition(pageIndex, matchIndex, elements, beginIdx) {\n if (this.selected.matchIdx === matchIndex &&\n this.selected.pageIdx === pageIndex) {\n let spot = {\n top: FIND_SCROLL_OFFSET_TOP,\n left: FIND_SCROLL_OFFSET_LEFT,\n };\n scrollIntoView(elements[beginIdx], spot,\n /* skipOverflowHiddenElements = */ true);\n }\n }\n\n nextPageMatch() {\n if (this.resumePageIdx !== null) {\n console.error('There can only be one pending page.');\n }\n\n let matches = null;\n do {\n let pageIdx = this.offset.pageIdx;\n matches = this.pageMatches[pageIdx];\n if (!matches) {\n // The matches don't exist yet for processing by `matchesReady`,\n // so set a resume point for when they do exist.\n this.resumePageIdx = pageIdx;\n break;\n }\n } while (!this.matchesReady(matches));\n }\n\n advanceOffsetPage(previous) {\n let offset = this.offset;\n let numPages = this.extractTextPromises.length;\n offset.pageIdx = (previous ? offset.pageIdx - 1 : offset.pageIdx + 1);\n offset.matchIdx = null;\n\n this.pagesToSearch--;\n\n if (offset.pageIdx >= numPages || offset.pageIdx < 0) {\n offset.pageIdx = (previous ? numPages - 1 : 0);\n offset.wrapped = true;\n }\n }\n\n updateMatch(found = false) {\n let state = FindState.NOT_FOUND;\n let wrapped = this.offset.wrapped;\n this.offset.wrapped = false;\n\n if (found) {\n let previousPage = this.selected.pageIdx;\n this.selected.pageIdx = this.offset.pageIdx;\n this.selected.matchIdx = this.offset.matchIdx;\n state = (wrapped ? FindState.WRAPPED : FindState.FOUND);\n\n // Update the currently selected page to wipe out any selected matches.\n if (previousPage !== -1 && previousPage !== this.selected.pageIdx) {\n this.updatePage(previousPage);\n }\n }\n\n this.updateUIState(state, this.state.findPrevious);\n if (this.selected.pageIdx !== -1) {\n this.updatePage(this.selected.pageIdx);\n }\n }\n\n updateUIResultsCount() {\n if (this.onUpdateResultsCount) {\n this.onUpdateResultsCount(this.matchCount);\n }\n }\n\n updateUIState(state, previous) {\n if (this.onUpdateState) {\n this.onUpdateState(state, previous, this.matchCount);\n }\n }\n}\n\nexport {\n FindState,\n PDFFindController,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_find_controller.js","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { DefaultExternalServices, PDFViewerApplication } from './app';\nimport { BasePreferences } from './preferences';\nimport { DownloadManager } from './download_manager';\nimport { GenericL10n } from './genericl10n';\nimport { PDFJS } from 'pdfjs-lib';\n\nif (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('GENERIC')) {\n throw new Error('Module \"pdfjs-web/genericcom\" shall not be used outside ' +\n 'GENERIC build.');\n}\n\nvar GenericCom = {};\n\nclass GenericPreferences extends BasePreferences {\n _writeToStorage(prefObj) {\n return new Promise(function(resolve) {\n localStorage.setItem('pdfjs.preferences', JSON.stringify(prefObj));\n resolve();\n });\n }\n\n _readFromStorage(prefObj) {\n return new Promise(function(resolve) {\n var readPrefs = JSON.parse(localStorage.getItem('pdfjs.preferences'));\n resolve(readPrefs);\n });\n }\n}\n\nvar GenericExternalServices = Object.create(DefaultExternalServices);\nGenericExternalServices.createDownloadManager = function() {\n return new DownloadManager();\n};\nGenericExternalServices.createPreferences = function() {\n return new GenericPreferences();\n};\nGenericExternalServices.createL10n = function () {\n return new GenericL10n(PDFJS.locale);\n};\nPDFViewerApplication.externalServices = GenericExternalServices;\n\nexport {\n GenericCom,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/genericcom.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CSS_UNITS, NullL10n } from './ui_utils';\nimport { PDFPrintServiceFactory, PDFViewerApplication } from './app';\nimport { PDFJS } from 'pdfjs-lib';\n\nlet activeService = null;\nlet overlayManager = null;\n\n// Renders the page to the canvas of the given print service, and returns\n// the suggested dimensions of the output page.\nfunction renderPage(activeServiceOnEntry, pdfDocument, pageNumber, size) {\n var scratchCanvas = activeService.scratchCanvas;\n\n // The size of the canvas in pixels for printing.\n var PRINT_RESOLUTION = 150;\n var PRINT_UNITS = PRINT_RESOLUTION / 72.0;\n scratchCanvas.width = Math.floor(size.width * PRINT_UNITS);\n scratchCanvas.height = Math.floor(size.height * PRINT_UNITS);\n\n // The physical size of the img as specified by the PDF document.\n var width = Math.floor(size.width * CSS_UNITS) + 'px';\n var height = Math.floor(size.height * CSS_UNITS) + 'px';\n\n var ctx = scratchCanvas.getContext('2d');\n ctx.save();\n ctx.fillStyle = 'rgb(255, 255, 255)';\n ctx.fillRect(0, 0, scratchCanvas.width, scratchCanvas.height);\n ctx.restore();\n\n return pdfDocument.getPage(pageNumber).then(function (pdfPage) {\n var renderContext = {\n canvasContext: ctx,\n transform: [PRINT_UNITS, 0, 0, PRINT_UNITS, 0, 0],\n viewport: pdfPage.getViewport(1, size.rotation),\n intent: 'print',\n };\n return pdfPage.render(renderContext).promise;\n }).then(function () {\n return {\n width,\n height,\n };\n });\n}\n\nfunction PDFPrintService(pdfDocument, pagesOverview, printContainer, l10n) {\n this.pdfDocument = pdfDocument;\n this.pagesOverview = pagesOverview;\n this.printContainer = printContainer;\n this.l10n = l10n || NullL10n;\n this.currentPage = -1;\n // The temporary canvas where renderPage paints one page at a time.\n this.scratchCanvas = document.createElement('canvas');\n}\n\nPDFPrintService.prototype = {\n layout() {\n this.throwIfInactive();\n\n var body = document.querySelector('body');\n body.setAttribute('data-pdfjsprinting', true);\n\n var hasEqualPageSizes = this.pagesOverview.every(function (size) {\n return size.width === this.pagesOverview[0].width &&\n size.height === this.pagesOverview[0].height;\n }, this);\n if (!hasEqualPageSizes) {\n console.warn('Not all pages have the same size. The printed ' +\n 'result may be incorrect!');\n }\n\n // Insert a @page + size rule to make sure that the page size is correctly\n // set. Note that we assume that all pages have the same size, because\n // variable-size pages are not supported yet (e.g. in Chrome & Firefox).\n // TODO(robwu): Use named pages when size calculation bugs get resolved\n // (e.g. https://crbug.com/355116) AND when support for named pages is\n // added (http://www.w3.org/TR/css3-page/#using-named-pages).\n // In browsers where @page + size is not supported (such as Firefox,\n // https://bugzil.la/851441), the next stylesheet will be ignored and the\n // user has to select the correct paper size in the UI if wanted.\n this.pageStyleSheet = document.createElement('style');\n var pageSize = this.pagesOverview[0];\n this.pageStyleSheet.textContent =\n // \"size: \" is what we need. But also add \"A4\" because\n // Firefox incorrectly reports support for the other value.\n '@supports ((size:A4) and (size:1pt 1pt)) {' +\n '@page { size: ' + pageSize.width + 'pt ' + pageSize.height + 'pt;}' +\n '}';\n body.appendChild(this.pageStyleSheet);\n },\n\n destroy() {\n if (activeService !== this) {\n // |activeService| cannot be replaced without calling destroy() first,\n // so if it differs then an external consumer has a stale reference to\n // us.\n return;\n }\n this.printContainer.textContent = '';\n if (this.pageStyleSheet && this.pageStyleSheet.parentNode) {\n this.pageStyleSheet.parentNode.removeChild(this.pageStyleSheet);\n this.pageStyleSheet = null;\n }\n this.scratchCanvas.width = this.scratchCanvas.height = 0;\n this.scratchCanvas = null;\n activeService = null;\n ensureOverlay().then(function () {\n if (overlayManager.active !== 'printServiceOverlay') {\n return; // overlay was already closed\n }\n overlayManager.close('printServiceOverlay');\n });\n },\n\n renderPages() {\n var pageCount = this.pagesOverview.length;\n var renderNextPage = (resolve, reject) => {\n this.throwIfInactive();\n if (++this.currentPage >= pageCount) {\n renderProgress(pageCount, pageCount, this.l10n);\n resolve();\n return;\n }\n var index = this.currentPage;\n renderProgress(index, pageCount, this.l10n);\n renderPage(this, this.pdfDocument, index + 1, this.pagesOverview[index])\n .then(this.useRenderedPage.bind(this))\n .then(function () {\n renderNextPage(resolve, reject);\n }, reject);\n };\n return new Promise(renderNextPage);\n },\n\n useRenderedPage(printItem) {\n this.throwIfInactive();\n var img = document.createElement('img');\n img.style.width = printItem.width;\n img.style.height = printItem.height;\n\n var scratchCanvas = this.scratchCanvas;\n if (('toBlob' in scratchCanvas) && !PDFJS.disableCreateObjectURL) {\n scratchCanvas.toBlob(function (blob) {\n img.src = URL.createObjectURL(blob);\n });\n } else {\n img.src = scratchCanvas.toDataURL();\n }\n\n var wrapper = document.createElement('div');\n wrapper.appendChild(img);\n this.printContainer.appendChild(wrapper);\n\n return new Promise(function (resolve, reject) {\n img.onload = resolve;\n img.onerror = reject;\n });\n },\n\n performPrint() {\n this.throwIfInactive();\n return new Promise((resolve) => {\n // Push window.print in the macrotask queue to avoid being affected by\n // the deprecation of running print() code in a microtask, see\n // https://github.com/mozilla/pdf.js/issues/7547.\n setTimeout(() => {\n if (!this.active) {\n resolve();\n return;\n }\n print.call(window);\n // Delay promise resolution in case print() was not synchronous.\n setTimeout(resolve, 20); // Tidy-up.\n }, 0);\n });\n },\n\n get active() {\n return this === activeService;\n },\n\n throwIfInactive() {\n if (!this.active) {\n throw new Error('This print request was cancelled or completed.');\n }\n },\n};\n\n\nvar print = window.print;\nwindow.print = function print() {\n if (activeService) {\n console.warn('Ignored window.print() because of a pending print job.');\n return;\n }\n ensureOverlay().then(function () {\n if (activeService) {\n overlayManager.open('printServiceOverlay');\n }\n });\n\n try {\n dispatchEvent('beforeprint');\n } finally {\n if (!activeService) {\n console.error('Expected print service to be initialized.');\n ensureOverlay().then(function () {\n if (overlayManager.active === 'printServiceOverlay') {\n overlayManager.close('printServiceOverlay');\n }\n });\n return; // eslint-disable-line no-unsafe-finally\n }\n var activeServiceOnEntry = activeService;\n activeService.renderPages().then(function () {\n return activeServiceOnEntry.performPrint();\n }).catch(function () {\n // Ignore any error messages.\n }).then(function () {\n // aborts acts on the \"active\" print request, so we need to check\n // whether the print request (activeServiceOnEntry) is still active.\n // Without the check, an unrelated print request (created after aborting\n // this print request while the pages were being generated) would be\n // aborted.\n if (activeServiceOnEntry.active) {\n abort();\n }\n });\n }\n};\n\nfunction dispatchEvent(eventType) {\n var event = document.createEvent('CustomEvent');\n event.initCustomEvent(eventType, false, false, 'custom');\n window.dispatchEvent(event);\n}\n\nfunction abort() {\n if (activeService) {\n activeService.destroy();\n dispatchEvent('afterprint');\n }\n}\n\nfunction renderProgress(index, total, l10n) {\n var progressContainer = document.getElementById('printServiceOverlay');\n var progress = Math.round(100 * index / total);\n var progressBar = progressContainer.querySelector('progress');\n var progressPerc = progressContainer.querySelector('.relative-progress');\n progressBar.value = progress;\n l10n.get('print_progress_percent', { progress, }, progress + '%').\n then((msg) => {\n progressPerc.textContent = msg;\n });\n}\n\nvar hasAttachEvent = !!document.attachEvent;\n\nwindow.addEventListener('keydown', function(event) {\n // Intercept Cmd/Ctrl + P in all browsers.\n // Also intercept Cmd/Ctrl + Shift + P in Chrome and Opera\n if (event.keyCode === /* P= */ 80 && (event.ctrlKey || event.metaKey) &&\n !event.altKey && (!event.shiftKey || window.chrome || window.opera)) {\n window.print();\n if (hasAttachEvent) {\n // Only attachEvent can cancel Ctrl + P dialog in IE <=10\n // attachEvent is gone in IE11, so the dialog will re-appear in IE11.\n return;\n }\n event.preventDefault();\n if (event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n } else {\n event.stopPropagation();\n }\n return;\n }\n}, true);\nif (hasAttachEvent) {\n document.attachEvent('onkeydown', function(event) {\n event = event || window.event;\n if (event.keyCode === /* P= */ 80 && event.ctrlKey) {\n event.keyCode = 0;\n return false;\n }\n });\n}\n\nif ('onbeforeprint' in window) {\n // Do not propagate before/afterprint events when they are not triggered\n // from within this polyfill. (FF/IE).\n var stopPropagationIfNeeded = function(event) {\n if (event.detail !== 'custom' && event.stopImmediatePropagation) {\n event.stopImmediatePropagation();\n }\n };\n window.addEventListener('beforeprint', stopPropagationIfNeeded);\n window.addEventListener('afterprint', stopPropagationIfNeeded);\n}\n\nvar overlayPromise;\nfunction ensureOverlay() {\n if (!overlayPromise) {\n overlayManager = PDFViewerApplication.overlayManager;\n if (!overlayManager) {\n throw new Error('The overlay manager has not yet been initialized.');\n }\n\n overlayPromise = overlayManager.register('printServiceOverlay',\n document.getElementById('printServiceOverlay'), abort, true);\n document.getElementById('printCancel').onclick = abort;\n }\n return overlayPromise;\n}\n\nPDFPrintServiceFactory.instance = {\n supportsPrinting: true,\n\n createPrintService(pdfDocument, pagesOverview, printContainer, l10n) {\n if (activeService) {\n throw new Error('The print service is created and active.');\n }\n activeService = new PDFPrintService(pdfDocument, pagesOverview,\n printContainer, l10n);\n return activeService;\n },\n};\n\nexport {\n PDFPrintService,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_print_service.js","/**\n * Copyright (c) 2011-2013 Fabien Cazenave, Mozilla.\n *\n * Permission is hereby granted, free of charge, to any person obtaining a copy\n * of this software and associated documentation files (the \"Software\"), to\n * deal in the Software without restriction, including without limitation the\n * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or\n * sell copies of the Software, and to permit persons to whom the Software is\n * furnished to do so, subject to the following conditions:\n *\n * The above copyright notice and this permission notice shall be included in\n * all copies or substantial portions of the Software.\n *\n * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING\n * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS\n * IN THE SOFTWARE.\n */\n/*\n Additional modifications for PDF.js project:\n - Disables language initialization on page loading.\n - Disables document translation on page loading.\n - Removes consoleWarn and consoleLog and use console.log/warn directly.\n - Removes window._ assignment.\n - Remove compatibility code for OldIE.\n*/\n\n/*jshint browser: true, devel: true, es5: true, globalstrict: true */\n'use strict';\n\ndocument.webL10n = (function(window, document, undefined) {\n var gL10nData = {};\n var gTextData = '';\n var gTextProp = 'textContent';\n var gLanguage = '';\n var gMacros = {};\n var gReadyState = 'loading';\n\n\n /**\n * Synchronously loading l10n resources significantly minimizes flickering\n * from displaying the app with non-localized strings and then updating the\n * strings. Although this will block all script execution on this page, we\n * expect that the l10n resources are available locally on flash-storage.\n *\n * As synchronous XHR is generally considered as a bad idea, we're still\n * loading l10n resources asynchronously -- but we keep this in a setting,\n * just in case... and applications using this library should hide their\n * content until the `localized' event happens.\n */\n\n var gAsyncResourceLoading = true; // read-only\n\n\n /**\n * DOM helpers for the so-called \"HTML API\".\n *\n * These functions are written for modern browsers. For old versions of IE,\n * they're overridden in the 'startup' section at the end of this file.\n */\n\n function getL10nResourceLinks() {\n return document.querySelectorAll('link[type=\"application/l10n\"]');\n }\n\n function getL10nDictionary() {\n var script = document.querySelector('script[type=\"application/l10n\"]');\n // TODO: support multiple and external JSON dictionaries\n return script ? JSON.parse(script.innerHTML) : null;\n }\n\n function getTranslatableChildren(element) {\n return element ? element.querySelectorAll('*[data-l10n-id]') : [];\n }\n\n function getL10nAttributes(element) {\n if (!element)\n return {};\n\n var l10nId = element.getAttribute('data-l10n-id');\n var l10nArgs = element.getAttribute('data-l10n-args');\n var args = {};\n if (l10nArgs) {\n try {\n args = JSON.parse(l10nArgs);\n } catch (e) {\n console.warn('could not parse arguments for #' + l10nId);\n }\n }\n return { id: l10nId, args: args };\n }\n\n function fireL10nReadyEvent(lang) {\n var evtObject = document.createEvent('Event');\n evtObject.initEvent('localized', true, false);\n evtObject.language = lang;\n document.dispatchEvent(evtObject);\n }\n\n function xhrLoadText(url, onSuccess, onFailure) {\n onSuccess = onSuccess || function _onSuccess(data) {};\n onFailure = onFailure || function _onFailure() {};\n\n var xhr = new XMLHttpRequest();\n xhr.open('GET', url, gAsyncResourceLoading);\n if (xhr.overrideMimeType) {\n xhr.overrideMimeType('text/plain; charset=utf-8');\n }\n xhr.onreadystatechange = function() {\n if (xhr.readyState == 4) {\n if (xhr.status == 200 || xhr.status === 0) {\n onSuccess(xhr.responseText);\n } else {\n onFailure();\n }\n }\n };\n xhr.onerror = onFailure;\n xhr.ontimeout = onFailure;\n\n // in Firefox OS with the app:// protocol, trying to XHR a non-existing\n // URL will raise an exception here -- hence this ugly try...catch.\n try {\n xhr.send(null);\n } catch (e) {\n onFailure();\n }\n }\n\n\n /**\n * l10n resource parser:\n * - reads (async XHR) the l10n resource matching `lang';\n * - imports linked resources (synchronously) when specified;\n * - parses the text data (fills `gL10nData' and `gTextData');\n * - triggers success/failure callbacks when done.\n *\n * @param {string} href\n * URL of the l10n resource to parse.\n *\n * @param {string} lang\n * locale (language) to parse. Must be a lowercase string.\n *\n * @param {Function} successCallback\n * triggered when the l10n resource has been successully parsed.\n *\n * @param {Function} failureCallback\n * triggered when the an error has occured.\n *\n * @return {void}\n * uses the following global variables: gL10nData, gTextData, gTextProp.\n */\n\n function parseResource(href, lang, successCallback, failureCallback) {\n var baseURL = href.replace(/[^\\/]*$/, '') || './';\n\n // handle escaped characters (backslashes) in a string\n function evalString(text) {\n if (text.lastIndexOf('\\\\') < 0)\n return text;\n return text.replace(/\\\\\\\\/g, '\\\\')\n .replace(/\\\\n/g, '\\n')\n .replace(/\\\\r/g, '\\r')\n .replace(/\\\\t/g, '\\t')\n .replace(/\\\\b/g, '\\b')\n .replace(/\\\\f/g, '\\f')\n .replace(/\\\\{/g, '{')\n .replace(/\\\\}/g, '}')\n .replace(/\\\\\"/g, '\"')\n .replace(/\\\\'/g, \"'\");\n }\n\n // parse *.properties text data into an l10n dictionary\n // If gAsyncResourceLoading is false, then the callback will be called\n // synchronously. Otherwise it is called asynchronously.\n function parseProperties(text, parsedPropertiesCallback) {\n var dictionary = {};\n\n // token expressions\n var reBlank = /^\\s*|\\s*$/;\n var reComment = /^\\s*#|^\\s*$/;\n var reSection = /^\\s*\\[(.*)\\]\\s*$/;\n var reImport = /^\\s*@import\\s+url\\((.*)\\)\\s*$/i;\n var reSplit = /^([^=\\s]*)\\s*=\\s*(.+)$/; // TODO: escape EOLs with '\\'\n\n // parse the *.properties file into an associative array\n function parseRawLines(rawText, extendedSyntax, parsedRawLinesCallback) {\n var entries = rawText.replace(reBlank, '').split(/[\\r\\n]+/);\n var currentLang = '*';\n var genericLang = lang.split('-', 1)[0];\n var skipLang = false;\n var match = '';\n\n function nextEntry() {\n // Use infinite loop instead of recursion to avoid reaching the\n // maximum recursion limit for content with many lines.\n while (true) {\n if (!entries.length) {\n parsedRawLinesCallback();\n return;\n }\n var line = entries.shift();\n\n // comment or blank line?\n if (reComment.test(line))\n continue;\n\n // the extended syntax supports [lang] sections and @import rules\n if (extendedSyntax) {\n match = reSection.exec(line);\n if (match) { // section start?\n // RFC 4646, section 4.4, \"All comparisons MUST be performed\n // in a case-insensitive manner.\"\n\n currentLang = match[1].toLowerCase();\n skipLang = (currentLang !== '*') &&\n (currentLang !== lang) && (currentLang !== genericLang);\n continue;\n } else if (skipLang) {\n continue;\n }\n match = reImport.exec(line);\n if (match) { // @import rule?\n loadImport(baseURL + match[1], nextEntry);\n return;\n }\n }\n\n // key-value pair\n var tmp = line.match(reSplit);\n if (tmp && tmp.length == 3) {\n dictionary[tmp[1]] = evalString(tmp[2]);\n }\n }\n }\n nextEntry();\n }\n\n // import another *.properties file\n function loadImport(url, callback) {\n xhrLoadText(url, function(content) {\n parseRawLines(content, false, callback); // don't allow recursive imports\n }, function () {\n console.warn(url + ' not found.');\n callback();\n });\n }\n\n // fill the dictionary\n parseRawLines(text, true, function() {\n parsedPropertiesCallback(dictionary);\n });\n }\n\n // load and parse l10n data (warning: global variables are used here)\n xhrLoadText(href, function(response) {\n gTextData += response; // mostly for debug\n\n // parse *.properties text data into an l10n dictionary\n parseProperties(response, function(data) {\n\n // find attribute descriptions, if any\n for (var key in data) {\n var id, prop, index = key.lastIndexOf('.');\n if (index > 0) { // an attribute has been specified\n id = key.substring(0, index);\n prop = key.substr(index + 1);\n } else { // no attribute: assuming text content by default\n id = key;\n prop = gTextProp;\n }\n if (!gL10nData[id]) {\n gL10nData[id] = {};\n }\n gL10nData[id][prop] = data[key];\n }\n\n // trigger callback\n if (successCallback) {\n successCallback();\n }\n });\n }, failureCallback);\n }\n\n // load and parse all resources for the specified locale\n function loadLocale(lang, callback) {\n // RFC 4646, section 2.1 states that language tags have to be treated as\n // case-insensitive. Convert to lowercase for case-insensitive comparisons.\n if (lang) {\n lang = lang.toLowerCase();\n }\n\n callback = callback || function _callback() {};\n\n clear();\n gLanguage = lang;\n\n // check all nodes\n // and load the resource files\n var langLinks = getL10nResourceLinks();\n var langCount = langLinks.length;\n if (langCount === 0) {\n // we might have a pre-compiled dictionary instead\n var dict = getL10nDictionary();\n if (dict && dict.locales && dict.default_locale) {\n console.log('using the embedded JSON directory, early way out');\n gL10nData = dict.locales[lang];\n if (!gL10nData) {\n var defaultLocale = dict.default_locale.toLowerCase();\n for (var anyCaseLang in dict.locales) {\n anyCaseLang = anyCaseLang.toLowerCase();\n if (anyCaseLang === lang) {\n gL10nData = dict.locales[lang];\n break;\n } else if (anyCaseLang === defaultLocale) {\n gL10nData = dict.locales[defaultLocale];\n }\n }\n }\n callback();\n } else {\n console.log('no resource to load, early way out');\n }\n // early way out\n fireL10nReadyEvent(lang);\n gReadyState = 'complete';\n return;\n }\n\n // start the callback when all resources are loaded\n var onResourceLoaded = null;\n var gResourceCount = 0;\n onResourceLoaded = function() {\n gResourceCount++;\n if (gResourceCount >= langCount) {\n callback();\n fireL10nReadyEvent(lang);\n gReadyState = 'complete';\n }\n };\n\n // load all resource files\n function L10nResourceLink(link) {\n var href = link.href;\n // Note: If |gAsyncResourceLoading| is false, then the following callbacks\n // are synchronously called.\n this.load = function(lang, callback) {\n parseResource(href, lang, callback, function() {\n console.warn(href + ' not found.');\n // lang not found, used default resource instead\n console.warn('\"' + lang + '\" resource not found');\n gLanguage = '';\n // Resource not loaded, but we still need to call the callback.\n callback();\n });\n };\n }\n\n for (var i = 0; i < langCount; i++) {\n var resource = new L10nResourceLink(langLinks[i]);\n resource.load(lang, onResourceLoaded);\n }\n }\n\n // clear all l10n data\n function clear() {\n gL10nData = {};\n gTextData = '';\n gLanguage = '';\n // TODO: clear all non predefined macros.\n // There's no such macro /yet/ but we're planning to have some...\n }\n\n\n /**\n * Get rules for plural forms (shared with JetPack), see:\n * http://unicode.org/repos/cldr-tmp/trunk/diff/supplemental/language_plural_rules.html\n * https://github.com/mozilla/addon-sdk/blob/master/python-lib/plural-rules-generator.p\n *\n * @param {string} lang\n * locale (language) used.\n *\n * @return {Function}\n * returns a function that gives the plural form name for a given integer:\n * var fun = getPluralRules('en');\n * fun(1) -> 'one'\n * fun(0) -> 'other'\n * fun(1000) -> 'other'.\n */\n\n function getPluralRules(lang) {\n var locales2rules = {\n 'af': 3,\n 'ak': 4,\n 'am': 4,\n 'ar': 1,\n 'asa': 3,\n 'az': 0,\n 'be': 11,\n 'bem': 3,\n 'bez': 3,\n 'bg': 3,\n 'bh': 4,\n 'bm': 0,\n 'bn': 3,\n 'bo': 0,\n 'br': 20,\n 'brx': 3,\n 'bs': 11,\n 'ca': 3,\n 'cgg': 3,\n 'chr': 3,\n 'cs': 12,\n 'cy': 17,\n 'da': 3,\n 'de': 3,\n 'dv': 3,\n 'dz': 0,\n 'ee': 3,\n 'el': 3,\n 'en': 3,\n 'eo': 3,\n 'es': 3,\n 'et': 3,\n 'eu': 3,\n 'fa': 0,\n 'ff': 5,\n 'fi': 3,\n 'fil': 4,\n 'fo': 3,\n 'fr': 5,\n 'fur': 3,\n 'fy': 3,\n 'ga': 8,\n 'gd': 24,\n 'gl': 3,\n 'gsw': 3,\n 'gu': 3,\n 'guw': 4,\n 'gv': 23,\n 'ha': 3,\n 'haw': 3,\n 'he': 2,\n 'hi': 4,\n 'hr': 11,\n 'hu': 0,\n 'id': 0,\n 'ig': 0,\n 'ii': 0,\n 'is': 3,\n 'it': 3,\n 'iu': 7,\n 'ja': 0,\n 'jmc': 3,\n 'jv': 0,\n 'ka': 0,\n 'kab': 5,\n 'kaj': 3,\n 'kcg': 3,\n 'kde': 0,\n 'kea': 0,\n 'kk': 3,\n 'kl': 3,\n 'km': 0,\n 'kn': 0,\n 'ko': 0,\n 'ksb': 3,\n 'ksh': 21,\n 'ku': 3,\n 'kw': 7,\n 'lag': 18,\n 'lb': 3,\n 'lg': 3,\n 'ln': 4,\n 'lo': 0,\n 'lt': 10,\n 'lv': 6,\n 'mas': 3,\n 'mg': 4,\n 'mk': 16,\n 'ml': 3,\n 'mn': 3,\n 'mo': 9,\n 'mr': 3,\n 'ms': 0,\n 'mt': 15,\n 'my': 0,\n 'nah': 3,\n 'naq': 7,\n 'nb': 3,\n 'nd': 3,\n 'ne': 3,\n 'nl': 3,\n 'nn': 3,\n 'no': 3,\n 'nr': 3,\n 'nso': 4,\n 'ny': 3,\n 'nyn': 3,\n 'om': 3,\n 'or': 3,\n 'pa': 3,\n 'pap': 3,\n 'pl': 13,\n 'ps': 3,\n 'pt': 3,\n 'rm': 3,\n 'ro': 9,\n 'rof': 3,\n 'ru': 11,\n 'rwk': 3,\n 'sah': 0,\n 'saq': 3,\n 'se': 7,\n 'seh': 3,\n 'ses': 0,\n 'sg': 0,\n 'sh': 11,\n 'shi': 19,\n 'sk': 12,\n 'sl': 14,\n 'sma': 7,\n 'smi': 7,\n 'smj': 7,\n 'smn': 7,\n 'sms': 7,\n 'sn': 3,\n 'so': 3,\n 'sq': 3,\n 'sr': 11,\n 'ss': 3,\n 'ssy': 3,\n 'st': 3,\n 'sv': 3,\n 'sw': 3,\n 'syr': 3,\n 'ta': 3,\n 'te': 3,\n 'teo': 3,\n 'th': 0,\n 'ti': 4,\n 'tig': 3,\n 'tk': 3,\n 'tl': 4,\n 'tn': 3,\n 'to': 0,\n 'tr': 0,\n 'ts': 3,\n 'tzm': 22,\n 'uk': 11,\n 'ur': 3,\n 've': 3,\n 'vi': 0,\n 'vun': 3,\n 'wa': 4,\n 'wae': 3,\n 'wo': 0,\n 'xh': 3,\n 'xog': 3,\n 'yo': 0,\n 'zh': 0,\n 'zu': 3\n };\n\n // utility functions for plural rules methods\n function isIn(n, list) {\n return list.indexOf(n) !== -1;\n }\n function isBetween(n, start, end) {\n return start <= n && n <= end;\n }\n\n // list of all plural rules methods:\n // map an integer to the plural form name to use\n var pluralRules = {\n '0': function(n) {\n return 'other';\n },\n '1': function(n) {\n if ((isBetween((n % 100), 3, 10)))\n return 'few';\n if (n === 0)\n return 'zero';\n if ((isBetween((n % 100), 11, 99)))\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '2': function(n) {\n if (n !== 0 && (n % 10) === 0)\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '3': function(n) {\n if (n == 1)\n return 'one';\n return 'other';\n },\n '4': function(n) {\n if ((isBetween(n, 0, 1)))\n return 'one';\n return 'other';\n },\n '5': function(n) {\n if ((isBetween(n, 0, 2)) && n != 2)\n return 'one';\n return 'other';\n },\n '6': function(n) {\n if (n === 0)\n return 'zero';\n if ((n % 10) == 1 && (n % 100) != 11)\n return 'one';\n return 'other';\n },\n '7': function(n) {\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '8': function(n) {\n if ((isBetween(n, 3, 6)))\n return 'few';\n if ((isBetween(n, 7, 10)))\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '9': function(n) {\n if (n === 0 || n != 1 && (isBetween((n % 100), 1, 19)))\n return 'few';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '10': function(n) {\n if ((isBetween((n % 10), 2, 9)) && !(isBetween((n % 100), 11, 19)))\n return 'few';\n if ((n % 10) == 1 && !(isBetween((n % 100), 11, 19)))\n return 'one';\n return 'other';\n },\n '11': function(n) {\n if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n return 'few';\n if ((n % 10) === 0 ||\n (isBetween((n % 10), 5, 9)) ||\n (isBetween((n % 100), 11, 14)))\n return 'many';\n if ((n % 10) == 1 && (n % 100) != 11)\n return 'one';\n return 'other';\n },\n '12': function(n) {\n if ((isBetween(n, 2, 4)))\n return 'few';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '13': function(n) {\n if ((isBetween((n % 10), 2, 4)) && !(isBetween((n % 100), 12, 14)))\n return 'few';\n if (n != 1 && (isBetween((n % 10), 0, 1)) ||\n (isBetween((n % 10), 5, 9)) ||\n (isBetween((n % 100), 12, 14)))\n return 'many';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '14': function(n) {\n if ((isBetween((n % 100), 3, 4)))\n return 'few';\n if ((n % 100) == 2)\n return 'two';\n if ((n % 100) == 1)\n return 'one';\n return 'other';\n },\n '15': function(n) {\n if (n === 0 || (isBetween((n % 100), 2, 10)))\n return 'few';\n if ((isBetween((n % 100), 11, 19)))\n return 'many';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '16': function(n) {\n if ((n % 10) == 1 && n != 11)\n return 'one';\n return 'other';\n },\n '17': function(n) {\n if (n == 3)\n return 'few';\n if (n === 0)\n return 'zero';\n if (n == 6)\n return 'many';\n if (n == 2)\n return 'two';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '18': function(n) {\n if (n === 0)\n return 'zero';\n if ((isBetween(n, 0, 2)) && n !== 0 && n != 2)\n return 'one';\n return 'other';\n },\n '19': function(n) {\n if ((isBetween(n, 2, 10)))\n return 'few';\n if ((isBetween(n, 0, 1)))\n return 'one';\n return 'other';\n },\n '20': function(n) {\n if ((isBetween((n % 10), 3, 4) || ((n % 10) == 9)) && !(\n isBetween((n % 100), 10, 19) ||\n isBetween((n % 100), 70, 79) ||\n isBetween((n % 100), 90, 99)\n ))\n return 'few';\n if ((n % 1000000) === 0 && n !== 0)\n return 'many';\n if ((n % 10) == 2 && !isIn((n % 100), [12, 72, 92]))\n return 'two';\n if ((n % 10) == 1 && !isIn((n % 100), [11, 71, 91]))\n return 'one';\n return 'other';\n },\n '21': function(n) {\n if (n === 0)\n return 'zero';\n if (n == 1)\n return 'one';\n return 'other';\n },\n '22': function(n) {\n if ((isBetween(n, 0, 1)) || (isBetween(n, 11, 99)))\n return 'one';\n return 'other';\n },\n '23': function(n) {\n if ((isBetween((n % 10), 1, 2)) || (n % 20) === 0)\n return 'one';\n return 'other';\n },\n '24': function(n) {\n if ((isBetween(n, 3, 10) || isBetween(n, 13, 19)))\n return 'few';\n if (isIn(n, [2, 12]))\n return 'two';\n if (isIn(n, [1, 11]))\n return 'one';\n return 'other';\n }\n };\n\n // return a function that gives the plural form name for a given integer\n var index = locales2rules[lang.replace(/-.*$/, '')];\n if (!(index in pluralRules)) {\n console.warn('plural form unknown for [' + lang + ']');\n return function() { return 'other'; };\n }\n return pluralRules[index];\n }\n\n // pre-defined 'plural' macro\n gMacros.plural = function(str, param, key, prop) {\n var n = parseFloat(param);\n if (isNaN(n))\n return str;\n\n // TODO: support other properties (l20n still doesn't...)\n if (prop != gTextProp)\n return str;\n\n // initialize _pluralRules\n if (!gMacros._pluralRules) {\n gMacros._pluralRules = getPluralRules(gLanguage);\n }\n var index = '[' + gMacros._pluralRules(n) + ']';\n\n // try to find a [zero|one|two] key if it's defined\n if (n === 0 && (key + '[zero]') in gL10nData) {\n str = gL10nData[key + '[zero]'][prop];\n } else if (n == 1 && (key + '[one]') in gL10nData) {\n str = gL10nData[key + '[one]'][prop];\n } else if (n == 2 && (key + '[two]') in gL10nData) {\n str = gL10nData[key + '[two]'][prop];\n } else if ((key + index) in gL10nData) {\n str = gL10nData[key + index][prop];\n } else if ((key + '[other]') in gL10nData) {\n str = gL10nData[key + '[other]'][prop];\n }\n\n return str;\n };\n\n\n /**\n * l10n dictionary functions\n */\n\n // fetch an l10n object, warn if not found, apply `args' if possible\n function getL10nData(key, args, fallback) {\n var data = gL10nData[key];\n if (!data) {\n console.warn('#' + key + ' is undefined.');\n if (!fallback) {\n return null;\n }\n data = fallback;\n }\n\n /** This is where l10n expressions should be processed.\n * The plan is to support C-style expressions from the l20n project;\n * until then, only two kinds of simple expressions are supported:\n * {[ index ]} and {{ arguments }}.\n */\n var rv = {};\n for (var prop in data) {\n var str = data[prop];\n str = substIndexes(str, args, key, prop);\n str = substArguments(str, args, key);\n rv[prop] = str;\n }\n return rv;\n }\n\n // replace {[macros]} with their values\n function substIndexes(str, args, key, prop) {\n var reIndex = /\\{\\[\\s*([a-zA-Z]+)\\(([a-zA-Z]+)\\)\\s*\\]\\}/;\n var reMatch = reIndex.exec(str);\n if (!reMatch || !reMatch.length)\n return str;\n\n // an index/macro has been found\n // Note: at the moment, only one parameter is supported\n var macroName = reMatch[1];\n var paramName = reMatch[2];\n var param;\n if (args && paramName in args) {\n param = args[paramName];\n } else if (paramName in gL10nData) {\n param = gL10nData[paramName];\n }\n\n // there's no macro parser yet: it has to be defined in gMacros\n if (macroName in gMacros) {\n var macro = gMacros[macroName];\n str = macro(str, param, key, prop);\n }\n return str;\n }\n\n // replace {{arguments}} with their values\n function substArguments(str, args, key) {\n var reArgs = /\\{\\{\\s*(.+?)\\s*\\}\\}/g;\n return str.replace(reArgs, function(matched_text, arg) {\n if (args && arg in args) {\n return args[arg];\n }\n if (arg in gL10nData) {\n return gL10nData[arg];\n }\n console.log('argument {{' + arg + '}} for #' + key + ' is undefined.');\n return matched_text;\n });\n }\n\n // translate an HTML element\n function translateElement(element) {\n var l10n = getL10nAttributes(element);\n if (!l10n.id)\n return;\n\n // get the related l10n object\n var data = getL10nData(l10n.id, l10n.args);\n if (!data) {\n console.warn('#' + l10n.id + ' is undefined.');\n return;\n }\n\n // translate element (TODO: security checks?)\n if (data[gTextProp]) { // XXX\n if (getChildElementCount(element) === 0) {\n element[gTextProp] = data[gTextProp];\n } else {\n // this element has element children: replace the content of the first\n // (non-empty) child textNode and clear other child textNodes\n var children = element.childNodes;\n var found = false;\n for (var i = 0, l = children.length; i < l; i++) {\n if (children[i].nodeType === 3 && /\\S/.test(children[i].nodeValue)) {\n if (found) {\n children[i].nodeValue = '';\n } else {\n children[i].nodeValue = data[gTextProp];\n found = true;\n }\n }\n }\n // if no (non-empty) textNode is found, insert a textNode before the\n // first element child.\n if (!found) {\n var textNode = document.createTextNode(data[gTextProp]);\n element.insertBefore(textNode, element.firstChild);\n }\n }\n delete data[gTextProp];\n }\n\n for (var k in data) {\n element[k] = data[k];\n }\n }\n\n // webkit browsers don't currently support 'children' on SVG elements...\n function getChildElementCount(element) {\n if (element.children) {\n return element.children.length;\n }\n if (typeof element.childElementCount !== 'undefined') {\n return element.childElementCount;\n }\n var count = 0;\n for (var i = 0; i < element.childNodes.length; i++) {\n count += element.nodeType === 1 ? 1 : 0;\n }\n return count;\n }\n\n // translate an HTML subtree\n function translateFragment(element) {\n element = element || document.documentElement;\n\n // check all translatable children (= w/ a `data-l10n-id' attribute)\n var children = getTranslatableChildren(element);\n var elementCount = children.length;\n for (var i = 0; i < elementCount; i++) {\n translateElement(children[i]);\n }\n\n // translate element itself if necessary\n translateElement(element);\n }\n\n return {\n // get a localized string\n get: function(key, args, fallbackString) {\n var index = key.lastIndexOf('.');\n var prop = gTextProp;\n if (index > 0) { // An attribute has been specified\n prop = key.substr(index + 1);\n key = key.substring(0, index);\n }\n var fallback;\n if (fallbackString) {\n fallback = {};\n fallback[prop] = fallbackString;\n }\n var data = getL10nData(key, args, fallback);\n if (data && prop in data) {\n return data[prop];\n }\n return '{{' + key + '}}';\n },\n\n // debug\n getData: function() { return gL10nData; },\n getText: function() { return gTextData; },\n\n // get|set the document language\n getLanguage: function() { return gLanguage; },\n setLanguage: function(lang, callback) {\n loadLocale(lang, function() {\n if (callback)\n callback();\n });\n },\n\n // get the direction (ltr|rtl) of the current language\n getDirection: function() {\n // http://www.w3.org/International/questions/qa-scripts\n // Arabic, Hebrew, Farsi, Pashto, Urdu\n var rtlList = ['ar', 'he', 'fa', 'ps', 'ur'];\n var shortCode = gLanguage.split('-', 1)[0];\n return (rtlList.indexOf(shortCode) >= 0) ? 'rtl' : 'ltr';\n },\n\n // translate an element or document fragment\n translate: translateFragment,\n\n // this can be used to prevent race conditions\n getReadyState: function() { return gReadyState; },\n ready: function(callback) {\n if (!callback) {\n return;\n } else if (gReadyState == 'complete' || gReadyState == 'interactive') {\n window.setTimeout(function() {\n callback();\n });\n } else if (document.addEventListener) {\n document.addEventListener('localized', function once() {\n document.removeEventListener('localized', once);\n callback();\n });\n }\n }\n };\n}) (window, document);\n\n\n\n// WEBPACK FOOTER //\n// external/webL10n/l10n.js","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { AnnotationLayer } from 'pdfjs-lib';\nimport { NullL10n } from './ui_utils';\nimport { SimpleLinkService } from './pdf_link_service';\n\n/**\n * @typedef {Object} AnnotationLayerBuilderOptions\n * @property {HTMLDivElement} pageDiv\n * @property {PDFPage} pdfPage\n * @property {boolean} renderInteractiveForms\n * @property {IPDFLinkService} linkService\n * @property {DownloadManager} downloadManager\n * @property {IL10n} l10n - Localization service.\n */\n\nclass AnnotationLayerBuilder {\n /**\n * @param {AnnotationLayerBuilderOptions} options\n */\n constructor({ pageDiv, pdfPage, linkService, downloadManager,\n renderInteractiveForms = false, l10n = NullL10n, }) {\n this.pageDiv = pageDiv;\n this.pdfPage = pdfPage;\n this.linkService = linkService;\n this.downloadManager = downloadManager;\n this.renderInteractiveForms = renderInteractiveForms;\n this.l10n = l10n;\n\n this.div = null;\n }\n\n /**\n * @param {PageViewport} viewport\n * @param {string} intent (default value is 'display')\n */\n render(viewport, intent = 'display') {\n this.pdfPage.getAnnotations({ intent, }).then((annotations) => {\n let parameters = {\n viewport: viewport.clone({ dontFlip: true, }),\n div: this.div,\n annotations,\n page: this.pdfPage,\n renderInteractiveForms: this.renderInteractiveForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n };\n\n if (this.div) {\n // If an annotationLayer already exists, refresh its children's\n // transformation matrices.\n AnnotationLayer.update(parameters);\n } else {\n // Create an annotation layer div and render the annotations\n // if there is at least one annotation.\n if (annotations.length === 0) {\n return;\n }\n this.div = document.createElement('div');\n this.div.className = 'annotationLayer';\n this.pageDiv.appendChild(this.div);\n parameters.div = this.div;\n\n AnnotationLayer.render(parameters);\n this.l10n.translate(this.div);\n }\n });\n }\n\n hide() {\n if (!this.div) {\n return;\n }\n this.div.setAttribute('hidden', 'true');\n }\n}\n\n/**\n * @implements IPDFAnnotationLayerFactory\n */\nclass DefaultAnnotationLayerFactory {\n /**\n * @param {HTMLDivElement} pageDiv\n * @param {PDFPage} pdfPage\n * @param {boolean} renderInteractiveForms\n * @param {IL10n} l10n\n * @returns {AnnotationLayerBuilder}\n */\n createAnnotationLayerBuilder(pageDiv, pdfPage, renderInteractiveForms = false,\n l10n = NullL10n) {\n return new AnnotationLayerBuilder({\n pageDiv,\n pdfPage,\n renderInteractiveForms,\n linkService: new SimpleLinkService(),\n l10n,\n });\n }\n}\n\nexport {\n AnnotationLayerBuilder,\n DefaultAnnotationLayerFactory,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/annotation_layer_builder.js","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createObjectURL, createValidAbsoluteUrl, PDFJS } from 'pdfjs-lib';\n\nif (typeof PDFJSDev !== 'undefined' && !PDFJSDev.test('CHROME || GENERIC')) {\n throw new Error('Module \"pdfjs-web/download_manager\" shall not be used ' +\n 'outside CHROME and GENERIC builds.');\n}\n\nfunction download(blobUrl, filename) {\n let a = document.createElement('a');\n if (a.click) {\n // Use a.click() if available. Otherwise, Chrome might show\n // \"Unsafe JavaScript attempt to initiate a navigation change\n // for frame with URL\" and not open the PDF at all.\n // Supported by (not mentioned = untested):\n // - Firefox 6 - 19 (4- does not support a.click, 5 ignores a.click)\n // - Chrome 19 - 26 (18- does not support a.click)\n // - Opera 9 - 12.15\n // - Internet Explorer 6 - 10\n // - Safari 6 (5.1- does not support a.click)\n a.href = blobUrl;\n a.target = '_parent';\n // Use a.download if available. This increases the likelihood that\n // the file is downloaded instead of opened by another PDF plugin.\n if ('download' in a) {\n a.download = filename;\n }\n // must be in the document for IE and recent Firefox versions.\n // (otherwise .click() is ignored)\n (document.body || document.documentElement).appendChild(a);\n a.click();\n a.parentNode.removeChild(a);\n } else {\n if (window.top === window &&\n blobUrl.split('#')[0] === window.location.href.split('#')[0]) {\n // If _parent == self, then opening an identical URL with different\n // location hash will only cause a navigation, not a download.\n let padCharacter = blobUrl.indexOf('?') === -1 ? '?' : '&';\n blobUrl = blobUrl.replace(/#|$/, padCharacter + '$&');\n }\n window.open(blobUrl, '_parent');\n }\n}\n\nclass DownloadManager {\n downloadUrl(url, filename) {\n if (!createValidAbsoluteUrl(url, 'http://example.com')) {\n return; // restricted/invalid URL\n }\n download(url + '#pdfjs.action=download', filename);\n }\n\n downloadData(data, filename, contentType) {\n if (navigator.msSaveBlob) { // IE10 and above\n return navigator.msSaveBlob(new Blob([data], { type: contentType, }),\n filename);\n }\n let blobUrl = createObjectURL(data, contentType,\n PDFJS.disableCreateObjectURL);\n download(blobUrl, filename);\n }\n\n download(blob, url, filename) {\n if (navigator.msSaveBlob) {\n // IE10 / IE11\n if (!navigator.msSaveBlob(blob, filename)) {\n this.downloadUrl(url, filename);\n }\n return;\n }\n\n if (PDFJS.disableCreateObjectURL) {\n // URL.createObjectURL is not supported\n this.downloadUrl(url, filename);\n return;\n }\n\n let blobUrl = URL.createObjectURL(blob);\n download(blobUrl, filename);\n }\n}\n\nexport {\n DownloadManager,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/download_manager.js","/* Copyright 2017 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport '../external/webL10n/l10n';\n\nvar webL10n = document.webL10n;\n\nclass GenericL10n {\n constructor(lang) {\n this._lang = lang;\n this._ready = new Promise((resolve, reject) => {\n webL10n.setLanguage(lang, () => {\n resolve(webL10n);\n });\n });\n }\n\n getDirection() {\n return this._ready.then((l10n) => {\n return l10n.getDirection();\n });\n }\n\n get(property, args, fallback) {\n return this._ready.then((l10n) => {\n return l10n.get(property, args, fallback);\n });\n }\n\n translate(element) {\n return this._ready.then((l10n) => {\n return l10n.translate(element);\n });\n }\n}\n\nexport {\n GenericL10n,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/genericl10n.js","/* Copyright 2013 Rob Wu \n * https://github.com/Rob--W/grab-to-pan.js\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * Construct a GrabToPan instance for a given HTML element.\n * @param options.element {Element}\n * @param options.ignoreTarget {function} optional. See `ignoreTarget(node)`\n * @param options.onActiveChanged {function(boolean)} optional. Called\n * when grab-to-pan is (de)activated. The first argument is a boolean that\n * shows whether grab-to-pan is activated.\n */\nfunction GrabToPan(options) {\n this.element = options.element;\n this.document = options.element.ownerDocument;\n if (typeof options.ignoreTarget === 'function') {\n this.ignoreTarget = options.ignoreTarget;\n }\n this.onActiveChanged = options.onActiveChanged;\n\n // Bind the contexts to ensure that `this` always points to\n // the GrabToPan instance.\n this.activate = this.activate.bind(this);\n this.deactivate = this.deactivate.bind(this);\n this.toggle = this.toggle.bind(this);\n this._onmousedown = this._onmousedown.bind(this);\n this._onmousemove = this._onmousemove.bind(this);\n this._endPan = this._endPan.bind(this);\n\n // This overlay will be inserted in the document when the mouse moves during\n // a grab operation, to ensure that the cursor has the desired appearance.\n var overlay = this.overlay = document.createElement('div');\n overlay.className = 'grab-to-pan-grabbing';\n}\nGrabToPan.prototype = {\n /**\n * Class name of element which can be grabbed\n */\n CSS_CLASS_GRAB: 'grab-to-pan-grab',\n\n /**\n * Bind a mousedown event to the element to enable grab-detection.\n */\n activate: function GrabToPan_activate() {\n if (!this.active) {\n this.active = true;\n this.element.addEventListener('mousedown', this._onmousedown, true);\n this.element.classList.add(this.CSS_CLASS_GRAB);\n if (this.onActiveChanged) {\n this.onActiveChanged(true);\n }\n }\n },\n\n /**\n * Removes all events. Any pending pan session is immediately stopped.\n */\n deactivate: function GrabToPan_deactivate() {\n if (this.active) {\n this.active = false;\n this.element.removeEventListener('mousedown', this._onmousedown, true);\n this._endPan();\n this.element.classList.remove(this.CSS_CLASS_GRAB);\n if (this.onActiveChanged) {\n this.onActiveChanged(false);\n }\n }\n },\n\n toggle: function GrabToPan_toggle() {\n if (this.active) {\n this.deactivate();\n } else {\n this.activate();\n }\n },\n\n /**\n * Whether to not pan if the target element is clicked.\n * Override this method to change the default behaviour.\n *\n * @param node {Element} The target of the event\n * @return {boolean} Whether to not react to the click event.\n */\n ignoreTarget: function GrabToPan_ignoreTarget(node) {\n // Use matchesSelector to check whether the clicked element\n // is (a child of) an input element / link\n return node[matchesSelector](\n 'a[href], a[href] *, input, textarea, button, button *, select, option'\n );\n },\n\n /**\n * @private\n */\n _onmousedown: function GrabToPan__onmousedown(event) {\n if (event.button !== 0 || this.ignoreTarget(event.target)) {\n return;\n }\n if (event.originalTarget) {\n try {\n // eslint-disable-next-line no-unused-expressions\n event.originalTarget.tagName;\n } catch (e) {\n // Mozilla-specific: element is a scrollbar (XUL element)\n return;\n }\n }\n\n this.scrollLeftStart = this.element.scrollLeft;\n this.scrollTopStart = this.element.scrollTop;\n this.clientXStart = event.clientX;\n this.clientYStart = event.clientY;\n this.document.addEventListener('mousemove', this._onmousemove, true);\n this.document.addEventListener('mouseup', this._endPan, true);\n // When a scroll event occurs before a mousemove, assume that the user\n // dragged a scrollbar (necessary for Opera Presto, Safari and IE)\n // (not needed for Chrome/Firefox)\n this.element.addEventListener('scroll', this._endPan, true);\n event.preventDefault();\n event.stopPropagation();\n\n var focusedElement = document.activeElement;\n if (focusedElement && !focusedElement.contains(event.target)) {\n focusedElement.blur();\n }\n },\n\n /**\n * @private\n */\n _onmousemove: function GrabToPan__onmousemove(event) {\n this.element.removeEventListener('scroll', this._endPan, true);\n if (isLeftMouseReleased(event)) {\n this._endPan();\n return;\n }\n var xDiff = event.clientX - this.clientXStart;\n var yDiff = event.clientY - this.clientYStart;\n var scrollTop = this.scrollTopStart - yDiff;\n var scrollLeft = this.scrollLeftStart - xDiff;\n if (this.element.scrollTo) {\n this.element.scrollTo({\n top: scrollTop,\n left: scrollLeft,\n behavior: 'instant',\n });\n } else {\n this.element.scrollTop = scrollTop;\n this.element.scrollLeft = scrollLeft;\n }\n if (!this.overlay.parentNode) {\n document.body.appendChild(this.overlay);\n }\n },\n\n /**\n * @private\n */\n _endPan: function GrabToPan__endPan() {\n this.element.removeEventListener('scroll', this._endPan, true);\n this.document.removeEventListener('mousemove', this._onmousemove, true);\n this.document.removeEventListener('mouseup', this._endPan, true);\n // Note: ChildNode.remove doesn't throw if the parentNode is undefined.\n this.overlay.remove();\n },\n};\n\n// Get the correct (vendor-prefixed) name of the matches method.\nvar matchesSelector;\n['webkitM', 'mozM', 'msM', 'oM', 'm'].some(function(prefix) {\n var name = prefix + 'atches';\n if (name in document.documentElement) {\n matchesSelector = name;\n }\n name += 'Selector';\n if (name in document.documentElement) {\n matchesSelector = name;\n }\n return matchesSelector; // If found, then truthy, and [].some() ends.\n});\n\n// Browser sniffing because it's impossible to feature-detect\n// whether event.which for onmousemove is reliable\nvar isNotIEorIsIE10plus = !document.documentMode || document.documentMode > 9;\nvar chrome = window.chrome;\nvar isChrome15OrOpera15plus = chrome && (chrome.webstore || chrome.app);\n// ^ Chrome 15+ ^ Opera 15+\nvar isSafari6plus = /Apple/.test(navigator.vendor) &&\n /Version\\/([6-9]\\d*|[1-5]\\d+)/.test(navigator.userAgent);\n\n/**\n * Whether the left mouse is not pressed.\n * @param event {MouseEvent}\n * @return {boolean} True if the left mouse button is not pressed.\n * False if unsure or if the left mouse button is pressed.\n */\nfunction isLeftMouseReleased(event) {\n if ('buttons' in event && isNotIEorIsIE10plus) {\n // http://www.w3.org/TR/DOM-Level-3-Events/#events-MouseEvent-buttons\n // Firefox 15+\n // Internet Explorer 10+\n return !(event.buttons & 1);\n }\n if (isChrome15OrOpera15plus || isSafari6plus) {\n // Chrome 14+\n // Opera 15+\n // Safari 6.0+\n return event.which === 0;\n }\n}\n\nexport {\n GrabToPan,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/grab_to_pan.js","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nclass OverlayManager {\n constructor() {\n this._overlays = {};\n this._active = null;\n this._keyDownBound = this._keyDown.bind(this);\n }\n\n get active() {\n return this._active;\n }\n\n /**\n * @param {string} name - The name of the overlay that is registered.\n * @param {HTMLDivElement} element - The overlay's DOM element.\n * @param {function} callerCloseMethod - (optional) The method that, if\n * present, calls `OverlayManager.close` from the object\n * registering the overlay. Access to this method is\n * necessary in order to run cleanup code when e.g.\n * the overlay is force closed. The default is `null`.\n * @param {boolean} canForceClose - (optional) Indicates if opening the\n * overlay closes an active overlay. The default is `false`.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * registered.\n */\n register(name, element, callerCloseMethod = null, canForceClose = false) {\n return new Promise((resolve) => {\n let container;\n if (!name || !element || !(container = element.parentNode)) {\n throw new Error('Not enough parameters.');\n } else if (this._overlays[name]) {\n throw new Error('The overlay is already registered.');\n }\n this._overlays[name] = {\n element,\n container,\n callerCloseMethod,\n canForceClose,\n };\n resolve();\n });\n }\n\n /**\n * @param {string} name - The name of the overlay that is unregistered.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * unregistered.\n */\n unregister(name) {\n return new Promise((resolve) => {\n if (!this._overlays[name]) {\n throw new Error('The overlay does not exist.');\n } else if (this._active === name) {\n throw new Error('The overlay cannot be removed while it is active.');\n }\n delete this._overlays[name];\n resolve();\n });\n }\n\n /**\n * @param {string} name - The name of the overlay that should be opened.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * opened.\n */\n open(name) {\n return new Promise((resolve) => {\n if (!this._overlays[name]) {\n throw new Error('The overlay does not exist.');\n } else if (this._active) {\n if (this._overlays[name].canForceClose) {\n this._closeThroughCaller();\n } else if (this._active === name) {\n throw new Error('The overlay is already active.');\n } else {\n throw new Error('Another overlay is currently active.');\n }\n }\n this._active = name;\n this._overlays[this._active].element.classList.remove('hidden');\n this._overlays[this._active].container.classList.remove('hidden');\n\n window.addEventListener('keydown', this._keyDownBound);\n resolve();\n });\n }\n\n /**\n * @param {string} name - The name of the overlay that should be closed.\n * @returns {Promise} A promise that is resolved when the overlay has been\n * closed.\n */\n close(name) {\n return new Promise((resolve) => {\n if (!this._overlays[name]) {\n throw new Error('The overlay does not exist.');\n } else if (!this._active) {\n throw new Error('The overlay is currently not active.');\n } else if (this._active !== name) {\n throw new Error('Another overlay is currently active.');\n }\n this._overlays[this._active].container.classList.add('hidden');\n this._overlays[this._active].element.classList.add('hidden');\n this._active = null;\n\n window.removeEventListener('keydown', this._keyDownBound);\n resolve();\n });\n }\n\n /**\n * @private\n */\n _keyDown(evt) {\n if (this._active && evt.keyCode === 27) { // Esc key.\n this._closeThroughCaller();\n evt.preventDefault();\n }\n }\n\n /**\n * @private\n */\n _closeThroughCaller() {\n if (this._overlays[this._active].callerCloseMethod) {\n this._overlays[this._active].callerCloseMethod();\n }\n if (this._active) {\n this.close(this._active);\n }\n }\n}\n\nexport {\n OverlayManager,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/overlay_manager.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NullL10n } from './ui_utils';\nimport { PasswordResponses } from 'pdfjs-lib';\n\n/**\n * @typedef {Object} PasswordPromptOptions\n * @property {string} overlayName - Name of the overlay for the overlay manager.\n * @property {HTMLDivElement} container - Div container for the overlay.\n * @property {HTMLParagraphElement} label - Label containing instructions for\n * entering the password.\n * @property {HTMLInputElement} input - Input field for entering the password.\n * @property {HTMLButtonElement} submitButton - Button for submitting the\n * password.\n * @property {HTMLButtonElement} cancelButton - Button for cancelling password\n * entry.\n */\n\nclass PasswordPrompt {\n /**\n * @param {PasswordPromptOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {IL10n} l10n - Localization service.\n */\n constructor(options, overlayManager, l10n = NullL10n) {\n this.overlayName = options.overlayName;\n this.container = options.container;\n this.label = options.label;\n this.input = options.input;\n this.submitButton = options.submitButton;\n this.cancelButton = options.cancelButton;\n this.overlayManager = overlayManager;\n this.l10n = l10n;\n\n this.updateCallback = null;\n this.reason = null;\n\n // Attach the event listeners.\n this.submitButton.addEventListener('click', this.verify.bind(this));\n this.cancelButton.addEventListener('click', this.close.bind(this));\n this.input.addEventListener('keydown', (e) => {\n if (e.keyCode === 13) { // Enter key\n this.verify();\n }\n });\n\n this.overlayManager.register(this.overlayName, this.container,\n this.close.bind(this), true);\n }\n\n open() {\n this.overlayManager.open(this.overlayName).then(() => {\n this.input.focus();\n\n let promptString;\n if (this.reason === PasswordResponses.INCORRECT_PASSWORD) {\n promptString = this.l10n.get('password_invalid', null,\n 'Invalid password. Please try again.');\n } else {\n promptString = this.l10n.get('password_label', null,\n 'Enter the password to open this PDF file.');\n }\n\n promptString.then((msg) => {\n this.label.textContent = msg;\n });\n });\n }\n\n close() {\n this.overlayManager.close(this.overlayName).then(() => {\n this.input.value = '';\n });\n }\n\n verify() {\n let password = this.input.value;\n if (password && password.length > 0) {\n this.close();\n return this.updateCallback(password);\n }\n }\n\n setUpdateCallback(updateCallback, reason) {\n this.updateCallback = updateCallback;\n this.reason = reason;\n }\n}\n\nexport {\n PasswordPrompt,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/password_prompt.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createObjectURL, createPromiseCapability, getFilenameFromUrl, PDFJS,\n removeNullCharacters\n} from 'pdfjs-lib';\n\n/**\n * @typedef {Object} PDFAttachmentViewerOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {DownloadManager} downloadManager - The download manager.\n */\n\n/**\n * @typedef {Object} PDFAttachmentViewerRenderParameters\n * @property {Object|null} attachments - A lookup table of attachment objects.\n */\n\nclass PDFAttachmentViewer {\n /**\n * @param {PDFAttachmentViewerOptions} options\n */\n constructor({ container, eventBus, downloadManager, }) {\n this.attachments = null;\n\n this.container = container;\n this.eventBus = eventBus;\n this.downloadManager = downloadManager;\n\n this._renderedCapability = createPromiseCapability();\n this.eventBus.on('fileattachmentannotation',\n this._appendAttachment.bind(this));\n }\n\n reset(keepRenderedCapability = false) {\n this.attachments = null;\n\n // Remove the attachments from the DOM.\n this.container.textContent = '';\n\n if (!keepRenderedCapability) {\n // NOTE: The *only* situation in which the `_renderedCapability` should\n // not be replaced is when appending file attachment annotations.\n this._renderedCapability = createPromiseCapability();\n }\n }\n\n /**\n * @private\n */\n _dispatchEvent(attachmentsCount) {\n this.eventBus.dispatch('attachmentsloaded', {\n source: this,\n attachmentsCount,\n });\n\n this._renderedCapability.resolve();\n }\n\n /**\n * @private\n */\n _bindPdfLink(button, content, filename) {\n if (PDFJS.disableCreateObjectURL) {\n throw new Error('bindPdfLink: ' +\n 'Unsupported \"PDFJS.disableCreateObjectURL\" value.');\n }\n let blobUrl;\n button.onclick = function() {\n if (!blobUrl) {\n blobUrl = createObjectURL(content, 'application/pdf');\n }\n let viewerUrl;\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n // The current URL is the viewer, let's use it and append the file.\n viewerUrl = '?file=' + encodeURIComponent(blobUrl + '#' + filename);\n } else if (PDFJSDev.test('CHROME')) {\n // In the Chrome extension, the URL is rewritten using the history API\n // in viewer.js, so an absolute URL must be generated.\n // eslint-disable-next-line no-undef\n viewerUrl = chrome.runtime.getURL('/content/web/viewer.html') +\n '?file=' + encodeURIComponent(blobUrl + '#' + filename);\n } else if (PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n // Let Firefox's content handler catch the URL and display the PDF.\n viewerUrl = blobUrl + '?' + encodeURIComponent(filename);\n }\n window.open(viewerUrl);\n return false;\n };\n }\n\n /**\n * @private\n */\n _bindLink(button, content, filename) {\n button.onclick = () => {\n this.downloadManager.downloadData(content, filename, '');\n return false;\n };\n }\n\n /**\n * @param {PDFAttachmentViewerRenderParameters} params\n */\n render({ attachments, keepRenderedCapability = false, }) {\n let attachmentsCount = 0;\n\n if (this.attachments) {\n this.reset(keepRenderedCapability === true);\n }\n this.attachments = attachments || null;\n\n if (!attachments) {\n this._dispatchEvent(attachmentsCount);\n return;\n }\n\n let names = Object.keys(attachments).sort(function(a, b) {\n return a.toLowerCase().localeCompare(b.toLowerCase());\n });\n attachmentsCount = names.length;\n\n for (let i = 0; i < attachmentsCount; i++) {\n let item = attachments[names[i]];\n let filename = removeNullCharacters(getFilenameFromUrl(item.filename));\n\n let div = document.createElement('div');\n div.className = 'attachmentsItem';\n let button = document.createElement('button');\n button.textContent = filename;\n if (/\\.pdf$/i.test(filename) && !PDFJS.disableCreateObjectURL) {\n this._bindPdfLink(button, item.content, filename);\n } else {\n this._bindLink(button, item.content, filename);\n }\n\n div.appendChild(button);\n this.container.appendChild(div);\n }\n\n this._dispatchEvent(attachmentsCount);\n }\n\n /**\n * Used to append FileAttachment annotations to the sidebar.\n * @private\n */\n _appendAttachment({ id, filename, content, }) {\n this._renderedCapability.promise.then(() => {\n let attachments = this.attachments;\n\n if (!attachments) {\n attachments = Object.create(null);\n } else {\n for (let name in attachments) {\n if (id === name) {\n return; // Ignore the new attachment if it already exists.\n }\n }\n }\n attachments[id] = {\n filename,\n content,\n };\n this.render({\n attachments,\n keepRenderedCapability: true,\n });\n });\n }\n}\n\nexport {\n PDFAttachmentViewer,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_attachment_viewer.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { cloneObj, getPDFFileNameFromURL, NullL10n } from './ui_utils';\nimport { createPromiseCapability } from 'pdfjs-lib';\n\nconst DEFAULT_FIELD_CONTENT = '-';\n\n/**\n * @typedef {Object} PDFDocumentPropertiesOptions\n * @property {string} overlayName - Name/identifier for the overlay.\n * @property {Object} fields - Names and elements of the overlay's fields.\n * @property {HTMLDivElement} container - Div container for the overlay.\n * @property {HTMLButtonElement} closeButton - Button for closing the overlay.\n */\n\nclass PDFDocumentProperties {\n /**\n * @param {PDFDocumentPropertiesOptions} options\n * @param {OverlayManager} overlayManager - Manager for the viewer overlays.\n * @param {IL10n} l10n - Localization service.\n */\n constructor({ overlayName, fields, container, closeButton, },\n overlayManager, l10n = NullL10n) {\n this.overlayName = overlayName;\n this.fields = fields;\n this.container = container;\n this.overlayManager = overlayManager;\n this.l10n = l10n;\n\n this._reset();\n\n if (closeButton) { // Bind the event listener for the Close button.\n closeButton.addEventListener('click', this.close.bind(this));\n }\n this.overlayManager.register(this.overlayName, this.container,\n this.close.bind(this));\n }\n\n /**\n * Open the document properties overlay.\n */\n open() {\n let freezeFieldData = (data) => {\n Object.defineProperty(this, 'fieldData', {\n value: Object.freeze(data),\n writable: false,\n enumerable: true,\n configurable: true,\n });\n };\n\n Promise.all([this.overlayManager.open(this.overlayName),\n this._dataAvailableCapability.promise]).then(() => {\n // If the document properties were previously fetched (for this PDF file),\n // just update the dialog immediately to avoid redundant lookups.\n if (this.fieldData) {\n this._updateUI();\n return;\n }\n // Get the document properties.\n this.pdfDocument.getMetadata().then(({ info, metadata, }) => {\n return Promise.all([\n info,\n metadata,\n this._parseFileSize(this.maybeFileSize),\n this._parseDate(info.CreationDate),\n this._parseDate(info.ModDate)\n ]);\n }).then(([info, metadata, fileSize, creationDate, modificationDate]) => {\n freezeFieldData({\n 'fileName': getPDFFileNameFromURL(this.url),\n 'fileSize': fileSize,\n 'title': info.Title,\n 'author': info.Author,\n 'subject': info.Subject,\n 'keywords': info.Keywords,\n 'creationDate': creationDate,\n 'modificationDate': modificationDate,\n 'creator': info.Creator,\n 'producer': info.Producer,\n 'version': info.PDFFormatVersion,\n 'pageCount': this.pdfDocument.numPages,\n });\n this._updateUI();\n\n // Get the correct fileSize, since it may not have been set (if\n // `this.setFileSize` wasn't called) or may be incorrectly set.\n return this.pdfDocument.getDownloadInfo();\n }).then(({ length, }) => {\n return this._parseFileSize(length);\n }).then((fileSize) => {\n let data = cloneObj(this.fieldData);\n data['fileSize'] = fileSize;\n\n freezeFieldData(data);\n this._updateUI();\n });\n });\n }\n\n /**\n * Close the document properties overlay.\n */\n close() {\n this.overlayManager.close(this.overlayName);\n }\n\n /**\n * Set a reference to the PDF document and the URL in order\n * to populate the overlay fields with the document properties.\n * Note that the overlay will contain no information if this method\n * is not called.\n *\n * @param {Object} pdfDocument - A reference to the PDF document.\n * @param {string} url - The URL of the document.\n */\n setDocument(pdfDocument, url) {\n if (this.pdfDocument) {\n this._reset();\n this._updateUI(true);\n }\n if (!pdfDocument) {\n return;\n }\n this.pdfDocument = pdfDocument;\n this.url = url;\n\n this._dataAvailableCapability.resolve();\n }\n\n /**\n * Set the file size of the PDF document. This method is used to\n * update the file size in the document properties overlay once it\n * is known so we do not have to wait until the entire file is loaded.\n *\n * @param {number} fileSize - The file size of the PDF document.\n */\n setFileSize(fileSize) {\n if (typeof fileSize === 'number' && fileSize > 0) {\n this.maybeFileSize = fileSize;\n }\n }\n\n /**\n * @private\n */\n _reset() {\n this.pdfDocument = null;\n this.url = null;\n\n this.maybeFileSize = 0;\n delete this.fieldData;\n this._dataAvailableCapability = createPromiseCapability();\n }\n\n /**\n * Always updates all of the dialog fields, to prevent inconsistent UI state.\n * NOTE: If the contents of a particular field is neither a non-empty string,\n * nor a number, it will fall back to `DEFAULT_FIELD_CONTENT`.\n * @private\n */\n _updateUI(reset = false) {\n if (reset || !this.fieldData) {\n for (let id in this.fields) {\n this.fields[id].textContent = DEFAULT_FIELD_CONTENT;\n }\n return;\n }\n if (this.overlayManager.active !== this.overlayName) {\n // Don't bother updating the dialog if has already been closed,\n // since it will be updated the next time `this.open` is called.\n return;\n }\n for (let id in this.fields) {\n let content = this.fieldData[id];\n this.fields[id].textContent = (content || content === 0) ?\n content : DEFAULT_FIELD_CONTENT;\n }\n }\n\n /**\n * @private\n */\n _parseFileSize(fileSize = 0) {\n let kb = fileSize / 1024;\n if (!kb) {\n return Promise.resolve(undefined);\n } else if (kb < 1024) {\n return this.l10n.get('document_properties_kb', {\n size_kb: (+kb.toPrecision(3)).toLocaleString(),\n size_b: fileSize.toLocaleString(),\n }, '{{size_kb}} KB ({{size_b}} bytes)');\n }\n return this.l10n.get('document_properties_mb', {\n size_mb: (+(kb / 1024).toPrecision(3)).toLocaleString(),\n size_b: fileSize.toLocaleString(),\n }, '{{size_mb}} MB ({{size_b}} bytes)');\n }\n\n /**\n * @private\n */\n _parseDate(inputDate) {\n if (!inputDate) {\n return;\n }\n // This is implemented according to the PDF specification, but note that\n // Adobe Reader doesn't handle changing the date to universal time\n // and doesn't use the user's time zone (they're effectively ignoring\n // the HH' and mm' parts of the date string).\n let dateToParse = inputDate;\n\n // Remove the D: prefix if it is available.\n if (dateToParse.substring(0, 2) === 'D:') {\n dateToParse = dateToParse.substring(2);\n }\n\n // Get all elements from the PDF date string.\n // JavaScript's `Date` object expects the month to be between\n // 0 and 11 instead of 1 and 12, so we're correcting for this.\n let year = parseInt(dateToParse.substring(0, 4), 10);\n let month = parseInt(dateToParse.substring(4, 6), 10) - 1;\n let day = parseInt(dateToParse.substring(6, 8), 10);\n let hours = parseInt(dateToParse.substring(8, 10), 10);\n let minutes = parseInt(dateToParse.substring(10, 12), 10);\n let seconds = parseInt(dateToParse.substring(12, 14), 10);\n let utRel = dateToParse.substring(14, 15);\n let offsetHours = parseInt(dateToParse.substring(15, 17), 10);\n let offsetMinutes = parseInt(dateToParse.substring(18, 20), 10);\n\n // As per spec, utRel = 'Z' means equal to universal time.\n // The other cases ('-' and '+') have to be handled here.\n if (utRel === '-') {\n hours += offsetHours;\n minutes += offsetMinutes;\n } else if (utRel === '+') {\n hours -= offsetHours;\n minutes -= offsetMinutes;\n }\n\n // Return the new date format from the user's locale.\n let date = new Date(Date.UTC(year, month, day, hours, minutes, seconds));\n let dateString = date.toLocaleDateString();\n let timeString = date.toLocaleTimeString();\n return this.l10n.get('document_properties_date_string',\n { date: dateString, time: timeString, },\n '{{date}}, {{time}}');\n }\n}\n\nexport {\n PDFDocumentProperties,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_document_properties.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { FindState } from './pdf_find_controller';\nimport { NullL10n } from './ui_utils';\n\n/**\n * Creates a \"search bar\" given a set of DOM elements that act as controls\n * for searching or for setting search preferences in the UI. This object\n * also sets up the appropriate events for the controls. Actual searching\n * is done by PDFFindController.\n */\nclass PDFFindBar {\n constructor(options, l10n = NullL10n) {\n this.opened = false;\n\n this.bar = options.bar || null;\n this.toggleButton = options.toggleButton || null;\n this.findField = options.findField || null;\n this.highlightAll = options.highlightAllCheckbox || null;\n this.caseSensitive = options.caseSensitiveCheckbox || null;\n this.findMsg = options.findMsg || null;\n this.findResultsCount = options.findResultsCount || null;\n this.findStatusIcon = options.findStatusIcon || null;\n this.findPreviousButton = options.findPreviousButton || null;\n this.findNextButton = options.findNextButton || null;\n this.findController = options.findController || null;\n this.eventBus = options.eventBus;\n this.l10n = l10n;\n\n if (this.findController === null) {\n throw new Error('PDFFindBar cannot be used without a ' +\n 'PDFFindController instance.');\n }\n\n // Add event listeners to the DOM elements.\n this.toggleButton.addEventListener('click', () => {\n this.toggle();\n });\n\n this.findField.addEventListener('input', () => {\n this.dispatchEvent('');\n });\n\n this.bar.addEventListener('keydown', (e) => {\n switch (e.keyCode) {\n case 13: // Enter\n if (e.target === this.findField) {\n this.dispatchEvent('again', e.shiftKey);\n }\n break;\n case 27: // Escape\n this.close();\n break;\n }\n });\n\n this.findPreviousButton.addEventListener('click', () => {\n this.dispatchEvent('again', true);\n });\n\n this.findNextButton.addEventListener('click', () => {\n this.dispatchEvent('again', false);\n });\n\n this.highlightAll.addEventListener('click', () => {\n this.dispatchEvent('highlightallchange');\n });\n\n this.caseSensitive.addEventListener('click', () => {\n this.dispatchEvent('casesensitivitychange');\n });\n\n this.eventBus.on('resize', this._adjustWidth.bind(this));\n }\n\n reset() {\n this.updateUIState();\n }\n\n dispatchEvent(type, findPrev) {\n this.eventBus.dispatch('find', {\n source: this,\n type,\n query: this.findField.value,\n caseSensitive: this.caseSensitive.checked,\n phraseSearch: true,\n highlightAll: this.highlightAll.checked,\n findPrevious: findPrev,\n });\n }\n\n updateUIState(state, previous, matchCount) {\n let notFound = false;\n let findMsg = '';\n let status = '';\n\n switch (state) {\n case FindState.FOUND:\n break;\n\n case FindState.PENDING:\n status = 'pending';\n break;\n\n case FindState.NOT_FOUND:\n findMsg = this.l10n.get('find_not_found', null, 'Phrase not found');\n notFound = true;\n break;\n\n case FindState.WRAPPED:\n if (previous) {\n findMsg = this.l10n.get('find_reached_top', null,\n 'Reached top of document, continued from bottom');\n } else {\n findMsg = this.l10n.get('find_reached_bottom', null,\n 'Reached end of document, continued from top');\n }\n break;\n }\n\n if (notFound) {\n this.findField.classList.add('notFound');\n } else {\n this.findField.classList.remove('notFound');\n }\n\n this.findField.setAttribute('data-status', status);\n Promise.resolve(findMsg).then((msg) => {\n this.findMsg.textContent = msg;\n this._adjustWidth();\n });\n\n this.updateResultsCount(matchCount);\n }\n\n updateResultsCount(matchCount) {\n if (!this.findResultsCount) {\n return; // No UI control is provided.\n }\n\n if (!matchCount) {\n // If there are no matches, hide and reset the counter.\n this.findResultsCount.classList.add('hidden');\n this.findResultsCount.textContent = '';\n } else {\n // Update and show the match counter.\n this.findResultsCount.textContent = matchCount.toLocaleString();\n this.findResultsCount.classList.remove('hidden');\n }\n // Since `updateResultsCount` may be called from `PDFFindController`,\n // ensure that the width of the findbar is always updated correctly.\n this._adjustWidth();\n }\n\n open() {\n if (!this.opened) {\n this.opened = true;\n this.toggleButton.classList.add('toggled');\n this.bar.classList.remove('hidden');\n }\n this.findField.select();\n this.findField.focus();\n\n this._adjustWidth();\n }\n\n close() {\n if (!this.opened) {\n return;\n }\n this.opened = false;\n this.toggleButton.classList.remove('toggled');\n this.bar.classList.add('hidden');\n this.findController.active = false;\n }\n\n toggle() {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * @private\n */\n _adjustWidth() {\n if (!this.opened) {\n return;\n }\n\n // The find bar has an absolute position and thus the browser extends\n // its width to the maximum possible width once the find bar does not fit\n // entirely within the window anymore (and its elements are automatically\n // wrapped). Here we detect and fix that.\n this.bar.classList.remove('wrapContainers');\n\n let findbarHeight = this.bar.clientHeight;\n let inputContainerHeight = this.bar.firstElementChild.clientHeight;\n\n if (findbarHeight > inputContainerHeight) {\n // The findbar is taller than the input container, which means that\n // the browser wrapped some of the elements. For a consistent look,\n // wrap all of them to adjust the width of the find bar.\n this.bar.classList.add('wrapContainers');\n }\n }\n}\n\nexport {\n PDFFindBar,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_find_bar.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals chrome */\n\nimport { getGlobalEventBus } from './dom_events';\n\nfunction PDFHistory(options) {\n this.linkService = options.linkService;\n this.eventBus = options.eventBus || getGlobalEventBus();\n\n this.initialized = false;\n this.initialDestination = null;\n this.initialBookmark = null;\n}\n\nPDFHistory.prototype = {\n /**\n * @param {string} fingerprint\n */\n initialize: function pdfHistoryInitialize(fingerprint) {\n this.initialized = true;\n this.reInitialized = false;\n this.allowHashChange = true;\n this.historyUnlocked = true;\n this.isViewerInPresentationMode = false;\n\n this.previousHash = window.location.hash.substring(1);\n this.currentBookmark = '';\n this.currentPage = 0;\n this.updatePreviousBookmark = false;\n this.previousBookmark = '';\n this.previousPage = 0;\n this.nextHashParam = '';\n\n this.fingerprint = fingerprint;\n this.currentUid = this.uid = 0;\n this.current = {};\n\n var state = window.history.state;\n if (this._isStateObjectDefined(state)) {\n // This corresponds to navigating back to the document\n // from another page in the browser history.\n if (state.target.dest) {\n this.initialDestination = state.target.dest;\n } else {\n this.initialBookmark = state.target.hash;\n }\n this.currentUid = state.uid;\n this.uid = state.uid + 1;\n this.current = state.target;\n } else {\n // This corresponds to the loading of a new document.\n if (state && state.fingerprint &&\n this.fingerprint !== state.fingerprint) {\n // Reinitialize the browsing history when a new document\n // is opened in the web viewer.\n this.reInitialized = true;\n }\n this._pushOrReplaceState({ fingerprint: this.fingerprint, }, true);\n }\n\n var self = this;\n window.addEventListener('popstate', function pdfHistoryPopstate(evt) {\n if (!self.historyUnlocked) {\n return;\n }\n if (evt.state) {\n // Move back/forward in the history.\n self._goTo(evt.state);\n return;\n }\n\n // If the state is not set, then the user tried to navigate to a\n // different hash by manually editing the URL and pressing Enter, or by\n // clicking on an in-page link (e.g. the \"current view\" link).\n // Save the current view state to the browser history.\n\n // Note: In Firefox, history.null could also be null after an in-page\n // navigation to the same URL, and without dispatching the popstate\n // event: https://bugzilla.mozilla.org/show_bug.cgi?id=1183881\n\n if (self.uid === 0) {\n // Replace the previous state if it was not explicitly set.\n var previousParams = (self.previousHash && self.currentBookmark &&\n self.previousHash !== self.currentBookmark) ?\n { hash: self.currentBookmark, page: self.currentPage, } :\n { page: 1, };\n replacePreviousHistoryState(previousParams, function() {\n updateHistoryWithCurrentHash();\n });\n } else {\n updateHistoryWithCurrentHash();\n }\n });\n\n\n function updateHistoryWithCurrentHash() {\n self.previousHash = window.location.hash.slice(1);\n self._pushToHistory({ hash: self.previousHash, }, false, true);\n self._updatePreviousBookmark();\n }\n\n function replacePreviousHistoryState(params, callback) {\n // To modify the previous history entry, the following happens:\n // 1. history.back()\n // 2. _pushToHistory, which calls history.replaceState( ... )\n // 3. history.forward()\n // Because a navigation via the history API does not immediately update\n // the history state, the popstate event is used for synchronization.\n self.historyUnlocked = false;\n\n // Suppress the hashchange event to avoid side effects caused by\n // navigating back and forward.\n self.allowHashChange = false;\n window.addEventListener('popstate', rewriteHistoryAfterBack);\n history.back();\n\n function rewriteHistoryAfterBack() {\n window.removeEventListener('popstate', rewriteHistoryAfterBack);\n window.addEventListener('popstate', rewriteHistoryAfterForward);\n self._pushToHistory(params, false, true);\n history.forward();\n }\n function rewriteHistoryAfterForward() {\n window.removeEventListener('popstate', rewriteHistoryAfterForward);\n self.allowHashChange = true;\n self.historyUnlocked = true;\n callback();\n }\n }\n\n function pdfHistoryBeforeUnload() {\n var previousParams = self._getPreviousParams(null, true);\n if (previousParams) {\n var replacePrevious = (!self.current.dest &&\n self.current.hash !== self.previousHash);\n self._pushToHistory(previousParams, false, replacePrevious);\n self._updatePreviousBookmark();\n }\n // Remove the event listener when navigating away from the document,\n // since 'beforeunload' prevents Firefox from caching the document.\n window.removeEventListener('beforeunload', pdfHistoryBeforeUnload);\n }\n\n window.addEventListener('beforeunload', pdfHistoryBeforeUnload);\n\n window.addEventListener('pageshow', function pdfHistoryPageShow(evt) {\n // If the entire viewer (including the PDF file) is cached in\n // the browser, we need to reattach the 'beforeunload' event listener\n // since the 'DOMContentLoaded' event is not fired on 'pageshow'.\n window.addEventListener('beforeunload', pdfHistoryBeforeUnload);\n });\n\n self.eventBus.on('presentationmodechanged', function(e) {\n self.isViewerInPresentationMode = e.active;\n });\n },\n\n clearHistoryState: function pdfHistory_clearHistoryState() {\n this._pushOrReplaceState(null, true);\n },\n\n _isStateObjectDefined: function pdfHistory_isStateObjectDefined(state) {\n return (state && state.uid >= 0 &&\n state.fingerprint && this.fingerprint === state.fingerprint &&\n state.target && state.target.hash) ? true : false;\n },\n\n _pushOrReplaceState: function pdfHistory_pushOrReplaceState(stateObj,\n replace) {\n // history.state.chromecomState is managed by chromecom.js.\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n window.history.state && 'chromecomState' in window.history.state) {\n stateObj = stateObj || {};\n stateObj.chromecomState = window.history.state.chromecomState;\n }\n if (replace) {\n if (typeof PDFJSDev === 'undefined' ||\n PDFJSDev.test('GENERIC || CHROME')) {\n window.history.replaceState(stateObj, '', document.URL);\n } else {\n window.history.replaceState(stateObj, '');\n }\n } else {\n if (typeof PDFJSDev === 'undefined' ||\n PDFJSDev.test('GENERIC || CHROME')) {\n window.history.pushState(stateObj, '', document.URL);\n } else {\n window.history.pushState(stateObj, '');\n }\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME') &&\n top === window) {\n chrome.runtime.sendMessage('showPageAction');\n }\n }\n },\n\n get isHashChangeUnlocked() {\n if (!this.initialized) {\n return true;\n }\n return this.allowHashChange;\n },\n\n _updatePreviousBookmark: function pdfHistory_updatePreviousBookmark() {\n if (this.updatePreviousBookmark &&\n this.currentBookmark && this.currentPage) {\n this.previousBookmark = this.currentBookmark;\n this.previousPage = this.currentPage;\n this.updatePreviousBookmark = false;\n }\n },\n\n updateCurrentBookmark: function pdfHistoryUpdateCurrentBookmark(bookmark,\n pageNum) {\n if (this.initialized) {\n this.currentBookmark = bookmark.substring(1);\n this.currentPage = pageNum | 0;\n this._updatePreviousBookmark();\n }\n },\n\n updateNextHashParam: function pdfHistoryUpdateNextHashParam(param) {\n if (this.initialized) {\n this.nextHashParam = param;\n }\n },\n\n push: function pdfHistoryPush(params, isInitialBookmark) {\n if (!(this.initialized && this.historyUnlocked)) {\n return;\n }\n if (params.dest && !params.hash) {\n params.hash = (this.current.hash && this.current.dest &&\n this.current.dest === params.dest) ?\n this.current.hash :\n this.linkService.getDestinationHash(params.dest).split('#')[1];\n }\n if (params.page) {\n params.page |= 0;\n }\n if (isInitialBookmark) {\n var target = window.history.state.target;\n if (!target) {\n // Invoked when the user specifies an initial bookmark,\n // thus setting initialBookmark, when the document is loaded.\n this._pushToHistory(params, false);\n this.previousHash = window.location.hash.substring(1);\n }\n this.updatePreviousBookmark = this.nextHashParam ? false : true;\n if (target) {\n // If the current document is reloaded,\n // avoid creating duplicate entries in the history.\n this._updatePreviousBookmark();\n }\n return;\n }\n if (this.nextHashParam) {\n if (this.nextHashParam === params.hash) {\n this.nextHashParam = null;\n this.updatePreviousBookmark = true;\n return;\n }\n this.nextHashParam = null;\n }\n\n if (params.hash) {\n if (this.current.hash) {\n if (this.current.hash !== params.hash) {\n this._pushToHistory(params, true);\n } else {\n if (!this.current.page && params.page) {\n this._pushToHistory(params, false, true);\n }\n this.updatePreviousBookmark = true;\n }\n } else {\n this._pushToHistory(params, true);\n }\n } else if (this.current.page && params.page &&\n this.current.page !== params.page) {\n this._pushToHistory(params, true);\n }\n },\n\n _getPreviousParams: function pdfHistory_getPreviousParams(onlyCheckPage,\n beforeUnload) {\n if (!(this.currentBookmark && this.currentPage)) {\n return null;\n } else if (this.updatePreviousBookmark) {\n this.updatePreviousBookmark = false;\n }\n if (this.uid > 0 && !(this.previousBookmark && this.previousPage)) {\n // Prevent the history from getting stuck in the current state,\n // effectively preventing the user from going back/forward in\n // the history.\n //\n // This happens if the current position in the document didn't change\n // when the history was previously updated. The reasons for this are\n // either:\n // 1. The current zoom value is such that the document does not need to,\n // or cannot, be scrolled to display the destination.\n // 2. The previous destination is broken, and doesn't actally point to a\n // position within the document.\n // (This is either due to a bad PDF generator, or the user making a\n // mistake when entering a destination in the hash parameters.)\n return null;\n }\n if ((!this.current.dest && !onlyCheckPage) || beforeUnload) {\n if (this.previousBookmark === this.currentBookmark) {\n return null;\n }\n } else if (this.current.page || onlyCheckPage) {\n if (this.previousPage === this.currentPage) {\n return null;\n }\n } else {\n return null;\n }\n var params = { hash: this.currentBookmark, page: this.currentPage, };\n if (this.isViewerInPresentationMode) {\n params.hash = null;\n }\n return params;\n },\n\n _stateObj: function pdfHistory_stateObj(params) {\n return { fingerprint: this.fingerprint, uid: this.uid, target: params, };\n },\n\n _pushToHistory: function pdfHistory_pushToHistory(params,\n addPrevious, overwrite) {\n if (!this.initialized) {\n return;\n }\n if (!params.hash && params.page) {\n params.hash = ('page=' + params.page);\n }\n if (addPrevious && !overwrite) {\n var previousParams = this._getPreviousParams();\n if (previousParams) {\n var replacePrevious = (!this.current.dest &&\n this.current.hash !== this.previousHash);\n this._pushToHistory(previousParams, false, replacePrevious);\n }\n }\n this._pushOrReplaceState(this._stateObj(params),\n (overwrite || this.uid === 0));\n this.currentUid = this.uid++;\n this.current = params;\n this.updatePreviousBookmark = true;\n },\n\n _goTo: function pdfHistory_goTo(state) {\n if (!(this.initialized && this.historyUnlocked &&\n this._isStateObjectDefined(state))) {\n return;\n }\n if (!this.reInitialized && state.uid < this.currentUid) {\n var previousParams = this._getPreviousParams(true);\n if (previousParams) {\n this._pushToHistory(this.current, false);\n this._pushToHistory(previousParams, false);\n this.currentUid = state.uid;\n window.history.back();\n return;\n }\n }\n this.historyUnlocked = false;\n\n if (state.target.dest) {\n this.linkService.navigateTo(state.target.dest);\n } else {\n this.linkService.setHash(state.target.hash);\n }\n this.currentUid = state.uid;\n if (state.uid > this.uid) {\n this.uid = state.uid;\n }\n this.current = state.target;\n this.updatePreviousBookmark = true;\n\n var currentHash = window.location.hash.substring(1);\n if (this.previousHash !== currentHash) {\n this.allowHashChange = false;\n }\n this.previousHash = currentHash;\n\n this.historyUnlocked = true;\n },\n\n back: function pdfHistoryBack() {\n this.go(-1);\n },\n\n forward: function pdfHistoryForward() {\n this.go(1);\n },\n\n go: function pdfHistoryGo(direction) {\n if (this.initialized && this.historyUnlocked) {\n var state = window.history.state;\n if (direction === -1 && state && state.uid > 0) {\n window.history.back();\n } else if (direction === 1 && state && state.uid < (this.uid - 1)) {\n window.history.forward();\n }\n }\n },\n};\n\nexport {\n PDFHistory,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_history.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n addLinkAttributes, PDFJS, removeNullCharacters\n} from 'pdfjs-lib';\n\nconst DEFAULT_TITLE = '\\u2013';\n\n/**\n * @typedef {Object} PDFOutlineViewerOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {EventBus} eventBus - The application event bus.\n */\n\n/**\n * @typedef {Object} PDFOutlineViewerRenderParameters\n * @property {Array|null} outline - An array of outline objects.\n */\n\nclass PDFOutlineViewer {\n /**\n * @param {PDFOutlineViewerOptions} options\n */\n constructor({ container, linkService, eventBus, }) {\n this.outline = null;\n this.lastToggleIsShow = true;\n\n this.container = container;\n this.linkService = linkService;\n this.eventBus = eventBus;\n }\n\n reset() {\n this.outline = null;\n this.lastToggleIsShow = true;\n\n // Remove the outline from the DOM.\n this.container.textContent = '';\n\n // Ensure that the left (right in RTL locales) margin is always reset,\n // to prevent incorrect outline alignment if a new document is opened.\n this.container.classList.remove('outlineWithDeepNesting');\n }\n\n /**\n * @private\n */\n _dispatchEvent(outlineCount) {\n this.eventBus.dispatch('outlineloaded', {\n source: this,\n outlineCount,\n });\n }\n\n /**\n * @private\n */\n _bindLink(element, item) {\n if (item.url) {\n addLinkAttributes(element, {\n url: item.url,\n target: (item.newWindow ? PDFJS.LinkTarget.BLANK : undefined),\n });\n return;\n }\n let destination = item.dest;\n\n element.href = this.linkService.getDestinationHash(destination);\n element.onclick = () => {\n if (destination) {\n this.linkService.navigateTo(destination);\n }\n return false;\n };\n }\n\n /**\n * @private\n */\n _setStyles(element, item) {\n let styleStr = '';\n if (item.bold) {\n styleStr += 'font-weight: bold;';\n }\n if (item.italic) {\n styleStr += 'font-style: italic;';\n }\n\n if (styleStr) {\n element.setAttribute('style', styleStr);\n }\n }\n\n /**\n * Prepend a button before an outline item which allows the user to toggle\n * the visibility of all outline items at that level.\n *\n * @private\n */\n _addToggleButton(div) {\n let toggler = document.createElement('div');\n toggler.className = 'outlineItemToggler';\n toggler.onclick = (evt) => {\n evt.stopPropagation();\n toggler.classList.toggle('outlineItemsHidden');\n\n if (evt.shiftKey) {\n let shouldShowAll = !toggler.classList.contains('outlineItemsHidden');\n this._toggleOutlineItem(div, shouldShowAll);\n }\n };\n div.insertBefore(toggler, div.firstChild);\n }\n\n /**\n * Toggle the visibility of the subtree of an outline item.\n *\n * @param {Element} root - the root of the outline (sub)tree.\n * @param {boolean} show - whether to show the outline (sub)tree. If false,\n * the outline subtree rooted at |root| will be collapsed.\n *\n * @private\n */\n _toggleOutlineItem(root, show) {\n this.lastToggleIsShow = show;\n let togglers = root.querySelectorAll('.outlineItemToggler');\n for (let i = 0, ii = togglers.length; i < ii; ++i) {\n togglers[i].classList[show ? 'remove' : 'add']('outlineItemsHidden');\n }\n }\n\n /**\n * Collapse or expand all subtrees of the outline.\n */\n toggleOutlineTree() {\n if (!this.outline) {\n return;\n }\n this._toggleOutlineItem(this.container, !this.lastToggleIsShow);\n }\n\n /**\n * @param {PDFOutlineViewerRenderParameters} params\n */\n render({ outline, }) {\n let outlineCount = 0;\n\n if (this.outline) {\n this.reset();\n }\n this.outline = outline || null;\n\n if (!outline) {\n this._dispatchEvent(outlineCount);\n return;\n }\n\n let fragment = document.createDocumentFragment();\n let queue = [{ parent: fragment, items: this.outline, }];\n let hasAnyNesting = false;\n while (queue.length > 0) {\n let levelData = queue.shift();\n for (let i = 0, len = levelData.items.length; i < len; i++) {\n let item = levelData.items[i];\n\n let div = document.createElement('div');\n div.className = 'outlineItem';\n\n let element = document.createElement('a');\n this._bindLink(element, item);\n this._setStyles(element, item);\n element.textContent =\n removeNullCharacters(item.title) || DEFAULT_TITLE;\n\n div.appendChild(element);\n\n if (item.items.length > 0) {\n hasAnyNesting = true;\n this._addToggleButton(div);\n\n let itemsDiv = document.createElement('div');\n itemsDiv.className = 'outlineItems';\n div.appendChild(itemsDiv);\n queue.push({ parent: itemsDiv, items: item.items, });\n }\n\n levelData.parent.appendChild(div);\n outlineCount++;\n }\n }\n if (hasAnyNesting) {\n this.container.classList.add('outlineWithDeepNesting');\n }\n\n this.container.appendChild(fragment);\n\n this._dispatchEvent(outlineCount);\n }\n}\n\nexport {\n PDFOutlineViewer,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_outline_viewer.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n approximateFraction, CSS_UNITS, DEFAULT_SCALE, getOutputScale, NullL10n,\n RendererType, roundToDivide\n} from './ui_utils';\nimport {\n createPromiseCapability, CustomStyle, PDFJS, RenderingCancelledException,\n SVGGraphics\n} from 'pdfjs-lib';\nimport { getGlobalEventBus } from './dom_events';\nimport { RenderingStates } from './pdf_rendering_queue';\n\n/**\n * @typedef {Object} PDFPageViewOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} id - The page unique ID (normally its number).\n * @property {number} scale - The page scale display.\n * @property {PageViewport} defaultViewport - The page viewport.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {IPDFTextLayerFactory} textLayerFactory\n * @property {IPDFAnnotationLayerFactory} annotationLayerFactory\n * @property {boolean} enhanceTextSelection - Turns on the text selection\n * enhancement. The default is `false`.\n * @property {boolean} renderInteractiveForms - Turns on rendering of\n * interactive form elements. The default is `false`.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {IL10n} l10n - Localization service.\n */\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFPageView {\n /**\n * @param {PDFPageViewOptions} options\n */\n constructor(options) {\n let container = options.container;\n let defaultViewport = options.defaultViewport;\n\n this.id = options.id;\n this.renderingId = 'page' + this.id;\n\n this.pdfPage = null;\n this.pageLabel = null;\n this.rotation = 0;\n this.scale = options.scale || DEFAULT_SCALE;\n this.viewport = defaultViewport;\n this.pdfPageRotate = defaultViewport.rotation;\n this.hasRestrictedScaling = false;\n this.enhanceTextSelection = options.enhanceTextSelection || false;\n this.renderInteractiveForms = options.renderInteractiveForms || false;\n\n this.eventBus = options.eventBus || getGlobalEventBus();\n this.renderingQueue = options.renderingQueue;\n this.textLayerFactory = options.textLayerFactory;\n this.annotationLayerFactory = options.annotationLayerFactory;\n this.renderer = options.renderer || RendererType.CANVAS;\n this.l10n = options.l10n || NullL10n;\n\n this.paintTask = null;\n this.paintedViewportMap = new WeakMap();\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n this.error = null;\n\n this.onBeforeDraw = null;\n this.onAfterDraw = null;\n\n this.annotationLayer = null;\n this.textLayer = null;\n this.zoomLayer = null;\n\n let div = document.createElement('div');\n div.className = 'page';\n div.style.width = Math.floor(this.viewport.width) + 'px';\n div.style.height = Math.floor(this.viewport.height) + 'px';\n div.setAttribute('data-page-number', this.id);\n this.div = div;\n\n container.appendChild(div);\n }\n\n setPdfPage(pdfPage) {\n this.pdfPage = pdfPage;\n this.pdfPageRotate = pdfPage.rotate;\n\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = pdfPage.getViewport(this.scale * CSS_UNITS,\n totalRotation);\n this.stats = pdfPage.stats;\n this.reset();\n }\n\n destroy() {\n this.reset();\n if (this.pdfPage) {\n this.pdfPage.cleanup();\n this.pdfPage = null;\n }\n }\n\n /**\n * @private\n */\n _resetZoomLayer(removeFromDOM = false) {\n if (!this.zoomLayer) {\n return;\n }\n let zoomLayerCanvas = this.zoomLayer.firstChild;\n this.paintedViewportMap.delete(zoomLayerCanvas);\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n zoomLayerCanvas.width = 0;\n zoomLayerCanvas.height = 0;\n\n if (removeFromDOM) {\n // Note: `ChildNode.remove` doesn't throw if the parent node is undefined.\n this.zoomLayer.remove();\n }\n this.zoomLayer = null;\n }\n\n reset(keepZoomLayer = false, keepAnnotations = false) {\n this.cancelRendering();\n\n let div = this.div;\n div.style.width = Math.floor(this.viewport.width) + 'px';\n div.style.height = Math.floor(this.viewport.height) + 'px';\n\n let childNodes = div.childNodes;\n let currentZoomLayerNode = (keepZoomLayer && this.zoomLayer) || null;\n let currentAnnotationNode = (keepAnnotations && this.annotationLayer &&\n this.annotationLayer.div) || null;\n for (let i = childNodes.length - 1; i >= 0; i--) {\n let node = childNodes[i];\n if (currentZoomLayerNode === node || currentAnnotationNode === node) {\n continue;\n }\n div.removeChild(node);\n }\n div.removeAttribute('data-loaded');\n\n if (currentAnnotationNode) {\n // Hide the annotation layer until all elements are resized\n // so they are not displayed on the already resized page.\n this.annotationLayer.hide();\n } else {\n this.annotationLayer = null;\n }\n\n if (!currentZoomLayerNode) {\n if (this.canvas) {\n this.paintedViewportMap.delete(this.canvas);\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n this.canvas.width = 0;\n this.canvas.height = 0;\n delete this.canvas;\n }\n this._resetZoomLayer();\n }\n if (this.svg) {\n this.paintedViewportMap.delete(this.svg);\n delete this.svg;\n }\n\n this.loadingIconDiv = document.createElement('div');\n this.loadingIconDiv.className = 'loadingIcon';\n div.appendChild(this.loadingIconDiv);\n }\n\n update(scale, rotation) {\n this.scale = scale || this.scale;\n if (typeof rotation !== 'undefined') { // The rotation may be zero.\n this.rotation = rotation;\n }\n\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = this.viewport.clone({\n scale: this.scale * CSS_UNITS,\n rotation: totalRotation,\n });\n\n if (this.svg) {\n this.cssTransform(this.svg, true);\n\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: true,\n });\n return;\n }\n\n let isScalingRestricted = false;\n if (this.canvas && PDFJS.maxCanvasPixels > 0) {\n let outputScale = this.outputScale;\n if (((Math.floor(this.viewport.width) * outputScale.sx) | 0) *\n ((Math.floor(this.viewport.height) * outputScale.sy) | 0) >\n PDFJS.maxCanvasPixels) {\n isScalingRestricted = true;\n }\n }\n\n if (this.canvas) {\n if (PDFJS.useOnlyCssZoom ||\n (this.hasRestrictedScaling && isScalingRestricted)) {\n this.cssTransform(this.canvas, true);\n\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: true,\n });\n return;\n }\n if (!this.zoomLayer && !this.canvas.hasAttribute('hidden')) {\n this.zoomLayer = this.canvas.parentNode;\n this.zoomLayer.style.position = 'absolute';\n }\n }\n if (this.zoomLayer) {\n this.cssTransform(this.zoomLayer.firstChild);\n }\n this.reset(/* keepZoomLayer = */ true, /* keepAnnotations = */ true);\n }\n\n cancelRendering() {\n if (this.paintTask) {\n this.paintTask.cancel();\n this.paintTask = null;\n }\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n\n if (this.textLayer) {\n this.textLayer.cancel();\n this.textLayer = null;\n }\n }\n\n cssTransform(target, redrawAnnotations = false) {\n // Scale target (canvas or svg), its wrapper and page container.\n let width = this.viewport.width;\n let height = this.viewport.height;\n let div = this.div;\n target.style.width = target.parentNode.style.width = div.style.width =\n Math.floor(width) + 'px';\n target.style.height = target.parentNode.style.height = div.style.height =\n Math.floor(height) + 'px';\n // The canvas may have been originally rotated; rotate relative to that.\n let relativeRotation = this.viewport.rotation -\n this.paintedViewportMap.get(target).rotation;\n let absRotation = Math.abs(relativeRotation);\n let scaleX = 1, scaleY = 1;\n if (absRotation === 90 || absRotation === 270) {\n // Scale x and y because of the rotation.\n scaleX = height / width;\n scaleY = width / height;\n }\n let cssTransform = 'rotate(' + relativeRotation + 'deg) ' +\n 'scale(' + scaleX + ',' + scaleY + ')';\n CustomStyle.setProp('transform', target, cssTransform);\n\n if (this.textLayer) {\n // Rotating the text layer is more complicated since the divs inside the\n // the text layer are rotated.\n // TODO: This could probably be simplified by drawing the text layer in\n // one orientation and then rotating overall.\n let textLayerViewport = this.textLayer.viewport;\n let textRelativeRotation = this.viewport.rotation -\n textLayerViewport.rotation;\n let textAbsRotation = Math.abs(textRelativeRotation);\n let scale = width / textLayerViewport.width;\n if (textAbsRotation === 90 || textAbsRotation === 270) {\n scale = width / textLayerViewport.height;\n }\n let textLayerDiv = this.textLayer.textLayerDiv;\n let transX, transY;\n switch (textAbsRotation) {\n case 0:\n transX = transY = 0;\n break;\n case 90:\n transX = 0;\n transY = '-' + textLayerDiv.style.height;\n break;\n case 180:\n transX = '-' + textLayerDiv.style.width;\n transY = '-' + textLayerDiv.style.height;\n break;\n case 270:\n transX = '-' + textLayerDiv.style.width;\n transY = 0;\n break;\n default:\n console.error('Bad rotation value.');\n break;\n }\n CustomStyle.setProp('transform', textLayerDiv,\n 'rotate(' + textAbsRotation + 'deg) ' +\n 'scale(' + scale + ', ' + scale + ') ' +\n 'translate(' + transX + ', ' + transY + ')');\n CustomStyle.setProp('transformOrigin', textLayerDiv, '0% 0%');\n }\n\n if (redrawAnnotations && this.annotationLayer) {\n this.annotationLayer.render(this.viewport, 'display');\n }\n }\n\n get width() {\n return this.viewport.width;\n }\n\n get height() {\n return this.viewport.height;\n }\n\n getPagePoint(x, y) {\n return this.viewport.convertToPdfPoint(x, y);\n }\n\n draw() {\n if (this.renderingState !== RenderingStates.INITIAL) {\n console.error('Must be in new state before drawing');\n this.reset(); // Ensure that we reset all state to prevent issues.\n }\n\n if (!this.pdfPage) {\n this.renderingState = RenderingStates.FINISHED;\n return Promise.reject(new Error('Page is not loaded'));\n }\n\n this.renderingState = RenderingStates.RUNNING;\n\n let pdfPage = this.pdfPage;\n let div = this.div;\n // Wrap the canvas so that if it has a CSS transform for high DPI the\n // overflow will be hidden in Firefox.\n let canvasWrapper = document.createElement('div');\n canvasWrapper.style.width = div.style.width;\n canvasWrapper.style.height = div.style.height;\n canvasWrapper.classList.add('canvasWrapper');\n\n if (this.annotationLayer && this.annotationLayer.div) {\n // The annotation layer needs to stay on top.\n div.insertBefore(canvasWrapper, this.annotationLayer.div);\n } else {\n div.appendChild(canvasWrapper);\n }\n\n let textLayer = null;\n if (this.textLayerFactory) {\n let textLayerDiv = document.createElement('div');\n textLayerDiv.className = 'textLayer';\n textLayerDiv.style.width = canvasWrapper.style.width;\n textLayerDiv.style.height = canvasWrapper.style.height;\n if (this.annotationLayer && this.annotationLayer.div) {\n // The annotation layer needs to stay on top.\n div.insertBefore(textLayerDiv, this.annotationLayer.div);\n } else {\n div.appendChild(textLayerDiv);\n }\n\n textLayer = this.textLayerFactory.\n createTextLayerBuilder(textLayerDiv, this.id - 1, this.viewport,\n this.enhanceTextSelection);\n }\n this.textLayer = textLayer;\n\n let renderContinueCallback = null;\n if (this.renderingQueue) {\n renderContinueCallback = (cont) => {\n if (!this.renderingQueue.isHighestPriority(this)) {\n this.renderingState = RenderingStates.PAUSED;\n this.resume = () => {\n this.renderingState = RenderingStates.RUNNING;\n cont();\n };\n return;\n }\n cont();\n };\n }\n\n let finishPaintTask = (error) => {\n // The paintTask may have been replaced by a new one, so only remove\n // the reference to the paintTask if it matches the one that is\n // triggering this callback.\n if (paintTask === this.paintTask) {\n this.paintTask = null;\n }\n\n if (((typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('PDFJS_NEXT')) && error === 'cancelled') ||\n error instanceof RenderingCancelledException) {\n this.error = null;\n return Promise.resolve(undefined);\n }\n\n this.renderingState = RenderingStates.FINISHED;\n\n if (this.loadingIconDiv) {\n div.removeChild(this.loadingIconDiv);\n delete this.loadingIconDiv;\n }\n this._resetZoomLayer(/* removeFromDOM = */ true);\n\n this.error = error;\n this.stats = pdfPage.stats;\n if (this.onAfterDraw) {\n this.onAfterDraw();\n }\n this.eventBus.dispatch('pagerendered', {\n source: this,\n pageNumber: this.id,\n cssTransform: false,\n });\n\n if (error) {\n return Promise.reject(error);\n }\n return Promise.resolve(undefined);\n };\n\n let paintTask = this.renderer === RendererType.SVG ?\n this.paintOnSvg(canvasWrapper) :\n this.paintOnCanvas(canvasWrapper);\n paintTask.onRenderContinue = renderContinueCallback;\n this.paintTask = paintTask;\n\n let resultPromise = paintTask.promise.then(function() {\n return finishPaintTask(null).then(function () {\n if (textLayer) {\n let readableStream = pdfPage.streamTextContent({\n normalizeWhitespace: true,\n });\n textLayer.setTextContentStream(readableStream);\n textLayer.render();\n }\n });\n }, function(reason) {\n return finishPaintTask(reason);\n });\n\n if (this.annotationLayerFactory) {\n if (!this.annotationLayer) {\n this.annotationLayer = this.annotationLayerFactory.\n createAnnotationLayerBuilder(div, pdfPage,\n this.renderInteractiveForms, this.l10n);\n }\n this.annotationLayer.render(this.viewport, 'display');\n }\n div.setAttribute('data-loaded', true);\n\n if (this.onBeforeDraw) {\n this.onBeforeDraw();\n }\n return resultPromise;\n }\n\n paintOnCanvas(canvasWrapper) {\n let renderCapability = createPromiseCapability();\n let result = {\n promise: renderCapability.promise,\n onRenderContinue(cont) {\n cont();\n },\n cancel() {\n renderTask.cancel();\n },\n };\n\n let viewport = this.viewport;\n let canvas = document.createElement('canvas');\n canvas.id = this.renderingId;\n\n // Keep the canvas hidden until the first draw callback, or until drawing\n // is complete when `!this.renderingQueue`, to prevent black flickering.\n canvas.setAttribute('hidden', 'hidden');\n let isCanvasHidden = true;\n let showCanvas = function () {\n if (isCanvasHidden) {\n canvas.removeAttribute('hidden');\n isCanvasHidden = false;\n }\n };\n\n canvasWrapper.appendChild(canvas);\n this.canvas = canvas;\n\n if (typeof PDFJSDev === 'undefined' ||\n PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {\n canvas.mozOpaque = true;\n }\n\n let ctx = canvas.getContext('2d', { alpha: false, });\n let outputScale = getOutputScale(ctx);\n this.outputScale = outputScale;\n\n if (PDFJS.useOnlyCssZoom) {\n let actualSizeViewport = viewport.clone({ scale: CSS_UNITS, });\n // Use a scale that makes the canvas have the originally intended size\n // of the page.\n outputScale.sx *= actualSizeViewport.width / viewport.width;\n outputScale.sy *= actualSizeViewport.height / viewport.height;\n outputScale.scaled = true;\n }\n\n if (PDFJS.maxCanvasPixels > 0) {\n let pixelsInViewport = viewport.width * viewport.height;\n let maxScale = Math.sqrt(PDFJS.maxCanvasPixels / pixelsInViewport);\n if (outputScale.sx > maxScale || outputScale.sy > maxScale) {\n outputScale.sx = maxScale;\n outputScale.sy = maxScale;\n outputScale.scaled = true;\n this.hasRestrictedScaling = true;\n } else {\n this.hasRestrictedScaling = false;\n }\n }\n\n let sfx = approximateFraction(outputScale.sx);\n let sfy = approximateFraction(outputScale.sy);\n canvas.width = roundToDivide(viewport.width * outputScale.sx, sfx[0]);\n canvas.height = roundToDivide(viewport.height * outputScale.sy, sfy[0]);\n canvas.style.width = roundToDivide(viewport.width, sfx[1]) + 'px';\n canvas.style.height = roundToDivide(viewport.height, sfy[1]) + 'px';\n // Add the viewport so it's known what it was originally drawn with.\n this.paintedViewportMap.set(canvas, viewport);\n\n // Rendering area\n let transform = !outputScale.scaled ? null :\n [outputScale.sx, 0, 0, outputScale.sy, 0, 0];\n let renderContext = {\n canvasContext: ctx,\n transform,\n viewport: this.viewport,\n renderInteractiveForms: this.renderInteractiveForms,\n };\n let renderTask = this.pdfPage.render(renderContext);\n renderTask.onContinue = function (cont) {\n showCanvas();\n if (result.onRenderContinue) {\n result.onRenderContinue(cont);\n } else {\n cont();\n }\n };\n\n renderTask.promise.then(function() {\n showCanvas();\n renderCapability.resolve(undefined);\n }, function(error) {\n showCanvas();\n renderCapability.reject(error);\n });\n return result;\n }\n\n paintOnSvg(wrapper) {\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL || CHROME')) {\n // Return a mock object, to prevent errors such as e.g.\n // \"TypeError: paintTask.promise is undefined\".\n return {\n promise: Promise.reject(new Error('SVG rendering is not supported.')),\n onRenderContinue(cont) { },\n cancel() { },\n };\n }\n\n let cancelled = false;\n let ensureNotCancelled = () => {\n if (cancelled) {\n if ((typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('PDFJS_NEXT')) || PDFJS.pdfjsNext) {\n throw new RenderingCancelledException(\n 'Rendering cancelled, page ' + this.id, 'svg');\n } else {\n throw 'cancelled'; // eslint-disable-line no-throw-literal\n }\n }\n };\n\n let pdfPage = this.pdfPage;\n let actualSizeViewport = this.viewport.clone({ scale: CSS_UNITS, });\n let promise = pdfPage.getOperatorList().then((opList) => {\n ensureNotCancelled();\n let svgGfx = new SVGGraphics(pdfPage.commonObjs, pdfPage.objs);\n return svgGfx.getSVG(opList, actualSizeViewport).then((svg) => {\n ensureNotCancelled();\n this.svg = svg;\n this.paintedViewportMap.set(svg, actualSizeViewport);\n\n svg.style.width = wrapper.style.width;\n svg.style.height = wrapper.style.height;\n this.renderingState = RenderingStates.FINISHED;\n wrapper.appendChild(svg);\n });\n });\n\n return {\n promise,\n onRenderContinue(cont) {\n cont();\n },\n cancel() {\n cancelled = true;\n },\n };\n }\n\n /**\n * @param {string|null} label\n */\n setPageLabel(label) {\n this.pageLabel = (typeof label === 'string' ? label : null);\n\n if (this.pageLabel !== null) {\n this.div.setAttribute('data-page-label', this.pageLabel);\n } else {\n this.div.removeAttribute('data-page-label');\n }\n }\n}\n\nexport {\n PDFPageView,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_page_view.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { normalizeWheelEventDelta } from './ui_utils';\n\nconst DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS = 1500; // in ms\nconst DELAY_BEFORE_HIDING_CONTROLS = 3000; // in ms\nconst ACTIVE_SELECTOR = 'pdfPresentationMode';\nconst CONTROLS_SELECTOR = 'pdfPresentationModeControls';\nconst MOUSE_SCROLL_COOLDOWN_TIME = 50; // in ms\nconst PAGE_SWITCH_THRESHOLD = 0.1;\n\n// Number of CSS pixels for a movement to count as a swipe.\nconst SWIPE_MIN_DISTANCE_THRESHOLD = 50;\n\n// Swipe angle deviation from the x or y axis before it is not\n// considered a swipe in that direction any more.\nconst SWIPE_ANGLE_THRESHOLD = Math.PI / 6;\n\n/**\n * @typedef {Object} PDFPresentationModeOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {HTMLDivElement} viewer - (optional) The viewer element.\n * @property {PDFViewer} pdfViewer - The document viewer.\n * @property {EventBus} eventBus - The application event bus.\n * @property {Array} contextMenuItems - (optional) The menuitems that are added\n * to the context menu in Presentation Mode.\n */\n\nclass PDFPresentationMode {\n /**\n * @param {PDFPresentationModeOptions} options\n */\n constructor({ container, viewer = null, pdfViewer, eventBus,\n contextMenuItems = null, }) {\n this.container = container;\n this.viewer = viewer || container.firstElementChild;\n this.pdfViewer = pdfViewer;\n this.eventBus = eventBus;\n\n this.active = false;\n this.args = null;\n this.contextMenuOpen = false;\n this.mouseScrollTimeStamp = 0;\n this.mouseScrollDelta = 0;\n this.touchSwipeState = null;\n\n if (contextMenuItems) {\n contextMenuItems.contextFirstPage.addEventListener('click', () => {\n this.contextMenuOpen = false;\n this.eventBus.dispatch('firstpage');\n });\n contextMenuItems.contextLastPage.addEventListener('click', () => {\n this.contextMenuOpen = false;\n this.eventBus.dispatch('lastpage');\n });\n contextMenuItems.contextPageRotateCw.addEventListener('click', () => {\n this.contextMenuOpen = false;\n this.eventBus.dispatch('rotatecw');\n });\n contextMenuItems.contextPageRotateCcw.addEventListener('click', () => {\n this.contextMenuOpen = false;\n this.eventBus.dispatch('rotateccw');\n });\n }\n }\n\n /**\n * Request the browser to enter fullscreen mode.\n * @returns {boolean} Indicating if the request was successful.\n */\n request() {\n if (this.switchInProgress || this.active || !this.viewer.hasChildNodes()) {\n return false;\n }\n this._addFullscreenChangeListeners();\n this._setSwitchInProgress();\n this._notifyStateChange();\n\n if (this.container.requestFullscreen) {\n this.container.requestFullscreen();\n } else if (this.container.mozRequestFullScreen) {\n this.container.mozRequestFullScreen();\n } else if (this.container.webkitRequestFullscreen) {\n this.container.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);\n } else if (this.container.msRequestFullscreen) {\n this.container.msRequestFullscreen();\n } else {\n return false;\n }\n\n this.args = {\n page: this.pdfViewer.currentPageNumber,\n previousScale: this.pdfViewer.currentScaleValue,\n };\n\n return true;\n }\n\n /**\n * @private\n */\n _mouseWheel(evt) {\n if (!this.active) {\n return;\n }\n\n evt.preventDefault();\n\n let delta = normalizeWheelEventDelta(evt);\n let currentTime = (new Date()).getTime();\n let storedTime = this.mouseScrollTimeStamp;\n\n // If we've already switched page, avoid accidentally switching again.\n if (currentTime > storedTime &&\n currentTime - storedTime < MOUSE_SCROLL_COOLDOWN_TIME) {\n return;\n }\n // If the scroll direction changed, reset the accumulated scroll delta.\n if ((this.mouseScrollDelta > 0 && delta < 0) ||\n (this.mouseScrollDelta < 0 && delta > 0)) {\n this._resetMouseScrollState();\n }\n this.mouseScrollDelta += delta;\n\n if (Math.abs(this.mouseScrollDelta) >= PAGE_SWITCH_THRESHOLD) {\n let totalDelta = this.mouseScrollDelta;\n this._resetMouseScrollState();\n let success = totalDelta > 0 ? this._goToPreviousPage()\n : this._goToNextPage();\n if (success) {\n this.mouseScrollTimeStamp = currentTime;\n }\n }\n }\n\n get isFullscreen() {\n return !!(document.fullscreenElement || document.mozFullScreen ||\n document.webkitIsFullScreen || document.msFullscreenElement);\n }\n\n /**\n * @private\n */\n _goToPreviousPage() {\n let page = this.pdfViewer.currentPageNumber;\n // If we're at the first page, we don't need to do anything.\n if (page <= 1) {\n return false;\n }\n this.pdfViewer.currentPageNumber = (page - 1);\n return true;\n }\n\n /**\n * @private\n */\n _goToNextPage() {\n let page = this.pdfViewer.currentPageNumber;\n // If we're at the last page, we don't need to do anything.\n if (page >= this.pdfViewer.pagesCount) {\n return false;\n }\n this.pdfViewer.currentPageNumber = (page + 1);\n return true;\n }\n\n /**\n * @private\n */\n _notifyStateChange() {\n this.eventBus.dispatch('presentationmodechanged', {\n source: this,\n active: this.active,\n switchInProgress: !!this.switchInProgress,\n });\n }\n\n /**\n * Used to initialize a timeout when requesting Presentation Mode,\n * i.e. when the browser is requested to enter fullscreen mode.\n * This timeout is used to prevent the current page from being scrolled\n * partially, or completely, out of view when entering Presentation Mode.\n * NOTE: This issue seems limited to certain zoom levels (e.g. page-width).\n *\n * @private\n */\n _setSwitchInProgress() {\n if (this.switchInProgress) {\n clearTimeout(this.switchInProgress);\n }\n this.switchInProgress = setTimeout(() => {\n this._removeFullscreenChangeListeners();\n delete this.switchInProgress;\n this._notifyStateChange();\n }, DELAY_BEFORE_RESETTING_SWITCH_IN_PROGRESS);\n }\n\n /**\n * @private\n */\n _resetSwitchInProgress() {\n if (this.switchInProgress) {\n clearTimeout(this.switchInProgress);\n delete this.switchInProgress;\n }\n }\n\n /**\n * @private\n */\n _enter() {\n this.active = true;\n this._resetSwitchInProgress();\n this._notifyStateChange();\n this.container.classList.add(ACTIVE_SELECTOR);\n\n // Ensure that the correct page is scrolled into view when entering\n // Presentation Mode, by waiting until fullscreen mode in enabled.\n setTimeout(() => {\n this.pdfViewer.currentPageNumber = this.args.page;\n this.pdfViewer.currentScaleValue = 'page-fit';\n }, 0);\n\n this._addWindowListeners();\n this._showControls();\n this.contextMenuOpen = false;\n this.container.setAttribute('contextmenu', 'viewerContextMenu');\n\n // Text selection is disabled in Presentation Mode, thus it's not possible\n // for the user to deselect text that is selected (e.g. with \"Select all\")\n // when entering Presentation Mode, hence we remove any active selection.\n window.getSelection().removeAllRanges();\n }\n\n /**\n * @private\n */\n _exit() {\n let page = this.pdfViewer.currentPageNumber;\n this.container.classList.remove(ACTIVE_SELECTOR);\n\n // Ensure that the correct page is scrolled into view when exiting\n // Presentation Mode, by waiting until fullscreen mode is disabled.\n setTimeout(() => {\n this.active = false;\n this._removeFullscreenChangeListeners();\n this._notifyStateChange();\n\n this.pdfViewer.currentScaleValue = this.args.previousScale;\n this.pdfViewer.currentPageNumber = page;\n this.args = null;\n }, 0);\n\n this._removeWindowListeners();\n this._hideControls();\n this._resetMouseScrollState();\n this.container.removeAttribute('contextmenu');\n this.contextMenuOpen = false;\n }\n\n /**\n * @private\n */\n _mouseDown(evt) {\n if (this.contextMenuOpen) {\n this.contextMenuOpen = false;\n evt.preventDefault();\n return;\n }\n if (evt.button === 0) {\n // Enable clicking of links in presentation mode. Note: only links\n // pointing to destinations in the current PDF document work.\n let isInternalLink = (evt.target.href &&\n evt.target.classList.contains('internalLink'));\n if (!isInternalLink) {\n // Unless an internal link was clicked, advance one page.\n evt.preventDefault();\n\n if (evt.shiftKey) {\n this._goToPreviousPage();\n } else {\n this._goToNextPage();\n }\n }\n }\n }\n\n /**\n * @private\n */\n _contextMenu() {\n this.contextMenuOpen = true;\n }\n\n /**\n * @private\n */\n _showControls() {\n if (this.controlsTimeout) {\n clearTimeout(this.controlsTimeout);\n } else {\n this.container.classList.add(CONTROLS_SELECTOR);\n }\n this.controlsTimeout = setTimeout(() => {\n this.container.classList.remove(CONTROLS_SELECTOR);\n delete this.controlsTimeout;\n }, DELAY_BEFORE_HIDING_CONTROLS);\n }\n\n /**\n * @private\n */\n _hideControls() {\n if (!this.controlsTimeout) {\n return;\n }\n clearTimeout(this.controlsTimeout);\n this.container.classList.remove(CONTROLS_SELECTOR);\n delete this.controlsTimeout;\n }\n\n /**\n * Resets the properties used for tracking mouse scrolling events.\n *\n * @private\n */\n _resetMouseScrollState() {\n this.mouseScrollTimeStamp = 0;\n this.mouseScrollDelta = 0;\n }\n\n /**\n * @private\n */\n _touchSwipe(evt) {\n if (!this.active) {\n return;\n }\n if (evt.touches.length > 1) {\n // Multiple touch points detected; cancel the swipe.\n this.touchSwipeState = null;\n return;\n }\n\n switch (evt.type) {\n case 'touchstart':\n this.touchSwipeState = {\n startX: evt.touches[0].pageX,\n startY: evt.touches[0].pageY,\n endX: evt.touches[0].pageX,\n endY: evt.touches[0].pageY,\n };\n break;\n case 'touchmove':\n if (this.touchSwipeState === null) {\n return;\n }\n this.touchSwipeState.endX = evt.touches[0].pageX;\n this.touchSwipeState.endY = evt.touches[0].pageY;\n // Avoid the swipe from triggering browser gestures (Chrome in\n // particular has some sort of swipe gesture in fullscreen mode).\n evt.preventDefault();\n break;\n case 'touchend':\n if (this.touchSwipeState === null) {\n return;\n }\n let delta = 0;\n let dx = this.touchSwipeState.endX - this.touchSwipeState.startX;\n let dy = this.touchSwipeState.endY - this.touchSwipeState.startY;\n let absAngle = Math.abs(Math.atan2(dy, dx));\n if (Math.abs(dx) > SWIPE_MIN_DISTANCE_THRESHOLD &&\n (absAngle <= SWIPE_ANGLE_THRESHOLD ||\n absAngle >= (Math.PI - SWIPE_ANGLE_THRESHOLD))) {\n // Horizontal swipe.\n delta = dx;\n } else if (Math.abs(dy) > SWIPE_MIN_DISTANCE_THRESHOLD &&\n Math.abs(absAngle - (Math.PI / 2)) <= SWIPE_ANGLE_THRESHOLD) {\n // Vertical swipe.\n delta = dy;\n }\n if (delta > 0) {\n this._goToPreviousPage();\n } else if (delta < 0) {\n this._goToNextPage();\n }\n break;\n }\n }\n\n /**\n * @private\n */\n _addWindowListeners() {\n this.showControlsBind = this._showControls.bind(this);\n this.mouseDownBind = this._mouseDown.bind(this);\n this.mouseWheelBind = this._mouseWheel.bind(this);\n this.resetMouseScrollStateBind = this._resetMouseScrollState.bind(this);\n this.contextMenuBind = this._contextMenu.bind(this);\n this.touchSwipeBind = this._touchSwipe.bind(this);\n\n window.addEventListener('mousemove', this.showControlsBind);\n window.addEventListener('mousedown', this.mouseDownBind);\n window.addEventListener('wheel', this.mouseWheelBind);\n window.addEventListener('keydown', this.resetMouseScrollStateBind);\n window.addEventListener('contextmenu', this.contextMenuBind);\n window.addEventListener('touchstart', this.touchSwipeBind);\n window.addEventListener('touchmove', this.touchSwipeBind);\n window.addEventListener('touchend', this.touchSwipeBind);\n }\n\n /**\n * @private\n */\n _removeWindowListeners() {\n window.removeEventListener('mousemove', this.showControlsBind);\n window.removeEventListener('mousedown', this.mouseDownBind);\n window.removeEventListener('wheel', this.mouseWheelBind);\n window.removeEventListener('keydown', this.resetMouseScrollStateBind);\n window.removeEventListener('contextmenu', this.contextMenuBind);\n window.removeEventListener('touchstart', this.touchSwipeBind);\n window.removeEventListener('touchmove', this.touchSwipeBind);\n window.removeEventListener('touchend', this.touchSwipeBind);\n\n delete this.showControlsBind;\n delete this.mouseDownBind;\n delete this.mouseWheelBind;\n delete this.resetMouseScrollStateBind;\n delete this.contextMenuBind;\n delete this.touchSwipeBind;\n }\n\n /**\n * @private\n */\n _fullscreenChange() {\n if (this.isFullscreen) {\n this._enter();\n } else {\n this._exit();\n }\n }\n\n /**\n * @private\n */\n _addFullscreenChangeListeners() {\n this.fullscreenChangeBind = this._fullscreenChange.bind(this);\n\n window.addEventListener('fullscreenchange', this.fullscreenChangeBind);\n window.addEventListener('mozfullscreenchange', this.fullscreenChangeBind);\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n window.addEventListener('webkitfullscreenchange',\n this.fullscreenChangeBind);\n window.addEventListener('MSFullscreenChange',\n this.fullscreenChangeBind);\n }\n }\n\n /**\n * @private\n */\n _removeFullscreenChangeListeners() {\n window.removeEventListener('fullscreenchange', this.fullscreenChangeBind);\n window.removeEventListener('mozfullscreenchange',\n this.fullscreenChangeBind);\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n window.removeEventListener('webkitfullscreenchange',\n this.fullscreenChangeBind);\n window.removeEventListener('MSFullscreenChange',\n this.fullscreenChangeBind);\n }\n\n delete this.fullscreenChangeBind;\n }\n}\n\nexport {\n PDFPresentationMode,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_presentation_mode.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { NullL10n } from './ui_utils';\nimport { RenderingStates } from './pdf_rendering_queue';\n\nconst UI_NOTIFICATION_CLASS = 'pdfSidebarNotification';\n\nconst SidebarView = {\n NONE: 0,\n THUMBS: 1,\n OUTLINE: 2,\n ATTACHMENTS: 3,\n};\n\n/**\n * @typedef {Object} PDFSidebarOptions\n * @property {PDFViewer} pdfViewer - The document viewer.\n * @property {PDFThumbnailViewer} pdfThumbnailViewer - The thumbnail viewer.\n * @property {PDFOutlineViewer} pdfOutlineViewer - The outline viewer.\n * @property {HTMLDivElement} mainContainer - The main container\n * (in which the viewer element is placed).\n * @property {HTMLDivElement} outerContainer - The outer container\n * (encasing both the viewer and sidebar elements).\n * @property {EventBus} eventBus - The application event bus.\n * @property {HTMLButtonElement} toggleButton - The button used for\n * opening/closing the sidebar.\n * @property {HTMLButtonElement} thumbnailButton - The button used to show\n * the thumbnail view.\n * @property {HTMLButtonElement} outlineButton - The button used to show\n * the outline view.\n * @property {HTMLButtonElement} attachmentsButton - The button used to show\n * the attachments view.\n * @property {HTMLDivElement} thumbnailView - The container in which\n * the thumbnails are placed.\n * @property {HTMLDivElement} outlineView - The container in which\n * the outline is placed.\n * @property {HTMLDivElement} attachmentsView - The container in which\n * the attachments are placed.\n * @property {boolean} disableNotification - (optional) Disable the notification\n * for documents containing outline/attachments. The default value is `false`.\n */\n\nclass PDFSidebar {\n /**\n * @param {PDFSidebarOptions} options\n * @param {IL10n} l10n - Localization service.\n */\n constructor(options, l10n = NullL10n) {\n this.isOpen = false;\n this.active = SidebarView.THUMBS;\n this.isInitialViewSet = false;\n\n /**\n * Callback used when the sidebar has been opened/closed, to ensure that\n * the viewers (PDFViewer/PDFThumbnailViewer) are updated correctly.\n */\n this.onToggled = null;\n\n this.pdfViewer = options.pdfViewer;\n this.pdfThumbnailViewer = options.pdfThumbnailViewer;\n this.pdfOutlineViewer = options.pdfOutlineViewer;\n\n this.mainContainer = options.mainContainer;\n this.outerContainer = options.outerContainer;\n this.eventBus = options.eventBus;\n this.toggleButton = options.toggleButton;\n\n this.thumbnailButton = options.thumbnailButton;\n this.outlineButton = options.outlineButton;\n this.attachmentsButton = options.attachmentsButton;\n\n this.thumbnailView = options.thumbnailView;\n this.outlineView = options.outlineView;\n this.attachmentsView = options.attachmentsView;\n\n this.disableNotification = options.disableNotification || false;\n\n this.l10n = l10n;\n\n this._addEventListeners();\n }\n\n reset() {\n this.isInitialViewSet = false;\n\n this._hideUINotification(null);\n this.switchView(SidebarView.THUMBS);\n\n this.outlineButton.disabled = false;\n this.attachmentsButton.disabled = false;\n }\n\n /**\n * @returns {number} One of the values in {SidebarView}.\n */\n get visibleView() {\n return (this.isOpen ? this.active : SidebarView.NONE);\n }\n\n get isThumbnailViewVisible() {\n return (this.isOpen && this.active === SidebarView.THUMBS);\n }\n\n get isOutlineViewVisible() {\n return (this.isOpen && this.active === SidebarView.OUTLINE);\n }\n\n get isAttachmentsViewVisible() {\n return (this.isOpen && this.active === SidebarView.ATTACHMENTS);\n }\n\n /**\n * @param {number} view - The sidebar view that should become visible,\n * must be one of the values in {SidebarView}.\n */\n setInitialView(view) {\n if (this.isInitialViewSet) {\n return;\n }\n this.isInitialViewSet = true;\n\n if (this.isOpen && view === SidebarView.NONE) {\n this._dispatchEvent();\n // If the user has already manually opened the sidebar,\n // immediately closing it would be bad UX.\n return;\n }\n let isViewPreserved = (view === this.visibleView);\n this.switchView(view, /* forceOpen */ true);\n\n if (isViewPreserved) {\n // Prevent dispatching two back-to-back `sidebarviewchanged` events,\n // since `this.switchView` dispatched the event if the view changed.\n this._dispatchEvent();\n }\n }\n\n /**\n * @param {number} view - The sidebar view that should be switched to,\n * must be one of the values in {SidebarView}.\n * @param {boolean} forceOpen - (optional) Ensure that the sidebar is open.\n * The default value is `false`.\n */\n switchView(view, forceOpen = false) {\n if (view === SidebarView.NONE) {\n this.close();\n return;\n }\n let isViewChanged = (view !== this.active);\n let shouldForceRendering = false;\n\n switch (view) {\n case SidebarView.THUMBS:\n this.thumbnailButton.classList.add('toggled');\n this.outlineButton.classList.remove('toggled');\n this.attachmentsButton.classList.remove('toggled');\n\n this.thumbnailView.classList.remove('hidden');\n this.outlineView.classList.add('hidden');\n this.attachmentsView.classList.add('hidden');\n\n if (this.isOpen && isViewChanged) {\n this._updateThumbnailViewer();\n shouldForceRendering = true;\n }\n break;\n case SidebarView.OUTLINE:\n if (this.outlineButton.disabled) {\n return;\n }\n this.thumbnailButton.classList.remove('toggled');\n this.outlineButton.classList.add('toggled');\n this.attachmentsButton.classList.remove('toggled');\n\n this.thumbnailView.classList.add('hidden');\n this.outlineView.classList.remove('hidden');\n this.attachmentsView.classList.add('hidden');\n break;\n case SidebarView.ATTACHMENTS:\n if (this.attachmentsButton.disabled) {\n return;\n }\n this.thumbnailButton.classList.remove('toggled');\n this.outlineButton.classList.remove('toggled');\n this.attachmentsButton.classList.add('toggled');\n\n this.thumbnailView.classList.add('hidden');\n this.outlineView.classList.add('hidden');\n this.attachmentsView.classList.remove('hidden');\n break;\n default:\n console.error('PDFSidebar_switchView: \"' + view +\n '\" is an unsupported value.');\n return;\n }\n // Update the active view *after* it has been validated above,\n // in order to prevent setting it to an invalid state.\n this.active = view | 0;\n\n if (forceOpen && !this.isOpen) {\n this.open();\n return; // NOTE: Opening will trigger rendering, and dispatch the event.\n }\n if (shouldForceRendering) {\n this._forceRendering();\n }\n if (isViewChanged) {\n this._dispatchEvent();\n }\n this._hideUINotification(this.active);\n }\n\n open() {\n if (this.isOpen) {\n return;\n }\n this.isOpen = true;\n this.toggleButton.classList.add('toggled');\n\n this.outerContainer.classList.add('sidebarMoving');\n this.outerContainer.classList.add('sidebarOpen');\n\n if (this.active === SidebarView.THUMBS) {\n this._updateThumbnailViewer();\n }\n this._forceRendering();\n this._dispatchEvent();\n\n this._hideUINotification(this.active);\n }\n\n close() {\n if (!this.isOpen) {\n return;\n }\n this.isOpen = false;\n this.toggleButton.classList.remove('toggled');\n\n this.outerContainer.classList.add('sidebarMoving');\n this.outerContainer.classList.remove('sidebarOpen');\n\n this._forceRendering();\n this._dispatchEvent();\n }\n\n toggle() {\n if (this.isOpen) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * @private\n */\n _dispatchEvent() {\n this.eventBus.dispatch('sidebarviewchanged', {\n source: this,\n view: this.visibleView,\n });\n }\n\n /**\n * @private\n */\n _forceRendering() {\n if (this.onToggled) {\n this.onToggled();\n } else { // Fallback\n this.pdfViewer.forceRendering();\n this.pdfThumbnailViewer.forceRendering();\n }\n }\n\n /**\n * @private\n */\n _updateThumbnailViewer() {\n let { pdfViewer, pdfThumbnailViewer, } = this;\n\n // Use the rendered pages to set the corresponding thumbnail images.\n let pagesCount = pdfViewer.pagesCount;\n for (let pageIndex = 0; pageIndex < pagesCount; pageIndex++) {\n let pageView = pdfViewer.getPageView(pageIndex);\n if (pageView && pageView.renderingState === RenderingStates.FINISHED) {\n let thumbnailView = pdfThumbnailViewer.getThumbnail(pageIndex);\n thumbnailView.setImage(pageView);\n }\n }\n pdfThumbnailViewer.scrollThumbnailIntoView(pdfViewer.currentPageNumber);\n }\n\n /**\n * @private\n */\n _showUINotification(view) {\n if (this.disableNotification) {\n return;\n }\n\n this.l10n.get('toggle_sidebar_notification.title', null,\n 'Toggle Sidebar (document contains outline/attachments)').\n then((msg) => {\n this.toggleButton.title = msg;\n });\n\n if (!this.isOpen) {\n // Only show the notification on the `toggleButton` if the sidebar is\n // currently closed, to avoid unnecessarily bothering the user.\n this.toggleButton.classList.add(UI_NOTIFICATION_CLASS);\n } else if (view === this.active) {\n // If the sidebar is currently open *and* the `view` is visible, do not\n // bother the user with a notification on the corresponding button.\n return;\n }\n\n switch (view) {\n case SidebarView.OUTLINE:\n this.outlineButton.classList.add(UI_NOTIFICATION_CLASS);\n break;\n case SidebarView.ATTACHMENTS:\n this.attachmentsButton.classList.add(UI_NOTIFICATION_CLASS);\n break;\n }\n }\n\n /**\n * @private\n */\n _hideUINotification(view) {\n if (this.disableNotification) {\n return;\n }\n\n let removeNotification = (view) => {\n switch (view) {\n case SidebarView.OUTLINE:\n this.outlineButton.classList.remove(UI_NOTIFICATION_CLASS);\n break;\n case SidebarView.ATTACHMENTS:\n this.attachmentsButton.classList.remove(UI_NOTIFICATION_CLASS);\n break;\n }\n };\n\n if (!this.isOpen && view !== null) {\n // Only hide the notifications when the sidebar is currently open,\n // or when it is being reset (i.e. `view === null`).\n return;\n }\n this.toggleButton.classList.remove(UI_NOTIFICATION_CLASS);\n\n if (view !== null) {\n removeNotification(view);\n return;\n }\n for (view in SidebarView) { // Remove all sidebar notifications on reset.\n removeNotification(SidebarView[view]);\n }\n\n this.l10n.get('toggle_sidebar.title', null, 'Toggle Sidebar').\n then((msg) => {\n this.toggleButton.title = msg;\n });\n }\n\n /**\n * @private\n */\n _addEventListeners() {\n this.mainContainer.addEventListener('transitionend', (evt) => {\n if (evt.target === this.mainContainer) {\n this.outerContainer.classList.remove('sidebarMoving');\n }\n });\n\n // Buttons for switching views.\n this.thumbnailButton.addEventListener('click', () => {\n this.switchView(SidebarView.THUMBS);\n });\n\n this.outlineButton.addEventListener('click', () => {\n this.switchView(SidebarView.OUTLINE);\n });\n this.outlineButton.addEventListener('dblclick', () => {\n this.pdfOutlineViewer.toggleOutlineTree();\n });\n\n this.attachmentsButton.addEventListener('click', () => {\n this.switchView(SidebarView.ATTACHMENTS);\n });\n\n // Disable/enable views.\n this.eventBus.on('outlineloaded', (evt) => {\n let outlineCount = evt.outlineCount;\n\n this.outlineButton.disabled = !outlineCount;\n\n if (outlineCount) {\n this._showUINotification(SidebarView.OUTLINE);\n } else if (this.active === SidebarView.OUTLINE) {\n // If the outline view was opened during document load, switch away\n // from it if it turns out that the document has no outline.\n this.switchView(SidebarView.THUMBS);\n }\n });\n\n this.eventBus.on('attachmentsloaded', (evt) => {\n let attachmentsCount = evt.attachmentsCount;\n\n this.attachmentsButton.disabled = !attachmentsCount;\n\n if (attachmentsCount) {\n this._showUINotification(SidebarView.ATTACHMENTS);\n } else if (this.active === SidebarView.ATTACHMENTS) {\n // If the attachment view was opened during document load, switch away\n // from it if it turns out that the document has no attachments.\n this.switchView(SidebarView.THUMBS);\n }\n });\n\n // Update the thumbnailViewer, if visible, when exiting presentation mode.\n this.eventBus.on('presentationmodechanged', (evt) => {\n if (!evt.active && !evt.switchInProgress && this.isThumbnailViewVisible) {\n this._updateThumbnailViewer();\n }\n });\n }\n}\n\nexport {\n SidebarView,\n PDFSidebar,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_sidebar.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n createPromiseCapability, RenderingCancelledException\n} from 'pdfjs-lib';\nimport { getOutputScale, NullL10n } from './ui_utils';\nimport { RenderingStates } from './pdf_rendering_queue';\n\nconst MAX_NUM_SCALING_STEPS = 3;\nconst THUMBNAIL_CANVAS_BORDER_WIDTH = 1; // px\nconst THUMBNAIL_WIDTH = 98; // px\n\n/**\n * @typedef {Object} PDFThumbnailViewOptions\n * @property {HTMLDivElement} container - The viewer element.\n * @property {number} id - The thumbnail's unique ID (normally its number).\n * @property {PageViewport} defaultViewport - The page viewport.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {boolean} disableCanvasToImageConversion - (optional) Don't convert\n * the canvas thumbnails to images. This prevents `toDataURL` calls,\n * but increases the overall memory usage. The default value is `false`.\n * @property {IL10n} l10n - Localization service.\n */\n\nconst TempImageFactory = (function TempImageFactoryClosure() {\n let tempCanvasCache = null;\n\n return {\n getCanvas(width, height) {\n let tempCanvas = tempCanvasCache;\n if (!tempCanvas) {\n tempCanvas = document.createElement('canvas');\n tempCanvasCache = tempCanvas;\n }\n tempCanvas.width = width;\n tempCanvas.height = height;\n\n // Since this is a temporary canvas, we need to fill it with a white\n // background ourselves. `_getPageDrawContext` uses CSS rules for this.\n if (typeof PDFJSDev === 'undefined' ||\n PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {\n tempCanvas.mozOpaque = true;\n }\n\n let ctx = tempCanvas.getContext('2d', { alpha: false, });\n ctx.save();\n ctx.fillStyle = 'rgb(255, 255, 255)';\n ctx.fillRect(0, 0, width, height);\n ctx.restore();\n return tempCanvas;\n },\n\n destroyCanvas() {\n let tempCanvas = tempCanvasCache;\n if (tempCanvas) {\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n tempCanvas.width = 0;\n tempCanvas.height = 0;\n }\n tempCanvasCache = null;\n },\n };\n})();\n\n/**\n * @implements {IRenderableView}\n */\nclass PDFThumbnailView {\n /**\n * @param {PDFThumbnailViewOptions} options\n */\n constructor({ container, id, defaultViewport, linkService, renderingQueue,\n disableCanvasToImageConversion = false, l10n = NullL10n, }) {\n this.id = id;\n this.renderingId = 'thumbnail' + id;\n this.pageLabel = null;\n\n this.pdfPage = null;\n this.rotation = 0;\n this.viewport = defaultViewport;\n this.pdfPageRotate = defaultViewport.rotation;\n\n this.linkService = linkService;\n this.renderingQueue = renderingQueue;\n\n this.renderTask = null;\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n this.disableCanvasToImageConversion = disableCanvasToImageConversion;\n\n this.pageWidth = this.viewport.width;\n this.pageHeight = this.viewport.height;\n this.pageRatio = this.pageWidth / this.pageHeight;\n\n this.canvasWidth = THUMBNAIL_WIDTH;\n this.canvasHeight = (this.canvasWidth / this.pageRatio) | 0;\n this.scale = this.canvasWidth / this.pageWidth;\n\n this.l10n = l10n;\n\n let anchor = document.createElement('a');\n anchor.href = linkService.getAnchorUrl('#page=' + id);\n this.l10n.get('thumb_page_title', { page: id, }, 'Page {{page}}').\n then((msg) => {\n anchor.title = msg;\n });\n anchor.onclick = function() {\n linkService.page = id;\n return false;\n };\n this.anchor = anchor;\n\n let div = document.createElement('div');\n div.className = 'thumbnail';\n div.setAttribute('data-page-number', this.id);\n this.div = div;\n\n if (id === 1) {\n // Highlight the thumbnail of the first page when no page number is\n // specified (or exists in cache) when the document is loaded.\n div.classList.add('selected');\n }\n\n let ring = document.createElement('div');\n ring.className = 'thumbnailSelectionRing';\n let borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;\n ring.style.width = this.canvasWidth + borderAdjustment + 'px';\n ring.style.height = this.canvasHeight + borderAdjustment + 'px';\n this.ring = ring;\n\n div.appendChild(ring);\n anchor.appendChild(div);\n container.appendChild(anchor);\n }\n\n setPdfPage(pdfPage) {\n this.pdfPage = pdfPage;\n this.pdfPageRotate = pdfPage.rotate;\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = pdfPage.getViewport(1, totalRotation);\n this.reset();\n }\n\n reset() {\n this.cancelRendering();\n\n this.pageWidth = this.viewport.width;\n this.pageHeight = this.viewport.height;\n this.pageRatio = this.pageWidth / this.pageHeight;\n\n this.canvasHeight = (this.canvasWidth / this.pageRatio) | 0;\n this.scale = (this.canvasWidth / this.pageWidth);\n\n this.div.removeAttribute('data-loaded');\n let ring = this.ring;\n let childNodes = ring.childNodes;\n for (let i = childNodes.length - 1; i >= 0; i--) {\n ring.removeChild(childNodes[i]);\n }\n let borderAdjustment = 2 * THUMBNAIL_CANVAS_BORDER_WIDTH;\n ring.style.width = this.canvasWidth + borderAdjustment + 'px';\n ring.style.height = this.canvasHeight + borderAdjustment + 'px';\n\n if (this.canvas) {\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n this.canvas.width = 0;\n this.canvas.height = 0;\n delete this.canvas;\n }\n if (this.image) {\n this.image.removeAttribute('src');\n delete this.image;\n }\n }\n\n update(rotation) {\n if (typeof rotation !== 'undefined') {\n this.rotation = rotation;\n }\n let totalRotation = (this.rotation + this.pdfPageRotate) % 360;\n this.viewport = this.viewport.clone({\n scale: 1,\n rotation: totalRotation,\n });\n this.reset();\n }\n\n cancelRendering() {\n if (this.renderTask) {\n this.renderTask.cancel();\n this.renderTask = null;\n }\n this.renderingState = RenderingStates.INITIAL;\n this.resume = null;\n }\n\n /**\n * @private\n */\n _getPageDrawContext(noCtxScale = false) {\n let canvas = document.createElement('canvas');\n // Keep the no-thumbnail outline visible, i.e. `data-loaded === false`,\n // until rendering/image conversion is complete, to avoid display issues.\n this.canvas = canvas;\n\n if (typeof PDFJSDev === 'undefined' ||\n PDFJSDev.test('MOZCENTRAL || FIREFOX || GENERIC')) {\n canvas.mozOpaque = true;\n }\n let ctx = canvas.getContext('2d', { alpha: false, });\n let outputScale = getOutputScale(ctx);\n\n canvas.width = (this.canvasWidth * outputScale.sx) | 0;\n canvas.height = (this.canvasHeight * outputScale.sy) | 0;\n canvas.style.width = this.canvasWidth + 'px';\n canvas.style.height = this.canvasHeight + 'px';\n\n if (!noCtxScale && outputScale.scaled) {\n ctx.scale(outputScale.sx, outputScale.sy);\n }\n return ctx;\n }\n\n /**\n * @private\n */\n _convertCanvasToImage() {\n if (!this.canvas) {\n return;\n }\n if (this.renderingState !== RenderingStates.FINISHED) {\n return;\n }\n let id = this.renderingId;\n let className = 'thumbnailImage';\n\n if (this.disableCanvasToImageConversion) {\n this.canvas.id = id;\n this.canvas.className = className;\n this.l10n.get('thumb_page_canvas', { page: this.pageId, },\n 'Thumbnail of Page {{page}}').then((msg) => {\n this.canvas.setAttribute('aria-label', msg);\n });\n\n this.div.setAttribute('data-loaded', true);\n this.ring.appendChild(this.canvas);\n return;\n }\n let image = document.createElement('img');\n image.id = id;\n image.className = className;\n this.l10n.get('thumb_page_canvas', { page: this.pageId, },\n 'Thumbnail of Page {{page}}').\n then((msg) => {\n image.setAttribute('aria-label', msg);\n });\n\n image.style.width = this.canvasWidth + 'px';\n image.style.height = this.canvasHeight + 'px';\n\n image.src = this.canvas.toDataURL();\n this.image = image;\n\n this.div.setAttribute('data-loaded', true);\n this.ring.appendChild(image);\n\n // Zeroing the width and height causes Firefox to release graphics\n // resources immediately, which can greatly reduce memory consumption.\n this.canvas.width = 0;\n this.canvas.height = 0;\n delete this.canvas;\n }\n\n draw() {\n if (this.renderingState !== RenderingStates.INITIAL) {\n console.error('Must be in new state before drawing');\n return Promise.resolve(undefined);\n }\n this.renderingState = RenderingStates.RUNNING;\n\n let renderCapability = createPromiseCapability();\n let finishRenderTask = (error) => {\n // The renderTask may have been replaced by a new one, so only remove\n // the reference to the renderTask if it matches the one that is\n // triggering this callback.\n if (renderTask === this.renderTask) {\n this.renderTask = null;\n }\n\n if (((typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('PDFJS_NEXT')) && error === 'cancelled') ||\n error instanceof RenderingCancelledException) {\n renderCapability.resolve(undefined);\n return;\n }\n\n this.renderingState = RenderingStates.FINISHED;\n this._convertCanvasToImage();\n\n if (!error) {\n renderCapability.resolve(undefined);\n } else {\n renderCapability.reject(error);\n }\n };\n\n let ctx = this._getPageDrawContext();\n let drawViewport = this.viewport.clone({ scale: this.scale, });\n let renderContinueCallback = (cont) => {\n if (!this.renderingQueue.isHighestPriority(this)) {\n this.renderingState = RenderingStates.PAUSED;\n this.resume = () => {\n this.renderingState = RenderingStates.RUNNING;\n cont();\n };\n return;\n }\n cont();\n };\n\n let renderContext = {\n canvasContext: ctx,\n viewport: drawViewport,\n };\n let renderTask = this.renderTask = this.pdfPage.render(renderContext);\n renderTask.onContinue = renderContinueCallback;\n\n renderTask.promise.then(function() {\n finishRenderTask(null);\n }, function(error) {\n finishRenderTask(error);\n });\n return renderCapability.promise;\n }\n\n setImage(pageView) {\n if (this.renderingState !== RenderingStates.INITIAL) {\n return;\n }\n let img = pageView.canvas;\n if (!img) {\n return;\n }\n if (!this.pdfPage) {\n this.setPdfPage(pageView.pdfPage);\n }\n\n this.renderingState = RenderingStates.FINISHED;\n\n let ctx = this._getPageDrawContext(true);\n let canvas = ctx.canvas;\n if (img.width <= 2 * canvas.width) {\n ctx.drawImage(img, 0, 0, img.width, img.height,\n 0, 0, canvas.width, canvas.height);\n this._convertCanvasToImage();\n return;\n }\n\n // drawImage does an awful job of rescaling the image, doing it gradually.\n let reducedWidth = canvas.width << MAX_NUM_SCALING_STEPS;\n let reducedHeight = canvas.height << MAX_NUM_SCALING_STEPS;\n let reducedImage = TempImageFactory.getCanvas(reducedWidth,\n reducedHeight);\n let reducedImageCtx = reducedImage.getContext('2d');\n\n while (reducedWidth > img.width || reducedHeight > img.height) {\n reducedWidth >>= 1;\n reducedHeight >>= 1;\n }\n reducedImageCtx.drawImage(img, 0, 0, img.width, img.height,\n 0, 0, reducedWidth, reducedHeight);\n while (reducedWidth > 2 * canvas.width) {\n reducedImageCtx.drawImage(reducedImage,\n 0, 0, reducedWidth, reducedHeight,\n 0, 0, reducedWidth >> 1, reducedHeight >> 1);\n reducedWidth >>= 1;\n reducedHeight >>= 1;\n }\n ctx.drawImage(reducedImage, 0, 0, reducedWidth, reducedHeight,\n 0, 0, canvas.width, canvas.height);\n this._convertCanvasToImage();\n }\n\n get pageId() {\n return (this.pageLabel !== null ? this.pageLabel : this.id);\n }\n\n /**\n * @param {string|null} label\n */\n setPageLabel(label) {\n this.pageLabel = (typeof label === 'string' ? label : null);\n\n this.l10n.get('thumb_page_title', { page: this.pageId, },\n 'Page {{page}}').then((msg) => {\n this.anchor.title = msg;\n });\n\n if (this.renderingState !== RenderingStates.FINISHED) {\n return;\n }\n\n this.l10n.get('thumb_page_canvas', { page: this.pageId, },\n 'Thumbnail of Page {{page}}').then((ariaLabel) => {\n if (this.image) {\n this.image.setAttribute('aria-label', ariaLabel);\n } else if (this.disableCanvasToImageConversion && this.canvas) {\n this.canvas.setAttribute('aria-label', ariaLabel);\n }\n });\n }\n\n static cleanup() {\n TempImageFactory.destroyCanvas();\n }\n}\n\nexport {\n PDFThumbnailView,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_thumbnail_view.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n getVisibleElements, NullL10n, scrollIntoView, watchScroll\n} from './ui_utils';\nimport { PDFThumbnailView } from './pdf_thumbnail_view';\n\nconst THUMBNAIL_SCROLL_MARGIN = -19;\n\n/**\n * @typedef {Object} PDFThumbnailViewerOptions\n * @property {HTMLDivElement} container - The container for the thumbnail\n * elements.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {PDFRenderingQueue} renderingQueue - The rendering queue object.\n * @property {IL10n} l10n - Localization service.\n */\n\n/**\n * Viewer control to display thumbnails for pages in a PDF document.\n *\n * @implements {IRenderableView}\n */\nclass PDFThumbnailViewer {\n /**\n * @param {PDFThumbnailViewerOptions} options\n */\n constructor({ container, linkService, renderingQueue, l10n = NullL10n, }) {\n this.container = container;\n this.linkService = linkService;\n this.renderingQueue = renderingQueue;\n this.l10n = l10n;\n\n this.scroll = watchScroll(this.container, this._scrollUpdated.bind(this));\n this._resetView();\n }\n\n /**\n * @private\n */\n _scrollUpdated() {\n this.renderingQueue.renderHighestPriority();\n }\n\n getThumbnail(index) {\n return this._thumbnails[index];\n }\n\n /**\n * @private\n */\n _getVisibleThumbs() {\n return getVisibleElements(this.container, this._thumbnails);\n }\n\n scrollThumbnailIntoView(page) {\n let selected = document.querySelector('.thumbnail.selected');\n if (selected) {\n selected.classList.remove('selected');\n }\n let thumbnail = document.querySelector(\n 'div.thumbnail[data-page-number=\"' + page + '\"]');\n if (thumbnail) {\n thumbnail.classList.add('selected');\n }\n let visibleThumbs = this._getVisibleThumbs();\n let numVisibleThumbs = visibleThumbs.views.length;\n\n // If the thumbnail isn't currently visible, scroll it into view.\n if (numVisibleThumbs > 0) {\n let first = visibleThumbs.first.id;\n // Account for only one thumbnail being visible.\n let last = (numVisibleThumbs > 1 ? visibleThumbs.last.id : first);\n if (page <= first || page >= last) {\n scrollIntoView(thumbnail, { top: THUMBNAIL_SCROLL_MARGIN, });\n }\n }\n }\n\n get pagesRotation() {\n return this._pagesRotation;\n }\n\n set pagesRotation(rotation) {\n if (!(typeof rotation === 'number' && rotation % 90 === 0)) {\n throw new Error('Invalid thumbnails rotation angle.');\n }\n if (!this.pdfDocument) {\n return;\n }\n this._pagesRotation = rotation;\n\n for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {\n this._thumbnails[i].update(rotation);\n }\n }\n\n cleanup() {\n PDFThumbnailView.cleanup();\n }\n\n /**\n * @private\n */\n _resetView() {\n this._thumbnails = [];\n this._pageLabels = null;\n this._pagesRotation = 0;\n this._pagesRequests = [];\n\n // Remove the thumbnails from the DOM.\n this.container.textContent = '';\n }\n\n setDocument(pdfDocument) {\n if (this.pdfDocument) {\n this._cancelRendering();\n this._resetView();\n }\n\n this.pdfDocument = pdfDocument;\n if (!pdfDocument) {\n return;\n }\n\n pdfDocument.getPage(1).then((firstPage) => {\n let pagesCount = pdfDocument.numPages;\n let viewport = firstPage.getViewport(1.0);\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n let thumbnail = new PDFThumbnailView({\n container: this.container,\n id: pageNum,\n defaultViewport: viewport.clone(),\n linkService: this.linkService,\n renderingQueue: this.renderingQueue,\n disableCanvasToImageConversion: false,\n l10n: this.l10n,\n });\n this._thumbnails.push(thumbnail);\n }\n }).catch((reason) => {\n console.error('Unable to initialize thumbnail viewer', reason);\n });\n }\n\n /**\n * @private\n */\n _cancelRendering() {\n for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {\n if (this._thumbnails[i]) {\n this._thumbnails[i].cancelRendering();\n }\n }\n }\n\n /**\n * @param {Array|null} labels\n */\n setPageLabels(labels) {\n if (!this.pdfDocument) {\n return;\n }\n if (!labels) {\n this._pageLabels = null;\n } else if (!(labels instanceof Array &&\n this.pdfDocument.numPages === labels.length)) {\n this._pageLabels = null;\n console.error('PDFThumbnailViewer_setPageLabels: Invalid page labels.');\n } else {\n this._pageLabels = labels;\n }\n // Update all the `PDFThumbnailView` instances.\n for (let i = 0, ii = this._thumbnails.length; i < ii; i++) {\n let label = this._pageLabels && this._pageLabels[i];\n this._thumbnails[i].setPageLabel(label);\n }\n }\n\n /**\n * @param {PDFThumbnailView} thumbView\n * @returns {PDFPage}\n * @private\n */\n _ensurePdfPageLoaded(thumbView) {\n if (thumbView.pdfPage) {\n return Promise.resolve(thumbView.pdfPage);\n }\n let pageNumber = thumbView.id;\n if (this._pagesRequests[pageNumber]) {\n return this._pagesRequests[pageNumber];\n }\n let promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {\n thumbView.setPdfPage(pdfPage);\n this._pagesRequests[pageNumber] = null;\n return pdfPage;\n }).catch((reason) => {\n console.error('Unable to get page for thumb view', reason);\n // Page error -- there is nothing can be done.\n this._pagesRequests[pageNumber] = null;\n });\n this._pagesRequests[pageNumber] = promise;\n return promise;\n }\n\n forceRendering() {\n let visibleThumbs = this._getVisibleThumbs();\n let thumbView = this.renderingQueue.getHighestPriority(visibleThumbs,\n this._thumbnails,\n this.scroll.down);\n if (thumbView) {\n this._ensurePdfPageLoaded(thumbView).then(() => {\n this.renderingQueue.renderView(thumbView);\n });\n return true;\n }\n return false;\n }\n}\n\nexport {\n PDFThumbnailViewer,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_thumbnail_viewer.js","/* Copyright 2014 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { createPromiseCapability, PDFJS } from 'pdfjs-lib';\nimport {\n CSS_UNITS, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, getVisibleElements,\n MAX_AUTO_SCALE, NullL10n, RendererType, SCROLLBAR_PADDING, scrollIntoView,\n UNKNOWN_SCALE, VERTICAL_PADDING, watchScroll\n} from './ui_utils';\nimport { PDFRenderingQueue, RenderingStates } from './pdf_rendering_queue';\nimport { AnnotationLayerBuilder } from './annotation_layer_builder';\nimport { getGlobalEventBus } from './dom_events';\nimport { PDFPageView } from './pdf_page_view';\nimport { SimpleLinkService } from './pdf_link_service';\nimport { TextLayerBuilder } from './text_layer_builder';\n\nconst PresentationModeState = {\n UNKNOWN: 0,\n NORMAL: 1,\n CHANGING: 2,\n FULLSCREEN: 3,\n};\n\nconst DEFAULT_CACHE_SIZE = 10;\n\n/**\n * @typedef {Object} PDFViewerOptions\n * @property {HTMLDivElement} container - The container for the viewer element.\n * @property {HTMLDivElement} viewer - (optional) The viewer element.\n * @property {EventBus} eventBus - The application event bus.\n * @property {IPDFLinkService} linkService - The navigation/linking service.\n * @property {DownloadManager} downloadManager - (optional) The download\n * manager component.\n * @property {PDFRenderingQueue} renderingQueue - (optional) The rendering\n * queue object.\n * @property {boolean} removePageBorders - (optional) Removes the border shadow\n * around the pages. The default is false.\n * @property {boolean} enhanceTextSelection - (optional) Enables the improved\n * text selection behaviour. The default is `false`.\n * @property {boolean} renderInteractiveForms - (optional) Enables rendering of\n * interactive form elements. The default is `false`.\n * @property {boolean} enablePrintAutoRotate - (optional) Enables automatic\n * rotation of pages whose orientation differ from the first page upon\n * printing. The default is `false`.\n * @property {string} renderer - 'canvas' or 'svg'. The default is 'canvas'.\n * @property {IL10n} l10n - Localization service.\n */\n\nfunction PDFPageViewBuffer(size) {\n let data = [];\n this.push = function cachePush(view) {\n let i = data.indexOf(view);\n if (i >= 0) {\n data.splice(i, 1);\n }\n data.push(view);\n if (data.length > size) {\n data.shift().destroy();\n }\n };\n this.resize = function (newSize) {\n size = newSize;\n while (data.length > size) {\n data.shift().destroy();\n }\n };\n}\n\nfunction isSameScale(oldScale, newScale) {\n if (newScale === oldScale) {\n return true;\n }\n if (Math.abs(newScale - oldScale) < 1e-15) {\n // Prevent unnecessary re-rendering of all pages when the scale\n // changes only because of limited numerical precision.\n return true;\n }\n return false;\n}\n\nfunction isPortraitOrientation(size) {\n return size.width <= size.height;\n}\n\n/**\n * Simple viewer control to display PDF content/pages.\n * @implements {IRenderableView}\n */\nclass PDFViewer {\n /**\n * @param {PDFViewerOptions} options\n */\n constructor(options) {\n this.container = options.container;\n this.viewer = options.viewer || options.container.firstElementChild;\n this.eventBus = options.eventBus || getGlobalEventBus();\n this.linkService = options.linkService || new SimpleLinkService();\n this.downloadManager = options.downloadManager || null;\n this.removePageBorders = options.removePageBorders || false;\n this.enhanceTextSelection = options.enhanceTextSelection || false;\n this.renderInteractiveForms = options.renderInteractiveForms || false;\n this.enablePrintAutoRotate = options.enablePrintAutoRotate || false;\n this.renderer = options.renderer || RendererType.CANVAS;\n this.l10n = options.l10n || NullL10n;\n\n this.defaultRenderingQueue = !options.renderingQueue;\n if (this.defaultRenderingQueue) {\n // Custom rendering queue is not specified, using default one\n this.renderingQueue = new PDFRenderingQueue();\n this.renderingQueue.setViewer(this);\n } else {\n this.renderingQueue = options.renderingQueue;\n }\n\n this.scroll = watchScroll(this.container, this._scrollUpdate.bind(this));\n this.presentationModeState = PresentationModeState.UNKNOWN;\n this._resetView();\n\n if (this.removePageBorders) {\n this.viewer.classList.add('removePageBorders');\n }\n }\n\n get pagesCount() {\n return this._pages.length;\n }\n\n getPageView(index) {\n return this._pages[index];\n }\n\n /**\n * @returns {boolean} true if all {PDFPageView} objects are initialized.\n */\n get pageViewsReady() {\n return this._pageViewsReady;\n }\n\n /**\n * @returns {number}\n */\n get currentPageNumber() {\n return this._currentPageNumber;\n }\n\n /**\n * @param {number} val - The page number.\n */\n set currentPageNumber(val) {\n if ((val | 0) !== val) { // Ensure that `val` is an integer.\n throw new Error('Invalid page number.');\n }\n if (!this.pdfDocument) {\n return;\n }\n // The intent can be to just reset a scroll position and/or scale.\n this._setCurrentPageNumber(val, /* resetCurrentPageView = */ true);\n }\n\n /**\n * @private\n */\n _setCurrentPageNumber(val, resetCurrentPageView = false) {\n if (this._currentPageNumber === val) {\n if (resetCurrentPageView) {\n this._resetCurrentPageView();\n }\n return;\n }\n\n if (!(0 < val && val <= this.pagesCount)) {\n console.error(\n `PDFViewer._setCurrentPageNumber: \"${val}\" is out of bounds.`);\n return;\n }\n\n let arg = {\n source: this,\n pageNumber: val,\n pageLabel: this._pageLabels && this._pageLabels[val - 1],\n };\n this._currentPageNumber = val;\n this.eventBus.dispatch('pagechanging', arg);\n this.eventBus.dispatch('pagechange', arg);\n\n if (resetCurrentPageView) {\n this._resetCurrentPageView();\n }\n }\n\n /**\n * @returns {string|null} Returns the current page label,\n * or `null` if no page labels exist.\n */\n get currentPageLabel() {\n return this._pageLabels && this._pageLabels[this._currentPageNumber - 1];\n }\n\n /**\n * @param {string} val - The page label.\n */\n set currentPageLabel(val) {\n let pageNumber = val | 0; // Fallback page number.\n if (this._pageLabels) {\n let i = this._pageLabels.indexOf(val);\n if (i >= 0) {\n pageNumber = i + 1;\n }\n }\n this.currentPageNumber = pageNumber;\n }\n\n /**\n * @returns {number}\n */\n get currentScale() {\n return this._currentScale !== UNKNOWN_SCALE ? this._currentScale :\n DEFAULT_SCALE;\n }\n\n /**\n * @param {number} val - Scale of the pages in percents.\n */\n set currentScale(val) {\n if (isNaN(val)) {\n throw new Error('Invalid numeric scale');\n }\n if (!this.pdfDocument) {\n return;\n }\n this._setScale(val, false);\n }\n\n /**\n * @returns {string}\n */\n get currentScaleValue() {\n return this._currentScaleValue;\n }\n\n /**\n * @param val - The scale of the pages (in percent or predefined value).\n */\n set currentScaleValue(val) {\n if (!this.pdfDocument) {\n return;\n }\n this._setScale(val, false);\n }\n\n /**\n * @returns {number}\n */\n get pagesRotation() {\n return this._pagesRotation;\n }\n\n /**\n * @param {number} rotation - The rotation of the pages (0, 90, 180, 270).\n */\n set pagesRotation(rotation) {\n if (!(typeof rotation === 'number' && rotation % 90 === 0)) {\n throw new Error('Invalid pages rotation angle.');\n }\n if (!this.pdfDocument) {\n return;\n }\n this._pagesRotation = rotation;\n\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n let pageView = this._pages[i];\n pageView.update(pageView.scale, rotation);\n }\n\n this._setScale(this._currentScaleValue, true);\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n }\n\n /**\n * @param pdfDocument {PDFDocument}\n */\n setDocument(pdfDocument) {\n if (this.pdfDocument) {\n this._cancelRendering();\n this._resetView();\n }\n\n this.pdfDocument = pdfDocument;\n if (!pdfDocument) {\n return;\n }\n let pagesCount = pdfDocument.numPages;\n\n let pagesCapability = createPromiseCapability();\n this.pagesPromise = pagesCapability.promise;\n\n pagesCapability.promise.then(() => {\n this._pageViewsReady = true;\n this.eventBus.dispatch('pagesloaded', {\n source: this,\n pagesCount,\n });\n });\n\n let isOnePageRenderedResolved = false;\n let onePageRenderedCapability = createPromiseCapability();\n this.onePageRendered = onePageRenderedCapability.promise;\n\n let bindOnAfterAndBeforeDraw = (pageView) => {\n pageView.onBeforeDraw = () => {\n // Add the page to the buffer at the start of drawing. That way it can\n // be evicted from the buffer and destroyed even if we pause its\n // rendering.\n this._buffer.push(pageView);\n };\n pageView.onAfterDraw = () => {\n if (!isOnePageRenderedResolved) {\n isOnePageRenderedResolved = true;\n onePageRenderedCapability.resolve();\n }\n };\n };\n\n let firstPagePromise = pdfDocument.getPage(1);\n this.firstPagePromise = firstPagePromise;\n\n // Fetch a single page so we can get a viewport that will be the default\n // viewport for all pages\n firstPagePromise.then((pdfPage) => {\n let scale = this.currentScale;\n let viewport = pdfPage.getViewport(scale * CSS_UNITS);\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n let textLayerFactory = null;\n if (!PDFJS.disableTextLayer) {\n textLayerFactory = this;\n }\n let pageView = new PDFPageView({\n container: this.viewer,\n eventBus: this.eventBus,\n id: pageNum,\n scale,\n defaultViewport: viewport.clone(),\n renderingQueue: this.renderingQueue,\n textLayerFactory,\n annotationLayerFactory: this,\n enhanceTextSelection: this.enhanceTextSelection,\n renderInteractiveForms: this.renderInteractiveForms,\n renderer: this.renderer,\n l10n: this.l10n,\n });\n bindOnAfterAndBeforeDraw(pageView);\n this._pages.push(pageView);\n }\n\n // Fetch all the pages since the viewport is needed before printing\n // starts to create the correct size canvas. Wait until one page is\n // rendered so we don't tie up too many resources early on.\n onePageRenderedCapability.promise.then(() => {\n if (PDFJS.disableAutoFetch) {\n // XXX: Printing is semi-broken with auto fetch disabled.\n pagesCapability.resolve();\n return;\n }\n let getPagesLeft = pagesCount;\n for (let pageNum = 1; pageNum <= pagesCount; ++pageNum) {\n pdfDocument.getPage(pageNum).then((pdfPage) => {\n let pageView = this._pages[pageNum - 1];\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n this.linkService.cachePageRef(pageNum, pdfPage.ref);\n if (--getPagesLeft === 0) {\n pagesCapability.resolve();\n }\n }, (reason) => {\n console.error(`Unable to get page ${pageNum} to initialize viewer`,\n reason);\n if (--getPagesLeft === 0) {\n pagesCapability.resolve();\n }\n });\n }\n });\n\n this.eventBus.dispatch('pagesinit', { source: this, });\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n\n if (this.findController) {\n this.findController.resolveFirstPage();\n }\n }).catch((reason) => {\n console.error('Unable to initialize viewer', reason);\n });\n }\n\n /**\n * @param {Array|null} labels\n */\n setPageLabels(labels) {\n if (!this.pdfDocument) {\n return;\n }\n if (!labels) {\n this._pageLabels = null;\n } else if (!(labels instanceof Array &&\n this.pdfDocument.numPages === labels.length)) {\n this._pageLabels = null;\n console.error('PDFViewer.setPageLabels: Invalid page labels.');\n } else {\n this._pageLabels = labels;\n }\n // Update all the `PDFPageView` instances.\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n let pageView = this._pages[i];\n let label = this._pageLabels && this._pageLabels[i];\n pageView.setPageLabel(label);\n }\n }\n\n _resetView() {\n this._pages = [];\n this._currentPageNumber = 1;\n this._currentScale = UNKNOWN_SCALE;\n this._currentScaleValue = null;\n this._pageLabels = null;\n this._buffer = new PDFPageViewBuffer(DEFAULT_CACHE_SIZE);\n this._location = null;\n this._pagesRotation = 0;\n this._pagesRequests = [];\n this._pageViewsReady = false;\n\n // Remove the pages from the DOM.\n this.viewer.textContent = '';\n }\n\n _scrollUpdate() {\n if (this.pagesCount === 0) {\n return;\n }\n this.update();\n }\n\n _setScaleDispatchEvent(newScale, newValue, preset = false) {\n let arg = {\n source: this,\n scale: newScale,\n presetValue: preset ? newValue : undefined,\n };\n this.eventBus.dispatch('scalechanging', arg);\n this.eventBus.dispatch('scalechange', arg);\n }\n\n _setScaleUpdatePages(newScale, newValue, noScroll = false, preset = false) {\n this._currentScaleValue = newValue.toString();\n\n if (isSameScale(this._currentScale, newScale)) {\n if (preset) {\n this._setScaleDispatchEvent(newScale, newValue, true);\n }\n return;\n }\n\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n this._pages[i].update(newScale);\n }\n this._currentScale = newScale;\n\n if (!noScroll) {\n let page = this._currentPageNumber, dest;\n if (this._location && !PDFJS.ignoreCurrentPositionOnZoom &&\n !(this.isInPresentationMode || this.isChangingPresentationMode)) {\n page = this._location.pageNumber;\n dest = [null, { name: 'XYZ', }, this._location.left,\n this._location.top, null];\n }\n this.scrollPageIntoView({\n pageNumber: page,\n destArray: dest,\n allowNegativeOffset: true,\n });\n }\n\n this._setScaleDispatchEvent(newScale, newValue, preset);\n\n if (this.defaultRenderingQueue) {\n this.update();\n }\n }\n\n _setScale(value, noScroll = false) {\n let scale = parseFloat(value);\n\n if (scale > 0) {\n this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ false);\n } else {\n let currentPage = this._pages[this._currentPageNumber - 1];\n if (!currentPage) {\n return;\n }\n let hPadding = (this.isInPresentationMode || this.removePageBorders) ?\n 0 : SCROLLBAR_PADDING;\n let vPadding = (this.isInPresentationMode || this.removePageBorders) ?\n 0 : VERTICAL_PADDING;\n let pageWidthScale = (this.container.clientWidth - hPadding) /\n currentPage.width * currentPage.scale;\n let pageHeightScale = (this.container.clientHeight - vPadding) /\n currentPage.height * currentPage.scale;\n switch (value) {\n case 'page-actual':\n scale = 1;\n break;\n case 'page-width':\n scale = pageWidthScale;\n break;\n case 'page-height':\n scale = pageHeightScale;\n break;\n case 'page-fit':\n scale = Math.min(pageWidthScale, pageHeightScale);\n break;\n case 'auto':\n let isLandscape = (currentPage.width > currentPage.height);\n // For pages in landscape mode, fit the page height to the viewer\n // *unless* the page would thus become too wide to fit horizontally.\n let horizontalScale = isLandscape ?\n Math.min(pageHeightScale, pageWidthScale) : pageWidthScale;\n scale = Math.min(MAX_AUTO_SCALE, horizontalScale);\n break;\n default:\n console.error(\n `PDFViewer._setScale: \"${value}\" is an unknown zoom value.`);\n return;\n }\n this._setScaleUpdatePages(scale, value, noScroll, /* preset = */ true);\n }\n }\n\n /**\n * Refreshes page view: scrolls to the current page and updates the scale.\n * @private\n */\n _resetCurrentPageView() {\n if (this.isInPresentationMode) {\n // Fixes the case when PDF has different page sizes.\n this._setScale(this._currentScaleValue, true);\n }\n\n let pageView = this._pages[this._currentPageNumber - 1];\n scrollIntoView(pageView.div);\n }\n\n /**\n * @typedef ScrollPageIntoViewParameters\n * @property {number} pageNumber - The page number.\n * @property {Array} destArray - (optional) The original PDF destination\n * array, in the format: \n * @property {boolean} allowNegativeOffset - (optional) Allow negative page\n * offsets. The default value is `false`.\n */\n\n /**\n * Scrolls page into view.\n * @param {ScrollPageIntoViewParameters} params\n */\n scrollPageIntoView(params) {\n if (!this.pdfDocument) {\n return;\n }\n if ((typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) &&\n (arguments.length > 1 || typeof params === 'number')) {\n console.warn('Call of scrollPageIntoView() with obsolete signature.');\n let paramObj = {};\n if (typeof params === 'number') {\n paramObj.pageNumber = params; // pageNumber argument was found.\n }\n if (arguments[1] instanceof Array) {\n paramObj.destArray = arguments[1]; // destArray argument was found.\n }\n params = paramObj;\n }\n let pageNumber = params.pageNumber || 0;\n let dest = params.destArray || null;\n let allowNegativeOffset = params.allowNegativeOffset || false;\n\n if (this.isInPresentationMode || !dest) {\n this._setCurrentPageNumber(pageNumber, /* resetCurrentPageView = */ true);\n return;\n }\n\n let pageView = this._pages[pageNumber - 1];\n if (!pageView) {\n console.error(\n 'PDFViewer.scrollPageIntoView: Invalid \"pageNumber\" parameter.');\n return;\n }\n let x = 0, y = 0;\n let width = 0, height = 0, widthScale, heightScale;\n let changeOrientation = (pageView.rotation % 180 === 0 ? false : true);\n let pageWidth = (changeOrientation ? pageView.height : pageView.width) /\n pageView.scale / CSS_UNITS;\n let pageHeight = (changeOrientation ? pageView.width : pageView.height) /\n pageView.scale / CSS_UNITS;\n let scale = 0;\n switch (dest[1].name) {\n case 'XYZ':\n x = dest[2];\n y = dest[3];\n scale = dest[4];\n // If x and/or y coordinates are not supplied, default to\n // _top_ left of the page (not the obvious bottom left,\n // since aligning the bottom of the intended page with the\n // top of the window is rarely helpful).\n x = x !== null ? x : 0;\n y = y !== null ? y : pageHeight;\n break;\n case 'Fit':\n case 'FitB':\n scale = 'page-fit';\n break;\n case 'FitH':\n case 'FitBH':\n y = dest[2];\n scale = 'page-width';\n // According to the PDF spec, section 12.3.2.2, a `null` value in the\n // parameter should maintain the position relative to the new page.\n if (y === null && this._location) {\n x = this._location.left;\n y = this._location.top;\n }\n break;\n case 'FitV':\n case 'FitBV':\n x = dest[2];\n width = pageWidth;\n height = pageHeight;\n scale = 'page-height';\n break;\n case 'FitR':\n x = dest[2];\n y = dest[3];\n width = dest[4] - x;\n height = dest[5] - y;\n let hPadding = this.removePageBorders ? 0 : SCROLLBAR_PADDING;\n let vPadding = this.removePageBorders ? 0 : VERTICAL_PADDING;\n\n widthScale = (this.container.clientWidth - hPadding) /\n width / CSS_UNITS;\n heightScale = (this.container.clientHeight - vPadding) /\n height / CSS_UNITS;\n scale = Math.min(Math.abs(widthScale), Math.abs(heightScale));\n break;\n default:\n console.error(`PDFViewer.scrollPageIntoView: \"${dest[1].name}\" ` +\n 'is not a valid destination type.');\n return;\n }\n\n if (scale && scale !== this._currentScale) {\n this.currentScaleValue = scale;\n } else if (this._currentScale === UNKNOWN_SCALE) {\n this.currentScaleValue = DEFAULT_SCALE_VALUE;\n }\n\n if (scale === 'page-fit' && !dest[4]) {\n scrollIntoView(pageView.div);\n return;\n }\n\n let boundingRect = [\n pageView.viewport.convertToViewportPoint(x, y),\n pageView.viewport.convertToViewportPoint(x + width, y + height)\n ];\n let left = Math.min(boundingRect[0][0], boundingRect[1][0]);\n let top = Math.min(boundingRect[0][1], boundingRect[1][1]);\n\n if (!allowNegativeOffset) {\n // Some bad PDF generators will create destinations with e.g. top values\n // that exceeds the page height. Ensure that offsets are not negative,\n // to prevent a previous page from becoming visible (fixes bug 874482).\n left = Math.max(left, 0);\n top = Math.max(top, 0);\n }\n scrollIntoView(pageView.div, { left, top, });\n }\n\n _updateLocation(firstPage) {\n let currentScale = this._currentScale;\n let currentScaleValue = this._currentScaleValue;\n let normalizedScaleValue =\n parseFloat(currentScaleValue) === currentScale ?\n Math.round(currentScale * 10000) / 100 : currentScaleValue;\n\n let pageNumber = firstPage.id;\n let pdfOpenParams = '#page=' + pageNumber;\n pdfOpenParams += '&zoom=' + normalizedScaleValue;\n let currentPageView = this._pages[pageNumber - 1];\n let container = this.container;\n let topLeft = currentPageView.getPagePoint(\n (container.scrollLeft - firstPage.x),\n (container.scrollTop - firstPage.y));\n let intLeft = Math.round(topLeft[0]);\n let intTop = Math.round(topLeft[1]);\n pdfOpenParams += ',' + intLeft + ',' + intTop;\n\n this._location = {\n pageNumber,\n scale: normalizedScaleValue,\n top: intTop,\n left: intLeft,\n pdfOpenParams,\n };\n }\n\n update() {\n let visible = this._getVisiblePages();\n let visiblePages = visible.views;\n if (visiblePages.length === 0) {\n return;\n }\n\n let suggestedCacheSize = Math.max(DEFAULT_CACHE_SIZE,\n 2 * visiblePages.length + 1);\n this._buffer.resize(suggestedCacheSize);\n\n this.renderingQueue.renderHighestPriority(visible);\n\n let currentId = this._currentPageNumber;\n let firstPage = visible.first;\n let stillFullyVisible = false;\n\n for (let i = 0, ii = visiblePages.length; i < ii; ++i) {\n let page = visiblePages[i];\n\n if (page.percent < 100) {\n break;\n }\n if (page.id === currentId) {\n stillFullyVisible = true;\n break;\n }\n }\n\n if (!stillFullyVisible) {\n currentId = visiblePages[0].id;\n }\n\n if (!this.isInPresentationMode) {\n this._setCurrentPageNumber(currentId);\n }\n\n this._updateLocation(firstPage);\n\n this.eventBus.dispatch('updateviewarea', {\n source: this,\n location: this._location,\n });\n }\n\n containsElement(element) {\n return this.container.contains(element);\n }\n\n focus() {\n this.container.focus();\n }\n\n get isInPresentationMode() {\n return this.presentationModeState === PresentationModeState.FULLSCREEN;\n }\n\n get isChangingPresentationMode() {\n return this.presentationModeState === PresentationModeState.CHANGING;\n }\n\n get isHorizontalScrollbarEnabled() {\n return (this.isInPresentationMode ?\n false : (this.container.scrollWidth > this.container.clientWidth));\n }\n\n _getVisiblePages() {\n if (!this.isInPresentationMode) {\n return getVisibleElements(this.container, this._pages, true);\n }\n // The algorithm in getVisibleElements doesn't work in all browsers and\n // configurations when presentation mode is active.\n let visible = [];\n let currentPage = this._pages[this._currentPageNumber - 1];\n visible.push({ id: currentPage.id, view: currentPage, });\n return { first: currentPage, last: currentPage, views: visible, };\n }\n\n cleanup() {\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n if (this._pages[i] &&\n this._pages[i].renderingState !== RenderingStates.FINISHED) {\n this._pages[i].reset();\n }\n }\n }\n\n /**\n * @private\n */\n _cancelRendering() {\n for (let i = 0, ii = this._pages.length; i < ii; i++) {\n if (this._pages[i]) {\n this._pages[i].cancelRendering();\n }\n }\n }\n\n /**\n * @param {PDFPageView} pageView\n * @returns {Promise} Returns a promise containing a {PDFPageProxy} object.\n * @private\n */\n _ensurePdfPageLoaded(pageView) {\n if (pageView.pdfPage) {\n return Promise.resolve(pageView.pdfPage);\n }\n let pageNumber = pageView.id;\n if (this._pagesRequests[pageNumber]) {\n return this._pagesRequests[pageNumber];\n }\n let promise = this.pdfDocument.getPage(pageNumber).then((pdfPage) => {\n if (!pageView.pdfPage) {\n pageView.setPdfPage(pdfPage);\n }\n this._pagesRequests[pageNumber] = null;\n return pdfPage;\n }).catch((reason) => {\n console.error('Unable to get page for page view', reason);\n // Page error -- there is nothing can be done.\n this._pagesRequests[pageNumber] = null;\n });\n this._pagesRequests[pageNumber] = promise;\n return promise;\n }\n\n forceRendering(currentlyVisiblePages) {\n let visiblePages = currentlyVisiblePages || this._getVisiblePages();\n let pageView = this.renderingQueue.getHighestPriority(visiblePages,\n this._pages,\n this.scroll.down);\n if (pageView) {\n this._ensurePdfPageLoaded(pageView).then(() => {\n this.renderingQueue.renderView(pageView);\n });\n return true;\n }\n return false;\n }\n\n getPageTextContent(pageIndex) {\n return this.pdfDocument.getPage(pageIndex + 1).then(function(page) {\n return page.getTextContent({\n normalizeWhitespace: true,\n });\n });\n }\n\n /**\n * @param {HTMLDivElement} textLayerDiv\n * @param {number} pageIndex\n * @param {PageViewport} viewport\n * @returns {TextLayerBuilder}\n */\n createTextLayerBuilder(textLayerDiv, pageIndex, viewport,\n enhanceTextSelection = false) {\n return new TextLayerBuilder({\n textLayerDiv,\n eventBus: this.eventBus,\n pageIndex,\n viewport,\n findController: this.isInPresentationMode ? null : this.findController,\n enhanceTextSelection: this.isInPresentationMode ? false :\n enhanceTextSelection,\n });\n }\n\n /**\n * @param {HTMLDivElement} pageDiv\n * @param {PDFPage} pdfPage\n * @param {boolean} renderInteractiveForms\n * @param {IL10n} l10n\n * @returns {AnnotationLayerBuilder}\n */\n createAnnotationLayerBuilder(pageDiv, pdfPage, renderInteractiveForms = false,\n l10n = NullL10n) {\n return new AnnotationLayerBuilder({\n pageDiv,\n pdfPage,\n renderInteractiveForms,\n linkService: this.linkService,\n downloadManager: this.downloadManager,\n l10n,\n });\n }\n\n setFindController(findController) {\n this.findController = findController;\n }\n\n /**\n * @returns {boolean} Whether all pages of the PDF document have identical\n * widths and heights.\n */\n get hasEqualPageSizes() {\n let firstPageView = this._pages[0];\n for (let i = 1, ii = this._pages.length; i < ii; ++i) {\n let pageView = this._pages[i];\n if (pageView.width !== firstPageView.width ||\n pageView.height !== firstPageView.height) {\n return false;\n }\n }\n return true;\n }\n\n /**\n * Returns sizes of the pages.\n * @returns {Array} Array of objects with width/height/rotation fields.\n */\n getPagesOverview() {\n let pagesOverview = this._pages.map(function(pageView) {\n let viewport = pageView.pdfPage.getViewport(1);\n return {\n width: viewport.width,\n height: viewport.height,\n rotation: viewport.rotation,\n };\n });\n if (!this.enablePrintAutoRotate) {\n return pagesOverview;\n }\n let isFirstPagePortrait = isPortraitOrientation(pagesOverview[0]);\n return pagesOverview.map(function (size) {\n if (isFirstPagePortrait === isPortraitOrientation(size)) {\n return size;\n }\n return {\n width: size.height,\n height: size.width,\n rotation: (size.rotation + 90) % 360,\n };\n });\n }\n}\n\nexport {\n PresentationModeState,\n PDFViewer,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/pdf_viewer.js","/* Copyright 2013 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { cloneObj } from './ui_utils';\n\nvar defaultPreferences = null;\nfunction getDefaultPreferences() {\n if (!defaultPreferences) {\n if (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('PRODUCTION')) {\n defaultPreferences = Promise.resolve(\n PDFJSDev.json('$ROOT/web/default_preferences.json'));\n } else {\n defaultPreferences = new Promise(function (resolve) {\n var xhr = new XMLHttpRequest();\n xhr.open('GET', 'default_preferences.json');\n xhr.onload = xhr.onerror = function loaded() {\n try {\n resolve(JSON.parse(xhr.responseText));\n } catch (e) {\n console.error(`Unable to load default preferences: ${e}`);\n resolve({});\n }\n };\n xhr.send();\n });\n }\n }\n return defaultPreferences;\n}\n\n/**\n * BasePreferences - Abstract base class for storing persistent settings.\n * Used for settings that should be applied to all opened documents,\n * or every time the viewer is loaded.\n */\nclass BasePreferences {\n constructor() {\n if (this.constructor === BasePreferences) {\n throw new Error('Cannot initialize BasePreferences.');\n }\n this.prefs = null;\n\n this._initializedPromise = getDefaultPreferences().then((defaults) => {\n Object.defineProperty(this, 'defaults', {\n value: Object.freeze(defaults),\n writable: false,\n enumerable: true,\n configurable: false,\n });\n\n this.prefs = cloneObj(defaults);\n return this._readFromStorage(defaults);\n }).then((prefObj) => {\n if (prefObj) {\n this.prefs = prefObj;\n }\n });\n }\n\n /**\n * Stub function for writing preferences to storage.\n * @param {Object} prefObj The preferences that should be written to storage.\n * @return {Promise} A promise that is resolved when the preference values\n * have been written.\n */\n _writeToStorage(prefObj) {\n return Promise.reject(new Error('Not implemented: _writeToStorage'));\n }\n\n /**\n * Stub function for reading preferences from storage.\n * @param {Object} prefObj The preferences that should be read from storage.\n * @return {Promise} A promise that is resolved with an {Object} containing\n * the preferences that have been read.\n */\n _readFromStorage(prefObj) {\n return Promise.reject(new Error('Not implemented: _readFromStorage'));\n }\n\n /**\n * Reset the preferences to their default values and update storage.\n * @return {Promise} A promise that is resolved when the preference values\n * have been reset.\n */\n reset() {\n return this._initializedPromise.then(() => {\n this.prefs = cloneObj(this.defaults);\n return this._writeToStorage(this.defaults);\n });\n }\n\n /**\n * Replace the current preference values with the ones from storage.\n * @return {Promise} A promise that is resolved when the preference values\n * have been updated.\n */\n reload() {\n return this._initializedPromise.then(() => {\n return this._readFromStorage(this.defaults);\n }).then((prefObj) => {\n if (prefObj) {\n this.prefs = prefObj;\n }\n });\n }\n\n /**\n * Set the value of a preference.\n * @param {string} name The name of the preference that should be changed.\n * @param {boolean|number|string} value The new value of the preference.\n * @return {Promise} A promise that is resolved when the value has been set,\n * provided that the preference exists and the types match.\n */\n set(name, value) {\n return this._initializedPromise.then(() => {\n if (this.defaults[name] === undefined) {\n throw new Error(`Set preference: \"${name}\" is undefined.`);\n } else if (value === undefined) {\n throw new Error('Set preference: no value is specified.');\n }\n var valueType = typeof value;\n var defaultType = typeof this.defaults[name];\n\n if (valueType !== defaultType) {\n if (valueType === 'number' && defaultType === 'string') {\n value = value.toString();\n } else {\n throw new Error(`Set preference: \"${value}\" is a ${valueType}, ` +\n `expected a ${defaultType}.`);\n }\n } else {\n if (valueType === 'number' && (value | 0) !== value) {\n throw new Error(`Set preference: \"${value}\" must be an integer.`);\n }\n }\n this.prefs[name] = value;\n return this._writeToStorage(this.prefs);\n });\n }\n\n /**\n * Get the value of a preference.\n * @param {string} name The name of the preference whose value is requested.\n * @return {Promise} A promise that is resolved with a {boolean|number|string}\n * containing the value of the preference.\n */\n get(name) {\n return this._initializedPromise.then(() => {\n var defaultValue = this.defaults[name];\n\n if (defaultValue === undefined) {\n throw new Error(`Get preference: \"${name}\" is undefined.`);\n } else {\n var prefValue = this.prefs[name];\n\n if (prefValue !== undefined) {\n return prefValue;\n }\n }\n return defaultValue;\n });\n }\n}\n\nexport {\n BasePreferences,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/preferences.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { CursorTool } from './pdf_cursor_tools';\nimport { SCROLLBAR_PADDING } from './ui_utils';\n\n/**\n * @typedef {Object} SecondaryToolbarOptions\n * @property {HTMLDivElement} toolbar - Container for the secondary toolbar.\n * @property {HTMLButtonElement} toggleButton - Button to toggle the visibility\n * of the secondary toolbar.\n * @property {HTMLDivElement} toolbarButtonContainer - Container where all the\n * toolbar buttons are placed. The maximum height of the toolbar is controlled\n * dynamically by adjusting the 'max-height' CSS property of this DOM element.\n * @property {HTMLButtonElement} presentationModeButton - Button for entering\n * presentation mode.\n * @property {HTMLButtonElement} openFileButton - Button to open a file.\n * @property {HTMLButtonElement} printButton - Button to print the document.\n * @property {HTMLButtonElement} downloadButton - Button to download the\n * document.\n * @property {HTMLLinkElement} viewBookmarkButton - Button to obtain a bookmark\n * link to the current location in the document.\n * @property {HTMLButtonElement} firstPageButton - Button to go to the first\n * page in the document.\n * @property {HTMLButtonElement} lastPageButton - Button to go to the last page\n * in the document.\n * @property {HTMLButtonElement} pageRotateCwButton - Button to rotate the pages\n * clockwise.\n * @property {HTMLButtonElement} pageRotateCcwButton - Button to rotate the\n * pages counterclockwise.\n * @property {HTMLButtonElement} cursorSelectToolButton - Button to enable the\n * select tool.\n * @property {HTMLButtonElement} cursorHandToolButton - Button to enable the\n * hand tool.\n * @property {HTMLButtonElement} documentPropertiesButton - Button for opening\n * the document properties dialog.\n */\n\nclass SecondaryToolbar {\n /**\n * @param {SecondaryToolbarOptions} options\n * @param {HTMLDivElement} mainContainer\n * @param {EventBus} eventBus\n */\n constructor(options, mainContainer, eventBus) {\n this.toolbar = options.toolbar;\n this.toggleButton = options.toggleButton;\n this.toolbarButtonContainer = options.toolbarButtonContainer;\n this.buttons = [\n { element: options.presentationModeButton, eventName: 'presentationmode',\n close: true, },\n { element: options.openFileButton, eventName: 'openfile', close: true, },\n { element: options.printButton, eventName: 'print', close: true, },\n { element: options.downloadButton, eventName: 'download', close: true, },\n { element: options.viewBookmarkButton, eventName: null, close: true, },\n { element: options.firstPageButton, eventName: 'firstpage',\n close: true, },\n { element: options.lastPageButton, eventName: 'lastpage', close: true, },\n { element: options.pageRotateCwButton, eventName: 'rotatecw',\n close: false, },\n { element: options.pageRotateCcwButton, eventName: 'rotateccw',\n close: false, },\n { element: options.cursorSelectToolButton, eventName: 'switchcursortool',\n eventDetails: { tool: CursorTool.SELECT, }, close: true, },\n { element: options.cursorHandToolButton, eventName: 'switchcursortool',\n eventDetails: { tool: CursorTool.HAND, }, close: true, },\n { element: options.documentPropertiesButton,\n eventName: 'documentproperties', close: true, },\n ];\n this.items = {\n firstPage: options.firstPageButton,\n lastPage: options.lastPageButton,\n pageRotateCw: options.pageRotateCwButton,\n pageRotateCcw: options.pageRotateCcwButton,\n };\n\n this.mainContainer = mainContainer;\n this.eventBus = eventBus;\n\n this.opened = false;\n this.containerHeight = null;\n this.previousContainerHeight = null;\n\n this.reset();\n\n // Bind the event listeners for click and cursor tool actions.\n this._bindClickListeners();\n this._bindCursorToolsListener(options);\n\n // Bind the event listener for adjusting the 'max-height' of the toolbar.\n this.eventBus.on('resize', this._setMaxHeight.bind(this));\n }\n\n /**\n * @return {boolean}\n */\n get isOpen() {\n return this.opened;\n }\n\n setPageNumber(pageNumber) {\n this.pageNumber = pageNumber;\n this._updateUIState();\n }\n\n setPagesCount(pagesCount) {\n this.pagesCount = pagesCount;\n this._updateUIState();\n }\n\n reset() {\n this.pageNumber = 0;\n this.pagesCount = 0;\n this._updateUIState();\n }\n\n _updateUIState() {\n this.items.firstPage.disabled = (this.pageNumber <= 1);\n this.items.lastPage.disabled = (this.pageNumber >= this.pagesCount);\n this.items.pageRotateCw.disabled = this.pagesCount === 0;\n this.items.pageRotateCcw.disabled = this.pagesCount === 0;\n }\n\n _bindClickListeners() {\n // Button to toggle the visibility of the secondary toolbar.\n this.toggleButton.addEventListener('click', this.toggle.bind(this));\n\n // All items within the secondary toolbar.\n for (let button in this.buttons) {\n let { element, eventName, close, eventDetails, } = this.buttons[button];\n\n element.addEventListener('click', (evt) => {\n if (eventName !== null) {\n let details = { source: this, };\n for (let property in eventDetails) {\n details[property] = eventDetails[property];\n }\n this.eventBus.dispatch(eventName, details);\n }\n if (close) {\n this.close();\n }\n });\n }\n }\n\n _bindCursorToolsListener(buttons) {\n this.eventBus.on('cursortoolchanged', function(evt) {\n buttons.cursorSelectToolButton.classList.remove('toggled');\n buttons.cursorHandToolButton.classList.remove('toggled');\n\n switch (evt.tool) {\n case CursorTool.SELECT:\n buttons.cursorSelectToolButton.classList.add('toggled');\n break;\n case CursorTool.HAND:\n buttons.cursorHandToolButton.classList.add('toggled');\n break;\n }\n });\n }\n\n open() {\n if (this.opened) {\n return;\n }\n this.opened = true;\n this._setMaxHeight();\n\n this.toggleButton.classList.add('toggled');\n this.toolbar.classList.remove('hidden');\n }\n\n close() {\n if (!this.opened) {\n return;\n }\n this.opened = false;\n this.toolbar.classList.add('hidden');\n this.toggleButton.classList.remove('toggled');\n }\n\n toggle() {\n if (this.opened) {\n this.close();\n } else {\n this.open();\n }\n }\n\n /**\n * @private\n */\n _setMaxHeight() {\n if (!this.opened) {\n return; // Only adjust the 'max-height' if the toolbar is visible.\n }\n this.containerHeight = this.mainContainer.clientHeight;\n\n if (this.containerHeight === this.previousContainerHeight) {\n return;\n }\n this.toolbarButtonContainer.setAttribute('style',\n 'max-height: ' + (this.containerHeight - SCROLLBAR_PADDING) + 'px;');\n\n this.previousContainerHeight = this.containerHeight;\n }\n}\n\nexport {\n SecondaryToolbar,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/secondary_toolbar.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport { getGlobalEventBus } from './dom_events';\nimport { renderTextLayer } from 'pdfjs-lib';\n\nconst EXPAND_DIVS_TIMEOUT = 300; // ms\n\n/**\n * @typedef {Object} TextLayerBuilderOptions\n * @property {HTMLDivElement} textLayerDiv - The text layer container.\n * @property {EventBus} eventBus - The application event bus.\n * @property {number} pageIndex - The page index.\n * @property {PageViewport} viewport - The viewport of the text layer.\n * @property {PDFFindController} findController\n * @property {boolean} enhanceTextSelection - Option to turn on improved\n * text selection.\n */\n\n/**\n * The text layer builder provides text selection functionality for the PDF.\n * It does this by creating overlay divs over the PDF's text. These divs\n * contain text that matches the PDF text they are overlaying. This object\n * also provides a way to highlight text that is being searched for.\n */\nclass TextLayerBuilder {\n constructor({ textLayerDiv, eventBus, pageIndex, viewport,\n findController = null, enhanceTextSelection = false, }) {\n this.textLayerDiv = textLayerDiv;\n this.eventBus = eventBus || getGlobalEventBus();\n this.textContent = null;\n this.textContentItemsStr = [];\n this.textContentStream = null;\n this.renderingDone = false;\n this.pageIdx = pageIndex;\n this.pageNumber = this.pageIdx + 1;\n this.matches = [];\n this.viewport = viewport;\n this.textDivs = [];\n this.findController = findController;\n this.textLayerRenderTask = null;\n this.enhanceTextSelection = enhanceTextSelection;\n\n this._bindMouse();\n }\n\n /**\n * @private\n */\n _finishRendering() {\n this.renderingDone = true;\n\n if (!this.enhanceTextSelection) {\n let endOfContent = document.createElement('div');\n endOfContent.className = 'endOfContent';\n this.textLayerDiv.appendChild(endOfContent);\n }\n\n this.eventBus.dispatch('textlayerrendered', {\n source: this,\n pageNumber: this.pageNumber,\n numTextDivs: this.textDivs.length,\n });\n }\n\n /**\n * Renders the text layer.\n *\n * @param {number} timeout - (optional) wait for a specified amount of\n * milliseconds before rendering\n */\n render(timeout = 0) {\n if (!(this.textContent || this.textContentStream) || this.renderingDone) {\n return;\n }\n this.cancel();\n\n this.textDivs = [];\n let textLayerFrag = document.createDocumentFragment();\n this.textLayerRenderTask = renderTextLayer({\n textContent: this.textContent,\n textContentStream: this.textContentStream,\n container: textLayerFrag,\n viewport: this.viewport,\n textDivs: this.textDivs,\n textContentItemsStr: this.textContentItemsStr,\n timeout,\n enhanceTextSelection: this.enhanceTextSelection,\n });\n this.textLayerRenderTask.promise.then(() => {\n this.textLayerDiv.appendChild(textLayerFrag);\n this._finishRendering();\n this.updateMatches();\n }, function (reason) {\n // Cancelled or failed to render text layer; skipping errors.\n });\n }\n\n /**\n * Cancel rendering of the text layer.\n */\n cancel() {\n if (this.textLayerRenderTask) {\n this.textLayerRenderTask.cancel();\n this.textLayerRenderTask = null;\n }\n }\n\n setTextContentStream(readableStream) {\n this.cancel();\n this.textContentStream = readableStream;\n }\n\n setTextContent(textContent) {\n this.cancel();\n this.textContent = textContent;\n }\n\n convertMatches(matches, matchesLength) {\n let i = 0;\n let iIndex = 0;\n let textContentItemsStr = this.textContentItemsStr;\n let end = textContentItemsStr.length - 1;\n let queryLen = (this.findController === null ?\n 0 : this.findController.state.query.length);\n let ret = [];\n if (!matches) {\n return ret;\n }\n for (let m = 0, len = matches.length; m < len; m++) {\n // Calculate the start position.\n let matchIdx = matches[m];\n\n // Loop over the divIdxs.\n while (i !== end && matchIdx >=\n (iIndex + textContentItemsStr[i].length)) {\n iIndex += textContentItemsStr[i].length;\n i++;\n }\n\n if (i === textContentItemsStr.length) {\n console.error('Could not find a matching mapping');\n }\n\n let match = {\n begin: {\n divIdx: i,\n offset: matchIdx - iIndex,\n },\n };\n\n // Calculate the end position.\n if (matchesLength) { // Multiterm search.\n matchIdx += matchesLength[m];\n } else { // Phrase search.\n matchIdx += queryLen;\n }\n\n // Somewhat the same array as above, but use > instead of >= to get\n // the end position right.\n while (i !== end && matchIdx >\n (iIndex + textContentItemsStr[i].length)) {\n iIndex += textContentItemsStr[i].length;\n i++;\n }\n\n match.end = {\n divIdx: i,\n offset: matchIdx - iIndex,\n };\n ret.push(match);\n }\n\n return ret;\n }\n\n renderMatches(matches) {\n // Early exit if there is nothing to render.\n if (matches.length === 0) {\n return;\n }\n\n let textContentItemsStr = this.textContentItemsStr;\n let textDivs = this.textDivs;\n let prevEnd = null;\n let pageIdx = this.pageIdx;\n let isSelectedPage = (this.findController === null ?\n false : (pageIdx === this.findController.selected.pageIdx));\n let selectedMatchIdx = (this.findController === null ?\n -1 : this.findController.selected.matchIdx);\n let highlightAll = (this.findController === null ?\n false : this.findController.state.highlightAll);\n let infinity = {\n divIdx: -1,\n offset: undefined,\n };\n\n function beginText(begin, className) {\n let divIdx = begin.divIdx;\n textDivs[divIdx].textContent = '';\n appendTextToDiv(divIdx, 0, begin.offset, className);\n }\n\n function appendTextToDiv(divIdx, fromOffset, toOffset, className) {\n let div = textDivs[divIdx];\n let content = textContentItemsStr[divIdx].substring(fromOffset, toOffset);\n let node = document.createTextNode(content);\n if (className) {\n let span = document.createElement('span');\n span.className = className;\n span.appendChild(node);\n div.appendChild(span);\n return;\n }\n div.appendChild(node);\n }\n\n let i0 = selectedMatchIdx, i1 = i0 + 1;\n if (highlightAll) {\n i0 = 0;\n i1 = matches.length;\n } else if (!isSelectedPage) {\n // Not highlighting all and this isn't the selected page, so do nothing.\n return;\n }\n\n for (let i = i0; i < i1; i++) {\n let match = matches[i];\n let begin = match.begin;\n let end = match.end;\n let isSelected = (isSelectedPage && i === selectedMatchIdx);\n let highlightSuffix = (isSelected ? ' selected' : '');\n\n if (this.findController) {\n this.findController.updateMatchPosition(pageIdx, i, textDivs,\n begin.divIdx);\n }\n\n // Match inside new div.\n if (!prevEnd || begin.divIdx !== prevEnd.divIdx) {\n // If there was a previous div, then add the text at the end.\n if (prevEnd !== null) {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n }\n // Clear the divs and set the content until the starting point.\n beginText(begin);\n } else {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, begin.offset);\n }\n\n if (begin.divIdx === end.divIdx) {\n appendTextToDiv(begin.divIdx, begin.offset, end.offset,\n 'highlight' + highlightSuffix);\n } else {\n appendTextToDiv(begin.divIdx, begin.offset, infinity.offset,\n 'highlight begin' + highlightSuffix);\n for (let n0 = begin.divIdx + 1, n1 = end.divIdx; n0 < n1; n0++) {\n textDivs[n0].className = 'highlight middle' + highlightSuffix;\n }\n beginText(end, 'highlight end' + highlightSuffix);\n }\n prevEnd = end;\n }\n\n if (prevEnd) {\n appendTextToDiv(prevEnd.divIdx, prevEnd.offset, infinity.offset);\n }\n }\n\n updateMatches() {\n // Only show matches when all rendering is done.\n if (!this.renderingDone) {\n return;\n }\n\n // Clear all matches.\n let matches = this.matches;\n let textDivs = this.textDivs;\n let textContentItemsStr = this.textContentItemsStr;\n let clearedUntilDivIdx = -1;\n\n // Clear all current matches.\n for (let i = 0, len = matches.length; i < len; i++) {\n let match = matches[i];\n let begin = Math.max(clearedUntilDivIdx, match.begin.divIdx);\n for (let n = begin, end = match.end.divIdx; n <= end; n++) {\n let div = textDivs[n];\n div.textContent = textContentItemsStr[n];\n div.className = '';\n }\n clearedUntilDivIdx = match.end.divIdx + 1;\n }\n\n if (this.findController === null || !this.findController.active) {\n return;\n }\n\n // Convert the matches on the page controller into the match format\n // used for the textLayer.\n let pageMatches, pageMatchesLength;\n if (this.findController !== null) {\n pageMatches = this.findController.pageMatches[this.pageIdx] || null;\n pageMatchesLength = (this.findController.pageMatchesLength) ?\n this.findController.pageMatchesLength[this.pageIdx] || null : null;\n }\n\n this.matches = this.convertMatches(pageMatches, pageMatchesLength);\n this.renderMatches(this.matches);\n }\n\n /**\n * Improves text selection by adding an additional div where the mouse was\n * clicked. This reduces flickering of the content if the mouse is slowly\n * dragged up or down.\n *\n * @private\n */\n _bindMouse() {\n let div = this.textLayerDiv;\n let expandDivsTimer = null;\n\n div.addEventListener('mousedown', (evt) => {\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\n this.textLayerRenderTask.expandTextDivs(true);\n if ((typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) &&\n expandDivsTimer) {\n clearTimeout(expandDivsTimer);\n expandDivsTimer = null;\n }\n return;\n }\n\n let end = div.querySelector('.endOfContent');\n if (!end) {\n return;\n }\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n // On non-Firefox browsers, the selection will feel better if the height\n // of the `endOfContent` div is adjusted to start at mouse click\n // location. This avoids flickering when the selection moves up.\n // However it does not work when selection is started on empty space.\n let adjustTop = evt.target !== div;\n if (typeof PDFJSDev === 'undefined' || PDFJSDev.test('GENERIC')) {\n adjustTop = adjustTop && window.getComputedStyle(end).\n getPropertyValue('-moz-user-select') !== 'none';\n }\n if (adjustTop) {\n let divBounds = div.getBoundingClientRect();\n let r = Math.max(0, (evt.pageY - divBounds.top) / divBounds.height);\n end.style.top = (r * 100).toFixed(2) + '%';\n }\n }\n end.classList.add('active');\n });\n\n div.addEventListener('mouseup', () => {\n if (this.enhanceTextSelection && this.textLayerRenderTask) {\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n expandDivsTimer = setTimeout(() => {\n if (this.textLayerRenderTask) {\n this.textLayerRenderTask.expandTextDivs(false);\n }\n expandDivsTimer = null;\n }, EXPAND_DIVS_TIMEOUT);\n } else {\n this.textLayerRenderTask.expandTextDivs(false);\n }\n return;\n }\n\n let end = div.querySelector('.endOfContent');\n if (!end) {\n return;\n }\n if (typeof PDFJSDev === 'undefined' ||\n !PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n end.style.top = '';\n }\n end.classList.remove('active');\n });\n }\n}\n\n/**\n * @implements IPDFTextLayerFactory\n */\nclass DefaultTextLayerFactory {\n /**\n * @param {HTMLDivElement} textLayerDiv\n * @param {number} pageIndex\n * @param {PageViewport} viewport\n * @param {boolean} enhanceTextSelection\n * @returns {TextLayerBuilder}\n */\n createTextLayerBuilder(textLayerDiv, pageIndex, viewport,\n enhanceTextSelection = false) {\n return new TextLayerBuilder({\n textLayerDiv,\n pageIndex,\n viewport,\n enhanceTextSelection,\n });\n }\n}\n\nexport {\n TextLayerBuilder,\n DefaultTextLayerFactory,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/text_layer_builder.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nimport {\n animationStarted, DEFAULT_SCALE, DEFAULT_SCALE_VALUE, MAX_SCALE,\n MIN_SCALE, noContextMenuHandler, NullL10n\n} from './ui_utils';\n\nconst PAGE_NUMBER_LOADING_INDICATOR = 'visiblePageIsLoading';\nconst SCALE_SELECT_CONTAINER_PADDING = 8;\nconst SCALE_SELECT_PADDING = 22;\n\n/**\n * @typedef {Object} ToolbarOptions\n * @property {HTMLDivElement} container - Container for the secondary toolbar.\n * @property {HTMLSpanElement} numPages - Label that contains number of pages.\n * @property {HTMLInputElement} pageNumber - Control for display and user input\n * of the current page number.\n * @property {HTMLSpanElement} scaleSelectContainer - Container where scale\n * controls are placed. The width is adjusted on UI initialization.\n * @property {HTMLSelectElement} scaleSelect - Scale selection control.\n * @property {HTMLOptionElement} customScaleOption - The item used to display\n * a non-predefined scale.\n * @property {HTMLButtonElement} previous - Button to go to the previous page.\n * @property {HTMLButtonElement} next - Button to go to the next page.\n * @property {HTMLButtonElement} zoomIn - Button to zoom in the pages.\n * @property {HTMLButtonElement} zoomOut - Button to zoom out the pages.\n * @property {HTMLButtonElement} viewFind - Button to open find bar.\n * @property {HTMLButtonElement} openFile - Button to open a new document.\n * @property {HTMLButtonElement} presentationModeButton - Button to switch to\n * presentation mode.\n * @property {HTMLButtonElement} download - Button to download the document.\n * @property {HTMLAElement} viewBookmark - Element to link current url of\n * the page view.\n */\n\nclass Toolbar {\n /**\n * @param {ToolbarOptions} options\n * @param {HTMLDivElement} mainContainer\n * @param {EventBus} eventBus\n * @param {IL10n} l10n - Localization service.\n */\n constructor(options, mainContainer, eventBus, l10n = NullL10n) {\n this.toolbar = options.container;\n this.mainContainer = mainContainer;\n this.eventBus = eventBus;\n this.l10n = l10n;\n this.items = options;\n\n this._wasLocalized = false;\n this.reset();\n\n // Bind the event listeners for click and hand tool actions.\n this._bindListeners();\n }\n\n setPageNumber(pageNumber, pageLabel) {\n this.pageNumber = pageNumber;\n this.pageLabel = pageLabel;\n this._updateUIState(false);\n }\n\n setPagesCount(pagesCount, hasPageLabels) {\n this.pagesCount = pagesCount;\n this.hasPageLabels = hasPageLabels;\n this._updateUIState(true);\n }\n\n setPageScale(pageScaleValue, pageScale) {\n this.pageScaleValue = pageScaleValue;\n this.pageScale = pageScale;\n this._updateUIState(false);\n }\n\n reset() {\n this.pageNumber = 0;\n this.pageLabel = null;\n this.hasPageLabels = false;\n this.pagesCount = 0;\n this.pageScaleValue = DEFAULT_SCALE_VALUE;\n this.pageScale = DEFAULT_SCALE;\n this._updateUIState(true);\n }\n\n _bindListeners() {\n let { eventBus, items, } = this;\n let self = this;\n\n items.previous.addEventListener('click', function() {\n eventBus.dispatch('previouspage');\n });\n\n items.next.addEventListener('click', function() {\n eventBus.dispatch('nextpage');\n });\n\n items.zoomIn.addEventListener('click', function() {\n eventBus.dispatch('zoomin');\n });\n\n items.zoomOut.addEventListener('click', function() {\n eventBus.dispatch('zoomout');\n });\n\n items.pageNumber.addEventListener('click', function() {\n this.select();\n });\n\n items.pageNumber.addEventListener('change', function() {\n eventBus.dispatch('pagenumberchanged', {\n source: self,\n value: this.value,\n });\n });\n\n items.scaleSelect.addEventListener('change', function() {\n if (this.value === 'custom') {\n return;\n }\n eventBus.dispatch('scalechanged', {\n source: self,\n value: this.value,\n });\n });\n\n items.presentationModeButton.addEventListener('click', function() {\n eventBus.dispatch('presentationmode');\n });\n\n items.openFile.addEventListener('click', function() {\n eventBus.dispatch('openfile');\n });\n\n items.print.addEventListener('click', function() {\n eventBus.dispatch('print');\n });\n\n items.download.addEventListener('click', function() {\n eventBus.dispatch('download');\n });\n\n // Suppress context menus for some controls.\n items.scaleSelect.oncontextmenu = noContextMenuHandler;\n\n eventBus.on('localized', () => {\n this._localized();\n });\n }\n\n _localized() {\n this._wasLocalized = true;\n this._adjustScaleWidth();\n this._updateUIState(true);\n }\n\n _updateUIState(resetNumPages = false) {\n if (!this._wasLocalized) {\n // Don't update the UI state until we localize the toolbar.\n return;\n }\n let { pageNumber, pagesCount, items, } = this;\n let scaleValue = (this.pageScaleValue || this.pageScale).toString();\n let scale = this.pageScale;\n\n if (resetNumPages) {\n if (this.hasPageLabels) {\n items.pageNumber.type = 'text';\n } else {\n items.pageNumber.type = 'number';\n this.l10n.get('of_pages', { pagesCount, }, 'of {{pagesCount}}').\n then((msg) => {\n items.numPages.textContent = msg;\n });\n }\n items.pageNumber.max = pagesCount;\n }\n\n if (this.hasPageLabels) {\n items.pageNumber.value = this.pageLabel;\n this.l10n.get('page_of_pages', { pageNumber, pagesCount, },\n '({{pageNumber}} of {{pagesCount}})').then((msg) => {\n items.numPages.textContent = msg;\n });\n } else {\n items.pageNumber.value = pageNumber;\n }\n\n items.previous.disabled = (pageNumber <= 1);\n items.next.disabled = (pageNumber >= pagesCount);\n\n items.zoomOut.disabled = (scale <= MIN_SCALE);\n items.zoomIn.disabled = (scale >= MAX_SCALE);\n\n let customScale = Math.round(scale * 10000) / 100;\n this.l10n.get('page_scale_percent', { scale: customScale, },\n '{{scale}}%').then((msg) => {\n let options = items.scaleSelect.options;\n let predefinedValueFound = false;\n for (let i = 0, ii = options.length; i < ii; i++) {\n let option = options[i];\n if (option.value !== scaleValue) {\n option.selected = false;\n continue;\n }\n option.selected = true;\n predefinedValueFound = true;\n }\n if (!predefinedValueFound) {\n items.customScaleOption.textContent = msg;\n items.customScaleOption.selected = true;\n }\n });\n }\n\n updateLoadingIndicatorState(loading = false) {\n let pageNumberInput = this.items.pageNumber;\n\n if (loading) {\n pageNumberInput.classList.add(PAGE_NUMBER_LOADING_INDICATOR);\n } else {\n pageNumberInput.classList.remove(PAGE_NUMBER_LOADING_INDICATOR);\n }\n }\n\n _adjustScaleWidth() {\n let container = this.items.scaleSelectContainer;\n let select = this.items.scaleSelect;\n\n animationStarted.then(function() {\n // Adjust the width of the zoom box to fit the content.\n // Note: If the window is narrow enough that the zoom box is not\n // visible, we temporarily show it to be able to adjust its width.\n if (container.clientWidth === 0) {\n container.setAttribute('style', 'display: inherit;');\n }\n if (container.clientWidth > 0) {\n select.setAttribute('style', 'min-width: inherit;');\n let width = select.clientWidth + SCALE_SELECT_CONTAINER_PADDING;\n select.setAttribute('style', 'min-width: ' +\n (width + SCALE_SELECT_PADDING) + 'px;');\n container.setAttribute('style', 'min-width: ' + width + 'px; ' +\n 'max-width: ' + width + 'px;');\n }\n });\n }\n}\n\nexport {\n Toolbar,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/toolbar.js","/* Copyright 2012 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\nconst DEFAULT_VIEW_HISTORY_CACHE_SIZE = 20;\n\n/**\n * View History - This is a utility for saving various view parameters for\n * recently opened files.\n *\n * The way that the view parameters are stored depends on how PDF.js is built,\n * for 'gulp ' the following cases exist:\n * - FIREFOX or MOZCENTRAL - uses sessionStorage.\n * - GENERIC or CHROME - uses localStorage, if it is available.\n */\nclass ViewHistory {\n constructor(fingerprint, cacheSize = DEFAULT_VIEW_HISTORY_CACHE_SIZE) {\n this.fingerprint = fingerprint;\n this.cacheSize = cacheSize;\n\n this._initializedPromise = this._readFromStorage().then((databaseStr) => {\n let database = JSON.parse(databaseStr || '{}');\n if (!('files' in database)) {\n database.files = [];\n }\n if (database.files.length >= this.cacheSize) {\n database.files.shift();\n }\n let index;\n for (let i = 0, length = database.files.length; i < length; i++) {\n let branch = database.files[i];\n if (branch.fingerprint === this.fingerprint) {\n index = i;\n break;\n }\n }\n if (typeof index !== 'number') {\n index = database.files.push({ fingerprint: this.fingerprint, }) - 1;\n }\n this.file = database.files[index];\n this.database = database;\n });\n }\n\n _writeToStorage() {\n return new Promise((resolve) => {\n let databaseStr = JSON.stringify(this.database);\n\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n sessionStorage.setItem('pdfjs.history', databaseStr);\n } else {\n localStorage.setItem('pdfjs.history', databaseStr);\n }\n resolve();\n });\n }\n\n _readFromStorage() {\n return new Promise(function(resolve) {\n if (typeof PDFJSDev !== 'undefined' &&\n PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n resolve(sessionStorage.getItem('pdfjs.history'));\n } else {\n let value = localStorage.getItem('pdfjs.history');\n\n // TODO: Remove this key-name conversion after a suitable time-frame.\n // Note that we only remove the old 'database' entry if it looks like\n // it was created by PDF.js, to avoid removing someone else's data.\n if (!value) {\n let databaseStr = localStorage.getItem('database');\n if (databaseStr) {\n try {\n let database = JSON.parse(databaseStr);\n if (typeof database.files[0].fingerprint === 'string') {\n localStorage.setItem('pdfjs.history', databaseStr);\n localStorage.removeItem('database');\n value = databaseStr;\n }\n } catch (ex) { }\n }\n }\n resolve(value);\n }\n });\n }\n\n set(name, val) {\n return this._initializedPromise.then(() => {\n this.file[name] = val;\n return this._writeToStorage();\n });\n }\n\n setMultiple(properties) {\n return this._initializedPromise.then(() => {\n for (let name in properties) {\n this.file[name] = properties[name];\n }\n return this._writeToStorage();\n });\n }\n\n get(name, defaultValue) {\n return this._initializedPromise.then(() => {\n let val = this.file[name];\n return val !== undefined ? val : defaultValue;\n });\n }\n\n getMultiple(properties) {\n return this._initializedPromise.then(() => {\n let values = Object.create(null);\n\n for (let name in properties) {\n let val = this.file[name];\n values[name] = val !== undefined ? val : properties[name];\n }\n return values;\n });\n }\n}\n\nexport {\n ViewHistory,\n};\n\n\n\n// WEBPACK FOOTER //\n// web/view_history.js","/* Copyright 2016 Mozilla Foundation\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n/* globals chrome */\n\n'use strict';\n\nlet DEFAULT_URL = 'compressed.tracemonkey-pldi-09.pdf';\n\nif (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) {\n (function rewriteUrlClosure() {\n // Run this code outside DOMContentLoaded to make sure that the URL\n // is rewritten as soon as possible.\n let queryString = document.location.search.slice(1);\n let m = /(^|&)file=([^&]*)/.exec(queryString);\n DEFAULT_URL = m ? decodeURIComponent(m[2]) : '';\n\n // Example: chrome-extension://.../http://example.com/file.pdf\n let humanReadableUrl = '/' + DEFAULT_URL + location.hash;\n history.replaceState(history.state, '', humanReadableUrl);\n if (top === window) {\n chrome.runtime.sendMessage('showPageAction');\n }\n })();\n}\n\nlet pdfjsWebApp;\nif (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('PRODUCTION')) {\n pdfjsWebApp = require('./app.js');\n}\n\nif (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('FIREFOX || MOZCENTRAL')) {\n require('./firefoxcom.js');\n require('./firefox_print_service.js');\n}\nif (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('GENERIC')) {\n require('./genericcom.js');\n}\nif (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME')) {\n require('./chromecom.js');\n}\nif (typeof PDFJSDev !== 'undefined' && PDFJSDev.test('CHROME || GENERIC')) {\n require('./pdf_print_service.js');\n}\n\nfunction getViewerConfiguration() {\n return {\n appContainer: document.body,\n mainContainer: document.getElementById('viewerContainer'),\n viewerContainer: document.getElementById('viewer'),\n eventBus: null, // using global event bus with DOM events\n toolbar: {\n container: document.getElementById('toolbarViewer'),\n numPages: document.getElementById('numPages'),\n pageNumber: document.getElementById('pageNumber'),\n scaleSelectContainer: document.getElementById('scaleSelectContainer'),\n scaleSelect: document.getElementById('scaleSelect'),\n customScaleOption: document.getElementById('customScaleOption'),\n previous: document.getElementById('previous'),\n next: document.getElementById('next'),\n zoomIn: document.getElementById('zoomIn'),\n zoomOut: document.getElementById('zoomOut'),\n viewFind: document.getElementById('viewFind'),\n openFile: document.getElementById('openFile'),\n print: document.getElementById('print'),\n presentationModeButton: document.getElementById('presentationMode'),\n download: document.getElementById('download'),\n viewBookmark: document.getElementById('viewBookmark'),\n },\n secondaryToolbar: {\n toolbar: document.getElementById('secondaryToolbar'),\n toggleButton: document.getElementById('secondaryToolbarToggle'),\n toolbarButtonContainer:\n document.getElementById('secondaryToolbarButtonContainer'),\n presentationModeButton:\n document.getElementById('secondaryPresentationMode'),\n openFileButton: document.getElementById('secondaryOpenFile'),\n printButton: document.getElementById('secondaryPrint'),\n downloadButton: document.getElementById('secondaryDownload'),\n viewBookmarkButton: document.getElementById('secondaryViewBookmark'),\n firstPageButton: document.getElementById('firstPage'),\n lastPageButton: document.getElementById('lastPage'),\n pageRotateCwButton: document.getElementById('pageRotateCw'),\n pageRotateCcwButton: document.getElementById('pageRotateCcw'),\n cursorSelectToolButton: document.getElementById('cursorSelectTool'),\n cursorHandToolButton: document.getElementById('cursorHandTool'),\n documentPropertiesButton: document.getElementById('documentProperties'),\n },\n fullscreen: {\n contextFirstPage: document.getElementById('contextFirstPage'),\n contextLastPage: document.getElementById('contextLastPage'),\n contextPageRotateCw: document.getElementById('contextPageRotateCw'),\n contextPageRotateCcw: document.getElementById('contextPageRotateCcw'),\n },\n sidebar: {\n // Divs (and sidebar button)\n mainContainer: document.getElementById('mainContainer'),\n outerContainer: document.getElementById('outerContainer'),\n toggleButton: document.getElementById('sidebarToggle'),\n // Buttons\n thumbnailButton: document.getElementById('viewThumbnail'),\n outlineButton: document.getElementById('viewOutline'),\n attachmentsButton: document.getElementById('viewAttachments'),\n // Views\n thumbnailView: document.getElementById('thumbnailView'),\n outlineView: document.getElementById('outlineView'),\n attachmentsView: document.getElementById('attachmentsView'),\n },\n findBar: {\n bar: document.getElementById('findbar'),\n toggleButton: document.getElementById('viewFind'),\n findField: document.getElementById('findInput'),\n highlightAllCheckbox: document.getElementById('findHighlightAll'),\n caseSensitiveCheckbox: document.getElementById('findMatchCase'),\n findMsg: document.getElementById('findMsg'),\n findResultsCount: document.getElementById('findResultsCount'),\n findStatusIcon: document.getElementById('findStatusIcon'),\n findPreviousButton: document.getElementById('findPrevious'),\n findNextButton: document.getElementById('findNext'),\n },\n passwordOverlay: {\n overlayName: 'passwordOverlay',\n container: document.getElementById('passwordOverlay'),\n label: document.getElementById('passwordText'),\n input: document.getElementById('password'),\n submitButton: document.getElementById('passwordSubmit'),\n cancelButton: document.getElementById('passwordCancel'),\n },\n documentProperties: {\n overlayName: 'documentPropertiesOverlay',\n container: document.getElementById('documentPropertiesOverlay'),\n closeButton: document.getElementById('documentPropertiesClose'),\n fields: {\n 'fileName': document.getElementById('fileNameField'),\n 'fileSize': document.getElementById('fileSizeField'),\n 'title': document.getElementById('titleField'),\n 'author': document.getElementById('authorField'),\n 'subject': document.getElementById('subjectField'),\n 'keywords': document.getElementById('keywordsField'),\n 'creationDate': document.getElementById('creationDateField'),\n 'modificationDate': document.getElementById('modificationDateField'),\n 'creator': document.getElementById('creatorField'),\n 'producer': document.getElementById('producerField'),\n 'version': document.getElementById('versionField'),\n 'pageCount': document.getElementById('pageCountField'),\n },\n },\n errorWrapper: {\n container: document.getElementById('errorWrapper'),\n errorMessage: document.getElementById('errorMessage'),\n closeButton: document.getElementById('errorClose'),\n errorMoreInfo: document.getElementById('errorMoreInfo'),\n moreInfoButton: document.getElementById('errorShowMore'),\n lessInfoButton: document.getElementById('errorShowLess'),\n },\n printContainer: document.getElementById('printContainer'),\n openFileInputName: 'fileInput',\n debuggerScriptPath: './debugger.js',\n defaultUrl: DEFAULT_URL,\n };\n}\n\nfunction webViewerLoad() {\n let config = getViewerConfiguration();\n if (typeof PDFJSDev === 'undefined' || !PDFJSDev.test('PRODUCTION')) {\n Promise.all([\n SystemJS.import('pdfjs-web/app'),\n SystemJS.import('pdfjs-web/genericcom'),\n SystemJS.import('pdfjs-web/pdf_print_service'),\n ]).then(function([app, ...otherModules]) {\n window.PDFViewerApplication = app.PDFViewerApplication;\n app.PDFViewerApplication.run(config);\n });\n } else {\n window.PDFViewerApplication = pdfjsWebApp.PDFViewerApplication;\n pdfjsWebApp.PDFViewerApplication.run(config);\n }\n}\n\nif (document.readyState === 'interactive' ||\n document.readyState === 'complete') {\n webViewerLoad();\n} else {\n document.addEventListener('DOMContentLoaded', webViewerLoad, true);\n}\n\n\n\n// WEBPACK FOOTER //\n// web/viewer.js"],"sourceRoot":""} \ No newline at end of file diff --git a/example/index.html b/example/index.html index c4c6d58..2d25c3e 100644 --- a/example/index.html +++ b/example/index.html @@ -1,137 +1,92 @@ -OfficeJs | Demos +OfficeToHtml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + -
- + + +
+ +
+
- -
-
-

Demos - Main

- -
-

<-- Select one of demos on left side

-
-
- - -
-
-
- -
+
+

Description

+

jQuery plugin written in pure javascript for converting modern microsoft office files, + pptx,docx,xlsx and pdf to html.

+

In fact it is an application that integrates other libraries like PPTXjs, + mammoth.js,SheetJs Combined with + handsontable + and PDF.js, + designed to convert Office files and pdf file to HTML.

+
+
+

Supported browsers

+

Supports modern browsers such as FireFox, Chrome, Edge etc. + But I have not checked in all browsers.For more information, read the support for each of the above libraries.

+
+ +
+

DOCS

+

See Demos.

+
+
+

issues

+

.doc and .ppt files not supported.

+
+
+
- -
+ + + \ No newline at end of file diff --git a/example/layout/index.html b/example/layout/index.html new file mode 100644 index 0000000..e69de29 diff --git a/example/layout/scripts/index.html b/example/layout/scripts/index.html new file mode 100644 index 0000000..e69de29 diff --git a/example/layout/styles/fonts/index.html b/example/layout/styles/fonts/index.html new file mode 100644 index 0000000..e69de29 diff --git a/example/layout/styles/index.html b/example/layout/styles/index.html new file mode 100644 index 0000000..e69de29 diff --git a/example/pages/demos.html b/example/pages/demos.html new file mode 100644 index 0000000..f151d91 --- /dev/null +++ b/example/pages/demos.html @@ -0,0 +1,145 @@ + + + +OfficeJs | Demos + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+ + + +
+
+

Demos - Main

+ +
+

<-- Select one of demos on left side

+
+
+ + +
+
+
+ +
+
+ +
+ + + +
+ +
+ + + \ No newline at end of file diff --git a/example/docs.html b/example/pages/docs.html similarity index 89% rename from example/docs.html rename to example/pages/docs.html index 0c9f707..abde374 100644 --- a/example/docs.html +++ b/example/pages/docs.html @@ -1,590 +1,595 @@ - - - -OfficeJs | Docs - - - - - - - - -
- -
-
-
- - - -
-
-

usage

-
-

1. Include all necessary .css and .js files in <HEAD> area:

-
-                
-    <link rel="stylesheet" href="./include/jquery_ui/themes/start/jquery-ui.min.css">
-    <script src="./include/jquery/jquery-1.12.4.min.js"></script>
-    <script src="./include/jquery_ui/jquery-ui.min.js"></script>
-    <!-- ################################ For files reder ###############################-->
-    <!--PDF-->
-    <link rel="stylesheet" href="./include/pdf/pdf.viewer.css">
-    <script src="./include/pdf/build/pdf.js"></script>
-    <!--Docs-->
-    <script src="./include/docxjs/jszip-utils.js"></script>
-    <script src="./include/docxjs/mammoth.browser.min.js"></script>
-    <!--PPTX-->
-    <link rel="stylesheet" href="./include/PPTXjs/css/pptxjs.css">
-    <link rel="stylesheet" href="./include/PPTXjs/css/nv.d3.min.css">
-    <script type="text/javascript" src="./include/PPTXjs/js/filereader.js"></script>
-    <script type="text/javascript" src="./include/PPTXjs/js/d3.min.js"></script>
-    <script type="text/javascript" src="./include/PPTXjs/js/nv.d3.min.js"></script>
-    <script type="text/javascript" src="./include/PPTXjs/js/pptxjs.js"></script>
-    <script type="text/javascript" src="./include/PPTXjs/js/divs2slides.js"></script>
-    <!--All Spreadsheet -->
-    <link rel="stylesheet" href="./include/handsontable/dist/handsontable.full.min.css">
-    <script type="text/javascript" src="./include/handsontable/dist/handsontable.full.js"></script>
-    <script type="text/javascript" src="./include/SheetJS/assets/js/xlsx.full.min.js"></script>
-    <!--Image viewer-->
-    <link rel="stylesheet" href="./include/verySimpleImageViewer/css/jquery.verySimpleImageViewer.css">
-    <script type="text/javascript" src="./include/verySimpleImageViewer/js/jquery.verySimpleImageViewer.js"></script>
-    <!--All-->
-    <script src="officeToHtml.js"></script>
-    <link rel="stylesheet" href="officeToHtml.css">
-                
-            
-

2. Add <Div> with id in <BODY> area:

-
-                
-<div id="resolte-contaniner"></div>
-                
-            
-

3.Use one or both javascript method to read file:

-

a. For reading remote file :

-
-                
-var file_path = "path/to/file.pptx"; 
-$("#resolte-contaniner").officeToHtml({
-   url: file_path
-});
-                
-            
-

b. For reading local file using INPUT object :

-

b1. First add <Input> with id in <BODY> area:

-
-                
-<input type="file" id="select_file" />                    
-                
-            
-

b2. And then use next script:

-
-                
-$("#resolte-contaniner").officeToHtml({
-  inputObjId: "select_file"
-});
-                
-            
- -

4.options and settings:

-
-                
-$("#resolte-contaniner").officeToHtml({
-    url: file_path,
-    inputObjId: "select_file",
-    pdfSetting: {
-        // setting for pdf
-    },
-    docxSetting: {
-        // setting for docx
-    },
-    pptxSetting: {
-        // setting for pptx
-    },
-    sheetSetting: {
-        // setting for excel
-    },
-    imageSetting: {
-        // setting for  images
-    }
-});                    
-                
-            
-

a.pdfSetting:

-
-                
-$("#resolte-contaniner").officeToHtml({
-    url: file_path,
-    inputObjId: "select_file",
-    pdfSetting: {
-        thumbnailViewBtn: true,
-        searchBtn: true,
-        nextPreviousBtn: true,
-        pageNumberTxt: true,
-        totalPagesLabel: true,
-        zoomBtns: true,
-        scaleSelector: true,
-        presantationModeBtn: true,
-        openFileBtn: true,
-        printBtn: true,
-        downloadBtn: true,
-        bookmarkBtn: true,
-        secondaryToolbarBtn: true,
-        firstPageBtn: true,
-        lastPageBtn: true,
-        pageRotateCwBtn: true,
-        pageRotateCcwBtn: true,
-        cursorSelectTextToolbarBtn: true,
-        cursorHandToolbarBtn: true
-    }
-});                    
-                
-            
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#namedescriptiondefault value
1thumbnailViewBtn
Thumbnail viewer button (true - view button, false - hide button).
true
2searchBtn
Seraching button (true - view button, false - hide button).true
3nextPreviousBtn
next and previous button (true - view button, false - hide button).true
4pageNumberTxt
page number textbox  (true - view text, false - hide text).true
5totalPagesLabel
total pages label (true - view label, false - hide label).true
6zoomBtns
zoom  buttons (true - view buttons, false - hide buttons).true
7scaleSelector
scale selector (true - view selector, false - hide selector).true
8presantationModeBtn
presentation mode  button (true - view button, false - hide button).true
9openFileBtn
open file  button (true - view button, false - hide button).true
10printBtn
print  button (true - view button, false - hide button).true
11downloadBtn
download  button (true - view button, false - hide button).true
12bookmarkBtn
bookmark  button - open current view in new window (true - view button, false - hide button).true
13secondaryToolbarBtn
secondary toolbar  button (true - view button, false - hide button).true
14firstPageBtn
go to first page  button (true - view button, false - hide button).true
15lastPageBtn
go to last page button (true - view button, false - hide button).true
16pageRotateCwBtn
rotate page clockwise button (true - view button, false - hide button).true
17pageRotateCcwBtn
rotate page counter clockwise button (true - view button, false - hide button).true
18cursorSelectTextToolbarBtn
select text button (true - view button, false - hide button).true
19cursorHandToolbarBtn
cursor hand button (true - view button, false - hide button).
true
-

b.docxSetting:

-
-                
-$("#resolte-contaniner").officeToHtml({
-    url: file_path,
-    inputObjId: "select_file",
-    docxSetting: {
-        styleMap : null,
-        includeEmbeddedStyleMap: true,
-        includeDefaultStyleMap: true,
-        convertImage: null,
-        ignoreEmptyParagraphs: false,
-        idPrefix: "",
-        isRtl : "auto" 
-    }
-});                    
-                
-            
- - - - - - - - - - - - - - - - - - - -
#namedescriptiondefault value
1isRtl

set if the docx document is "rtl" (right to left) or "ltr" (left to right).
set "auto" for automatic detaction (work for hebrew only)
"auto"
2For the others options see mammoth.js github page
- - -

c.pptxSetting:

-
-                
-$("#resolte-contaniner").officeToHtml({
-    url: file_path,
-    inputObjId: "select_file",
-    pptxSetting: {
-        slidesScale: "50%", //Change Slides scale by percent
-        slideMode: true, /** true,false*/
-        keyBoardShortCut: true,  /** true,false ,condition: slideMode: true*/
-        mediaProcess: true, /** true,false: if true then process video and audio files */
-        jsZipV2: false,
-        slideModeConfig: {
-            first: 1,
-            nav: true, /** true,false : show or not nav buttons*/
-            navTxtColor: "black", /** color */
-            keyBoardShortCut: false, /** true,false ,condition: */
-            showSlideNum: true, /** true,false */
-            showTotalSlideNum: true, /** true,false */
-            autoSlide:1, /** false or seconds , F8 to active ,keyBoardShortCut: true */
-            randomAutoSlide: false, /** true,false ,autoSlide:true */ 
-            loop: true,  /** true,false */
-            background: false, /** false or color*/
-            transition: "default", /** transition type: "slid","fade","default","random" , to show transition efects :transitionTime > 0.5 */
-            transitionTime: 1 /** transition time between slides in seconds */               
-        }
-    }
-});                    
-                
-            
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
#namedescriptiondefault value
1slidesScaleChange Slides scale by percent(%). for orginal size set this option to "" or "100%"""
2slideModeIf true, turn on presentation mode. The settings of the presentation mode are controlled by the variables "slideModeConfig" false
3keyBoardShortCutIf true, enable to enter or exit from presentation mode by keyboard shortcut F5 false
4mediaProcessif true, then process video and audio files.If 'false', you can not play and see or hear the videos and audios embedded in the presentation.true
5jsZipV2url link to jsZip version 2.
This allows the ability to load jsZip v.2 in case jsZip v.3 is loaded for another use.
false
6slideModeConfigsettings of the presentation mode.
for more details click here
{}
7slideModeConfig.firstThe first slide that will be loaded.1
8slideModeConfig.navshow ('true') or hide ('false') navigator buttons.true
9slideModeConfig.navTxtColorcolor of slide number text and total slides number shown in navigator area."black"
10slideModeConfig.keyBoardShortCutif true , enable to control presentation by keyboard shortcuts.
for keyboard shortcuts list click here
false
11slideModeConfig.showSlideNumif true , show slide number in navigator area.true
12slideModeConfig.showTotalSlideNumif true , show total slides number in navigator area.true
13slideModeConfig.autoSlideoptions:'false' or number (seconds). if set 'false' it disable auto slide mode. if set number then auto slide mode will be enabled and the number will be the time between slides.1
14slideModeConfig.randomAutoSlideif true and autoSlide mode are enabled then The slides appear in random order.false
15slideModeConfig.loopif true, in presentation mode , after last slide will go to first slide. in auto slideMode, the presentation will play in loop.false
16slideModeConfig.backgroundcolor of presentation background.false
17slideModeConfig.transitiontransition types options: "slid","fade","default","random". "default"
18slideModeConfig.transitionTimeTime delay in seconds between slides.1
-

d.sheetSetting:

-
-                
-$("#resolte-contaniner").officeToHtml({
-    url: file_path,
-    inputObjId: "select_file",
-    sheetSetting: {
-        jqueryui : false,
-        activeHeaderClassName: "",
-        allowEmpty: true,
-        autoColumnSize: true,
-        autoRowSize: false,
-        columns: false,
-        columnSorting: true,
-        contextMenu: false,
-        copyable: true,
-        customBorders: false,
-        fixedColumnsLeft: 0,
-        fixedRowsTop: 0,
-        language:'en-US',
-        search: false,
-        selectionMode: 'single',
-        sortIndicator: false,
-        readOnly: false,
-        startRows: 1,
-        startCols: 1,
-        rowHeaders: true,
-        colHeaders: true,
-        width: false,
-        height:false
-    }
-});                    
-                
-            
- - - - - - - - - - - - - - - - - - - -
#namedescriptiondefault value
1jqueryuiif true , will use jQuery-ui interface.
To use this option, must include "jquery-ui.js" and "jquery-ui.css" in the HEAD area.
false
2For the others options see handsontable tutorial
-

e.imageSetting:

-
-                
-$("#resolte-contaniner").officeToHtml({
-    url: file_path,
-    inputObjId: "select_file",
-    imageSetting: {
-        frame: ['100%', '100%',false],
-        maxZoom: '900%',
-        zoomFactor: '10%',
-        mouse: true,
-        keyboard: true,
-        toolbar: true,
-        rotateToolbar: false
-    }
-});                    
-                
-            
- - - - - - - - - - - - - -
#namedescriptiondefault value
1For options see verySimpleImageViewer github page
- - -
-
-
- -
-
-
- -
- -
- - + + + +OfficeJs | Docs + + + + + + + + +
+ +
+
+
+ + + +
+
+

usage

+
+

1. Include all necessary .css and .js files in <HEAD> area:

+
+                
+<!--PDF--> 
+<link rel="stylesheet" href="./include/pdf/pdf.viewer.css"> 
+<script src="./include/pdf/pdf.js"></script> <!--Docs-->
+<script src="./include/docx/jszip-utils.js"></script>
+<script src="./include/docx/mammoth.browser.min.js"></script>
+<!--PPTX-->
+<link rel="stylesheet" href="./include/PPTXjs/css/pptxjs.css">
+<link rel="stylesheet" href="./include/PPTXjs/css/nv.d3.min.css">
+<script type="text/javascript" src="./include/PPTXjs/js/filereader.js"></script>
+<script type="text/javascript" src="./include/PPTXjs/js/d3.min.js"></script>
+<script type="text/javascript" src="./include/PPTXjs/js/nv.d3.min.js"></script>
+<script type="text/javascript" src="./include/PPTXjs/js/pptxjs.js"></script>
+<script type="text/javascript" src="./include/PPTXjs/js/divs2slides.js"></script>
+<!--All Spreadsheet -->
+<link rel="stylesheet" href="./include/SheetJS/handsontable.full.min.css">
+<script type="text/javascript" src="./include/SheetJS/handsontable.full.min.js"></script>
+<script type="text/javascript" src="./include/SheetJS/xlsx.full.min.js"></script>
+<!--Image viewer--> 
+<link rel="stylesheet" href="./include/verySimpleImageViewer/css/jquery.verySimpleImageViewer.css">
+<script type="text/javascript" src="./include/verySimpleImageViewer/js/jquery.verySimpleImageViewer.js"></script>
+<!--officeToHtml-->
+<script src="./include/officeToHtml.js"></script>
+<link rel="stylesheet" href="./include/officeToHtml.css">
+                
+            
+

2. Add <Div> with id in <BODY> area:

+
+                
+<div id="resolte-contaniner"></div>
+                
+            
+

3.Use one or both javascript method to read file:

+

a. For reading remote file :

+
+                
+var file_path = "path/to/file.pptx"; 
+$("#resolte-contaniner").officeToHtml({
+   url: file_path
+});
+                
+            
+

b. For reading local file using INPUT object :

+

b1. First add <Input> with id in <BODY> area:

+
+                
+<input type="file" id="select_file" />                    
+                
+            
+

b2. And then use next script:

+
+                
+$("#resolte-contaniner").officeToHtml({
+  inputObjId: "select_file"
+});
+                
+            
+ +

4.options and settings:

+
+                
+$("#resolte-contaniner").officeToHtml({
+    url: file_path,
+    inputObjId: "select_file",
+    pdfSetting: {
+        // setting for pdf
+    },
+    docxSetting: {
+        // setting for docx
+    },
+    pptxSetting: {
+        // setting for pptx
+    },
+    sheetSetting: {
+        // setting for excel
+    },
+    imageSetting: {
+        // setting for  images
+    }
+});                    
+                
+            
+

a.pdfSetting:

+
+                
+$("#resolte-contaniner").officeToHtml({
+    url: file_path,
+    inputObjId: "select_file",
+    pdfSetting: {
+        setLang: "he",
+        thumbnailViewBtn: true,
+        searchBtn: true,
+        nextPreviousBtn: true,
+        pageNumberTxt: true,
+        totalPagesLabel: true,
+        zoomBtns: true,
+        scaleSelector: true,
+        presantationModeBtn: true,
+        openFileBtn: true,
+        printBtn: true,
+        downloadBtn: true,
+        bookmarkBtn: true,
+        secondaryToolbarBtn: true,
+        firstPageBtn: true,
+        lastPageBtn: true,
+        pageRotateCwBtn: true,
+        pageRotateCcwBtn: true,
+        cursorSelectTextToolbarBtn: true,
+        cursorHandToolbarBtn: true
+    }
+});                    
+                
+            
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#namedescriptiondefault value
1setLang
set manually the interface language(short name code) -click here to see all supported languages: link. +
if set to "" or not set at all then the language will be as the browser interface language or English if it is not + supported. +
""
1thumbnailViewBtn
Thumbnail viewer button (true - view button, false - hide button).
true
2searchBtn
Seraching button (true - view button, false - hide button).true
3nextPreviousBtn
next and previous button (true - view button, false - hide button).true
4pageNumberTxt
page number textbox  (true - view text, false - hide text).true
5totalPagesLabel
total pages label (true - view label, false - hide label).true
6zoomBtns
zoom  buttons (true - view buttons, false - hide buttons).true
7scaleSelector
scale selector (true - view selector, false - hide selector).true
8presantationModeBtn
presentation mode  button (true - view button, false - hide button).true
9openFileBtn
open file  button (true - view button, false - hide button).true
10printBtn
print  button (true - view button, false - hide button).true
11downloadBtn
download  button (true - view button, false - hide button).true
12bookmarkBtn
bookmark  button - open current view in new window (true - view button, false - hide button).true
13secondaryToolbarBtn
secondary toolbar  button (true - view button, false - hide button).true
14firstPageBtn
go to first page  button (true - view button, false - hide button).true
15lastPageBtn
go to last page button (true - view button, false - hide button).true
16pageRotateCwBtn
rotate page clockwise button (true - view button, false - hide button).true
17pageRotateCcwBtn
rotate page counter clockwise button (true - view button, false - hide button).true
18cursorSelectTextToolbarBtn
select text button (true - view button, false - hide button).true
19cursorHandToolbarBtn
cursor hand button (true - view button, false - hide button).
true
+

b.docxSetting:

+
+                
+$("#resolte-contaniner").officeToHtml({
+    url: file_path,
+    inputObjId: "select_file",
+    docxSetting: {
+        styleMap : null,
+        includeEmbeddedStyleMap: true,
+        includeDefaultStyleMap: true,
+        convertImage: null,
+        ignoreEmptyParagraphs: false,
+        idPrefix: "",
+        isRtl : "auto" 
+    }
+});                    
+                
+            
+ + + + + + + + + + + + + + + + + + + +
#namedescriptiondefault value
1isRtl

set if the docx document is "rtl" (right to left) or "ltr" (left to right).
set "auto" for automatic detaction (work for hebrew only)
"auto"
2For the others options see mammoth.js github page
+ + +

c.pptxSetting:

+
+                
+$("#resolte-contaniner").officeToHtml({
+    url: file_path,
+    inputObjId: "select_file",
+    pptxSetting: {
+        slidesScale: "50%", //Change Slides scale by percent
+        slideMode: true, /** true,false*/
+        keyBoardShortCut: true,  /** true,false ,condition: slideMode: true*/
+        mediaProcess: true, /** true,false: if true then process video and audio files */
+        jsZipV2: false,
+        slideModeConfig: {
+            first: 1,
+            nav: true, /** true,false : show or not nav buttons*/
+            navTxtColor: "black", /** color */
+            keyBoardShortCut: false, /** true,false ,condition: */
+            showSlideNum: true, /** true,false */
+            showTotalSlideNum: true, /** true,false */
+            autoSlide:1, /** false or seconds , F8 to active ,keyBoardShortCut: true */
+            randomAutoSlide: false, /** true,false ,autoSlide:true */ 
+            loop: true,  /** true,false */
+            background: false, /** false or color*/
+            transition: "default", /** transition type: "slid","fade","default","random" , to show transition efects :transitionTime > 0.5 */
+            transitionTime: 1 /** transition time between slides in seconds */               
+        }
+    }
+});                    
+                
+            
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#namedescriptiondefault value
1slidesScaleChange Slides scale by percent(%). for orginal size set this option to "" or "100%"""
2slideModeIf true, turn on presentation mode. The settings of the presentation mode are controlled by the variables "slideModeConfig" false
3keyBoardShortCutIf true, enable to enter or exit from presentation mode by keyboard shortcut F5 false
4mediaProcessif true, then process video and audio files.If 'false', you can not play and see or hear the videos and audios embedded in the presentation.true
5jsZipV2url link to jsZip version 2.
This allows the ability to load jsZip v.2 in case jsZip v.3 is loaded for another use.
false
6slideModeConfigsettings of the presentation mode.
for more details click here
{}
7slideModeConfig.firstThe first slide that will be loaded.1
8slideModeConfig.navshow ('true') or hide ('false') navigator buttons.true
9slideModeConfig.navTxtColorcolor of slide number text and total slides number shown in navigator area."black"
10slideModeConfig.keyBoardShortCutif true , enable to control presentation by keyboard shortcuts.
for keyboard shortcuts list click here
false
11slideModeConfig.showSlideNumif true , show slide number in navigator area.true
12slideModeConfig.showTotalSlideNumif true , show total slides number in navigator area.true
13slideModeConfig.autoSlideoptions:'false' or number (seconds). if set 'false' it disable auto slide mode. if set number then auto slide mode will be enabled and the number will be the time between slides.1
14slideModeConfig.randomAutoSlideif true and autoSlide mode are enabled then The slides appear in random order.false
15slideModeConfig.loopif true, in presentation mode , after last slide will go to first slide. in auto slideMode, the presentation will play in loop.false
16slideModeConfig.backgroundcolor of presentation background.false
17slideModeConfig.transitiontransition types options: "slid","fade","default","random". "default"
18slideModeConfig.transitionTimeTime delay in seconds between slides.1
+

d.sheetSetting:

+
+                
+$("#resolte-contaniner").officeToHtml({
+    url: file_path,
+    inputObjId: "select_file",
+    sheetSetting: {
+        jqueryui : false,
+        activeHeaderClassName: "",
+        allowEmpty: true,
+        autoColumnSize: true,
+        autoRowSize: false,
+        columns: false,
+        columnSorting: true,
+        contextMenu: false,
+        copyable: true,
+        customBorders: false,
+        fixedColumnsLeft: 0,
+        fixedRowsTop: 0,
+        language:'en-US',
+        search: false,
+        selectionMode: 'single',
+        sortIndicator: false,
+        readOnly: false,
+        startRows: 1,
+        startCols: 1,
+        rowHeaders: true,
+        colHeaders: true,
+        width: false,
+        height:false
+    }
+});                    
+                
+            
+ + + + + + + + + + + + + + + + + + + +
#namedescriptiondefault value
1jqueryuiif true , will use jQuery-ui interface.
To use this option, must include "jquery-ui.js" and "jquery-ui.css" in the HEAD area.
false
2For the others options see handsontable tutorial
+

e.imageSetting:

+
+                
+$("#resolte-contaniner").officeToHtml({
+    url: file_path,
+    inputObjId: "select_file",
+    imageSetting: {
+        frame: ['100%', '100%',false],
+        maxZoom: '900%',
+        zoomFactor: '10%',
+        mouse: true,
+        keyboard: true,
+        toolbar: true,
+        rotateToolbar: false
+    }
+});                    
+                
+            
+ + + + + + + + + + + + + +
#namedescriptiondefault value
1For options see verySimpleImageViewer github page
+ + +
+
+
+ +
+
+
+ +
+ +
+ + \ No newline at end of file diff --git a/example/files/demo.docx b/example/pages/files/demo.docx similarity index 100% rename from example/files/demo.docx rename to example/pages/files/demo.docx diff --git a/example/files/demo.jpg b/example/pages/files/demo.jpg similarity index 100% rename from example/files/demo.jpg rename to example/pages/files/demo.jpg diff --git a/example/files/demo.pdf b/example/pages/files/demo.pdf similarity index 100% rename from example/files/demo.pdf rename to example/pages/files/demo.pdf diff --git a/example/files/demo.pptx b/example/pages/files/demo.pptx similarity index 100% rename from example/files/demo.pptx rename to example/pages/files/demo.pptx diff --git a/example/files/demo.xlsx b/example/pages/files/demo.xlsx similarity index 100% rename from example/files/demo.xlsx rename to example/pages/files/demo.xlsx diff --git a/example/include/PPTXjs/css/nv.d3.min.css b/example/pages/include/PPTXjs/css/nv.d3.min.css similarity index 100% rename from example/include/PPTXjs/css/nv.d3.min.css rename to example/pages/include/PPTXjs/css/nv.d3.min.css diff --git a/example/include/PPTXjs/css/pptxjs.css b/example/pages/include/PPTXjs/css/pptxjs.css similarity index 100% rename from example/include/PPTXjs/css/pptxjs.css rename to example/pages/include/PPTXjs/css/pptxjs.css diff --git a/example/include/PPTXjs/js/d3.min.js b/example/pages/include/PPTXjs/js/d3.min.js similarity index 100% rename from example/include/PPTXjs/js/d3.min.js rename to example/pages/include/PPTXjs/js/d3.min.js diff --git a/example/include/PPTXjs/js/divs2slides.css b/example/pages/include/PPTXjs/js/divs2slides.css similarity index 93% rename from example/include/PPTXjs/js/divs2slides.css rename to example/pages/include/PPTXjs/js/divs2slides.css index 8c5793c..6bbbdcb 100644 --- a/example/include/PPTXjs/js/divs2slides.css +++ b/example/pages/include/PPTXjs/js/divs2slides.css @@ -1,11 +1,11 @@ -.jqvsiv_toolbar { - display: inline-block; - position: absolute; - right: 3px; - top: 3px; - z-index: 5; -} -.jqvsiv_toolbarButton { - margin: 0 2px; - cursor: pointer; -} +.jqvsiv_toolbar { + display: inline-block; + position: absolute; + right: 3px; + top: 3px; + z-index: 5; +} +.jqvsiv_toolbarButton { + margin: 0 2px; + cursor: pointer; +} diff --git a/example/include/PPTXjs/js/divs2slides.js b/example/pages/include/PPTXjs/js/divs2slides.js similarity index 100% rename from example/include/PPTXjs/js/divs2slides.js rename to example/pages/include/PPTXjs/js/divs2slides.js diff --git a/example/include/PPTXjs/js/divs2slides.min.js b/example/pages/include/PPTXjs/js/divs2slides.min.js similarity index 99% rename from example/include/PPTXjs/js/divs2slides.min.js rename to example/pages/include/PPTXjs/js/divs2slides.min.js index 727e25b..73b4da1 100644 --- a/example/include/PPTXjs/js/divs2slides.min.js +++ b/example/pages/include/PPTXjs/js/divs2slides.min.js @@ -1,12 +1,12 @@ -/** - * divs2slides.min.js - * Ver : 1.3.2 - * update: 14/05/2018 - * Author: meshesha , https://github.com/meshesha - * LICENSE: MIT - * url:https://github.com/meshesha/divs2slides - * - * New: - * - fixed fullscreen (fullscreen on div only insted all page) - */ +/** + * divs2slides.min.js + * Ver : 1.3.2 + * update: 14/05/2018 + * Author: meshesha , https://github.com/meshesha + * LICENSE: MIT + * url:https://github.com/meshesha/divs2slides + * + * New: + * - fixed fullscreen (fullscreen on div only insted all page) + */ !function(e){var l,s,i,d,t,o={init:function(){var l=o.data,s=l.divId,i=l.isInit;if(e("#"+s+" .slide").hide(),0!=l.slctdBgClr){var d=e(document.body).css("background-color");l.prevBgColor=d,e(document.body).css("background-color",l.slctdBgClr)}l.nav&&!i?(l.isInit=!0,e("#"+s).prepend(e("
").attr({class:"slides-toolbar",style:"width: 90%; padding: 10px; text-align: center;font-size:18px; color: "+l.navTxtColor+";"})),e("#"+s+" .slides-toolbar").prepend(e("").attr({id:"slides-next",class:"slides-nav",alt:"Next Slide",src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADZ0lEQVRIiZ2Va2xTdRjGH5xEg0aXeInRqE00pKwfHAkydYMdlXFpiG5LYFFi0iBZFFeLrm50ZrbrYLeyneEFcHMMhxoksGUSTEw01UQz1ukO29quO11vXNZNwBI1gRDN4wfa0q3n1MKT/D697/s8//OenP8BspD2jSGNtmpISEVjcOZmM6sqjcGZm/f2sC2/+tfQpnYvdxwK0NwXpLkvyB2HAixr83C5eUTSGV2GmzZfVjVc+qxlNFb/dYRHh2Psdl7knpNzbDkxy5YTs9xzco7dzov88pdLtHwV5tM1v4W0VUNCVuZ5plO9r3b62O28wF2DURr7zmRk12CUvT9dYLnDw/99Gp3JJW7bL7Pj2zlW9kS4tTucFZU9EX743RwrOibVQ7RVQ0K5w8uG/hm+8knolmjon+Fa+zh12135aQEFtaMh6/HzLN8bSIMkmwajirWFWI6cpc7kcs5fjdFlWNPoYdneAF/qmE6DJP+++i+bBqOK9VQ2fRSkYBvnvJeeZxoeWNcqc2P7tCKp+t79Jys+Dqr2bmyfZkmzjzqTS0wGLH9vNKZ3+KnGQs1evsbaI+dU+/UOP596Z0RKBqy0nOb6VlkVNX3x8yXVmZWW0wQArDCPCIX14yxp8nFt85QimTQ9e5VvHgzP6y+2e24E5O+UNAV1YyyoG2PhBxMsbvDw+UYv1+yeTJJJf135h63fzLC4wcMi6wSfef+6V0HdGJMrKqyfoBKrrG6usrpVzeXoFRr2+RVnn6sfiyUDiqxuabXNTTWU1Pvj76r9q21uFlknBpIBgt0rvtDopRqpisausbIrqNqbQLB7blwZgm1SU9LsoxoJHXf9wTJRVu1L8OJuX0ywSfP/F+taZHFDm0wlSNI+MKNYU2J985Qt7S4SbFKu3uGXMn2h2aB3+KU084T0bXJ+qRiIlXUGeCu8LAaktNUsVKk4qdmyLyS9diDMm2HL/pCzVMxsvijObQByKj+dqjb2RS6bDp9lJoyfhyPbDvheB5ATn034JJUDYDGAOwHcDSAXwIMAHgWwdHPtZ+btnT/01/SMequ7XHJ118hUzUHJ/Van81iFpfddAE8AeATAAwDuBbAEwB0Abo8HXj9xSshd8ZD7ATwM4HEATwJYBkAXRxs3fgzAQwDuA3BPivniuOei/wDo+pj+wU2R5QAAAABJRU5ErkJggg==",style:"float: right;cursor: pointer;opacity: 0.7;"}).on("click",o.nextSlide)),l.showTotalSlideNum&&e("#"+s+" .slides-toolbar").prepend(e("").attr({id:"slides-total-slides-num"}).html(l.totalSlides)),l.showSlideNum&&l.showTotalSlideNum&&e("#"+s+" .slides-toolbar").prepend(e("").attr({id:"slides-slides-num-separator"}).html(" / ")),l.showSlideNum&&e("#"+s+" .slides-toolbar").prepend(e("").attr({id:"slides-slide-num"}).html(l.slideCount)),l.showFullscreenBtn&&e("#"+s+" .slides-toolbar").prepend(e("").attr({id:"slides-full-screen",class:"slides-nav-play",alt:"fullscreen Slide",src:"data:image/png;base64,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",style:"float: left;cursor: pointer;opacity: 0.7; padding: 0 10px 0 10px"}).bind("click",function(){o.fullscreen()})),l.showPlayPauseBtn&&e("#"+s+" .slides-toolbar").prepend(e("").attr({id:"slides-play-pause",class:"slides-nav-play",alt:"Play/Pause Slide",src:"data:image/png;base64,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",style:"float: left;cursor: pointer;opacity: 0.7; padding: 0 10px 0 10px"}).html("").bind("click",function(){l.isSlideMode&&o.startAutoSlide()})),e("#"+s+" .slides-toolbar").prepend(e("").attr({id:"slides-prev",class:"slides-nav",alt:"Prev. Slide",src:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAADXklEQVRIiZ2Ve2hTZxjGH+tE0bEFdGNM1IBj1PYPKzjr1roeN6tdEW0LWpwMgpMytVncGttF6ZKm2lu0qXdtrdV6wY3ZUsXBYCMbOGrTrce2SZqeNrc5m9bLIjpQxPHsD5PYpMkx+sAPDnzv+zwf3+0ACUipsiiSizuFCL7oVCbSK6tUtVW1SNst5tfZuf2Ui9pWN7Wtbm4/5eK6fQ6mlfzhSfmyy6BUWRQvZJxc3Cm8V/qnR3fey3O/32WT5Q73XhljzeVR1lwe5d4rY2yy3OH3XQGWf+fj+7qewILirryEZ11gsrPlt9vc3eGnuvUvWXZ3+Nlkuc1PG5xM0Vxrea55Yf0AD/w0xqJmHzc1eROiqNnH+h/HuPmoxFSN1RzbfKs1baWxjxVtI9xw2PNSVLSNsMDkYHJxpzAxQGO16C7cYMF+13Op6vCTZMwx/cWbTC/r8UzYVMHQx3UH3VxTPyxLVYef/z76jyRjjufvd3FFpZ2paqtq/OzN2dVOrt43HJfCQ27+bLvP8YpXu6pWYoqmqz0csPCrbjHXNMR4lF34m6P3HjNacj2LdvQEwgFLdNeZUyvF5OzVuxOMQ4rXk1MrcYnuOiMCsox2rqweDLPlpJfDo4/impOMqB9PdpWTGeV9XKztfnqa0nf2Mn1nL5fu6mWmvp9ZFXbWXhrhg4dPZANW7BkIs7zSwawKOzO+7WfIL+0bUQkA+KC8N5BR3s9oVEeGKPkfxg1Yprdxmd42oS9EeIky9f3tHxpsjEfLr7diBsj1ZOptYjhAMNpVH1U6KEdRo5v+QORJkqsXjI5nT4ZgEBUf73EGsqudlCPfLPGi9Z9wgFytYBhQRtzmnOpBwyd1EhPB2D5CknHHV9VIsR+8XNOQKHebEyHXNCQKBjH2D0gwiIq1ZpeY3+Diy5BndgVy66S0mOYh5ZlFxcajHstnx7x8ETYe8Yh55qh1j9KkIEkAJm8+5vxcfdrr05y5QTnUrb57RccHSwBMDvaGfMJKAvAKgKkApgN4HcAbAGYDmF+oa/l6W4Plh9KToq2ksXuwpNEqlTb3OLY2/NK2vuyEFsC7AOYAeBOAAsCrAKYBmBIMxaTgx5RxIa8BmAngLQBzAcwHkAwgNcgCAO8AmAfgbQCzguYzosyT/gcSaJj+/BZ/OQAAAABJRU5ErkJggg==",style:"float: left;cursor: pointer; opacity: 0.7;"}).bind("click",o.prevSlide)),e(".slides-nav, .slides-nav-play").on("mouseover",function(){e(this).css({opacity:1})}),e(".slides-nav, .slides-nav-play").on("mouseout",function(){e(this).css({opacity:.7})}),1==l.slideCount?e("#"+s+" #slides-prev").hide():l.slideCount==l.totalSlides?e("#"+s+" #slides-next").hide():e("#"+s+" #slides-next").show()):(e("#"+s+" .slides-toolbar").show(),l.isEnbleNextBtn=!0,l.isEnblePrevBtn=!0),null===document.getElementById("all_slides_warpper")&&e("#"+s+" .slide").wrapAll("
"),o.gotoSlide(1)},nextSlide:function(){var l=o.data,s=l.isLoop,i=l.isAutoSlideMode;l.slideCount1?e("#slides-prev").show():e("#slides-prev").hide(),l.slideCount!=l.totalSlides||s||e("#slides-next").hide())},prevSlide:function(){var l=o.data,s=l.isAutoSlideMode;return l.slideCount>1&&o.gotoSlide(l.slideCount-1),s||(1==l.slideCount?e("#slides-prev").hide():e("#slides-prev").show(),e("#slides-next").show()),this},gotoSlide:function(l){var s=l-1,i=o.data,d=i.slides,t=i.prevSlide,n=i.transition;if("random"==n){n=["","default","fade","slid"][Math.floor(3*Math.random())+1]}var a=1e3*i.transitionTime;if(d[s]){var r=e(d[s]);e(d[t]).is(":visible")&&("default"==n?e(d[t]).hide(a):"fade"==n?e(d[t]).fadeOut(a):"slid"==n&&e(d[t]).slideUp(a)),"default"==n?r.show(a):"fade"==n?r.fadeIn(a):"slid"==n&&r.slideDown(a),i.prevSlide=s,o.data.slideCount=l,e("#slides-slide-num").html(l)}return this},keyDown:function(l){l.preventDefault();var s=l.keyCode,i=o.data;switch(s){case 37:case 8:i.isSlideMode&&i.isEnblePrevBtn&&o.prevSlide();break;case 39:case 32:case 13:i.isSlideMode&&i.isEnbleNextBtn&&o.nextSlide();break;case 46:if(i.isSlideMode){var d=i.divId;e("#"+d+" .slide").hide(),o.gotoSlide(1)}break;case 27:i.isSlideMode&&(o.closeSileMode(),i.isSlideMode=!1);break;case 116:i.isSlideMode||(o.startSlideMode(),i.isSlideMode=!0,(i.isAutoSlideMode||i.isLoopMode)&&(clearInterval(i.loopIntrval),i.isAutoSlideMode=!1,i.isLoopMode=!1));break;case 113:i.isSlideMode&&o.fullscreen();break;case 119:i.isSlideMode&&o.startAutoSlide()}return!0},startSlideMode:function(){o.init()},closeSileMode:function(){var l=o.data;l.isSlideMode=!1;var s=l.divId;e("#"+s+" .slides-toolbar").hide(),e("#"+s+" .slide").show(),e(document.body).css("background-color",o.data.prevBgColor),l.isLoopMode&&(clearInterval(l.loopIntrval),l.isLoopMode=!1),o.exitFullscreenMod()},startAutoSlide:function(){var l=o.data,s=l.timeBetweenSlides;if(l.isAutoSlideMode||!1===s){if(clearInterval(l.loopIntrval),l.isAutoSlideMode=!1,l.isLoopMode=!1,l.nav){d=l.divId;e("#"+d+" .slides-toolbar .slides-nav").show(),e("#"+d+" #slides-play-pause").attr("src","data:image/png;base64,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")}l.isEnbleNextBtn=!0,l.isEnblePrevBtn=!0}else{l.isAutoSlideMode=!0;var i=l.isLoopMode;if(l.nav){var d=l.divId;e("#"+d+" .slides-toolbar .slides-nav").hide(),e("#"+d+" #slides-play-pause").attr("src","data:image/png;base64,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")}l.isEnbleNextBtn=!1,l.isEnblePrevBtn=!1;var t=s+l.transitionTime,n=l.totalSlides,a=l.randomAutoSlide;if(i)clearInterval(l.loopIntrval),l.isLoopMode=!1;else{var r=1e3*t;l.isLoopMode=!0,l.loopIntrval=setInterval(function(){if(a){var e=Math.floor(Math.random()*n)+1;o.gotoSlide(e)}else o.nextSlide()},r)}}},fullscreen:function(){if(document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement)document.exitFullscreen?document.exitFullscreen():document.msExitFullscreen?document.msExitFullscreen():document.mozCancelFullScreen?document.mozCancelFullScreen():document.webkitExitFullscreen&&document.webkitExitFullscreen(),o.exitFullscreenMod();else{var n=o.data,a=n.divId;document.documentElement.requestFullscreen?document.getElementById(a).requestFullscreen():document.documentElement.msRequestFullscreen?document.getElementById(a).msRequestFullscreen():document.documentElement.mozRequestFullScreen?document.getElementById(a).mozRequestFullScreen():document.documentElement.webkitRequestFullscreen&&document.getElementById(a).webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT);var r=e(window).width(),u=e(window).height();l=e("#"+a).width(),s=e("#"+a).height();var A=e("#"+a+" #all_slides_warpper").css("transform");i=A.substring(A.indexOf("(")+1,A.indexOf(")")).split(","),e("#"+a+" #all_slides_warpper .slide").offset().top,e("#"+a+" #all_slides_warpper .slide").offset().left,d=e("#"+a+" .slides-toolbar").width(),t=e("#"+a+" .slides-toolbar").offset().top,e("#"+a).attr({style:"width: "+(r-10)+"px; height: "+(u-10)+"px;"}),e("#"+a+" #all_slides_warpper").css({transform:"scale(1)"});var c=e("#"+a+" #all_slides_warpper .slide").width(),p=e("#"+a+" #all_slides_warpper .slide").height();e("#"+a+" #all_slides_warpper .slide").css({top:(u-p)/2+"px",left:(r-c)/2+"px"}),n.nav&&e("#"+a+" .slides-toolbar").css({width:"99%",top:"20px"}),e("#"+a+" #slides-full-screen").attr("src","data:image/png;base64,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")}},exitFullscreenMod:function(){var n=o.data,a=n.divId;e("#"+a).attr({style:"width: "+l+"px; height: "+s+"px;"}),console.log(i[0]),e("#"+a+" #all_slides_warpper").css({transform:"scale("+i[0]+")"}),e("#"+a+" #all_slides_warpper .slide").css({top:"0px",left:"0px"}),n.nav&&e("#"+a+" .slides-toolbar").css({width:d+"px",top:t+"px"}),e("#"+a+" #slides-full-screen").attr("src","data:image/png;base64,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")}};e.fn.divs2slides=function(l){var s=e(this),i=s.attr("id"),d=e("#"+i+" .slide"),t=d.length,n=e.extend(!0,{first:1,nav:!0,showPlayPauseBtn:!0,showFullscreenBtn:!0,navTxtColor:"black",keyBoardShortCut:!0,showSlideNum:!0,showTotalSlideNum:!0,autoSlide:1,randomAutoSlide:!1,loop:!1,background:!1,transition:"default",transitionTime:1},l),a=n.first;function r(){!1!==document.webkitIsFullScreen&&!1!==document.mozFullScreen&&null!==document.msFullscreenElement||o.exitFullscreenMod()}o.data={nav:n.nav,navTxtColor:n.navTxtColor,showPlayPauseBtn:n.showPlayPauseBtn,showFullscreenBtn:n.showFullscreenBtn,showSlideNum:n.showSlideNum,showTotalSlideNum:n.showTotalSlideNum,target:s,divId:i,slides:d,isSlideMode:!0,totalSlides:t,slideCount:a,prevSlide:0,transition:n.transition,transitionTime:n.transitionTime,slctdBgClr:n.background,prevBgColor:void 0,timeBetweenSlides:n.autoSlide,isLoop:n.loop,isLoopMode:!1,isAutoSlideMode:!1,randomAutoSlide:n.randomAutoSlide,isEnbleNextBtn:!0,isEnblePrevBtn:!0,isInit:!1},n.keyBoardShortCut&&e(document).bind("keydown",o.keyDown),document.addEventListener&&(document.addEventListener("webkitfullscreenchange",r,!1),document.addEventListener("mozfullscreenchange",r,!1),document.addEventListener("fullscreenchange",r,!1),document.addEventListener("MSFullscreenChange",r,!1)),o.init()}}(jQuery); \ No newline at end of file diff --git a/example/include/PPTXjs/js/filereader.js b/example/pages/include/PPTXjs/js/filereader.js similarity index 100% rename from example/include/PPTXjs/js/filereader.js rename to example/pages/include/PPTXjs/js/filereader.js diff --git a/example/include/PPTXjs/js/jszip.min.js b/example/pages/include/PPTXjs/js/jszip.min.js similarity index 100% rename from example/include/PPTXjs/js/jszip.min.js rename to example/pages/include/PPTXjs/js/jszip.min.js diff --git a/example/include/PPTXjs/js/nv.d3.min.js b/example/pages/include/PPTXjs/js/nv.d3.min.js similarity index 100% rename from example/include/PPTXjs/js/nv.d3.min.js rename to example/pages/include/PPTXjs/js/nv.d3.min.js diff --git a/example/include/PPTXjs/js/pptxjs.js b/example/pages/include/PPTXjs/js/pptxjs.js similarity index 98% rename from example/include/PPTXjs/js/pptxjs.js rename to example/pages/include/PPTXjs/js/pptxjs.js index 597414d..0bd3b6a 100644 --- a/example/include/PPTXjs/js/pptxjs.js +++ b/example/pages/include/PPTXjs/js/pptxjs.js @@ -1,10187 +1,10187 @@ -/** - * pptxjs.js - * Ver. : 1.10.3 - * last update: 14/05/2018 - * Author: meshesha , https://github.com/meshesha - * LICENSE: MIT - * url:https://meshesha.github.io/pptxjs - * New: - * - new divs2slides (v.1.3.2) - * - fixed div width issue - */ - -(function ( $ ) { - $.fn.pptxToHtml = function( options ) { - //var worker; - var $result = $(this); - var divId = $result.attr("id"); - - var isDone = false; - - var MsgQueue = new Array(); - - var themeContent = null; - - var slideLayoutClrOvride = ""; - - var chartID = 0; - var _order = 1; - var titleFontSize = 42; - var bodyFontSize = 20; - var otherFontSize = 16; - var isSlideMode = false; - var styleTable = {}; - var settings = $.extend(true, { - // These are the defaults. - pptxFileUrl: "", - fileInputId: "", - slidesScale: "", //Change Slides scale by percent - slideMode: false, /** true,false*/ - keyBoardShortCut: false, /** true,false ,condition: slideMode: true XXXXX - need to remove - this is doublcated*/ - mediaProcess: true, /** true,false: if true then process video and audio files */ - jsZipV2: false, - slideModeConfig: { - first: 1, - nav: true, /** true,false : show or not nav buttons*/ - navTxtColor: "black", /** color */ - keyBoardShortCut: true, /** true,false ,condition: */ - showSlideNum: true, /** true,false */ - showTotalSlideNum: true, /** true,false */ - autoSlide:true, /** false or seconds , F8 to active ,keyBoardShortCut: true */ - randomAutoSlide: false, /** true,false ,autoSlide:true */ - loop: false, /** true,false */ - background: false, /** false or color*/ - transition: "default", /** transition type: "slid","fade","default","random" , to show transition efects :transitionTime > 0.5 */ - transitionTime: 1 /** transition time between slides in seconds */ - } - }, options ); - // - $("#"+divId).prepend( - $("").attr({ - "class":"slides-loadnig-msg", - "style":"display:block; color:blue; font-size:20px; width:50%; margin:0 auto;" - }).html("Loading...") - ); - if(settings.slideMode){ - if(!jQuery().divs2slides) { - jQuery.getScript('./js/divs2slides.js'); - } - } - if(settings.jsZipV2 !== false){ - jQuery.getScript(settings.jsZipV2); - if(localStorage.getItem('isPPTXjsReLoaded') !== 'yes') { - localStorage.setItem('isPPTXjsReLoaded', 'yes'); - location.reload(); - } - } - - if(settings.keyBoardShortCut){ - $(document).bind("keydown",function(event){ - event.preventDefault(); - var key = event.keyCode; - //console.log(key,isDone) - if(key==116 && !isSlideMode){ //F5 - isSlideMode = true; - $("#"+divId+" .slide").hide(); - setTimeout(function() { - //if(isDone){ - var slideConf = settings.slideModeConfig; - //console.log(key,isDone,slideConf) - $(".slides-loadnig-msg").remove() - $("#"+divId).divs2slides({ - first: slideConf.first, - nav: slideConf.nav, - showPlayPauseBtn: settings.showPlayPauseBtn, - navTxtColor: slideConf.navTxtColor, - keyBoardShortCut: slideConf.keyBoardShortCut, - showSlideNum: slideConf.showSlideNum, - showTotalSlideNum: slideConf.showTotalSlideNum, - autoSlide: slideConf.autoSlide, - randomAutoSlide: slideConf.randomAutoSlide, - loop: slideConf.loop, - background : slideConf.background, - transition: slideConf.transition, - transitionTime: slideConf.transitionTime - }); - //} - - var sScale = settings.slidesScale; - var trnsfrmScl = ""; - if(sScale != ""){ - var numsScale = parseInt(sScale); - var scaleVal = numsScale/100; - trnsfrmScl = 'transform:scale(' + scaleVal + '); transform-origin:top'; - } - - var numOfSlides = 1; - var sScaleVal = (sScale != "")?scaleVal:1; - var slidesHeight = $("#"+divId+" .slide").height(); - //console.log(slidesHeight); - $("#all_slides_warpper").attr({ - style: trnsfrmScl /*+ ";height: " + (numOfSlides * slidesHeight * sScaleVal) + "px"*/ - }) - }, 1500); - }else if(key==116 && isSlideMode){ - //exit slide mode - TODO - - } - }); - } - if(settings.pptxFileUrl != ""){ - JSZipUtils.getBinaryContent(settings.pptxFileUrl,function(err,content){ - var blob = new Blob([content]); - var file_name = settings.pptxFileUrl; - var fArry = file_name.split("."); - fArry.pop(); - blob.name = fArry[0]; - FileReaderJS.setupBlob(blob, { - readAsDefault: "ArrayBuffer", - on: { - load: function(e, file) { - //console.log(e.target.result); - convertToHtml(e.target.result); - } - } - }); - }); - }else{ - $(".slides-loadnig-msg").remove() - } - if(settings.fileInputId !=""){ - $("#"+settings.fileInputId).on("change", function(evt) { - $result.html(""); - var file = evt.target.files[0]; - // var fileName = file[0].name; - //var fileSize = file[0].size; - var fileType = file.type; - if(fileType=="application/vnd.openxmlformats-officedocument.presentationml.presentation"){ - FileReaderJS.setupBlob(file, { - readAsDefault: "ArrayBuffer", - on: { - load: function(e, file) { - //console.log(e.target.result); - convertToHtml(e.target.result); - } - } - }); - }else{ - alert("This is not pptx file"); - } - }); - } - function convertToHtml(file) { - //'use strict'; - var zip = new JSZip(), s; - //if (typeof file === 'string') { // Load - zip = zip.load(file); //zip.load(file, { base64: true }); - var rslt_ary = processPPTX(zip); - //s = readXmlFile(zip, 'ppt/tableStyles.xml'); - - var slidesHeight = $("#"+divId+" .slide").height(); - - for(var i=0;i" +rslt_ary[i]["data"] + ""); - break; - case "ExecutionTime": - // $result.prepend("
"); - processMsgQueue(MsgQueue); - setNumericBullets($(".block")); - setNumericBullets($("table td")); - - isDone = true; - - if(settings.slideMode && !isSlideMode){ - isSlideMode = true; - $("#"+divId+" .slide").hide(); - setTimeout(function() { - var slideConf = settings.slideModeConfig; - $(".slides-loadnig-msg").remove(); - $("#"+divId).divs2slides({ - first: slideConf.first, - nav: slideConf.nav, - showPlayPauseBtn: settings.showPlayPauseBtn, - navTxtColor: slideConf.navTxtColor, - keyBoardShortCut: slideConf.keyBoardShortCut, - showSlideNum: slideConf.showSlideNum, - showTotalSlideNum: slideConf.showTotalSlideNum, - autoSlide: slideConf.autoSlide, - randomAutoSlide: slideConf.randomAutoSlide, - loop: slideConf.loop, - background : slideConf.background, - transition: slideConf.transition, - transitionTime: slideConf.transitionTime - }); - - var sScale = settings.slidesScale; - var trnsfrmScl = ""; - if(sScale != ""){ - var numsScale = parseInt(sScale); - var scaleVal = numsScale/100; - trnsfrmScl = 'transform:scale(' + scaleVal + '); transform-origin:top'; - } - - var numOfSlides = 1; - var sScaleVal = (sScale != "")?scaleVal:1; - //console.log(slidesHeight); - $("#all_slides_warpper").attr({ - style: trnsfrmScl + ";height: " + (numOfSlides * slidesHeight * sScaleVal) + "px" - }) - - }, 1500); - }else if(!settings.slideMode){ - $(".slides-loadnig-msg").remove(); - } - break; - default: - } - } - if(!settings.slideMode){ - if(document.getElementById("all_slides_warpper") === null){ - $("#" + divId + " .slide").wrapAll("
"); - } - } - var sScale = settings.slidesScale; - var trnsfrmScl = ""; - if(sScale != ""){ - var numsScale = parseInt(sScale); - var scaleVal = numsScale/100; - trnsfrmScl = 'transform:scale(' + scaleVal + '); transform-origin:top'; - } - - var slidesHeight = $("#"+divId+" .slide").height(); - var numOfSlides = $("#"+divId+" .slide").length; - var sScaleVal = (sScale != "")?scaleVal:1; - //console.log("slidesHeight: " + slidesHeight + "\nnumOfSlides: " + numOfSlides + "\nScale: " + sScaleVal) - - $("#all_slides_warpper").attr({ - style: trnsfrmScl + ";height: " + (numOfSlides * slidesHeight * sScaleVal) + "px" - }) - - //} - } - function processPPTX(zip) { - var post_ary = []; - var dateBefore = new Date(); - - if (zip.file("docProps/thumbnail.jpeg") !== null) { - var pptxThumbImg = base64ArrayBuffer(zip.file("docProps/thumbnail.jpeg").asArrayBuffer()); - post_ary.push({ - "type": "pptx-thumb", - "data": pptxThumbImg - }); - } - - var filesInfo = getContentTypes(zip); - var slideSize = getSlideSize(zip); - themeContent = loadTheme(zip); - - tableStyles = readXmlFile(zip, "ppt/tableStyles.xml"); - - post_ary.push({ - "type": "slideSize", - "data": slideSize - }); - - var numOfSlides = filesInfo["slides"].length; - for (var i=0; i===== - // Read relationship filename of the slide (Get slideLayoutXX.xml) - // @sldFileName: ppt/slides/slide1.xml - // @resName: ppt/slides/_rels/slide1.xml.rels - var resName = sldFileName.replace("slides/slide", "slides/_rels/slide") + ".rels"; - var resContent = readXmlFile(zip, resName); - var RelationshipArray = resContent["Relationships"]["Relationship"]; - var layoutFilename = ""; - var slideResObj = {}; - if (RelationshipArray.constructor === Array) { - for (var i=0; i===== - // Read slide master filename of the slidelayout (Get slideMasterXX.xml) - // @resName: ppt/slideLayouts/slideLayout1.xml - // @masterName: ppt/slideLayouts/_rels/slideLayout1.xml.rels - var slideLayoutResFilename = layoutFilename.replace("slideLayouts/slideLayout", "slideLayouts/_rels/slideLayout") + ".rels"; - var slideLayoutResContent = readXmlFile(zip, slideLayoutResFilename); - RelationshipArray = slideLayoutResContent["Relationships"]["Relationship"]; - var masterFilename = ""; - var layoutResObj = {}; - if (RelationshipArray.constructor === Array) { - for (var i=0; i===== - var slideContent = readXmlFile(zip, sldFileName); - var nodes = slideContent["p:sld"]["p:cSld"]["p:spTree"]; - var warpObj = { - "zip": zip, - "slideLayoutTables": slideLayoutTables, - "slideMasterTables": slideMasterTables, - "slideResObj": slideResObj, - "slideMasterTextStyles": slideMasterTextStyles, - "layoutResObj":layoutResObj, - "masterResObj":masterResObj - }; - - var bgColor = getSlideBackgroundFill(slideContent, slideLayoutContent, slideMasterContent,warpObj); - var result = "
" - //result += "
"+getBackgroundShapes(slideContent, slideLayoutContent, slideMasterContent,warpObj) + "
" - TODO - for (var nodeKey in nodes) { - if (nodes[nodeKey].constructor === Array) { - for (var i=0; i"; - } - - function indexNodes(content) { - - var keys = Object.keys(content); - var spTreeNode = content[keys[0]]["p:cSld"]["p:spTree"]; - - var idTable = {}; - var idxTable = {}; - var typeTable = {}; - - for (var key in spTreeNode) { - - if (key == "p:nvGrpSpPr" || key == "p:grpSpPr") { - continue; - } - - var targetNode = spTreeNode[key]; - - if (targetNode.constructor === Array) { - for (var i=0; i"; - - // Procsee all child nodes - for (var nodeKey in node) { - if (node[nodeKey].constructor === Array) { - for (var i=0; i - * 959 - * 960 - * 961 - * 962 - * 963 - * 964 - * 965 - * 966 - */ - - var id = getTextByPathList(node, ["p:nvSpPr","p:cNvPr","attrs","id"]); - var name = getTextByPathList(node, ["p:nvSpPr","p:cNvPr","attrs","name"]); - var idx = (getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph"]) === undefined) ? undefined : getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph","attrs","idx"]); - var type = (getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph"]) === undefined) ? undefined : getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph","attrs","type"]); - var order = getTextByPathList(node, ["attrs","order"]); - - var slideLayoutSpNode = undefined; - var slideMasterSpNode = undefined; - - if (type !== undefined) { - if (idx !== undefined) { - slideLayoutSpNode = warpObj["slideLayoutTables"]["typeTable"][type]; - slideMasterSpNode = warpObj["slideMasterTables"]["typeTable"][type]; - } else { - slideLayoutSpNode = warpObj["slideLayoutTables"]["typeTable"][type]; - slideMasterSpNode = warpObj["slideMasterTables"]["typeTable"][type]; - } - } else { - if (idx !== undefined) { - slideLayoutSpNode = warpObj["slideLayoutTables"]["idxTable"][idx]; - slideMasterSpNode = warpObj["slideMasterTables"]["idxTable"][idx]; - } else { - // Nothing - } - } - - if (type === undefined) { - type = getTextByPathList(slideLayoutSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]); - if (type === undefined) { - type = getTextByPathList(slideMasterSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]); - } - } - - return genShape(node, slideLayoutSpNode, slideMasterSpNode, id, name, idx, type, order, warpObj); - } - - function processCxnSpNode(node, warpObj) { - - var id = node["p:nvCxnSpPr"]["p:cNvPr"]["attrs"]["id"]; - var name = node["p:nvCxnSpPr"]["p:cNvPr"]["attrs"]["name"]; - //var idx = (node["p:nvCxnSpPr"]["p:nvPr"]["p:ph"] === undefined) ? undefined : node["p:nvSpPr"]["p:nvPr"]["p:ph"]["attrs"]["idx"]; - //var type = (node["p:nvCxnSpPr"]["p:nvPr"]["p:ph"] === undefined) ? undefined : node["p:nvSpPr"]["p:nvPr"]["p:ph"]["attrs"]["type"]; - //(, ) - var order = node["attrs"]["order"]; - - return genShape(node, undefined, undefined, id, name, undefined, undefined, order, warpObj); - } - - function genShape(node, slideLayoutSpNode, slideMasterSpNode, id, name, idx, type, order, warpObj) { - - var xfrmList = ["p:spPr", "a:xfrm"]; - var slideXfrmNode = getTextByPathList(node, xfrmList); - var slideLayoutXfrmNode = getTextByPathList(slideLayoutSpNode, xfrmList); - var slideMasterXfrmNode = getTextByPathList(slideMasterSpNode, xfrmList); - - var result = ""; - var shpId = getTextByPathList(node, ["attrs","order"]); - //console.log("shpId: ",shpId) - var shapType = getTextByPathList(node, ["p:spPr", "a:prstGeom", "attrs", "prst"]); - - //custGeom - Amir - var custShapType = getTextByPathList(node, ["p:spPr", "a:custGeom"]); - - var isFlipV = false; - if ( getTextByPathList(slideXfrmNode, ["attrs", "flipV"]) === "1" || getTextByPathList(slideXfrmNode, ["attrs", "flipH"]) === "1") { - isFlipV = true; - } - /////////////////////////Amir//////////////////////// - //rotate - var rotate = angleToDegrees(getTextByPathList(slideXfrmNode, ["attrs", "rot"])); - //console.log("rotate: "+rotate); - var txtRotate; - var txtXframeNode = getTextByPathList(node, ["p:txXfrm"]); - if (txtXframeNode !== undefined){ - var txtXframeRot = getTextByPathList(txtXframeNode,["attrs","rot"]); - if (txtXframeRot !== undefined){ - txtRotate = angleToDegrees(txtXframeRot)+90; - } - }else{ - txtRotate = rotate; - } - ////////////////////////////////////////////////// - if (shapType !== undefined || custShapType !== undefined) { - var off = getTextByPathList(slideXfrmNode, ["a:off", "attrs"]); - var x = parseInt(off["x"]) * 96 / 914400; - var y = parseInt(off["y"]) * 96 / 914400; - - var ext = getTextByPathList(slideXfrmNode, ["a:ext", "attrs"]); - var w = parseInt(ext["cx"]) * 96 / 914400; - var h = parseInt(ext["cy"]) * 96 / 914400; - - result += ""; - result += '' - // Fill Color - var fillColor = getShapeFill(node, true,warpObj); - var grndFillFlg = false; - var imgFillFlg = false; - var clrFillType = getFillType(getTextByPathList(node, ["p:spPr"])); - ///////////////////////////////////////// - if(clrFillType == "GRADIENT_FILL"){ - grndFillFlg = true; - var color_arry = fillColor.color; - var angl = fillColor.rot; - var svgGrdnt = getSvgGradient(w,h,angl,color_arry,shpId); - //fill="url(#linGrd)" - result += svgGrdnt ; - }else if(clrFillType == "PIC_FILL"){ - imgFillFlg = true; - var svgBgImg = getSvgImagePattern(fillColor,shpId); - //fill="url(#imgPtrn)" - //console.log(svgBgImg) - result += svgBgImg ; - }else{ - if(clrFillType != "SOLID_FILL" && clrFillType != "PATTERN_FILL" && - (shapType == "arc" || - shapType == "bracketPair" || - shapType == "bracePair" || - shapType == "leftBracket" || - shapType == "leftBrace" || - shapType == "rightBrace" || - shapType == "rightBracket")){ //Temp. solution - TODO - fillColor = "none"; - } - } - // Border Color - var border = getBorder(node, true, "shape"); - - var headEndNodeAttrs = getTextByPathList(node, ["p:spPr", "a:ln", "a:headEnd", "attrs"]); - var tailEndNodeAttrs = getTextByPathList(node, ["p:spPr", "a:ln", "a:tailEnd", "attrs"]); - // type: none, triangle, stealth, diamond, oval, arrow - - if ( (headEndNodeAttrs !== undefined && (headEndNodeAttrs["type"] === "triangle" || headEndNodeAttrs["type"] === "arrow")) || - (tailEndNodeAttrs !== undefined && (tailEndNodeAttrs["type"] === "triangle" || tailEndNodeAttrs["type"] === "arrow")) ) { - var triangleMarker = ""; - result += triangleMarker; - } - result += '' - } - if (shapType !== undefined && custShapType === undefined) { - - switch (shapType) { - case "rect": - case "flowChartProcess": - case "flowChartPredefinedProcess": - case "flowChartInternalStorage": - case "actionButtonBlank": - result += ""; - - if(shapType == "flowChartPredefinedProcess"){ - result += ""; - }else if(shapType == "flowChartInternalStorage"){ - result += " "; - result += " "; - } - break; - case "flowChartCollate": - var d = "M 0,0"+ - " L" + w + "," + 0 + - " L" + 0 + "," + h + - " L" + w + "," + h + - " z"; - result += ""; - - break; - case "flowChartDocument": - var y1, y2,y3,x1; - x1 = w*10800/21600; - y1 = h*17322/21600; - y2 = h*20172/21600; - y3 = h*23922/21600; - var d = "M" + 0+ "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + y1 + - " C" + x1 + "," + y1 + " " + x1 + "," + y3 + " " + 0 + "," + y2 + - " z"; - result += ""; - break; - case "flowChartMultidocument": - var y1,y2,y3,y4,y5,y6,y7,y8,y9,x1,x2,x3,x4,x5,x6,x7; - y1 = h*18022/21600; - y2 = h*3675/21600; - y3 = h*23542/21600; - y4 = h*1815/21600; - y5 = h*16252/21600; - y6 = h*16352/21600; - y7 = h*14392/21600; - y8 = h*20782/21600; - y9 = h*14467/21600; - x1 = w*1532/21600; - x2 = w*20000/21600; - x3 = w*9298/21600; - x4 = w*19298/21600; - x5 = w*18595/21600; - x6 = w*2972/21600; - x7 = w*20800/21600; - var d = "M" + 0 + "," + y2 + - " L" + x5 + "," + y2 + - " L" + x5 + "," + y1 + - " C" + x3 + "," + y1 + " " + x3 + "," + y3 + " " + 0 + "," + y8 + - " z" + - "M" + x1 + "," + y2 + - " L" + x1 + "," + y4 + - " L" + x2 + "," + y4 + - " L" + x2 + "," + y5 + - " C" + x4 + "," + y5 + " " + x5 + "," + y6 + " " + x5 + "," + y6 + - "M" + x6 + "," + y4 + - " L" + x6 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + y7 + - " C" + x7 + "," + y7 + " " + x2 + "," + y9 + " " + x2 + "," + y9; - - result += ""; - break; - case "actionButtonBackPrevious": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - "M" + g11 + "," + vc + - " L" + g12 + "," + g9 + - " L" + g12 + "," + g10 + - " z"; - - result += ""; - - break; - case "actionButtonBeginning": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - g13 = ss*3/4; - g14 = g13/8; - g15 = g13/4; - g16 = g11+g14; - g17 = g11+g15; - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - "M" + g17 + "," + vc + - " L" + g12 + "," + g9 + - " L" + g12 + "," + g10 + - " z" + - "M" + g16 + "," + g9 + - " L" + g11 + "," + g9 + - " L" + g11 + "," + g10 + - " L" + g16 + "," + g10 + - " z"; - - result += ""; - - break; - case "actionButtonDocument": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, dx1, g11, g12, g13, g14, g15; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - dx1 = ss*9/32; - g11 = hc-dx1; - g12 = hc+dx1; - g13 = ss*3/16; - g14 = g12-g13; - g15 = g9+g13; - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" +0 + "," + h + - " z" + - "M" + g11 + "," + g9 + - " L" + g14 + "," + g9 + - " L" + g12 + "," + g15 + - " L" + g12 + "," + g10 + - " L" + g11 + "," + g10 + - " z" + - "M" + g14 + "," + g9 + - " L" + g14 + "," + g15 + - " L" + g12 + "," + g15 + - " z"; - - result += ""; - - break; - case "actionButtonEnd": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - g13 = ss*3/4; - g14 = g13*3/4; - g15 = g13*7/8; - g16 = g11+g14; - g17 = g11+g15; - var d = "M" + 0 + "," + h + - " L" + w + "," + h + - " L" + w + "," + 0 + - " L" + 0 + "," + 0 + - " z" + - " M" + g17 + "," + g9 + - " L" + g12 + "," + g9 + - " L" + g12 + "," + g10 + - " L" + g17 + "," + g10 + - " z" + - " M" + g16 + "," + vc + - " L" + g11 + "," + g9 + - " L" + g11 + "," + g10 + - " z"; - - result += ""; - - break; - case "actionButtonForwardNext": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - - var d = "M" + 0 + "," + h + - " L" + w + "," + h + - " L" + w + "," + 0 + - " L" + 0 + "," + 0 + - " z" + - " M" + g12 + "," + vc + - " L" + g11 + "," + g9 + - " L" + g11 + "," + g10 + - " z"; - - result += ""; - - break; - case "actionButtonHelp": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g11, g13, g14, g15, g16, g19, g20, g21, g23, g24, g27, g29, g30, g31, g33, g36, g37, g41, g42; - - dx2 = ss*3/8; - g9 = vc-dx2; - g11 = hc-dx2; - g13 = ss*3/4; - g14 = g13/7; - g15 = g13*3/14; - g16 = g13*2/7; - g19 = g13*3/7; - g20 = g13*4/7; - g21 = g13*17/28; - g23 = g13*21/28; - g24 = g13*11/14; - g27 = g9+g16; - g29 = g9+g21; - g30 = g9+g23; - g31 = g9+g24; - g33 = g11+g15; - g36 = g11+g19; - g37 = g11+g20; - g41 = g13/14; - g42 = g13*3/28; - var cX1 = g33 + g16; - var cX2 = g36 + g14; - var cY3 = g31 + g42; - var cX4 = (g37+g36+g16)/2; - - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - "M" + g33 + "," + g27+ - shapeArc(cX1,g27,g16,g16,180,360,false).replace("M","L") + - shapeArc(cX4,g27,g14,g15,0,90,false).replace("M","L") + - shapeArc(cX4,g29,g41,g42,270,180,false).replace("M","L") + - " L" + g37 + "," + g30 + - " L" + g36 + "," + g30 + - " L" + g36 + "," + g29 + - shapeArc(cX2,g29,g14,g15,180,270,false).replace("M","L") + - shapeArc(g37,g27,g41,g42,90,0,false).replace("M","L") + - shapeArc(cX1,g27,g14,g14,0,-180,false).replace("M","L") + - " z" + - "M" + hc + "," + g31 + - shapeArc(hc,cY3,g42,g42,270,630,false).replace("M","L") + - " z"; - - result += ""; - - break; - case "actionButtonHome": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g30, g31, g32, g33; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - g13 = ss*3/4; - g14 = g13/16; - g15 = g13/8; - g16 = g13*3/16; - g17 = g13*5/16; - g18 = g13*7/16; - g19 = g13*9/16; - g20 = g13*11/16; - g21 = g13*3/4; - g22 = g13*13/16; - g23 = g13*7/8; - g24 = g9+g14; - g25 = g9+g16; - g26 = g9+g17; - g27 = g9+g21; - g28 = g11+g15; - g29 = g11+g18; - g30 = g11+g19; - g31 = g11+g20; - g32 = g11+g22; - g33 = g11+g23; - - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - " M" + hc + "," + g9 + - " L" + g11 + "," + vc + - " L" + g28 + "," + vc + - " L" + g28 + "," + g10 + - " L" + g33 + "," + g10 + - " L" + g33 + "," + vc + - " L" + g12 + "," + vc + - " L" + g32 + "," + g26 + - " L" + g32 + "," + g24 + - " L" + g31 + "," + g24 + - " L" + g31 + "," + g25 + - " z" + - " M" + g29 + "," + g27 + - " L" + g30 + "," + g27 + - " L" + g30 + "," + g10 + - " L" + g29 + "," + g10 + - " z"; - - result += ""; - - break; - case "actionButtonInformation": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g11, g13, g14, g17, g18, g19, g20, g22, g23, g24, g25, g28, g29, g30, g31, g32, g34, g35, g37, g38; - - dx2 = ss*3/8; - g9 = vc-dx2; - g11 = hc-dx2; - g13 = ss*3/4; - g14 = g13/32; - g17 = g13*5/16; - g18 = g13*3/8; - g19 = g13*13/32; - g20 = g13*19/32; - g22 = g13*11/16; - g23 = g13*13/16; - g24 = g13*7/8; - g25 = g9+g14; - g28 = g9+g17; - g29 = g9+g18; - g30 = g9+g23; - g31 = g9+g24; - g32 = g11+g17; - g34 = g11+g19; - g35 = g11+g20; - g37 = g11+g22; - g38 = g13*3/32; - var cY1 = g9 + dx2; - var cY2 = g25 + g38; - - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - "M" + hc + "," + g9 + - shapeArc(hc,cY1,dx2,dx2,270,630,false).replace("M","L") + - " z" + - "M" + hc + "," + g25 + - shapeArc(hc,cY2,g38,g38,270,630,false).replace("M","L") + - "M" + g32 + "," + g28 + - " L" + g35 + "," + g28 + - " L" + g35 + "," + g30 + - " L" + g37 + "," + g30 + - " L" + g37 + "," + g31 + - " L" + g32 + "," + g31 + - " L" + g32 + "," + g30 + - " L" + g34 + "," + g30 + - " L" + g34 + "," + g29 + - " L" + g32 + "," + g29 + - " z"; - - result += ""; - - break; - case "actionButtonMovie": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26, g27, - g28, g29, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g40, g41, g42, g43, g44, g45, g46, g47, g48; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - g13 = ss*3/4; - g14 = g13*1455/21600; - g15 = g13*1905/21600; - g16 = g13*2325/21600; - g17 = g13*16155/21600; - g18 = g13*17010/21600; - g19 = g13*19335/21600; - g20 = g13*19725/21600; - g21 = g13*20595/21600; - g22 = g13*5280/21600; - g23 = g13*5730/21600; - g24 = g13*6630/21600; - g25 = g13*7492/21600; - g26 = g13*9067/21600; - g27 = g13*9555/21600; - g28 = g13*13342/21600; - g29 = g13*14580/21600; - g30 = g13*15592/21600; - g31 = g11+g14; - g32 = g11+g15; - g33 = g11+g16; - g34 = g11+g17; - g35 = g11+g18; - g36 = g11+g19; - g37 = g11+g20; - g38 = g11+g21; - g39 = g9+g22; - g40 = g9+g23; - g41 = g9+g24; - g42 = g9+g25; - g43 = g9+g26; - g44 = g9+g27; - g45 = g9+g28; - g46 = g9+g29; - g47 = g9+g30; - g48 = g9+g31; - - var d = "M" + 0 + "," + h + - " L" + w + "," + h + - " L" + w + "," + 0 + - " L" + 0 + "," + 0 + - " z" + - "M" + g11 + "," + g39 + - " L" + g11 + "," + g44 + - " L" + g31 + "," + g44 + - " L" + g32 + "," + g43 + - " L" + g33 + "," + g43 + - " L" + g33 + "," + g47 + - " L" + g35 + "," + g47 + - " L" + g35 + "," + g45 + - " L" + g36 + "," + g45 + - " L" + g38 + "," + g46 + - " L" + g12 + "," + g46 + - " L" + g12 + "," + g41 + - " L" + g38 + "," + g41 + - " L" + g37 + "," + g42 + - " L" + g35 + "," + g42 + - " L" + g35 + "," + g41 + - " L" + g34 + "," + g40 + - " L" + g32 + "," + g40 + - " L" + g31 + "," + g39 + - " z"; - - result += ""; - - break; - case "actionButtonReturn": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26, g27; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - g13 = ss*3/4; - g14 = g13*7/8; - g15 = g13*3/4; - g16 = g13*5/8; - g17 = g13*3/8; - g18 = g13/4; - g19 = g9+g15; - g20 = g9+g16; - g21 = g9+g18; - g22 = g11+g14; - g23 = g11+g15; - g24 = g11+g16; - g25 = g11+g17; - g26 = g11+g18; - g27 = g13/8; - var cX1 = g24 - g27; - var cY2 = g19 - g27; - var cX3 = g11 + g17; - var cY4 = g10 - g17; - - var d = "M" + 0 + "," + h + - " L" + w + "," + h + - " L" + w + "," + 0 + - " L" + 0 + "," + 0 + - " z" + - " M" + g12 + "," + g21 + - " L" + g23 + "," + g9 + - " L" + hc + "," + g21 + - " L" + g24 + "," + g21 + - " L" + g24 + "," + g20 + - shapeArc(cX1,g20,g27,g27,0,90,false).replace("M","L") + - " L" + g25 + "," + g19 + - shapeArc(g25,cY2,g27,g27,90,180,false).replace("M","L") + - " L" + g26 + "," + g21 + - " L" + g11 + "," + g21 + - " L" + g11 + "," + g20 + - shapeArc(cX3,g20,g17,g17,180,90,false).replace("M","L") + - " L" + hc + "," + g10 + - shapeArc(hc,cY4,g17,g17,90,0,false).replace("M","L") + - " L" + g22 + "," + g21 + - " z"; - - result += ""; - - break; - case "actionButtonSound": - var hc = w/2, vc = h/2 , ss=Math.min(w,h); - var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26; - - dx2 = ss*3/8; - g9 = vc-dx2; - g10 = vc+dx2; - g11 = hc-dx2; - g12 = hc+dx2; - g13 = ss*3/4; - g14 = g13/8; - g15 = g13*5/16; - g16 = g13*5/8; - g17 = g13*11/16; - g18 = g13*3/4; - g19 = g13*7/8; - g20 = g9+g14; - g21 = g9+g15; - g22 = g9+g17; - g23 = g9+g19; - g24 = g11+g15; - g25 = g11+g16; - g26 = g11+g18; - - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - " M" + g11 + "," + g21 + - " L" + g24 + "," + g21 + - " L" + g25 + "," + g9 + - " L" + g25 + "," + g10 + - " L" + g24 + "," + g22 + - " L" + g11 + "," + g22 + - " z" + - " M" + g26 + "," + g21 + - " L" + g12 + "," + g20 + - " M" + g26 + "," + vc + - " L" + g12 + "," + vc + - " M" + g26 + "," + g22 + - " L" + g12 + "," + g23; - - result += ""; - - break; - case "irregularSeal1": - case "irregularSeal2": - if(shapType == "irregularSeal1"){ - var d = "M" + w*10800/21600 + "," + h*5800/21600 + - " L" + w*14522/21600 + "," + 0 + - " L" + w*14155/21600 + "," + h*5325/21600 + - " L" + w*18380/21600 + "," + h*4457/21600 + - " L" + w*16702/21600 + "," + h*7315/21600 + - " L" + w*21097/21600 + "," + h*8137/21600 + - " L" + w*17607/21600 + "," + h*10475/21600 + - " L" + w + "," + h*13290/21600 + - " L" + w*16837/21600 + "," + h*12942/21600 + - " L" + w*18145/21600 + "," + h*18095/21600 + - " L" + w*14020/21600 + "," + h*14457/21600 + - " L" + w*13247/21600 + "," + h*19737/21600 + - " L" + w*10532/21600 + "," + h*14935/21600 + - " L" + w*8485/21600 + "," + h + - " L" + w*7715/21600 + "," + h*15627/21600 + - " L" + w*4762/21600 + "," + h*17617/21600 + - " L" + w*5667/21600 + "," + h*13937/21600 + - " L" + w*135/21600 + "," + h*14587/21600 + - " L" + w*3722/21600 + "," + h*11775/21600 + - " L" + 0 + "," + h*8615/21600 + - " L" + w*4627/21600 + "," + h*7617/21600 + - " L" + w*370/21600 + "," + h*2295/21600 + - " L" + w*7312/21600 + "," + h*6320/21600 + - " L" + w*8352/21600 + "," + h*2295/21600 + - " z"; - }else if(shapType == "irregularSeal2"){ - var d = "M" + w*11462/21600 + "," + h*4342/21600 + - " L" + w*14790/21600 + "," + 0 + - " L" + w*14525/21600 + "," + h*5777/21600 + - " L" + w*18007/21600 + "," + h*3172/21600 + - " L" + w*16380/21600 + "," + h*6532/21600 + - " L" + w + "," + h*6645/21600 + - " L" + w*16985/21600 + "," + h*9402/21600 + - " L" + w*18270/21600 + "," + h*11290/21600 + - " L" + w*16380/21600 + "," + h*12310/21600 + - " L" + w*18877/21600 + "," + h*15632/21600 + - " L" + w*14640/21600 + "," + h*14350/21600 + - " L" + w*14942/21600 + "," + h*17370/21600 + - " L" + w*12180/21600 + "," + h*15935/21600 + - " L" + w*11612/21600 + "," + h*18842/21600 + - " L" + w*9872/21600 + "," + h*17370/21600 + - " L" + w*8700/21600 + "," + h*19712/21600 + - " L" + w*7527/21600 + "," + h*18125/21600 + - " L" + w*4917/21600 + "," + h + - " L" + w*4805/21600 + "," + h*18240/21600 + - " L" + w*1285/21600 + "," + h*17825/21600 + - " L" + w*3330/21600 + "," + h*15370/21600 + - " L" + 0 + "," + h*12877/21600 + - " L" + w*3935/21600 + "," + h*11592/21600 + - " L" + w*1172/21600 + "," + h*8270/21600 + - " L" + w*5372/21600 + "," + h*7817/21600 + - " L" + w*4502/21600 + "," + h*3625/21600 + - " L" + w*8550/21600 + "," + h*6382/21600 + - " L" + w*9722/21600 + "," + h*1887/21600 + - " z"; - } - result += ""; - break; - case "flowChartTerminator": - var x1, x2, y1, cd2=180,cd4=90,c3d4=270; - x1 = w*3475/21600; - x2 = w*18125/21600; - y1 = h*10800/21600; - //path attrs: w = 21600; h = 21600; - var d = "M" + x1 + "," + 0 + - " L" + x2 + "," + 0 + - shapeArc(x2,h/2,x1,y1,c3d4,c3d4+cd2,false).replace("M","L") + - " L" + x1 + "," + h + - shapeArc(x1,h/2,x1,y1,cd4,cd4+cd2,false).replace("M","L") + - " z"; - result += ""; - break; - case "flowChartPunchedTape": - var x1, x1,y1,y2, cd2=180; - x1 = w*5/20; - y1 = h*2/20; - y2 = h*18/20; - var d = "M" + 0 + "," + y1 + - shapeArc(x1,y1,x1,y1,cd2,0,false).replace("M","L") + - shapeArc(w*(3/4),y1,x1,y1,cd2,360,false).replace("M","L") + - " L" + w + "," + y2 + - shapeArc(w*(3/4),y2,x1,y1,0,-cd2,false).replace("M","L") + - shapeArc(x1,y2,x1,y1,0,cd2,false).replace("M","L") + - " z"; - result += ""; - break; - case "flowChartOnlineStorage": - var x1, y1,c3d4=270,cd4=90; - x1 = w*1/6; - y1 = h*3/6; - var d = "M" + x1 + "," + 0 + - " L" + w + "," + 0 + - shapeArc(w,h/2,x1,y1,c3d4,90,false).replace("M","L") + - " L" + x1 + "," + h + - shapeArc(x1,h/2,x1,y1,cd4,270,false).replace("M","L") + - " z"; - result += ""; - break; - case "flowChartDisplay": - var x1, x2, y1,c3d4=270,cd2=180; - x1 = w*1/6; - x2 = w*5/6; - y1 = h*3/6; - //path attrs: w = 6; h = 6; - var d = "M" + 0 + "," + y1 + - " L" + x1 + "," + 0 + - " L" + x2 + "," + 0 + - shapeArc(w,h/2,x1,y1,c3d4,c3d4+cd2,false).replace("M","L") + - " L" + x1 + "," + h + - " z"; - result += ""; - break; - case "flowChartDelay": - var wd2=w/2,hd2=h/2, cd2=180 ,c3d4=270,cd4=90; - var d = "M" + 0 + "," + 0 + - " L" + wd2 + "," + 0 + - shapeArc(wd2,hd2,wd2,hd2,c3d4,c3d4+cd2,false).replace("M","L") + - " L" + 0 + "," + h + - " z"; - result += ""; - break; - case "flowChartMagneticTape": - var wd2=w/2,hd2=h/2, cd2=180 ,c3d4=270,cd4=90; - var idy,ib,ang1; - idy = hd2*Math.sin(Math.PI/4); - ib = hd2+idy; - ang1 = Math.atan(h/w); - var ang1Dg = ang1*180/Math.PI; - var d = "M" + wd2 + "," + h + - shapeArc(wd2,hd2,wd2,hd2,cd4,cd2,false).replace("M","L") + - shapeArc(wd2,hd2,wd2,hd2,cd2,c3d4,false).replace("M","L") + - shapeArc(wd2,hd2,wd2,hd2,c3d4,360,false).replace("M","L") + - shapeArc(wd2,hd2,wd2,hd2,0,ang1Dg,false).replace("M","L") + - " L" + w + "," + ib + - " L" + w + "," + h + - " z"; - result += ""; - break; - case "ellipse": - case "flowChartConnector": - case "flowChartSummingJunction": - case "flowChartOr": - result += ""; - if(shapType == "flowChartOr"){ - result += " "; - result += " "; - }else if(shapType == "flowChartSummingJunction"){ - var idx, idy, il, ir, it, ib , hc = w/2 , vc = h/2 ,wd2=w/2, hd2 = h/2 ; - var angVal = Math.PI/4; - idx = wd2*Math.cos(angVal); - idy = hd2*Math.sin(angVal); - il = hc-idx; - ir = hc+idx; - it = vc-idy; - ib = vc+idy; - result += " "; - result += " "; - } - break; - case "roundRect": - case "round1Rect": - case "round2DiagRect": - case "round2SameRect": - case "snip1Rect": - case "snip2DiagRect": - case "snip2SameRect": - case "flowChartAlternateProcess": - case "flowChartPunchedCard": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val;// = 0.33334; - var sAdj2,sAdj2_val;// = 0.33334; - var shpTyp, adjTyp; - if(shapAdjst_ary !== undefined && shapAdjst_ary.constructor === Array){ - for(var i=0; i"; - break; - case "snipRoundRect": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val = 0.33334; - var sAdj2,sAdj2_val = 0.33334; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - break; - case "bentConnector2": - var d = ""; - if (isFlipV) { - d = "M 0 " + w + " L " + h + " " + w + " L " + h + " 0"; - } else { - d = "M " + w + " 0 L " + w + " " + h + " L 0 " + h; - } - result += ""; - break; - case "triangle": - case "flowChartExtract": - case "flowChartMerge": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var shapAdjst_val = 0.5; - if(shapAdjst !== undefined){ - shapAdjst_val = parseInt(shapAdjst.substr(4)) * 96 / 9144000; - //console.log("w: "+w+"\nh: "+h+"\nshapAdjst: "+shapAdjst+"\nshapAdjst_val: "+shapAdjst_val); - } - var tranglRott = ""; - if(shapType == "flowChartMerge"){ - tranglRott = "transform='rotate(180 " + w/2 +"," + h/2 + ")'"; - } - result += " "; - break; - case "diamond": - case "flowChartDecision": - case "flowChartSort": - result += " "; - if(shapType == "flowChartSort"){ - result += " "; - } - break; - case "trapezoid": - case "flowChartManualOperation": - case "flowChartManualInput": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var adjst_val = 0.2; - var max_adj_const = 0.7407; - if(shapAdjst !== undefined){ - var adjst = parseInt(shapAdjst.substr(4)) * 96 / 9144000; - adjst_val = (adjst*0.5)/max_adj_const; - // console.log("w: "+w+"\nh: "+h+"\nshapAdjst: "+shapAdjst+"\nadjst_val: "+adjst_val); - } - var cnstVal = 0; - var tranglRott = ""; - if(shapType == "flowChartManualOperation"){ - tranglRott = "transform='rotate(180 " + w/2 +"," + h/2 + ")'"; - } - if(shapType == "flowChartManualInput"){ - adjst_val = 0; - cnstVal = h/5; - } - result += " "; - break; - case "parallelogram": - case "flowChartInputOutput": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var adjst_val = 0.25; - var max_adj_const; - if(w > h){ - max_adj_const = w/h; - }else{ - max_adj_const = h/w; - } - if(shapAdjst !== undefined){ - var adjst = parseInt(shapAdjst.substr(4)) /100000; - adjst_val = adjst/max_adj_const; - //console.log("w: "+w+"\nh: "+h+"\nadjst: "+adjst_val+"\nmax_adj_const: "+max_adj_const); - } - result += " "; - break; - - break; - case "pentagon": - result += " "; - break; - case "hexagon": - case "flowChartPreparation": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 25000*96/914400; - var vf = 115470*96/914400;; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var angVal1 = 60*Math.PI/180; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var maxAdj, a, shd2, x1, x2, dy1, y1, y2 , vc = h/2 ,hd2=h/2; - var ss = Math.min(w,h); - maxAdj = cnstVal1*w/ss; - a = (adj<0)?0:(adj>maxAdj)?maxAdj:adj; - shd2 = hd2*vf/cnstVal2; - x1 = ss*a/cnstVal2; - x2 = w-x1; - dy1 = shd2*Math.sin(angVal1); - y1 = vc-dy1; - y2 = vc+dy1; - - var d = "M" + 0 + "," + vc + - " L" + x1 + "," + y1 + - " L" + x2 + "," + y1 + - " L" + w + "," + vc + - " L" + x2 + "," + y2 + - " L" + x1 + "," + y2 + - " z"; - - result += ""; - break; - case "heptagon": - result += " "; - break; - case "octagon": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var adj1 = 0.25; - if(shapAdjst !== undefined){ - adj1 = parseInt(shapAdjst.substr(4)) /100000; - - } - var adj2 = (1-adj1); - //console.log("adj1: "+adj1+"\nadj2: "+adj2); - result += " "; - - break; - case "decagon": - result += " "; - break; - case "dodecagon": - result += " "; - break; - case "star4": - case "star5": - case "star6": - case "star7": - case "star8": - case "star10": - case "star12": - case "star16": - case "star24": - case "star32": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]);//[0]["attrs"]["fmla"]; - var starNum = shapType.substr(4); - var shapAdjst1 , adj; - switch(starNum){ - case "4": - adj = 30; - break; - case "5": - adj = 40; - break; - case "6": - adj = 60; - break; - case "7": - adj = 70; - break; - case "8": - adj = 77; - break; - case "10": - adj = 86; - break; - case "12": - case "16": - case "24": - case "32": - adj = 75; - break; - } - if(shapAdjst !== undefined){ - shapAdjst1 = getTextByPathList(shapAdjst, ["attrs", "fmla"]); - if(shapAdjst1 === undefined){ - shapAdjst1 = shapAdjst[0]["attrs"]["fmla"]; - } - if(shapAdjst1 !== undefined){ - adj = 2*parseInt(shapAdjst1.substr(4)) /1000; - } - } - - var points = shapeStar(adj,starNum); - result += " "; - break; - case "pie": - case "pieWedge": - case "arc": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var adj1, adj2 ,H, shapAdjst1 , shapAdjst2 ,isClose; - if(shapType == "pie"){ - adj1 = 0; - adj2 = 270; - H = h; - isClose = true; - }else if(shapType == "pieWedge"){ - adj1 = 180; - adj2 = 270; - H = 2*h; - isClose = true; - }else if(shapType == "arc"){ - adj1 = 270; - adj2 = 0; - H = h; - isClose = false; - } - if(shapAdjst !== undefined){ - shapAdjst1 = getTextByPathList(shapAdjst, ["attrs", "fmla"]); - shapAdjst2 = shapAdjst1; - if(shapAdjst1 === undefined){ - shapAdjst1 = shapAdjst[0]["attrs"]["fmla"]; - shapAdjst2 = shapAdjst[1]["attrs"]["fmla"]; - } - if(shapAdjst1 !== undefined){ - adj1 = parseInt(shapAdjst1.substr(4)) /60000; - } - if(shapAdjst2 !== undefined){ - adj2 = parseInt(shapAdjst2.substr(4)) /60000; - } - } - var pieVals = shapePie(H,w,adj1,adj2,isClose); - //console.log("shapType: ",shapType,"\nimgFillFlg: ",imgFillFlg,"\ngrndFillFlg: ",grndFillFlg,"\nshpId: ",shpId,"\nfillColor: ",fillColor); - result += ""; - break; - case "chord": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val = 45; - var sAdj2,sAdj2_val = 270; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - break; - case "frame": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj1 = 12500*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj1 = parseInt(shapAdjst.substr(4))*96/914400; - } - var a1,x1,x4,y4; - if(adj1 < 0) a1 = 0 - else if (adj1 > cnstVal1) a1 = cnstVal1 - else a1 = adj1 - x1 = Math.min(w,h)*a1/cnstVal2; - x4 = w - x1; - y4 = h - x1; - var d = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - "M" + x1 + "," + x1 + - " L" + x1 + "," + y4 + - " L" + x4 + "," + y4 + - " L" + x4 + "," + x1 + - " z"; - result += ""; - break; - case "donut": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var a,dr,iwd2,ihd2; - if(adj < 0) a = 0 - else if (adj > cnstVal1) a = cnstVal1 - else a = adj - dr = Math.min(w,h)*a/cnstVal2; - iwd2 = w/2 - dr; - ihd2 = h/2 - dr; - var d = "M" + 0 + "," + h/2 + - shapeArc(w/2,h/2,w/2,h/2,180,270,false).replace("M","L") + - shapeArc(w/2,h/2,w/2,h/2,270,360,false).replace("M","L") + - shapeArc(w/2,h/2,w/2,h/2,0,90,false).replace("M","L") + - shapeArc(w/2,h/2,w/2,h/2,90,180,false).replace("M","L") + - " z" + - "M" + dr + "," + h/2 + - shapeArc(w/2,h/2,iwd2,ihd2,180,90,false).replace("M","L") + - shapeArc(w/2,h/2,iwd2,ihd2,90,0,false).replace("M","L") + - shapeArc(w/2,h/2,iwd2,ihd2,0,-90,false).replace("M","L") + - shapeArc(w/2,h/2,iwd2,ihd2,270,180,false).replace("M","L") + - " z"; - result += ""; - break; - case "noSmoking": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 18750*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var a,dr,iwd2,ihd2,ang,ang2rad,ct,st,m,n,drd2,dang,dang2,swAng,t3,stAng1,stAng2; - if(adj < 0) a = 0 - else if (adj > cnstVal1) a = cnstVal1 - else a = adj - dr = Math.min(w,h)*a/cnstVal2; - iwd2 = w/2 - dr; - ihd2 = h/2 - dr; - ang = Math.atan(h/w); - //ang2rad = ang*Math.PI/180; - ct = ihd2*Math.cos(ang); - st = iwd2*Math.sin(ang); - m = Math.sqrt(ct*ct+st*st); //"mod ct st 0" - n = iwd2*ihd2/m; - drd2 = dr/2; - dang = Math.atan(drd2/n); - dang2 = dang*2; - swAng = -Math.PI+dang2; - //t3 = Math.atan(h/w); - stAng1 = ang-dang; - stAng2 = stAng1-Math.PI; - var ct1,st1,m1,n1,dx1,dy1,x1,y1,y1,y2; - ct1 = ihd2*Math.cos(stAng1); - st1 = iwd2*Math.sin(stAng1); - m1 =Math.sqrt(ct1*ct1 + st1*st1); //"mod ct1 st1 0" - n1 = iwd2*ihd2/m1; - dx1 = n1*Math.cos(stAng1); - dy1 = n1*Math.sin(stAng1); - x1 = w/2+dx1; - y1 = h/2+dy1; - x2 = w/2-dx1; - y2 = h/2-dy1; - var stAng1deg = stAng1*180/Math.PI; - var stAng2deg = stAng2*180/Math.PI; - var swAng2deg = swAng*180/Math.PI; - var d = "M" + 0 + "," + h/2 + - shapeArc(w/2,h/2,w/2,h/2,180,270,false).replace("M","L") + - shapeArc(w/2,h/2,w/2,h/2,270,360,false).replace("M","L") + - shapeArc(w/2,h/2,w/2,h/2,0,90,false).replace("M","L") + - shapeArc(w/2,h/2,w/2,h/2,90,180,false).replace("M","L") + - " z" + - "M" + x1 + "," + y1 + - shapeArc(w/2,h/2,iwd2,ihd2,stAng1deg,(stAng1deg+swAng2deg),false).replace("M","L") + - " z" + - "M" + x2 + "," + y2 + - shapeArc(w/2,h/2,iwd2,ihd2,stAng2deg,(stAng2deg+swAng2deg),false).replace("M","L") + - " z"; - //console.log("adj: ",adj,"x1:",x1,",y1:",y1," x2:",x2,",y2:",y2,",stAng1:",stAng1,",stAng1deg:",stAng1deg,",stAng2:",stAng2,",stAng2deg:",stAng2deg,",swAng:",swAng,",swAng2deg:",swAng2deg) - - result += ""; - break; - case "halfFrame": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val= 3.5; - var sAdj2,sAdj2_val = 3.5; - var cnsVal = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i maxAdj2) a2 = maxAdj2 - else a2 = sAdj2_val - var x1 = (minWH* a2)/cnsVal; - var g1 = h *x1/w; - var g2 = h-g1; - var maxAdj1 = (cnsVal * g2)/ minWH; - if(sAdj1_val < 0) a1 = 0 - else if (sAdj1_val > maxAdj1) a1 = maxAdj1 - else a1 = sAdj1_val - var y1 = minWH*a1/cnsVal; - var dx2 = y1* w/h; - var x2 = w - dx2; - var dy2 = x1*h/w; - var y2 = h - dy2; - var d = "M0,0" + - " L" + w + "," + 0 + - " L" + x2 + "," + y1 + - " L" + x1 + "," + y1 + - " L"+ x1 + "," + y2 + - " L0," + h +" z"; - - result += ""; - //console.log("w: ",w,", h: ",h,", sAdj1_val: ",sAdj1_val,", sAdj2_val: ",sAdj2_val,",maxAdj1: ",maxAdj1,",maxAdj2: ",maxAdj2) - break; - case "blockArc": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1= 180; - var sAdj2,adj2 = 0; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cd1) stAng = cd1 - else stAng = adj1 //180 - - if(adj2 < 0) istAng = 0 - else if (adj2 > cd1) istAng = cd1 - else istAng = adj2 //0 - - if(adj3 < 0) a3 = 0 - else if (adj3 > cnstVal1) a3 = cnstVal1 - else a3 = adj3 - - sw11 = istAng - stAng; // -180 - sw12 = sw11 + cd1; //180 - swAng = (sw11>0)?sw11:sw12; //180 - iswAng = -swAng; //-180 - - var endAng = stAng + swAng; - var iendAng = istAng + iswAng; - - var wt1,ht1,dx1,dy1,x1,y1,stRd,istRd,wd2,hd2,hc,vc; - stRd = stAng*(Math.PI)/180; - istRd = istAng*(Math.PI)/180; - wd2 = w/2; - hd2 = h/2; - hc = w/2; - vc = h/2; - if(stAng > 90 && stAng < 270){ - wt1 = wd2*(Math.sin((Math.PI)/2 - stRd)); - ht1 = hd2*(Math.cos((Math.PI)/2 - stRd)); - - dx1 = wd2*(Math.cos(Math.atan(ht1/wt1))); - dy1 = hd2*(Math.sin(Math.atan(ht1/wt1))); - - x1 = hc - dx1; - y1 = vc - dy1; - }else{ - wt1 = wd2*(Math.sin(stRd)); - ht1 = hd2*(Math.cos(stRd)); - - dx1 = wd2*(Math.cos(Math.atan(wt1/ht1))); - dy1 = hd2*(Math.sin(Math.atan(wt1/ht1))); - - x1 = hc + dx1; - y1 = vc + dy1; - } - var dr,iwd2,ihd2,wt2,ht2,dx2,dy2,x2,y2; - dr = Math.min(w,h)*a3/cnstVal2; - iwd2 = wd2 - dr; - ihd2 = hd2 - dr; - //console.log("stAng: ",stAng," swAng: ",swAng ," endAng:",endAng) - if((endAng <= 450 && endAng > 270) || ((endAng >=630 && endAng <720)) ){ - wt2 = iwd2*(Math.sin(istRd)); - ht2 = ihd2*(Math.cos(istRd)); - dx2 = iwd2*(Math.cos(Math.atan(wt2/ht2))); - dy2 = ihd2*(Math.sin(Math.atan(wt2/ht2))); - x2 = hc + dx2; - y2 = vc + dy2; - }else{ - wt2 = iwd2*(Math.sin((Math.PI)/2 - istRd)); - ht2 = ihd2*(Math.cos((Math.PI)/2 - istRd)); - - dx2 = iwd2*(Math.cos(Math.atan(ht2/wt2))); - dy2 = ihd2*(Math.sin(Math.atan(ht2/wt2))); - x2 = hc - dx2; - y2 = vc - dy2; - } - var d = "M" + x1 + "," + y1 + - shapeArc(wd2,hd2,wd2,hd2,stAng,endAng,false).replace("M","L") + - " L" + x2 + "," + y2 + - shapeArc(wd2,hd2,iwd2,ihd2,istAng,iendAng,false).replace("M","L") + - " z"; - result += ""; - break; - case "bracePair": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 8333*96/914400; - var cnstVal1 = 25000*96/914400; - var cnstVal2 = 50000*96/914400; - var cnstVal3 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var vc=h/2,cd=360,cd2=180,cd4=90,c3d4=270,a,x1,x2,x3,x4,y2,y3,y4; - if(adj < 0) a = 0 - else if (adj > cnstVal1) a = cnstVal1 - else a = adj - var minWH = Math.min(w,h); - x1 = minWH*a/cnstVal3; - x2 = minWH*a/cnstVal2; - x3 = w - x2; - x4 = w - x1; - y2 = vc - x1; - y3 = vc + x1; - y4 = h - x1; - //console.log("w:",w," h:",h," x1:",x1," x2:",x2," x3:",x3," x4:",x4," y2:",y2," y3:",y3," y4:",y4) - var d = "M" + x2 + "," + h + - shapeArc(x2,y4,x1,x1,cd4,cd2,false).replace("M","L") + - " L" + x1 + "," + y3 + - shapeArc(0,y3,x1,x1,0,(-cd4),false).replace("M","L") + - shapeArc(0,y2,x1,x1,cd4,0,false).replace("M","L") + - " L" + x1 + "," + x1 + - shapeArc(x2,x1,x1,x1,cd2,c3d4,false).replace("M","L") + - " M" + x3 + "," + 0 + - shapeArc(x3,x1,x1,x1,c3d4,cd,false).replace("M","L") + - " L" + x4 + "," + y2 + - shapeArc(w,y2,x1,x1,cd2,cd4,false).replace("M","L") + - shapeArc(w,y3,x1,x1,c3d4,cd2,false).replace("M","L") + - " L" + x4 + "," + y4 + - shapeArc(x3,y4,x1,x1,0,cd4,false).replace("M","L"); - - result += ""; - break; - case "leftBrace": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 8333*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal2) a2 = cnstVal2 - else a2 = adj2 - var minWH = Math.min(w,h); - q1 = cnstVal2 - a2; - if(q1 < a2) q2 = q1 - else q2 = a2 - q3 = q2/2; - var maxAdj1 = q3*h/minWH; - if(adj1 < 0) a1 = 0 - else if (adj1 > maxAdj1) a1 = maxAdj1 - else a1 = adj1 - y1 = minWH*a1/cnstVal2; - y3 = h*a2/cnstVal2; - y2 = y3 - y1; - y4 = y3 + y1; - //console.log("w:",w," h:",h," q1:",q1," q2:",q2," q3:",q3," y1:",y1," y3:",y3," y4:",y4," maxAdj1:",maxAdj1) - var d = "M" + w + "," + h + - shapeArc(w,h-y1,w/2,y1,cd4,cd2,false).replace("M","L") + - " L" + w/2 + "," + y4 + - shapeArc(0,y4,w/2,y1,0,(-cd4),false).replace("M","L") + - shapeArc(0,y2,w/2,y1,cd4,0,false).replace("M","L") + - " L" + w/2 + "," + y1 + - shapeArc(w,y1,w/2,y1,cd2,c3d4,false).replace("M","L"); - - result += ""; - break; - case "rightBrace": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 8333*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal2) a2 = cnstVal2 - else a2 = adj2 - var minWH = Math.min(w,h); - q1 = cnstVal2 - a2; - if(q1 < a2) q2 = q1 - else q2 = a2 - q3 = q2/2; - var maxAdj1 = q3*h/minWH; - if(adj1 < 0) a1 = 0 - else if (adj1 > maxAdj1) a1 = maxAdj1 - else a1 = adj1 - y1 = minWH*a1/cnstVal2; - y3 = h*a2/cnstVal2; - y2 = y3 - y1; - y4 = h - y1; - //console.log("w:",w," h:",h," q1:",q1," q2:",q2," q3:",q3," y1:",y1," y2:",y2," y3:",y3," y4:",y4," maxAdj1:",maxAdj1) - var d = "M" + 0 + "," + 0 + - shapeArc(0,y1,w/2,y1,c3d4,cd,false).replace("M","L") + - " L" + w/2 + "," + y2 + - shapeArc(w,y2,w/2,y1,cd2,cd4,false).replace("M","L") + - shapeArc(w,y3+y1,w/2,y1,c3d4,cd2,false).replace("M","L") + - " L" + w/2 + "," + y4 + - shapeArc(0,y4,w/2,y1,0,cd4,false).replace("M","L"); - - result += ""; - break; - case "bracketPair": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 16667*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var r=w,b=h,cd2=180,cd4=90,c3d4=270,a,x1,x2,y2; - if(adj < 0) a = 0 - else if (adj > cnstVal1) a = cnstVal1 - else a = adj - x1 = Math.min(w,h)*a/cnstVal2; - x2 = r - x1; - y2 = b - x1; - //console.log("w:",w," h:",h," x1:",x1," x2:",x2," y2:",y2) - var d = shapeArc(x1,x1,x1,x1,c3d4,cd2,false) + - shapeArc(x1,y2,x1,x1,cd2,cd4,false).replace("M","L") + - shapeArc(x2,x1,x1,x1,c3d4,(c3d4+cd4),false) + - shapeArc(x2,y2,x1,x1,0,cd4,false).replace("M","L"); - result += ""; - break; - case "leftBracket": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 8333*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var maxAdj = cnstVal1*h/Math.min(w,h); - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var r=w,b=h,cd2=180,cd4=90,c3d4=270,a,y1,y2; - if(adj < 0) a = 0 - else if (adj > maxAdj) a = maxAdj - else a = adj - y1 = Math.min(w,h)*a/cnstVal2; - if(y1>w) y1=w; - y2 = b - y1; - var d = "M"+ r + "," + b + - shapeArc(y1,y2,y1,y1,cd4,cd2,false).replace("M","L") + - " L"+ 0 + "," + y1 + - shapeArc(y1,y1,y1,y1,cd2,c3d4,false).replace("M","L") + - " L"+ r + "," + 0 - result += ""; - break; - case "rightBracket": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 8333*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var maxAdj = cnstVal1*h/Math.min(w,h); - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var cd=360,cd2=180,cd4=90,c3d4=270,a,y1,y2,y3; - if(adj < 0) a = 0 - else if (adj > maxAdj) a = maxAdj - else a = adj - y1 = Math.min(w,h)*a/cnstVal2; - y2 = h - y1; - y3 = w - y1; - //console.log("w:",w," h:",h," y1:",y1," y2:",y2," y3:",y3) - var d = "M"+ 0 + "," + h + - shapeArc(y3,y2,y1,y1,cd4,0,false).replace("M","L") + - //" L"+ r + "," + y2 + - " L"+ w + "," + h/2 + - shapeArc(y3,y1,y1,y1,cd,c3d4,false).replace("M","L") + - " L"+ 0 + "," + 0 - result += ""; - break; - case "moon": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 0.5; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))/100000;//*96/914400;; - } - var hd2,cd2,cd4; - - hd2 = h/2; - cd2 = 180; - cd4 = 90; - - var adj2 = (1-adj) * w; - var d = "M" + w + "," + h + - shapeArc(w,hd2,w,hd2,cd4,(cd4+cd2),false).replace("M","L") + - shapeArc(w,hd2,adj2,hd2,(cd4+cd2),cd4,false).replace("M","L") + - " z"; - result += ""; - break; - case "corner": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val= 50000*96/914400; - var sAdj2,sAdj2_val = 50000*96/914400; - var cnsVal = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i maxAdj1) a1 = maxAdj1 - else a1 = sAdj1_val - - if(sAdj2_val < 0) a2 = 0 - else if (sAdj2_val > maxAdj2) a2 = maxAdj2 - else a2 = sAdj2_val - x1 = minWH*a2/cnsVal; - dy1 = minWH*a1/cnsVal; - y1 = h - dy1; - - var d = "M0,0" + - " L" + x1 + "," + 0 + - " L" + x1 + "," + y1 + - " L" + w + "," + y1 + - " L"+ w + "," + h + - " L0," + h +" z"; - - result += ""; - break; - case "diagStripe": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var sAdj1_val= 50000*96/914400; - var cnsVal = 100000*96/914400; - if(shapAdjst !== undefined){ - sAdj1_val = parseInt(shapAdjst.substr(4))* 96/914400; - } - var a1 , x2 , y2; - if(sAdj1_val < 0) a1 = 0 - else if (sAdj1_val > cnsVal) a1 = cnsVal - else a1 = sAdj1_val - x2 = w*a1/cnsVal; - y2 = h*a1/cnsVal; - var d = "M" + 0 + "," + y2 + - " L" + x2 + "," + 0 + - " L" + w + "," + 0 + - " L"+ 0 + "," + h +" z"; - - result += ""; - break; - case "gear6": - case "gear9": - txtRotate = 0; - var gearNum = shapType.substr(4) , d; - if(gearNum == "6"){ - d = shapeGear(w,h/3.5,parseInt(gearNum)); - }else{ //gearNum=="9" - d = shapeGear(w,h/3.5,parseInt(gearNum)); - } - result += ""; - break; - case "bentConnector3": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var shapAdjst_val = 0.5; - if(shapAdjst !== undefined){ - shapAdjst_val = parseInt(shapAdjst.substr(4)) /100000; - if(isFlipV){ - result += " "; - break; - case "teardrop": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var adj1 = 100000*96/914400; - var cnsVal1 = adj1; - var cnsVal2 = 200000*96/914400; - if(shapAdjst !== undefined){ - adj1 = parseInt(shapAdjst.substr(4))*96/914400; - } - var a1 ,r2 ,tw,th,sw,sh,dx1,dy1,x1,y1, x2 , y2 ,rd45; - if(adj1 < 0) a1 = 0 - else if (adj1 > cnsVal2) a1 = cnsVal2 - else a1 = adj1 - r2 = Math.sqrt(2); - tw = r2*(w/2); - th = r2*(h/2); - sw = (tw*a1)/cnsVal1; - sh = (th*a1)/cnsVal1; - rd45 = (45*(Math.PI)/180); - dx1 = sw*(Math.cos(rd45)); - dy1 = sh*(Math.cos(rd45)); - x1 = (w/2) + dx1; - y1 = (h/2) - dy1; - x2 = ((w/2)+x1)/2; - y2 = ((h/2)+y1)/2; - - var d_val = shapeArc(w/2,h/2,w/2,h/2,180,270,false) + - "Q " + x2 + ",0 " + x1 + "," + y1 + - "Q " + w + "," + y2 + " " + w + "," + h/2 + - shapeArc(w/2,h/2,w/2,h/2,0,90,false).replace("M","L") + - shapeArc(w/2,h/2,w/2,h/2,90,180,false).replace("M","L") + " z"; - result += ""; - - // console.log("shapAdjst: ",shapAdjst,", adj1: ",adj1); - break; - case "plaque": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var adj1 = 16667*96/914400; - var cnsVal1 = 50000*96/914400; - var cnsVal2 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj1 = parseInt(shapAdjst.substr(4))*96/914400; - } - var a1 ,x1, x2 , y2; - if(adj1 < 0) a1 = 0 - else if (adj1 > cnsVal1) a1 = cnsVal1 - else a1 = adj1 - x1 = a1*(Math.min(w,h))/cnsVal2; - x2 = w-x1; - y2 = h-x1; - - var d_val = "M0," + x1 + - shapeArc(0,0,x1,x1,90,0,false).replace("M","L") + - " L" + x2 + "," + 0 + - shapeArc(w,0,x1,x1,180,90,false).replace("M","L") + - " L" + w + "," + y2 + - shapeArc(w,h,x1,x1,270,180,false).replace("M","L") + - " L" + x1 + "," + h + - shapeArc(0,h,x1,x1,0,-90,false).replace("M","L") + " z"; - result += ""; - - break; - case "sun": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var refr = 96/914400; - var adj1 = 25000*refr; - var cnstVal1 = 12500*refr; - var cnstVal2 = 46875*refr; - if(shapAdjst !== undefined){ - adj1 = parseInt(shapAdjst.substr(4))*refr; - } - var a1; - if(adj1 < cnstVal1) a1 = cnstVal1 - else if (adj1 > cnstVal2) a1 = cnstVal2 - else a1 = adj1 - - var cnstVa3 = 50000*refr; - var cnstVa4 = 100000*refr; - var g0 = cnstVa3 - a1, - g1 = g0*(30274*refr)/(32768*refr), - g2 = g0*(12540*refr)/(32768*refr), - g3 = g1+cnstVa3, - g4 = g2+cnstVa3, - g5 = cnstVa3-g1, - g6 = cnstVa3-g2, - g7 = g0*(23170*refr)/(32768*refr), - g8 = cnstVa3+g7, - g9 = cnstVa3-g7, - g10 = g5*3/4, - g11 = g6*3/4, - g12 = g10+3662*refr, - g13 = g11+36620*refr, - g14 = g11+12500*refr, - g15 = cnstVa4-g10, - g16 = cnstVa4-g12, - g17 = cnstVa4-g13, - g18 = cnstVa4-g14, - ox1 = w*(18436*refr)/(21600*refr), - oy1 = h*(3163*refr)/(21600*refr), - ox2 = w*(3163*refr)/(21600*refr), - oy2 = h*(18436*refr)/(21600*refr), - x8 = w*g8/cnstVa4, - x9 = w*g9/cnstVa4, - x10 = w*g10/cnstVa4, - x12 = w*g12/cnstVa4, - x13 = w*g13/cnstVa4, - x14 = w*g14/cnstVa4, - x15 = w*g15/cnstVa4, - x16 = w*g16/cnstVa4, - x17 = w*g17/cnstVa4, - x18 = w*g18/cnstVa4, - x19 = w*a1/cnstVa4, - wR = w*g0/cnstVa4, - hR = h*g0/cnstVa4, - y8 = h*g8/cnstVa4, - y9 = h*g9/cnstVa4, - y10 = h*g10/cnstVa4, - y12 = h*g12/cnstVa4, - y13 = h*g13/cnstVa4, - y14 = h*g14/cnstVa4, - y15 = h*g15/cnstVa4, - y16 = h*g16/cnstVa4, - y17 = h*g17/cnstVa4, - y18 = h*g18/cnstVa4; - - var d_val = "M"+w+"," + h/2 + - " L"+x15+","+y18+ - " L"+x15+","+y14+ - "z" + - " M"+ox1+","+oy1+ - " L"+x16+","+y17+ - " L"+x13+","+y12+ - "z" + - " M"+w/2+","+0+ - " L"+x18+","+y10+ - " L"+x14+","+y10+ - "z" + - " M"+ox2+","+oy1+ - " L"+x17+","+y12+ - " L"+x12+","+y17+ - "z" + - " M"+0+","+h/2+ - " L"+x10+","+y14+ - " L"+x10+","+y18+ - "z" + - " M"+ox2+","+oy2+ - " L"+x12+","+y13+ - " L"+x17+","+y16+ - "z" + - " M"+w/2+","+h+ - " L"+x14+","+y15+ - " L"+x18+","+y15+ - "z" + - " M"+ox1+","+oy2+ - " L"+x13+","+y16+ - " L"+x16+","+y13+ - " z" + - " M"+x19+","+h/2+ - shapeArc(w/2,h/2,wR,hR,180,540,false).replace("M","L") + - " z"; - //console.log("adj1: ",adj1,d_val); - result += ""; - - - break; - case "heart": - var dx1,dx2,x1, x2,x3,x4,y1; - dx1 = w*49/48; - dx2 = w*10/48 - x1 = w/2-dx1 - x2 = w/2-dx2 - x3 = w/2+dx2 - x4 = w/2+dx1 - y1 = -h/3; - var d_val = "M" + w/2 + "," + h/4 + - "C" + x3 + "," + y1 +" "+ x4 + "," + h/4 + " " + w/2 + "," + h + - "C" + x1 + "," + h/4 +" "+ x2 + "," + y1 + " " + w/2 + "," + h/4 + " z"; - - result += ""; - - break; - case "lightningBolt": - var x1 = w*5022/21600, - x2 = w*11050/21600, - x3 = w*8472/21600, - x4 = w*8757/21600, - x5 = w*10012/21600, - x6 = w*14767/21600, - x7 = w*12222/21600, - x8 = w*12860/21600, - x9 = w*13917/21600, - x10 = w*7602/21600, - x11 = w*16577/21600, - y1 = h*3890/21600, - y2 = h*6080/21600, - y3 = h*6797/21600, - y4 = h*7437/21600, - y5 = h*12877/21600, - y6 = h*9705/21600, - y7 = h*12007/21600, - y8 = h*13987/21600, - y9 = h*8382/21600, - y10 = h*14277/21600, - y11 = h*14915/21600; - - var d_val = "M" + x3 + "," + 0 + - " L" + x8 + "," + y2 + - " L" + x2 + "," + y3 + - " L" + x11 + "," + y7 + - " L" + x6 + "," + y5 + - " L" + w + "," + h + - " L" + x5 + "," + y11 + - " L" + x7 + "," + y8 + - " L" + x1 + "," + y6 + - " L" + x10 + "," + y9 + - " L" + 0 + "," + y1 + " z"; - - result += ""; - - break; - case "cube": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var refr = 96/914400; - var adj = 25000*refr; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*refr; - } - var d_val; - var cnstVal2 = 100000*refr; - var ss = Math.min(w,h); - var a, y1, y4, x4; - a = (adj<0)?0:(adj>cnstVal2)?cnstVal2:adj; - y1 = ss*a/cnstVal2; - y4 = h-y1; - x4 = w-y1; - d_val = "M" + 0 + "," + y1 + - " L" + y1 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + y4 + - " L" + x4 + "," + h + - " L" + 0 + "," + h + - " z" + - "M" + 0 + "," + y1 + - " L" + x4 + "," + y1 + - " M" + x4 + "," + y1 + - " L" + w + "," + 0 + - "M" + x4 + "," + y1 + - " L" + x4 + "," + h; - - result += ""; - - break; - case "bevel": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var refr = 96/914400; - var adj = 12500*refr; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*refr; - } - var d_val; - var cnstVal1 = 50000*refr; - var cnstVal2 = 100000*refr; - var ss = Math.min(w,h); - var a, x1, x2, y2; - a = (adj<0)?0:(adj>cnstVal1)?cnstVal1:adj; - x1 = ss*a/cnstVal2; - x2 = w-x1; - y2 = h-x1; - d_val = "M" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + h + - " L" + 0 + "," + h + - " z" + - " M" + x1 + "," + x1 + - " L" + x2 + "," + x1 + - " L" + x2 + "," + y2 + - " L" + x1 + "," + y2 + - " z" + - " M" + 0 + "," + 0 + - " L" + x1 + "," + x1 + - " M" + 0 + "," + h + - " L" + x1 + "," + y2 + - " M" + w + "," + 0 + - " L" + x2 + "," + x1 + - " M" + w + "," + h + - " L" + x2 + "," + y2; - - result += ""; - - break; - case "foldedCorner": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var refr = 96/914400; - var adj = 16667*refr; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*refr; - } - var d_val; - var cnstVal1 = 50000*refr; - var cnstVal2 = 100000*refr; - var ss = Math.min(w,h); - var a, dy2, dy1, x1, x2, y2, y1; - a = (adj<0)?0:(adj>cnstVal1)?cnstVal1:adj; - dy2 = ss*a/cnstVal2; - dy1 = dy2/5; - x1 = w-dy2; - x2 = x1+dy1; - y2 = h-dy2; - y1 = y2+dy1; - d_val = "M" + x1 + "," + h + - " L" + x2 + "," + y1 + - " L" + w + "," + y2 + - " L" + x1 + "," + h + - " L" + 0 + "," + h + - " L" + 0 + "," + 0 + - " L" + w + "," + 0 + - " L" + w + "," + y2; - - result += ""; - - break; - case "cloud": - case "cloudCallout": - var x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11, - rx1,rx2,rx3,rx4,rx5,rx6,rx7,rx8,rx9,rx10,rx11,ry1,ry2,ry3,ry4,ry5,ry6,ry7,ry8,ry9,ry10,ry11; - x0 = w*3900/43200;; - x1 = w*4693/43200; - x2 = w*6928/43200; - x3 = w*16478/43200; - x4 = w*28827/43200; - x5 = w*34129/43200; - x6 = w*41798/43200; - x7 = w*38324/43200; - x8 = w*29078/43200; - x9 = w*22141/43200; - x10 = w*14000/43200; - x11 = w*4127/43200; - y0 = h*14370/43200; - y1 = h*26177/43200; - y2 = h*34899/43200; - y3 = h*39090/43200; - y4 = h*34751/43200; - y5 = h*22954/43200; - y6 = h*15354/43200; - y7 = h*5426/43200; - y8 = h*3952/43200; - y9 = h*4720/43200; - y10 = h*5192/43200; - y11 = h*15789/43200; - //Path: - //(path attrs: w = 43200; h = 43200; ) - var rX1 = w*6753/43200, rY1 = h*9190/43200,rX2 = w*5333/43200, rY2 = h*7267/43200,rX3 = w*4365/43200, - rY3 = h*5945/43200,rX4 = w*4857/43200, rY4 = h*6595/43200, rY5 = h*7273/43200,rX6 = w*6775/43200, - rY6 = h*9220/43200,rX7 = w*5785/43200, rY7 = h*7867/43200,rX8 = w*6752/43200, rY8 = h*9215/43200, - rX9 = w*7720/43200, rY9 = h*10543/43200,rX10 = w*4360/43200, rY10 = h*5918/43200,rX11 = w*4345/43200; - var sA1 = -11429249/60000, wA1 = 7426832/60000,sA2 = -8646143/60000, wA2 = 5396714/60000,sA3 = -8748475/60000, - wA3 = 5983381/60000,sA4 = -7859164/60000, wA4 = 7034504/60000,sA5 = -4722533/60000, wA5 = 6541615/60000, - sA6 = -2776035/60000, wA6 = 7816140/60000,sA7 = 37501/60000, wA7 = 6842000/60000,sA8 = 1347096/60000, - wA8 = 6910353/60000,sA9 = 3974558/60000, wA9 = 4542661/60000,sA10 = -16496525/60000, wA10 = 8804134/60000, - sA11 = -14809710/60000, wA11 = 9151131/60000; - - var cX0,cX1,cX2,cX3,cX4,cX5,cX6,cX7,cX8,cX9,cX10,cY0,cY1,cY2,cY3,cY4,cY5,cY6,cY7,cY8,cY9,cY10; - var arc1,arc2,arc3,arc4,arc5,arc6,arc7,arc8,arc9,arc10,arc11; - var lxy1,lxy2,lxy3,lxy4,lxy5,lxy6,lxy7,lxy8,lxy9,lxy10; - - cX0 = x0 - rX1*Math.cos(sA1*Math.PI/180); - cY0 = y0 - rY1*Math.sin(sA1*Math.PI/180); - arc1 = shapeArc(cX0,cY0,rX1,rY1,sA1,sA1+wA1,false).replace("M","L"); - lxy1 = arc1.substr(arc1.lastIndexOf("L")+1).split(" "); - cX1 = parseInt(lxy1[0]) - rX2*Math.cos(sA2*Math.PI/180); - cY1 = parseInt(lxy1[1]) - rY2*Math.sin(sA2*Math.PI/180); - arc2 = shapeArc(cX1,cY1,rX2,rY2,sA2,sA2+wA2,false).replace("M","L"); - lxy2 = arc2.substr(arc2.lastIndexOf("L")+1).split(" "); - cX2 = parseInt(lxy2[0]) - rX3*Math.cos(sA3*Math.PI/180); - cY2 = parseInt(lxy2[1]) - rY3*Math.sin(sA3*Math.PI/180); - arc3 = shapeArc(cX2,cY2,rX3,rY3,sA3,sA3+wA3,false).replace("M","L"); - lxy3 = arc3.substr(arc3.lastIndexOf("L")+1).split(" "); - cX3 = parseInt(lxy3[0]) - rX4*Math.cos(sA4*Math.PI/180); - cY3 = parseInt(lxy3[1]) - rY4*Math.sin(sA4*Math.PI/180); - arc4 = shapeArc(cX3,cY3,rX4,rY4,sA4,sA4+wA4,false).replace("M","L"); - lxy4 = arc4.substr(arc4.lastIndexOf("L")+1).split(" "); - cX4 = parseInt(lxy4[0]) - rX2*Math.cos(sA5*Math.PI/180); - cY4 = parseInt(lxy4[1]) - rY5*Math.sin(sA5*Math.PI/180); - arc5 = shapeArc(cX4,cY4,rX2,rY5,sA5,sA5+wA5,false).replace("M","L"); - lxy5 = arc5.substr(arc5.lastIndexOf("L")+1).split(" "); - cX5 = parseInt(lxy5[0]) - rX6*Math.cos(sA6*Math.PI/180); - cY5 = parseInt(lxy5[1]) - rY6*Math.sin(sA6*Math.PI/180); - arc6 = shapeArc(cX5,cY5,rX6,rY6,sA6,sA6+wA6,false).replace("M","L"); - lxy6 = arc6.substr(arc6.lastIndexOf("L")+1).split(" "); - cX6 = parseInt(lxy6[0]) - rX7*Math.cos(sA7*Math.PI/180); - cY6 = parseInt(lxy6[1]) - rY7*Math.sin(sA7*Math.PI/180); - arc7 = shapeArc(cX6,cY6,rX7,rY7,sA7,sA7+wA7,false).replace("M","L"); - lxy7 = arc7.substr(arc7.lastIndexOf("L")+1).split(" "); - cX7 = parseInt(lxy7[0]) - rX8*Math.cos(sA8*Math.PI/180); - cY7 = parseInt(lxy7[1]) - rY8*Math.sin(sA8*Math.PI/180); - arc8 = shapeArc(cX7,cY7,rX8,rY8,sA8,sA8+wA8,false).replace("M","L"); - lxy8 = arc8.substr(arc8.lastIndexOf("L")+1).split(" "); - cX8 = parseInt(lxy8[0]) - rX9*Math.cos(sA9*Math.PI/180); - cY8 = parseInt(lxy8[1]) - rY9*Math.sin(sA9*Math.PI/180); - arc9 = shapeArc(cX8,cY8,rX9,rY9,sA9,sA9+wA9,false).replace("M","L"); - lxy9 = arc9.substr(arc9.lastIndexOf("L")+1).split(" "); - cX9 = parseInt(lxy9[0]) - rX10*Math.cos(sA10*Math.PI/180); - cY9 = parseInt(lxy9[1]) - rY10*Math.sin(sA10*Math.PI/180); - arc10 = shapeArc(cX9,cY9,rX10,rY10,sA10,sA10+wA10,false).replace("M","L"); - lxy10 = arc10.substr(arc10.lastIndexOf("L")+1).split(" "); - cX10 = parseInt(lxy10[0]) - rX11*Math.cos(sA11*Math.PI/180); - cY10 = parseInt(lxy10[1]) - rY3*Math.sin(sA11*Math.PI/180); - arc11 = shapeArc(cX10,cY10,rX11,rY3,sA11,sA11+wA11,false).replace("M","L"); - - var d1 = "M" + x0 + "," + y0 + - arc1 + - arc2 + - arc3 + - arc4 + - arc5 + - arc6 + - arc7 + - arc8 + - arc9 + - arc10 + - arc11 + - " z"; - if(shapType == "cloudCallout"){ - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var refr = 96/914400; - var sAdj1,adj1= -20833*refr; - var sAdj2,adj2 = 62500*refr; - if(shapAdjst_ary !== undefined){ - for(var i=0; i= 0){ - g4 = wd2+g2; - g5 = hd2+g3; - }else{ - g4 = wd2-g2; - g5 = hd2-g3; - } - g6 = g4-xPos; - g7 = g5-yPos; - g8 = Math.sqrt(g6*g6 + g7*g7); - g9 = ss*6600/21600; - g10 = g8-g9; - g11 = g10/3; - g12 = ss*1800/21600; - g13 = g11+g12; - g14 = g13*g6/g8; - g15 = g13*g7/g8; - g16 = g14+xPos; - g17 = g15+yPos; - g18 = ss*4800/21600; - g19 = g11*2; - g20 = g18+g19; - g21 = g20*g6/g8; - g22 = g20*g7/g8; - g23 = g21+xPos; - g24 = g22+yPos; - g25 = ss*1200/21600; - g26 = ss*600/21600; - x23 = xPos+g26; - x24 = g16+g25; - x25 = g23+g12; - - d_val = //" M" + x23 + "," + yPos + - shapeArc(x23-g26,yPos,g26,g26,0,360,false) + //.replace("M","L") + - " z" + - " M" + x24 + "," + g17 + - shapeArc(x24-g25,g17,g25,g25,0,360,false).replace("M","L") + - " z" + - " M" + x25 + "," + g24 + - shapeArc(x25-g12,g24,g12,g12,0,360,false).replace("M","L") + - " z"; - d1 += d_val; - } - result += ""; - - break; - case "smileyFace": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var refr = 96/914400; - var adj = 4653*refr; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*refr; - } - var d_val; - var cnstVal1 = 50000*refr; - var cnstVal2 = 100000*refr; - var cnstVal3 = 4653*refr; - var ss = Math.min(w,h); - var a, x1, x2, x3, x4, y1, y3, dy2, y2, y4, dy3, y5, wR, hR, wd2, hd2; - wd2 = w/2; - hd2 = h/2; - a = (adj<-cnstVal3)?-cnstVal3:(adj>cnstVal3)?cnstVal3:adj; - x1 = w*4969/21699; - x2 = w*6215/21600; - x3 = w*13135/21600; - x4 = w*16640/21600; - y1 = h*7570/21600; - y3 = h*16515/21600; - dy2 = h*a/cnstVal2; - y2 = y3-dy2; - y4 = y3+dy2; - dy3 = h*a/cnstVal1; - y5 = y4+dy3; - wR = w*1125/21600; - hR = h*1125/21600; - var cX1 = x2 - wR*Math.cos(Math.PI); - var cY1 = y1 - hR*Math.sin(Math.PI); - var cX2 = x3 - wR*Math.cos(Math.PI); - d_val = //eyes - shapeArc(cX1,cY1,wR,hR,180,540,false) + - shapeArc(cX2,cY1,wR,hR,180,540,false) + - //mouth - " M" + x1 + "," + y2 + - " Q" + wd2 + "," + y5 + " " + x4 + "," + y2 + - " Q" + wd2 + "," + y5 + " " + x1 + "," + y2 + - //head - " M" + 0 + "," + hd2 + - shapeArc(wd2,hd2,wd2,hd2,180,540,false).replace("M","L") + - " z"; - result += ""; - - break; - case "verticalScroll": - case "horizontalScroll": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); - var refr = 96/914400; - var adj = 12500*refr; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*refr; - } - var d_val; - var cnstVal1 = 25000*refr; - var cnstVal2 = 100000*refr; - var ss = Math.min(w,h); - var t=0,l=0,b=h,r=w; - var a, ch, ch2, ch4; - a = (adj<0)?0:(adj>cnstVal1)?cnstVal1:adj; - ch = ss*a/cnstVal2; - ch2 = ch/2; - ch4 = ch/4; - if(shapType == "verticalScroll"){ - var x3, x4, x6, x7, x5, y3, y4; - x3 = ch+ch2; - x4 = ch+ch; - x6 = r-ch; - x7 = r-ch2; - x5 = x6-ch2; - y3 = b-ch; - y4 = b-ch2; - - d_val = "M" + ch + "," + y3 + - " L" + ch + "," + ch2 + - shapeArc(x3,ch2,ch2,ch2,180,270,false).replace("M","L") + - " L" + x7 + "," + t + - shapeArc(x7,ch2,ch2,ch2,270,450,false).replace("M","L") + - " L" + x6 + "," + ch + - " L" + x6 + "," + y4 + - shapeArc(x5,y4,ch2,ch2,0,90,false).replace("M","L") + - " L" + ch2 + "," + b + - shapeArc(ch2,y4,ch2,ch2,90,270,false).replace("M","L") + - " z" + - " M" + x3 + "," + t + - shapeArc(x3,ch2,ch2,ch2,270,450,false).replace("M","L") + - shapeArc(x3,x3/2,ch4,ch4,90,270,false).replace("M","L") + - " L" + x4 + "," + ch2 + - " M" + x6 + "," + ch + - " L" + x3 + "," + ch + - " M" + ch + "," + y4 + - shapeArc(ch2,y4,ch2,ch2,0,270,false).replace("M","L") + - shapeArc(ch2,(y4+y3)/2,ch4,ch4,270,450,false).replace("M","L") + - " z"+ - " M" + ch + "," + y4 + - " L" + ch + "," + y3; - }else if(shapType == "horizontalScroll"){ - var y3, y4, y6, y7, y5, x3, x4; - y3 = ch+ch2; - y4 = ch+ch; - y6 = b-ch; - y7 = b-ch2; - y5 = y6-ch2; - x3 = r-ch; - x4 = r-ch2; - - d_val = "M" + l + "," + y3 + - shapeArc(ch2,y3,ch2,ch2,180,270,false).replace("M","L") + - " L" + x3 + "," + ch + - " L" + x3 + "," + ch2 + - shapeArc(x4,ch2,ch2,ch2,180,360,false).replace("M","L") + - " L" + r + "," + y5 + - shapeArc(x4,y5,ch2,ch2,0,90,false).replace("M","L") + - " L" + ch + "," + y6 + - " L" + ch + "," + y7 + - shapeArc(ch2,y7,ch2,ch2,0,180,false).replace("M","L") + - " z" + - "M" + x4 + "," + ch + - shapeArc(x4,ch2,ch2,ch2,90,-180,false).replace("M","L") + - shapeArc((x3+x4)/2,ch2,ch4,ch4,180,0,false).replace("M","L") + - " z" + - " M" + x4 + "," + ch + - " L" + x3 + "," + ch + - " M" + ch2 + "," + y4 + - " L" + ch2 + "," + y3 + - shapeArc(y3/2,y3,ch4,ch4,180,360,false).replace("M","L") + - shapeArc(ch2,y3,ch2,ch2,0,180,false).replace("M","L") + - " M" + ch + "," + y3 + - " L" + ch + "," + y6; - } - - result += ""; - - break; - case "wedgeEllipseCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var refr = 96/914400; - var sAdj1,adj1= -20833*refr; - var sAdj2,adj2 = 62500*refr; - if(shapAdjst_ary !== undefined){ - for(var i=0; i= 0 ){ - x1 = hc+dx1; - y1 = vc+dy1; - x2 = hc+dx2; - y2 = vc+dy2; - }else{ - x1 = hc-dx1; - y1 = vc-dy1; - x2 = hc-dx2; - y2 = vc-dy2; - } - /* - //stAng = pang+angVal1; - //enAng = pang-angVal1; - //dx1 = hc*Math.cos(stAng); - //dy1 = vc*Math.sin(stAng); - x1 = hc+dx1; - y1 = vc+dy1; - dx2 = hc*Math.cos(enAng); - dy2 = vc*Math.sin(enAng); - x2 = hc+dx2; - y2 = vc+dy2; - stAng1 = Math.atan(dy1/dx1); - enAng1 = Math.atan(dy2/dx2); - swAng1 = enAng1-stAng1; - swAng2 = swAng1+2*Math.PI; - swAng = (swAng1 > 0)?swAng1:swAng2; - var stAng1Dg = stAng1*180/Math.PI; - var swAngDg = swAng*180/Math.PI; - var endAng = stAng1Dg + swAngDg; - */ - d_val = "M" + x1 + "," + y1 + - " L" + xPos + "," + yPos + - " L" + x2 + "," + y2 + - //" z" + - shapeArc(hc,vc,hc,vc,0,360,true);// + - //shapeArc(hc,vc,hc,vc,stAng1Dg,stAng1Dg+swAngDg,false).replace("M","L") + - //" z"; - result += ""; - - break; - case "wedgeRectCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var refr = 96/914400; - var sAdj1,adj1= -20833*refr; - var sAdj2,adj2 = 62500*refr; - if(shapAdjst_ary !== undefined){ - for(var i=0; i 0)?7:2; - xg2 = (dxPos > 0)?10:5; - x1 = w*xg1/12; - x2 = w*xg2/12; - yg1 = (dyPos > 0)?7:2; - yg2 = (dyPos > 0)?10:5; - y1 = h*yg1/12; - y2 = h*yg2/12; - t1 = (dxPos > 0)?0:xPos; - xl = (dz > 0)?0:t1; - t2 = (dyPos > 0)?x1:xPos; - xt = (dz > 0)?t2:x1; - t3 = (dxPos > 0)?xPos:w; - xr = (dz > 0)?w:t3; - t4 = (dyPos > 0)?xPos:x1; - xb = (dz > 0)?t4:x1; - t5 = (dxPos > 0)?y1:yPos; - yl = (dz > 0)?y1:t5; - t6 = (dyPos > 0)?0:yPos; - yt = (dz > 0)?t6:0; - t7 = (dxPos > 0)?yPos:y1; - yr = (dz > 0)?y1:t7; - t8 = (dyPos > 0)?yPos:h; - yb = (dz > 0)?t8:h; - - d_val = "M" + 0 + "," +0 + - " L" + x1 + "," +0 + - " L" + xt + "," +yt + - " L" + x2 + "," +0 + - " L" + w + "," +0 + - " L" + w + "," +y1 + - " L" + xr + "," +yr + - " L" + w + "," +y2 + - " L" + w + "," +h + - " L" + x2 + "," +h + - " L" + xb + "," +yb + - " L" + x1 + "," +h + - " L" + 0 + "," +h + - " L" + 0 + "," +y2 + - " L" + xl + "," +yl + - " L" + 0 + "," +y1 + - " z"; - - result += ""; - - break; - case "wedgeRoundRectCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var refr = 96/914400; - var sAdj1,adj1= -20833*refr; - var sAdj2,adj2 = 62500*refr; - var sAdj3,adj3 = 16667*refr; - if(shapAdjst_ary !== undefined){ - for(var i=0; i 0)?7:2; - xg2 = (dxPos > 0)?10:5; - x1 = w*xg1/12; - x2 = w*xg2/12; - yg1 = (dyPos > 0)?7:2; - yg2 = (dyPos > 0)?10:5; - y1 = h*yg1/12; - y2 = h*yg2/12; - t1 = (dxPos > 0)?0:xPos; - xl = (dz > 0)?0:t1; - t2 = (dyPos > 0)?x1:xPos; - xt = (dz > 0)?t2:x1; - t3 = (dxPos > 0)?xPos:w; - xr = (dz > 0)?w:t3; - t4 = (dyPos > 0)?xPos:x1; - xb = (dz > 0)?t4:x1; - t5 = (dxPos > 0)?y1:yPos; - yl = (dz > 0)?y1:t5; - t6 = (dyPos > 0)?0:yPos; - yt = (dz > 0)?t6:0; - t7 = (dxPos > 0)?yPos:y1; - yr = (dz > 0)?y1:t7; - t8 = (dyPos > 0)?yPos:h; - yb = (dz > 0)?t8:h; - u1 = ss*adj3/cnstVal1; - u2 = w-u1; - v2 = h-u1; - d_val = "M" + 0 + "," + u1 + - shapeArc(u1,u1,u1,u1,180,270,false).replace("M","L") + - " L" + x1 + "," + 0 + - " L" + xt + "," + yt + - " L" + x2 + "," + 0 + - " L" + u2 + "," + 0 + - shapeArc(u2,u1,u1,u1,270,360,false).replace("M","L") + - " L" + w + "," + y1 + - " L" + xr + "," + yr + - " L" + w + "," + y2 + - " L" + w + "," + v2 + - shapeArc(u2,v2,u1,u1,0,90,false).replace("M","L") + - " L" + x2 + "," + h + - " L" + xb + "," + yb + - " L" + x1 + "," + h + - " L" + u1 + "," + h + - shapeArc(u1,v2,u1,u1,90,180,false).replace("M","L") + - " L" + 0 + "," + y2 + - " L" + xl + "," + yl + - " L" + 0 + "," + y1 + - " z"; - result += ""; - - break; - case "accentBorderCallout1": - case "accentBorderCallout2": - case "accentBorderCallout3": - case "borderCallout1": - case "borderCallout2": - case "borderCallout3": - case "accentCallout1": - case "accentCallout2": - case "accentCallout3": - case "callout1": - case "callout2": - case "callout3": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var refr = 96/914400; - var sAdj1,adj1= 18750*refr; - var sAdj2,adj2 = -8333*refr; - var sAdj3,adj3 = 18750*refr; - var sAdj4,adj4= -16667*refr; - var sAdj5,adj5 = 100000*refr; - var sAdj6,adj6 = -16667*refr; - var sAdj7,adj7 = 112963*refr; - var sAdj8,adj8 = -8333*refr; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - - //}else{ - // result += ""; - - //} - break; - case "leftRightRibbon": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var refr = 96/914400; - var sAdj1,adj1= 50000*refr; - var sAdj2,adj2 = 50000*refr; - var sAdj3,adj3 = 16667*refr; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal1)?cnstVal1:adj3; - maxAdj1 = cnstVal2-a3; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - w1 = hc-wd32; - maxAdj2 = cnstVal2*w1/ss; - a2 = (adj2<0)?0:(adj2>maxAdj2)?maxAdj2:adj2; - x1 = ss*a2/cnstVal2; - x4 = w-x1; - dy1 = h*a1/cnstVal3; - dy2 = h*a3/-cnstVal3; - ly1 = vc+dy2-dy1; - ry4 = vc+dy1-dy2; - ly2 = ly1+dy1; - ry3 = h-ly2; - ly4 = ly2*2; - ry1 = h-ly4; - ly3 = ly4-ly1; - ry2 = h-ly3; - hR = a3*ss/cnstVal4; - x2 = hc-wd32; - x3 = hc+wd32; - y1 = ly1+hR; - y2 = ry2-hR; - - d_val = "M" + 0 + "," + ly2 + - "L" + x1 + "," + 0 + - "L" + x1 + "," + ly1 + - "L" + hc + "," + ly1 + - shapeArc(hc,y1,wd32,hR,270,450,false).replace("M","L") + - shapeArc(hc,y2,wd32,hR,270,90,false).replace("M","L") + - "L" + x4 + "," + ry2 + - "L" + x4 + "," + ry1 + - "L" + w + "," + ry3 + - "L" + x4 + "," + h + - "L" + x4 + "," + ry4 + - "L" + hc + "," + ry4 + - shapeArc(hc,ry4-hR,wd32,hR,90,180,false).replace("M","L") + - "L" + x2 + "," + ly3 + - "L" + x1 + "," + ly3 + - "L" + x1 + "," + ly4 + - " z" + - "M" + x3 + "," + y1 + - "L" + x3 + "," + ry2 + - "M" + x2 + "," + y2 + - "L" + x2 + "," + ly3; - - result += ""; - - break; - case "ribbon": - case "ribbon2": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1= 16667*96/914400; - var sAdj2,adj2 = 50000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal2)?cnstVal2:adj1; - a2 = (adj2cnstVal3)?cnstVal3:adj2; - x10 = r-wd8; - dx2 = w*a2/cnstVal5; - x2 = hc-dx2; - x9 = hc+dx2; - x3 = x2+wd32; - x8 = x9-wd32; - x5 = x2+wd8; - x6 = x9-wd8; - x4 = x5-wd32; - x7 = x6+wd32; - hR = h*a1/cnstVal6; - if(shapType == "ribbon2"){ - var dy1, dy2, y7; - dy1 = h*a1/cnstVal5; - y1 = b-dy1; - dy2 = h*a1/cnstVal4; - y2 = b-dy2; - y4 = t+dy2; - y3 = (y4+b)/2; - y6 = b-hR;/////////////////// - y7 = y1-hR; - - d_val = "M" + l + "," + b + - " L" + wd8 + "," + y3 + - " L" + l + "," + y4 + - " L" + x2 + "," + y4 + - " L" + x2 + "," + hR + - shapeArc(x3,hR,wd32,hR,180,270,false).replace("M","L") + - " L" + x8 + "," + t + - shapeArc(x8,hR,wd32,hR,270,360,false).replace("M","L") + - " L" + x9 + "," + y4 + - " L" + x9 + "," + y4 + - " L" + r + "," + y4 + - " L" + x10 + "," + y3 + - " L" + r + "," + b + - " L" + x7 + "," + b + - shapeArc(x7,y6,wd32,hR,90,270,false).replace("M","L") + - " L" + x8 + "," + y1 + - shapeArc(x8,y7,wd32,hR,90,-90,false).replace("M","L") + - " L" + x3 + "," + y2 + - shapeArc(x3,y7,wd32,hR,270,90,false).replace("M","L") + - " L" + x4 + "," + y1 + - shapeArc(x4,y6,wd32,hR,270,450,false).replace("M","L") + - " z" + - " M" + x5 + "," + y2 + - " L" + x5 + "," + y6 + - "M" + x6 + "," + y6 + - " L" + x6 + "," + y2 + - "M" + x2 + "," + y7 + - " L" + x2 + "," + y4 + - "M" + x9 + "," + y4 + - " L" + x9 + "," + y7; - }else if(shapType == "ribbon"){ - var y5; - y1 = h*a1/cnstVal5; - y2 = h*a1/cnstVal4; - y4 = b-y2; - y3 = y4/2; - y5 = b-hR; /////////////////////// - y6 = y2-hR; - d_val = "M" + l + "," + t + - " L" + x4 + "," + t + - shapeArc(x4,hR,wd32,hR,270,450,false).replace("M","L") + - " L" + x3 + "," + y1 + - shapeArc(x3,y6,wd32,hR,270,90,false).replace("M","L") + - " L" + x8 + "," + y2 + - shapeArc(x8,y6,wd32,hR,90,-90,false).replace("M","L") + - " L" + x7 + "," + y1 + - shapeArc(x7,hR,wd32,hR,90,270,false).replace("M","L") + - " L" + r + "," + t + - " L" + x10 + "," + y3 + - " L" + r + "," + y4 + - " L" + x9 + "," + y4 + - " L" + x9 + "," + y5 + - shapeArc(x8,y5,wd32,hR,0,90,false).replace("M","L") + - " L" + x3 + "," + b + - shapeArc(x3,y5,wd32,hR,90,180,false).replace("M","L") + - " L" + x2 + "," + y4 + - " L" + l + "," + y4 + - " L" + wd8 + "," + y3 + - " z" + - " M" + x5 + "," + hR + - " L" + x5 + "," + y2 + - "M" + x6 + "," + y2 + - " L" + x6 + "," + hR + - "M" + x2 + "," + y4 + - " L" + x2 + "," + y6 + - "M" + x9 + "," + y6 + - " L" + x9 + "," + y4; - } - result += ""; - - break; - case "doubleWave": - case "wave": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1, adj1 = (shapType == "doubleWave")?6250*96/914400:12500*96/914400; - var sAdj2,adj2 = 0; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal1)?cnstVal1:adj1; - a2 = (adj2cnstVal4)?cnstVal4:adj2; - y1 = h*a1/cnstVal4; - dy2 = y1*10/3; - y2 = y1-dy2; - y3 = y1+dy2; - y4 = b-y1; - y5 = y4-dy2; - y6 = y4+dy2; - of2 = w*a2/cnstVal3; - dx2 = (of2 > 0)?0:of2; - x2 = l-dx2; - dx8 = (of2 > 0)?of2:0; - x8 = r-dx8; - dx3 = (dx2+x8)/6; - x3 = x2+dx3; - dx4 = (dx2+x8)/3; - x4 = x2+dx4; - x5 = (x2+x8)/2; - x6 = x5+dx3; - x7 = (x6+x8)/2; - x9 = l+dx8; - x15 = r+dx2; - x10 = x9+dx3; - x11 = x9+dx4; - x12 = (x9+x15)/2; - x13 = x12+dx3; - x14 = (x13+x15)/2; - - d_val = "M" + x2 + "," + y1 + - " C" + x3 + "," + y2 + " "+ x4 + "," + y3 + " "+ x5 + "," + y1 + - " C" + x6 + "," + y2 + " "+ x7 + "," + y3 + " "+ x8 + "," + y1 + - " L" + x15 + "," + y4 + - " C" + x14 + "," + y6 + " "+x13 + "," + y5 + " "+x12 + "," + y4 + - " C" + x11 + "," + y6 + " "+x10 + "," + y5 + " "+x9 + "," + y4 + - " z"; - }else if(shapType == "wave"){ - var cnstVal5 = 20000*96/914400; - var a1, a2, y1, dy2, y2, y3, y4, y5, y6, of2, dx2, x2, dx5, x5, dx3, x3, x4, x6, x10, x7, x8; - a1 = (adj1<0)?0:(adj1>cnstVal5)?cnstVal5:adj1; - a2 = (adj2cnstVal4)?cnstVal4:adj2; - y1 = h*a1/cnstVal4; - dy2 = y1*10/3; - y2 = y1-dy2; - y3 = y1+dy2; - y4 = b-y1; - y5 = y4-dy2; - y6 = y4+dy2; - of2 = w*a2/cnstVal3; - dx2 = (of2 > 0)?0:of2; - x2 = l-dx2; - dx5 = (of2 > 0)?of2:0; - x5 = r-dx5; - dx3 = (dx2+x5)/3; - x3 = x2+dx3; - x4 = (x3+x5)/2; - x6 = l+dx5; - x10 = r+dx2; - x7 = x6+dx3; - x8 = (x7+x10)/2; - - d_val = "M" + x2 + "," + y1 + - " C" + x3 + "," + y2 + " "+ x4 + "," + y3 + " "+ x5 + "," + y1 + - " L" + x10 + "," + y4 + - " C" + x8 + "," + y6 + " "+ x7 + "," + y5 + " "+ x6 + "," + y4 + - " z"; - } - result += ""; - - break; - case "ellipseRibbon": - case "ellipseRibbon2": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1= 25000*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var sAdj3,adj3 = 12500*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal4)?cnstVal4:adj1; - a2 = (adj2cnstVal3)?cnstVal3:adj2; - q10 = cnstVal4-a1; - q11 = q10/2; - q12 = a1-q11; - minAdj3 = (0>q12)?0:q12; - a3 = (adj3a1)?a1:adj3; - dx2 = w*a2/cnstVal5; - x2 = hc-dx2; - x3 = x2+wd8; - x4 = r-x3; - x5 = r-x2; - x6 = r-wd8; - dy1 = h*a3/cnstVal4; - f1 = 4*dy1/w; - q1 = x3*x3/w; - q2 = x3-q1; - cx1 = x3/2; - cx2 = r-cx1; - q1 = h*a1/cnstVal4; - dy3 = q1-dy1; - q3 = x2*x2/w; - q4 = x2-q3; - q5 = f1*q4; - rh = b-q1; - q8 = dy1*14/16; - cx4 = x2/2; - q9 = f1*cx4; - cx5 = r-cx4; - if(shapType == "ellipseRibbon"){ - var y1, cy1, y3, q6, q7, cy3, y2, y5, y6, - cy4, cy6, y7, cy7, y8; - y1 = f1*q2; - cy1 = f1*cx1; - y3 = q5+dy3; - q6 = dy1+dy3-y3; - q7 = q6+dy1; - cy3 = q7+dy3; - y2 = (q8+rh)/2; - y5 = q5+rh; - y6 = y3+rh; - cy4 = q9+rh; - cy6 = cy3+rh; - y7 = y1+dy3; - cy7 = q1+q1-y7; - y8 = b-dy1; - // - d_val = "M" + l + "," + t + - " Q" + cx1 + "," + cy1 + " " + x3 + "," + y1 + - " L" + x2 + "," + y3 + - " Q" + hc + "," + cy3 + " " + x5 + "," + y3 + - " L" + x4 + "," + y1 + - " Q" + cx2 + "," + cy1 + " " + r + "," + t + - " L" + x6 + "," + y2 + - " L" + r + "," + rh + - " Q" + cx5 + "," + cy4 + " " + x5 + "," + y5 + - " L" + x5 + "," + y6 + - " Q" + hc + "," + cy6 + " " + x2 + "," + y6 + - " L" + x2 + "," + y5 + - " Q" + cx4 + "," + cy4 + " " + l + "," + rh + - " L" + wd8 + "," + y2 + - " z" + - "M" + x2 + "," + y5 + - " L" + x2 + "," + y3 + - "M" + x5 + "," + y3 + - " L" + x5 + "," + y5 + - "M" + x3 + "," + y1 + - " L" + x3 + "," + y7 + - "M" + x4 + "," + y7 + - " L" + x4 + "," + y1; - }else if(shapType == "ellipseRibbon2"){ - var u1, y1, cu1, cy1, q3, q5, u3, y3, q6, q7, cu3, cy3, rh, q8, u2, y2, - u5, y5, u6, y6, cu4, cy4, cu6, cy6, u7, y7, cu7, cy7; - u1 = f1*q2; - y1 = b-u1; - cu1 = f1*cx1; - cy1 = b-cu1; - u3 = q5+dy3; - y3 = b-u3; - q6 = dy1+dy3-u3; - q7 = q6+dy1; - cu3 = q7+dy3; - cy3 = b-cu3; - u2 = (q8+rh)/2; - y2 = b-u2; - u5 = q5+rh; - y5 = b-u5; - u6 = u3+rh; - y6 = b-u6; - cu4 = q9+rh; - cy4 = b-cu4; - cu6 = cu3+rh; - cy6 = b-cu6; - u7 = u1+dy3; - y7 = b-u7; - cu7 = q1+q1-u7; - cy7 = b-cu7; - // - d_val = "M" + l + "," + b + - " L" + wd8 + "," + y2 + - " L" + l + "," + q1 + - " Q" + cx4 + "," + cy4 + " " + x2 + "," + y5 + - " L" + x2 + "," + y6 + - " Q" + hc + "," + cy6 + " " + x5 + "," + y6 + - " L" + x5 + "," + y5 + - " Q" + cx5 + "," + cy4 + " " + r + "," + q1 + - " L" + x6 + "," + y2 + - " L" + r + "," + b + - " Q" + cx2 + "," + cy1 + " " + x4 + "," + y1 + - " L" + x5 + "," + y3 + - " Q" + hc + "," + cy3 + " " + x2 + "," + y3 + - " L" + x3 + "," + y1 + - " Q" + cx1 + "," + cy1 + " " + l + "," + b + - " z" + - "M" + x2 + "," + y3 + - " L" + x2 + "," + y5 + - "M" + x5 + "," + y5 + - " L" + x5 + "," + y3 + - "M" + x3 + "," + y7 + - " L" + x3 + "," + y1 + - "M" + x4 + "," + y1 + - " L" + x4 + "," + y7; - } - result += ""; - - break; - case "line": - case "straightConnector1": - case "bentConnector4": - case "bentConnector5": - case "curvedConnector2": - case "curvedConnector3": - case "curvedConnector4": - case "curvedConnector5": - if (isFlipV) { - result += ""; - break; - case "leftArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val = 0.25;//0.5; - var sAdj2,sAdj2_val = 0.5; - var max_sAdj2_const = w/h; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - break; - case "downArrow": - case "flowChartOffpageConnector": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val = 0.25;//0.5; - var sAdj2,sAdj2_val = 0.5; - var max_sAdj2_const = h/w; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - break; - case "upArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val = 0.25;//0.5; - var sAdj2,sAdj2_val = 0.5; - var max_sAdj2_const = h/w; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - break; - case "leftRightArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val = 0.25; - var sAdj2,sAdj2_val = 0.25; - var max_sAdj2_const = w/h; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - break; - case "upDownArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,sAdj1_val = 0.25; - var sAdj2,sAdj2_val = 0.25; - var max_sAdj2_const = h/w; - if(shapAdjst_ary !== undefined){ - for(var i=0; i"; - break; - case "quadArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 22500*96/914400; - var sAdj2,adj2 = 22500*96/914400; - var sAdj3,adj3 = 22500*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a2 = cnstVal1 - else a2 = adj2 - maxAdj1 = 2*a2; - if(adj1 < 0) a1 = 0 - else if (adj1 > maxAdj1) a1 = maxAdj1 - else a1 = adj1 - q1 = cnstVal2 - maxAdj1; - maxAdj3 = q1/2; - if(adj3 < 0) a3 = 0 - else if (adj3 > maxAdj3) a3 = maxAdj3 - else a3 = adj3 - x1 = minWH*a3/cnstVal2; - dx2 = minWH*a2/cnstVal2; - x2 = hc - dx2; - x5 = hc + dx2; - dx3 = minWH*a1/cnstVal3; - x3 = hc - dx3; - x4 = hc + dx3; - x6 = w - x1; - y2 = vc - dx2; - y5 = vc + dx2; - y3 = vc - dx3; - y4 = vc + dx3; - y6 = h - x1; - var d_val = "M" + 0 + "," + vc + - " L" + x1 + "," + y2 + - " L" + x1 + "," + y3 + - " L" + x3 + "," + y3 + - " L" + x3 + "," + x1 + - " L" + x2 + "," + x1 + - " L" + hc + "," + 0 + - " L" + x5 + "," + x1 + - " L" + x4 + "," + x1 + - " L" + x4 + "," + y3 + - " L" + x6 + "," + y3 + - " L" + x6 + "," + y2 + - " L" + w + "," + vc + - " L" + x6 + "," + y5 + - " L" + x6 + "," + y4 + - " L" + x4 + "," + y4 + - " L" + x4 + "," + y6 + - " L" + x5 + "," + y6 + - " L" + hc + "," + h + - " L" + x2 + "," + y6 + - " L" + x3 + "," + y6 + - " L" + x3 + "," + y4 + - " L" + x1 + "," + y4 + - " L" + x1 + "," + y5 + " z"; - - result += ""; - - break; - case "leftRightUpArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a2 = cnstVal1 - else a2 = adj2 - maxAdj1 = 2*a2; - if(adj1 < 0) a1 = 0 - else if (adj1 > maxAdj1) a1 = maxAdj1 - else a1 = adj1 - q1 = cnstVal2 - maxAdj1; - maxAdj3 = q1/2; - if(adj3 < 0) a3 = 0 - else if (adj3 > maxAdj3) a3 = maxAdj3 - else a3 = adj3 - x1 = minWH*a3/cnstVal2; - dx2 = minWH*a2/cnstVal2; - x2 = hc - dx2; - x5 = hc + dx2; - dx3 = minWH*a1/cnstVal3; - x3 = hc - dx3; - x4 = hc + dx3; - x6 = w - x1; - dy2 = minWH*a2/cnstVal1; - y2 = h - dy2; - y4 = h - dx2; - y3 = y4 - dx3; - y5 = y4 + dx3; - var d_val = "M" + 0 + "," + y4 + - " L" + x1 + "," + y2 + - " L" + x1 + "," + y3 + - " L" + x3 + "," + y3 + - " L" + x3 + "," + x1 + - " L" + x2 + "," + x1 + - " L" + hc + "," + 0 + - " L" + x5 + "," + x1 + - " L" + x4 + "," + x1 + - " L" + x4 + "," + y3 + - " L" + x6 + "," + y3 + - " L" + x6 + "," + y2 + - " L" + w + "," + y4 + - " L" + x6 + "," + h + - " L" + x6 + "," + y5 + - " L" + x1 + "," + y5 + - " L" + x1 + "," + h + " z"; - - result += ""; - - break; - case "leftUpArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a2 = cnstVal1 - else a2 = adj2 - maxAdj1 = 2*a2; - if(adj1 < 0) a1 = 0 - else if (adj1 > maxAdj1) a1 = maxAdj1 - else a1 = adj1 - maxAdj3 = cnstVal2 - maxAdj1; - if(adj3 < 0) a3 = 0 - else if (adj3 > maxAdj3) a3 = maxAdj3 - else a3 = adj3 - x1 = minWH*a3/cnstVal2; - dx2 = minWH*a2/cnstVal1; - x2 = w - dx2; - y2 = h - dx2; - dx4 = minWH*a2/cnstVal2; - x4 = w - dx4; - y4 = h - dx4; - dx3 = minWH*a1/cnstVal3; - x3 = x4 - dx3; - x5 = x4 + dx3; - y3 = y4 - dx3; - y5 = y4 + dx3; - var d_val = "M" + 0 + "," + y4 + - " L" + x1 + "," + y2 + - " L" + x1 + "," + y3 + - " L" + x3 + "," + y3 + - " L" + x3 + "," + x1 + - " L" + x2 + "," + x1 + - " L" + x4 + "," + 0 + - " L" + w + "," + x1 + - " L" + x5 + "," + x1 + - " L" + x5 + "," + y5 + - " L" + x1 + "," + y5 + - " L" + x1 + "," + h + " z"; - - result += ""; - - break; - case "bentUpArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a1 = cnstVal1 - else a1 = adj1 - if(adj2 < 0) a2 = 0 - else if (adj2 > cnstVal1) a2 = cnstVal1 - else a2 = adj2 - if(adj3 < 0) a3 = 0 - else if (adj3 > maxAdj3) a3 = maxAdj3 - else a3 = adj3 - y1 = minWH*a3/cnstVal2; - dx1 = minWH*a2/cnstVal1; - x1 = w - dx1; - dx3 = minWH*a2/cnstVal2; - x3 = w - dx3; - dx2 = minWH*a1/cnstVal3; - x2 = x3 - dx2; - x4 = x3 + dx2; - dy2 = minWH*a1/cnstVal2; - y2 = h - dy2; - var d_val = "M" + 0 + "," + y2 + - " L" + x2 + "," + y2 + - " L" + x2 + "," + y1 + - " L" + x1 + "," + y1 + - " L" + x3 + "," + 0 + - " L" + w + "," + y1 + - " L" + x4 + "," + y1 + - " L" + x4 + "," + h + - " L" + 0 + "," + h + " z"; - - result += ""; - - break; - case "bentArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var sAdj4,adj4 = 43750*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a2 = cnstVal1 - else a2 = adj2 - maxAdj1 = 2*a2; - if(adj1 < 0) a1 = 0 - else if (adj1 > maxAdj1) a1 = maxAdj1 - else a1 = adj1 - if(adj3 < 0) a3 = 0 - else if (adj3 > cnstVal1) a3 = cnstVal1 - else a3 = adj3 - var th,aw2,th2,dh2,ah,bw,bh,bs,bd,bd3,bd2, - th = minWH*a1/cnstVal2; - aw2 = minWH*a2/cnstVal2; - th2 = th/2; - dh2 = aw2-th2; - ah = minWH*a3/cnstVal2; - bw = w-ah; - bh = h-dh2; - bs = (bw maxAdj4) a4 = maxAdj4 - else a4 = adj4 - bd = minWH*a4/cnstVal2; - bd3 = bd-th; - bd2 = (bd3>0)?bd3:0; - x3 = th+bd2; - x4 = w-ah; - y3 = dh2+th; - y4 = y3+dh2; - y5 = dh2+bd; - y6 = y3+bd2; - - var d_val = "M" + 0 + "," + h + - " L" + 0 + "," + y5 + - shapeArc(bd,y5,bd,bd,180,270,false).replace("M","L") + - " L" + x4 + "," + dh2 + - " L" + x4 + "," + 0 + - " L" + w + "," + aw2 + - " L" + x4 + "," + y4 + - " L" + x4 + "," + y3 + - " L" + x3 + "," + y3 + - shapeArc(x3,y6,bd2,bd2,270,180,false).replace("M","L") + - " L" + th + "," + h + " z"; - - result += ""; - - break; - case "uturnArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var sAdj4,adj4 = 43750*96/914400; - var sAdj5,adj5 = 75000*96/914400; - var cnstVal1 = 25000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a2 = cnstVal1 - else a2 = adj2 - maxAdj1 = 2*a2; - if(adj1 < 0) a1 = 0 - else if (adj1 > maxAdj1) a1 = maxAdj1 - else a1 = adj1 - q2 = a1*minWH/h; - q3 = cnstVal2 - q2; - maxAdj3 = q3*h/minWH; - if(adj3 < 0) a3 = 0 - else if (adj3 > maxAdj3) a3 = maxAdj3 - else a3 = adj3 - q1 = a3+a1; - minAdj5 = q1*minWH/h; - if(adj5 < minAdj5) a5 = minAdj5 - else if (adj5 > cnstVal2) a5 = cnstVal2 - else a5 = adj5 - - var th,aw2,th2,dh2,ah,bw,bs,bd,bd3,bd2, - th = minWH*a1/cnstVal2; - aw2 = minWH*a2/cnstVal2; - th2 = th/2; - dh2 = aw2-th2; - y5 = h*a5/cnstVal2; - ah = minWH*a3/cnstVal2; - y4 = y5-ah; - x9 = w-dh2; - bw = x9/2; - bs = (bw maxAdj4) a4 = maxAdj4 - else a4 = adj4 - bd = minWH*a4/cnstVal2; - bd3 = bd-th; - bd2 = (bd3>0)?bd3:0; - x3 = th+bd2; - x8 = w - aw2; - x6 = x8 - aw2; - x7 = x6 + dh2; - x4 = x9-bd; - x5 = x7 - bd2; - cx = (th + x7)/2 - var cy = (y4+th)/2 - var d_val = "M" + 0 + "," + h + - " L" + 0 + "," + bd + - shapeArc(bd,bd,bd,bd,180,270,false).replace("M","L") + - " L" + x4 + "," + 0 + - shapeArc(x4,bd,bd,bd,270,360,false).replace("M","L") + - " L" + x9 + "," + y4 + - " L" + w + "," + y4 + - " L" + x8 + "," + y5 + - " L" + x6 + "," + y4 + - " L" + x7 + "," + y4 + - " L" + x7 + "," + x3 + - shapeArc(x5,x3,bd2,bd2,0,-90,false).replace("M","L") + - " L" + x3 + "," + th + - shapeArc(x3,x3,bd2,bd2,270,180,false).replace("M","L") + - " L" + th + "," + h + " z"; - - result += ""; - - break; - case "stripedRightArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 50000*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var cnstVal1 = 100000*96/914400; - var cnstVal2 = 200000*96/914400; - var cnstVal3 = 84375*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a1 = cnstVal1 - else a1 = adj1 - if(adj2 < 0) a2 = 0 - else if (adj2 > maxAdj2) a2 = maxAdj2 - else a2 = adj2 - x4 = minWH*5/32; - dx5 = minWH*a2/cnstVal1; - x5 = w-dx5; - dy1 = h*a1/cnstVal2; - y1 = vc-dy1; - y2 = vc+dy1; - //dx6 = dy1*dx5/hd2; - //x6 = w-dx6; - var ssd8 = minWH/8, - ssd16 = minWH/16, - ssd32 = minWH/32; - var d_val = "M" + 0 + "," + y1 + - " L" + ssd32 + "," + y1 + - " L" + ssd32 + "," + y2 + - " L" + 0 + "," + y2 + " z" + - " M" + ssd16 + "," + y1 + - " L" + ssd8 + "," + y1 + - " L" + ssd8 + "," + y2 + - " L" + ssd16 + "," + y2 +" z" + - " M" + x4 + "," + y1 + - " L" + x5 + "," + y1 + - " L" + x5 + "," + 0 + - " L" + w + "," + vc + - " L" + x5 + "," + h + - " L" + x5 + "," + y2 + - " L" + x4 + "," + y2 + " z"; - - result += ""; - - break; - case "notchedRightArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 50000*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var cnstVal1 = 100000*96/914400; - var cnstVal2 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; i cnstVal1) a1 = cnstVal1 - else a1 = adj1 - if(adj2 < 0) a2 = 0 - else if (adj2 > maxAdj2) a2 = maxAdj2 - else a2 = adj2 - dx2 = minWH*a2/cnstVal1; - x2 = w-dx2; - dy1 = h*a1/cnstVal2; - y1 = vc-dy1; - y2 = vc+dy1; - x1 = dy1*dx2/hd2; - var d_val = "M" + 0 + "," + y1 + - " L" + x2 + "," + y1 + - " L" + x2 + "," + 0 + - " L" + w + "," + vc + - " L" + x2 + "," + h + - " L" + x2 + "," + y2 + - " L" + 0 + "," + y2 + - " L" + x1 + "," + vc + " z"; - - result += ""; - - break; - case "homePlate": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 50000*96/914400; - var cnstVal1 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var a,x1,dx1,maxAdj,vc=h/2; - var minWH = Math.min(w,h); - maxAdj = cnstVal1*w/minWH; - if(adj < 0) a = 0 - else if (adj > maxAdj) a = maxAdj - else a = adj - dx1 = minWH*a/cnstVal1; - x1 = w-dx1; - var d_val = "M" + 0 + "," + 0 + - " L" + x1 + "," + 0 + - " L" + w + "," + vc + - " L" + x1 + "," + h + - " L" + 0 + "," + h + " z"; - - result += ""; - - break; - case "chevron": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 50000*96/914400; - var cnstVal1 = 100000*96/914400; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var a,x1,dx1,x2,maxAdj,vc=h/2; - var minWH = Math.min(w,h); - maxAdj = cnstVal1*w/minWH; - if(adj < 0) a = 0 - else if (adj > maxAdj) a = maxAdj - else a = adj - x1 = minWH*a/cnstVal1; - x2 = w-x1; - var d_val = "M" + 0 + "," + 0 + - " L" + x2 + "," + 0 + - " L" + w + "," + vc + - " L" + x2 + "," + h + - " L" + 0 + "," + h + - " L" + x1 + "," + vc + " z"; - - result += ""; - - - break; - case "rightArrowCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var sAdj4,adj4 = 64977*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - maxAdj1 = a2*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - maxAdj3 = cnstVal2*w/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - q2 = a3*ss/w; - maxAdj4 = cnstVal-q2; - a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; - dy1 = ss*a2/cnstVal2; - dy2 = ss*a1/cnstVal3; - y1 = vc-dy1; - y2 = vc-dy2; - y3 = vc+dy2; - y4 = vc+dy1; - dx3 = ss*a3/cnstVal2; - x3 = r-dx3; - x2 = w*a4/cnstVal2; - x1 = x2/2; - var d_val = "M" + l + "," + t + - " L" + x2 + "," + t + - " L" + x2 + "," + y2 + - " L" + x3 + "," + y2 + - " L" + x3 + "," + y1 + - " L" + r + "," + vc + - " L" + x3 + "," + y4 + - " L" + x3 + "," + y3 + - " L" + x2 + "," + y3 + - " L" + x2 + "," + b + - " L" + l + "," + b + - " z"; - result += ""; - - break; - case "downArrowCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var sAdj4,adj4 = 64977*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - maxAdj1 = a2*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - maxAdj3 = cnstVal2*h/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - q2 = a3*ss/h; - maxAdj4 = cnstVal2-q2; - a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; - dx1 = ss*a2/cnstVal2; - dx2 = ss*a1/cnstVal3; - x1 = hc-dx1; - x2 = hc-dx2; - x3 = hc+dx2; - x4 = hc+dx1; - dy3 = ss*a3/cnstVal2; - y3 = b-dy3; - y2 = h*a4/cnstVal2; - y1 = y2/2; - var d_val = "M" + l + "," + t + - " L" + r + "," + t + - " L" + r + "," + y2 + - " L" + x3 + "," + y2 + - " L" + x3 + "," + y3 + - " L" + x4 + "," + y3 + - " L" + hc + "," + b + - " L" + x1 + "," + y3 + - " L" + x2 + "," + y3 + - " L" + x2 + "," + y2 + - " L" + l + "," + y2 + - " z"; - result += ""; - - break; - case "leftArrowCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var sAdj4,adj4 = 64977*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - maxAdj1 = a2*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - maxAdj3 = cnstVal2*w/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - q2 = a3*ss/w; - maxAdj4 = cnstVal2-q2; - a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; - dy1 = ss*a2/cnstVal2; - dy2 = ss*a1/cnstVal3; - y1 = vc-dy1; - y2 = vc-dy2; - y3 = vc+dy2; - y4 = vc+dy1; - x1 = ss*a3/cnstVal2; - dx2 = w*a4/cnstVal2; - x2 = r-dx2; - x3 = (x2+r)/2; - var d_val = "M" + l + "," + vc + - " L" + x1 + "," + y1 + - " L" + x1 + "," + y2 + - " L" + x2 + "," + y2 + - " L" + x2 + "," + t + - " L" + r + "," + t + - " L" + r + "," + b + - " L" + x2 + "," + b + - " L" + x2 + "," + y3 + - " L" + x1 + "," + y3 + - " L" + x1 + "," + y4 + - " z"; - result += ""; - - break; - case "upArrowCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var sAdj4,adj4 = 64977*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - maxAdj1 = a2*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - maxAdj3 = cnstVal2*h/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - q2 = a3*ss/h; - maxAdj4 = cnstVal2-q2; - a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; - dx1 = ss*a2/cnstVal2; - dx2 = ss*a1/cnstVal3; - x1 = hc-dx1; - x2 = hc-dx2; - x3 = hc+dx2; - x4 = hc+dx1; - y1 = ss*a3/cnstVal2; - dy2 = h*a4/cnstVal2; - y2 = b-dy2; - y3 = (y2+b)/2; - - var d_val = "M" + l + "," + y2 + - " L" + x2 + "," + y2 + - " L" + x2 + "," + y1 + - " L" + x1 + "," + y1 + - " L" + hc + "," + t + - " L" + x4 + "," + y1 + - " L" + x3 + "," + y1 + - " L" + x3 + "," + y2 + - " L" + r + "," + y2 + - " L" + r + "," + b + - " L" + l + "," + b + - " z"; - result += ""; - - break; - case "leftRightArrowCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 25000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var sAdj4,adj4 = 48123*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - maxAdj1 = a2*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - maxAdj3 = cnstVal1*w/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - q2 = a3*ss/wd2; - maxAdj4 = cnstVal2-q2; - a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; - dy1 = ss*a2/cnstVal2; - dy2 = ss*a1/cnstVal3; - y1 = vc-dy1; - y2 = vc-dy2; - y3 = vc+dy2; - y4 = vc+dy1; - x1 = ss*a3/cnstVal2; - x4 = r-x1; - dx2 = w*a4/cnstVal3; - x2 = hc-dx2; - x3 = hc+dx2; - var d_val = "M" + l + "," + vc + - " L" + x1 + "," + y1 + - " L" + x1 + "," + y2 + - " L" + x2 + "," + y2 + - " L" + x2 + "," + t + - " L" + x3 + "," + t + - " L" + x3 + "," + y2 + - " L" + x4 + "," + y2 + - " L" + x4 + "," + y1 + - " L" + r + "," + vc + - " L" + x4 + "," + y4 + - " L" + x4 + "," + y3 + - " L" + x3 + "," + y3 + - " L" + x3 + "," + b + - " L" + x2 + "," + b + - " L" + x2 + "," + y3 + - " L" + x1 + "," + y3 + - " L" + x1 + "," + y4 + - " z"; - result += ""; - - break; - case "quadArrowCallout": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 18515*96/914400; - var sAdj2,adj2 = 18515*96/914400; - var sAdj3,adj3 = 18515*96/914400; - var sAdj4,adj4 = 48123*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - var cnstVal3 = 200000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal1)?cnstVal1:adj2; - maxAdj1 = a2*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - maxAdj3 = cnstVal1-a2; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - q2 = a3*2; - maxAdj4 = cnstVal2-q2; - a4 = (adj4maxAdj4)?maxAdj4:adj4; - dx2 = ss*a2/cnstVal2; - dx3 = ss*a1/cnstVal3; - ah = ss*a3/cnstVal2; - dx1 = w*a4/cnstVal3; - dy1 = h*a4/cnstVal3; - x8 = r-ah; - x2 = hc-dx1; - x7 = hc+dx1; - x3 = hc-dx2; - x6 = hc+dx2; - x4 = hc-dx3; - x5 = hc+dx3; - y8 = b-ah; - y2 = vc-dy1; - y7 = vc+dy1; - y3 = vc-dx2; - y6 = vc+dx2; - y4 = vc-dx3; - y5 = vc+dx3; - var d_val = "M" + l + "," + vc + - " L" + ah + "," + y3 + - " L" + ah + "," + y4 + - " L" + x2 + "," + y4 + - " L" + x2 + "," + y2 + - " L" + x4 + "," + y2 + - " L" + x4 + "," + ah + - " L" + x3 + "," + ah + - " L" + hc + "," + t + - " L" + x6 + "," + ah + - " L" + x5 + "," + ah + - " L" + x5 + "," + y2 + - " L" + x7 + "," + y2 + - " L" + x7 + "," + y4 + - " L" + x8 + "," + y4 + - " L" + x8 + "," + y3 + - " L" + r + "," + vc + - " L" + x8 + "," + y6 + - " L" + x8 + "," + y5 + - " L" + x7 + "," + y5 + - " L" + x7 + "," + y7 + - " L" + x5 + "," + y7 + - " L" + x5 + "," + y8 + - " L" + x6 + "," + y8 + - " L" + hc + "," + b + - " L" + x3 + "," + y8 + - " L" + x4 + "," + y8 + - " L" + x4 + "," + y7 + - " L" + x2 + "," + y7 + - " L" + x2 + "," + y5 + - " L" + ah + "," + y5 + - " L" + ah + "," + y6 + - " z"; - - result += ""; - - break; - case "curvedDownArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - a1 = (adj1<0)?0:(adj1>cnstVal2)?cnstVal2:adj1; - th = ss*a1/cnstVal2; - aw = ss*a2/cnstVal2; - q1 = (th+aw)/4; - wR = wd2-q1; - q7 = wR*2; - q8 = q7*q7; - q9 = th*th; - q10 = q8-q9; - q11 = Math.sqrt(q10); - idy = q11*h/q7; - maxAdj3 = cnstVal2*idy/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - ah = ss*adj3/cnstVal2; - x3 = wR+th; - q2 = h*h; - q3 = ah*ah; - q4 = q2-q3; - q5 = Math.sqrt(q4); - dx = q5*wR/h; - x5 = wR+dx; - x7 = x3+dx; - q6 = aw-th; - dh = q6/2; - x4 = x5-dh; - x8 = x7+dh; - aw2 = aw/2; - x6 = r-aw2; - y1 = b-ah; - swAng = Math.atan(dx/ah); - var swAngDeg = swAng*180/Math.PI; - mswAng = -swAngDeg; - iy = b-idy; - ix = (wR+x3)/2; - q12 = th/2; - dang2 = Math.atan(q12/idy); - var dang2Deg = dang2*180/Math.PI; - stAng = c3d4+swAngDeg; - stAng2 = c3d4-dang2Deg; - swAng2 = dang2Deg-cd4; - swAng3 = cd4+dang2Deg; - //var cX = x5 - Math.cos(stAng*Math.PI/180) * wR; - //var cY = y1 - Math.sin(stAng*Math.PI/180) * h; - - var d_val = "M" + x6 + "," + b + - " L" + x4 + "," + y1 + - " L" + x5 + "," + y1 + - shapeArc(wR,h,wR,h,stAng,(stAng+mswAng),false).replace("M","L") + - " L" + x3 + "," + t + - shapeArc(x3,h,wR,h,c3d4,(c3d4+swAngDeg),false).replace("M","L") + - " L" + (x5+th)+ "," + y1 + - " L" + x8 + "," + y1 + - " z" + - "M" + x3 + "," + t + - shapeArc(x3,h,wR,h,stAng2,(stAng2+swAng2),false).replace("M","L") + - shapeArc(wR,h,wR,h,cd2,(cd2+swAng3),false).replace("M","L"); - - result += ""; - - break; - case "curvedLeftArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - a1 = (adj1<0)?0:(adj1>a2)?a2:adj1; - th = ss*a1/cnstVal2; - aw = ss*a2/cnstVal2; - q1 = (th+aw)/4; - hR = hd2-q1; - q7 = hR*2; - q8 = q7*q7; - q9 = th*th; - q10 = q8-q9; - q11 = Math.sqrt(q10); - idx = q11*w/q7; - maxAdj3 = cnstVal2*idx/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - ah = ss*a3/cnstVal2; - y3 = hR+th; - q2 = w*w; - q3 = ah*ah; - q4 = q2-q3; - q5 = Math.sqrt(q4); - dy = q5*hR/w; - y5 = hR+dy; - y7 = y3+dy; - q6 = aw-th; - dh = q6/2; - y4 = y5-dh; - y8 = y7+dh; - aw2 = aw/2; - y6 = b-aw2; - x1 = l+ah; - swAng = Math.atan(dy/ah); - mswAng = -swAng; - ix = l+idx; - iy = (hR+y3)/2; - q12 = th/2; - dang2 = Math.atan(q12/idx); - swAng2 = dang2-swAng; - swAng3 = swAng+dang2; - stAng3 = -dang2; - var swAngDg,swAng2Dg,swAng3Dg,stAng3dg; - swAngDg = swAng*180/Math.PI; - swAng2Dg = swAng2*180/Math.PI; - swAng3Dg = swAng3*180/Math.PI; - stAng3dg = stAng3*180/Math.PI; - - var d_val = "M" + r+ "," + y3 + - shapeArc(l,hR,w,hR,0,-cd4,false).replace("M","L") + - " L" + l+ "," + t + - shapeArc(l,y3,w,hR,c3d4,(c3d4+cd4),false).replace("M","L") + - " L" + r+ "," + y3 + - shapeArc(l,y3,w,hR,0,swAngDg,false).replace("M","L") + - " L" + x1+ "," + y7 + - " L" + x1+ "," + y8 + - " L" + l+ "," + y6 + - " L" + x1+ "," + y4 + - " L" + x1+ "," + y5 + - shapeArc(l,hR,w,hR,swAngDg,(swAngDg+swAng2Dg),false).replace("M","L")+ - shapeArc(l,hR,w,hR,0,-cd4,false).replace("M","L")+ - shapeArc(l,y3,w,hR,c3d4,(c3d4+cd4),false).replace("M","L"); - - result += ""; - - break; - case "curvedRightArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - a1 = (adj1<0)?0:(adj1>a2)?a2:adj1; - th = ss*a1/cnstVal2; - aw = ss*a2/cnstVal2; - q1 = (th+aw)/4; - hR = hd2-q1; - q7 = hR*2; - q8 = q7*q7; - q9 = th*th; - q10 = q8-q9; - q11 = Math.sqrt(q10); - idx = q11*w/q7; - maxAdj3 = cnstVal2*idx/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - ah = ss*a3/cnstVal2; - y3 = hR+th; - q2 = w*w; - q3 = ah*ah; - q4 = q2-q3; - q5 = Math.sqrt(q4); - dy = q5*hR/w; - y5 = hR+dy; - y7 = y3+dy; - q6 = aw-th; - dh = q6/2; - y4 = y5-dh; - y8 = y7+dh; - aw2 = aw/2; - y6 = b-aw2; - x1 = r-ah; - swAng = Math.atan(dy/ah); - stAng = Math.PI+0-swAng; - mswAng = -swAng; - ix = r-idx; - iy = (hR+y3)/2; - q12 = th/2; - dang2 = Math.atan(q12/idx); - swAng2 = dang2-Math.PI/2; - swAng3 = Math.PI/2+dang2; - stAng3 = Math.PI-dang2; - - var stAngDg,mswAngDg,swAngDg,swAng2dg; - stAngDg = stAng*180/Math.PI; - mswAngDg = mswAng*180/Math.PI; - swAngDg = swAng*180/Math.PI; - swAng2dg = swAng2*180/Math.PI; - - var d_val = "M" + l + "," + hR + - shapeArc(w,hR,w,hR,cd2,cd2+mswAngDg,false).replace("M","L") + - " L" + x1 + "," + y5 + - " L" + x1 + "," + y4 + - " L" + r + "," + y6 + - " L" + x1 + "," + y8 + - " L" + x1 + "," + y7 + - shapeArc(w,y3,w,hR,stAngDg,stAngDg+swAngDg,false).replace("M","L") + - " L" + l + "," + hR + - shapeArc(w,hR,w,hR,cd2,cd2+cd4,false).replace("M","L") + - " L" + r + "," + th + - shapeArc(w,y3,w,hR,c3d4,c3d4+swAng2dg,false).replace("M","L") - ""; - result += ""; - - break; - case "curvedUpArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 25000*96/914400; - var sAdj2,adj2 = 50000*96/914400; - var sAdj3,adj3 = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 100000*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; imaxAdj2)?maxAdj2:adj2; - a1 = (adj1<0)?0:(adj1>cnstVal2)?cnstVal2:adj1; - th = ss*a1/cnstVal2; - aw = ss*a2/cnstVal2; - q1 = (th+aw)/4; - wR = wd2-q1; - q7 = wR*2; - q8 = q7*q7; - q9 = th*th; - q10 = q8-q9; - q11 = Math.sqrt(q10); - idy = q11*h/q7; - maxAdj3 = cnstVal2*idy/ss; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - ah = ss*adj3/cnstVal2; - x3 = wR+th; - q2 = h*h; - q3 = ah*ah; - q4 = q2-q3; - q5 = Math.sqrt(q4); - dx = q5*wR/h; - x5 = wR+dx; - x7 = x3+dx; - q6 = aw-th; - dh = q6/2; - x4 = x5-dh; - x8 = x7+dh; - aw2 = aw/2; - x6 = r-aw2; - y1 = t+ah; - swAng = Math.atan(dx/ah); - mswAng = -swAng; - iy = t+idy; - ix = (wR+x3)/2; - q12 = th/2; - dang2 = Math.atan(q12/idy); - swAng2 = dang2-swAng; - mswAng2 = -swAng2; - stAng3 = Math.PI/2-swAng; - swAng3 = swAng+dang2; - stAng2 = Math.PI/2-dang2; - - var stAng2dg,swAng2dg,swAngDg,swAng2dg; - stAng2dg = stAng2*180/Math.PI; - swAng2dg = swAng2*180/Math.PI; - stAng3dg = stAng3*180/Math.PI; - swAngDg = swAng*180/Math.PI; - - var d_val = //"M" + ix + "," +iy + - shapeArc(wR,0,wR,h,stAng2dg,stAng2dg+swAng2dg,false) + //.replace("M","L") + - " L" + x5 + "," + y1 + - " L" + x4 + "," + y1 + - " L" + x6 + "," + t + - " L" + x8 + "," + y1 + - " L" + x7 + "," + y1 + - shapeArc(x3,0,wR,h,stAng3dg,stAng3dg+swAngDg,false).replace("M","L") + - " L" + wR + "," + b + - shapeArc(wR,0,wR,h,cd4,cd2,false).replace("M","L") + - " L" + th + "," + t + - shapeArc(x3,0,wR,h,cd2,cd4,false).replace("M","L") + - ""; - result += ""; - - break; - case "mathDivide": - case "mathEqual": - case "mathMinus": - case "mathMultiply": - case "mathNotEqual": - case "mathPlus": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1; - var sAdj2,adj2; - var sAdj3,adj3; - if(shapAdjst_ary !== undefined){ - if(shapAdjst_ary.constructor === Array){ - for(var i=0; icnstVal1)?cnstVal1:adj1; - crAng = (adj2angVal2)?angVal2:adj2; - a2a1 = a1*2; - maxAdj3 = cnstVal2-a2a1; - a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; - dy1 = h*a1/cnstVal2; - dy2 = h*a3/cnstVal3; - dx1 = w*cnstVal4/cnstVal3; - x1 = hc-dx1; - x8 = hc+dx1; - y2 = vc-dy2; - y3 = vc+dy2; - y1 = y2-dy1; - y4 = y3+dy1; - cadj2 = crAng-Math.PI/2; - xadj2 = hd2*Math.tan(cadj2); - len = Math.sqrt(xadj2*xadj2 + hd2*hd2); - bhw = len*dy1/hd2; - bhw2 = bhw/2; - x7 = hc+xadj2-bhw2; - dx67 = xadj2*y1/hd2; - x6 = x7-dx67; - dx57 = xadj2*y2/hd2; - x5 = x7-dx57; - dx47 = xadj2*y3/hd2; - x4 = x7-dx47; - dx37 = xadj2*y4/hd2; - x3 = x7-dx37; - dx27 = xadj2*2; - x2 = x7-dx27; - rx7 = x7+bhw; - rx6 = x6+bhw; - rx5 = x5+bhw; - rx4 = x4+bhw; - rx3 = x3+bhw; - rx2 = x2+bhw; - dx7 = dy1*hd2/len; - rxt = x7+dx7; - lxt = rx7-dx7; - rx = (cadj2 > 0)?rxt:rx7; - lx = (cadj2 > 0)?x7:lxt; - dy3 = dy1*xadj2/len; - dy4 = -dy3; - ry = (cadj2 > 0)?dy3:0; - ly = (cadj2 > 0)?0:dy4; - dlx = w-rx; - drx = w-lx; - dly = h-ry; - dry = h-ly; - xC1 = (rx+lx)/2; - xC2 = (drx+dlx)/2; - yC1 = (ry+ly)/2; - yC2 = (y1+y2)/2; - yC3 = (y3+y4)/2; - yC4 = (dry+dly)/2; - - dVal = "M" + x1 + "," + y1 + - " L" + x6 + "," + y1 + - " L" + lx + "," + ly + - " L" + rx + "," + ry + - " L" + rx6 + "," + y1 + - " L" + x8 + "," + y1 + - " L" + x8 + "," + y2 + - " L" + rx5 + "," + y2 + - " L" + rx4 + "," + y3 + - " L" + x8 + "," + y3 + - " L" + x8 + "," + y4 + - " L" + rx3 + "," + y4 + - " L" + drx + "," + dry + - " L" + dlx + "," + dly + - " L" + x3 + "," + y4 + - " L" + x1 + "," + y4 + - " L" + x1 + "," + y3 + - " L" + x4 + "," + y3 + - " L" + x5 + "," + y2 + - " L" + x1 + "," + y2 + - " z"; - }else if(shapType == "mathDivide"){ - if(shapAdjst_ary === undefined){ - adj1 = 23520*96/914400; - adj2 = 5880*96/914400; - adj3 = 11760*96/914400; - }else{ - adj1 = adj1*96/914400; - adj2 = adj2*96/914400; - adj3 = adj3*96/914400; - } - var a1, ma1, ma3h, ma3w, maxAdj3, a3, m4a3, maxAdj2, a2, dy1, yg, rad, dx1, - y3, y4, a, y2, y1, y5, x1, x3, x2; - var cnstVal4 = 1000*96/914400; - var cnstVal5 = 36745*96/914400; - var cnstVal6 = 73490*96/914400; - a1 = (adj1cnstVal5)?cnstVal5:adj1; - ma1 = -a1; - ma3h = (cnstVal6+ma1)/4; - ma3w = cnstVal5*w/h; - maxAdj3 = (ma3hmaxAdj3)?maxAdj3:adj3; - m4a3 = -4*a3; - maxAdj2 = cnstVal6+m4a3-a1; - a2 = (adj2<0)?0:(adj2>maxAdj2)?maxAdj2:adj2; - dy1 = h*a1/cnstVal3; - yg = h*a2/cnstVal2; - rad = h*a3/cnstVal2; - dx1 = w*cnstVal6/cnstVal3; - y3 = vc-dy1; - y4 = vc+dy1; - a = yg+rad; - y2 = y3-a; - y1 = y2-rad; - y5 = h-y1; - x1 = hc-dx1; - x3 = hc+dx1; - x2 = hc-rad; - var cd4=90,c3d4=270; - var cX1 = hc - Math.cos(c3d4*Math.PI/180) * rad; - var cY1 = y1 - Math.sin(c3d4*Math.PI/180) * rad; - var cX2 = hc - Math.cos(Math.PI/2) * rad; - var cY2 = y5 - Math.sin(Math.PI/2) * rad; - dVal = "M" + hc + "," + y1 + - shapeArc(cX1,cY1,rad,rad,c3d4,c3d4+360,false).replace("M","L") + - " z" + - " M" + hc + "," + y5 + - shapeArc(cX2,cY2,rad,rad,cd4,cd4+360,false).replace("M","L") + - " z" + - " M" + x1 + "," + y3 + - " L" + x3 + "," + y3 + - " L" + x3 + "," + y4 + - " L" + x1 + "," + y4 + - " z"; - }else if(shapType == "mathEqual"){ - if(shapAdjst_ary === undefined){ - adj1 = 23520*96/914400; - adj2 = 11760*96/914400; - }else{ - adj1 = adj1*96/914400; - adj2 = adj2*96/914400; - } - var cnstVal5 = 36745*96/914400; - var cnstVal6 = 73490*96/914400; - var a1, a2a1, mAdj2, a2, dy1, dy2, dx1, y2, y3, y1, y4, x1, x2, yC1, yC2; - - a1 = (adj1<0)?0:(adj1>cnstVal5)?cnstVal5:adj1; - a2a1 = a1*2; - mAdj2 = cnstVal2-a2a1; - a2 = (adj2<0)?0:(adj2>mAdj2)?mAdj2:adj2; - dy1 = h*a1/cnstVal2; - dy2 = h*a2/cnstVal3; - dx1 = w*cnstVal6/cnstVal3; - y2 = vc-dy2; - y3 = vc+dy2; - y1 = y2-dy1; - y4 = y3+dy1; - x1 = hc-dx1; - x2 = hc+dx1; - yC1 = (y1+y2)/2; - yC2 = (y3+y4)/2; - dVal = "M" + x1 + "," + y1 + - " L" + x2 + "," + y1 + - " L" + x2 + "," + y2 + - " L" + x1 + "," + y2 + - " z" + - "M" + x1 + "," + y3 + - " L" + x2 + "," + y3 + - " L" + x2 + "," + y4 + - " L" + x1 + "," + y4 + - " z"; - }else if(shapType == "mathMinus"){ - if(shapAdjst_ary === undefined){ - adj1 = 23520*96/914400; - }else{ - adj1 = adj1*96/914400; - } - var cnstVal6 = 73490*96/914400; - var a1, dy1, dx1, y1, y2, x1, x2; - a1 = (adj1<0)?0:(adj1>cnstVal2)?cnstVal2:adj1; - dy1 = h*a1/cnstVal3; - dx1 = w*cnstVal6/cnstVal3; - y1 = vc-dy1; - y2 = vc+dy1; - x1 = hc-dx1; - x2 = hc+dx1; - - dVal = "M" + x1 + "," + y1 + - " L" + x2 + "," + y1 + - " L" + x2 + "," + y2 + - " L" + x1 + "," + y2 + - " z"; - }else if(shapType == "mathMultiply"){ - if(shapAdjst_ary === undefined){ - adj1 = 23520*96/914400; - }else{ - adj1 = adj1*96/914400; - } - var cnstVal6 = 51965*96/914400; - var a1, th, a, sa, ca, ta, dl, rw, lM, xM, yM, dxAM, dyAM, - xA, yA, xB, yB, xBC, yBC, yC, xD, xE, yFE, xFE, xF, xL, yG, yH, yI, xC2, yC3; - var ss = Math.min(w,h); - a1 = (adj1<0)?0:(adj1>cnstVal6)?cnstVal6:adj1; - th = ss*a1/cnstVal2; - a = Math.atan(h/w); - sa = 1*Math.sin(a); - ca = 1*Math.cos(a); - ta = 1*Math.tan(a); - dl = Math.sqrt(w*w + h*h); - rw = dl*cnstVal6/cnstVal2; - lM = dl-rw; - xM = ca*lM/2; - yM = sa*lM/2; - dxAM = sa*th/2; - dyAM = ca*th/2; - xA = xM-dxAM; - yA = yM+dyAM; - xB = xM+dxAM; - yB = yM-dyAM; - xBC = hc-xB; - yBC = xBC*ta; - yC = yBC+yB; - xD = w-xB; - xE = w-xA; - yFE = vc-yA; - xFE = yFE/ta; - xF = xE-xFE; - xL = xA+xFE; - yG = h-yA; - yH = h-yB; - yI = h-yC; - xC2 = w-xM; - yC3 = h-yM; - - dVal = "M" + xA + "," + yA + - " L" + xB + "," + yB + - " L" + hc + "," + yC + - " L" + xD + "," + yB + - " L" + xE + "," + yA + - " L" + xF + "," + vc + - " L" + xE + "," + yG + - " L" + xD + "," + yH + - " L" + hc + "," + yI + - " L" + xB + "," + yH + - " L" + xA + "," + yG + - " L" + xL + "," + vc + - " z"; - }else if(shapType == "mathPlus"){ - if(shapAdjst_ary === undefined){ - adj1 = 23520*96/914400; - }else{ - adj1 = adj1*96/914400; - } - var cnstVal6 = 73490*96/914400; - var ss = Math.min(w,h); - var a1, dx1, dy1, dx2, x1, x2, x3, x4, y1, y2, y3, y4; - - a1 = (adj1<0)?0:(adj1>cnstVal6)?cnstVal6:adj1; - dx1 = w*cnstVal6/cnstVal3; - dy1 = h*cnstVal6/cnstVal3; - dx2 = ss*a1/cnstVal3; - x1 = hc-dx1; - x2 = hc-dx2; - x3 = hc+dx2; - x4 = hc+dx1; - y1 = vc-dy1; - y2 = vc-dx2; - y3 = vc+dx2; - y4 = vc+dy1; - - dVal = "M" + x1 + "," + y2 + - " L" + x2 + "," + y2 + - " L" + x2 + "," + y1 + - " L" + x3 + "," + y1 + - " L" + x3 + "," + y2 + - " L" + x4 + "," + y2 + - " L" + x4 + "," + y3 + - " L" + x3 + "," + y3 + - " L" + x3 + "," + y4 + - " L" + x2 + "," + y4 + - " L" + x2 + "," + y3 + - " L" + x1 + "," + y3 + - " z"; - } - result += ""; - - //console.log(shapType); - break; - case "can": - case "flowChartMagneticDisk": - case "flowChartMagneticDrum": - var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); - var adj = 25000*96/914400; - var cnstVal1 = 50000*96/914400; - var cnstVal2 = 200000*96/914400; - if(shapAdjst !== undefined){ - adj = parseInt(shapAdjst.substr(4))*96/914400; - } - var ss = Math.min(w,h); - var maxAdj, a, y1, y2, y3,dVal; - if(shapType == "flowChartMagneticDisk" || shapType == "flowChartMagneticDrum"){ - adj = 50000*96/914400; - } - maxAdj = cnstVal1*h/ss; - a = (adj<0)?0:(adj>maxAdj)?maxAdj:adj; - y1 = ss*a/cnstVal2; - y2 = y1+y1; - y3 = h-y1; - var cd2=180 , wd2 = w/2; - - var tranglRott = ""; - if(shapType == "flowChartMagneticDrum"){ - tranglRott = "transform='rotate(90 " + w/2 +"," + h/2 + ")'"; - } - dVal = shapeArc(wd2,y1,wd2,y1,0,cd2,false) + - shapeArc(wd2,y1,wd2,y1,cd2,cd2+cd2,false).replace("M","L") + - " L" + w + "," + y3 + - shapeArc(wd2,y3,wd2,y1,0,cd2,false).replace("M","L") + - " L" + 0 + "," + y1; - - result += ""; - - break; - case "swooshArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var refr = 96/914400; - var sAdj1,adj1 = 25000*refr; - var sAdj2,adj2 = 16667*refr; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal3)?cnstVal3:adj1; - maxAdj2 = cnstVal2*w/ss; - a2 = (adj2<0)?0:(adj2>maxAdj2)?maxAdj2:adj2; - ad1 = h*a1/cnstVal4; - ad2 = ss*a2/cnstVal4; - xB = w-ad2; - yB = ssd8; - alfa = (Math.PI/2)/14; - dx0 = ssd8*Math.tan(alfa); - xC = xB-dx0; - dx1 = ad1*Math.tan(alfa); - yF = yB+ad1; - xF = xB+dx1; - xE = xF+dx0; - yE = yF+ssd8; - dy2 = yE-0; - dy22 = dy2/2; - dy3 = h/20; - yD = dy22-dy3; - dy4 = hd6; - yP1 = hd6+dy4; - xP1 = w/6; - dy5 = hd6/2; - yP2 = yF+dy5; - xP2 = w/4; - - var dVal = "M" + 0 + "," + h + - " Q" + xP1 + "," + yP1 + " " + xB + "," + yB + - " L" + xC + "," + 0 + - " L" + w + "," + yD + - " L" + xE + "," + yE + - " L" + xF + "," + yF + - " Q" + xP2 + "," + yP2 + " " + 0 + "," + h + - " z"; - - result += ""; - - break; - case "circularArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 12500*96/914400; - var sAdj2,adj2 = (1142319/60000)*Math.PI/180; - var sAdj3,adj3 = (20457681/60000)*Math.PI/180; - var sAdj4,adj4 = (10800000/60000)*Math.PI/180; - var sAdj5,adj5 = 12500*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal1)?cnstVal1:adj5; - maxAdj1 = a5*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - enAng = (adj3rdAngVal2)?rdAngVal2:adj3; - stAng = (adj4<0)?0:(adj4>rdAngVal2)?rdAngVal2:adj4; ////////////////////////////////////////// - th = ss*a1/cnstVal2; - thh = ss*a5/cnstVal2; - th2 = th/2; - rw1 = wd2+th2-thh; - rh1 = hd2+th2-thh; - rw2 = rw1-th; - rh2 = rh1-th; - rw3 = rw2+th2; - rh3 = rh2+th2; - wtH = rw3*Math.sin(enAng); - htH = rh3*Math.cos(enAng); - - //dxH = rw3*Math.cos(Math.atan(wtH/htH)); - //dyH = rh3*Math.sin(Math.atan(wtH/htH)); - dxH = rw3*Math.cos(Math.atan2(wtH,htH)); - dyH = rh3*Math.sin(Math.atan2(wtH,htH)); - - xH = hc+dxH; - yH = vc+dyH; - rI = (rw2 0)?u13:u14; - u16 = u15-enAng; - u17 = u16+rdAngVal3; - u18 = (u16 > 0)?u16:u17; - u19 = u18-cd2; - u20 = u18-rdAngVal3; - u21 = (u19 > 0)?u20:u18; - maxAng = Math.abs(u21); - aAng = (adj2<0)?0:(adj2>maxAng)?maxAng:adj2; - ptAng = enAng+aAng; - wtA = rw3*Math.sin(ptAng); - htA = rh3*Math.cos(ptAng); - //dxA = rw3*Math.cos(Math.atan(wtA/htA)); - //dyA = rh3*Math.sin(Math.atan(wtA/htA)); - dxA = rw3*Math.cos(Math.atan2(wtA,htA)); - dyA = rh3*Math.sin(Math.atan2(wtA,htA)); - - xA = hc+dxA; - yA = vc+dyA; - wtE = rw1*Math.sin(stAng); - htE = rh1*Math.cos(stAng); - - //dxE = rw1*Math.cos(Math.atan(wtE/htE)); - //dyE = rh1*Math.sin(Math.atan(wtE/htE)); - dxE = rw1*Math.cos(Math.atan2(wtE,htE)); - dyE = rh1*Math.sin(Math.atan2(wtE,htE)); - - xE = hc+dxE; - yE = vc+dyE; - dxG = thh*Math.cos(ptAng); - dyG = thh*Math.sin(ptAng); - xG = xH+dxG; - yG = yH+dyG; - dxB = thh*Math.cos(ptAng); - dyB = thh*Math.sin(ptAng); - xB = xH-dxB; - yB = yH-dyB; - sx1 = xB-hc; - sy1 = yB-vc; - sx2 = xG-hc; - sy2 = yG-vc; - rO = (rw10)?q7:0; - sdelO = Math.sqrt(q8); - ndyO = dyO*-1; - sdyO = (ndyO > 0)?-1:1; - q9 = sdyO*dxO; - q10 = q9*sdelO; - q11 = DO*dyO; - dxF1 = (q11+q10)/q4; - q12 = q11-q10; - dxF2 = q12/q4; - adyO = Math.abs(dyO); - q13 = adyO*sdelO; - q14 = DO*dxO/-1; - dyF1 = (q14+q13)/q4; - q15 = q14-q13; - dyF2 = q15/q4; - q16 = x2O-dxF1; - q17 = x2O-dxF2; - q18 = y2O-dyF1; - q19 = y2O-dyF2; - q20 = Math.sqrt(q16*q16 + q18*q18); - q21 = Math.sqrt(q17*q17 + q19*q19); - q22 = q21-q20; - dxF = (q22 > 0)?dxF1:dxF2; - dyF = (q22 > 0)?dyF1:dyF2; - sdxF = dxF*rw1/rO; - sdyF = dyF*rh1/rO; - xF = hc+sdxF; - yF = vc+sdyF; - x1I = sx1*rI/rw2; - y1I = sy1*rI/rh2; - x2I = sx2*rI/rw2; - y2I = sy2*rI/rh2; - dxI = x2I-x1I; - dyI = y2I-y1I; - dI = Math.sqrt(dxI*dxI + dyI*dyI); - v1 = x1I*y2I; - v2 = x2I*y1I; - DI = v1-v2; - v3 = rI*rI; - v4 = dI*dI; - v5 = v3*v4; - v6 = DI*DI; - v7 = v5-v6; - v8 = (v7>0)?v7:0; - sdelI = Math.sqrt(v8); - v9 = sdyO*dxI; - v10 = v9*sdelI; - v11 = DI*dyI; - dxC1 = (v11+v10)/v4; - v12 = v11-v10; - dxC2 = v12/v4; - adyI = Math.abs(dyI); - v13 = adyI*sdelI; - v14 = DI*dxI/-1; - dyC1 = (v14+v13)/v4; - v15 = v14-v13; - dyC2 = v15/v4; - v16 = x1I-dxC1; - v17 = x1I-dxC2; - v18 = y1I-dyC1; - v19 = y1I-dyC2; - v20 = Math.sqrt(v16*v16 + v18*v18); - v21 = Math.sqrt(v17*v17 + v19*v19); - v22 = v21-v20; - dxC = (v22 > 0)?dxC1:dxC2; - dyC = (v22 > 0)?dyC1:dyC2; - sdxC = dxC*rw2/rI; - sdyC = dyC*rh2/rI; - xC = hc+sdxC; - yC = vc+sdyC; - - //ist0 = Math.atan(sdyC/sdxC); - ist0 = Math.atan2(sdyC,sdxC); - - ist1 = ist0+rdAngVal3; - istAng = (ist0 > 0)?ist0:ist1; - isw1 = stAng-istAng; - isw2 = isw1-rdAngVal3; - iswAng = (isw1 > 0)?isw2:isw1; - p1 = xF-xC; - p2 = yF-yC; - p3 = Math.sqrt(p1*p1 + p2*p2); - p4 = p3/2; - p5 = p4-thh; - xGp = (p5 > 0)?xF:xG; - yGp = (p5 > 0)?yF:yG; - xBp = (p5 > 0)?xC:xB; - yBp = (p5 > 0)?yC:yB; - - //en0 = Math.atan(sdyF/sdxF); - en0 = Math.atan2(sdyF,sdxF); - - en1 = en0+rdAngVal3; - en2 = (en0 > 0)?en0:en1; - sw0 = en2-stAng; - sw1 = sw0+rdAngVal3; - swAng = (sw0 > 0)?sw0:sw1; - - var strtAng = stAng*180/Math.PI - var endAng = strtAng + (swAng*180/Math.PI); - var stiAng = istAng*180/Math.PI; - var swiAng = iswAng*180/Math.PI; - var ediAng = stiAng + swiAng; - - var d_val = shapeArc(w/2,h/2,rw1,rh1,strtAng,endAng,false) + - " L" + xGp + "," + yGp + - " L" + xA + "," + yA + - " L" + xBp + "," + yBp + - " L" + xC + "," + yC + - shapeArc(w/2,h/2,rw2,rh2,stiAng,ediAng,false).replace("M","L") + - " z"; - result += ""; - - break; - case "leftCircularArrow": - var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); - var sAdj1,adj1 = 12500*96/914400; - var sAdj2,adj2 = (-1142319/60000)*Math.PI/180; - var sAdj3,adj3 = (1142319/60000)*Math.PI/180; - var sAdj4,adj4 = (10800000/60000)*Math.PI/180; - var sAdj5,adj5 = 12500*96/914400; - if(shapAdjst_ary !== undefined){ - for(var i=0; icnstVal1)?cnstVal1:adj5; - maxAdj1 = a5*2; - a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; - enAng = (adj3rdAngVal2)?rdAngVal2:adj3; - stAng = (adj4<0)?0:(adj4>rdAngVal2)?rdAngVal2:adj4; - th = ss*a1/cnstVal2; - thh = ss*a5/cnstVal2; - th2 = th/2; - rw1 = wd2+th2-thh; - rh1 = hd2+th2-thh; - rw2 = rw1-th; - rh2 = rh1-th; - rw3 = rw2+th2; - rh3 = rh2+th2; - wtH = rw3*Math.sin(enAng); - htH = rh3*Math.cos(enAng); - dxH = rw3*Math.cos(Math.atan2(wtH,htH)); - dyH = rh3*Math.sin(Math.atan2(wtH,htH)); - xH = hc+dxH; - yH = vc+dyH; - rI = (rw2 0)?u13:u14; - u16 = u15-enAng; - u17 = u16+rdAngVal3; - u18 = (u16 > 0)?u16:u17; - u19 = u18-cd2; - u20 = u18-rdAngVal3; - u21 = (u19 > 0)?u20:u18; - u22 = Math.abs(u21); - minAng = u22*-1; - u23 = Math.abs(adj2); - a2 = u23*-1; - aAng = (a20)?0:a2; - ptAng = enAng+aAng; - wtA = rw3*Math.sin(ptAng); - htA = rh3*Math.cos(ptAng); - dxA = rw3*Math.cos(Math.atan2(wtA,htA)); - dyA = rh3*Math.sin(Math.atan2(wtA,htA)); - xA = hc+dxA; - yA = vc+dyA; - wtE = rw1*Math.sin(stAng); - htE = rh1*Math.cos(stAng); - dxE = rw1*Math.cos(Math.atan2(wtE,htE)); - dyE = rh1*Math.sin(Math.atan2(wtE,htE)); - xE = hc+dxE; - yE = vc+dyE; - wtD = rw2*Math.sin(stAng); - htD = rh2*Math.cos(stAng); - dxD = rw2*Math.cos(Math.atan2(wtD,htD)); - dyD = rh2*Math.sin(Math.atan2(wtD,htD)); - xD = hc+dxD; - yD = vc+dyD; - dxG = thh*Math.cos(ptAng); - dyG = thh*Math.sin(ptAng); - xG = xH+dxG; - yG = yH+dyG; - dxB = thh*Math.cos(ptAng); - dyB = thh*Math.sin(ptAng); - xB = xH-dxB; - yB = yH-dyB; - sx1 = xB-hc; - sy1 = yB-vc; - sx2 = xG-hc; - sy2 = yG-vc; - rO = (rw10)?q7:0; - sdelO = Math.sqrt(q8); - ndyO = dyO*-1; - sdyO = (ndyO > 0)?-1:1; - q9 = sdyO*dxO; - q10 = q9*sdelO; - q11 = DO*dyO; - dxF1 = (q11+q10)/q4; - q12 = q11-q10; - dxF2 = q12/q4; - adyO = Math.abs(dyO); - q13 = adyO*sdelO; - q14 = DO*dxO/-1; - dyF1 = (q14+q13)/q4; - q15 = q14-q13; - dyF2 = q15/q4; - q16 = x2O-dxF1; - q17 = x2O-dxF2; - q18 = y2O-dyF1; - q19 = y2O-dyF2; - q20 = Math.sqrt(q16*q16 + q18*q18); - q21 = Math.sqrt(q17*q17 + q19*q19); - q22 = q21-q20; - dxF = (q22 > 0)?dxF1:dxF2; - dyF = (q22 > 0)?dyF1:dyF2; - sdxF = dxF*rw1/rO; - sdyF = dyF*rh1/rO; - xF = hc+sdxF; - yF = vc+sdyF; - x1I = sx1*rI/rw2; - y1I = sy1*rI/rh2; - x2I = sx2*rI/rw2; - y2I = sy2*rI/rh2; - dxI = x2I-x1I; - dyI = y2I-y1I; - dI = Math.sqrt(dxI*dxI + dyI*dyI); - v1 = x1I*y2I; - v2 = x2I*y1I; - DI = v1-v2; - v3 = rI*rI; - v4 = dI*dI; - v5 = v3*v4; - v6 = DI*DI; - v7 = v5-v6; - v8 = (v7>0)?v7:0; - sdelI = Math.sqrt(v8); - v9 = sdyO*dxI; - v10 = v9*sdelI; - v11 = DI*dyI; - dxC1 = (v11+v10)/v4; - v12 = v11-v10; - dxC2 = v12/v4; - adyI = Math.abs(dyI); - v13 = adyI*sdelI; - v14 = DI*dxI/-1; - dyC1 = (v14+v13)/v4; - v15 = v14-v13; - dyC2 = v15/v4; - v16 = x1I-dxC1; - v17 = x1I-dxC2; - v18 = y1I-dyC1; - v19 = y1I-dyC2; - v20 = Math.sqrt(v16*v16 + v18*v18); - v21 = Math.sqrt(v17*v17 + v19*v19); - v22 = v21-v20; - dxC = (v22 > 0)?dxC1:dxC2; - dyC = (v22 > 0)?dyC1:dyC2; - sdxC = dxC*rw2/rI; - sdyC = dyC*rh2/rI; - xC = hc+sdxC; - yC = vc+sdyC; - ist0 = Math.atan2(sdyC,sdxC); - ist1 = ist0+rdAngVal3; - istAng0 = (ist0 > 0)?ist0:ist1; - isw1 = stAng-istAng0; - isw2 = isw1+rdAngVal3; - iswAng0 = (isw1 > 0)?isw1:isw2; - istAng = istAng0+iswAng0; - iswAng = -iswAng0; - p1 = xF-xC; - p2 = yF-yC; - p3 = Math.sqrt(p1*p1 + p2*p2); - p4 = p3/2; - p5 = p4-thh; - xGp = (p5 > 0)?xF:xG; - yGp = (p5 > 0)?yF:yG; - xBp = (p5 > 0)?xC:xB; - yBp = (p5 > 0)?yC:yB; - en0 = Math.atan2(sdyF,sdxF); - en1 = en0+rdAngVal3; - en2 = (en0 > 0)?en0:en1; - sw0 = en2-stAng; - sw1 = sw0-rdAngVal3; - swAng = (sw0 > 0)?sw1:sw0; - stAng0 = stAng+swAng; - - var strtAng = stAng0*180/Math.PI; - var endAng = stAng*180/Math.PI; - var stiAng = istAng*180/Math.PI; - var swiAng = iswAng*180/Math.PI; - var ediAng = stiAng + swiAng; - - var d_val = "M" + xE + "," + yE + - " L" + xD + "," + yD + - shapeArc(w/2,h/2,rw2,rh2,stiAng,ediAng,false).replace("M","L") + - " L" + xBp + "," + yBp + - " L" + xA + "," + yA + - " L" + xGp + "," + yGp + - " L" + xF + "," + yF + - shapeArc(w/2,h/2,rw1,rh1,strtAng,endAng,false).replace("M","L") + - " z"; - result += ""; - - break; - case "leftRightCircularArrow": - case "chartPlus": - case "chartStar": - case "chartX": - case "cornerTabs": - case "flowChartOfflineStorage": - case "folderCorner": - case "funnel": - case "lineInv": - case "nonIsoscelesTrapezoid": - case "plaqueTabs": - case "squareTabs": - case "upDownArrowCallout": - console.log(shapType," -unsupported shape type."); - break; - case undefined: - default: - console.warn("Undefine shape type.("+shapType+")"); - } - - result += ""; - - result += "
"; - - // TextBody - if (node["p:txBody"] !== undefined) { - result += genTextBody(node["p:txBody"], node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); - } - result += "
"; - }else if(custShapType !== undefined){ - //custGeom here - Amir /////////////////////////////////////////////////////// - //http://officeopenxml.com/drwSp-custGeom.php - var pathLstNode = getTextByPathList(custShapType, ["a:pathLst"]); - var pathNode = getTextByPathList(pathLstNode, ["a:path", "attrs"]); - var maxX = parseInt(pathNode["w"]) * 96 / 914400; - var maxY = parseInt(pathNode["h"]) * 96 / 914400; - //console.log("w = "+w+"\nh = "+h+"\nmaxX = "+maxX +"\nmaxY = " + maxY); - //cheke if it is close shape - var closeNode = getTextByPathList(pathLstNode, ["a:path","a:close"]); - var startPoint = getTextByPathList(pathLstNode, ["a:path","a:moveTo","a:pt","attrs"]); - var spX = parseInt(startPoint["x"]) * 96 / 914400; - var spY = parseInt(startPoint["y"]) * 96 / 914400; - var d = "M"+spX+","+spY; - var pathNodes = getTextByPathList(pathLstNode, ["a:path"]); - var lnToNodes = pathNodes["a:lnTo"]; - var cubicBezToNodes = pathNodes["a:cubicBezTo"]; - var arcToNodes = pathNodes["a:arcTo"]; - var sortblAry = []; - if(lnToNodes !== undefined){ - Object.keys(lnToNodes).forEach(function(key) { - var lnToPtNode = lnToNodes[key]["a:pt"]; - if(lnToPtNode !== undefined){ - Object.keys(lnToPtNode).forEach(function(key2) { - var ptObj = {}; - var lnToNoPt = lnToPtNode[key2]; - var ptX = lnToNoPt["attrs","x"]; - var ptY = lnToNoPt["attrs","y"]; - var ptOrdr = lnToNoPt["attrs","order"]; - ptObj.type = "lnto"; - ptObj.order = ptOrdr; - ptObj.x = ptX; - ptObj.y = ptY; - sortblAry.push(ptObj); - //console.log(key2, lnToNoPt); - - }); - } - }); - - } - if(cubicBezToNodes !== undefined){ - Object.keys(cubicBezToNodes).forEach(function(key) { - //console.log("cubicBezTo["+key+"]:"); - var cubicBezToPtNodes = cubicBezToNodes[key]["a:pt"]; - if(cubicBezToPtNodes !== undefined){ - Object.keys(cubicBezToPtNodes).forEach(function(key2) { - //console.log("cubicBezTo["+key+"]pt["+key2+"]:"); - var cubBzPts = cubicBezToPtNodes[key2]; - Object.keys(cubBzPts).forEach(function(key3) { - //console.log(key3, cubBzPts[key3]); - var ptObj = {}; - var cubBzPt = cubBzPts[key3]; - var ptX = cubBzPt["attrs","x"]; - var ptY = cubBzPt["attrs","y"]; - var ptOrdr = cubBzPt["attrs","order"]; - ptObj.type = "cubicBezTo"; - ptObj.order = ptOrdr; - ptObj.x = ptX; - ptObj.y = ptY; - sortblAry.push(ptObj); - }); - }); - } - }); - } - if(arcToNodes !== undefined){ - var arcToNodesAttrs = arcToNodes["attrs"]; - var arcOrder = arcToNodesAttrs["order"]; - var hR = arcToNodesAttrs["hR"]; - var wR = arcToNodesAttrs["wR"]; - var stAng = arcToNodesAttrs["stAng"]; - var swAng = arcToNodesAttrs["swAng"]; - var shftX = 0; - var shftY = 0; - var arcToPtNode = getTextByPathList(arcToNodes, ["a:pt","attrs"]); - if(arcToPtNode !== undefined){ - shftX = arcToPtNode["x"]; - shftY = arcToPtNode["y"]; - //console.log("shftX: ",shftX," shftY: ",shftY) - } - var ptObj = {}; - ptObj.type = "arcTo"; - ptObj.order = arcOrder; - ptObj.hR = hR; - ptObj.wR = wR; - ptObj.stAng = stAng; - ptObj.swAng = swAng; - ptObj.shftX = shftX; - ptObj.shftY = shftY; - sortblAry.push(ptObj); - - } - var sortByOrder = sortblAry.slice(0); - sortByOrder.sort(function(a,b) { - return a.order - b.order; - }); - //console.log(sortByOrder); - var k = 0; - while(k"; - - // TextBody - if (node["p:txBody"] !== undefined) { - result += genTextBody(node["p:txBody"], node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); - } - result += "
"; - - // result = ""; - } else { - - result += "
"; - - // TextBody - if (node["p:txBody"] !== undefined) { - result += genTextBody(node["p:txBody"], node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); - } - result += "
"; - - } - - return result; - } - function shapeStar(adj, starNum){ - var innerRadius = adj; /*1-100*/ - var outerRadius = 100;//star.outerRadius; - var numPoints = starNum;/*1-100*/ - var center = Math.max(innerRadius, outerRadius); - var angle = Math.PI / numPoints; - var points = []; - - for (var i = 0; i < numPoints * 2; i++) { - var radius = i & 1 ? innerRadius : outerRadius; - points.push(center + radius * Math.sin(i * angle)); - points.push(center - radius * Math.cos(i * angle)); - } - - return points; - } - function shapePie(H,w,adj1,adj2,isClose){ - var pieVal = parseInt(adj2); - var piAngle = parseInt(adj1); - var size = parseInt(H), - radius = (size / 2), - value = pieVal - piAngle; - if(value < 0){ - value = 360 + value; - } - //console.log("value: ",value) - value = Math.min(Math.max(value, 0), 360); - - //calculate x,y coordinates of the point on the circle to draw the arc to. - var x = Math.cos((2 * Math.PI)/(360/value)); - var y = Math.sin((2 * Math.PI)/(360/value)); - - - //d is a string that describes the path of the slice. - var longArc, d ,rot; - if(isClose){ - longArc = (value <= 180) ? 0 : 1; - d = "M" + radius + "," + radius + " L" + radius + "," + 0 + " A" + radius + "," + radius + " 0 " + longArc + ",1 " + (radius + y*radius) + "," + (radius - x*radius) +" z"; - rot = "rotate("+(piAngle-270)+", "+radius+", "+radius+")"; - }else{ - longArc = (value <= 180) ? 0 : 1; - var radius1 = radius; - var radius2 = w/2; - d = "M" + radius1 + "," + 0 + " A" + radius2 + "," + radius1 + " 0 " + longArc + ",1 " + (radius2 + y*radius2) + "," + (radius1 - x*radius1); - rot = "rotate("+(piAngle+90)+", "+radius+", "+radius+")"; - } - - return [d,rot]; - } - function shapeGear(w,h,points) { - var innerRadius = h;//gear.innerRadius; - var outerRadius = 1.5*innerRadius; - var cx = outerRadius;//Math.max(innerRadius, outerRadius), // center x - cy = outerRadius;//Math.max(innerRadius, outerRadius), // center y - notches = points,//gear.points, // num. of notches - radiusO = outerRadius, // outer radius - radiusI = innerRadius, // inner radius - taperO = 50, // outer taper % - taperI = 35, // inner taper % - - // pre-calculate values for loop - - pi2 = 2 * Math.PI, // cache 2xPI (360deg) - angle = pi2 / (notches * 2), // angle between notches - taperAI = angle * taperI * 0.005, // inner taper offset (100% = half notch) - taperAO = angle * taperO * 0.005, // outer taper offset - a = angle, // iterator (angle) - toggle = false; - // move to starting point - var d = " M"+(cx + radiusO * Math.cos(taperAO))+" "+ (cy + radiusO * Math.sin(taperAO)); - - // loop - for (; a <= pi2+angle; a += angle) { - // draw inner to outer line - if (toggle) { - d += " L"+(cx + radiusI * Math.cos(a - taperAI)) + "," + (cy + radiusI * Math.sin(a - taperAI)); - d += " L"+(cx + radiusO * Math.cos(a + taperAO)) + "," + (cy + radiusO * Math.sin(a + taperAO)); - }else { // draw outer to inner line - d += " L"+(cx + radiusO * Math.cos(a - taperAO)) + "," + (cy + radiusO * Math.sin(a - taperAO)); // outer line - d += " L"+(cx + radiusI * Math.cos(a + taperAI)) + "," + (cy + radiusI * Math.sin(a + taperAI));// inner line - - } - // switch level - toggle = !toggle; - } - // close the final line - d += " "; - return d; - } - function shapeArc(cX,cY,rX,rY,stAng,endAng , isClose){ - var dData; - var angle = stAng; - if(endAng >= stAng){ - while(angle <= endAng){ - var radians = angle * (Math.PI / 180); // convert degree to radians - var x = cX + Math.cos(radians) * rX; - var y = cY + Math.sin(radians) * rY; - if(angle == stAng){ - dData = " M"+ x + " " + y; - } - dData += " L"+ x + " " + y ; - angle++; - } - }else{ - while(angle > endAng){ - var radians = angle * (Math.PI / 180); // convert degree to radians - var x = cX + Math.cos(radians) * rX; - var y = cY + Math.sin(radians) * rY; - if(angle == stAng){ - dData = " M "+ x + " " + y; - } - dData += " L "+ x + " " + y ; - angle--; - } - } - dData += (isClose?" z":""); - return dData; - } - function shapeSnipRoundRect(w,h,adj1,adj2,shapeType,adjType){ - /* - shapeType: snip,round - adjType: cornr1,cornr2,cornrAll,diag - */ - var adjA,adjB,adjC,adjD; - if(adjType == "cornr1"){ - adjA = 0; - adjB = 0; - adjC = 0; - adjD = adj1; - }else if(adjType == "cornr2"){ - adjA = adj1; - adjB = adj2; - adjC = adj2; - adjD = adj1; - }else if(adjType == "cornrAll"){ - adjA = adj1; - adjB = adj1; - adjC = adj1; - adjD = adj1; - }else if(adjType == "diag"){ - adjA = adj1; - adjB = adj2; - adjC = adj1; - adjD = adj2; - } - //d is a string that describes the path of the slice. - var d; - if(shapeType == "round"){ - d = "M0" + "," + (h/2 + (1-adjB)*(h/2)) + " Q" +0+ "," + h +" " + adjB*(w/2) +"," + h + " L" + (w/2 + (1-adjC)*(w/2)) + "," + h + - " Q" + w + "," + h + " "+ w + "," +(h/2 + (h/2)*(1-adjC)) + "L" + w + "," + (h/2)*adjD + - " Q" + w + "," + 0 + " " + (w/2 + (w/2)*(1-adjD)) + ",0 L" + (w/2)*adjA + ",0" + - " Q" + 0 + "," + 0 + " 0," + (h/2)*(adjA) + " z"; - }else if(shapeType == "snip"){ - d = "M0" + "," + adjA*(h/2) + " L0" + "," + (h/2 + (h/2)*(1-adjB)) + "L" + adjB*(w/2) + "," + h + - " L" + (w/2 + (w/2)*(1-adjC)) + "," + h + "L" + w + "," + (h/2 + (h/2)*(1-adjC)) + - " L" + w + "," + adjD*(h/2) + "L" + (w/2 + (w/2)*(1-adjD)) + ",0 L" + ((w/2)*adjA) + ",0 z"; - } - return d; - } - /* - function shapePolygon(sidesNum) { - var sides = sidesNum; - var radius = 100; - var angle = 2 * Math.PI / sides; - var points = []; - - for (var i = 0; i < sides; i++) { - points.push(radius + radius * Math.sin(i * angle)); - points.push(radius - radius * Math.cos(i * angle)); - } - - return points; - } - */ - function processPicNode(node, warpObj) { - var rtrnData = ""; - var mediaPicFlag = false; - var order = node["attrs"]["order"]; - - var rid = node["p:blipFill"]["a:blip"]["attrs"]["r:embed"]; - var imgName = warpObj["slideResObj"][rid]["target"]; - var imgFileExt = extractFileExtension(imgName).toLowerCase(); - var zip = warpObj["zip"]; - var imgArrayBuffer = zip.file(imgName).asArrayBuffer(); - var mimeType = ""; - var xfrmNode = node["p:spPr"]["a:xfrm"]; - ///////////////////////////////////////Amir////////////////////////////// - var rotate = 0; - var rotateNode = getTextByPathList(node, ["p:spPr","a:xfrm","attrs","rot"]); - if(rotateNode !== undefined){ - rotate = angleToDegrees(rotateNode); - } - //video - var vdoNode = getTextByPathList(node, ["p:nvPicPr","p:nvPr","a:videoFile"]); - var vdoRid,vdoFile,vdoFileExt,vdoMimeType,uInt8Array,blob,vdoBlob,mediaSupportFlag=false; - var mediaProcess = settings.mediaProcess; - if(vdoNode !== undefined & mediaProcess){ - vdoRid = vdoNode["attrs"]["r:link"]; - vdoFile = warpObj["slideResObj"][vdoRid]["target"]; - uInt8Array = zip.file(vdoFile).asArrayBuffer(); - vdoFileExt = extractFileExtension(vdoFile).toLowerCase(); - if(vdoFileExt=="mp4" || vdoFileExt=="webm" || vdoFileExt=="ogg"){ - vdoMimeType = getMimeType(vdoFileExt); - blob = new Blob([uInt8Array], { - type: vdoMimeType - }); - vdoBlob = URL.createObjectURL(blob); - mediaSupportFlag = true; - mediaPicFlag = true; - } - } - //Audio - var audioNode = getTextByPathList(node, ["p:nvPicPr","p:nvPr","a:audioFile"]); - var audioRid,audioFile,audioFileExt,audioMimeType,uInt8ArrayAudio,blobAudio,audioBlob; - var audioPlayerFlag = false; - var audioObjc; - if(audioNode !== undefined & mediaProcess){ - audioRid = audioNode["attrs"]["r:link"]; - audioFile = warpObj["slideResObj"][audioRid]["target"]; - audioFileExt = extractFileExtension(audioFile).toLowerCase(); - if(audioFileExt=="mp3" || audioFileExt=="wav" || audioFileExt=="ogg"){ - uInt8ArrayAudio = zip.file(audioFile).asArrayBuffer(); - blobAudio = new Blob([uInt8ArrayAudio]); - audioBlob = URL.createObjectURL(blobAudio); - var cx = parseInt(xfrmNode["a:ext"]["attrs"]["cx"]) * 20; - var cy = xfrmNode["a:ext"]["attrs"]["cy"]; - var x = parseInt(xfrmNode["a:off"]["attrs"]["x"]) / 2.5; - var y = xfrmNode["a:off"]["attrs"]["y"]; - audioObjc = { - "a:ext" : { - "attrs":{ - "cx":cx, - "cy":cy - } - }, - "a:off":{ - "attrs":{ - "x":x, - "y":y - - } - } - } - audioPlayerFlag = true; - mediaSupportFlag = true; - mediaPicFlag = true; - } - } - //console.log(node) - ////////////////////////////////////////////////////////////////////////// - mimeType = getMimeType(imgFileExt); - rtrnData = "
"; - if((vdoNode === undefined && audioNode === undefined) || !mediaProcess || !mediaSupportFlag){ - rtrnData += ""; - }else if((vdoNode !== undefined || audioNode !== undefined) && mediaProcess && mediaSupportFlag){ - if(vdoNode !== undefined){ - rtrnData += ""; - } - if(audioNode !== undefined){ - rtrnData += ''; - //''+ - //''; - } - } - if(!mediaSupportFlag && mediaPicFlag){ - rtrnData += "This media file Not supported by HTML5"; - } - if((vdoNode !== undefined || audioNode !== undefined) && !mediaProcess && mediaSupportFlag){ - console.log("Founded supported media file but media process disabled (mediaProcess=false)"); - } - rtrnData += "
"; - //console.log(rtrnData) - return rtrnData; - } - - function processGraphicFrameNode(node, warpObj) { - - var result = ""; - var graphicTypeUri = getTextByPathList(node, ["a:graphic", "a:graphicData", "attrs", "uri"]); - - switch (graphicTypeUri) { - case "http://schemas.openxmlformats.org/drawingml/2006/table": - result = genTable(node, warpObj); - break; - case "http://schemas.openxmlformats.org/drawingml/2006/chart": - result = genChart(node, warpObj); - break; - case "http://schemas.openxmlformats.org/drawingml/2006/diagram": - result = genDiagram(node, warpObj); - break; - default: - } - - return result; - } - - function processSpPrNode(node, warpObj) { - - /* - * 2241 - * 2242 - * 2243 - * 2244 - * 2245 - * 2246 - * 2247 - * 2248 - * 2249 - * 2250 - * 2251 - * 2252 - * 2253 - */ - - // TODO: - } - - function genTextBody(textBodyNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj) { - - - var text = ""; - var slideMasterTextStyles = warpObj["slideMasterTextStyles"]; - - if (textBodyNode === undefined) { - return text; - } - //rtl : - // - - //var rtlStr = ""; - if (textBodyNode["a:p"].constructor === Array) { - // multi p - for (var i=0; i"; - text += genBuChar(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); - - if (rNode === undefined) { - // without r - text += genSpanElement(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); - } else if (rNode.constructor === Array) { - // with multi r - for (var j=0; j"; - text += genBuChar(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); - if (rNode === undefined) { - // without r - text += genSpanElement(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); - } else if (rNode.constructor === Array) { - // with multi r - for (var j=0; j"; - } else { - marginLeft = 328600 * 96 / 914400 * lvl; - - bullet = "" + buChar + ""; - } - } else if(buType == "TYPE_NUMERIC") { ///////////Amir/////////////////////////////// - if (buFontAttrs !== undefined) { - var marginLeft = parseInt( getTextByPathList(pPrNode, ["attrs", "marL"]) ) * 96 / 914400; - var marginRight = parseInt(buFontAttrs["pitchFamily"]); - - if (isNaN(marginLeft)) { - marginLeft = 328600 * 96 / 914400; - } - if (isNaN(marginRight)) { - marginRight = 0; - } - //var typeface = buFontAttrs["typeface"]; - - bullet = ""; - } else { - marginLeft = 328600 * 96 / 914400 * lvl; - bullet = ""; - } - - }else if(buType == "TYPE_BULPIC"){ //PIC BULLET - var marginLeft = parseInt( getTextByPathList(pPrNode, ["attrs", "marL"]) ) * 96 / 914400; - var marginRight = parseInt( getTextByPathList(pPrNode, ["attrs", "marR"]) ) * 96 / 914400; - - if (isNaN(marginRight)) { - marginRight = 0; - } - //console.log("marginRight: "+marginRight) - //buPic - if (isNaN(marginLeft)) { - marginLeft = 328600 * 96 / 914400; - }else{ - marginLeft = 0; - } - //var buPicId = getTextByPathList(buPic, ["a:blip","a:extLst","a:ext","asvg:svgBlip" , "attrs", "r:embed"]); - var buPicId = getTextByPathList(buPic, ["a:blip", "attrs", "r:embed"]); - var svgPicPath = ""; - var buImg; - if(buPicId !== undefined){ - //svgPicPath = warpObj["slideResObj"][buPicId]["target"]; - //buImg = warpObj["zip"].file(svgPicPath).asText(); - //}else{ - //buPicId = getTextByPathList(buPic, ["a:blip", "attrs", "r:embed"]); - var imgPath = warpObj["slideResObj"][buPicId]["target"]; - var imgArrayBuffer = warpObj["zip"].file(imgPath).asArrayBuffer(); - var imgExt = imgPath.split(".").pop(); - var imgMimeType = getMimeType(imgExt); - buImg = "" - //console.log("imgPath: "+imgPath+"\nimgMimeType: "+imgMimeType) - } - if(buPicId === undefined){ - buImg = "‣"; - } - bullet = ""+buImg+" "; - ////////////////////////////////////////////////////////////////////////////////////// - } else { - bullet = ""; - } - - return bullet; - } - - function genSpanElement(node, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj) { - - var slideMasterTextStyles = warpObj["slideMasterTextStyles"]; - - var text = node["a:t"]; - if (typeof text !== 'string') { - text = getTextByPathList(node, ["a:fld", "a:t"]); - if (typeof text !== 'string') { - text = " "; - } - } - //console.log("genSpanElement: ",node) - //getFontColor - var fontClrPr = getFontColorPr(node, spNode, type, slideMasterTextStyles); - var styleText = - "color:" + fontClrPr[0] + ";" + - "text-shadow:" + fontClrPr[1] + ";" + - "font-size:" + getFontSize(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) + ";" + - "font-family:" + getFontType(node, type, slideMasterTextStyles) + ";" + - "font-weight:" + getFontBold(node, type, slideMasterTextStyles) + ";" + - "font-style:" + getFontItalic(node, type, slideMasterTextStyles) + ";" + - "text-decoration:" + getFontDecoration(node, type, slideMasterTextStyles) + ";" + - "text-align:" + getTextHorizontalAlign(node, type, slideMasterTextStyles) + ";" + - "vertical-align:" + getTextVerticalAlign(node, type, slideMasterTextStyles) + ";"; - //////////////////Amir/////////////// - var highlight = getTextByPathList(node, ["a:rPr", "a:highlight"]); - if(highlight !== undefined){ - styleText += "background-color:#" + getSolidFill(highlight) +";"; - styleText += "Opacity:"+ getColorOpacity(highlight) + ";"; - } - /////////////////////////////////////////// - var cssName = ""; - - if (styleText in styleTable) { - cssName = styleTable[styleText]["name"]; - } else { - cssName = "_css_" + (Object.keys(styleTable).length + 1); - styleTable[styleText] = { - "name": cssName, - "text": styleText - }; - } - - var linkID = getTextByPathList(node, ["a:rPr", "a:hlinkClick", "attrs", "r:id"]); - //get link colors : TODO - if (linkID !== undefined) { - var linkURL = warpObj["slideResObj"][linkID]["target"]; - return "" + text.replace(/\s/i, " ") + ""; - } else { - return "" + text.replace(/\s/i, " ") + ""; - } - - } - - function genGlobalCSS() { - var cssText = ""; - for (var key in styleTable) { - cssText += "div ." + styleTable[key]["name"] + "{" + styleTable[key]["text"] + "}\n"; //section > div - } - return cssText; - } - - function genTable(node, warpObj) { - - var order = node["attrs"]["order"]; - var tableNode = getTextByPathList(node, ["a:graphic", "a:graphicData", "a:tbl"]); - var xfrmNode = getTextByPathList(node, ["p:xfrm"]); - /////////////////////////////////////////Amir//////////////////////////////////////////////// - var getTblPr = getTextByPathList(node, ["a:graphic", "a:graphicData", "a:tbl","a:tblPr"]); - var getColsGrid = getTextByPathList(node, ["a:graphic", "a:graphicData", "a:tbl","a:tblGrid","a:gridCol"]); - var tblDir = ""; - if(getTblPr !== undefined){ - var isRTL = getTblPr["attrs"]["rtl"]; - tblDir = (isRTL==1?"dir=rtl":"dir=ltr"); - } - var firstRowAttr = getTblPr["attrs"]["firstRow"]; //associated element in the table styles - var firstColAttr = getTblPr["attrs"]["firstCol"]; //associated element in the table styles - var lastRowAttr = getTblPr["attrs"]["lastRow"]; //associated element in the table styles - var lastColAttr = getTblPr["attrs"]["lastCol"]; //associated element in the table styles - var bandRowAttr = getTblPr["attrs"]["bandRow"]; //associated element , in the table styles - var bandColAttr = getTblPr["attrs"]["bandCol"]; //associated element , in the table styles - //console.log(firstColAttr); - //////////////////////////////////////////////////////////////////////////////////////////// - var tableHtml = ""; - - var trNodes = tableNode["a:tr"]; - if (trNodes.constructor === Array) { - for (var i=0; i"; - } - - //get from Theme (tableStyles.xml) TODO - //get tableStyleId = a:tbl => a:tblPr => a:tableStyleId - var thisTblStyle; - var tbleStyleId = getTblPr["a:tableStyleId"]; - if(tbleStyleId !== undefined){ - //get Style from tableStyles.xml by {var tbleStyleId} - //table style object : tableStyles - var tbleStylList = tableStyles["a:tblStyleLst"]["a:tblStyle"]; - if(tbleStylList.constructor === Array){ - for(var k=0;k0 && bandRowAttr!== undefined){ - var fillColor="fff"; - var colorOpacity = 1; - if((i%2)==0){ - if(thisTblStyle["a:band2H"] !==undefined){ - //console.log(thisTblStyle["a:band2H"]); - var bgFillschemeClr = getTextByPathList(thisTblStyle,["a:band2H","a:tcStyle","a:fill","a:solidFill"]); - if(bgFillschemeClr !==undefined){ - fillColor = getSolidFill(bgFillschemeClr); - colorOpacity = getColorOpacity(bgFillschemeClr); - } - //borders color - //borders Width - var borderStyl = getTextByPathList(thisTblStyle,["a:band2H","a:tcStyle","a:tcBdr"]); - if(borderStyl !== undefined){ - var row_borders = getTableBorders(borderStyl); - rowsStyl += row_borders; - } - //console.log(thisTblStyle["a:band2H"]) - - //Text Style - TODO - var rowTxtStyl = getTextByPathList(thisTblStyle,["a:band2H","a:tcTxStyle"]); - if(rowTxtStyl !== undefined){ - - } - //console.log(i,thisTblStyle) - }/*else{ - var bgFillschemeClr = thisTblStyle["a:wholeTbl"]["a:tcStyle"]["a:fill"]["a:solidFill"]; - if(bgFillschemeClr !==undefined){ - fillColor = getSolidFill(bgFillschemeClr); - colorOpacity = getColorOpacity(bgFillschemeClr); - } - //borders color - //borders Width - var borderStyl = thisTblStyle["a:wholeTbl"]["a:tcStyle"]["a:tcBdr"]; - if(borderStyl !== undefined){ - var row_borders = getTableBorders(borderStyl); - rowsStyl += row_borders; - } - //console.log(thisTblStyle["a:wholeTbl"]) - - //Text Style - TODO - var rowTxtStyl = thisTblStyle["a:wholeTbl"]["a:tcTxStyle"]; - if(rowTxtStyl !== undefined){ - - } - }*/ - }else{ - if(thisTblStyle["a:band1H"] !==undefined){ - var bgFillschemeClr = getTextByPathList(thisTblStyle,["a:band1H","a:tcStyle","a:fill","a:solidFill"]); - if(bgFillschemeClr !==undefined){ - fillColor = getSolidFill(bgFillschemeClr); - colorOpacity = getColorOpacity(bgFillschemeClr); - } - //borders color - //borders Width - var borderStyl = getTextByPathList(thisTblStyle,["a:band1H","a:tcStyle","a:tcBdr"]); - if(borderStyl !== undefined){ - var row_borders = getTableBorders(borderStyl); - rowsStyl += row_borders; - } - //console.log(thisTblStyle["a:band1H"]) - - //Text Style - TODO - var rowTxtStyl = getTextByPathList(thisTblStyle,["a:band1H","a:tcTxStyle"]); - if(rowTxtStyl !== undefined){ - - } - } - } - rowsStyl += " background-color:#" + fillColor +";" + - " opacity:" + colorOpacity + ";"; - } - tableHtml += ""; - //////////////////////////////////////////////// - - var tcNodes = trNodes[i]["a:tc"]; - - if (tcNodes.constructor === Array) { - for (var j=0; j a:tblPr => a:tableStyleId - var tbleStyleId = getTblPr["a:tableStyleId"]; - if(tbleStyleId !== undefined){ - //get Style from tableStyles.xml by {var tbleStyleId} - //table style object : tableStyles - var tbleStylList = tableStyles["a:tblStyleLst"]["a:tblStyle"]; - - for(var k=0;k" + text + ""; - } else if (colSpan !== undefined) { - tableHtml += ""; - } else if (vMerge === undefined && hMerge === undefined) { - tableHtml += ""; - } - } - } else { - var text = genTextBody(tcNodes["a:txBody"]); - //Cells Style : TODO /////////////Amir - var colWidthParam = getColsGrid[0]["attrs"]["w"]; - var colStyl = ""; - if(colWidthParam !== undefined){ - var colWidth = parseInt(colWidthParam) * 96 / 914400; - colStyl += "width:" + colWidth +"px;" - } - var getFill = tcNodes["a:tcPr"]["a:solidFill"]; - var fillColor = ""; - var colorOpacity = 1; - if(getFill !== undefined){ - //console.log(getFill); - fillColor = getSolidFill(getFill); - colorOpacity = getColorOpacity(getFill); - }else{ - //get from Theme TODO - } - if(fillColor != ""){ - colStyl += " background-color:#" + fillColor +";" - colStyl += " opacity" + colorOpacity +";"; - } - //////////////////////////////////// - tableHtml += ""; - } - tableHtml += ""; - } - } else { - //////////////row height ////////////Amir - var rowHeightParam = trNodes["attrs"]["h"]; - var rowHeight = 0; - if(rowHeightParam !== undefined){ - rowHeight = parseInt(rowHeightParam) * 96 / 914400; - tableHtml += ""; - }else{ - tableHtml += ""; - } - //////////////////////////////////////////////// - var tcNodes = trNodes["a:tc"]; - if (tcNodes.constructor === Array) { - for (var j=0; j a:tblPr => a:tableStyleId - } - if(fillColor != ""){ - colStyl += " background-color:#" + fillColor +";" - colStyl += " opacity" + colorOpacity +";"; - } - //////////////////////////////////// - tableHtml += ""; - } - } else { - var text = genTextBody(tcNodes["a:txBody"]); - //Cells Style : TODO /////////////Amir - var colWidthParam = getColsGrid[0]["attrs"]["w"]; - var colStyl = ""; - if(colWidthParam !== undefined){ - var colWidth = parseInt(colWidthParam) * 96 / 914400; - colStyl += "width:" + colWidth +"px;" - } - var getFill = tcNodes[j]["a:tcPr"]["a:solidFill"]; - var fillColor = ""; - var colorOpacity = 1; - if(getFill !== undefined){ - //console.log(getFill); - fillColor = getSolidFill(getFill); - colorOpacity = getColorOpacity(getFill); - }else{ - //get from Theme TODO - } - if(fillColor != ""){ - colStyl += " background-color:#" + fillColor +";" - colStyl += " opacity" + colorOpacity +";"; - } - //////////////////////////////////// - tableHtml += ""; - } - tableHtml += ""; - } - - return tableHtml; - } - - function genChart(node, warpObj) { - - var order = node["attrs"]["order"]; - var xfrmNode = getTextByPathList(node, ["p:xfrm"]); - var result = "
"; - - var rid = node["a:graphic"]["a:graphicData"]["c:chart"]["attrs"]["r:id"]; - var refName = warpObj["slideResObj"][rid]["target"]; - var content = readXmlFile(warpObj["zip"], refName); - var plotArea = getTextByPathList(content, ["c:chartSpace", "c:chart", "c:plotArea"]); - - var chartData = null; - for (var key in plotArea) { - switch (key) { - case "c:lineChart": - chartData = { - "type": "createChart", - "data": { - "chartID": "chart" + chartID, - "chartType": "lineChart", - "chartData": extractChartData(plotArea[key]["c:ser"]) - } - }; - break; - case "c:barChart": - chartData = { - "type": "createChart", - "data": { - "chartID": "chart" + chartID, - "chartType": "barChart", - "chartData": extractChartData(plotArea[key]["c:ser"]) - } - }; - break; - case "c:pieChart": - chartData = { - "type": "createChart", - "data": { - "chartID": "chart" + chartID, - "chartType": "pieChart", - "chartData": extractChartData(plotArea[key]["c:ser"]) - } - }; - break; - case "c:pie3DChart": - chartData = { - "type": "createChart", - "data": { - "chartID": "chart" + chartID, - "chartType": "pie3DChart", - "chartData": extractChartData(plotArea[key]["c:ser"]) - } - }; - break; - case "c:areaChart": - chartData = { - "type": "createChart", - "data": { - "chartID": "chart" + chartID, - "chartType": "areaChart", - "chartData": extractChartData(plotArea[key]["c:ser"]) - } - }; - break; - case "c:scatterChart": - chartData = { - "type": "createChart", - "data": { - "chartID": "chart" + chartID, - "chartType": "scatterChart", - "chartData": extractChartData(plotArea[key]["c:ser"]) - } - }; - break; - case "c:catAx": - break; - case "c:valAx": - break; - default: - } - } - - if (chartData !== null) { - MsgQueue.push(chartData); - } - - chartID++; - return result; - } - - function genDiagram(node, warpObj) { - //console.log(warpObj) - //readXmlFile(zip, sldFileName) - /**files define the diagram: - * 1-colors#.xml, - * 2-data#.xml, - * 3-layout#.xml, - * 4-quickStyle#.xml. - * 5-drawing#.xml, which Microsoft added as an extension for persisting diagram layout information. - */ - ///get colors#.xml, data#.xml , layout#.xml , quickStyle#.xml - var order = node["attrs"]["order"]; - var zip = warpObj["zip"]; - var xfrmNode = getTextByPathList(node, ["p:xfrm"]); - var dgmRelIds = getTextByPathList(node, ["a:graphic","a:graphicData","dgm:relIds","attrs"]); - //console.log(dgmRelIds) - var dgmClrFileId = dgmRelIds["r:cs"]; - var dgmDataFileId = dgmRelIds["r:dm"]; - var dgmLayoutFileId = dgmRelIds["r:lo"]; - var dgmQuickStyleFileId = dgmRelIds["r:qs"]; - var dgmClrFileName = warpObj["slideResObj"][dgmClrFileId].target, - dgmDataFileName = warpObj["slideResObj"][dgmDataFileId].target, - dgmLayoutFileName = warpObj["slideResObj"][dgmLayoutFileId].target; - dgmQuickStyleFileName = warpObj["slideResObj"][dgmQuickStyleFileId].target; - //console.log(dgmClrFileName,"\n",dgmDataFileName,"\n",dgmLayoutFileName,"\n",dgmQuickStyleFileName); - var dgmClr = readXmlFile(zip, dgmClrFileName); - var dgmData = readXmlFile(zip, dgmDataFileName); - var dgmLayout = readXmlFile(zip, dgmLayoutFileName); - var dgmQuickStyle = readXmlFile(zip, dgmQuickStyleFileName); - //console.log(dgmClr,dgmData,dgmLayout,dgmQuickStyle) - ///get drawing#.xml - var dgmDrwFileName = ""; - var dataModelExt = getTextByPathList(dgmData, ["dgm:dataModel","dgm:extLst","a:ext","dsp:dataModelExt","attrs"]); - if(dataModelExt !== undefined){ - var dgmDrwFileId = dataModelExt["relId"]; - dgmDrwFileName = warpObj["slideResObj"][dgmDrwFileId]["target"]; - } - //console.log("dgmDrwFileName: ",dgmDrwFileName); - var dgmDrwFile = ""; - if(dgmDrwFileName != ""){ - dgmDrwFile = readXmlFile(zip, dgmDrwFileName); - } - //console.log("dgmDrwFile: ",dgmDrwFile); - //processSpNode(node, warpObj) - var dgmDrwSpArray = getTextByPathList(dgmDrwFile,["dsp:drawing","dsp:spTree","dsp:sp"]); - var rslt=""; - if(dgmDrwSpArray !== undefined){ - var dgmDrwSpArrayLen = dgmDrwSpArray.length; - for(var i=0;i "p:" - } - - return "
"+rslt+"
"; - } - - function getPosition(slideSpNode, slideLayoutSpNode, slideMasterSpNode) { - - var off = undefined; - var x = -1, y = -1; - - if (slideSpNode !== undefined) { - off = slideSpNode["a:off"]["attrs"]; - } else if (slideLayoutSpNode !== undefined) { - off = slideLayoutSpNode["a:off"]["attrs"]; - } else if (slideMasterSpNode !== undefined) { - off = slideMasterSpNode["a:off"]["attrs"]; - } - - if (off === undefined) { - return ""; - } else { - x = parseInt(off["x"]) * 96 / 914400; - y = parseInt(off["y"]) * 96 / 914400; - return (isNaN(x) || isNaN(y)) ? "" : "top:" + y + "px; left:" + x + "px;"; - } - - } - - function getSize(slideSpNode, slideLayoutSpNode, slideMasterSpNode) { - - var ext = undefined; - var w = -1, h = -1; - - if (slideSpNode !== undefined) { - ext = slideSpNode["a:ext"]["attrs"]; - } else if (slideLayoutSpNode !== undefined) { - ext = slideLayoutSpNode["a:ext"]["attrs"]; - } else if (slideMasterSpNode !== undefined) { - ext = slideMasterSpNode["a:ext"]["attrs"]; - } - - if (ext === undefined) { - return ""; - } else { - w = parseInt(ext["cx"]) * 96 / 914400; - h = parseInt(ext["cy"]) * 96 / 914400; - return (isNaN(w) || isNaN(h)) ? "" : "width:" + w + "px; height:" + h + "px;"; - } - - } - - function getHorizontalAlign(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) { - - var algn = getTextByPathList(node, ["a:pPr", "attrs", "algn"]); - if (algn === undefined) { - algn = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:p", "a:pPr", "attrs", "algn"]); - if (algn === undefined) { - algn = getTextByPathList(slideMasterSpNode, ["p:txBody", "a:p", "a:pPr", "attrs", "algn"]); - if (algn === undefined) { - switch (type) { - case "title": - case "subTitle": - case "ctrTitle": - algn = getTextByPathList(slideMasterTextStyles, ["p:titleStyle", "a:lvl1pPr", "attrs", "alng"]); - break; - default: - algn = getTextByPathList(slideMasterTextStyles, ["p:otherStyle", "a:lvl1pPr", "attrs", "alng"]); - } - } - } - } - // TODO: - if (algn === undefined) { - if (type == "title" || type == "subTitle" || type == "ctrTitle") { - return "h-mid"; - } else if (type == "sldNum") { - return "h-right"; - } - } - return algn === "ctr" ? "h-mid" : algn === "r" ? "h-right" : "h-left"; - } - - function getVerticalAlign(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) { - - // ไธŠไธญไธ‹ๅฐ้ฝŠ: X, , - var anchor = getTextByPathList(node, ["p:txBody", "a:bodyPr", "attrs", "anchor"]); - if (anchor === undefined) { - anchor = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:bodyPr", "attrs", "anchor"]); - if (anchor === undefined) { - anchor = getTextByPathList(slideMasterSpNode, ["p:txBody", "a:bodyPr", "attrs", "anchor"]); - } - } - - return anchor === "ctr" ? "v-mid" : anchor === "b" ? "v-down" : "v-up"; - } - - function getFontType(node, type, slideMasterTextStyles) { - var typeface = getTextByPathList(node, ["a:rPr", "a:latin", "attrs", "typeface"]); - - if (typeface === undefined) { - var fontSchemeNode = getTextByPathList(themeContent, ["a:theme", "a:themeElements", "a:fontScheme"]); - if (type == "title" || type == "subTitle" || type == "ctrTitle") { - typeface = getTextByPathList(fontSchemeNode, ["a:majorFont", "a:latin", "attrs", "typeface"]); - } else if (type == "body") { - typeface = getTextByPathList(fontSchemeNode, ["a:minorFont", "a:latin", "attrs", "typeface"]); - } else { - typeface = getTextByPathList(fontSchemeNode, ["a:minorFont", "a:latin", "attrs", "typeface"]); - } - } - - return (typeface === undefined) ? "inherit" : typeface; - } - - function getFontColorPr(node, spNode, type, slideMasterTextStyles) { - //text border using: text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; - //{getFontColor(..) return color} -> getFontColorPr(..) return array[color,textBordr/shadow] - //https://stackoverflow.com/questions/2570972/css-font-border - //https://www.w3schools.com/cssref/css3_pr_text-shadow.asp - //console.log(node) - var rPrNode = getTextByPathList(node, ["a:rPr"]); - var filTyp , color , textBordr; - if(rPrNode !== undefined){ - filTyp = getFillType(rPrNode); - if(filTyp == "SOLID_FILL"){ - var solidFillNode = getTextByPathList(node, ["a:rPr","a:solidFill"]); - color = getSolidFill(solidFillNode); - }else if(filTyp=="PATTERN_FILL"){ - var pattFill = getTextByPathList(node, ["a:rPr","a:pattFill"]); - color = getPatternFill(pattFill); - }else{ - var sPstyle = getTextByPathList(spNode, ["p:style","a:fontRef"]); - if(sPstyle !== undefined){ - color = getSolidFill(sPstyle); - } - } - //console.log(node,filTyp,color) - } - if (color === undefined || color === "FFF"){ - color = "#000"; - }else{ - color = "#" + color; - } - //textBordr - var txtBrdrNode = getTextByPathList(node, ["a:rPr","a:ln"]); - if(txtBrdrNode !== undefined){ - var txBrd = getBorder(node,false,"text"); - var txBrdAry = txBrd.split(" "); - var brdSize = (parseInt(txBrdAry[0].substring(0,txBrdAry[0].indexOf("pt"))) * (4/3)) + "px"; - var brdClr = txBrdAry[2]; - //var brdTyp = txBrdAry[1]; //not in use - textBordr = "-"+ brdSize +" 0 "+brdClr+", 0 "+brdSize+" "+brdClr+", "+brdSize+" 0 "+brdClr+", 0 -"+brdSize+" "+brdClr+";" - //console.log(node,"txBrd: ",textBordr); - }else{ - textBordr = "none"; - } - return [color , textBordr] ; - } - function getFontSize(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) { - var fontSize = undefined; - if (node["a:rPr"] !== undefined) { - fontSize = parseInt(node["a:rPr"]["attrs"]["sz"]) / 100; - } - - if ((isNaN(fontSize) || fontSize === undefined)) { - var sz = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:lstStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); - fontSize = parseInt(sz) / 100; - } - - if (isNaN(fontSize) || fontSize === undefined) { - if (type == "title" || type == "subTitle" || type == "ctrTitle") { - var sz = getTextByPathList(slideMasterTextStyles, ["p:titleStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); - } else if (type == "body") { - var sz = getTextByPathList(slideMasterTextStyles, ["p:bodyStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); - } else if (type == "dt" || type == "sldNum") { - var sz = "1200"; - } else if (type === undefined) { - var sz = getTextByPathList(slideMasterTextStyles, ["p:otherStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); - } - fontSize = parseInt(sz) / 100; - } - - var baseline = getTextByPathList(node, ["a:rPr", "attrs", "baseline"]); - if (baseline !== undefined && !isNaN(fontSize)) { - fontSize -= 10; - } - - return isNaN(fontSize) ? "inherit" : (fontSize + "pt"); - } - - function getFontBold(node, type, slideMasterTextStyles) { - return (node["a:rPr"] !== undefined && node["a:rPr"]["attrs"]["b"] === "1") ? "bold" : "initial"; - } - - function getFontItalic(node, type, slideMasterTextStyles) { - return (node["a:rPr"] !== undefined && node["a:rPr"]["attrs"]["i"] === "1") ? "italic" : "normal"; - } - - function getFontDecoration(node, type, slideMasterTextStyles) { - ///////////////////////////////Amir/////////////////////////////// - if(node["a:rPr"] !== undefined){ - var underLine = node["a:rPr"]["attrs"]["u"] !== undefined? node["a:rPr"]["attrs"]["u"]:"none"; - var strikethrough = node["a:rPr"]["attrs"]["strike"] !== undefined? node["a:rPr"]["attrs"]["strike"]:'noStrike'; - //console.log("strikethrough: "+strikethrough); - - if(underLine != "none" && strikethrough == "noStrike"){ - return "underline"; - }else if(underLine == "none" && strikethrough != "noStrike"){ - return "line-through"; - }else if(underLine != "none" && strikethrough != "noStrike"){ - return "underline line-through"; - }else{ - return "initial"; - } - }else{ - return "initial"; - } - ///////////////////////////////////////////////////////////////// - //return (node["a:rPr"] !== undefined && node["a:rPr"]["attrs"]["u"] === "sng") ? "underline" : "initial"; - } - ////////////////////////////////////Amir///////////////////////////////////// - function getTextHorizontalAlign(node, type, slideMasterTextStyles){ - var getAlgn = getTextByPathList(node, ["a:pPr", "attrs", "algn"]); - var align = "initial"; - if(getAlgn !== undefined){ - switch(getAlgn){ - case "l": - align = "left"; - break; - case "r": - align = "right"; - break; - case "ctr": - align = "center"; - break; - case "just": - align = "justify"; - break; - case "dist": - align = "justify"; - break; - default: - align = "initial"; - } - } - return align; - } - ///////////////////////////////////////////////////////////////////// - function getTextVerticalAlign(node, type, slideMasterTextStyles) { - var baseline = getTextByPathList(node, ["a:rPr", "attrs", "baseline"]); - return baseline === undefined ? "baseline" : (parseInt(baseline) / 1000) + "%"; - } - ///////////////////////////////////Amir///////////////////////////// - function getTextDirection(node, type, slideMasterTextStyles){ - //get lvl - var pprLvl = getTextByPathList(node, ["a:pPr", "attrs", "lvl"]); - var pprLvlNum = pprLvl===undefined?1:Number(pprLvl)+1; - var lvlNode = "a:lvl"+pprLvlNum+"pPr"; - var pprAlgn = getTextByPathList(node, ["a:pPr", "attrs", "algn"]); - var isDir = getTextByPathList(slideMasterTextStyles, ["p:bodyStyle",lvlNode, "attrs", "rtl"]); - //var tmp = getTextByPathList(node, ["a:r", "a:t"]); - var dir = ""; - if (isDir !== undefined){ - if(isDir=="1" && (pprAlgn ===undefined || pprAlgn =="r")){ - dir = "rtl"; - }else{ //isDir =="0" - dir = "ltr"; - } - } - //console.log(tmp,isDir,pprAlgn,dir) - return dir; - } - function getTableBorders(node){ - var borderStyle = ""; - if(node["a:bottom"] !== undefined){ - var obj = { - "p:spPr":{ - "a:ln":node["a:bottom"]["a:ln"] - } - } - var borders = getBorder(obj, false, "shape"); - borderStyle += borders.replace("border","border-bottom"); - } - if(node["a:top"] !== undefined){ - var obj = { - "p:spPr":{ - "a:ln":node["a:top"]["a:ln"] - } - } - var borders = getBorder(obj, false, "shape"); - borderStyle += borders.replace("border","border-top"); - } - if(node["a:right"] !== undefined){ - var obj = { - "p:spPr":{ - "a:ln":node["a:right"]["a:ln"] - } - } - var borders = getBorder(obj, false, "shape"); - borderStyle += borders.replace("border","border-right"); - } - if(node["a:left"] !== undefined){ - var obj = { - "p:spPr":{ - "a:ln":node["a:left"]["a:ln"] - } - } - var borders = getBorder(obj, false, "shape"); - borderStyle += borders.replace("border","border-left"); - } - - return borderStyle; - } - ////////////////////////////////////////////////////////////////// - function getBorder(node, isSvgMode , bType) { - var cssText , lineNode; - if(bType == "shape"){ - cssText = "border: "; - lineNode = node["p:spPr"]["a:ln"]; - }else if(bType=="text"){ - cssText = ""; - lineNode = node["a:rPr"]["a:ln"]; - - } - - // Border width: 1pt = 12700, default = 0.75pt - var borderWidth = parseInt(getTextByPathList(lineNode, ["attrs", "w"])) / 12700; - if (isNaN(borderWidth) || borderWidth < 1) { - cssText += "1pt "; - } else { - cssText += borderWidth + "pt "; - } - // Border type - var borderType = getTextByPathList(lineNode, ["a:prstDash", "attrs", "val"]); - var strokeDasharray = "0"; - switch (borderType) { - case "solid": - cssText += "solid"; - strokeDasharray = "0"; - break; - case "dash": - cssText += "dashed"; - strokeDasharray = "5"; - break; - case "dashDot": - cssText += "dashed"; - strokeDasharray = "5, 5, 1, 5"; - break; - case "dot": - cssText += "dotted"; - strokeDasharray = "1, 5"; - break; - case "lgDash": - cssText += "dashed"; - strokeDasharray = "10, 5"; - break; - case "lgDashDotDot": - cssText += "dashed"; - strokeDasharray = "10, 5, 1, 5, 1, 5"; - break; - case "sysDash": - cssText += "dashed"; - strokeDasharray = "5, 2"; - break; - case "sysDashDot": - cssText += "dashed"; - strokeDasharray = "5, 2, 1, 5"; - break; - case "sysDashDotDot": - cssText += "dashed"; - strokeDasharray = "5, 2, 1, 5, 1, 5"; - break; - case "sysDot": - cssText += "dotted"; - strokeDasharray = "2, 5"; - break; - case undefined: - //console.log(borderType); - default: - cssText += "solid"; - strokeDasharray = "0"; - } - // Border color - var borderColor = getTextByPathList(lineNode, ["a:solidFill", "a:srgbClr", "attrs", "val"]); - if (borderColor === undefined) { - var schemeClrNode = getTextByPathList(lineNode, ["a:solidFill", "a:schemeClr"]); - if(schemeClrNode !== undefined){ - var schemeClr = "a:" + getTextByPathList(schemeClrNode, ["attrs", "val"]); - var borderColor = getSchemeColorFromTheme(schemeClr,undefined); - } - } - - // 2. drawingML namespace - if (borderColor === undefined) { - var schemeClrNode = getTextByPathList(node, ["p:style", "a:lnRef", "a:schemeClr"]); - if(schemeClrNode !== undefined){ - var schemeClr = "a:" + getTextByPathList(schemeClrNode, ["attrs", "val"]); - var borderColor = getSchemeColorFromTheme(schemeClr,undefined); - } - - if (borderColor !== undefined) { - var shade = getTextByPathList(schemeClrNode, ["a:shade", "attrs", "val"]); - if (shade !== undefined) { - shade = parseInt(shade) / 100000; - var color = new colz.Color("#" + borderColor); - color.setLum(color.hsl.l * shade); - borderColor = color.hex.replace("#", ""); - } - } - - } - - if (borderColor === undefined) { - if (isSvgMode) { - borderColor = "none"; - } else { - borderColor = "#000"; - } - } else { - borderColor = "#" + borderColor; - - } - cssText += " " + borderColor + " "; - - - - if (isSvgMode) { - return {"color": borderColor, "width": borderWidth, "type": borderType, "strokeDasharray": strokeDasharray}; - } else { - return cssText + ";"; - } - } - - function getSlideBackgroundFill(slideContent, slideLayoutContent, slideMasterContent,warpObj) { - //console.log(slideContent) - //getFillType(node) - var bgPr = getTextByPathList(slideContent, ["p:sld", "p:cSld","p:bg","p:bgPr"]); - var bgRef = getTextByPathList(slideContent, ["p:sld", "p:cSld","p:bg","p:bgRef"]); - var bgcolor; - if(bgPr !== undefined){ - //bgcolor = "background-color: blue;"; - var bgFillTyp = getFillType(bgPr); - - if(bgFillTyp == "SOLID_FILL"){ - var sldFill = bgPr["a:solidFill"]; - var bgColor = getSolidFill(sldFill); - var sldTint = getColorOpacity(sldFill); - bgcolor = "background: rgba("+ hexToRgbNew(bgColor)+","+ sldTint+");"; - - }else if(bgFillTyp == "GRADIENT_FILL"){ - bgcolor = getBgGradientFill(bgPr, undefined, slideMasterContent); - }else if(bgFillTyp == "PIC_FILL"){ - bgcolor = getBgPicFill(bgPr, "slideBg", warpObj); - - } - //console.log(slideContent,slideMasterContent,color_ary,tint_ary,rot,bgcolor) - }else if(bgRef !== undefined){ - //console.log("slideContent",bgRef) - var phClr; - if (bgRef["a:srgbClr"] !== undefined) { - phClr = getTextByPathList(bgRef,["a:srgbClr","attrs", "val"]); //#... - }else if(bgRef["a:schemeClr"] !== undefined) { //a:schemeClr - var schemeClr = getTextByPathList(bgRef,["a:schemeClr","attrs", "val"]); - phClr = getSchemeColorFromTheme("a:" + schemeClr,slideMasterContent); //#... - //console.log("schemeClr",schemeClr,"phClr=",phClr) - } - var idx = Number(bgRef["attrs"]["idx"]); - - - if(idx == 0 || idx==1000){ - //no background - }else if(idx > 0 && idx < 1000){ - //fillStyleLst in themeContent - //themeContent["a:fmtScheme"]["a:fillStyleLst"] - //bgcolor = "background: red;"; - }else if(idx > 1000 ){ - //bgFillStyleLst in themeContent - //themeContent["a:fmtScheme"]["a:bgFillStyleLst"] - var trueIdx = idx - 1000; - var bgFillLst = themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"]; - var sortblAry = []; - Object.keys(bgFillLst).forEach(function(key) { - var bgFillLstTyp = bgFillLst[key]; - if(key != "attrs"){ - if(bgFillLstTyp.constructor === Array ){ - for(var i=0;i 1000 ){ - //bgFillStyleLst in themeContent - //themeContent["a:fmtScheme"]["a:bgFillStyleLst"] - var trueIdx = idx - 1000; - var bgFillLst = themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"]; - var sortblAry = []; - Object.keys(bgFillLst).forEach(function(key) { - //console.log("cubicBezTo["+key+"]:"); - var bgFillLstTyp = bgFillLst[key]; - if(key != "attrs"){ - if(bgFillLstTyp.constructor === Array ){ - for(var i=0;i a:fillRect =>attrs (l:-17000, r:-17000) - bgcolor = "background-image: url(" + picFillBase64 + "); z-index: " + ordr + ";"; - return bgcolor; - } - function hexToRgbNew(hex) { - var arrBuff = new ArrayBuffer(4); - var vw = new DataView(arrBuff); - vw.setUint32(0,parseInt(hex, 16),false); - var arrByte = new Uint8Array(arrBuff); - - return arrByte[1] + "," + arrByte[2] + "," + arrByte[3]; - } - function getShapeFill(node, isSvgMode, warpObj) { - - // 1. presentationML - // p:spPr/ [a:noFill, solidFill, gradFill, blipFill, pattFill, grpFill] - // From slide - //Fill Type: - //console.log("ShapeFill: ", node) - var fillType = getFillType(getTextByPathList(node, ["p:spPr"])); - var fillColor; - if (fillType == "NO_FILL") { - return isSvgMode ? "none" : "background-color: initial;"; - }else if(fillType == "SOLID_FILL"){ - var shpFill = node["p:spPr"]["a:solidFill"]; - fillColor = getSolidFill(shpFill); - }else if(fillType == "GRADIENT_FILL"){ - var shpFill = node["p:spPr"]["a:gradFill"]; - // fillColor = getSolidFill(shpFill); - fillColor = getGradientFill(shpFill); - //console.log("shpFill",shpFill,grndColor.color) - }else if(fillType == "PATTERN_FILL"){ - var shpFill = node["p:spPr"]["a:pattFill"]; - fillColor = getPatternFill(shpFill); - }else if(fillType == "PIC_FILL"){ - var shpFill = node["p:spPr"]["a:blipFill"]; - fillColor = getPicFill("slideBg",shpFill, warpObj); - } - - - // 2. drawingML namespace - if (fillColor === undefined) { - var clrName = getTextByPathList(node, ["p:style", "a:fillRef"]); - fillColor = getSolidFill(clrName); - } - - if (fillColor !== undefined) { - if(fillType == "GRADIENT_FILL"){ - if (isSvgMode) { - // console.log("GRADIENT_FILL color", fillColor.color[0]) - return fillColor; - } else { - var colorAry = fillColor.color; - var rot = fillColor.rot; - - var bgcolor = "background: linear-gradient("+rot+"deg,"; - for(var i=0;i //Need to test///////////////////////////////////////////// - var defBultColorVals = node["a:scrgbClr"]["attrs"]; - var red = (defBultColorVals["r"].indexOf("%") != -1)?defBultColorVals["r"].split("%").shift():defBultColorVals["r"]; - var green = (defBultColorVals["g"].indexOf("%") != -1)?defBultColorVals["g"].split("%").shift():defBultColorVals["g"]; - var blue = (defBultColorVals["b"].indexOf("%") != -1)?defBultColorVals["b"].split("%").shift():defBultColorVals["b"]; - var scrgbClr = red + "," + green + "," + blue; - color = toHex(255*(Number(red)/100)) + toHex(255*(Number(green)/100)) + toHex(255*(Number(blue)/100)); - //console.log("scrgbClr: " + scrgbClr); - - }else if(node["a:prstClr"] !== undefined){ - // //Need to test///////////////////////////////////////////// - var prstClr = node["a:prstClr"]["attrs"]["val"]; - color = getColorName2Hex(prstClr); - //console.log("prstClr: " + prstClr+" => hexClr: "+color); - }else if(node["a:hslClr"] !== undefined){ - // //Need to test///////////////////////////////////////////// - var defBultColorVals = node["a:hslClr"]["attrs"]; - var hue = Number(defBultColorVals["hue"])/100000; - var sat = Number((defBultColorVals["sat"].indexOf("%") != -1)?defBultColorVals["sat"].split("%").shift():defBultColorVals["sat"])/100; - var lum = Number((defBultColorVals["lum"].indexOf("%") != -1)?defBultColorVals["lum"].split("%").shift():defBultColorVals["lum"])/100; - var hslClr = defBultColorVals["hue"] + "," + defBultColorVals["sat"] + "," + defBultColorVals["lum"]; - var hsl2rgb = hslToRgb(hue, sat, lum); - color = toHex(hsl2rgb.r) + toHex(hsl2rgb.g) + toHex(hsl2rgb.b); - //defBultColor = cnvrtHslColor2Hex(hslClr); //TODO - // console.log("hslClr: " + hslClr); - }else if(node["a:sysClr"] !== undefined){ - // //Need to test///////////////////////////////////////////// - var sysClr = getTextByPathList(node,["a:sysClr","attrs","lastClr"]); - if(sysClr !== undefined){ - color = sysClr; - } - } - return color; - } - function toHex(n) { - var hex = n.toString(16); - while (hex.length < 2) {hex = "0" + hex; } - return hex; - } - function hslToRgb(hue, sat, light) { - var t1, t2, r, g, b; - hue = hue / 60; - if ( light <= 0.5 ) { - t2 = light * (sat + 1); - } else { - t2 = light + sat - (light * sat); - } - t1 = light * 2 - t2; - r = hueToRgb(t1, t2, hue + 2) * 255; - g = hueToRgb(t1, t2, hue) * 255; - b = hueToRgb(t1, t2, hue - 2) * 255; - return {r : r, g : g, b : b}; - } - function hueToRgb(t1, t2, hue) { - if (hue < 0) hue += 6; - if (hue >= 6) hue -= 6; - if (hue < 1) return (t2 - t1) * hue + t1; - else if(hue < 3) return t2; - else if(hue < 4) return (t2 - t1) * (4 - hue) + t1; - else return t1; - } - function getColorName2Hex(name) { - var hex; - var colorName = ['AliceBlue','AntiqueWhite','Aqua','Aquamarine','Azure','Beige','Bisque','Black','BlanchedAlmond','Blue','BlueViolet','Brown','BurlyWood','CadetBlue','Chartreuse','Chocolate','Coral','CornflowerBlue','Cornsilk','Crimson','Cyan','DarkBlue','DarkCyan','DarkGoldenRod','DarkGray','DarkGrey','DarkGreen','DarkKhaki','DarkMagenta','DarkOliveGreen','DarkOrange','DarkOrchid','DarkRed','DarkSalmon','DarkSeaGreen','DarkSlateBlue','DarkSlateGray','DarkSlateGrey','DarkTurquoise','DarkViolet','DeepPink','DeepSkyBlue','DimGray','DimGrey','DodgerBlue','FireBrick','FloralWhite','ForestGreen','Fuchsia','Gainsboro','GhostWhite','Gold','GoldenRod','Gray','Grey','Green','GreenYellow','HoneyDew','HotPink','IndianRed','Indigo','Ivory','Khaki','Lavender','LavenderBlush','LawnGreen','LemonChiffon','LightBlue','LightCoral','LightCyan','LightGoldenRodYellow','LightGray','LightGrey','LightGreen','LightPink','LightSalmon','LightSeaGreen','LightSkyBlue','LightSlateGray','LightSlateGrey','LightSteelBlue','LightYellow','Lime','LimeGreen','Linen','Magenta','Maroon','MediumAquaMarine','MediumBlue','MediumOrchid','MediumPurple','MediumSeaGreen','MediumSlateBlue','MediumSpringGreen','MediumTurquoise','MediumVioletRed','MidnightBlue','MintCream','MistyRose','Moccasin','NavajoWhite','Navy','OldLace','Olive','OliveDrab','Orange','OrangeRed','Orchid','PaleGoldenRod','PaleGreen','PaleTurquoise','PaleVioletRed','PapayaWhip','PeachPuff','Peru','Pink','Plum','PowderBlue','Purple','RebeccaPurple','Red','RosyBrown','RoyalBlue','SaddleBrown','Salmon','SandyBrown','SeaGreen','SeaShell','Sienna','Silver','SkyBlue','SlateBlue','SlateGray','SlateGrey','Snow','SpringGreen','SteelBlue','Tan','Teal','Thistle','Tomato','Turquoise','Violet','Wheat','White','WhiteSmoke','Yellow','YellowGreen']; - var colorHex = ['f0f8ff','faebd7','00ffff','7fffd4','f0ffff','f5f5dc','ffe4c4','000000','ffebcd','0000ff','8a2be2','a52a2a','deb887','5f9ea0','7fff00','d2691e','ff7f50','6495ed','fff8dc','dc143c','00ffff','00008b','008b8b','b8860b','a9a9a9','a9a9a9','006400','bdb76b','8b008b','556b2f','ff8c00','9932cc','8b0000','e9967a','8fbc8f','483d8b','2f4f4f','2f4f4f','00ced1','9400d3','ff1493','00bfff','696969','696969','1e90ff','b22222','fffaf0','228b22','ff00ff','dcdcdc','f8f8ff','ffd700','daa520','808080','808080','008000','adff2f','f0fff0','ff69b4','cd5c5c','4b0082','fffff0','f0e68c','e6e6fa','fff0f5','7cfc00','fffacd','add8e6','f08080','e0ffff','fafad2','d3d3d3','d3d3d3','90ee90','ffb6c1','ffa07a','20b2aa','87cefa','778899','778899','b0c4de','ffffe0','00ff00','32cd32','faf0e6','ff00ff','800000','66cdaa','0000cd','ba55d3','9370db','3cb371','7b68ee','00fa9a','48d1cc','c71585','191970','f5fffa','ffe4e1','ffe4b5','ffdead','000080','fdf5e6','808000','6b8e23','ffa500','ff4500','da70d6','eee8aa','98fb98','afeeee','db7093','ffefd5','ffdab9','cd853f','ffc0cb','dda0dd','b0e0e6','800080','663399','ff0000','bc8f8f','4169e1','8b4513','fa8072','f4a460','2e8b57','fff5ee','a0522d','c0c0c0','87ceeb','6a5acd','708090','708090','fffafa','00ff7f','4682b4','d2b48c','008080','d8bfd8','ff6347','40e0d0','ee82ee','f5deb3','ffffff','f5f5f5','ffff00','9acd32']; - var findIndx = colorName.indexOf(name); - if(findIndx != -1){ - hex = colorHex[findIndx]; - } - return hex; - } - function getColorOpacity(solidFill){ - - if (solidFill === undefined) { - return undefined; - } - var opcity = 1; - - if (solidFill["a:srgbClr"] !== undefined) { - var tint = getTextByPathList(solidFill,["a:srgbClr","a:tint","attrs", "val"]); - if(tint !== undefined){ - opcity = parseInt(tint) / 100000; - } - } else if (solidFill["a:schemeClr"] !== undefined) { - var tint = getTextByPathList(solidFill,["a:schemeClr","a:tint","attrs", "val"]); - if(tint !== undefined){ - opcity = parseInt(tint) / 100000; - } - }else if(solidFill["a:scrgbClr"] !== undefined){ - var tint = getTextByPathList(solidFill,["a:scrgbClr","a:tint","attrs", "val"]); - if(tint !== undefined){ - opcity = parseInt(tint) / 100000; - } - - }else if(solidFill["a:prstClr"] !== undefined){ - var tint = getTextByPathList(solidFill,["a:prstClr","a:tint","attrs", "val"]); - if(tint !== undefined){ - opcity = parseInt(tint) / 100000; - } - }else if(solidFill["a:hslClr"] !== undefined){ - var tint = getTextByPathList(solidFill,["a:hslClr","a:tint","attrs", "val"]); - if(tint !== undefined){ - opcity = parseInt(tint) / 100000; - } - }else if(solidFill["a:sysClr"] !== undefined){ - var tint = getTextByPathList(solidFill,["a:sysClr","a:tint","attrs", "val"]); - if(tint !== undefined){ - opcity = parseInt(tint) / 100000; - } - } - - return opcity; - } - function getSchemeColorFromTheme(schemeClr,sldMasterNode) { - // in slide master - // e.g. tx2="dk2" bg2="lt2" tx1="dk1" bg1="lt1" slideLayoutClrOvride - - if(slideLayoutClrOvride == "" || slideLayoutClrOvride === undefined ){ - slideLayoutClrOvride = getTextByPathList(sldMasterNode,["p:sldMaster","p:clrMap","attrs"]) - } - //console.log(slideLayoutClrOvride); - var schmClrName = schemeClr.substr(2); - if(slideLayoutClrOvride !== undefined){ - switch (schmClrName) { - case "tx1": - case "tx2": - case "bg1": - case "bg2": - schemeClr = "a:"+slideLayoutClrOvride[schmClrName]; - //console.log(schmClrName+ "=> "+schemeClr); - break; - } - }else{ - switch (schmClrName) { - case "tx1": - schemeClr = "a:dk1"; - break; - case "tx2": - schemeClr = "a:dk2"; - break; - case "bg1": - schemeClr = "a:lt1"; - break; - case "bg2": - schemeClr = "a:lt2"; - break; - } - } - var refNode = getTextByPathList(themeContent, ["a:theme", "a:themeElements", "a:clrScheme", schemeClr]); - var color = getTextByPathList(refNode, ["a:srgbClr", "attrs", "val"]); - if (color === undefined && refNode !== undefined) { - color = getTextByPathList(refNode, ["a:sysClr", "attrs", "lastClr"]); - } - //console.log(color) - return color; - } - - function extractChartData(serNode) { - - var dataMat = new Array(); - - if (serNode === undefined) { - return dataMat; - } - - if (serNode["c:xVal"] !== undefined) { - var dataRow = new Array(); - eachElement(serNode["c:xVal"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { - dataRow.push(parseFloat(innerNode["c:v"])); - return ""; - }); - dataMat.push(dataRow); - dataRow = new Array(); - eachElement(serNode["c:yVal"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { - dataRow.push(parseFloat(innerNode["c:v"])); - return ""; - }); - dataMat.push(dataRow); - } else { - eachElement(serNode, function(innerNode, index) { - var dataRow = new Array(); - var colName = getTextByPathList(innerNode, ["c:tx", "c:strRef", "c:strCache", "c:pt", "c:v"]) || index; - - // Category (string or number) - var rowNames = {}; - if (getTextByPathList(innerNode, ["c:cat", "c:strRef", "c:strCache", "c:pt"]) !== undefined) { - eachElement(innerNode["c:cat"]["c:strRef"]["c:strCache"]["c:pt"], function(innerNode, index) { - rowNames[innerNode["attrs"]["idx"]] = innerNode["c:v"]; - return ""; - }); - } else if (getTextByPathList(innerNode, ["c:cat", "c:numRef", "c:numCache", "c:pt"]) !== undefined) { - eachElement(innerNode["c:cat"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { - rowNames[innerNode["attrs"]["idx"]] = innerNode["c:v"]; - return ""; - }); - } - - // Value - if (getTextByPathList(innerNode, ["c:val", "c:numRef", "c:numCache", "c:pt"]) !== undefined) { - eachElement(innerNode["c:val"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { - dataRow.push({x: innerNode["attrs"]["idx"], y: parseFloat(innerNode["c:v"])}); - return ""; - }); - } - - dataMat.push({key: colName, values: dataRow, xlabels: rowNames}); - return ""; - }); - } - - return dataMat; - } - - // ===== Node functions ===== - /** - * getTextByPathStr - * @param {Object} node - * @param {string} pathStr - */ - function getTextByPathStr(node, pathStr) { - return getTextByPathList(node, pathStr.trim().split(/\s+/)); - } - - /** - * getTextByPathList - * @param {Object} node - * @param {string Array} path - */ - function getTextByPathList(node, path) { - - if (path.constructor !== Array) { - throw Error("Error of path type! path is not array."); - } - - if (node === undefined) { - return undefined; - } - - var l = path.length; - for (var i=0; i\n'; - svg += svgAngle; - - for (var i = 0; i < sal; i++) { - svg += ''; - ptrn += ''; - ptrn += ''; - return ptrn; - } - - function processMsgQueue(queue) { - for (var i=0; i 0){ - //console.log("DIV-"+i+":"); - var prevBultTyp = ""; - var prevBultLvl = ""; - var buletIndex = 0; - var tmpArry = new Array(); - var tmpArryIndx = 0; - var buletTypSrry = new Array(); - for(var j=0; j< buSpan.length; j++){ - var bult_typ = $(buSpan[j]).data("bulltname"); - var bult_lvl = $(buSpan[j]).data("bulltlvl"); - //console.log(j+" - "+bult_typ+" lvl: "+bult_lvl ); - if(buletIndex==0){ - prevBultTyp = bult_typ; - prevBultLvl = bult_lvl; - tmpArry[tmpArryIndx] = buletIndex; - buletTypSrry[tmpArryIndx] = bult_typ; - buletIndex++; - }else{ - if(bult_typ == prevBultTyp && bult_lvl == prevBultLvl){ - prevBultTyp = bult_typ; - prevBultLvl = bult_lvl; - buletIndex++; - tmpArry[tmpArryIndx] = buletIndex; - buletTypSrry[tmpArryIndx] = bult_typ; - }else if(bult_typ != prevBultTyp && bult_lvl == prevBultLvl){ - prevBultTyp = bult_typ; - prevBultLvl = bult_lvl; - tmpArryIndx++; - tmpArry[tmpArryIndx] = buletIndex; - buletTypSrry[tmpArryIndx] = bult_typ; - buletIndex = 1; - }else if(bult_typ != prevBultTyp && Number(bult_lvl) > Number(prevBultLvl)){ - prevBultTyp = bult_typ; - prevBultLvl = bult_lvl; - tmpArryIndx++; - tmpArry[tmpArryIndx] = buletIndex; - buletTypSrry[tmpArryIndx] = bult_typ; - buletIndex = 1; - }else if(bult_typ != prevBultTyp && Number(bult_lvl) < Number(prevBultLvl)){ - prevBultTyp = bult_typ; - prevBultLvl = bult_lvl; - tmpArryIndx--; - buletIndex = tmpArry[tmpArryIndx]+1; - } - } - //console.log(buletTypSrry[tmpArryIndx]+" - "+buletIndex); - var numIdx = getNumTypeNum(buletTypSrry[tmpArryIndx],buletIndex); - $(buSpan[j]).html(numIdx); - } - } - } - } - function getNumTypeNum(numTyp,num){ - var rtrnNum = ""; - switch(numTyp){ - case "arabicPeriod": - rtrnNum = num + ". "; - break; - case "arabicParenR": - rtrnNum = num + ") "; - break; - case "alphaLcParenR": - rtrnNum = alphaNumeric(num,"lowerCase") + ") "; - break; - case "alphaLcPeriod": - rtrnNum = alphaNumeric(num,"lowerCase") + ". "; - break; - - case "alphaUcParenR": - rtrnNum = alphaNumeric(num,"upperCase") + ") "; - break; - case "alphaUcPeriod": - rtrnNum = alphaNumeric(num,"upperCase") + ". "; - break; - - case "romanUcPeriod": - rtrnNum = romanize(num) + ". "; - break; - case "romanLcParenR": - rtrnNum = romanize(num) + ") "; - break; - case "hebrew2Minus": - rtrnNum = hebrew2Minus.format(num) + "-"; - break; - default: - rtrnNum = num; - } - return rtrnNum; - } - function romanize (num) { - if (!+num) - return false; - var digits = String(+num).split(""), - key = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM", - "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC", - "","I","II","III","IV","V","VI","VII","VIII","IX"], - roman = "", - i = 3; - while (i--) - roman = (key[+digits.pop() + (i * 10)] || "") + roman; - return Array(+digits.join("") + 1).join("M") + roman; - } - var hebrew2Minus = archaicNumbers([ - [1000,''], - [400,'ืช'], - [300,'ืฉ'], - [200,'ืจ'], - [100,'ืง'], - [90,'ืฆ'], - [80,'ืค'], - [70,'ืข'], - [60,'ืก'], - [50,'ื '], - [40,'ืž'], - [30,'ืœ'], - [20,'ื›'], - [10,'ื™'], - [9,'ื˜'], - [8,'ื—'], - [7,'ื–'], - [6,'ื•'], - [5,'ื”'], - [4,'ื“'], - [3,'ื’'], - [2,'ื‘'], - [1,'ื'], - [/ื™ื”/, 'ื˜ืดื•'], - [/ื™ื•/, 'ื˜ืดื–'], - [/([ื-ืช])([ื-ืช])$/, '$1ืด$2'], - [/^([ื-ืช])$/, "$1ืณ"] - ]); - function archaicNumbers(arr){ - var arrParse = arr.slice().sort(function (a,b) {return b[1].length - a[1].length}); - return { - format: function(n){ - var ret = ''; - jQuery.each(arr, function(){ - var num = this[0]; - if (parseInt(num) > 0){ - for (; n >= num; n -= num) ret += this[1]; - }else{ - ret = ret.replace(num, this[1]); - } - }); - return ret; - } - } - } - function alphaNumeric(num,upperLower){ - num = Number(num)-1; - var aNum = ""; - if(upperLower=="upperCase"){ - aNum = (( (num/26>=1)? String.fromCharCode(num/26+64):'') + String.fromCharCode(num%26+65)).toUpperCase(); - }else if(upperLower=="lowerCase"){ - aNum = (( (num/26>=1)? String.fromCharCode(num/26+64):'') + String.fromCharCode(num%26+65)).toLowerCase(); - } - return aNum; - } - function base64ArrayBuffer(arrayBuffer) { - var base64 = ''; - var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; - var bytes = new Uint8Array(arrayBuffer); - var byteLength = bytes.byteLength; - var byteRemainder = byteLength % 3; - var mainLength = byteLength - byteRemainder; - - var a, b, c, d; - var chunk; - - for (var i = 0; i < mainLength; i = i + 3) { - chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; - a = (chunk & 16515072) >> 18; - b = (chunk & 258048) >> 12; - c = (chunk & 4032) >> 6; - d = chunk & 63; - base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; - } - - if (byteRemainder == 1) { - chunk = bytes[mainLength]; - a = (chunk & 252) >> 2; - b = (chunk & 3) << 4; - base64 += encodings[a] + encodings[b] + '=='; - } else if (byteRemainder == 2) { - chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; - a = (chunk & 64512) >> 10; - b = (chunk & 1008) >> 4; - c = (chunk & 15) << 2; - base64 += encodings[a] + encodings[b] + encodings[c] + '='; - } - - return base64; - } - - function extractFileExtension(filename) { - return filename.substr((~-filename.lastIndexOf(".") >>> 0) + 2); - } - - function escapeHtml(text) { - var map = { - '&': '&', - '<': '<', - '>': '>', - '"': '"', - "'": ''' - }; - return text.replace(/[&<>"']/g, function(m) { return map[m]; }); - } - /////////////////////////////////////tXml/////////////////////////// - /* - This is my custom tXml.js file - */ - function tXml(t,r){"use strict";function e(){for(var r=[];t[l];)if(t.charCodeAt(l)==s){if(t.charCodeAt(l+1)===h)return l=t.indexOf(u,l),l+1&&(l+=1),r;if(t.charCodeAt(l+1)===v){if(t.charCodeAt(l+2)==m){for(;-1!==l&&(t.charCodeAt(l)!==d||t.charCodeAt(l-1)!=m||t.charCodeAt(l-2)!=m||-1==l);)l=t.indexOf(u,l+1);-1===l&&(l=t.length)}else for(l+=2;t.charCodeAt(l)!==d&&t[l];)l++;l++;continue}var e=a();r.push(e)}else{var i=n();i.trim().length>0&&r.push(i),l++}return r}function n(){var r=l;return l=t.indexOf(c,l)-1,-2===l&&(l=t.length),t.slice(r,l+1)}function i(){for(var r=l;-1===A.indexOf(t[l])&&t[l];)l++;return t.slice(r,l)}function a(){var r={};l++,r.tagName=i();for(var n=!1;t.charCodeAt(l)!==d&&t[l];){var a=t.charCodeAt(l);if(a>64&&91>a||a>96&&123>a){for(var f=i(),c=t.charCodeAt(l);c&&c!==p&&c!==g&&!(c>64&&91>c||c>96&&123>c)&&c!==d;)l++,c=t.charCodeAt(l);if(n||(r.attributes={},n=!0),c===p||c===g){var s=o();if(-1===l)return r}else s=null,l--;r.attributes[f]=s}l++}if(t.charCodeAt(l-1)!==h)if("script"==r.tagName){var u=l+1;l=t.indexOf("",l),r.children=[t.slice(u,l-1)],l+=8}else if("style"==r.tagName){var u=l+1;l=t.indexOf("",l),r.children=[t.slice(u,l-1)],l+=7}else-1==C.indexOf(r.tagName)&&(l++,r.children=e(f));else l++;return r}function o(){var r=t[l],e=++l;return l=t.indexOf(r,e),t.slice(e,l)}function f(){var e=new RegExp("\\s"+r.attrName+"\\s*=['\"]"+r.attrValue+"['\"]").exec(t);return e?e.index:-1}r=r||{};var l=r.pos||0,c="<",s="<".charCodeAt(0),u=">",d=">".charCodeAt(0),m="-".charCodeAt(0),h="/".charCodeAt(0),v="!".charCodeAt(0),p="'".charCodeAt(0),g='"'.charCodeAt(0),A="\n >/= ",C=["img","br","input","meta","link"],y=null;if(void 0!==r.attrValue){r.attrName=r.attrName||"id";for(var y=[];-1!==(l=f());)l=t.lastIndexOf("<",l),-1!==l&&y.push(a()),t=t.substr(l),l=0}else y=r.parseNode?a():e();return r.filter&&(y=tXml.filter(y,r.filter)),r.simplify&&(y=tXml.simplify(y)),y.pos=l,y}var _order=1;tXml.simplify=function(t){var r={};if(void 0===t)return{};if(1===t.length&&"string"==typeof t[0])return t[0];t.forEach(function(t){if("object"==typeof t){r[t.tagName]||(r[t.tagName]=[]);var e=tXml.simplify(t.children||[]);r[t.tagName].push(e),t.attributes&&(e.attrs=t.attributes),void 0===e.attrs?e.attrs={order:_order}:e.attrs.order=_order,_order++}});for(var e in r)1==r[e].length&&(r[e]=r[e][0]);return r},tXml.filter=function(t,r){var e=[];return t.forEach(function(t){if("object"==typeof t&&r(t)&&e.push(t),t.children){var n=tXml.filter(t.children,r);e=e.concat(n)}}),e},tXml.stringify=function(t){function r(t){if(t)for(var r=0;r"}var n="";return r(t),n},tXml.toContentString=function(t){if(Array.isArray(t)){var r="";return t.forEach(function(t){r+=" "+tXml.toContentString(t),r=r.trim()}),r}return"object"==typeof t?tXml.toContentString(t.children):" "+t},tXml.getElementById=function(t,r,e){var n=tXml(t,{attrValue:r,simplify:e});return e?n:n[0]},tXml.getElementsByClassName=function(t,r,e){return tXml(t,{attrName:"class",attrValue:"[a-zA-Z0-9-s ]*"+r+"[a-zA-Z0-9-s ]*",simplify:e})},tXml.parseStream=function(t,r){if("function"==typeof r&&(cb=r,r=0),"string"==typeof r&&(r=r.length+2),"string"==typeof t){var e=require("fs");t=e.createReadStream(t,{start:r}),r=0}var n=r,i="",a=0;return t.on("data",function(r){a++,i+=r;for(var e=0;;){n=i.indexOf("<",n)+1;var o=tXml(i,{pos:n,parseNode:!0});if(n=o.pos,n>i.length-1||e>n)return void(e&&(i=i.slice(e),n=0,e=0));t.emit("xml",o),e=n}i=i.slice(n),n=0}),t.on("end",function(){console.log("end")}),t},"object"==typeof module&&(module.exports=tXml); - }; - - /*! - JSZipUtils - A collection of cross-browser utilities to go along with JSZip. - - (c) 2014 Stuart Knightley, David Duponchel - Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. - */ - !function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g 1) { - r = arg[0]; - g = arg[1]; - b = arg[2]; - } else { - r = arg[0][0]; - g = arg[0][1]; - b = arg[0][2]; - } - return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); - }; - rgbToHsl = colz.rgbToHsl = function() { - var arg, r, g, b, h, s, l, d, max, min; - arg = arguments; - if (typeof arg[0] === "number") { - r = arg[0]; - g = arg[1]; - b = arg[2]; - } else { - r = arg[0][0]; - g = arg[0][1]; - b = arg[0][2]; - } - r /= 255; - g /= 255; - b /= 255; - max = Math.max(r, g, b); - min = Math.min(r, g, b); - l = (max + min) / 2; - if (max === min) { - h = s = 0; - } else { - d = max - min; - s = l > 0.5 ? d / (2 - max - min) : d / (max + min); - switch (max) { - case r: - h = (g - b) / d + (g < b ? 6 : 0); - break; - case g: - h = (b - r) / d + 2; - break; - case b: - h = (r - g) / d + 4; - break; - } - h /= 6; - } - h = round(h * 360); - s = round(s * 100); - l = round(l * 100); - return [h, s, l]; - }; - hue2rgb = colz.hue2rgb = function(p, q, t) { - if (t < 0) { - t += 1; - } - if (t > 1) { - t -= 1; - } - if (t < 1 / 6) { - return p + (q - p) * 6 * t; - } - if (t < 1 / 2) { - return q; - } - if (t < 2 / 3) { - return p + (q - p) * (2 / 3 - t) * 6; - } - return p; - }; - hslToRgb = colz.hslToRgb = function() { - var arg, r, g, b, h, s, l, q, p; - arg = arguments; - if (typeof arg[0] === "number") { - h = arg[0] / 360; - s = arg[1] / 100; - l = arg[2] / 100; - } else { - h = arg[0][0] / 360; - s = arg[0][1] / 100; - l = arg[0][2] / 100; - } - if (s === 0) { - r = g = b = l; - } else { - q = l < 0.5 ? l * (1 + s) : l + s - l * s; - p = 2 * l - q; - r = colz.hue2rgb(p, q, h + 1 / 3); - g = colz.hue2rgb(p, q, h); - b = colz.hue2rgb(p, q, h - 1 / 3); - } - return [round(r * 255), round(g * 255), round(b * 255)]; - }; - rgbToHsb = colz.rgbToHsb = function(r, g, b) { - var max, min, h, s, v, d; - r = r / 255; - g = g / 255; - b = b / 255; - max = Math.max(r, g, b); - min = Math.min(r, g, b); - v = max; - d = max - min; - s = max === 0 ? 0 : d / max; - if (max === min) { - h = 0; - } else { - switch (max) { - case r: - h = (g - b) / d + (g < b ? 6 : 0); - break; - case g: - h = (b - r) / d + 2; - break; - case b: - h = (r - g) / d + 4; - break; - } - h /= 6; - } - h = round(h * 360); - s = round(s * 100); - v = round(v * 100); - return [h, s, v]; - }; - hsbToRgb = colz.hsbToRgb = function(h, s, v) { - var r, g, b, i, f, p, q, t; - if (v === 0) { - return [0, 0, 0]; - } - s = s / 100; - v = v / 100; - h = h / 60; - i = Math.floor(h); - f = h - i; - p = v * (1 - s); - q = v * (1 - s * f); - t = v * (1 - s * (1 - f)); - if (i === 0) { - r = v; - g = t; - b = p; - } else if (i === 1) { - r = q; - g = v; - b = p; - } else if (i === 2) { - r = p; - g = v; - b = t; - } else if (i === 3) { - r = p; - g = q; - b = v; - } else if (i === 4) { - r = t; - g = p; - b = v; - } else if (i === 5) { - r = v; - g = p; - b = q; - } - r = Math.floor(r * 255); - g = Math.floor(g * 255); - b = Math.floor(b * 255); - return [r, g, b]; - }; - hsbToHsl = colz.hsbToHsl = function(h, s, b) { - return colz.rgbToHsl(colz.hsbToRgb(h, s, b)); - }; - hsvToHsl = colz.hsvToHsl = colz.hsbToHsl; - hsvToRgb = colz.hsvToRgb = colz.hsbToRgb; - ColorScheme = colz.ColorScheme = function(color_val, angle_array) { - this.palette = []; - if (angle_array === undefined && color_val instanceof Array) { - this.createFromColors(color_val); - } else { - this.createFromAngles(color_val, angle_array); - } - }; - var colorSchemePrototype = ColorScheme.prototype; - colorSchemePrototype.createFromColors = function(color_val) { - for (var i in color_val) { - if (color_val.hasOwnProperty(i)) { - this.palette.push(new Color(color_val[i])); - } - } - return this.palette; - }; - colorSchemePrototype.createFromAngles = function(color_val, angle_array) { - this.palette.push(new Color(color_val)); - for (var i in angle_array) { - if (angle_array.hasOwnProperty(i)) { - var tempHue = (this.palette[0].h + angle_array[i]) % 360; - this.palette.push( - new Color( - colz.hslToRgb([tempHue, this.palette[0].s, this.palette[0].l]) - ) - ); - } - } - return this.palette; - }; - ColorScheme.Compl = function(color_val) { - return new ColorScheme(color_val, [180]); - }; - ColorScheme.Triad = function(color_val) { - return new ColorScheme(color_val, [120, 240]); - }; - ColorScheme.Tetrad = function(color_val) { - return new ColorScheme(color_val, [60, 180, 240]); - }; - ColorScheme.Analog = function(color_val) { - return new ColorScheme(color_val, [-45, 45]); - }; - ColorScheme.Split = function(color_val) { - return new ColorScheme(color_val, [150, 210]); - }; - ColorScheme.Accent = function(color_val) { - return new ColorScheme(color_val, [-45, 45, 180]); - }; - return colz; - }); -}( jQuery )); +/** + * pptxjs.js + * Ver. : 1.10.3 + * last update: 14/05/2018 + * Author: meshesha , https://github.com/meshesha + * LICENSE: MIT + * url:https://meshesha.github.io/pptxjs + * New: + * - new divs2slides (v.1.3.2) + * - fixed div width issue + */ + +(function ( $ ) { + $.fn.pptxToHtml = function( options ) { + //var worker; + var $result = $(this); + var divId = $result.attr("id"); + + var isDone = false; + + var MsgQueue = new Array(); + + var themeContent = null; + + var slideLayoutClrOvride = ""; + + var chartID = 0; + var _order = 1; + var titleFontSize = 42; + var bodyFontSize = 20; + var otherFontSize = 16; + var isSlideMode = false; + var styleTable = {}; + var settings = $.extend(true, { + // These are the defaults. + pptxFileUrl: "", + fileInputId: "", + slidesScale: "", //Change Slides scale by percent + slideMode: false, /** true,false*/ + keyBoardShortCut: false, /** true,false ,condition: slideMode: true XXXXX - need to remove - this is doublcated*/ + mediaProcess: true, /** true,false: if true then process video and audio files */ + jsZipV2: false, + slideModeConfig: { + first: 1, + nav: true, /** true,false : show or not nav buttons*/ + navTxtColor: "black", /** color */ + keyBoardShortCut: true, /** true,false ,condition: */ + showSlideNum: true, /** true,false */ + showTotalSlideNum: true, /** true,false */ + autoSlide:true, /** false or seconds , F8 to active ,keyBoardShortCut: true */ + randomAutoSlide: false, /** true,false ,autoSlide:true */ + loop: false, /** true,false */ + background: false, /** false or color*/ + transition: "default", /** transition type: "slid","fade","default","random" , to show transition efects :transitionTime > 0.5 */ + transitionTime: 1 /** transition time between slides in seconds */ + } + }, options ); + // + $("#"+divId).prepend( + $("").attr({ + "class":"slides-loadnig-msg", + "style":"display:block; color:blue; font-size:20px; width:50%; margin:0 auto;" + }).html("Loading...") + ); + if(settings.slideMode){ + if(!jQuery().divs2slides) { + jQuery.getScript('./js/divs2slides.js'); + } + } + if(settings.jsZipV2 !== false){ + jQuery.getScript(settings.jsZipV2); + if(localStorage.getItem('isPPTXjsReLoaded') !== 'yes') { + localStorage.setItem('isPPTXjsReLoaded', 'yes'); + location.reload(); + } + } + + if(settings.keyBoardShortCut){ + $(document).bind("keydown",function(event){ + event.preventDefault(); + var key = event.keyCode; + //console.log(key,isDone) + if(key==116 && !isSlideMode){ //F5 + isSlideMode = true; + $("#"+divId+" .slide").hide(); + setTimeout(function() { + //if(isDone){ + var slideConf = settings.slideModeConfig; + //console.log(key,isDone,slideConf) + $(".slides-loadnig-msg").remove() + $("#"+divId).divs2slides({ + first: slideConf.first, + nav: slideConf.nav, + showPlayPauseBtn: settings.showPlayPauseBtn, + navTxtColor: slideConf.navTxtColor, + keyBoardShortCut: slideConf.keyBoardShortCut, + showSlideNum: slideConf.showSlideNum, + showTotalSlideNum: slideConf.showTotalSlideNum, + autoSlide: slideConf.autoSlide, + randomAutoSlide: slideConf.randomAutoSlide, + loop: slideConf.loop, + background : slideConf.background, + transition: slideConf.transition, + transitionTime: slideConf.transitionTime + }); + //} + + var sScale = settings.slidesScale; + var trnsfrmScl = ""; + if(sScale != ""){ + var numsScale = parseInt(sScale); + var scaleVal = numsScale/100; + trnsfrmScl = 'transform:scale(' + scaleVal + '); transform-origin:top'; + } + + var numOfSlides = 1; + var sScaleVal = (sScale != "")?scaleVal:1; + var slidesHeight = $("#"+divId+" .slide").height(); + //console.log(slidesHeight); + $("#all_slides_warpper").attr({ + style: trnsfrmScl /*+ ";height: " + (numOfSlides * slidesHeight * sScaleVal) + "px"*/ + }) + }, 1500); + }else if(key==116 && isSlideMode){ + //exit slide mode - TODO + + } + }); + } + if(settings.pptxFileUrl != ""){ + JSZipUtils.getBinaryContent(settings.pptxFileUrl,function(err,content){ + var blob = new Blob([content]); + var file_name = settings.pptxFileUrl; + var fArry = file_name.split("."); + fArry.pop(); + blob.name = fArry[0]; + FileReaderJS.setupBlob(blob, { + readAsDefault: "ArrayBuffer", + on: { + load: function(e, file) { + //console.log(e.target.result); + convertToHtml(e.target.result); + } + } + }); + }); + }else{ + $(".slides-loadnig-msg").remove() + } + if(settings.fileInputId !=""){ + $("#"+settings.fileInputId).on("change", function(evt) { + $result.html(""); + var file = evt.target.files[0]; + // var fileName = file[0].name; + //var fileSize = file[0].size; + var fileType = file.type; + if(fileType=="application/vnd.openxmlformats-officedocument.presentationml.presentation"){ + FileReaderJS.setupBlob(file, { + readAsDefault: "ArrayBuffer", + on: { + load: function(e, file) { + //console.log(e.target.result); + convertToHtml(e.target.result); + } + } + }); + }else{ + alert("This is not pptx file"); + } + }); + } + function convertToHtml(file) { + //'use strict'; + var zip = new JSZip(), s; + //if (typeof file === 'string') { // Load + zip = zip.load(file); //zip.load(file, { base64: true }); + var rslt_ary = processPPTX(zip); + //s = readXmlFile(zip, 'ppt/tableStyles.xml'); + + var slidesHeight = $("#"+divId+" .slide").height(); + + for(var i=0;i" +rslt_ary[i]["data"] + ""); + break; + case "ExecutionTime": + // $result.prepend("
"); + processMsgQueue(MsgQueue); + setNumericBullets($(".block")); + setNumericBullets($("table td")); + + isDone = true; + + if(settings.slideMode && !isSlideMode){ + isSlideMode = true; + $("#"+divId+" .slide").hide(); + setTimeout(function() { + var slideConf = settings.slideModeConfig; + $(".slides-loadnig-msg").remove(); + $("#"+divId).divs2slides({ + first: slideConf.first, + nav: slideConf.nav, + showPlayPauseBtn: settings.showPlayPauseBtn, + navTxtColor: slideConf.navTxtColor, + keyBoardShortCut: slideConf.keyBoardShortCut, + showSlideNum: slideConf.showSlideNum, + showTotalSlideNum: slideConf.showTotalSlideNum, + autoSlide: slideConf.autoSlide, + randomAutoSlide: slideConf.randomAutoSlide, + loop: slideConf.loop, + background : slideConf.background, + transition: slideConf.transition, + transitionTime: slideConf.transitionTime + }); + + var sScale = settings.slidesScale; + var trnsfrmScl = ""; + if(sScale != ""){ + var numsScale = parseInt(sScale); + var scaleVal = numsScale/100; + trnsfrmScl = 'transform:scale(' + scaleVal + '); transform-origin:top'; + } + + var numOfSlides = 1; + var sScaleVal = (sScale != "")?scaleVal:1; + //console.log(slidesHeight); + $("#all_slides_warpper").attr({ + style: trnsfrmScl + ";height: " + (numOfSlides * slidesHeight * sScaleVal) + "px" + }) + + }, 1500); + }else if(!settings.slideMode){ + $(".slides-loadnig-msg").remove(); + } + break; + default: + } + } + if(!settings.slideMode){ + if(document.getElementById("all_slides_warpper") === null){ + $("#" + divId + " .slide").wrapAll("
"); + } + } + var sScale = settings.slidesScale; + var trnsfrmScl = ""; + if(sScale != ""){ + var numsScale = parseInt(sScale); + var scaleVal = numsScale/100; + trnsfrmScl = 'transform:scale(' + scaleVal + '); transform-origin:top'; + } + + var slidesHeight = $("#"+divId+" .slide").height(); + var numOfSlides = $("#"+divId+" .slide").length; + var sScaleVal = (sScale != "")?scaleVal:1; + //console.log("slidesHeight: " + slidesHeight + "\nnumOfSlides: " + numOfSlides + "\nScale: " + sScaleVal) + + $("#all_slides_warpper").attr({ + style: trnsfrmScl + ";height: " + (numOfSlides * slidesHeight * sScaleVal) + "px" + }) + + //} + } + function processPPTX(zip) { + var post_ary = []; + var dateBefore = new Date(); + + if (zip.file("docProps/thumbnail.jpeg") !== null) { + var pptxThumbImg = base64ArrayBuffer(zip.file("docProps/thumbnail.jpeg").asArrayBuffer()); + post_ary.push({ + "type": "pptx-thumb", + "data": pptxThumbImg + }); + } + + var filesInfo = getContentTypes(zip); + var slideSize = getSlideSize(zip); + themeContent = loadTheme(zip); + + tableStyles = readXmlFile(zip, "ppt/tableStyles.xml"); + + post_ary.push({ + "type": "slideSize", + "data": slideSize + }); + + var numOfSlides = filesInfo["slides"].length; + for (var i=0; i===== + // Read relationship filename of the slide (Get slideLayoutXX.xml) + // @sldFileName: ppt/slides/slide1.xml + // @resName: ppt/slides/_rels/slide1.xml.rels + var resName = sldFileName.replace("slides/slide", "slides/_rels/slide") + ".rels"; + var resContent = readXmlFile(zip, resName); + var RelationshipArray = resContent["Relationships"]["Relationship"]; + var layoutFilename = ""; + var slideResObj = {}; + if (RelationshipArray.constructor === Array) { + for (var i=0; i===== + // Read slide master filename of the slidelayout (Get slideMasterXX.xml) + // @resName: ppt/slideLayouts/slideLayout1.xml + // @masterName: ppt/slideLayouts/_rels/slideLayout1.xml.rels + var slideLayoutResFilename = layoutFilename.replace("slideLayouts/slideLayout", "slideLayouts/_rels/slideLayout") + ".rels"; + var slideLayoutResContent = readXmlFile(zip, slideLayoutResFilename); + RelationshipArray = slideLayoutResContent["Relationships"]["Relationship"]; + var masterFilename = ""; + var layoutResObj = {}; + if (RelationshipArray.constructor === Array) { + for (var i=0; i===== + var slideContent = readXmlFile(zip, sldFileName); + var nodes = slideContent["p:sld"]["p:cSld"]["p:spTree"]; + var warpObj = { + "zip": zip, + "slideLayoutTables": slideLayoutTables, + "slideMasterTables": slideMasterTables, + "slideResObj": slideResObj, + "slideMasterTextStyles": slideMasterTextStyles, + "layoutResObj":layoutResObj, + "masterResObj":masterResObj + }; + + var bgColor = getSlideBackgroundFill(slideContent, slideLayoutContent, slideMasterContent,warpObj); + var result = "
" + //result += "
"+getBackgroundShapes(slideContent, slideLayoutContent, slideMasterContent,warpObj) + "
" - TODO + for (var nodeKey in nodes) { + if (nodes[nodeKey].constructor === Array) { + for (var i=0; i"; + } + + function indexNodes(content) { + + var keys = Object.keys(content); + var spTreeNode = content[keys[0]]["p:cSld"]["p:spTree"]; + + var idTable = {}; + var idxTable = {}; + var typeTable = {}; + + for (var key in spTreeNode) { + + if (key == "p:nvGrpSpPr" || key == "p:grpSpPr") { + continue; + } + + var targetNode = spTreeNode[key]; + + if (targetNode.constructor === Array) { + for (var i=0; i"; + + // Procsee all child nodes + for (var nodeKey in node) { + if (node[nodeKey].constructor === Array) { + for (var i=0; i + * 959 + * 960 + * 961 + * 962 + * 963 + * 964 + * 965 + * 966 + */ + + var id = getTextByPathList(node, ["p:nvSpPr","p:cNvPr","attrs","id"]); + var name = getTextByPathList(node, ["p:nvSpPr","p:cNvPr","attrs","name"]); + var idx = (getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph"]) === undefined) ? undefined : getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph","attrs","idx"]); + var type = (getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph"]) === undefined) ? undefined : getTextByPathList(node, ["p:nvSpPr","p:nvPr","p:ph","attrs","type"]); + var order = getTextByPathList(node, ["attrs","order"]); + + var slideLayoutSpNode = undefined; + var slideMasterSpNode = undefined; + + if (type !== undefined) { + if (idx !== undefined) { + slideLayoutSpNode = warpObj["slideLayoutTables"]["typeTable"][type]; + slideMasterSpNode = warpObj["slideMasterTables"]["typeTable"][type]; + } else { + slideLayoutSpNode = warpObj["slideLayoutTables"]["typeTable"][type]; + slideMasterSpNode = warpObj["slideMasterTables"]["typeTable"][type]; + } + } else { + if (idx !== undefined) { + slideLayoutSpNode = warpObj["slideLayoutTables"]["idxTable"][idx]; + slideMasterSpNode = warpObj["slideMasterTables"]["idxTable"][idx]; + } else { + // Nothing + } + } + + if (type === undefined) { + type = getTextByPathList(slideLayoutSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]); + if (type === undefined) { + type = getTextByPathList(slideMasterSpNode, ["p:nvSpPr", "p:nvPr", "p:ph", "attrs", "type"]); + } + } + + return genShape(node, slideLayoutSpNode, slideMasterSpNode, id, name, idx, type, order, warpObj); + } + + function processCxnSpNode(node, warpObj) { + + var id = node["p:nvCxnSpPr"]["p:cNvPr"]["attrs"]["id"]; + var name = node["p:nvCxnSpPr"]["p:cNvPr"]["attrs"]["name"]; + //var idx = (node["p:nvCxnSpPr"]["p:nvPr"]["p:ph"] === undefined) ? undefined : node["p:nvSpPr"]["p:nvPr"]["p:ph"]["attrs"]["idx"]; + //var type = (node["p:nvCxnSpPr"]["p:nvPr"]["p:ph"] === undefined) ? undefined : node["p:nvSpPr"]["p:nvPr"]["p:ph"]["attrs"]["type"]; + //(, ) + var order = node["attrs"]["order"]; + + return genShape(node, undefined, undefined, id, name, undefined, undefined, order, warpObj); + } + + function genShape(node, slideLayoutSpNode, slideMasterSpNode, id, name, idx, type, order, warpObj) { + + var xfrmList = ["p:spPr", "a:xfrm"]; + var slideXfrmNode = getTextByPathList(node, xfrmList); + var slideLayoutXfrmNode = getTextByPathList(slideLayoutSpNode, xfrmList); + var slideMasterXfrmNode = getTextByPathList(slideMasterSpNode, xfrmList); + + var result = ""; + var shpId = getTextByPathList(node, ["attrs","order"]); + //console.log("shpId: ",shpId) + var shapType = getTextByPathList(node, ["p:spPr", "a:prstGeom", "attrs", "prst"]); + + //custGeom - Amir + var custShapType = getTextByPathList(node, ["p:spPr", "a:custGeom"]); + + var isFlipV = false; + if ( getTextByPathList(slideXfrmNode, ["attrs", "flipV"]) === "1" || getTextByPathList(slideXfrmNode, ["attrs", "flipH"]) === "1") { + isFlipV = true; + } + /////////////////////////Amir//////////////////////// + //rotate + var rotate = angleToDegrees(getTextByPathList(slideXfrmNode, ["attrs", "rot"])); + //console.log("rotate: "+rotate); + var txtRotate; + var txtXframeNode = getTextByPathList(node, ["p:txXfrm"]); + if (txtXframeNode !== undefined){ + var txtXframeRot = getTextByPathList(txtXframeNode,["attrs","rot"]); + if (txtXframeRot !== undefined){ + txtRotate = angleToDegrees(txtXframeRot)+90; + } + }else{ + txtRotate = rotate; + } + ////////////////////////////////////////////////// + if (shapType !== undefined || custShapType !== undefined) { + var off = getTextByPathList(slideXfrmNode, ["a:off", "attrs"]); + var x = parseInt(off["x"]) * 96 / 914400; + var y = parseInt(off["y"]) * 96 / 914400; + + var ext = getTextByPathList(slideXfrmNode, ["a:ext", "attrs"]); + var w = parseInt(ext["cx"]) * 96 / 914400; + var h = parseInt(ext["cy"]) * 96 / 914400; + + result += ""; + result += '' + // Fill Color + var fillColor = getShapeFill(node, true,warpObj); + var grndFillFlg = false; + var imgFillFlg = false; + var clrFillType = getFillType(getTextByPathList(node, ["p:spPr"])); + ///////////////////////////////////////// + if(clrFillType == "GRADIENT_FILL"){ + grndFillFlg = true; + var color_arry = fillColor.color; + var angl = fillColor.rot; + var svgGrdnt = getSvgGradient(w,h,angl,color_arry,shpId); + //fill="url(#linGrd)" + result += svgGrdnt ; + }else if(clrFillType == "PIC_FILL"){ + imgFillFlg = true; + var svgBgImg = getSvgImagePattern(fillColor,shpId); + //fill="url(#imgPtrn)" + //console.log(svgBgImg) + result += svgBgImg ; + }else{ + if(clrFillType != "SOLID_FILL" && clrFillType != "PATTERN_FILL" && + (shapType == "arc" || + shapType == "bracketPair" || + shapType == "bracePair" || + shapType == "leftBracket" || + shapType == "leftBrace" || + shapType == "rightBrace" || + shapType == "rightBracket")){ //Temp. solution - TODO + fillColor = "none"; + } + } + // Border Color + var border = getBorder(node, true, "shape"); + + var headEndNodeAttrs = getTextByPathList(node, ["p:spPr", "a:ln", "a:headEnd", "attrs"]); + var tailEndNodeAttrs = getTextByPathList(node, ["p:spPr", "a:ln", "a:tailEnd", "attrs"]); + // type: none, triangle, stealth, diamond, oval, arrow + + if ( (headEndNodeAttrs !== undefined && (headEndNodeAttrs["type"] === "triangle" || headEndNodeAttrs["type"] === "arrow")) || + (tailEndNodeAttrs !== undefined && (tailEndNodeAttrs["type"] === "triangle" || tailEndNodeAttrs["type"] === "arrow")) ) { + var triangleMarker = ""; + result += triangleMarker; + } + result += '' + } + if (shapType !== undefined && custShapType === undefined) { + + switch (shapType) { + case "rect": + case "flowChartProcess": + case "flowChartPredefinedProcess": + case "flowChartInternalStorage": + case "actionButtonBlank": + result += ""; + + if(shapType == "flowChartPredefinedProcess"){ + result += ""; + }else if(shapType == "flowChartInternalStorage"){ + result += " "; + result += " "; + } + break; + case "flowChartCollate": + var d = "M 0,0"+ + " L" + w + "," + 0 + + " L" + 0 + "," + h + + " L" + w + "," + h + + " z"; + result += ""; + + break; + case "flowChartDocument": + var y1, y2,y3,x1; + x1 = w*10800/21600; + y1 = h*17322/21600; + y2 = h*20172/21600; + y3 = h*23922/21600; + var d = "M" + 0+ "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + y1 + + " C" + x1 + "," + y1 + " " + x1 + "," + y3 + " " + 0 + "," + y2 + + " z"; + result += ""; + break; + case "flowChartMultidocument": + var y1,y2,y3,y4,y5,y6,y7,y8,y9,x1,x2,x3,x4,x5,x6,x7; + y1 = h*18022/21600; + y2 = h*3675/21600; + y3 = h*23542/21600; + y4 = h*1815/21600; + y5 = h*16252/21600; + y6 = h*16352/21600; + y7 = h*14392/21600; + y8 = h*20782/21600; + y9 = h*14467/21600; + x1 = w*1532/21600; + x2 = w*20000/21600; + x3 = w*9298/21600; + x4 = w*19298/21600; + x5 = w*18595/21600; + x6 = w*2972/21600; + x7 = w*20800/21600; + var d = "M" + 0 + "," + y2 + + " L" + x5 + "," + y2 + + " L" + x5 + "," + y1 + + " C" + x3 + "," + y1 + " " + x3 + "," + y3 + " " + 0 + "," + y8 + + " z" + + "M" + x1 + "," + y2 + + " L" + x1 + "," + y4 + + " L" + x2 + "," + y4 + + " L" + x2 + "," + y5 + + " C" + x4 + "," + y5 + " " + x5 + "," + y6 + " " + x5 + "," + y6 + + "M" + x6 + "," + y4 + + " L" + x6 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + y7 + + " C" + x7 + "," + y7 + " " + x2 + "," + y9 + " " + x2 + "," + y9; + + result += ""; + break; + case "actionButtonBackPrevious": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + "M" + g11 + "," + vc + + " L" + g12 + "," + g9 + + " L" + g12 + "," + g10 + + " z"; + + result += ""; + + break; + case "actionButtonBeginning": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + g13 = ss*3/4; + g14 = g13/8; + g15 = g13/4; + g16 = g11+g14; + g17 = g11+g15; + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + "M" + g17 + "," + vc + + " L" + g12 + "," + g9 + + " L" + g12 + "," + g10 + + " z" + + "M" + g16 + "," + g9 + + " L" + g11 + "," + g9 + + " L" + g11 + "," + g10 + + " L" + g16 + "," + g10 + + " z"; + + result += ""; + + break; + case "actionButtonDocument": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, dx1, g11, g12, g13, g14, g15; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + dx1 = ss*9/32; + g11 = hc-dx1; + g12 = hc+dx1; + g13 = ss*3/16; + g14 = g12-g13; + g15 = g9+g13; + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" +0 + "," + h + + " z" + + "M" + g11 + "," + g9 + + " L" + g14 + "," + g9 + + " L" + g12 + "," + g15 + + " L" + g12 + "," + g10 + + " L" + g11 + "," + g10 + + " z" + + "M" + g14 + "," + g9 + + " L" + g14 + "," + g15 + + " L" + g12 + "," + g15 + + " z"; + + result += ""; + + break; + case "actionButtonEnd": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + g13 = ss*3/4; + g14 = g13*3/4; + g15 = g13*7/8; + g16 = g11+g14; + g17 = g11+g15; + var d = "M" + 0 + "," + h + + " L" + w + "," + h + + " L" + w + "," + 0 + + " L" + 0 + "," + 0 + + " z" + + " M" + g17 + "," + g9 + + " L" + g12 + "," + g9 + + " L" + g12 + "," + g10 + + " L" + g17 + "," + g10 + + " z" + + " M" + g16 + "," + vc + + " L" + g11 + "," + g9 + + " L" + g11 + "," + g10 + + " z"; + + result += ""; + + break; + case "actionButtonForwardNext": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + + var d = "M" + 0 + "," + h + + " L" + w + "," + h + + " L" + w + "," + 0 + + " L" + 0 + "," + 0 + + " z" + + " M" + g12 + "," + vc + + " L" + g11 + "," + g9 + + " L" + g11 + "," + g10 + + " z"; + + result += ""; + + break; + case "actionButtonHelp": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g11, g13, g14, g15, g16, g19, g20, g21, g23, g24, g27, g29, g30, g31, g33, g36, g37, g41, g42; + + dx2 = ss*3/8; + g9 = vc-dx2; + g11 = hc-dx2; + g13 = ss*3/4; + g14 = g13/7; + g15 = g13*3/14; + g16 = g13*2/7; + g19 = g13*3/7; + g20 = g13*4/7; + g21 = g13*17/28; + g23 = g13*21/28; + g24 = g13*11/14; + g27 = g9+g16; + g29 = g9+g21; + g30 = g9+g23; + g31 = g9+g24; + g33 = g11+g15; + g36 = g11+g19; + g37 = g11+g20; + g41 = g13/14; + g42 = g13*3/28; + var cX1 = g33 + g16; + var cX2 = g36 + g14; + var cY3 = g31 + g42; + var cX4 = (g37+g36+g16)/2; + + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + "M" + g33 + "," + g27+ + shapeArc(cX1,g27,g16,g16,180,360,false).replace("M","L") + + shapeArc(cX4,g27,g14,g15,0,90,false).replace("M","L") + + shapeArc(cX4,g29,g41,g42,270,180,false).replace("M","L") + + " L" + g37 + "," + g30 + + " L" + g36 + "," + g30 + + " L" + g36 + "," + g29 + + shapeArc(cX2,g29,g14,g15,180,270,false).replace("M","L") + + shapeArc(g37,g27,g41,g42,90,0,false).replace("M","L") + + shapeArc(cX1,g27,g14,g14,0,-180,false).replace("M","L") + + " z" + + "M" + hc + "," + g31 + + shapeArc(hc,cY3,g42,g42,270,630,false).replace("M","L") + + " z"; + + result += ""; + + break; + case "actionButtonHome": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26, g27, g28, g29, g30, g31, g32, g33; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + g13 = ss*3/4; + g14 = g13/16; + g15 = g13/8; + g16 = g13*3/16; + g17 = g13*5/16; + g18 = g13*7/16; + g19 = g13*9/16; + g20 = g13*11/16; + g21 = g13*3/4; + g22 = g13*13/16; + g23 = g13*7/8; + g24 = g9+g14; + g25 = g9+g16; + g26 = g9+g17; + g27 = g9+g21; + g28 = g11+g15; + g29 = g11+g18; + g30 = g11+g19; + g31 = g11+g20; + g32 = g11+g22; + g33 = g11+g23; + + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + " M" + hc + "," + g9 + + " L" + g11 + "," + vc + + " L" + g28 + "," + vc + + " L" + g28 + "," + g10 + + " L" + g33 + "," + g10 + + " L" + g33 + "," + vc + + " L" + g12 + "," + vc + + " L" + g32 + "," + g26 + + " L" + g32 + "," + g24 + + " L" + g31 + "," + g24 + + " L" + g31 + "," + g25 + + " z" + + " M" + g29 + "," + g27 + + " L" + g30 + "," + g27 + + " L" + g30 + "," + g10 + + " L" + g29 + "," + g10 + + " z"; + + result += ""; + + break; + case "actionButtonInformation": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g11, g13, g14, g17, g18, g19, g20, g22, g23, g24, g25, g28, g29, g30, g31, g32, g34, g35, g37, g38; + + dx2 = ss*3/8; + g9 = vc-dx2; + g11 = hc-dx2; + g13 = ss*3/4; + g14 = g13/32; + g17 = g13*5/16; + g18 = g13*3/8; + g19 = g13*13/32; + g20 = g13*19/32; + g22 = g13*11/16; + g23 = g13*13/16; + g24 = g13*7/8; + g25 = g9+g14; + g28 = g9+g17; + g29 = g9+g18; + g30 = g9+g23; + g31 = g9+g24; + g32 = g11+g17; + g34 = g11+g19; + g35 = g11+g20; + g37 = g11+g22; + g38 = g13*3/32; + var cY1 = g9 + dx2; + var cY2 = g25 + g38; + + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + "M" + hc + "," + g9 + + shapeArc(hc,cY1,dx2,dx2,270,630,false).replace("M","L") + + " z" + + "M" + hc + "," + g25 + + shapeArc(hc,cY2,g38,g38,270,630,false).replace("M","L") + + "M" + g32 + "," + g28 + + " L" + g35 + "," + g28 + + " L" + g35 + "," + g30 + + " L" + g37 + "," + g30 + + " L" + g37 + "," + g31 + + " L" + g32 + "," + g31 + + " L" + g32 + "," + g30 + + " L" + g34 + "," + g30 + + " L" + g34 + "," + g29 + + " L" + g32 + "," + g29 + + " z"; + + result += ""; + + break; + case "actionButtonMovie": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26, g27, + g28, g29, g30, g31, g32, g33, g34, g35, g36, g37, g38, g39, g40, g41, g42, g43, g44, g45, g46, g47, g48; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + g13 = ss*3/4; + g14 = g13*1455/21600; + g15 = g13*1905/21600; + g16 = g13*2325/21600; + g17 = g13*16155/21600; + g18 = g13*17010/21600; + g19 = g13*19335/21600; + g20 = g13*19725/21600; + g21 = g13*20595/21600; + g22 = g13*5280/21600; + g23 = g13*5730/21600; + g24 = g13*6630/21600; + g25 = g13*7492/21600; + g26 = g13*9067/21600; + g27 = g13*9555/21600; + g28 = g13*13342/21600; + g29 = g13*14580/21600; + g30 = g13*15592/21600; + g31 = g11+g14; + g32 = g11+g15; + g33 = g11+g16; + g34 = g11+g17; + g35 = g11+g18; + g36 = g11+g19; + g37 = g11+g20; + g38 = g11+g21; + g39 = g9+g22; + g40 = g9+g23; + g41 = g9+g24; + g42 = g9+g25; + g43 = g9+g26; + g44 = g9+g27; + g45 = g9+g28; + g46 = g9+g29; + g47 = g9+g30; + g48 = g9+g31; + + var d = "M" + 0 + "," + h + + " L" + w + "," + h + + " L" + w + "," + 0 + + " L" + 0 + "," + 0 + + " z" + + "M" + g11 + "," + g39 + + " L" + g11 + "," + g44 + + " L" + g31 + "," + g44 + + " L" + g32 + "," + g43 + + " L" + g33 + "," + g43 + + " L" + g33 + "," + g47 + + " L" + g35 + "," + g47 + + " L" + g35 + "," + g45 + + " L" + g36 + "," + g45 + + " L" + g38 + "," + g46 + + " L" + g12 + "," + g46 + + " L" + g12 + "," + g41 + + " L" + g38 + "," + g41 + + " L" + g37 + "," + g42 + + " L" + g35 + "," + g42 + + " L" + g35 + "," + g41 + + " L" + g34 + "," + g40 + + " L" + g32 + "," + g40 + + " L" + g31 + "," + g39 + + " z"; + + result += ""; + + break; + case "actionButtonReturn": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26, g27; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + g13 = ss*3/4; + g14 = g13*7/8; + g15 = g13*3/4; + g16 = g13*5/8; + g17 = g13*3/8; + g18 = g13/4; + g19 = g9+g15; + g20 = g9+g16; + g21 = g9+g18; + g22 = g11+g14; + g23 = g11+g15; + g24 = g11+g16; + g25 = g11+g17; + g26 = g11+g18; + g27 = g13/8; + var cX1 = g24 - g27; + var cY2 = g19 - g27; + var cX3 = g11 + g17; + var cY4 = g10 - g17; + + var d = "M" + 0 + "," + h + + " L" + w + "," + h + + " L" + w + "," + 0 + + " L" + 0 + "," + 0 + + " z" + + " M" + g12 + "," + g21 + + " L" + g23 + "," + g9 + + " L" + hc + "," + g21 + + " L" + g24 + "," + g21 + + " L" + g24 + "," + g20 + + shapeArc(cX1,g20,g27,g27,0,90,false).replace("M","L") + + " L" + g25 + "," + g19 + + shapeArc(g25,cY2,g27,g27,90,180,false).replace("M","L") + + " L" + g26 + "," + g21 + + " L" + g11 + "," + g21 + + " L" + g11 + "," + g20 + + shapeArc(cX3,g20,g17,g17,180,90,false).replace("M","L") + + " L" + hc + "," + g10 + + shapeArc(hc,cY4,g17,g17,90,0,false).replace("M","L") + + " L" + g22 + "," + g21 + + " z"; + + result += ""; + + break; + case "actionButtonSound": + var hc = w/2, vc = h/2 , ss=Math.min(w,h); + var dx2, g9, g10, g11, g12, g13, g14, g15, g16, g17, g18, g19, g20, g21, g22, g23, g24, g25, g26; + + dx2 = ss*3/8; + g9 = vc-dx2; + g10 = vc+dx2; + g11 = hc-dx2; + g12 = hc+dx2; + g13 = ss*3/4; + g14 = g13/8; + g15 = g13*5/16; + g16 = g13*5/8; + g17 = g13*11/16; + g18 = g13*3/4; + g19 = g13*7/8; + g20 = g9+g14; + g21 = g9+g15; + g22 = g9+g17; + g23 = g9+g19; + g24 = g11+g15; + g25 = g11+g16; + g26 = g11+g18; + + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + " M" + g11 + "," + g21 + + " L" + g24 + "," + g21 + + " L" + g25 + "," + g9 + + " L" + g25 + "," + g10 + + " L" + g24 + "," + g22 + + " L" + g11 + "," + g22 + + " z" + + " M" + g26 + "," + g21 + + " L" + g12 + "," + g20 + + " M" + g26 + "," + vc + + " L" + g12 + "," + vc + + " M" + g26 + "," + g22 + + " L" + g12 + "," + g23; + + result += ""; + + break; + case "irregularSeal1": + case "irregularSeal2": + if(shapType == "irregularSeal1"){ + var d = "M" + w*10800/21600 + "," + h*5800/21600 + + " L" + w*14522/21600 + "," + 0 + + " L" + w*14155/21600 + "," + h*5325/21600 + + " L" + w*18380/21600 + "," + h*4457/21600 + + " L" + w*16702/21600 + "," + h*7315/21600 + + " L" + w*21097/21600 + "," + h*8137/21600 + + " L" + w*17607/21600 + "," + h*10475/21600 + + " L" + w + "," + h*13290/21600 + + " L" + w*16837/21600 + "," + h*12942/21600 + + " L" + w*18145/21600 + "," + h*18095/21600 + + " L" + w*14020/21600 + "," + h*14457/21600 + + " L" + w*13247/21600 + "," + h*19737/21600 + + " L" + w*10532/21600 + "," + h*14935/21600 + + " L" + w*8485/21600 + "," + h + + " L" + w*7715/21600 + "," + h*15627/21600 + + " L" + w*4762/21600 + "," + h*17617/21600 + + " L" + w*5667/21600 + "," + h*13937/21600 + + " L" + w*135/21600 + "," + h*14587/21600 + + " L" + w*3722/21600 + "," + h*11775/21600 + + " L" + 0 + "," + h*8615/21600 + + " L" + w*4627/21600 + "," + h*7617/21600 + + " L" + w*370/21600 + "," + h*2295/21600 + + " L" + w*7312/21600 + "," + h*6320/21600 + + " L" + w*8352/21600 + "," + h*2295/21600 + + " z"; + }else if(shapType == "irregularSeal2"){ + var d = "M" + w*11462/21600 + "," + h*4342/21600 + + " L" + w*14790/21600 + "," + 0 + + " L" + w*14525/21600 + "," + h*5777/21600 + + " L" + w*18007/21600 + "," + h*3172/21600 + + " L" + w*16380/21600 + "," + h*6532/21600 + + " L" + w + "," + h*6645/21600 + + " L" + w*16985/21600 + "," + h*9402/21600 + + " L" + w*18270/21600 + "," + h*11290/21600 + + " L" + w*16380/21600 + "," + h*12310/21600 + + " L" + w*18877/21600 + "," + h*15632/21600 + + " L" + w*14640/21600 + "," + h*14350/21600 + + " L" + w*14942/21600 + "," + h*17370/21600 + + " L" + w*12180/21600 + "," + h*15935/21600 + + " L" + w*11612/21600 + "," + h*18842/21600 + + " L" + w*9872/21600 + "," + h*17370/21600 + + " L" + w*8700/21600 + "," + h*19712/21600 + + " L" + w*7527/21600 + "," + h*18125/21600 + + " L" + w*4917/21600 + "," + h + + " L" + w*4805/21600 + "," + h*18240/21600 + + " L" + w*1285/21600 + "," + h*17825/21600 + + " L" + w*3330/21600 + "," + h*15370/21600 + + " L" + 0 + "," + h*12877/21600 + + " L" + w*3935/21600 + "," + h*11592/21600 + + " L" + w*1172/21600 + "," + h*8270/21600 + + " L" + w*5372/21600 + "," + h*7817/21600 + + " L" + w*4502/21600 + "," + h*3625/21600 + + " L" + w*8550/21600 + "," + h*6382/21600 + + " L" + w*9722/21600 + "," + h*1887/21600 + + " z"; + } + result += ""; + break; + case "flowChartTerminator": + var x1, x2, y1, cd2=180,cd4=90,c3d4=270; + x1 = w*3475/21600; + x2 = w*18125/21600; + y1 = h*10800/21600; + //path attrs: w = 21600; h = 21600; + var d = "M" + x1 + "," + 0 + + " L" + x2 + "," + 0 + + shapeArc(x2,h/2,x1,y1,c3d4,c3d4+cd2,false).replace("M","L") + + " L" + x1 + "," + h + + shapeArc(x1,h/2,x1,y1,cd4,cd4+cd2,false).replace("M","L") + + " z"; + result += ""; + break; + case "flowChartPunchedTape": + var x1, x1,y1,y2, cd2=180; + x1 = w*5/20; + y1 = h*2/20; + y2 = h*18/20; + var d = "M" + 0 + "," + y1 + + shapeArc(x1,y1,x1,y1,cd2,0,false).replace("M","L") + + shapeArc(w*(3/4),y1,x1,y1,cd2,360,false).replace("M","L") + + " L" + w + "," + y2 + + shapeArc(w*(3/4),y2,x1,y1,0,-cd2,false).replace("M","L") + + shapeArc(x1,y2,x1,y1,0,cd2,false).replace("M","L") + + " z"; + result += ""; + break; + case "flowChartOnlineStorage": + var x1, y1,c3d4=270,cd4=90; + x1 = w*1/6; + y1 = h*3/6; + var d = "M" + x1 + "," + 0 + + " L" + w + "," + 0 + + shapeArc(w,h/2,x1,y1,c3d4,90,false).replace("M","L") + + " L" + x1 + "," + h + + shapeArc(x1,h/2,x1,y1,cd4,270,false).replace("M","L") + + " z"; + result += ""; + break; + case "flowChartDisplay": + var x1, x2, y1,c3d4=270,cd2=180; + x1 = w*1/6; + x2 = w*5/6; + y1 = h*3/6; + //path attrs: w = 6; h = 6; + var d = "M" + 0 + "," + y1 + + " L" + x1 + "," + 0 + + " L" + x2 + "," + 0 + + shapeArc(w,h/2,x1,y1,c3d4,c3d4+cd2,false).replace("M","L") + + " L" + x1 + "," + h + + " z"; + result += ""; + break; + case "flowChartDelay": + var wd2=w/2,hd2=h/2, cd2=180 ,c3d4=270,cd4=90; + var d = "M" + 0 + "," + 0 + + " L" + wd2 + "," + 0 + + shapeArc(wd2,hd2,wd2,hd2,c3d4,c3d4+cd2,false).replace("M","L") + + " L" + 0 + "," + h + + " z"; + result += ""; + break; + case "flowChartMagneticTape": + var wd2=w/2,hd2=h/2, cd2=180 ,c3d4=270,cd4=90; + var idy,ib,ang1; + idy = hd2*Math.sin(Math.PI/4); + ib = hd2+idy; + ang1 = Math.atan(h/w); + var ang1Dg = ang1*180/Math.PI; + var d = "M" + wd2 + "," + h + + shapeArc(wd2,hd2,wd2,hd2,cd4,cd2,false).replace("M","L") + + shapeArc(wd2,hd2,wd2,hd2,cd2,c3d4,false).replace("M","L") + + shapeArc(wd2,hd2,wd2,hd2,c3d4,360,false).replace("M","L") + + shapeArc(wd2,hd2,wd2,hd2,0,ang1Dg,false).replace("M","L") + + " L" + w + "," + ib + + " L" + w + "," + h + + " z"; + result += ""; + break; + case "ellipse": + case "flowChartConnector": + case "flowChartSummingJunction": + case "flowChartOr": + result += ""; + if(shapType == "flowChartOr"){ + result += " "; + result += " "; + }else if(shapType == "flowChartSummingJunction"){ + var idx, idy, il, ir, it, ib , hc = w/2 , vc = h/2 ,wd2=w/2, hd2 = h/2 ; + var angVal = Math.PI/4; + idx = wd2*Math.cos(angVal); + idy = hd2*Math.sin(angVal); + il = hc-idx; + ir = hc+idx; + it = vc-idy; + ib = vc+idy; + result += " "; + result += " "; + } + break; + case "roundRect": + case "round1Rect": + case "round2DiagRect": + case "round2SameRect": + case "snip1Rect": + case "snip2DiagRect": + case "snip2SameRect": + case "flowChartAlternateProcess": + case "flowChartPunchedCard": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val;// = 0.33334; + var sAdj2,sAdj2_val;// = 0.33334; + var shpTyp, adjTyp; + if(shapAdjst_ary !== undefined && shapAdjst_ary.constructor === Array){ + for(var i=0; i"; + break; + case "snipRoundRect": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val = 0.33334; + var sAdj2,sAdj2_val = 0.33334; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + break; + case "bentConnector2": + var d = ""; + if (isFlipV) { + d = "M 0 " + w + " L " + h + " " + w + " L " + h + " 0"; + } else { + d = "M " + w + " 0 L " + w + " " + h + " L 0 " + h; + } + result += ""; + break; + case "triangle": + case "flowChartExtract": + case "flowChartMerge": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var shapAdjst_val = 0.5; + if(shapAdjst !== undefined){ + shapAdjst_val = parseInt(shapAdjst.substr(4)) * 96 / 9144000; + //console.log("w: "+w+"\nh: "+h+"\nshapAdjst: "+shapAdjst+"\nshapAdjst_val: "+shapAdjst_val); + } + var tranglRott = ""; + if(shapType == "flowChartMerge"){ + tranglRott = "transform='rotate(180 " + w/2 +"," + h/2 + ")'"; + } + result += " "; + break; + case "diamond": + case "flowChartDecision": + case "flowChartSort": + result += " "; + if(shapType == "flowChartSort"){ + result += " "; + } + break; + case "trapezoid": + case "flowChartManualOperation": + case "flowChartManualInput": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var adjst_val = 0.2; + var max_adj_const = 0.7407; + if(shapAdjst !== undefined){ + var adjst = parseInt(shapAdjst.substr(4)) * 96 / 9144000; + adjst_val = (adjst*0.5)/max_adj_const; + // console.log("w: "+w+"\nh: "+h+"\nshapAdjst: "+shapAdjst+"\nadjst_val: "+adjst_val); + } + var cnstVal = 0; + var tranglRott = ""; + if(shapType == "flowChartManualOperation"){ + tranglRott = "transform='rotate(180 " + w/2 +"," + h/2 + ")'"; + } + if(shapType == "flowChartManualInput"){ + adjst_val = 0; + cnstVal = h/5; + } + result += " "; + break; + case "parallelogram": + case "flowChartInputOutput": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var adjst_val = 0.25; + var max_adj_const; + if(w > h){ + max_adj_const = w/h; + }else{ + max_adj_const = h/w; + } + if(shapAdjst !== undefined){ + var adjst = parseInt(shapAdjst.substr(4)) /100000; + adjst_val = adjst/max_adj_const; + //console.log("w: "+w+"\nh: "+h+"\nadjst: "+adjst_val+"\nmax_adj_const: "+max_adj_const); + } + result += " "; + break; + + break; + case "pentagon": + result += " "; + break; + case "hexagon": + case "flowChartPreparation": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 25000*96/914400; + var vf = 115470*96/914400;; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var angVal1 = 60*Math.PI/180; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var maxAdj, a, shd2, x1, x2, dy1, y1, y2 , vc = h/2 ,hd2=h/2; + var ss = Math.min(w,h); + maxAdj = cnstVal1*w/ss; + a = (adj<0)?0:(adj>maxAdj)?maxAdj:adj; + shd2 = hd2*vf/cnstVal2; + x1 = ss*a/cnstVal2; + x2 = w-x1; + dy1 = shd2*Math.sin(angVal1); + y1 = vc-dy1; + y2 = vc+dy1; + + var d = "M" + 0 + "," + vc + + " L" + x1 + "," + y1 + + " L" + x2 + "," + y1 + + " L" + w + "," + vc + + " L" + x2 + "," + y2 + + " L" + x1 + "," + y2 + + " z"; + + result += ""; + break; + case "heptagon": + result += " "; + break; + case "octagon": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var adj1 = 0.25; + if(shapAdjst !== undefined){ + adj1 = parseInt(shapAdjst.substr(4)) /100000; + + } + var adj2 = (1-adj1); + //console.log("adj1: "+adj1+"\nadj2: "+adj2); + result += " "; + + break; + case "decagon": + result += " "; + break; + case "dodecagon": + result += " "; + break; + case "star4": + case "star5": + case "star6": + case "star7": + case "star8": + case "star10": + case "star12": + case "star16": + case "star24": + case "star32": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]);//[0]["attrs"]["fmla"]; + var starNum = shapType.substr(4); + var shapAdjst1 , adj; + switch(starNum){ + case "4": + adj = 30; + break; + case "5": + adj = 40; + break; + case "6": + adj = 60; + break; + case "7": + adj = 70; + break; + case "8": + adj = 77; + break; + case "10": + adj = 86; + break; + case "12": + case "16": + case "24": + case "32": + adj = 75; + break; + } + if(shapAdjst !== undefined){ + shapAdjst1 = getTextByPathList(shapAdjst, ["attrs", "fmla"]); + if(shapAdjst1 === undefined){ + shapAdjst1 = shapAdjst[0]["attrs"]["fmla"]; + } + if(shapAdjst1 !== undefined){ + adj = 2*parseInt(shapAdjst1.substr(4)) /1000; + } + } + + var points = shapeStar(adj,starNum); + result += " "; + break; + case "pie": + case "pieWedge": + case "arc": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var adj1, adj2 ,H, shapAdjst1 , shapAdjst2 ,isClose; + if(shapType == "pie"){ + adj1 = 0; + adj2 = 270; + H = h; + isClose = true; + }else if(shapType == "pieWedge"){ + adj1 = 180; + adj2 = 270; + H = 2*h; + isClose = true; + }else if(shapType == "arc"){ + adj1 = 270; + adj2 = 0; + H = h; + isClose = false; + } + if(shapAdjst !== undefined){ + shapAdjst1 = getTextByPathList(shapAdjst, ["attrs", "fmla"]); + shapAdjst2 = shapAdjst1; + if(shapAdjst1 === undefined){ + shapAdjst1 = shapAdjst[0]["attrs"]["fmla"]; + shapAdjst2 = shapAdjst[1]["attrs"]["fmla"]; + } + if(shapAdjst1 !== undefined){ + adj1 = parseInt(shapAdjst1.substr(4)) /60000; + } + if(shapAdjst2 !== undefined){ + adj2 = parseInt(shapAdjst2.substr(4)) /60000; + } + } + var pieVals = shapePie(H,w,adj1,adj2,isClose); + //console.log("shapType: ",shapType,"\nimgFillFlg: ",imgFillFlg,"\ngrndFillFlg: ",grndFillFlg,"\nshpId: ",shpId,"\nfillColor: ",fillColor); + result += ""; + break; + case "chord": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val = 45; + var sAdj2,sAdj2_val = 270; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + break; + case "frame": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj1 = 12500*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj1 = parseInt(shapAdjst.substr(4))*96/914400; + } + var a1,x1,x4,y4; + if(adj1 < 0) a1 = 0 + else if (adj1 > cnstVal1) a1 = cnstVal1 + else a1 = adj1 + x1 = Math.min(w,h)*a1/cnstVal2; + x4 = w - x1; + y4 = h - x1; + var d = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + "M" + x1 + "," + x1 + + " L" + x1 + "," + y4 + + " L" + x4 + "," + y4 + + " L" + x4 + "," + x1 + + " z"; + result += ""; + break; + case "donut": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var a,dr,iwd2,ihd2; + if(adj < 0) a = 0 + else if (adj > cnstVal1) a = cnstVal1 + else a = adj + dr = Math.min(w,h)*a/cnstVal2; + iwd2 = w/2 - dr; + ihd2 = h/2 - dr; + var d = "M" + 0 + "," + h/2 + + shapeArc(w/2,h/2,w/2,h/2,180,270,false).replace("M","L") + + shapeArc(w/2,h/2,w/2,h/2,270,360,false).replace("M","L") + + shapeArc(w/2,h/2,w/2,h/2,0,90,false).replace("M","L") + + shapeArc(w/2,h/2,w/2,h/2,90,180,false).replace("M","L") + + " z" + + "M" + dr + "," + h/2 + + shapeArc(w/2,h/2,iwd2,ihd2,180,90,false).replace("M","L") + + shapeArc(w/2,h/2,iwd2,ihd2,90,0,false).replace("M","L") + + shapeArc(w/2,h/2,iwd2,ihd2,0,-90,false).replace("M","L") + + shapeArc(w/2,h/2,iwd2,ihd2,270,180,false).replace("M","L") + + " z"; + result += ""; + break; + case "noSmoking": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 18750*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var a,dr,iwd2,ihd2,ang,ang2rad,ct,st,m,n,drd2,dang,dang2,swAng,t3,stAng1,stAng2; + if(adj < 0) a = 0 + else if (adj > cnstVal1) a = cnstVal1 + else a = adj + dr = Math.min(w,h)*a/cnstVal2; + iwd2 = w/2 - dr; + ihd2 = h/2 - dr; + ang = Math.atan(h/w); + //ang2rad = ang*Math.PI/180; + ct = ihd2*Math.cos(ang); + st = iwd2*Math.sin(ang); + m = Math.sqrt(ct*ct+st*st); //"mod ct st 0" + n = iwd2*ihd2/m; + drd2 = dr/2; + dang = Math.atan(drd2/n); + dang2 = dang*2; + swAng = -Math.PI+dang2; + //t3 = Math.atan(h/w); + stAng1 = ang-dang; + stAng2 = stAng1-Math.PI; + var ct1,st1,m1,n1,dx1,dy1,x1,y1,y1,y2; + ct1 = ihd2*Math.cos(stAng1); + st1 = iwd2*Math.sin(stAng1); + m1 =Math.sqrt(ct1*ct1 + st1*st1); //"mod ct1 st1 0" + n1 = iwd2*ihd2/m1; + dx1 = n1*Math.cos(stAng1); + dy1 = n1*Math.sin(stAng1); + x1 = w/2+dx1; + y1 = h/2+dy1; + x2 = w/2-dx1; + y2 = h/2-dy1; + var stAng1deg = stAng1*180/Math.PI; + var stAng2deg = stAng2*180/Math.PI; + var swAng2deg = swAng*180/Math.PI; + var d = "M" + 0 + "," + h/2 + + shapeArc(w/2,h/2,w/2,h/2,180,270,false).replace("M","L") + + shapeArc(w/2,h/2,w/2,h/2,270,360,false).replace("M","L") + + shapeArc(w/2,h/2,w/2,h/2,0,90,false).replace("M","L") + + shapeArc(w/2,h/2,w/2,h/2,90,180,false).replace("M","L") + + " z" + + "M" + x1 + "," + y1 + + shapeArc(w/2,h/2,iwd2,ihd2,stAng1deg,(stAng1deg+swAng2deg),false).replace("M","L") + + " z" + + "M" + x2 + "," + y2 + + shapeArc(w/2,h/2,iwd2,ihd2,stAng2deg,(stAng2deg+swAng2deg),false).replace("M","L") + + " z"; + //console.log("adj: ",adj,"x1:",x1,",y1:",y1," x2:",x2,",y2:",y2,",stAng1:",stAng1,",stAng1deg:",stAng1deg,",stAng2:",stAng2,",stAng2deg:",stAng2deg,",swAng:",swAng,",swAng2deg:",swAng2deg) + + result += ""; + break; + case "halfFrame": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val= 3.5; + var sAdj2,sAdj2_val = 3.5; + var cnsVal = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i maxAdj2) a2 = maxAdj2 + else a2 = sAdj2_val + var x1 = (minWH* a2)/cnsVal; + var g1 = h *x1/w; + var g2 = h-g1; + var maxAdj1 = (cnsVal * g2)/ minWH; + if(sAdj1_val < 0) a1 = 0 + else if (sAdj1_val > maxAdj1) a1 = maxAdj1 + else a1 = sAdj1_val + var y1 = minWH*a1/cnsVal; + var dx2 = y1* w/h; + var x2 = w - dx2; + var dy2 = x1*h/w; + var y2 = h - dy2; + var d = "M0,0" + + " L" + w + "," + 0 + + " L" + x2 + "," + y1 + + " L" + x1 + "," + y1 + + " L"+ x1 + "," + y2 + + " L0," + h +" z"; + + result += ""; + //console.log("w: ",w,", h: ",h,", sAdj1_val: ",sAdj1_val,", sAdj2_val: ",sAdj2_val,",maxAdj1: ",maxAdj1,",maxAdj2: ",maxAdj2) + break; + case "blockArc": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1= 180; + var sAdj2,adj2 = 0; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cd1) stAng = cd1 + else stAng = adj1 //180 + + if(adj2 < 0) istAng = 0 + else if (adj2 > cd1) istAng = cd1 + else istAng = adj2 //0 + + if(adj3 < 0) a3 = 0 + else if (adj3 > cnstVal1) a3 = cnstVal1 + else a3 = adj3 + + sw11 = istAng - stAng; // -180 + sw12 = sw11 + cd1; //180 + swAng = (sw11>0)?sw11:sw12; //180 + iswAng = -swAng; //-180 + + var endAng = stAng + swAng; + var iendAng = istAng + iswAng; + + var wt1,ht1,dx1,dy1,x1,y1,stRd,istRd,wd2,hd2,hc,vc; + stRd = stAng*(Math.PI)/180; + istRd = istAng*(Math.PI)/180; + wd2 = w/2; + hd2 = h/2; + hc = w/2; + vc = h/2; + if(stAng > 90 && stAng < 270){ + wt1 = wd2*(Math.sin((Math.PI)/2 - stRd)); + ht1 = hd2*(Math.cos((Math.PI)/2 - stRd)); + + dx1 = wd2*(Math.cos(Math.atan(ht1/wt1))); + dy1 = hd2*(Math.sin(Math.atan(ht1/wt1))); + + x1 = hc - dx1; + y1 = vc - dy1; + }else{ + wt1 = wd2*(Math.sin(stRd)); + ht1 = hd2*(Math.cos(stRd)); + + dx1 = wd2*(Math.cos(Math.atan(wt1/ht1))); + dy1 = hd2*(Math.sin(Math.atan(wt1/ht1))); + + x1 = hc + dx1; + y1 = vc + dy1; + } + var dr,iwd2,ihd2,wt2,ht2,dx2,dy2,x2,y2; + dr = Math.min(w,h)*a3/cnstVal2; + iwd2 = wd2 - dr; + ihd2 = hd2 - dr; + //console.log("stAng: ",stAng," swAng: ",swAng ," endAng:",endAng) + if((endAng <= 450 && endAng > 270) || ((endAng >=630 && endAng <720)) ){ + wt2 = iwd2*(Math.sin(istRd)); + ht2 = ihd2*(Math.cos(istRd)); + dx2 = iwd2*(Math.cos(Math.atan(wt2/ht2))); + dy2 = ihd2*(Math.sin(Math.atan(wt2/ht2))); + x2 = hc + dx2; + y2 = vc + dy2; + }else{ + wt2 = iwd2*(Math.sin((Math.PI)/2 - istRd)); + ht2 = ihd2*(Math.cos((Math.PI)/2 - istRd)); + + dx2 = iwd2*(Math.cos(Math.atan(ht2/wt2))); + dy2 = ihd2*(Math.sin(Math.atan(ht2/wt2))); + x2 = hc - dx2; + y2 = vc - dy2; + } + var d = "M" + x1 + "," + y1 + + shapeArc(wd2,hd2,wd2,hd2,stAng,endAng,false).replace("M","L") + + " L" + x2 + "," + y2 + + shapeArc(wd2,hd2,iwd2,ihd2,istAng,iendAng,false).replace("M","L") + + " z"; + result += ""; + break; + case "bracePair": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 8333*96/914400; + var cnstVal1 = 25000*96/914400; + var cnstVal2 = 50000*96/914400; + var cnstVal3 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var vc=h/2,cd=360,cd2=180,cd4=90,c3d4=270,a,x1,x2,x3,x4,y2,y3,y4; + if(adj < 0) a = 0 + else if (adj > cnstVal1) a = cnstVal1 + else a = adj + var minWH = Math.min(w,h); + x1 = minWH*a/cnstVal3; + x2 = minWH*a/cnstVal2; + x3 = w - x2; + x4 = w - x1; + y2 = vc - x1; + y3 = vc + x1; + y4 = h - x1; + //console.log("w:",w," h:",h," x1:",x1," x2:",x2," x3:",x3," x4:",x4," y2:",y2," y3:",y3," y4:",y4) + var d = "M" + x2 + "," + h + + shapeArc(x2,y4,x1,x1,cd4,cd2,false).replace("M","L") + + " L" + x1 + "," + y3 + + shapeArc(0,y3,x1,x1,0,(-cd4),false).replace("M","L") + + shapeArc(0,y2,x1,x1,cd4,0,false).replace("M","L") + + " L" + x1 + "," + x1 + + shapeArc(x2,x1,x1,x1,cd2,c3d4,false).replace("M","L") + + " M" + x3 + "," + 0 + + shapeArc(x3,x1,x1,x1,c3d4,cd,false).replace("M","L") + + " L" + x4 + "," + y2 + + shapeArc(w,y2,x1,x1,cd2,cd4,false).replace("M","L") + + shapeArc(w,y3,x1,x1,c3d4,cd2,false).replace("M","L") + + " L" + x4 + "," + y4 + + shapeArc(x3,y4,x1,x1,0,cd4,false).replace("M","L"); + + result += ""; + break; + case "leftBrace": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 8333*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal2) a2 = cnstVal2 + else a2 = adj2 + var minWH = Math.min(w,h); + q1 = cnstVal2 - a2; + if(q1 < a2) q2 = q1 + else q2 = a2 + q3 = q2/2; + var maxAdj1 = q3*h/minWH; + if(adj1 < 0) a1 = 0 + else if (adj1 > maxAdj1) a1 = maxAdj1 + else a1 = adj1 + y1 = minWH*a1/cnstVal2; + y3 = h*a2/cnstVal2; + y2 = y3 - y1; + y4 = y3 + y1; + //console.log("w:",w," h:",h," q1:",q1," q2:",q2," q3:",q3," y1:",y1," y3:",y3," y4:",y4," maxAdj1:",maxAdj1) + var d = "M" + w + "," + h + + shapeArc(w,h-y1,w/2,y1,cd4,cd2,false).replace("M","L") + + " L" + w/2 + "," + y4 + + shapeArc(0,y4,w/2,y1,0,(-cd4),false).replace("M","L") + + shapeArc(0,y2,w/2,y1,cd4,0,false).replace("M","L") + + " L" + w/2 + "," + y1 + + shapeArc(w,y1,w/2,y1,cd2,c3d4,false).replace("M","L"); + + result += ""; + break; + case "rightBrace": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 8333*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal2) a2 = cnstVal2 + else a2 = adj2 + var minWH = Math.min(w,h); + q1 = cnstVal2 - a2; + if(q1 < a2) q2 = q1 + else q2 = a2 + q3 = q2/2; + var maxAdj1 = q3*h/minWH; + if(adj1 < 0) a1 = 0 + else if (adj1 > maxAdj1) a1 = maxAdj1 + else a1 = adj1 + y1 = minWH*a1/cnstVal2; + y3 = h*a2/cnstVal2; + y2 = y3 - y1; + y4 = h - y1; + //console.log("w:",w," h:",h," q1:",q1," q2:",q2," q3:",q3," y1:",y1," y2:",y2," y3:",y3," y4:",y4," maxAdj1:",maxAdj1) + var d = "M" + 0 + "," + 0 + + shapeArc(0,y1,w/2,y1,c3d4,cd,false).replace("M","L") + + " L" + w/2 + "," + y2 + + shapeArc(w,y2,w/2,y1,cd2,cd4,false).replace("M","L") + + shapeArc(w,y3+y1,w/2,y1,c3d4,cd2,false).replace("M","L") + + " L" + w/2 + "," + y4 + + shapeArc(0,y4,w/2,y1,0,cd4,false).replace("M","L"); + + result += ""; + break; + case "bracketPair": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 16667*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var r=w,b=h,cd2=180,cd4=90,c3d4=270,a,x1,x2,y2; + if(adj < 0) a = 0 + else if (adj > cnstVal1) a = cnstVal1 + else a = adj + x1 = Math.min(w,h)*a/cnstVal2; + x2 = r - x1; + y2 = b - x1; + //console.log("w:",w," h:",h," x1:",x1," x2:",x2," y2:",y2) + var d = shapeArc(x1,x1,x1,x1,c3d4,cd2,false) + + shapeArc(x1,y2,x1,x1,cd2,cd4,false).replace("M","L") + + shapeArc(x2,x1,x1,x1,c3d4,(c3d4+cd4),false) + + shapeArc(x2,y2,x1,x1,0,cd4,false).replace("M","L"); + result += ""; + break; + case "leftBracket": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 8333*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var maxAdj = cnstVal1*h/Math.min(w,h); + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var r=w,b=h,cd2=180,cd4=90,c3d4=270,a,y1,y2; + if(adj < 0) a = 0 + else if (adj > maxAdj) a = maxAdj + else a = adj + y1 = Math.min(w,h)*a/cnstVal2; + if(y1>w) y1=w; + y2 = b - y1; + var d = "M"+ r + "," + b + + shapeArc(y1,y2,y1,y1,cd4,cd2,false).replace("M","L") + + " L"+ 0 + "," + y1 + + shapeArc(y1,y1,y1,y1,cd2,c3d4,false).replace("M","L") + + " L"+ r + "," + 0 + result += ""; + break; + case "rightBracket": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 8333*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var maxAdj = cnstVal1*h/Math.min(w,h); + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var cd=360,cd2=180,cd4=90,c3d4=270,a,y1,y2,y3; + if(adj < 0) a = 0 + else if (adj > maxAdj) a = maxAdj + else a = adj + y1 = Math.min(w,h)*a/cnstVal2; + y2 = h - y1; + y3 = w - y1; + //console.log("w:",w," h:",h," y1:",y1," y2:",y2," y3:",y3) + var d = "M"+ 0 + "," + h + + shapeArc(y3,y2,y1,y1,cd4,0,false).replace("M","L") + + //" L"+ r + "," + y2 + + " L"+ w + "," + h/2 + + shapeArc(y3,y1,y1,y1,cd,c3d4,false).replace("M","L") + + " L"+ 0 + "," + 0 + result += ""; + break; + case "moon": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 0.5; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))/100000;//*96/914400;; + } + var hd2,cd2,cd4; + + hd2 = h/2; + cd2 = 180; + cd4 = 90; + + var adj2 = (1-adj) * w; + var d = "M" + w + "," + h + + shapeArc(w,hd2,w,hd2,cd4,(cd4+cd2),false).replace("M","L") + + shapeArc(w,hd2,adj2,hd2,(cd4+cd2),cd4,false).replace("M","L") + + " z"; + result += ""; + break; + case "corner": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val= 50000*96/914400; + var sAdj2,sAdj2_val = 50000*96/914400; + var cnsVal = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i maxAdj1) a1 = maxAdj1 + else a1 = sAdj1_val + + if(sAdj2_val < 0) a2 = 0 + else if (sAdj2_val > maxAdj2) a2 = maxAdj2 + else a2 = sAdj2_val + x1 = minWH*a2/cnsVal; + dy1 = minWH*a1/cnsVal; + y1 = h - dy1; + + var d = "M0,0" + + " L" + x1 + "," + 0 + + " L" + x1 + "," + y1 + + " L" + w + "," + y1 + + " L"+ w + "," + h + + " L0," + h +" z"; + + result += ""; + break; + case "diagStripe": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var sAdj1_val= 50000*96/914400; + var cnsVal = 100000*96/914400; + if(shapAdjst !== undefined){ + sAdj1_val = parseInt(shapAdjst.substr(4))* 96/914400; + } + var a1 , x2 , y2; + if(sAdj1_val < 0) a1 = 0 + else if (sAdj1_val > cnsVal) a1 = cnsVal + else a1 = sAdj1_val + x2 = w*a1/cnsVal; + y2 = h*a1/cnsVal; + var d = "M" + 0 + "," + y2 + + " L" + x2 + "," + 0 + + " L" + w + "," + 0 + + " L"+ 0 + "," + h +" z"; + + result += ""; + break; + case "gear6": + case "gear9": + txtRotate = 0; + var gearNum = shapType.substr(4) , d; + if(gearNum == "6"){ + d = shapeGear(w,h/3.5,parseInt(gearNum)); + }else{ //gearNum=="9" + d = shapeGear(w,h/3.5,parseInt(gearNum)); + } + result += ""; + break; + case "bentConnector3": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var shapAdjst_val = 0.5; + if(shapAdjst !== undefined){ + shapAdjst_val = parseInt(shapAdjst.substr(4)) /100000; + if(isFlipV){ + result += " "; + break; + case "teardrop": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var adj1 = 100000*96/914400; + var cnsVal1 = adj1; + var cnsVal2 = 200000*96/914400; + if(shapAdjst !== undefined){ + adj1 = parseInt(shapAdjst.substr(4))*96/914400; + } + var a1 ,r2 ,tw,th,sw,sh,dx1,dy1,x1,y1, x2 , y2 ,rd45; + if(adj1 < 0) a1 = 0 + else if (adj1 > cnsVal2) a1 = cnsVal2 + else a1 = adj1 + r2 = Math.sqrt(2); + tw = r2*(w/2); + th = r2*(h/2); + sw = (tw*a1)/cnsVal1; + sh = (th*a1)/cnsVal1; + rd45 = (45*(Math.PI)/180); + dx1 = sw*(Math.cos(rd45)); + dy1 = sh*(Math.cos(rd45)); + x1 = (w/2) + dx1; + y1 = (h/2) - dy1; + x2 = ((w/2)+x1)/2; + y2 = ((h/2)+y1)/2; + + var d_val = shapeArc(w/2,h/2,w/2,h/2,180,270,false) + + "Q " + x2 + ",0 " + x1 + "," + y1 + + "Q " + w + "," + y2 + " " + w + "," + h/2 + + shapeArc(w/2,h/2,w/2,h/2,0,90,false).replace("M","L") + + shapeArc(w/2,h/2,w/2,h/2,90,180,false).replace("M","L") + " z"; + result += ""; + + // console.log("shapAdjst: ",shapAdjst,", adj1: ",adj1); + break; + case "plaque": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var adj1 = 16667*96/914400; + var cnsVal1 = 50000*96/914400; + var cnsVal2 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj1 = parseInt(shapAdjst.substr(4))*96/914400; + } + var a1 ,x1, x2 , y2; + if(adj1 < 0) a1 = 0 + else if (adj1 > cnsVal1) a1 = cnsVal1 + else a1 = adj1 + x1 = a1*(Math.min(w,h))/cnsVal2; + x2 = w-x1; + y2 = h-x1; + + var d_val = "M0," + x1 + + shapeArc(0,0,x1,x1,90,0,false).replace("M","L") + + " L" + x2 + "," + 0 + + shapeArc(w,0,x1,x1,180,90,false).replace("M","L") + + " L" + w + "," + y2 + + shapeArc(w,h,x1,x1,270,180,false).replace("M","L") + + " L" + x1 + "," + h + + shapeArc(0,h,x1,x1,0,-90,false).replace("M","L") + " z"; + result += ""; + + break; + case "sun": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var refr = 96/914400; + var adj1 = 25000*refr; + var cnstVal1 = 12500*refr; + var cnstVal2 = 46875*refr; + if(shapAdjst !== undefined){ + adj1 = parseInt(shapAdjst.substr(4))*refr; + } + var a1; + if(adj1 < cnstVal1) a1 = cnstVal1 + else if (adj1 > cnstVal2) a1 = cnstVal2 + else a1 = adj1 + + var cnstVa3 = 50000*refr; + var cnstVa4 = 100000*refr; + var g0 = cnstVa3 - a1, + g1 = g0*(30274*refr)/(32768*refr), + g2 = g0*(12540*refr)/(32768*refr), + g3 = g1+cnstVa3, + g4 = g2+cnstVa3, + g5 = cnstVa3-g1, + g6 = cnstVa3-g2, + g7 = g0*(23170*refr)/(32768*refr), + g8 = cnstVa3+g7, + g9 = cnstVa3-g7, + g10 = g5*3/4, + g11 = g6*3/4, + g12 = g10+3662*refr, + g13 = g11+36620*refr, + g14 = g11+12500*refr, + g15 = cnstVa4-g10, + g16 = cnstVa4-g12, + g17 = cnstVa4-g13, + g18 = cnstVa4-g14, + ox1 = w*(18436*refr)/(21600*refr), + oy1 = h*(3163*refr)/(21600*refr), + ox2 = w*(3163*refr)/(21600*refr), + oy2 = h*(18436*refr)/(21600*refr), + x8 = w*g8/cnstVa4, + x9 = w*g9/cnstVa4, + x10 = w*g10/cnstVa4, + x12 = w*g12/cnstVa4, + x13 = w*g13/cnstVa4, + x14 = w*g14/cnstVa4, + x15 = w*g15/cnstVa4, + x16 = w*g16/cnstVa4, + x17 = w*g17/cnstVa4, + x18 = w*g18/cnstVa4, + x19 = w*a1/cnstVa4, + wR = w*g0/cnstVa4, + hR = h*g0/cnstVa4, + y8 = h*g8/cnstVa4, + y9 = h*g9/cnstVa4, + y10 = h*g10/cnstVa4, + y12 = h*g12/cnstVa4, + y13 = h*g13/cnstVa4, + y14 = h*g14/cnstVa4, + y15 = h*g15/cnstVa4, + y16 = h*g16/cnstVa4, + y17 = h*g17/cnstVa4, + y18 = h*g18/cnstVa4; + + var d_val = "M"+w+"," + h/2 + + " L"+x15+","+y18+ + " L"+x15+","+y14+ + "z" + + " M"+ox1+","+oy1+ + " L"+x16+","+y17+ + " L"+x13+","+y12+ + "z" + + " M"+w/2+","+0+ + " L"+x18+","+y10+ + " L"+x14+","+y10+ + "z" + + " M"+ox2+","+oy1+ + " L"+x17+","+y12+ + " L"+x12+","+y17+ + "z" + + " M"+0+","+h/2+ + " L"+x10+","+y14+ + " L"+x10+","+y18+ + "z" + + " M"+ox2+","+oy2+ + " L"+x12+","+y13+ + " L"+x17+","+y16+ + "z" + + " M"+w/2+","+h+ + " L"+x14+","+y15+ + " L"+x18+","+y15+ + "z" + + " M"+ox1+","+oy2+ + " L"+x13+","+y16+ + " L"+x16+","+y13+ + " z" + + " M"+x19+","+h/2+ + shapeArc(w/2,h/2,wR,hR,180,540,false).replace("M","L") + + " z"; + //console.log("adj1: ",adj1,d_val); + result += ""; + + + break; + case "heart": + var dx1,dx2,x1, x2,x3,x4,y1; + dx1 = w*49/48; + dx2 = w*10/48 + x1 = w/2-dx1 + x2 = w/2-dx2 + x3 = w/2+dx2 + x4 = w/2+dx1 + y1 = -h/3; + var d_val = "M" + w/2 + "," + h/4 + + "C" + x3 + "," + y1 +" "+ x4 + "," + h/4 + " " + w/2 + "," + h + + "C" + x1 + "," + h/4 +" "+ x2 + "," + y1 + " " + w/2 + "," + h/4 + " z"; + + result += ""; + + break; + case "lightningBolt": + var x1 = w*5022/21600, + x2 = w*11050/21600, + x3 = w*8472/21600, + x4 = w*8757/21600, + x5 = w*10012/21600, + x6 = w*14767/21600, + x7 = w*12222/21600, + x8 = w*12860/21600, + x9 = w*13917/21600, + x10 = w*7602/21600, + x11 = w*16577/21600, + y1 = h*3890/21600, + y2 = h*6080/21600, + y3 = h*6797/21600, + y4 = h*7437/21600, + y5 = h*12877/21600, + y6 = h*9705/21600, + y7 = h*12007/21600, + y8 = h*13987/21600, + y9 = h*8382/21600, + y10 = h*14277/21600, + y11 = h*14915/21600; + + var d_val = "M" + x3 + "," + 0 + + " L" + x8 + "," + y2 + + " L" + x2 + "," + y3 + + " L" + x11 + "," + y7 + + " L" + x6 + "," + y5 + + " L" + w + "," + h + + " L" + x5 + "," + y11 + + " L" + x7 + "," + y8 + + " L" + x1 + "," + y6 + + " L" + x10 + "," + y9 + + " L" + 0 + "," + y1 + " z"; + + result += ""; + + break; + case "cube": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var refr = 96/914400; + var adj = 25000*refr; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*refr; + } + var d_val; + var cnstVal2 = 100000*refr; + var ss = Math.min(w,h); + var a, y1, y4, x4; + a = (adj<0)?0:(adj>cnstVal2)?cnstVal2:adj; + y1 = ss*a/cnstVal2; + y4 = h-y1; + x4 = w-y1; + d_val = "M" + 0 + "," + y1 + + " L" + y1 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + y4 + + " L" + x4 + "," + h + + " L" + 0 + "," + h + + " z" + + "M" + 0 + "," + y1 + + " L" + x4 + "," + y1 + + " M" + x4 + "," + y1 + + " L" + w + "," + 0 + + "M" + x4 + "," + y1 + + " L" + x4 + "," + h; + + result += ""; + + break; + case "bevel": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var refr = 96/914400; + var adj = 12500*refr; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*refr; + } + var d_val; + var cnstVal1 = 50000*refr; + var cnstVal2 = 100000*refr; + var ss = Math.min(w,h); + var a, x1, x2, y2; + a = (adj<0)?0:(adj>cnstVal1)?cnstVal1:adj; + x1 = ss*a/cnstVal2; + x2 = w-x1; + y2 = h-x1; + d_val = "M" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + h + + " L" + 0 + "," + h + + " z" + + " M" + x1 + "," + x1 + + " L" + x2 + "," + x1 + + " L" + x2 + "," + y2 + + " L" + x1 + "," + y2 + + " z" + + " M" + 0 + "," + 0 + + " L" + x1 + "," + x1 + + " M" + 0 + "," + h + + " L" + x1 + "," + y2 + + " M" + w + "," + 0 + + " L" + x2 + "," + x1 + + " M" + w + "," + h + + " L" + x2 + "," + y2; + + result += ""; + + break; + case "foldedCorner": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var refr = 96/914400; + var adj = 16667*refr; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*refr; + } + var d_val; + var cnstVal1 = 50000*refr; + var cnstVal2 = 100000*refr; + var ss = Math.min(w,h); + var a, dy2, dy1, x1, x2, y2, y1; + a = (adj<0)?0:(adj>cnstVal1)?cnstVal1:adj; + dy2 = ss*a/cnstVal2; + dy1 = dy2/5; + x1 = w-dy2; + x2 = x1+dy1; + y2 = h-dy2; + y1 = y2+dy1; + d_val = "M" + x1 + "," + h + + " L" + x2 + "," + y1 + + " L" + w + "," + y2 + + " L" + x1 + "," + h + + " L" + 0 + "," + h + + " L" + 0 + "," + 0 + + " L" + w + "," + 0 + + " L" + w + "," + y2; + + result += ""; + + break; + case "cloud": + case "cloudCallout": + var x0,x1,x2,x3,x4,x5,x6,x7,x8,x9,x10,x11,y0,y1,y2,y3,y4,y5,y6,y7,y8,y9,y10,y11, + rx1,rx2,rx3,rx4,rx5,rx6,rx7,rx8,rx9,rx10,rx11,ry1,ry2,ry3,ry4,ry5,ry6,ry7,ry8,ry9,ry10,ry11; + x0 = w*3900/43200;; + x1 = w*4693/43200; + x2 = w*6928/43200; + x3 = w*16478/43200; + x4 = w*28827/43200; + x5 = w*34129/43200; + x6 = w*41798/43200; + x7 = w*38324/43200; + x8 = w*29078/43200; + x9 = w*22141/43200; + x10 = w*14000/43200; + x11 = w*4127/43200; + y0 = h*14370/43200; + y1 = h*26177/43200; + y2 = h*34899/43200; + y3 = h*39090/43200; + y4 = h*34751/43200; + y5 = h*22954/43200; + y6 = h*15354/43200; + y7 = h*5426/43200; + y8 = h*3952/43200; + y9 = h*4720/43200; + y10 = h*5192/43200; + y11 = h*15789/43200; + //Path: + //(path attrs: w = 43200; h = 43200; ) + var rX1 = w*6753/43200, rY1 = h*9190/43200,rX2 = w*5333/43200, rY2 = h*7267/43200,rX3 = w*4365/43200, + rY3 = h*5945/43200,rX4 = w*4857/43200, rY4 = h*6595/43200, rY5 = h*7273/43200,rX6 = w*6775/43200, + rY6 = h*9220/43200,rX7 = w*5785/43200, rY7 = h*7867/43200,rX8 = w*6752/43200, rY8 = h*9215/43200, + rX9 = w*7720/43200, rY9 = h*10543/43200,rX10 = w*4360/43200, rY10 = h*5918/43200,rX11 = w*4345/43200; + var sA1 = -11429249/60000, wA1 = 7426832/60000,sA2 = -8646143/60000, wA2 = 5396714/60000,sA3 = -8748475/60000, + wA3 = 5983381/60000,sA4 = -7859164/60000, wA4 = 7034504/60000,sA5 = -4722533/60000, wA5 = 6541615/60000, + sA6 = -2776035/60000, wA6 = 7816140/60000,sA7 = 37501/60000, wA7 = 6842000/60000,sA8 = 1347096/60000, + wA8 = 6910353/60000,sA9 = 3974558/60000, wA9 = 4542661/60000,sA10 = -16496525/60000, wA10 = 8804134/60000, + sA11 = -14809710/60000, wA11 = 9151131/60000; + + var cX0,cX1,cX2,cX3,cX4,cX5,cX6,cX7,cX8,cX9,cX10,cY0,cY1,cY2,cY3,cY4,cY5,cY6,cY7,cY8,cY9,cY10; + var arc1,arc2,arc3,arc4,arc5,arc6,arc7,arc8,arc9,arc10,arc11; + var lxy1,lxy2,lxy3,lxy4,lxy5,lxy6,lxy7,lxy8,lxy9,lxy10; + + cX0 = x0 - rX1*Math.cos(sA1*Math.PI/180); + cY0 = y0 - rY1*Math.sin(sA1*Math.PI/180); + arc1 = shapeArc(cX0,cY0,rX1,rY1,sA1,sA1+wA1,false).replace("M","L"); + lxy1 = arc1.substr(arc1.lastIndexOf("L")+1).split(" "); + cX1 = parseInt(lxy1[0]) - rX2*Math.cos(sA2*Math.PI/180); + cY1 = parseInt(lxy1[1]) - rY2*Math.sin(sA2*Math.PI/180); + arc2 = shapeArc(cX1,cY1,rX2,rY2,sA2,sA2+wA2,false).replace("M","L"); + lxy2 = arc2.substr(arc2.lastIndexOf("L")+1).split(" "); + cX2 = parseInt(lxy2[0]) - rX3*Math.cos(sA3*Math.PI/180); + cY2 = parseInt(lxy2[1]) - rY3*Math.sin(sA3*Math.PI/180); + arc3 = shapeArc(cX2,cY2,rX3,rY3,sA3,sA3+wA3,false).replace("M","L"); + lxy3 = arc3.substr(arc3.lastIndexOf("L")+1).split(" "); + cX3 = parseInt(lxy3[0]) - rX4*Math.cos(sA4*Math.PI/180); + cY3 = parseInt(lxy3[1]) - rY4*Math.sin(sA4*Math.PI/180); + arc4 = shapeArc(cX3,cY3,rX4,rY4,sA4,sA4+wA4,false).replace("M","L"); + lxy4 = arc4.substr(arc4.lastIndexOf("L")+1).split(" "); + cX4 = parseInt(lxy4[0]) - rX2*Math.cos(sA5*Math.PI/180); + cY4 = parseInt(lxy4[1]) - rY5*Math.sin(sA5*Math.PI/180); + arc5 = shapeArc(cX4,cY4,rX2,rY5,sA5,sA5+wA5,false).replace("M","L"); + lxy5 = arc5.substr(arc5.lastIndexOf("L")+1).split(" "); + cX5 = parseInt(lxy5[0]) - rX6*Math.cos(sA6*Math.PI/180); + cY5 = parseInt(lxy5[1]) - rY6*Math.sin(sA6*Math.PI/180); + arc6 = shapeArc(cX5,cY5,rX6,rY6,sA6,sA6+wA6,false).replace("M","L"); + lxy6 = arc6.substr(arc6.lastIndexOf("L")+1).split(" "); + cX6 = parseInt(lxy6[0]) - rX7*Math.cos(sA7*Math.PI/180); + cY6 = parseInt(lxy6[1]) - rY7*Math.sin(sA7*Math.PI/180); + arc7 = shapeArc(cX6,cY6,rX7,rY7,sA7,sA7+wA7,false).replace("M","L"); + lxy7 = arc7.substr(arc7.lastIndexOf("L")+1).split(" "); + cX7 = parseInt(lxy7[0]) - rX8*Math.cos(sA8*Math.PI/180); + cY7 = parseInt(lxy7[1]) - rY8*Math.sin(sA8*Math.PI/180); + arc8 = shapeArc(cX7,cY7,rX8,rY8,sA8,sA8+wA8,false).replace("M","L"); + lxy8 = arc8.substr(arc8.lastIndexOf("L")+1).split(" "); + cX8 = parseInt(lxy8[0]) - rX9*Math.cos(sA9*Math.PI/180); + cY8 = parseInt(lxy8[1]) - rY9*Math.sin(sA9*Math.PI/180); + arc9 = shapeArc(cX8,cY8,rX9,rY9,sA9,sA9+wA9,false).replace("M","L"); + lxy9 = arc9.substr(arc9.lastIndexOf("L")+1).split(" "); + cX9 = parseInt(lxy9[0]) - rX10*Math.cos(sA10*Math.PI/180); + cY9 = parseInt(lxy9[1]) - rY10*Math.sin(sA10*Math.PI/180); + arc10 = shapeArc(cX9,cY9,rX10,rY10,sA10,sA10+wA10,false).replace("M","L"); + lxy10 = arc10.substr(arc10.lastIndexOf("L")+1).split(" "); + cX10 = parseInt(lxy10[0]) - rX11*Math.cos(sA11*Math.PI/180); + cY10 = parseInt(lxy10[1]) - rY3*Math.sin(sA11*Math.PI/180); + arc11 = shapeArc(cX10,cY10,rX11,rY3,sA11,sA11+wA11,false).replace("M","L"); + + var d1 = "M" + x0 + "," + y0 + + arc1 + + arc2 + + arc3 + + arc4 + + arc5 + + arc6 + + arc7 + + arc8 + + arc9 + + arc10 + + arc11 + + " z"; + if(shapType == "cloudCallout"){ + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var refr = 96/914400; + var sAdj1,adj1= -20833*refr; + var sAdj2,adj2 = 62500*refr; + if(shapAdjst_ary !== undefined){ + for(var i=0; i= 0){ + g4 = wd2+g2; + g5 = hd2+g3; + }else{ + g4 = wd2-g2; + g5 = hd2-g3; + } + g6 = g4-xPos; + g7 = g5-yPos; + g8 = Math.sqrt(g6*g6 + g7*g7); + g9 = ss*6600/21600; + g10 = g8-g9; + g11 = g10/3; + g12 = ss*1800/21600; + g13 = g11+g12; + g14 = g13*g6/g8; + g15 = g13*g7/g8; + g16 = g14+xPos; + g17 = g15+yPos; + g18 = ss*4800/21600; + g19 = g11*2; + g20 = g18+g19; + g21 = g20*g6/g8; + g22 = g20*g7/g8; + g23 = g21+xPos; + g24 = g22+yPos; + g25 = ss*1200/21600; + g26 = ss*600/21600; + x23 = xPos+g26; + x24 = g16+g25; + x25 = g23+g12; + + d_val = //" M" + x23 + "," + yPos + + shapeArc(x23-g26,yPos,g26,g26,0,360,false) + //.replace("M","L") + + " z" + + " M" + x24 + "," + g17 + + shapeArc(x24-g25,g17,g25,g25,0,360,false).replace("M","L") + + " z" + + " M" + x25 + "," + g24 + + shapeArc(x25-g12,g24,g12,g12,0,360,false).replace("M","L") + + " z"; + d1 += d_val; + } + result += ""; + + break; + case "smileyFace": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var refr = 96/914400; + var adj = 4653*refr; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*refr; + } + var d_val; + var cnstVal1 = 50000*refr; + var cnstVal2 = 100000*refr; + var cnstVal3 = 4653*refr; + var ss = Math.min(w,h); + var a, x1, x2, x3, x4, y1, y3, dy2, y2, y4, dy3, y5, wR, hR, wd2, hd2; + wd2 = w/2; + hd2 = h/2; + a = (adj<-cnstVal3)?-cnstVal3:(adj>cnstVal3)?cnstVal3:adj; + x1 = w*4969/21699; + x2 = w*6215/21600; + x3 = w*13135/21600; + x4 = w*16640/21600; + y1 = h*7570/21600; + y3 = h*16515/21600; + dy2 = h*a/cnstVal2; + y2 = y3-dy2; + y4 = y3+dy2; + dy3 = h*a/cnstVal1; + y5 = y4+dy3; + wR = w*1125/21600; + hR = h*1125/21600; + var cX1 = x2 - wR*Math.cos(Math.PI); + var cY1 = y1 - hR*Math.sin(Math.PI); + var cX2 = x3 - wR*Math.cos(Math.PI); + d_val = //eyes + shapeArc(cX1,cY1,wR,hR,180,540,false) + + shapeArc(cX2,cY1,wR,hR,180,540,false) + + //mouth + " M" + x1 + "," + y2 + + " Q" + wd2 + "," + y5 + " " + x4 + "," + y2 + + " Q" + wd2 + "," + y5 + " " + x1 + "," + y2 + + //head + " M" + 0 + "," + hd2 + + shapeArc(wd2,hd2,wd2,hd2,180,540,false).replace("M","L") + + " z"; + result += ""; + + break; + case "verticalScroll": + case "horizontalScroll": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd", "attrs", "fmla"]); + var refr = 96/914400; + var adj = 12500*refr; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*refr; + } + var d_val; + var cnstVal1 = 25000*refr; + var cnstVal2 = 100000*refr; + var ss = Math.min(w,h); + var t=0,l=0,b=h,r=w; + var a, ch, ch2, ch4; + a = (adj<0)?0:(adj>cnstVal1)?cnstVal1:adj; + ch = ss*a/cnstVal2; + ch2 = ch/2; + ch4 = ch/4; + if(shapType == "verticalScroll"){ + var x3, x4, x6, x7, x5, y3, y4; + x3 = ch+ch2; + x4 = ch+ch; + x6 = r-ch; + x7 = r-ch2; + x5 = x6-ch2; + y3 = b-ch; + y4 = b-ch2; + + d_val = "M" + ch + "," + y3 + + " L" + ch + "," + ch2 + + shapeArc(x3,ch2,ch2,ch2,180,270,false).replace("M","L") + + " L" + x7 + "," + t + + shapeArc(x7,ch2,ch2,ch2,270,450,false).replace("M","L") + + " L" + x6 + "," + ch + + " L" + x6 + "," + y4 + + shapeArc(x5,y4,ch2,ch2,0,90,false).replace("M","L") + + " L" + ch2 + "," + b + + shapeArc(ch2,y4,ch2,ch2,90,270,false).replace("M","L") + + " z" + + " M" + x3 + "," + t + + shapeArc(x3,ch2,ch2,ch2,270,450,false).replace("M","L") + + shapeArc(x3,x3/2,ch4,ch4,90,270,false).replace("M","L") + + " L" + x4 + "," + ch2 + + " M" + x6 + "," + ch + + " L" + x3 + "," + ch + + " M" + ch + "," + y4 + + shapeArc(ch2,y4,ch2,ch2,0,270,false).replace("M","L") + + shapeArc(ch2,(y4+y3)/2,ch4,ch4,270,450,false).replace("M","L") + + " z"+ + " M" + ch + "," + y4 + + " L" + ch + "," + y3; + }else if(shapType == "horizontalScroll"){ + var y3, y4, y6, y7, y5, x3, x4; + y3 = ch+ch2; + y4 = ch+ch; + y6 = b-ch; + y7 = b-ch2; + y5 = y6-ch2; + x3 = r-ch; + x4 = r-ch2; + + d_val = "M" + l + "," + y3 + + shapeArc(ch2,y3,ch2,ch2,180,270,false).replace("M","L") + + " L" + x3 + "," + ch + + " L" + x3 + "," + ch2 + + shapeArc(x4,ch2,ch2,ch2,180,360,false).replace("M","L") + + " L" + r + "," + y5 + + shapeArc(x4,y5,ch2,ch2,0,90,false).replace("M","L") + + " L" + ch + "," + y6 + + " L" + ch + "," + y7 + + shapeArc(ch2,y7,ch2,ch2,0,180,false).replace("M","L") + + " z" + + "M" + x4 + "," + ch + + shapeArc(x4,ch2,ch2,ch2,90,-180,false).replace("M","L") + + shapeArc((x3+x4)/2,ch2,ch4,ch4,180,0,false).replace("M","L") + + " z" + + " M" + x4 + "," + ch + + " L" + x3 + "," + ch + + " M" + ch2 + "," + y4 + + " L" + ch2 + "," + y3 + + shapeArc(y3/2,y3,ch4,ch4,180,360,false).replace("M","L") + + shapeArc(ch2,y3,ch2,ch2,0,180,false).replace("M","L") + + " M" + ch + "," + y3 + + " L" + ch + "," + y6; + } + + result += ""; + + break; + case "wedgeEllipseCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var refr = 96/914400; + var sAdj1,adj1= -20833*refr; + var sAdj2,adj2 = 62500*refr; + if(shapAdjst_ary !== undefined){ + for(var i=0; i= 0 ){ + x1 = hc+dx1; + y1 = vc+dy1; + x2 = hc+dx2; + y2 = vc+dy2; + }else{ + x1 = hc-dx1; + y1 = vc-dy1; + x2 = hc-dx2; + y2 = vc-dy2; + } + /* + //stAng = pang+angVal1; + //enAng = pang-angVal1; + //dx1 = hc*Math.cos(stAng); + //dy1 = vc*Math.sin(stAng); + x1 = hc+dx1; + y1 = vc+dy1; + dx2 = hc*Math.cos(enAng); + dy2 = vc*Math.sin(enAng); + x2 = hc+dx2; + y2 = vc+dy2; + stAng1 = Math.atan(dy1/dx1); + enAng1 = Math.atan(dy2/dx2); + swAng1 = enAng1-stAng1; + swAng2 = swAng1+2*Math.PI; + swAng = (swAng1 > 0)?swAng1:swAng2; + var stAng1Dg = stAng1*180/Math.PI; + var swAngDg = swAng*180/Math.PI; + var endAng = stAng1Dg + swAngDg; + */ + d_val = "M" + x1 + "," + y1 + + " L" + xPos + "," + yPos + + " L" + x2 + "," + y2 + + //" z" + + shapeArc(hc,vc,hc,vc,0,360,true);// + + //shapeArc(hc,vc,hc,vc,stAng1Dg,stAng1Dg+swAngDg,false).replace("M","L") + + //" z"; + result += ""; + + break; + case "wedgeRectCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var refr = 96/914400; + var sAdj1,adj1= -20833*refr; + var sAdj2,adj2 = 62500*refr; + if(shapAdjst_ary !== undefined){ + for(var i=0; i 0)?7:2; + xg2 = (dxPos > 0)?10:5; + x1 = w*xg1/12; + x2 = w*xg2/12; + yg1 = (dyPos > 0)?7:2; + yg2 = (dyPos > 0)?10:5; + y1 = h*yg1/12; + y2 = h*yg2/12; + t1 = (dxPos > 0)?0:xPos; + xl = (dz > 0)?0:t1; + t2 = (dyPos > 0)?x1:xPos; + xt = (dz > 0)?t2:x1; + t3 = (dxPos > 0)?xPos:w; + xr = (dz > 0)?w:t3; + t4 = (dyPos > 0)?xPos:x1; + xb = (dz > 0)?t4:x1; + t5 = (dxPos > 0)?y1:yPos; + yl = (dz > 0)?y1:t5; + t6 = (dyPos > 0)?0:yPos; + yt = (dz > 0)?t6:0; + t7 = (dxPos > 0)?yPos:y1; + yr = (dz > 0)?y1:t7; + t8 = (dyPos > 0)?yPos:h; + yb = (dz > 0)?t8:h; + + d_val = "M" + 0 + "," +0 + + " L" + x1 + "," +0 + + " L" + xt + "," +yt + + " L" + x2 + "," +0 + + " L" + w + "," +0 + + " L" + w + "," +y1 + + " L" + xr + "," +yr + + " L" + w + "," +y2 + + " L" + w + "," +h + + " L" + x2 + "," +h + + " L" + xb + "," +yb + + " L" + x1 + "," +h + + " L" + 0 + "," +h + + " L" + 0 + "," +y2 + + " L" + xl + "," +yl + + " L" + 0 + "," +y1 + + " z"; + + result += ""; + + break; + case "wedgeRoundRectCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var refr = 96/914400; + var sAdj1,adj1= -20833*refr; + var sAdj2,adj2 = 62500*refr; + var sAdj3,adj3 = 16667*refr; + if(shapAdjst_ary !== undefined){ + for(var i=0; i 0)?7:2; + xg2 = (dxPos > 0)?10:5; + x1 = w*xg1/12; + x2 = w*xg2/12; + yg1 = (dyPos > 0)?7:2; + yg2 = (dyPos > 0)?10:5; + y1 = h*yg1/12; + y2 = h*yg2/12; + t1 = (dxPos > 0)?0:xPos; + xl = (dz > 0)?0:t1; + t2 = (dyPos > 0)?x1:xPos; + xt = (dz > 0)?t2:x1; + t3 = (dxPos > 0)?xPos:w; + xr = (dz > 0)?w:t3; + t4 = (dyPos > 0)?xPos:x1; + xb = (dz > 0)?t4:x1; + t5 = (dxPos > 0)?y1:yPos; + yl = (dz > 0)?y1:t5; + t6 = (dyPos > 0)?0:yPos; + yt = (dz > 0)?t6:0; + t7 = (dxPos > 0)?yPos:y1; + yr = (dz > 0)?y1:t7; + t8 = (dyPos > 0)?yPos:h; + yb = (dz > 0)?t8:h; + u1 = ss*adj3/cnstVal1; + u2 = w-u1; + v2 = h-u1; + d_val = "M" + 0 + "," + u1 + + shapeArc(u1,u1,u1,u1,180,270,false).replace("M","L") + + " L" + x1 + "," + 0 + + " L" + xt + "," + yt + + " L" + x2 + "," + 0 + + " L" + u2 + "," + 0 + + shapeArc(u2,u1,u1,u1,270,360,false).replace("M","L") + + " L" + w + "," + y1 + + " L" + xr + "," + yr + + " L" + w + "," + y2 + + " L" + w + "," + v2 + + shapeArc(u2,v2,u1,u1,0,90,false).replace("M","L") + + " L" + x2 + "," + h + + " L" + xb + "," + yb + + " L" + x1 + "," + h + + " L" + u1 + "," + h + + shapeArc(u1,v2,u1,u1,90,180,false).replace("M","L") + + " L" + 0 + "," + y2 + + " L" + xl + "," + yl + + " L" + 0 + "," + y1 + + " z"; + result += ""; + + break; + case "accentBorderCallout1": + case "accentBorderCallout2": + case "accentBorderCallout3": + case "borderCallout1": + case "borderCallout2": + case "borderCallout3": + case "accentCallout1": + case "accentCallout2": + case "accentCallout3": + case "callout1": + case "callout2": + case "callout3": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var refr = 96/914400; + var sAdj1,adj1= 18750*refr; + var sAdj2,adj2 = -8333*refr; + var sAdj3,adj3 = 18750*refr; + var sAdj4,adj4= -16667*refr; + var sAdj5,adj5 = 100000*refr; + var sAdj6,adj6 = -16667*refr; + var sAdj7,adj7 = 112963*refr; + var sAdj8,adj8 = -8333*refr; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + + //}else{ + // result += ""; + + //} + break; + case "leftRightRibbon": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var refr = 96/914400; + var sAdj1,adj1= 50000*refr; + var sAdj2,adj2 = 50000*refr; + var sAdj3,adj3 = 16667*refr; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal1)?cnstVal1:adj3; + maxAdj1 = cnstVal2-a3; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + w1 = hc-wd32; + maxAdj2 = cnstVal2*w1/ss; + a2 = (adj2<0)?0:(adj2>maxAdj2)?maxAdj2:adj2; + x1 = ss*a2/cnstVal2; + x4 = w-x1; + dy1 = h*a1/cnstVal3; + dy2 = h*a3/-cnstVal3; + ly1 = vc+dy2-dy1; + ry4 = vc+dy1-dy2; + ly2 = ly1+dy1; + ry3 = h-ly2; + ly4 = ly2*2; + ry1 = h-ly4; + ly3 = ly4-ly1; + ry2 = h-ly3; + hR = a3*ss/cnstVal4; + x2 = hc-wd32; + x3 = hc+wd32; + y1 = ly1+hR; + y2 = ry2-hR; + + d_val = "M" + 0 + "," + ly2 + + "L" + x1 + "," + 0 + + "L" + x1 + "," + ly1 + + "L" + hc + "," + ly1 + + shapeArc(hc,y1,wd32,hR,270,450,false).replace("M","L") + + shapeArc(hc,y2,wd32,hR,270,90,false).replace("M","L") + + "L" + x4 + "," + ry2 + + "L" + x4 + "," + ry1 + + "L" + w + "," + ry3 + + "L" + x4 + "," + h + + "L" + x4 + "," + ry4 + + "L" + hc + "," + ry4 + + shapeArc(hc,ry4-hR,wd32,hR,90,180,false).replace("M","L") + + "L" + x2 + "," + ly3 + + "L" + x1 + "," + ly3 + + "L" + x1 + "," + ly4 + + " z" + + "M" + x3 + "," + y1 + + "L" + x3 + "," + ry2 + + "M" + x2 + "," + y2 + + "L" + x2 + "," + ly3; + + result += ""; + + break; + case "ribbon": + case "ribbon2": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1= 16667*96/914400; + var sAdj2,adj2 = 50000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal2)?cnstVal2:adj1; + a2 = (adj2cnstVal3)?cnstVal3:adj2; + x10 = r-wd8; + dx2 = w*a2/cnstVal5; + x2 = hc-dx2; + x9 = hc+dx2; + x3 = x2+wd32; + x8 = x9-wd32; + x5 = x2+wd8; + x6 = x9-wd8; + x4 = x5-wd32; + x7 = x6+wd32; + hR = h*a1/cnstVal6; + if(shapType == "ribbon2"){ + var dy1, dy2, y7; + dy1 = h*a1/cnstVal5; + y1 = b-dy1; + dy2 = h*a1/cnstVal4; + y2 = b-dy2; + y4 = t+dy2; + y3 = (y4+b)/2; + y6 = b-hR;/////////////////// + y7 = y1-hR; + + d_val = "M" + l + "," + b + + " L" + wd8 + "," + y3 + + " L" + l + "," + y4 + + " L" + x2 + "," + y4 + + " L" + x2 + "," + hR + + shapeArc(x3,hR,wd32,hR,180,270,false).replace("M","L") + + " L" + x8 + "," + t + + shapeArc(x8,hR,wd32,hR,270,360,false).replace("M","L") + + " L" + x9 + "," + y4 + + " L" + x9 + "," + y4 + + " L" + r + "," + y4 + + " L" + x10 + "," + y3 + + " L" + r + "," + b + + " L" + x7 + "," + b + + shapeArc(x7,y6,wd32,hR,90,270,false).replace("M","L") + + " L" + x8 + "," + y1 + + shapeArc(x8,y7,wd32,hR,90,-90,false).replace("M","L") + + " L" + x3 + "," + y2 + + shapeArc(x3,y7,wd32,hR,270,90,false).replace("M","L") + + " L" + x4 + "," + y1 + + shapeArc(x4,y6,wd32,hR,270,450,false).replace("M","L") + + " z" + + " M" + x5 + "," + y2 + + " L" + x5 + "," + y6 + + "M" + x6 + "," + y6 + + " L" + x6 + "," + y2 + + "M" + x2 + "," + y7 + + " L" + x2 + "," + y4 + + "M" + x9 + "," + y4 + + " L" + x9 + "," + y7; + }else if(shapType == "ribbon"){ + var y5; + y1 = h*a1/cnstVal5; + y2 = h*a1/cnstVal4; + y4 = b-y2; + y3 = y4/2; + y5 = b-hR; /////////////////////// + y6 = y2-hR; + d_val = "M" + l + "," + t + + " L" + x4 + "," + t + + shapeArc(x4,hR,wd32,hR,270,450,false).replace("M","L") + + " L" + x3 + "," + y1 + + shapeArc(x3,y6,wd32,hR,270,90,false).replace("M","L") + + " L" + x8 + "," + y2 + + shapeArc(x8,y6,wd32,hR,90,-90,false).replace("M","L") + + " L" + x7 + "," + y1 + + shapeArc(x7,hR,wd32,hR,90,270,false).replace("M","L") + + " L" + r + "," + t + + " L" + x10 + "," + y3 + + " L" + r + "," + y4 + + " L" + x9 + "," + y4 + + " L" + x9 + "," + y5 + + shapeArc(x8,y5,wd32,hR,0,90,false).replace("M","L") + + " L" + x3 + "," + b + + shapeArc(x3,y5,wd32,hR,90,180,false).replace("M","L") + + " L" + x2 + "," + y4 + + " L" + l + "," + y4 + + " L" + wd8 + "," + y3 + + " z" + + " M" + x5 + "," + hR + + " L" + x5 + "," + y2 + + "M" + x6 + "," + y2 + + " L" + x6 + "," + hR + + "M" + x2 + "," + y4 + + " L" + x2 + "," + y6 + + "M" + x9 + "," + y6 + + " L" + x9 + "," + y4; + } + result += ""; + + break; + case "doubleWave": + case "wave": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1, adj1 = (shapType == "doubleWave")?6250*96/914400:12500*96/914400; + var sAdj2,adj2 = 0; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal1)?cnstVal1:adj1; + a2 = (adj2cnstVal4)?cnstVal4:adj2; + y1 = h*a1/cnstVal4; + dy2 = y1*10/3; + y2 = y1-dy2; + y3 = y1+dy2; + y4 = b-y1; + y5 = y4-dy2; + y6 = y4+dy2; + of2 = w*a2/cnstVal3; + dx2 = (of2 > 0)?0:of2; + x2 = l-dx2; + dx8 = (of2 > 0)?of2:0; + x8 = r-dx8; + dx3 = (dx2+x8)/6; + x3 = x2+dx3; + dx4 = (dx2+x8)/3; + x4 = x2+dx4; + x5 = (x2+x8)/2; + x6 = x5+dx3; + x7 = (x6+x8)/2; + x9 = l+dx8; + x15 = r+dx2; + x10 = x9+dx3; + x11 = x9+dx4; + x12 = (x9+x15)/2; + x13 = x12+dx3; + x14 = (x13+x15)/2; + + d_val = "M" + x2 + "," + y1 + + " C" + x3 + "," + y2 + " "+ x4 + "," + y3 + " "+ x5 + "," + y1 + + " C" + x6 + "," + y2 + " "+ x7 + "," + y3 + " "+ x8 + "," + y1 + + " L" + x15 + "," + y4 + + " C" + x14 + "," + y6 + " "+x13 + "," + y5 + " "+x12 + "," + y4 + + " C" + x11 + "," + y6 + " "+x10 + "," + y5 + " "+x9 + "," + y4 + + " z"; + }else if(shapType == "wave"){ + var cnstVal5 = 20000*96/914400; + var a1, a2, y1, dy2, y2, y3, y4, y5, y6, of2, dx2, x2, dx5, x5, dx3, x3, x4, x6, x10, x7, x8; + a1 = (adj1<0)?0:(adj1>cnstVal5)?cnstVal5:adj1; + a2 = (adj2cnstVal4)?cnstVal4:adj2; + y1 = h*a1/cnstVal4; + dy2 = y1*10/3; + y2 = y1-dy2; + y3 = y1+dy2; + y4 = b-y1; + y5 = y4-dy2; + y6 = y4+dy2; + of2 = w*a2/cnstVal3; + dx2 = (of2 > 0)?0:of2; + x2 = l-dx2; + dx5 = (of2 > 0)?of2:0; + x5 = r-dx5; + dx3 = (dx2+x5)/3; + x3 = x2+dx3; + x4 = (x3+x5)/2; + x6 = l+dx5; + x10 = r+dx2; + x7 = x6+dx3; + x8 = (x7+x10)/2; + + d_val = "M" + x2 + "," + y1 + + " C" + x3 + "," + y2 + " "+ x4 + "," + y3 + " "+ x5 + "," + y1 + + " L" + x10 + "," + y4 + + " C" + x8 + "," + y6 + " "+ x7 + "," + y5 + " "+ x6 + "," + y4 + + " z"; + } + result += ""; + + break; + case "ellipseRibbon": + case "ellipseRibbon2": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1= 25000*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var sAdj3,adj3 = 12500*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal4)?cnstVal4:adj1; + a2 = (adj2cnstVal3)?cnstVal3:adj2; + q10 = cnstVal4-a1; + q11 = q10/2; + q12 = a1-q11; + minAdj3 = (0>q12)?0:q12; + a3 = (adj3a1)?a1:adj3; + dx2 = w*a2/cnstVal5; + x2 = hc-dx2; + x3 = x2+wd8; + x4 = r-x3; + x5 = r-x2; + x6 = r-wd8; + dy1 = h*a3/cnstVal4; + f1 = 4*dy1/w; + q1 = x3*x3/w; + q2 = x3-q1; + cx1 = x3/2; + cx2 = r-cx1; + q1 = h*a1/cnstVal4; + dy3 = q1-dy1; + q3 = x2*x2/w; + q4 = x2-q3; + q5 = f1*q4; + rh = b-q1; + q8 = dy1*14/16; + cx4 = x2/2; + q9 = f1*cx4; + cx5 = r-cx4; + if(shapType == "ellipseRibbon"){ + var y1, cy1, y3, q6, q7, cy3, y2, y5, y6, + cy4, cy6, y7, cy7, y8; + y1 = f1*q2; + cy1 = f1*cx1; + y3 = q5+dy3; + q6 = dy1+dy3-y3; + q7 = q6+dy1; + cy3 = q7+dy3; + y2 = (q8+rh)/2; + y5 = q5+rh; + y6 = y3+rh; + cy4 = q9+rh; + cy6 = cy3+rh; + y7 = y1+dy3; + cy7 = q1+q1-y7; + y8 = b-dy1; + // + d_val = "M" + l + "," + t + + " Q" + cx1 + "," + cy1 + " " + x3 + "," + y1 + + " L" + x2 + "," + y3 + + " Q" + hc + "," + cy3 + " " + x5 + "," + y3 + + " L" + x4 + "," + y1 + + " Q" + cx2 + "," + cy1 + " " + r + "," + t + + " L" + x6 + "," + y2 + + " L" + r + "," + rh + + " Q" + cx5 + "," + cy4 + " " + x5 + "," + y5 + + " L" + x5 + "," + y6 + + " Q" + hc + "," + cy6 + " " + x2 + "," + y6 + + " L" + x2 + "," + y5 + + " Q" + cx4 + "," + cy4 + " " + l + "," + rh + + " L" + wd8 + "," + y2 + + " z" + + "M" + x2 + "," + y5 + + " L" + x2 + "," + y3 + + "M" + x5 + "," + y3 + + " L" + x5 + "," + y5 + + "M" + x3 + "," + y1 + + " L" + x3 + "," + y7 + + "M" + x4 + "," + y7 + + " L" + x4 + "," + y1; + }else if(shapType == "ellipseRibbon2"){ + var u1, y1, cu1, cy1, q3, q5, u3, y3, q6, q7, cu3, cy3, rh, q8, u2, y2, + u5, y5, u6, y6, cu4, cy4, cu6, cy6, u7, y7, cu7, cy7; + u1 = f1*q2; + y1 = b-u1; + cu1 = f1*cx1; + cy1 = b-cu1; + u3 = q5+dy3; + y3 = b-u3; + q6 = dy1+dy3-u3; + q7 = q6+dy1; + cu3 = q7+dy3; + cy3 = b-cu3; + u2 = (q8+rh)/2; + y2 = b-u2; + u5 = q5+rh; + y5 = b-u5; + u6 = u3+rh; + y6 = b-u6; + cu4 = q9+rh; + cy4 = b-cu4; + cu6 = cu3+rh; + cy6 = b-cu6; + u7 = u1+dy3; + y7 = b-u7; + cu7 = q1+q1-u7; + cy7 = b-cu7; + // + d_val = "M" + l + "," + b + + " L" + wd8 + "," + y2 + + " L" + l + "," + q1 + + " Q" + cx4 + "," + cy4 + " " + x2 + "," + y5 + + " L" + x2 + "," + y6 + + " Q" + hc + "," + cy6 + " " + x5 + "," + y6 + + " L" + x5 + "," + y5 + + " Q" + cx5 + "," + cy4 + " " + r + "," + q1 + + " L" + x6 + "," + y2 + + " L" + r + "," + b + + " Q" + cx2 + "," + cy1 + " " + x4 + "," + y1 + + " L" + x5 + "," + y3 + + " Q" + hc + "," + cy3 + " " + x2 + "," + y3 + + " L" + x3 + "," + y1 + + " Q" + cx1 + "," + cy1 + " " + l + "," + b + + " z" + + "M" + x2 + "," + y3 + + " L" + x2 + "," + y5 + + "M" + x5 + "," + y5 + + " L" + x5 + "," + y3 + + "M" + x3 + "," + y7 + + " L" + x3 + "," + y1 + + "M" + x4 + "," + y1 + + " L" + x4 + "," + y7; + } + result += ""; + + break; + case "line": + case "straightConnector1": + case "bentConnector4": + case "bentConnector5": + case "curvedConnector2": + case "curvedConnector3": + case "curvedConnector4": + case "curvedConnector5": + if (isFlipV) { + result += ""; + break; + case "leftArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val = 0.25;//0.5; + var sAdj2,sAdj2_val = 0.5; + var max_sAdj2_const = w/h; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + break; + case "downArrow": + case "flowChartOffpageConnector": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val = 0.25;//0.5; + var sAdj2,sAdj2_val = 0.5; + var max_sAdj2_const = h/w; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + break; + case "upArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val = 0.25;//0.5; + var sAdj2,sAdj2_val = 0.5; + var max_sAdj2_const = h/w; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + break; + case "leftRightArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val = 0.25; + var sAdj2,sAdj2_val = 0.25; + var max_sAdj2_const = w/h; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + break; + case "upDownArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,sAdj1_val = 0.25; + var sAdj2,sAdj2_val = 0.25; + var max_sAdj2_const = h/w; + if(shapAdjst_ary !== undefined){ + for(var i=0; i"; + break; + case "quadArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 22500*96/914400; + var sAdj2,adj2 = 22500*96/914400; + var sAdj3,adj3 = 22500*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a2 = cnstVal1 + else a2 = adj2 + maxAdj1 = 2*a2; + if(adj1 < 0) a1 = 0 + else if (adj1 > maxAdj1) a1 = maxAdj1 + else a1 = adj1 + q1 = cnstVal2 - maxAdj1; + maxAdj3 = q1/2; + if(adj3 < 0) a3 = 0 + else if (adj3 > maxAdj3) a3 = maxAdj3 + else a3 = adj3 + x1 = minWH*a3/cnstVal2; + dx2 = minWH*a2/cnstVal2; + x2 = hc - dx2; + x5 = hc + dx2; + dx3 = minWH*a1/cnstVal3; + x3 = hc - dx3; + x4 = hc + dx3; + x6 = w - x1; + y2 = vc - dx2; + y5 = vc + dx2; + y3 = vc - dx3; + y4 = vc + dx3; + y6 = h - x1; + var d_val = "M" + 0 + "," + vc + + " L" + x1 + "," + y2 + + " L" + x1 + "," + y3 + + " L" + x3 + "," + y3 + + " L" + x3 + "," + x1 + + " L" + x2 + "," + x1 + + " L" + hc + "," + 0 + + " L" + x5 + "," + x1 + + " L" + x4 + "," + x1 + + " L" + x4 + "," + y3 + + " L" + x6 + "," + y3 + + " L" + x6 + "," + y2 + + " L" + w + "," + vc + + " L" + x6 + "," + y5 + + " L" + x6 + "," + y4 + + " L" + x4 + "," + y4 + + " L" + x4 + "," + y6 + + " L" + x5 + "," + y6 + + " L" + hc + "," + h + + " L" + x2 + "," + y6 + + " L" + x3 + "," + y6 + + " L" + x3 + "," + y4 + + " L" + x1 + "," + y4 + + " L" + x1 + "," + y5 + " z"; + + result += ""; + + break; + case "leftRightUpArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a2 = cnstVal1 + else a2 = adj2 + maxAdj1 = 2*a2; + if(adj1 < 0) a1 = 0 + else if (adj1 > maxAdj1) a1 = maxAdj1 + else a1 = adj1 + q1 = cnstVal2 - maxAdj1; + maxAdj3 = q1/2; + if(adj3 < 0) a3 = 0 + else if (adj3 > maxAdj3) a3 = maxAdj3 + else a3 = adj3 + x1 = minWH*a3/cnstVal2; + dx2 = minWH*a2/cnstVal2; + x2 = hc - dx2; + x5 = hc + dx2; + dx3 = minWH*a1/cnstVal3; + x3 = hc - dx3; + x4 = hc + dx3; + x6 = w - x1; + dy2 = minWH*a2/cnstVal1; + y2 = h - dy2; + y4 = h - dx2; + y3 = y4 - dx3; + y5 = y4 + dx3; + var d_val = "M" + 0 + "," + y4 + + " L" + x1 + "," + y2 + + " L" + x1 + "," + y3 + + " L" + x3 + "," + y3 + + " L" + x3 + "," + x1 + + " L" + x2 + "," + x1 + + " L" + hc + "," + 0 + + " L" + x5 + "," + x1 + + " L" + x4 + "," + x1 + + " L" + x4 + "," + y3 + + " L" + x6 + "," + y3 + + " L" + x6 + "," + y2 + + " L" + w + "," + y4 + + " L" + x6 + "," + h + + " L" + x6 + "," + y5 + + " L" + x1 + "," + y5 + + " L" + x1 + "," + h + " z"; + + result += ""; + + break; + case "leftUpArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a2 = cnstVal1 + else a2 = adj2 + maxAdj1 = 2*a2; + if(adj1 < 0) a1 = 0 + else if (adj1 > maxAdj1) a1 = maxAdj1 + else a1 = adj1 + maxAdj3 = cnstVal2 - maxAdj1; + if(adj3 < 0) a3 = 0 + else if (adj3 > maxAdj3) a3 = maxAdj3 + else a3 = adj3 + x1 = minWH*a3/cnstVal2; + dx2 = minWH*a2/cnstVal1; + x2 = w - dx2; + y2 = h - dx2; + dx4 = minWH*a2/cnstVal2; + x4 = w - dx4; + y4 = h - dx4; + dx3 = minWH*a1/cnstVal3; + x3 = x4 - dx3; + x5 = x4 + dx3; + y3 = y4 - dx3; + y5 = y4 + dx3; + var d_val = "M" + 0 + "," + y4 + + " L" + x1 + "," + y2 + + " L" + x1 + "," + y3 + + " L" + x3 + "," + y3 + + " L" + x3 + "," + x1 + + " L" + x2 + "," + x1 + + " L" + x4 + "," + 0 + + " L" + w + "," + x1 + + " L" + x5 + "," + x1 + + " L" + x5 + "," + y5 + + " L" + x1 + "," + y5 + + " L" + x1 + "," + h + " z"; + + result += ""; + + break; + case "bentUpArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a1 = cnstVal1 + else a1 = adj1 + if(adj2 < 0) a2 = 0 + else if (adj2 > cnstVal1) a2 = cnstVal1 + else a2 = adj2 + if(adj3 < 0) a3 = 0 + else if (adj3 > maxAdj3) a3 = maxAdj3 + else a3 = adj3 + y1 = minWH*a3/cnstVal2; + dx1 = minWH*a2/cnstVal1; + x1 = w - dx1; + dx3 = minWH*a2/cnstVal2; + x3 = w - dx3; + dx2 = minWH*a1/cnstVal3; + x2 = x3 - dx2; + x4 = x3 + dx2; + dy2 = minWH*a1/cnstVal2; + y2 = h - dy2; + var d_val = "M" + 0 + "," + y2 + + " L" + x2 + "," + y2 + + " L" + x2 + "," + y1 + + " L" + x1 + "," + y1 + + " L" + x3 + "," + 0 + + " L" + w + "," + y1 + + " L" + x4 + "," + y1 + + " L" + x4 + "," + h + + " L" + 0 + "," + h + " z"; + + result += ""; + + break; + case "bentArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var sAdj4,adj4 = 43750*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a2 = cnstVal1 + else a2 = adj2 + maxAdj1 = 2*a2; + if(adj1 < 0) a1 = 0 + else if (adj1 > maxAdj1) a1 = maxAdj1 + else a1 = adj1 + if(adj3 < 0) a3 = 0 + else if (adj3 > cnstVal1) a3 = cnstVal1 + else a3 = adj3 + var th,aw2,th2,dh2,ah,bw,bh,bs,bd,bd3,bd2, + th = minWH*a1/cnstVal2; + aw2 = minWH*a2/cnstVal2; + th2 = th/2; + dh2 = aw2-th2; + ah = minWH*a3/cnstVal2; + bw = w-ah; + bh = h-dh2; + bs = (bw maxAdj4) a4 = maxAdj4 + else a4 = adj4 + bd = minWH*a4/cnstVal2; + bd3 = bd-th; + bd2 = (bd3>0)?bd3:0; + x3 = th+bd2; + x4 = w-ah; + y3 = dh2+th; + y4 = y3+dh2; + y5 = dh2+bd; + y6 = y3+bd2; + + var d_val = "M" + 0 + "," + h + + " L" + 0 + "," + y5 + + shapeArc(bd,y5,bd,bd,180,270,false).replace("M","L") + + " L" + x4 + "," + dh2 + + " L" + x4 + "," + 0 + + " L" + w + "," + aw2 + + " L" + x4 + "," + y4 + + " L" + x4 + "," + y3 + + " L" + x3 + "," + y3 + + shapeArc(x3,y6,bd2,bd2,270,180,false).replace("M","L") + + " L" + th + "," + h + " z"; + + result += ""; + + break; + case "uturnArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var sAdj4,adj4 = 43750*96/914400; + var sAdj5,adj5 = 75000*96/914400; + var cnstVal1 = 25000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a2 = cnstVal1 + else a2 = adj2 + maxAdj1 = 2*a2; + if(adj1 < 0) a1 = 0 + else if (adj1 > maxAdj1) a1 = maxAdj1 + else a1 = adj1 + q2 = a1*minWH/h; + q3 = cnstVal2 - q2; + maxAdj3 = q3*h/minWH; + if(adj3 < 0) a3 = 0 + else if (adj3 > maxAdj3) a3 = maxAdj3 + else a3 = adj3 + q1 = a3+a1; + minAdj5 = q1*minWH/h; + if(adj5 < minAdj5) a5 = minAdj5 + else if (adj5 > cnstVal2) a5 = cnstVal2 + else a5 = adj5 + + var th,aw2,th2,dh2,ah,bw,bs,bd,bd3,bd2, + th = minWH*a1/cnstVal2; + aw2 = minWH*a2/cnstVal2; + th2 = th/2; + dh2 = aw2-th2; + y5 = h*a5/cnstVal2; + ah = minWH*a3/cnstVal2; + y4 = y5-ah; + x9 = w-dh2; + bw = x9/2; + bs = (bw maxAdj4) a4 = maxAdj4 + else a4 = adj4 + bd = minWH*a4/cnstVal2; + bd3 = bd-th; + bd2 = (bd3>0)?bd3:0; + x3 = th+bd2; + x8 = w - aw2; + x6 = x8 - aw2; + x7 = x6 + dh2; + x4 = x9-bd; + x5 = x7 - bd2; + cx = (th + x7)/2 + var cy = (y4+th)/2 + var d_val = "M" + 0 + "," + h + + " L" + 0 + "," + bd + + shapeArc(bd,bd,bd,bd,180,270,false).replace("M","L") + + " L" + x4 + "," + 0 + + shapeArc(x4,bd,bd,bd,270,360,false).replace("M","L") + + " L" + x9 + "," + y4 + + " L" + w + "," + y4 + + " L" + x8 + "," + y5 + + " L" + x6 + "," + y4 + + " L" + x7 + "," + y4 + + " L" + x7 + "," + x3 + + shapeArc(x5,x3,bd2,bd2,0,-90,false).replace("M","L") + + " L" + x3 + "," + th + + shapeArc(x3,x3,bd2,bd2,270,180,false).replace("M","L") + + " L" + th + "," + h + " z"; + + result += ""; + + break; + case "stripedRightArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 50000*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var cnstVal1 = 100000*96/914400; + var cnstVal2 = 200000*96/914400; + var cnstVal3 = 84375*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a1 = cnstVal1 + else a1 = adj1 + if(adj2 < 0) a2 = 0 + else if (adj2 > maxAdj2) a2 = maxAdj2 + else a2 = adj2 + x4 = minWH*5/32; + dx5 = minWH*a2/cnstVal1; + x5 = w-dx5; + dy1 = h*a1/cnstVal2; + y1 = vc-dy1; + y2 = vc+dy1; + //dx6 = dy1*dx5/hd2; + //x6 = w-dx6; + var ssd8 = minWH/8, + ssd16 = minWH/16, + ssd32 = minWH/32; + var d_val = "M" + 0 + "," + y1 + + " L" + ssd32 + "," + y1 + + " L" + ssd32 + "," + y2 + + " L" + 0 + "," + y2 + " z" + + " M" + ssd16 + "," + y1 + + " L" + ssd8 + "," + y1 + + " L" + ssd8 + "," + y2 + + " L" + ssd16 + "," + y2 +" z" + + " M" + x4 + "," + y1 + + " L" + x5 + "," + y1 + + " L" + x5 + "," + 0 + + " L" + w + "," + vc + + " L" + x5 + "," + h + + " L" + x5 + "," + y2 + + " L" + x4 + "," + y2 + " z"; + + result += ""; + + break; + case "notchedRightArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 50000*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var cnstVal1 = 100000*96/914400; + var cnstVal2 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; i cnstVal1) a1 = cnstVal1 + else a1 = adj1 + if(adj2 < 0) a2 = 0 + else if (adj2 > maxAdj2) a2 = maxAdj2 + else a2 = adj2 + dx2 = minWH*a2/cnstVal1; + x2 = w-dx2; + dy1 = h*a1/cnstVal2; + y1 = vc-dy1; + y2 = vc+dy1; + x1 = dy1*dx2/hd2; + var d_val = "M" + 0 + "," + y1 + + " L" + x2 + "," + y1 + + " L" + x2 + "," + 0 + + " L" + w + "," + vc + + " L" + x2 + "," + h + + " L" + x2 + "," + y2 + + " L" + 0 + "," + y2 + + " L" + x1 + "," + vc + " z"; + + result += ""; + + break; + case "homePlate": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 50000*96/914400; + var cnstVal1 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var a,x1,dx1,maxAdj,vc=h/2; + var minWH = Math.min(w,h); + maxAdj = cnstVal1*w/minWH; + if(adj < 0) a = 0 + else if (adj > maxAdj) a = maxAdj + else a = adj + dx1 = minWH*a/cnstVal1; + x1 = w-dx1; + var d_val = "M" + 0 + "," + 0 + + " L" + x1 + "," + 0 + + " L" + w + "," + vc + + " L" + x1 + "," + h + + " L" + 0 + "," + h + " z"; + + result += ""; + + break; + case "chevron": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 50000*96/914400; + var cnstVal1 = 100000*96/914400; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var a,x1,dx1,x2,maxAdj,vc=h/2; + var minWH = Math.min(w,h); + maxAdj = cnstVal1*w/minWH; + if(adj < 0) a = 0 + else if (adj > maxAdj) a = maxAdj + else a = adj + x1 = minWH*a/cnstVal1; + x2 = w-x1; + var d_val = "M" + 0 + "," + 0 + + " L" + x2 + "," + 0 + + " L" + w + "," + vc + + " L" + x2 + "," + h + + " L" + 0 + "," + h + + " L" + x1 + "," + vc + " z"; + + result += ""; + + + break; + case "rightArrowCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var sAdj4,adj4 = 64977*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + maxAdj1 = a2*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + maxAdj3 = cnstVal2*w/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + q2 = a3*ss/w; + maxAdj4 = cnstVal-q2; + a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; + dy1 = ss*a2/cnstVal2; + dy2 = ss*a1/cnstVal3; + y1 = vc-dy1; + y2 = vc-dy2; + y3 = vc+dy2; + y4 = vc+dy1; + dx3 = ss*a3/cnstVal2; + x3 = r-dx3; + x2 = w*a4/cnstVal2; + x1 = x2/2; + var d_val = "M" + l + "," + t + + " L" + x2 + "," + t + + " L" + x2 + "," + y2 + + " L" + x3 + "," + y2 + + " L" + x3 + "," + y1 + + " L" + r + "," + vc + + " L" + x3 + "," + y4 + + " L" + x3 + "," + y3 + + " L" + x2 + "," + y3 + + " L" + x2 + "," + b + + " L" + l + "," + b + + " z"; + result += ""; + + break; + case "downArrowCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var sAdj4,adj4 = 64977*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + maxAdj1 = a2*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + maxAdj3 = cnstVal2*h/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + q2 = a3*ss/h; + maxAdj4 = cnstVal2-q2; + a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; + dx1 = ss*a2/cnstVal2; + dx2 = ss*a1/cnstVal3; + x1 = hc-dx1; + x2 = hc-dx2; + x3 = hc+dx2; + x4 = hc+dx1; + dy3 = ss*a3/cnstVal2; + y3 = b-dy3; + y2 = h*a4/cnstVal2; + y1 = y2/2; + var d_val = "M" + l + "," + t + + " L" + r + "," + t + + " L" + r + "," + y2 + + " L" + x3 + "," + y2 + + " L" + x3 + "," + y3 + + " L" + x4 + "," + y3 + + " L" + hc + "," + b + + " L" + x1 + "," + y3 + + " L" + x2 + "," + y3 + + " L" + x2 + "," + y2 + + " L" + l + "," + y2 + + " z"; + result += ""; + + break; + case "leftArrowCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var sAdj4,adj4 = 64977*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + maxAdj1 = a2*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + maxAdj3 = cnstVal2*w/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + q2 = a3*ss/w; + maxAdj4 = cnstVal2-q2; + a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; + dy1 = ss*a2/cnstVal2; + dy2 = ss*a1/cnstVal3; + y1 = vc-dy1; + y2 = vc-dy2; + y3 = vc+dy2; + y4 = vc+dy1; + x1 = ss*a3/cnstVal2; + dx2 = w*a4/cnstVal2; + x2 = r-dx2; + x3 = (x2+r)/2; + var d_val = "M" + l + "," + vc + + " L" + x1 + "," + y1 + + " L" + x1 + "," + y2 + + " L" + x2 + "," + y2 + + " L" + x2 + "," + t + + " L" + r + "," + t + + " L" + r + "," + b + + " L" + x2 + "," + b + + " L" + x2 + "," + y3 + + " L" + x1 + "," + y3 + + " L" + x1 + "," + y4 + + " z"; + result += ""; + + break; + case "upArrowCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var sAdj4,adj4 = 64977*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + maxAdj1 = a2*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + maxAdj3 = cnstVal2*h/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + q2 = a3*ss/h; + maxAdj4 = cnstVal2-q2; + a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; + dx1 = ss*a2/cnstVal2; + dx2 = ss*a1/cnstVal3; + x1 = hc-dx1; + x2 = hc-dx2; + x3 = hc+dx2; + x4 = hc+dx1; + y1 = ss*a3/cnstVal2; + dy2 = h*a4/cnstVal2; + y2 = b-dy2; + y3 = (y2+b)/2; + + var d_val = "M" + l + "," + y2 + + " L" + x2 + "," + y2 + + " L" + x2 + "," + y1 + + " L" + x1 + "," + y1 + + " L" + hc + "," + t + + " L" + x4 + "," + y1 + + " L" + x3 + "," + y1 + + " L" + x3 + "," + y2 + + " L" + r + "," + y2 + + " L" + r + "," + b + + " L" + l + "," + b + + " z"; + result += ""; + + break; + case "leftRightArrowCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 25000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var sAdj4,adj4 = 48123*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + maxAdj1 = a2*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + maxAdj3 = cnstVal1*w/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + q2 = a3*ss/wd2; + maxAdj4 = cnstVal2-q2; + a4 = (adj4<0)?0:(adj4>maxAdj4)?maxAdj4:adj4; + dy1 = ss*a2/cnstVal2; + dy2 = ss*a1/cnstVal3; + y1 = vc-dy1; + y2 = vc-dy2; + y3 = vc+dy2; + y4 = vc+dy1; + x1 = ss*a3/cnstVal2; + x4 = r-x1; + dx2 = w*a4/cnstVal3; + x2 = hc-dx2; + x3 = hc+dx2; + var d_val = "M" + l + "," + vc + + " L" + x1 + "," + y1 + + " L" + x1 + "," + y2 + + " L" + x2 + "," + y2 + + " L" + x2 + "," + t + + " L" + x3 + "," + t + + " L" + x3 + "," + y2 + + " L" + x4 + "," + y2 + + " L" + x4 + "," + y1 + + " L" + r + "," + vc + + " L" + x4 + "," + y4 + + " L" + x4 + "," + y3 + + " L" + x3 + "," + y3 + + " L" + x3 + "," + b + + " L" + x2 + "," + b + + " L" + x2 + "," + y3 + + " L" + x1 + "," + y3 + + " L" + x1 + "," + y4 + + " z"; + result += ""; + + break; + case "quadArrowCallout": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 18515*96/914400; + var sAdj2,adj2 = 18515*96/914400; + var sAdj3,adj3 = 18515*96/914400; + var sAdj4,adj4 = 48123*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + var cnstVal3 = 200000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal1)?cnstVal1:adj2; + maxAdj1 = a2*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + maxAdj3 = cnstVal1-a2; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + q2 = a3*2; + maxAdj4 = cnstVal2-q2; + a4 = (adj4maxAdj4)?maxAdj4:adj4; + dx2 = ss*a2/cnstVal2; + dx3 = ss*a1/cnstVal3; + ah = ss*a3/cnstVal2; + dx1 = w*a4/cnstVal3; + dy1 = h*a4/cnstVal3; + x8 = r-ah; + x2 = hc-dx1; + x7 = hc+dx1; + x3 = hc-dx2; + x6 = hc+dx2; + x4 = hc-dx3; + x5 = hc+dx3; + y8 = b-ah; + y2 = vc-dy1; + y7 = vc+dy1; + y3 = vc-dx2; + y6 = vc+dx2; + y4 = vc-dx3; + y5 = vc+dx3; + var d_val = "M" + l + "," + vc + + " L" + ah + "," + y3 + + " L" + ah + "," + y4 + + " L" + x2 + "," + y4 + + " L" + x2 + "," + y2 + + " L" + x4 + "," + y2 + + " L" + x4 + "," + ah + + " L" + x3 + "," + ah + + " L" + hc + "," + t + + " L" + x6 + "," + ah + + " L" + x5 + "," + ah + + " L" + x5 + "," + y2 + + " L" + x7 + "," + y2 + + " L" + x7 + "," + y4 + + " L" + x8 + "," + y4 + + " L" + x8 + "," + y3 + + " L" + r + "," + vc + + " L" + x8 + "," + y6 + + " L" + x8 + "," + y5 + + " L" + x7 + "," + y5 + + " L" + x7 + "," + y7 + + " L" + x5 + "," + y7 + + " L" + x5 + "," + y8 + + " L" + x6 + "," + y8 + + " L" + hc + "," + b + + " L" + x3 + "," + y8 + + " L" + x4 + "," + y8 + + " L" + x4 + "," + y7 + + " L" + x2 + "," + y7 + + " L" + x2 + "," + y5 + + " L" + ah + "," + y5 + + " L" + ah + "," + y6 + + " z"; + + result += ""; + + break; + case "curvedDownArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + a1 = (adj1<0)?0:(adj1>cnstVal2)?cnstVal2:adj1; + th = ss*a1/cnstVal2; + aw = ss*a2/cnstVal2; + q1 = (th+aw)/4; + wR = wd2-q1; + q7 = wR*2; + q8 = q7*q7; + q9 = th*th; + q10 = q8-q9; + q11 = Math.sqrt(q10); + idy = q11*h/q7; + maxAdj3 = cnstVal2*idy/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + ah = ss*adj3/cnstVal2; + x3 = wR+th; + q2 = h*h; + q3 = ah*ah; + q4 = q2-q3; + q5 = Math.sqrt(q4); + dx = q5*wR/h; + x5 = wR+dx; + x7 = x3+dx; + q6 = aw-th; + dh = q6/2; + x4 = x5-dh; + x8 = x7+dh; + aw2 = aw/2; + x6 = r-aw2; + y1 = b-ah; + swAng = Math.atan(dx/ah); + var swAngDeg = swAng*180/Math.PI; + mswAng = -swAngDeg; + iy = b-idy; + ix = (wR+x3)/2; + q12 = th/2; + dang2 = Math.atan(q12/idy); + var dang2Deg = dang2*180/Math.PI; + stAng = c3d4+swAngDeg; + stAng2 = c3d4-dang2Deg; + swAng2 = dang2Deg-cd4; + swAng3 = cd4+dang2Deg; + //var cX = x5 - Math.cos(stAng*Math.PI/180) * wR; + //var cY = y1 - Math.sin(stAng*Math.PI/180) * h; + + var d_val = "M" + x6 + "," + b + + " L" + x4 + "," + y1 + + " L" + x5 + "," + y1 + + shapeArc(wR,h,wR,h,stAng,(stAng+mswAng),false).replace("M","L") + + " L" + x3 + "," + t + + shapeArc(x3,h,wR,h,c3d4,(c3d4+swAngDeg),false).replace("M","L") + + " L" + (x5+th)+ "," + y1 + + " L" + x8 + "," + y1 + + " z" + + "M" + x3 + "," + t + + shapeArc(x3,h,wR,h,stAng2,(stAng2+swAng2),false).replace("M","L") + + shapeArc(wR,h,wR,h,cd2,(cd2+swAng3),false).replace("M","L"); + + result += ""; + + break; + case "curvedLeftArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + a1 = (adj1<0)?0:(adj1>a2)?a2:adj1; + th = ss*a1/cnstVal2; + aw = ss*a2/cnstVal2; + q1 = (th+aw)/4; + hR = hd2-q1; + q7 = hR*2; + q8 = q7*q7; + q9 = th*th; + q10 = q8-q9; + q11 = Math.sqrt(q10); + idx = q11*w/q7; + maxAdj3 = cnstVal2*idx/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + ah = ss*a3/cnstVal2; + y3 = hR+th; + q2 = w*w; + q3 = ah*ah; + q4 = q2-q3; + q5 = Math.sqrt(q4); + dy = q5*hR/w; + y5 = hR+dy; + y7 = y3+dy; + q6 = aw-th; + dh = q6/2; + y4 = y5-dh; + y8 = y7+dh; + aw2 = aw/2; + y6 = b-aw2; + x1 = l+ah; + swAng = Math.atan(dy/ah); + mswAng = -swAng; + ix = l+idx; + iy = (hR+y3)/2; + q12 = th/2; + dang2 = Math.atan(q12/idx); + swAng2 = dang2-swAng; + swAng3 = swAng+dang2; + stAng3 = -dang2; + var swAngDg,swAng2Dg,swAng3Dg,stAng3dg; + swAngDg = swAng*180/Math.PI; + swAng2Dg = swAng2*180/Math.PI; + swAng3Dg = swAng3*180/Math.PI; + stAng3dg = stAng3*180/Math.PI; + + var d_val = "M" + r+ "," + y3 + + shapeArc(l,hR,w,hR,0,-cd4,false).replace("M","L") + + " L" + l+ "," + t + + shapeArc(l,y3,w,hR,c3d4,(c3d4+cd4),false).replace("M","L") + + " L" + r+ "," + y3 + + shapeArc(l,y3,w,hR,0,swAngDg,false).replace("M","L") + + " L" + x1+ "," + y7 + + " L" + x1+ "," + y8 + + " L" + l+ "," + y6 + + " L" + x1+ "," + y4 + + " L" + x1+ "," + y5 + + shapeArc(l,hR,w,hR,swAngDg,(swAngDg+swAng2Dg),false).replace("M","L")+ + shapeArc(l,hR,w,hR,0,-cd4,false).replace("M","L")+ + shapeArc(l,y3,w,hR,c3d4,(c3d4+cd4),false).replace("M","L"); + + result += ""; + + break; + case "curvedRightArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + a1 = (adj1<0)?0:(adj1>a2)?a2:adj1; + th = ss*a1/cnstVal2; + aw = ss*a2/cnstVal2; + q1 = (th+aw)/4; + hR = hd2-q1; + q7 = hR*2; + q8 = q7*q7; + q9 = th*th; + q10 = q8-q9; + q11 = Math.sqrt(q10); + idx = q11*w/q7; + maxAdj3 = cnstVal2*idx/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + ah = ss*a3/cnstVal2; + y3 = hR+th; + q2 = w*w; + q3 = ah*ah; + q4 = q2-q3; + q5 = Math.sqrt(q4); + dy = q5*hR/w; + y5 = hR+dy; + y7 = y3+dy; + q6 = aw-th; + dh = q6/2; + y4 = y5-dh; + y8 = y7+dh; + aw2 = aw/2; + y6 = b-aw2; + x1 = r-ah; + swAng = Math.atan(dy/ah); + stAng = Math.PI+0-swAng; + mswAng = -swAng; + ix = r-idx; + iy = (hR+y3)/2; + q12 = th/2; + dang2 = Math.atan(q12/idx); + swAng2 = dang2-Math.PI/2; + swAng3 = Math.PI/2+dang2; + stAng3 = Math.PI-dang2; + + var stAngDg,mswAngDg,swAngDg,swAng2dg; + stAngDg = stAng*180/Math.PI; + mswAngDg = mswAng*180/Math.PI; + swAngDg = swAng*180/Math.PI; + swAng2dg = swAng2*180/Math.PI; + + var d_val = "M" + l + "," + hR + + shapeArc(w,hR,w,hR,cd2,cd2+mswAngDg,false).replace("M","L") + + " L" + x1 + "," + y5 + + " L" + x1 + "," + y4 + + " L" + r + "," + y6 + + " L" + x1 + "," + y8 + + " L" + x1 + "," + y7 + + shapeArc(w,y3,w,hR,stAngDg,stAngDg+swAngDg,false).replace("M","L") + + " L" + l + "," + hR + + shapeArc(w,hR,w,hR,cd2,cd2+cd4,false).replace("M","L") + + " L" + r + "," + th + + shapeArc(w,y3,w,hR,c3d4,c3d4+swAng2dg,false).replace("M","L") + ""; + result += ""; + + break; + case "curvedUpArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 25000*96/914400; + var sAdj2,adj2 = 50000*96/914400; + var sAdj3,adj3 = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 100000*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; imaxAdj2)?maxAdj2:adj2; + a1 = (adj1<0)?0:(adj1>cnstVal2)?cnstVal2:adj1; + th = ss*a1/cnstVal2; + aw = ss*a2/cnstVal2; + q1 = (th+aw)/4; + wR = wd2-q1; + q7 = wR*2; + q8 = q7*q7; + q9 = th*th; + q10 = q8-q9; + q11 = Math.sqrt(q10); + idy = q11*h/q7; + maxAdj3 = cnstVal2*idy/ss; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + ah = ss*adj3/cnstVal2; + x3 = wR+th; + q2 = h*h; + q3 = ah*ah; + q4 = q2-q3; + q5 = Math.sqrt(q4); + dx = q5*wR/h; + x5 = wR+dx; + x7 = x3+dx; + q6 = aw-th; + dh = q6/2; + x4 = x5-dh; + x8 = x7+dh; + aw2 = aw/2; + x6 = r-aw2; + y1 = t+ah; + swAng = Math.atan(dx/ah); + mswAng = -swAng; + iy = t+idy; + ix = (wR+x3)/2; + q12 = th/2; + dang2 = Math.atan(q12/idy); + swAng2 = dang2-swAng; + mswAng2 = -swAng2; + stAng3 = Math.PI/2-swAng; + swAng3 = swAng+dang2; + stAng2 = Math.PI/2-dang2; + + var stAng2dg,swAng2dg,swAngDg,swAng2dg; + stAng2dg = stAng2*180/Math.PI; + swAng2dg = swAng2*180/Math.PI; + stAng3dg = stAng3*180/Math.PI; + swAngDg = swAng*180/Math.PI; + + var d_val = //"M" + ix + "," +iy + + shapeArc(wR,0,wR,h,stAng2dg,stAng2dg+swAng2dg,false) + //.replace("M","L") + + " L" + x5 + "," + y1 + + " L" + x4 + "," + y1 + + " L" + x6 + "," + t + + " L" + x8 + "," + y1 + + " L" + x7 + "," + y1 + + shapeArc(x3,0,wR,h,stAng3dg,stAng3dg+swAngDg,false).replace("M","L") + + " L" + wR + "," + b + + shapeArc(wR,0,wR,h,cd4,cd2,false).replace("M","L") + + " L" + th + "," + t + + shapeArc(x3,0,wR,h,cd2,cd4,false).replace("M","L") + + ""; + result += ""; + + break; + case "mathDivide": + case "mathEqual": + case "mathMinus": + case "mathMultiply": + case "mathNotEqual": + case "mathPlus": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1; + var sAdj2,adj2; + var sAdj3,adj3; + if(shapAdjst_ary !== undefined){ + if(shapAdjst_ary.constructor === Array){ + for(var i=0; icnstVal1)?cnstVal1:adj1; + crAng = (adj2angVal2)?angVal2:adj2; + a2a1 = a1*2; + maxAdj3 = cnstVal2-a2a1; + a3 = (adj3<0)?0:(adj3>maxAdj3)?maxAdj3:adj3; + dy1 = h*a1/cnstVal2; + dy2 = h*a3/cnstVal3; + dx1 = w*cnstVal4/cnstVal3; + x1 = hc-dx1; + x8 = hc+dx1; + y2 = vc-dy2; + y3 = vc+dy2; + y1 = y2-dy1; + y4 = y3+dy1; + cadj2 = crAng-Math.PI/2; + xadj2 = hd2*Math.tan(cadj2); + len = Math.sqrt(xadj2*xadj2 + hd2*hd2); + bhw = len*dy1/hd2; + bhw2 = bhw/2; + x7 = hc+xadj2-bhw2; + dx67 = xadj2*y1/hd2; + x6 = x7-dx67; + dx57 = xadj2*y2/hd2; + x5 = x7-dx57; + dx47 = xadj2*y3/hd2; + x4 = x7-dx47; + dx37 = xadj2*y4/hd2; + x3 = x7-dx37; + dx27 = xadj2*2; + x2 = x7-dx27; + rx7 = x7+bhw; + rx6 = x6+bhw; + rx5 = x5+bhw; + rx4 = x4+bhw; + rx3 = x3+bhw; + rx2 = x2+bhw; + dx7 = dy1*hd2/len; + rxt = x7+dx7; + lxt = rx7-dx7; + rx = (cadj2 > 0)?rxt:rx7; + lx = (cadj2 > 0)?x7:lxt; + dy3 = dy1*xadj2/len; + dy4 = -dy3; + ry = (cadj2 > 0)?dy3:0; + ly = (cadj2 > 0)?0:dy4; + dlx = w-rx; + drx = w-lx; + dly = h-ry; + dry = h-ly; + xC1 = (rx+lx)/2; + xC2 = (drx+dlx)/2; + yC1 = (ry+ly)/2; + yC2 = (y1+y2)/2; + yC3 = (y3+y4)/2; + yC4 = (dry+dly)/2; + + dVal = "M" + x1 + "," + y1 + + " L" + x6 + "," + y1 + + " L" + lx + "," + ly + + " L" + rx + "," + ry + + " L" + rx6 + "," + y1 + + " L" + x8 + "," + y1 + + " L" + x8 + "," + y2 + + " L" + rx5 + "," + y2 + + " L" + rx4 + "," + y3 + + " L" + x8 + "," + y3 + + " L" + x8 + "," + y4 + + " L" + rx3 + "," + y4 + + " L" + drx + "," + dry + + " L" + dlx + "," + dly + + " L" + x3 + "," + y4 + + " L" + x1 + "," + y4 + + " L" + x1 + "," + y3 + + " L" + x4 + "," + y3 + + " L" + x5 + "," + y2 + + " L" + x1 + "," + y2 + + " z"; + }else if(shapType == "mathDivide"){ + if(shapAdjst_ary === undefined){ + adj1 = 23520*96/914400; + adj2 = 5880*96/914400; + adj3 = 11760*96/914400; + }else{ + adj1 = adj1*96/914400; + adj2 = adj2*96/914400; + adj3 = adj3*96/914400; + } + var a1, ma1, ma3h, ma3w, maxAdj3, a3, m4a3, maxAdj2, a2, dy1, yg, rad, dx1, + y3, y4, a, y2, y1, y5, x1, x3, x2; + var cnstVal4 = 1000*96/914400; + var cnstVal5 = 36745*96/914400; + var cnstVal6 = 73490*96/914400; + a1 = (adj1cnstVal5)?cnstVal5:adj1; + ma1 = -a1; + ma3h = (cnstVal6+ma1)/4; + ma3w = cnstVal5*w/h; + maxAdj3 = (ma3hmaxAdj3)?maxAdj3:adj3; + m4a3 = -4*a3; + maxAdj2 = cnstVal6+m4a3-a1; + a2 = (adj2<0)?0:(adj2>maxAdj2)?maxAdj2:adj2; + dy1 = h*a1/cnstVal3; + yg = h*a2/cnstVal2; + rad = h*a3/cnstVal2; + dx1 = w*cnstVal6/cnstVal3; + y3 = vc-dy1; + y4 = vc+dy1; + a = yg+rad; + y2 = y3-a; + y1 = y2-rad; + y5 = h-y1; + x1 = hc-dx1; + x3 = hc+dx1; + x2 = hc-rad; + var cd4=90,c3d4=270; + var cX1 = hc - Math.cos(c3d4*Math.PI/180) * rad; + var cY1 = y1 - Math.sin(c3d4*Math.PI/180) * rad; + var cX2 = hc - Math.cos(Math.PI/2) * rad; + var cY2 = y5 - Math.sin(Math.PI/2) * rad; + dVal = "M" + hc + "," + y1 + + shapeArc(cX1,cY1,rad,rad,c3d4,c3d4+360,false).replace("M","L") + + " z" + + " M" + hc + "," + y5 + + shapeArc(cX2,cY2,rad,rad,cd4,cd4+360,false).replace("M","L") + + " z" + + " M" + x1 + "," + y3 + + " L" + x3 + "," + y3 + + " L" + x3 + "," + y4 + + " L" + x1 + "," + y4 + + " z"; + }else if(shapType == "mathEqual"){ + if(shapAdjst_ary === undefined){ + adj1 = 23520*96/914400; + adj2 = 11760*96/914400; + }else{ + adj1 = adj1*96/914400; + adj2 = adj2*96/914400; + } + var cnstVal5 = 36745*96/914400; + var cnstVal6 = 73490*96/914400; + var a1, a2a1, mAdj2, a2, dy1, dy2, dx1, y2, y3, y1, y4, x1, x2, yC1, yC2; + + a1 = (adj1<0)?0:(adj1>cnstVal5)?cnstVal5:adj1; + a2a1 = a1*2; + mAdj2 = cnstVal2-a2a1; + a2 = (adj2<0)?0:(adj2>mAdj2)?mAdj2:adj2; + dy1 = h*a1/cnstVal2; + dy2 = h*a2/cnstVal3; + dx1 = w*cnstVal6/cnstVal3; + y2 = vc-dy2; + y3 = vc+dy2; + y1 = y2-dy1; + y4 = y3+dy1; + x1 = hc-dx1; + x2 = hc+dx1; + yC1 = (y1+y2)/2; + yC2 = (y3+y4)/2; + dVal = "M" + x1 + "," + y1 + + " L" + x2 + "," + y1 + + " L" + x2 + "," + y2 + + " L" + x1 + "," + y2 + + " z" + + "M" + x1 + "," + y3 + + " L" + x2 + "," + y3 + + " L" + x2 + "," + y4 + + " L" + x1 + "," + y4 + + " z"; + }else if(shapType == "mathMinus"){ + if(shapAdjst_ary === undefined){ + adj1 = 23520*96/914400; + }else{ + adj1 = adj1*96/914400; + } + var cnstVal6 = 73490*96/914400; + var a1, dy1, dx1, y1, y2, x1, x2; + a1 = (adj1<0)?0:(adj1>cnstVal2)?cnstVal2:adj1; + dy1 = h*a1/cnstVal3; + dx1 = w*cnstVal6/cnstVal3; + y1 = vc-dy1; + y2 = vc+dy1; + x1 = hc-dx1; + x2 = hc+dx1; + + dVal = "M" + x1 + "," + y1 + + " L" + x2 + "," + y1 + + " L" + x2 + "," + y2 + + " L" + x1 + "," + y2 + + " z"; + }else if(shapType == "mathMultiply"){ + if(shapAdjst_ary === undefined){ + adj1 = 23520*96/914400; + }else{ + adj1 = adj1*96/914400; + } + var cnstVal6 = 51965*96/914400; + var a1, th, a, sa, ca, ta, dl, rw, lM, xM, yM, dxAM, dyAM, + xA, yA, xB, yB, xBC, yBC, yC, xD, xE, yFE, xFE, xF, xL, yG, yH, yI, xC2, yC3; + var ss = Math.min(w,h); + a1 = (adj1<0)?0:(adj1>cnstVal6)?cnstVal6:adj1; + th = ss*a1/cnstVal2; + a = Math.atan(h/w); + sa = 1*Math.sin(a); + ca = 1*Math.cos(a); + ta = 1*Math.tan(a); + dl = Math.sqrt(w*w + h*h); + rw = dl*cnstVal6/cnstVal2; + lM = dl-rw; + xM = ca*lM/2; + yM = sa*lM/2; + dxAM = sa*th/2; + dyAM = ca*th/2; + xA = xM-dxAM; + yA = yM+dyAM; + xB = xM+dxAM; + yB = yM-dyAM; + xBC = hc-xB; + yBC = xBC*ta; + yC = yBC+yB; + xD = w-xB; + xE = w-xA; + yFE = vc-yA; + xFE = yFE/ta; + xF = xE-xFE; + xL = xA+xFE; + yG = h-yA; + yH = h-yB; + yI = h-yC; + xC2 = w-xM; + yC3 = h-yM; + + dVal = "M" + xA + "," + yA + + " L" + xB + "," + yB + + " L" + hc + "," + yC + + " L" + xD + "," + yB + + " L" + xE + "," + yA + + " L" + xF + "," + vc + + " L" + xE + "," + yG + + " L" + xD + "," + yH + + " L" + hc + "," + yI + + " L" + xB + "," + yH + + " L" + xA + "," + yG + + " L" + xL + "," + vc + + " z"; + }else if(shapType == "mathPlus"){ + if(shapAdjst_ary === undefined){ + adj1 = 23520*96/914400; + }else{ + adj1 = adj1*96/914400; + } + var cnstVal6 = 73490*96/914400; + var ss = Math.min(w,h); + var a1, dx1, dy1, dx2, x1, x2, x3, x4, y1, y2, y3, y4; + + a1 = (adj1<0)?0:(adj1>cnstVal6)?cnstVal6:adj1; + dx1 = w*cnstVal6/cnstVal3; + dy1 = h*cnstVal6/cnstVal3; + dx2 = ss*a1/cnstVal3; + x1 = hc-dx1; + x2 = hc-dx2; + x3 = hc+dx2; + x4 = hc+dx1; + y1 = vc-dy1; + y2 = vc-dx2; + y3 = vc+dx2; + y4 = vc+dy1; + + dVal = "M" + x1 + "," + y2 + + " L" + x2 + "," + y2 + + " L" + x2 + "," + y1 + + " L" + x3 + "," + y1 + + " L" + x3 + "," + y2 + + " L" + x4 + "," + y2 + + " L" + x4 + "," + y3 + + " L" + x3 + "," + y3 + + " L" + x3 + "," + y4 + + " L" + x2 + "," + y4 + + " L" + x2 + "," + y3 + + " L" + x1 + "," + y3 + + " z"; + } + result += ""; + + //console.log(shapType); + break; + case "can": + case "flowChartMagneticDisk": + case "flowChartMagneticDrum": + var shapAdjst = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd","attrs","fmla"]); + var adj = 25000*96/914400; + var cnstVal1 = 50000*96/914400; + var cnstVal2 = 200000*96/914400; + if(shapAdjst !== undefined){ + adj = parseInt(shapAdjst.substr(4))*96/914400; + } + var ss = Math.min(w,h); + var maxAdj, a, y1, y2, y3,dVal; + if(shapType == "flowChartMagneticDisk" || shapType == "flowChartMagneticDrum"){ + adj = 50000*96/914400; + } + maxAdj = cnstVal1*h/ss; + a = (adj<0)?0:(adj>maxAdj)?maxAdj:adj; + y1 = ss*a/cnstVal2; + y2 = y1+y1; + y3 = h-y1; + var cd2=180 , wd2 = w/2; + + var tranglRott = ""; + if(shapType == "flowChartMagneticDrum"){ + tranglRott = "transform='rotate(90 " + w/2 +"," + h/2 + ")'"; + } + dVal = shapeArc(wd2,y1,wd2,y1,0,cd2,false) + + shapeArc(wd2,y1,wd2,y1,cd2,cd2+cd2,false).replace("M","L") + + " L" + w + "," + y3 + + shapeArc(wd2,y3,wd2,y1,0,cd2,false).replace("M","L") + + " L" + 0 + "," + y1; + + result += ""; + + break; + case "swooshArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var refr = 96/914400; + var sAdj1,adj1 = 25000*refr; + var sAdj2,adj2 = 16667*refr; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal3)?cnstVal3:adj1; + maxAdj2 = cnstVal2*w/ss; + a2 = (adj2<0)?0:(adj2>maxAdj2)?maxAdj2:adj2; + ad1 = h*a1/cnstVal4; + ad2 = ss*a2/cnstVal4; + xB = w-ad2; + yB = ssd8; + alfa = (Math.PI/2)/14; + dx0 = ssd8*Math.tan(alfa); + xC = xB-dx0; + dx1 = ad1*Math.tan(alfa); + yF = yB+ad1; + xF = xB+dx1; + xE = xF+dx0; + yE = yF+ssd8; + dy2 = yE-0; + dy22 = dy2/2; + dy3 = h/20; + yD = dy22-dy3; + dy4 = hd6; + yP1 = hd6+dy4; + xP1 = w/6; + dy5 = hd6/2; + yP2 = yF+dy5; + xP2 = w/4; + + var dVal = "M" + 0 + "," + h + + " Q" + xP1 + "," + yP1 + " " + xB + "," + yB + + " L" + xC + "," + 0 + + " L" + w + "," + yD + + " L" + xE + "," + yE + + " L" + xF + "," + yF + + " Q" + xP2 + "," + yP2 + " " + 0 + "," + h + + " z"; + + result += ""; + + break; + case "circularArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 12500*96/914400; + var sAdj2,adj2 = (1142319/60000)*Math.PI/180; + var sAdj3,adj3 = (20457681/60000)*Math.PI/180; + var sAdj4,adj4 = (10800000/60000)*Math.PI/180; + var sAdj5,adj5 = 12500*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal1)?cnstVal1:adj5; + maxAdj1 = a5*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + enAng = (adj3rdAngVal2)?rdAngVal2:adj3; + stAng = (adj4<0)?0:(adj4>rdAngVal2)?rdAngVal2:adj4; ////////////////////////////////////////// + th = ss*a1/cnstVal2; + thh = ss*a5/cnstVal2; + th2 = th/2; + rw1 = wd2+th2-thh; + rh1 = hd2+th2-thh; + rw2 = rw1-th; + rh2 = rh1-th; + rw3 = rw2+th2; + rh3 = rh2+th2; + wtH = rw3*Math.sin(enAng); + htH = rh3*Math.cos(enAng); + + //dxH = rw3*Math.cos(Math.atan(wtH/htH)); + //dyH = rh3*Math.sin(Math.atan(wtH/htH)); + dxH = rw3*Math.cos(Math.atan2(wtH,htH)); + dyH = rh3*Math.sin(Math.atan2(wtH,htH)); + + xH = hc+dxH; + yH = vc+dyH; + rI = (rw2 0)?u13:u14; + u16 = u15-enAng; + u17 = u16+rdAngVal3; + u18 = (u16 > 0)?u16:u17; + u19 = u18-cd2; + u20 = u18-rdAngVal3; + u21 = (u19 > 0)?u20:u18; + maxAng = Math.abs(u21); + aAng = (adj2<0)?0:(adj2>maxAng)?maxAng:adj2; + ptAng = enAng+aAng; + wtA = rw3*Math.sin(ptAng); + htA = rh3*Math.cos(ptAng); + //dxA = rw3*Math.cos(Math.atan(wtA/htA)); + //dyA = rh3*Math.sin(Math.atan(wtA/htA)); + dxA = rw3*Math.cos(Math.atan2(wtA,htA)); + dyA = rh3*Math.sin(Math.atan2(wtA,htA)); + + xA = hc+dxA; + yA = vc+dyA; + wtE = rw1*Math.sin(stAng); + htE = rh1*Math.cos(stAng); + + //dxE = rw1*Math.cos(Math.atan(wtE/htE)); + //dyE = rh1*Math.sin(Math.atan(wtE/htE)); + dxE = rw1*Math.cos(Math.atan2(wtE,htE)); + dyE = rh1*Math.sin(Math.atan2(wtE,htE)); + + xE = hc+dxE; + yE = vc+dyE; + dxG = thh*Math.cos(ptAng); + dyG = thh*Math.sin(ptAng); + xG = xH+dxG; + yG = yH+dyG; + dxB = thh*Math.cos(ptAng); + dyB = thh*Math.sin(ptAng); + xB = xH-dxB; + yB = yH-dyB; + sx1 = xB-hc; + sy1 = yB-vc; + sx2 = xG-hc; + sy2 = yG-vc; + rO = (rw10)?q7:0; + sdelO = Math.sqrt(q8); + ndyO = dyO*-1; + sdyO = (ndyO > 0)?-1:1; + q9 = sdyO*dxO; + q10 = q9*sdelO; + q11 = DO*dyO; + dxF1 = (q11+q10)/q4; + q12 = q11-q10; + dxF2 = q12/q4; + adyO = Math.abs(dyO); + q13 = adyO*sdelO; + q14 = DO*dxO/-1; + dyF1 = (q14+q13)/q4; + q15 = q14-q13; + dyF2 = q15/q4; + q16 = x2O-dxF1; + q17 = x2O-dxF2; + q18 = y2O-dyF1; + q19 = y2O-dyF2; + q20 = Math.sqrt(q16*q16 + q18*q18); + q21 = Math.sqrt(q17*q17 + q19*q19); + q22 = q21-q20; + dxF = (q22 > 0)?dxF1:dxF2; + dyF = (q22 > 0)?dyF1:dyF2; + sdxF = dxF*rw1/rO; + sdyF = dyF*rh1/rO; + xF = hc+sdxF; + yF = vc+sdyF; + x1I = sx1*rI/rw2; + y1I = sy1*rI/rh2; + x2I = sx2*rI/rw2; + y2I = sy2*rI/rh2; + dxI = x2I-x1I; + dyI = y2I-y1I; + dI = Math.sqrt(dxI*dxI + dyI*dyI); + v1 = x1I*y2I; + v2 = x2I*y1I; + DI = v1-v2; + v3 = rI*rI; + v4 = dI*dI; + v5 = v3*v4; + v6 = DI*DI; + v7 = v5-v6; + v8 = (v7>0)?v7:0; + sdelI = Math.sqrt(v8); + v9 = sdyO*dxI; + v10 = v9*sdelI; + v11 = DI*dyI; + dxC1 = (v11+v10)/v4; + v12 = v11-v10; + dxC2 = v12/v4; + adyI = Math.abs(dyI); + v13 = adyI*sdelI; + v14 = DI*dxI/-1; + dyC1 = (v14+v13)/v4; + v15 = v14-v13; + dyC2 = v15/v4; + v16 = x1I-dxC1; + v17 = x1I-dxC2; + v18 = y1I-dyC1; + v19 = y1I-dyC2; + v20 = Math.sqrt(v16*v16 + v18*v18); + v21 = Math.sqrt(v17*v17 + v19*v19); + v22 = v21-v20; + dxC = (v22 > 0)?dxC1:dxC2; + dyC = (v22 > 0)?dyC1:dyC2; + sdxC = dxC*rw2/rI; + sdyC = dyC*rh2/rI; + xC = hc+sdxC; + yC = vc+sdyC; + + //ist0 = Math.atan(sdyC/sdxC); + ist0 = Math.atan2(sdyC,sdxC); + + ist1 = ist0+rdAngVal3; + istAng = (ist0 > 0)?ist0:ist1; + isw1 = stAng-istAng; + isw2 = isw1-rdAngVal3; + iswAng = (isw1 > 0)?isw2:isw1; + p1 = xF-xC; + p2 = yF-yC; + p3 = Math.sqrt(p1*p1 + p2*p2); + p4 = p3/2; + p5 = p4-thh; + xGp = (p5 > 0)?xF:xG; + yGp = (p5 > 0)?yF:yG; + xBp = (p5 > 0)?xC:xB; + yBp = (p5 > 0)?yC:yB; + + //en0 = Math.atan(sdyF/sdxF); + en0 = Math.atan2(sdyF,sdxF); + + en1 = en0+rdAngVal3; + en2 = (en0 > 0)?en0:en1; + sw0 = en2-stAng; + sw1 = sw0+rdAngVal3; + swAng = (sw0 > 0)?sw0:sw1; + + var strtAng = stAng*180/Math.PI + var endAng = strtAng + (swAng*180/Math.PI); + var stiAng = istAng*180/Math.PI; + var swiAng = iswAng*180/Math.PI; + var ediAng = stiAng + swiAng; + + var d_val = shapeArc(w/2,h/2,rw1,rh1,strtAng,endAng,false) + + " L" + xGp + "," + yGp + + " L" + xA + "," + yA + + " L" + xBp + "," + yBp + + " L" + xC + "," + yC + + shapeArc(w/2,h/2,rw2,rh2,stiAng,ediAng,false).replace("M","L") + + " z"; + result += ""; + + break; + case "leftCircularArrow": + var shapAdjst_ary = getTextByPathList(node, ["p:spPr", "a:prstGeom","a:avLst","a:gd"]); + var sAdj1,adj1 = 12500*96/914400; + var sAdj2,adj2 = (-1142319/60000)*Math.PI/180; + var sAdj3,adj3 = (1142319/60000)*Math.PI/180; + var sAdj4,adj4 = (10800000/60000)*Math.PI/180; + var sAdj5,adj5 = 12500*96/914400; + if(shapAdjst_ary !== undefined){ + for(var i=0; icnstVal1)?cnstVal1:adj5; + maxAdj1 = a5*2; + a1 = (adj1<0)?0:(adj1>maxAdj1)?maxAdj1:adj1; + enAng = (adj3rdAngVal2)?rdAngVal2:adj3; + stAng = (adj4<0)?0:(adj4>rdAngVal2)?rdAngVal2:adj4; + th = ss*a1/cnstVal2; + thh = ss*a5/cnstVal2; + th2 = th/2; + rw1 = wd2+th2-thh; + rh1 = hd2+th2-thh; + rw2 = rw1-th; + rh2 = rh1-th; + rw3 = rw2+th2; + rh3 = rh2+th2; + wtH = rw3*Math.sin(enAng); + htH = rh3*Math.cos(enAng); + dxH = rw3*Math.cos(Math.atan2(wtH,htH)); + dyH = rh3*Math.sin(Math.atan2(wtH,htH)); + xH = hc+dxH; + yH = vc+dyH; + rI = (rw2 0)?u13:u14; + u16 = u15-enAng; + u17 = u16+rdAngVal3; + u18 = (u16 > 0)?u16:u17; + u19 = u18-cd2; + u20 = u18-rdAngVal3; + u21 = (u19 > 0)?u20:u18; + u22 = Math.abs(u21); + minAng = u22*-1; + u23 = Math.abs(adj2); + a2 = u23*-1; + aAng = (a20)?0:a2; + ptAng = enAng+aAng; + wtA = rw3*Math.sin(ptAng); + htA = rh3*Math.cos(ptAng); + dxA = rw3*Math.cos(Math.atan2(wtA,htA)); + dyA = rh3*Math.sin(Math.atan2(wtA,htA)); + xA = hc+dxA; + yA = vc+dyA; + wtE = rw1*Math.sin(stAng); + htE = rh1*Math.cos(stAng); + dxE = rw1*Math.cos(Math.atan2(wtE,htE)); + dyE = rh1*Math.sin(Math.atan2(wtE,htE)); + xE = hc+dxE; + yE = vc+dyE; + wtD = rw2*Math.sin(stAng); + htD = rh2*Math.cos(stAng); + dxD = rw2*Math.cos(Math.atan2(wtD,htD)); + dyD = rh2*Math.sin(Math.atan2(wtD,htD)); + xD = hc+dxD; + yD = vc+dyD; + dxG = thh*Math.cos(ptAng); + dyG = thh*Math.sin(ptAng); + xG = xH+dxG; + yG = yH+dyG; + dxB = thh*Math.cos(ptAng); + dyB = thh*Math.sin(ptAng); + xB = xH-dxB; + yB = yH-dyB; + sx1 = xB-hc; + sy1 = yB-vc; + sx2 = xG-hc; + sy2 = yG-vc; + rO = (rw10)?q7:0; + sdelO = Math.sqrt(q8); + ndyO = dyO*-1; + sdyO = (ndyO > 0)?-1:1; + q9 = sdyO*dxO; + q10 = q9*sdelO; + q11 = DO*dyO; + dxF1 = (q11+q10)/q4; + q12 = q11-q10; + dxF2 = q12/q4; + adyO = Math.abs(dyO); + q13 = adyO*sdelO; + q14 = DO*dxO/-1; + dyF1 = (q14+q13)/q4; + q15 = q14-q13; + dyF2 = q15/q4; + q16 = x2O-dxF1; + q17 = x2O-dxF2; + q18 = y2O-dyF1; + q19 = y2O-dyF2; + q20 = Math.sqrt(q16*q16 + q18*q18); + q21 = Math.sqrt(q17*q17 + q19*q19); + q22 = q21-q20; + dxF = (q22 > 0)?dxF1:dxF2; + dyF = (q22 > 0)?dyF1:dyF2; + sdxF = dxF*rw1/rO; + sdyF = dyF*rh1/rO; + xF = hc+sdxF; + yF = vc+sdyF; + x1I = sx1*rI/rw2; + y1I = sy1*rI/rh2; + x2I = sx2*rI/rw2; + y2I = sy2*rI/rh2; + dxI = x2I-x1I; + dyI = y2I-y1I; + dI = Math.sqrt(dxI*dxI + dyI*dyI); + v1 = x1I*y2I; + v2 = x2I*y1I; + DI = v1-v2; + v3 = rI*rI; + v4 = dI*dI; + v5 = v3*v4; + v6 = DI*DI; + v7 = v5-v6; + v8 = (v7>0)?v7:0; + sdelI = Math.sqrt(v8); + v9 = sdyO*dxI; + v10 = v9*sdelI; + v11 = DI*dyI; + dxC1 = (v11+v10)/v4; + v12 = v11-v10; + dxC2 = v12/v4; + adyI = Math.abs(dyI); + v13 = adyI*sdelI; + v14 = DI*dxI/-1; + dyC1 = (v14+v13)/v4; + v15 = v14-v13; + dyC2 = v15/v4; + v16 = x1I-dxC1; + v17 = x1I-dxC2; + v18 = y1I-dyC1; + v19 = y1I-dyC2; + v20 = Math.sqrt(v16*v16 + v18*v18); + v21 = Math.sqrt(v17*v17 + v19*v19); + v22 = v21-v20; + dxC = (v22 > 0)?dxC1:dxC2; + dyC = (v22 > 0)?dyC1:dyC2; + sdxC = dxC*rw2/rI; + sdyC = dyC*rh2/rI; + xC = hc+sdxC; + yC = vc+sdyC; + ist0 = Math.atan2(sdyC,sdxC); + ist1 = ist0+rdAngVal3; + istAng0 = (ist0 > 0)?ist0:ist1; + isw1 = stAng-istAng0; + isw2 = isw1+rdAngVal3; + iswAng0 = (isw1 > 0)?isw1:isw2; + istAng = istAng0+iswAng0; + iswAng = -iswAng0; + p1 = xF-xC; + p2 = yF-yC; + p3 = Math.sqrt(p1*p1 + p2*p2); + p4 = p3/2; + p5 = p4-thh; + xGp = (p5 > 0)?xF:xG; + yGp = (p5 > 0)?yF:yG; + xBp = (p5 > 0)?xC:xB; + yBp = (p5 > 0)?yC:yB; + en0 = Math.atan2(sdyF,sdxF); + en1 = en0+rdAngVal3; + en2 = (en0 > 0)?en0:en1; + sw0 = en2-stAng; + sw1 = sw0-rdAngVal3; + swAng = (sw0 > 0)?sw1:sw0; + stAng0 = stAng+swAng; + + var strtAng = stAng0*180/Math.PI; + var endAng = stAng*180/Math.PI; + var stiAng = istAng*180/Math.PI; + var swiAng = iswAng*180/Math.PI; + var ediAng = stiAng + swiAng; + + var d_val = "M" + xE + "," + yE + + " L" + xD + "," + yD + + shapeArc(w/2,h/2,rw2,rh2,stiAng,ediAng,false).replace("M","L") + + " L" + xBp + "," + yBp + + " L" + xA + "," + yA + + " L" + xGp + "," + yGp + + " L" + xF + "," + yF + + shapeArc(w/2,h/2,rw1,rh1,strtAng,endAng,false).replace("M","L") + + " z"; + result += ""; + + break; + case "leftRightCircularArrow": + case "chartPlus": + case "chartStar": + case "chartX": + case "cornerTabs": + case "flowChartOfflineStorage": + case "folderCorner": + case "funnel": + case "lineInv": + case "nonIsoscelesTrapezoid": + case "plaqueTabs": + case "squareTabs": + case "upDownArrowCallout": + console.log(shapType," -unsupported shape type."); + break; + case undefined: + default: + console.warn("Undefine shape type.("+shapType+")"); + } + + result += ""; + + result += "
"; + + // TextBody + if (node["p:txBody"] !== undefined) { + result += genTextBody(node["p:txBody"], node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); + } + result += "
"; + }else if(custShapType !== undefined){ + //custGeom here - Amir /////////////////////////////////////////////////////// + //http://officeopenxml.com/drwSp-custGeom.php + var pathLstNode = getTextByPathList(custShapType, ["a:pathLst"]); + var pathNode = getTextByPathList(pathLstNode, ["a:path", "attrs"]); + var maxX = parseInt(pathNode["w"]) * 96 / 914400; + var maxY = parseInt(pathNode["h"]) * 96 / 914400; + //console.log("w = "+w+"\nh = "+h+"\nmaxX = "+maxX +"\nmaxY = " + maxY); + //cheke if it is close shape + var closeNode = getTextByPathList(pathLstNode, ["a:path","a:close"]); + var startPoint = getTextByPathList(pathLstNode, ["a:path","a:moveTo","a:pt","attrs"]); + var spX = parseInt(startPoint["x"]) * 96 / 914400; + var spY = parseInt(startPoint["y"]) * 96 / 914400; + var d = "M"+spX+","+spY; + var pathNodes = getTextByPathList(pathLstNode, ["a:path"]); + var lnToNodes = pathNodes["a:lnTo"]; + var cubicBezToNodes = pathNodes["a:cubicBezTo"]; + var arcToNodes = pathNodes["a:arcTo"]; + var sortblAry = []; + if(lnToNodes !== undefined){ + Object.keys(lnToNodes).forEach(function(key) { + var lnToPtNode = lnToNodes[key]["a:pt"]; + if(lnToPtNode !== undefined){ + Object.keys(lnToPtNode).forEach(function(key2) { + var ptObj = {}; + var lnToNoPt = lnToPtNode[key2]; + var ptX = lnToNoPt["attrs","x"]; + var ptY = lnToNoPt["attrs","y"]; + var ptOrdr = lnToNoPt["attrs","order"]; + ptObj.type = "lnto"; + ptObj.order = ptOrdr; + ptObj.x = ptX; + ptObj.y = ptY; + sortblAry.push(ptObj); + //console.log(key2, lnToNoPt); + + }); + } + }); + + } + if(cubicBezToNodes !== undefined){ + Object.keys(cubicBezToNodes).forEach(function(key) { + //console.log("cubicBezTo["+key+"]:"); + var cubicBezToPtNodes = cubicBezToNodes[key]["a:pt"]; + if(cubicBezToPtNodes !== undefined){ + Object.keys(cubicBezToPtNodes).forEach(function(key2) { + //console.log("cubicBezTo["+key+"]pt["+key2+"]:"); + var cubBzPts = cubicBezToPtNodes[key2]; + Object.keys(cubBzPts).forEach(function(key3) { + //console.log(key3, cubBzPts[key3]); + var ptObj = {}; + var cubBzPt = cubBzPts[key3]; + var ptX = cubBzPt["attrs","x"]; + var ptY = cubBzPt["attrs","y"]; + var ptOrdr = cubBzPt["attrs","order"]; + ptObj.type = "cubicBezTo"; + ptObj.order = ptOrdr; + ptObj.x = ptX; + ptObj.y = ptY; + sortblAry.push(ptObj); + }); + }); + } + }); + } + if(arcToNodes !== undefined){ + var arcToNodesAttrs = arcToNodes["attrs"]; + var arcOrder = arcToNodesAttrs["order"]; + var hR = arcToNodesAttrs["hR"]; + var wR = arcToNodesAttrs["wR"]; + var stAng = arcToNodesAttrs["stAng"]; + var swAng = arcToNodesAttrs["swAng"]; + var shftX = 0; + var shftY = 0; + var arcToPtNode = getTextByPathList(arcToNodes, ["a:pt","attrs"]); + if(arcToPtNode !== undefined){ + shftX = arcToPtNode["x"]; + shftY = arcToPtNode["y"]; + //console.log("shftX: ",shftX," shftY: ",shftY) + } + var ptObj = {}; + ptObj.type = "arcTo"; + ptObj.order = arcOrder; + ptObj.hR = hR; + ptObj.wR = wR; + ptObj.stAng = stAng; + ptObj.swAng = swAng; + ptObj.shftX = shftX; + ptObj.shftY = shftY; + sortblAry.push(ptObj); + + } + var sortByOrder = sortblAry.slice(0); + sortByOrder.sort(function(a,b) { + return a.order - b.order; + }); + //console.log(sortByOrder); + var k = 0; + while(k"; + + // TextBody + if (node["p:txBody"] !== undefined) { + result += genTextBody(node["p:txBody"], node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); + } + result += "
"; + + // result = ""; + } else { + + result += "
"; + + // TextBody + if (node["p:txBody"] !== undefined) { + result += genTextBody(node["p:txBody"], node, slideLayoutSpNode, slideMasterSpNode, type, warpObj); + } + result += "
"; + + } + + return result; + } + function shapeStar(adj, starNum){ + var innerRadius = adj; /*1-100*/ + var outerRadius = 100;//star.outerRadius; + var numPoints = starNum;/*1-100*/ + var center = Math.max(innerRadius, outerRadius); + var angle = Math.PI / numPoints; + var points = []; + + for (var i = 0; i < numPoints * 2; i++) { + var radius = i & 1 ? innerRadius : outerRadius; + points.push(center + radius * Math.sin(i * angle)); + points.push(center - radius * Math.cos(i * angle)); + } + + return points; + } + function shapePie(H,w,adj1,adj2,isClose){ + var pieVal = parseInt(adj2); + var piAngle = parseInt(adj1); + var size = parseInt(H), + radius = (size / 2), + value = pieVal - piAngle; + if(value < 0){ + value = 360 + value; + } + //console.log("value: ",value) + value = Math.min(Math.max(value, 0), 360); + + //calculate x,y coordinates of the point on the circle to draw the arc to. + var x = Math.cos((2 * Math.PI)/(360/value)); + var y = Math.sin((2 * Math.PI)/(360/value)); + + + //d is a string that describes the path of the slice. + var longArc, d ,rot; + if(isClose){ + longArc = (value <= 180) ? 0 : 1; + d = "M" + radius + "," + radius + " L" + radius + "," + 0 + " A" + radius + "," + radius + " 0 " + longArc + ",1 " + (radius + y*radius) + "," + (radius - x*radius) +" z"; + rot = "rotate("+(piAngle-270)+", "+radius+", "+radius+")"; + }else{ + longArc = (value <= 180) ? 0 : 1; + var radius1 = radius; + var radius2 = w/2; + d = "M" + radius1 + "," + 0 + " A" + radius2 + "," + radius1 + " 0 " + longArc + ",1 " + (radius2 + y*radius2) + "," + (radius1 - x*radius1); + rot = "rotate("+(piAngle+90)+", "+radius+", "+radius+")"; + } + + return [d,rot]; + } + function shapeGear(w,h,points) { + var innerRadius = h;//gear.innerRadius; + var outerRadius = 1.5*innerRadius; + var cx = outerRadius;//Math.max(innerRadius, outerRadius), // center x + cy = outerRadius;//Math.max(innerRadius, outerRadius), // center y + notches = points,//gear.points, // num. of notches + radiusO = outerRadius, // outer radius + radiusI = innerRadius, // inner radius + taperO = 50, // outer taper % + taperI = 35, // inner taper % + + // pre-calculate values for loop + + pi2 = 2 * Math.PI, // cache 2xPI (360deg) + angle = pi2 / (notches * 2), // angle between notches + taperAI = angle * taperI * 0.005, // inner taper offset (100% = half notch) + taperAO = angle * taperO * 0.005, // outer taper offset + a = angle, // iterator (angle) + toggle = false; + // move to starting point + var d = " M"+(cx + radiusO * Math.cos(taperAO))+" "+ (cy + radiusO * Math.sin(taperAO)); + + // loop + for (; a <= pi2+angle; a += angle) { + // draw inner to outer line + if (toggle) { + d += " L"+(cx + radiusI * Math.cos(a - taperAI)) + "," + (cy + radiusI * Math.sin(a - taperAI)); + d += " L"+(cx + radiusO * Math.cos(a + taperAO)) + "," + (cy + radiusO * Math.sin(a + taperAO)); + }else { // draw outer to inner line + d += " L"+(cx + radiusO * Math.cos(a - taperAO)) + "," + (cy + radiusO * Math.sin(a - taperAO)); // outer line + d += " L"+(cx + radiusI * Math.cos(a + taperAI)) + "," + (cy + radiusI * Math.sin(a + taperAI));// inner line + + } + // switch level + toggle = !toggle; + } + // close the final line + d += " "; + return d; + } + function shapeArc(cX,cY,rX,rY,stAng,endAng , isClose){ + var dData; + var angle = stAng; + if(endAng >= stAng){ + while(angle <= endAng){ + var radians = angle * (Math.PI / 180); // convert degree to radians + var x = cX + Math.cos(radians) * rX; + var y = cY + Math.sin(radians) * rY; + if(angle == stAng){ + dData = " M"+ x + " " + y; + } + dData += " L"+ x + " " + y ; + angle++; + } + }else{ + while(angle > endAng){ + var radians = angle * (Math.PI / 180); // convert degree to radians + var x = cX + Math.cos(radians) * rX; + var y = cY + Math.sin(radians) * rY; + if(angle == stAng){ + dData = " M "+ x + " " + y; + } + dData += " L "+ x + " " + y ; + angle--; + } + } + dData += (isClose?" z":""); + return dData; + } + function shapeSnipRoundRect(w,h,adj1,adj2,shapeType,adjType){ + /* + shapeType: snip,round + adjType: cornr1,cornr2,cornrAll,diag + */ + var adjA,adjB,adjC,adjD; + if(adjType == "cornr1"){ + adjA = 0; + adjB = 0; + adjC = 0; + adjD = adj1; + }else if(adjType == "cornr2"){ + adjA = adj1; + adjB = adj2; + adjC = adj2; + adjD = adj1; + }else if(adjType == "cornrAll"){ + adjA = adj1; + adjB = adj1; + adjC = adj1; + adjD = adj1; + }else if(adjType == "diag"){ + adjA = adj1; + adjB = adj2; + adjC = adj1; + adjD = adj2; + } + //d is a string that describes the path of the slice. + var d; + if(shapeType == "round"){ + d = "M0" + "," + (h/2 + (1-adjB)*(h/2)) + " Q" +0+ "," + h +" " + adjB*(w/2) +"," + h + " L" + (w/2 + (1-adjC)*(w/2)) + "," + h + + " Q" + w + "," + h + " "+ w + "," +(h/2 + (h/2)*(1-adjC)) + "L" + w + "," + (h/2)*adjD + + " Q" + w + "," + 0 + " " + (w/2 + (w/2)*(1-adjD)) + ",0 L" + (w/2)*adjA + ",0" + + " Q" + 0 + "," + 0 + " 0," + (h/2)*(adjA) + " z"; + }else if(shapeType == "snip"){ + d = "M0" + "," + adjA*(h/2) + " L0" + "," + (h/2 + (h/2)*(1-adjB)) + "L" + adjB*(w/2) + "," + h + + " L" + (w/2 + (w/2)*(1-adjC)) + "," + h + "L" + w + "," + (h/2 + (h/2)*(1-adjC)) + + " L" + w + "," + adjD*(h/2) + "L" + (w/2 + (w/2)*(1-adjD)) + ",0 L" + ((w/2)*adjA) + ",0 z"; + } + return d; + } + /* + function shapePolygon(sidesNum) { + var sides = sidesNum; + var radius = 100; + var angle = 2 * Math.PI / sides; + var points = []; + + for (var i = 0; i < sides; i++) { + points.push(radius + radius * Math.sin(i * angle)); + points.push(radius - radius * Math.cos(i * angle)); + } + + return points; + } + */ + function processPicNode(node, warpObj) { + var rtrnData = ""; + var mediaPicFlag = false; + var order = node["attrs"]["order"]; + + var rid = node["p:blipFill"]["a:blip"]["attrs"]["r:embed"]; + var imgName = warpObj["slideResObj"][rid]["target"]; + var imgFileExt = extractFileExtension(imgName).toLowerCase(); + var zip = warpObj["zip"]; + var imgArrayBuffer = zip.file(imgName).asArrayBuffer(); + var mimeType = ""; + var xfrmNode = node["p:spPr"]["a:xfrm"]; + ///////////////////////////////////////Amir////////////////////////////// + var rotate = 0; + var rotateNode = getTextByPathList(node, ["p:spPr","a:xfrm","attrs","rot"]); + if(rotateNode !== undefined){ + rotate = angleToDegrees(rotateNode); + } + //video + var vdoNode = getTextByPathList(node, ["p:nvPicPr","p:nvPr","a:videoFile"]); + var vdoRid,vdoFile,vdoFileExt,vdoMimeType,uInt8Array,blob,vdoBlob,mediaSupportFlag=false; + var mediaProcess = settings.mediaProcess; + if(vdoNode !== undefined & mediaProcess){ + vdoRid = vdoNode["attrs"]["r:link"]; + vdoFile = warpObj["slideResObj"][vdoRid]["target"]; + uInt8Array = zip.file(vdoFile).asArrayBuffer(); + vdoFileExt = extractFileExtension(vdoFile).toLowerCase(); + if(vdoFileExt=="mp4" || vdoFileExt=="webm" || vdoFileExt=="ogg"){ + vdoMimeType = getMimeType(vdoFileExt); + blob = new Blob([uInt8Array], { + type: vdoMimeType + }); + vdoBlob = URL.createObjectURL(blob); + mediaSupportFlag = true; + mediaPicFlag = true; + } + } + //Audio + var audioNode = getTextByPathList(node, ["p:nvPicPr","p:nvPr","a:audioFile"]); + var audioRid,audioFile,audioFileExt,audioMimeType,uInt8ArrayAudio,blobAudio,audioBlob; + var audioPlayerFlag = false; + var audioObjc; + if(audioNode !== undefined & mediaProcess){ + audioRid = audioNode["attrs"]["r:link"]; + audioFile = warpObj["slideResObj"][audioRid]["target"]; + audioFileExt = extractFileExtension(audioFile).toLowerCase(); + if(audioFileExt=="mp3" || audioFileExt=="wav" || audioFileExt=="ogg"){ + uInt8ArrayAudio = zip.file(audioFile).asArrayBuffer(); + blobAudio = new Blob([uInt8ArrayAudio]); + audioBlob = URL.createObjectURL(blobAudio); + var cx = parseInt(xfrmNode["a:ext"]["attrs"]["cx"]) * 20; + var cy = xfrmNode["a:ext"]["attrs"]["cy"]; + var x = parseInt(xfrmNode["a:off"]["attrs"]["x"]) / 2.5; + var y = xfrmNode["a:off"]["attrs"]["y"]; + audioObjc = { + "a:ext" : { + "attrs":{ + "cx":cx, + "cy":cy + } + }, + "a:off":{ + "attrs":{ + "x":x, + "y":y + + } + } + } + audioPlayerFlag = true; + mediaSupportFlag = true; + mediaPicFlag = true; + } + } + //console.log(node) + ////////////////////////////////////////////////////////////////////////// + mimeType = getMimeType(imgFileExt); + rtrnData = "
"; + if((vdoNode === undefined && audioNode === undefined) || !mediaProcess || !mediaSupportFlag){ + rtrnData += ""; + }else if((vdoNode !== undefined || audioNode !== undefined) && mediaProcess && mediaSupportFlag){ + if(vdoNode !== undefined){ + rtrnData += ""; + } + if(audioNode !== undefined){ + rtrnData += ''; + //''+ + //''; + } + } + if(!mediaSupportFlag && mediaPicFlag){ + rtrnData += "This media file Not supported by HTML5"; + } + if((vdoNode !== undefined || audioNode !== undefined) && !mediaProcess && mediaSupportFlag){ + console.log("Founded supported media file but media process disabled (mediaProcess=false)"); + } + rtrnData += "
"; + //console.log(rtrnData) + return rtrnData; + } + + function processGraphicFrameNode(node, warpObj) { + + var result = ""; + var graphicTypeUri = getTextByPathList(node, ["a:graphic", "a:graphicData", "attrs", "uri"]); + + switch (graphicTypeUri) { + case "http://schemas.openxmlformats.org/drawingml/2006/table": + result = genTable(node, warpObj); + break; + case "http://schemas.openxmlformats.org/drawingml/2006/chart": + result = genChart(node, warpObj); + break; + case "http://schemas.openxmlformats.org/drawingml/2006/diagram": + result = genDiagram(node, warpObj); + break; + default: + } + + return result; + } + + function processSpPrNode(node, warpObj) { + + /* + * 2241 + * 2242 + * 2243 + * 2244 + * 2245 + * 2246 + * 2247 + * 2248 + * 2249 + * 2250 + * 2251 + * 2252 + * 2253 + */ + + // TODO: + } + + function genTextBody(textBodyNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj) { + + + var text = ""; + var slideMasterTextStyles = warpObj["slideMasterTextStyles"]; + + if (textBodyNode === undefined) { + return text; + } + //rtl : + // + + //var rtlStr = ""; + if (textBodyNode["a:p"].constructor === Array) { + // multi p + for (var i=0; i"; + text += genBuChar(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); + + if (rNode === undefined) { + // without r + text += genSpanElement(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); + } else if (rNode.constructor === Array) { + // with multi r + for (var j=0; j"; + text += genBuChar(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); + if (rNode === undefined) { + // without r + text += genSpanElement(pNode, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj); + } else if (rNode.constructor === Array) { + // with multi r + for (var j=0; j"; + } else { + marginLeft = 328600 * 96 / 914400 * lvl; + + bullet = "" + buChar + ""; + } + } else if(buType == "TYPE_NUMERIC") { ///////////Amir/////////////////////////////// + if (buFontAttrs !== undefined) { + var marginLeft = parseInt( getTextByPathList(pPrNode, ["attrs", "marL"]) ) * 96 / 914400; + var marginRight = parseInt(buFontAttrs["pitchFamily"]); + + if (isNaN(marginLeft)) { + marginLeft = 328600 * 96 / 914400; + } + if (isNaN(marginRight)) { + marginRight = 0; + } + //var typeface = buFontAttrs["typeface"]; + + bullet = ""; + } else { + marginLeft = 328600 * 96 / 914400 * lvl; + bullet = ""; + } + + }else if(buType == "TYPE_BULPIC"){ //PIC BULLET + var marginLeft = parseInt( getTextByPathList(pPrNode, ["attrs", "marL"]) ) * 96 / 914400; + var marginRight = parseInt( getTextByPathList(pPrNode, ["attrs", "marR"]) ) * 96 / 914400; + + if (isNaN(marginRight)) { + marginRight = 0; + } + //console.log("marginRight: "+marginRight) + //buPic + if (isNaN(marginLeft)) { + marginLeft = 328600 * 96 / 914400; + }else{ + marginLeft = 0; + } + //var buPicId = getTextByPathList(buPic, ["a:blip","a:extLst","a:ext","asvg:svgBlip" , "attrs", "r:embed"]); + var buPicId = getTextByPathList(buPic, ["a:blip", "attrs", "r:embed"]); + var svgPicPath = ""; + var buImg; + if(buPicId !== undefined){ + //svgPicPath = warpObj["slideResObj"][buPicId]["target"]; + //buImg = warpObj["zip"].file(svgPicPath).asText(); + //}else{ + //buPicId = getTextByPathList(buPic, ["a:blip", "attrs", "r:embed"]); + var imgPath = warpObj["slideResObj"][buPicId]["target"]; + var imgArrayBuffer = warpObj["zip"].file(imgPath).asArrayBuffer(); + var imgExt = imgPath.split(".").pop(); + var imgMimeType = getMimeType(imgExt); + buImg = "" + //console.log("imgPath: "+imgPath+"\nimgMimeType: "+imgMimeType) + } + if(buPicId === undefined){ + buImg = "‣"; + } + bullet = ""+buImg+" "; + ////////////////////////////////////////////////////////////////////////////////////// + } else { + bullet = ""; + } + + return bullet; + } + + function genSpanElement(node, spNode, slideLayoutSpNode, slideMasterSpNode, type, warpObj) { + + var slideMasterTextStyles = warpObj["slideMasterTextStyles"]; + + var text = node["a:t"]; + if (typeof text !== 'string') { + text = getTextByPathList(node, ["a:fld", "a:t"]); + if (typeof text !== 'string') { + text = " "; + } + } + //console.log("genSpanElement: ",node) + //getFontColor + var fontClrPr = getFontColorPr(node, spNode, type, slideMasterTextStyles); + var styleText = + "color:" + fontClrPr[0] + ";" + + "text-shadow:" + fontClrPr[1] + ";" + + "font-size:" + getFontSize(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) + ";" + + "font-family:" + getFontType(node, type, slideMasterTextStyles) + ";" + + "font-weight:" + getFontBold(node, type, slideMasterTextStyles) + ";" + + "font-style:" + getFontItalic(node, type, slideMasterTextStyles) + ";" + + "text-decoration:" + getFontDecoration(node, type, slideMasterTextStyles) + ";" + + "text-align:" + getTextHorizontalAlign(node, type, slideMasterTextStyles) + ";" + + "vertical-align:" + getTextVerticalAlign(node, type, slideMasterTextStyles) + ";"; + //////////////////Amir/////////////// + var highlight = getTextByPathList(node, ["a:rPr", "a:highlight"]); + if(highlight !== undefined){ + styleText += "background-color:#" + getSolidFill(highlight) +";"; + styleText += "Opacity:"+ getColorOpacity(highlight) + ";"; + } + /////////////////////////////////////////// + var cssName = ""; + + if (styleText in styleTable) { + cssName = styleTable[styleText]["name"]; + } else { + cssName = "_css_" + (Object.keys(styleTable).length + 1); + styleTable[styleText] = { + "name": cssName, + "text": styleText + }; + } + + var linkID = getTextByPathList(node, ["a:rPr", "a:hlinkClick", "attrs", "r:id"]); + //get link colors : TODO + if (linkID !== undefined) { + var linkURL = warpObj["slideResObj"][linkID]["target"]; + return "" + text.replace(/\s/i, " ") + ""; + } else { + return "" + text.replace(/\s/i, " ") + ""; + } + + } + + function genGlobalCSS() { + var cssText = ""; + for (var key in styleTable) { + cssText += "div ." + styleTable[key]["name"] + "{" + styleTable[key]["text"] + "}\n"; //section > div + } + return cssText; + } + + function genTable(node, warpObj) { + + var order = node["attrs"]["order"]; + var tableNode = getTextByPathList(node, ["a:graphic", "a:graphicData", "a:tbl"]); + var xfrmNode = getTextByPathList(node, ["p:xfrm"]); + /////////////////////////////////////////Amir//////////////////////////////////////////////// + var getTblPr = getTextByPathList(node, ["a:graphic", "a:graphicData", "a:tbl","a:tblPr"]); + var getColsGrid = getTextByPathList(node, ["a:graphic", "a:graphicData", "a:tbl","a:tblGrid","a:gridCol"]); + var tblDir = ""; + if(getTblPr !== undefined){ + var isRTL = getTblPr["attrs"]["rtl"]; + tblDir = (isRTL==1?"dir=rtl":"dir=ltr"); + } + var firstRowAttr = getTblPr["attrs"]["firstRow"]; //associated element in the table styles + var firstColAttr = getTblPr["attrs"]["firstCol"]; //associated element in the table styles + var lastRowAttr = getTblPr["attrs"]["lastRow"]; //associated element in the table styles + var lastColAttr = getTblPr["attrs"]["lastCol"]; //associated element in the table styles + var bandRowAttr = getTblPr["attrs"]["bandRow"]; //associated element , in the table styles + var bandColAttr = getTblPr["attrs"]["bandCol"]; //associated element , in the table styles + //console.log(firstColAttr); + //////////////////////////////////////////////////////////////////////////////////////////// + var tableHtml = "
" + text + "" + text + "" + text + "
" + text + "" + text + "
"; + + var trNodes = tableNode["a:tr"]; + if (trNodes.constructor === Array) { + for (var i=0; i"; + } + + //get from Theme (tableStyles.xml) TODO + //get tableStyleId = a:tbl => a:tblPr => a:tableStyleId + var thisTblStyle; + var tbleStyleId = getTblPr["a:tableStyleId"]; + if(tbleStyleId !== undefined){ + //get Style from tableStyles.xml by {var tbleStyleId} + //table style object : tableStyles + var tbleStylList = tableStyles["a:tblStyleLst"]["a:tblStyle"]; + if(tbleStylList.constructor === Array){ + for(var k=0;k0 && bandRowAttr!== undefined){ + var fillColor="fff"; + var colorOpacity = 1; + if((i%2)==0){ + if(thisTblStyle["a:band2H"] !==undefined){ + //console.log(thisTblStyle["a:band2H"]); + var bgFillschemeClr = getTextByPathList(thisTblStyle,["a:band2H","a:tcStyle","a:fill","a:solidFill"]); + if(bgFillschemeClr !==undefined){ + fillColor = getSolidFill(bgFillschemeClr); + colorOpacity = getColorOpacity(bgFillschemeClr); + } + //borders color + //borders Width + var borderStyl = getTextByPathList(thisTblStyle,["a:band2H","a:tcStyle","a:tcBdr"]); + if(borderStyl !== undefined){ + var row_borders = getTableBorders(borderStyl); + rowsStyl += row_borders; + } + //console.log(thisTblStyle["a:band2H"]) + + //Text Style - TODO + var rowTxtStyl = getTextByPathList(thisTblStyle,["a:band2H","a:tcTxStyle"]); + if(rowTxtStyl !== undefined){ + + } + //console.log(i,thisTblStyle) + }/*else{ + var bgFillschemeClr = thisTblStyle["a:wholeTbl"]["a:tcStyle"]["a:fill"]["a:solidFill"]; + if(bgFillschemeClr !==undefined){ + fillColor = getSolidFill(bgFillschemeClr); + colorOpacity = getColorOpacity(bgFillschemeClr); + } + //borders color + //borders Width + var borderStyl = thisTblStyle["a:wholeTbl"]["a:tcStyle"]["a:tcBdr"]; + if(borderStyl !== undefined){ + var row_borders = getTableBorders(borderStyl); + rowsStyl += row_borders; + } + //console.log(thisTblStyle["a:wholeTbl"]) + + //Text Style - TODO + var rowTxtStyl = thisTblStyle["a:wholeTbl"]["a:tcTxStyle"]; + if(rowTxtStyl !== undefined){ + + } + }*/ + }else{ + if(thisTblStyle["a:band1H"] !==undefined){ + var bgFillschemeClr = getTextByPathList(thisTblStyle,["a:band1H","a:tcStyle","a:fill","a:solidFill"]); + if(bgFillschemeClr !==undefined){ + fillColor = getSolidFill(bgFillschemeClr); + colorOpacity = getColorOpacity(bgFillschemeClr); + } + //borders color + //borders Width + var borderStyl = getTextByPathList(thisTblStyle,["a:band1H","a:tcStyle","a:tcBdr"]); + if(borderStyl !== undefined){ + var row_borders = getTableBorders(borderStyl); + rowsStyl += row_borders; + } + //console.log(thisTblStyle["a:band1H"]) + + //Text Style - TODO + var rowTxtStyl = getTextByPathList(thisTblStyle,["a:band1H","a:tcTxStyle"]); + if(rowTxtStyl !== undefined){ + + } + } + } + rowsStyl += " background-color:#" + fillColor +";" + + " opacity:" + colorOpacity + ";"; + } + tableHtml += ""; + //////////////////////////////////////////////// + + var tcNodes = trNodes[i]["a:tc"]; + + if (tcNodes.constructor === Array) { + for (var j=0; j a:tblPr => a:tableStyleId + var tbleStyleId = getTblPr["a:tableStyleId"]; + if(tbleStyleId !== undefined){ + //get Style from tableStyles.xml by {var tbleStyleId} + //table style object : tableStyles + var tbleStylList = tableStyles["a:tblStyleLst"]["a:tblStyle"]; + + for(var k=0;k" + text + ""; + } else if (colSpan !== undefined) { + tableHtml += ""; + } else if (vMerge === undefined && hMerge === undefined) { + tableHtml += ""; + } + } + } else { + var text = genTextBody(tcNodes["a:txBody"]); + //Cells Style : TODO /////////////Amir + var colWidthParam = getColsGrid[0]["attrs"]["w"]; + var colStyl = ""; + if(colWidthParam !== undefined){ + var colWidth = parseInt(colWidthParam) * 96 / 914400; + colStyl += "width:" + colWidth +"px;" + } + var getFill = tcNodes["a:tcPr"]["a:solidFill"]; + var fillColor = ""; + var colorOpacity = 1; + if(getFill !== undefined){ + //console.log(getFill); + fillColor = getSolidFill(getFill); + colorOpacity = getColorOpacity(getFill); + }else{ + //get from Theme TODO + } + if(fillColor != ""){ + colStyl += " background-color:#" + fillColor +";" + colStyl += " opacity" + colorOpacity +";"; + } + //////////////////////////////////// + tableHtml += ""; + } + tableHtml += ""; + } + } else { + //////////////row height ////////////Amir + var rowHeightParam = trNodes["attrs"]["h"]; + var rowHeight = 0; + if(rowHeightParam !== undefined){ + rowHeight = parseInt(rowHeightParam) * 96 / 914400; + tableHtml += ""; + }else{ + tableHtml += ""; + } + //////////////////////////////////////////////// + var tcNodes = trNodes["a:tc"]; + if (tcNodes.constructor === Array) { + for (var j=0; j a:tblPr => a:tableStyleId + } + if(fillColor != ""){ + colStyl += " background-color:#" + fillColor +";" + colStyl += " opacity" + colorOpacity +";"; + } + //////////////////////////////////// + tableHtml += ""; + } + } else { + var text = genTextBody(tcNodes["a:txBody"]); + //Cells Style : TODO /////////////Amir + var colWidthParam = getColsGrid[0]["attrs"]["w"]; + var colStyl = ""; + if(colWidthParam !== undefined){ + var colWidth = parseInt(colWidthParam) * 96 / 914400; + colStyl += "width:" + colWidth +"px;" + } + var getFill = tcNodes[j]["a:tcPr"]["a:solidFill"]; + var fillColor = ""; + var colorOpacity = 1; + if(getFill !== undefined){ + //console.log(getFill); + fillColor = getSolidFill(getFill); + colorOpacity = getColorOpacity(getFill); + }else{ + //get from Theme TODO + } + if(fillColor != ""){ + colStyl += " background-color:#" + fillColor +";" + colStyl += " opacity" + colorOpacity +";"; + } + //////////////////////////////////// + tableHtml += ""; + } + tableHtml += ""; + } + + return tableHtml; + } + + function genChart(node, warpObj) { + + var order = node["attrs"]["order"]; + var xfrmNode = getTextByPathList(node, ["p:xfrm"]); + var result = "
"; + + var rid = node["a:graphic"]["a:graphicData"]["c:chart"]["attrs"]["r:id"]; + var refName = warpObj["slideResObj"][rid]["target"]; + var content = readXmlFile(warpObj["zip"], refName); + var plotArea = getTextByPathList(content, ["c:chartSpace", "c:chart", "c:plotArea"]); + + var chartData = null; + for (var key in plotArea) { + switch (key) { + case "c:lineChart": + chartData = { + "type": "createChart", + "data": { + "chartID": "chart" + chartID, + "chartType": "lineChart", + "chartData": extractChartData(plotArea[key]["c:ser"]) + } + }; + break; + case "c:barChart": + chartData = { + "type": "createChart", + "data": { + "chartID": "chart" + chartID, + "chartType": "barChart", + "chartData": extractChartData(plotArea[key]["c:ser"]) + } + }; + break; + case "c:pieChart": + chartData = { + "type": "createChart", + "data": { + "chartID": "chart" + chartID, + "chartType": "pieChart", + "chartData": extractChartData(plotArea[key]["c:ser"]) + } + }; + break; + case "c:pie3DChart": + chartData = { + "type": "createChart", + "data": { + "chartID": "chart" + chartID, + "chartType": "pie3DChart", + "chartData": extractChartData(plotArea[key]["c:ser"]) + } + }; + break; + case "c:areaChart": + chartData = { + "type": "createChart", + "data": { + "chartID": "chart" + chartID, + "chartType": "areaChart", + "chartData": extractChartData(plotArea[key]["c:ser"]) + } + }; + break; + case "c:scatterChart": + chartData = { + "type": "createChart", + "data": { + "chartID": "chart" + chartID, + "chartType": "scatterChart", + "chartData": extractChartData(plotArea[key]["c:ser"]) + } + }; + break; + case "c:catAx": + break; + case "c:valAx": + break; + default: + } + } + + if (chartData !== null) { + MsgQueue.push(chartData); + } + + chartID++; + return result; + } + + function genDiagram(node, warpObj) { + //console.log(warpObj) + //readXmlFile(zip, sldFileName) + /**files define the diagram: + * 1-colors#.xml, + * 2-data#.xml, + * 3-layout#.xml, + * 4-quickStyle#.xml. + * 5-drawing#.xml, which Microsoft added as an extension for persisting diagram layout information. + */ + ///get colors#.xml, data#.xml , layout#.xml , quickStyle#.xml + var order = node["attrs"]["order"]; + var zip = warpObj["zip"]; + var xfrmNode = getTextByPathList(node, ["p:xfrm"]); + var dgmRelIds = getTextByPathList(node, ["a:graphic","a:graphicData","dgm:relIds","attrs"]); + //console.log(dgmRelIds) + var dgmClrFileId = dgmRelIds["r:cs"]; + var dgmDataFileId = dgmRelIds["r:dm"]; + var dgmLayoutFileId = dgmRelIds["r:lo"]; + var dgmQuickStyleFileId = dgmRelIds["r:qs"]; + var dgmClrFileName = warpObj["slideResObj"][dgmClrFileId].target, + dgmDataFileName = warpObj["slideResObj"][dgmDataFileId].target, + dgmLayoutFileName = warpObj["slideResObj"][dgmLayoutFileId].target; + dgmQuickStyleFileName = warpObj["slideResObj"][dgmQuickStyleFileId].target; + //console.log(dgmClrFileName,"\n",dgmDataFileName,"\n",dgmLayoutFileName,"\n",dgmQuickStyleFileName); + var dgmClr = readXmlFile(zip, dgmClrFileName); + var dgmData = readXmlFile(zip, dgmDataFileName); + var dgmLayout = readXmlFile(zip, dgmLayoutFileName); + var dgmQuickStyle = readXmlFile(zip, dgmQuickStyleFileName); + //console.log(dgmClr,dgmData,dgmLayout,dgmQuickStyle) + ///get drawing#.xml + var dgmDrwFileName = ""; + var dataModelExt = getTextByPathList(dgmData, ["dgm:dataModel","dgm:extLst","a:ext","dsp:dataModelExt","attrs"]); + if(dataModelExt !== undefined){ + var dgmDrwFileId = dataModelExt["relId"]; + dgmDrwFileName = warpObj["slideResObj"][dgmDrwFileId]["target"]; + } + //console.log("dgmDrwFileName: ",dgmDrwFileName); + var dgmDrwFile = ""; + if(dgmDrwFileName != ""){ + dgmDrwFile = readXmlFile(zip, dgmDrwFileName); + } + //console.log("dgmDrwFile: ",dgmDrwFile); + //processSpNode(node, warpObj) + var dgmDrwSpArray = getTextByPathList(dgmDrwFile,["dsp:drawing","dsp:spTree","dsp:sp"]); + var rslt=""; + if(dgmDrwSpArray !== undefined){ + var dgmDrwSpArrayLen = dgmDrwSpArray.length; + for(var i=0;i "p:" + } + + return "
"+rslt+"
"; + } + + function getPosition(slideSpNode, slideLayoutSpNode, slideMasterSpNode) { + + var off = undefined; + var x = -1, y = -1; + + if (slideSpNode !== undefined) { + off = slideSpNode["a:off"]["attrs"]; + } else if (slideLayoutSpNode !== undefined) { + off = slideLayoutSpNode["a:off"]["attrs"]; + } else if (slideMasterSpNode !== undefined) { + off = slideMasterSpNode["a:off"]["attrs"]; + } + + if (off === undefined) { + return ""; + } else { + x = parseInt(off["x"]) * 96 / 914400; + y = parseInt(off["y"]) * 96 / 914400; + return (isNaN(x) || isNaN(y)) ? "" : "top:" + y + "px; left:" + x + "px;"; + } + + } + + function getSize(slideSpNode, slideLayoutSpNode, slideMasterSpNode) { + + var ext = undefined; + var w = -1, h = -1; + + if (slideSpNode !== undefined) { + ext = slideSpNode["a:ext"]["attrs"]; + } else if (slideLayoutSpNode !== undefined) { + ext = slideLayoutSpNode["a:ext"]["attrs"]; + } else if (slideMasterSpNode !== undefined) { + ext = slideMasterSpNode["a:ext"]["attrs"]; + } + + if (ext === undefined) { + return ""; + } else { + w = parseInt(ext["cx"]) * 96 / 914400; + h = parseInt(ext["cy"]) * 96 / 914400; + return (isNaN(w) || isNaN(h)) ? "" : "width:" + w + "px; height:" + h + "px;"; + } + + } + + function getHorizontalAlign(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) { + + var algn = getTextByPathList(node, ["a:pPr", "attrs", "algn"]); + if (algn === undefined) { + algn = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:p", "a:pPr", "attrs", "algn"]); + if (algn === undefined) { + algn = getTextByPathList(slideMasterSpNode, ["p:txBody", "a:p", "a:pPr", "attrs", "algn"]); + if (algn === undefined) { + switch (type) { + case "title": + case "subTitle": + case "ctrTitle": + algn = getTextByPathList(slideMasterTextStyles, ["p:titleStyle", "a:lvl1pPr", "attrs", "alng"]); + break; + default: + algn = getTextByPathList(slideMasterTextStyles, ["p:otherStyle", "a:lvl1pPr", "attrs", "alng"]); + } + } + } + } + // TODO: + if (algn === undefined) { + if (type == "title" || type == "subTitle" || type == "ctrTitle") { + return "h-mid"; + } else if (type == "sldNum") { + return "h-right"; + } + } + return algn === "ctr" ? "h-mid" : algn === "r" ? "h-right" : "h-left"; + } + + function getVerticalAlign(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) { + + // ไธŠไธญไธ‹ๅฐ้ฝŠ: X, , + var anchor = getTextByPathList(node, ["p:txBody", "a:bodyPr", "attrs", "anchor"]); + if (anchor === undefined) { + anchor = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:bodyPr", "attrs", "anchor"]); + if (anchor === undefined) { + anchor = getTextByPathList(slideMasterSpNode, ["p:txBody", "a:bodyPr", "attrs", "anchor"]); + } + } + + return anchor === "ctr" ? "v-mid" : anchor === "b" ? "v-down" : "v-up"; + } + + function getFontType(node, type, slideMasterTextStyles) { + var typeface = getTextByPathList(node, ["a:rPr", "a:latin", "attrs", "typeface"]); + + if (typeface === undefined) { + var fontSchemeNode = getTextByPathList(themeContent, ["a:theme", "a:themeElements", "a:fontScheme"]); + if (type == "title" || type == "subTitle" || type == "ctrTitle") { + typeface = getTextByPathList(fontSchemeNode, ["a:majorFont", "a:latin", "attrs", "typeface"]); + } else if (type == "body") { + typeface = getTextByPathList(fontSchemeNode, ["a:minorFont", "a:latin", "attrs", "typeface"]); + } else { + typeface = getTextByPathList(fontSchemeNode, ["a:minorFont", "a:latin", "attrs", "typeface"]); + } + } + + return (typeface === undefined) ? "inherit" : typeface; + } + + function getFontColorPr(node, spNode, type, slideMasterTextStyles) { + //text border using: text-shadow: -1px 0 black, 0 1px black, 1px 0 black, 0 -1px black; + //{getFontColor(..) return color} -> getFontColorPr(..) return array[color,textBordr/shadow] + //https://stackoverflow.com/questions/2570972/css-font-border + //https://www.w3schools.com/cssref/css3_pr_text-shadow.asp + //console.log(node) + var rPrNode = getTextByPathList(node, ["a:rPr"]); + var filTyp , color , textBordr; + if(rPrNode !== undefined){ + filTyp = getFillType(rPrNode); + if(filTyp == "SOLID_FILL"){ + var solidFillNode = getTextByPathList(node, ["a:rPr","a:solidFill"]); + color = getSolidFill(solidFillNode); + }else if(filTyp=="PATTERN_FILL"){ + var pattFill = getTextByPathList(node, ["a:rPr","a:pattFill"]); + color = getPatternFill(pattFill); + }else{ + var sPstyle = getTextByPathList(spNode, ["p:style","a:fontRef"]); + if(sPstyle !== undefined){ + color = getSolidFill(sPstyle); + } + } + //console.log(node,filTyp,color) + } + if (color === undefined || color === "FFF"){ + color = "#000"; + }else{ + color = "#" + color; + } + //textBordr + var txtBrdrNode = getTextByPathList(node, ["a:rPr","a:ln"]); + if(txtBrdrNode !== undefined){ + var txBrd = getBorder(node,false,"text"); + var txBrdAry = txBrd.split(" "); + var brdSize = (parseInt(txBrdAry[0].substring(0,txBrdAry[0].indexOf("pt"))) * (4/3)) + "px"; + var brdClr = txBrdAry[2]; + //var brdTyp = txBrdAry[1]; //not in use + textBordr = "-"+ brdSize +" 0 "+brdClr+", 0 "+brdSize+" "+brdClr+", "+brdSize+" 0 "+brdClr+", 0 -"+brdSize+" "+brdClr+";" + //console.log(node,"txBrd: ",textBordr); + }else{ + textBordr = "none"; + } + return [color , textBordr] ; + } + function getFontSize(node, slideLayoutSpNode, slideMasterSpNode, type, slideMasterTextStyles) { + var fontSize = undefined; + if (node["a:rPr"] !== undefined) { + fontSize = parseInt(node["a:rPr"]["attrs"]["sz"]) / 100; + } + + if ((isNaN(fontSize) || fontSize === undefined)) { + var sz = getTextByPathList(slideLayoutSpNode, ["p:txBody", "a:lstStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); + fontSize = parseInt(sz) / 100; + } + + if (isNaN(fontSize) || fontSize === undefined) { + if (type == "title" || type == "subTitle" || type == "ctrTitle") { + var sz = getTextByPathList(slideMasterTextStyles, ["p:titleStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); + } else if (type == "body") { + var sz = getTextByPathList(slideMasterTextStyles, ["p:bodyStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); + } else if (type == "dt" || type == "sldNum") { + var sz = "1200"; + } else if (type === undefined) { + var sz = getTextByPathList(slideMasterTextStyles, ["p:otherStyle", "a:lvl1pPr", "a:defRPr", "attrs", "sz"]); + } + fontSize = parseInt(sz) / 100; + } + + var baseline = getTextByPathList(node, ["a:rPr", "attrs", "baseline"]); + if (baseline !== undefined && !isNaN(fontSize)) { + fontSize -= 10; + } + + return isNaN(fontSize) ? "inherit" : (fontSize + "pt"); + } + + function getFontBold(node, type, slideMasterTextStyles) { + return (node["a:rPr"] !== undefined && node["a:rPr"]["attrs"]["b"] === "1") ? "bold" : "initial"; + } + + function getFontItalic(node, type, slideMasterTextStyles) { + return (node["a:rPr"] !== undefined && node["a:rPr"]["attrs"]["i"] === "1") ? "italic" : "normal"; + } + + function getFontDecoration(node, type, slideMasterTextStyles) { + ///////////////////////////////Amir/////////////////////////////// + if(node["a:rPr"] !== undefined){ + var underLine = node["a:rPr"]["attrs"]["u"] !== undefined? node["a:rPr"]["attrs"]["u"]:"none"; + var strikethrough = node["a:rPr"]["attrs"]["strike"] !== undefined? node["a:rPr"]["attrs"]["strike"]:'noStrike'; + //console.log("strikethrough: "+strikethrough); + + if(underLine != "none" && strikethrough == "noStrike"){ + return "underline"; + }else if(underLine == "none" && strikethrough != "noStrike"){ + return "line-through"; + }else if(underLine != "none" && strikethrough != "noStrike"){ + return "underline line-through"; + }else{ + return "initial"; + } + }else{ + return "initial"; + } + ///////////////////////////////////////////////////////////////// + //return (node["a:rPr"] !== undefined && node["a:rPr"]["attrs"]["u"] === "sng") ? "underline" : "initial"; + } + ////////////////////////////////////Amir///////////////////////////////////// + function getTextHorizontalAlign(node, type, slideMasterTextStyles){ + var getAlgn = getTextByPathList(node, ["a:pPr", "attrs", "algn"]); + var align = "initial"; + if(getAlgn !== undefined){ + switch(getAlgn){ + case "l": + align = "left"; + break; + case "r": + align = "right"; + break; + case "ctr": + align = "center"; + break; + case "just": + align = "justify"; + break; + case "dist": + align = "justify"; + break; + default: + align = "initial"; + } + } + return align; + } + ///////////////////////////////////////////////////////////////////// + function getTextVerticalAlign(node, type, slideMasterTextStyles) { + var baseline = getTextByPathList(node, ["a:rPr", "attrs", "baseline"]); + return baseline === undefined ? "baseline" : (parseInt(baseline) / 1000) + "%"; + } + ///////////////////////////////////Amir///////////////////////////// + function getTextDirection(node, type, slideMasterTextStyles){ + //get lvl + var pprLvl = getTextByPathList(node, ["a:pPr", "attrs", "lvl"]); + var pprLvlNum = pprLvl===undefined?1:Number(pprLvl)+1; + var lvlNode = "a:lvl"+pprLvlNum+"pPr"; + var pprAlgn = getTextByPathList(node, ["a:pPr", "attrs", "algn"]); + var isDir = getTextByPathList(slideMasterTextStyles, ["p:bodyStyle",lvlNode, "attrs", "rtl"]); + //var tmp = getTextByPathList(node, ["a:r", "a:t"]); + var dir = ""; + if (isDir !== undefined){ + if(isDir=="1" && (pprAlgn ===undefined || pprAlgn =="r")){ + dir = "rtl"; + }else{ //isDir =="0" + dir = "ltr"; + } + } + //console.log(tmp,isDir,pprAlgn,dir) + return dir; + } + function getTableBorders(node){ + var borderStyle = ""; + if(node["a:bottom"] !== undefined){ + var obj = { + "p:spPr":{ + "a:ln":node["a:bottom"]["a:ln"] + } + } + var borders = getBorder(obj, false, "shape"); + borderStyle += borders.replace("border","border-bottom"); + } + if(node["a:top"] !== undefined){ + var obj = { + "p:spPr":{ + "a:ln":node["a:top"]["a:ln"] + } + } + var borders = getBorder(obj, false, "shape"); + borderStyle += borders.replace("border","border-top"); + } + if(node["a:right"] !== undefined){ + var obj = { + "p:spPr":{ + "a:ln":node["a:right"]["a:ln"] + } + } + var borders = getBorder(obj, false, "shape"); + borderStyle += borders.replace("border","border-right"); + } + if(node["a:left"] !== undefined){ + var obj = { + "p:spPr":{ + "a:ln":node["a:left"]["a:ln"] + } + } + var borders = getBorder(obj, false, "shape"); + borderStyle += borders.replace("border","border-left"); + } + + return borderStyle; + } + ////////////////////////////////////////////////////////////////// + function getBorder(node, isSvgMode , bType) { + var cssText , lineNode; + if(bType == "shape"){ + cssText = "border: "; + lineNode = node["p:spPr"]["a:ln"]; + }else if(bType=="text"){ + cssText = ""; + lineNode = node["a:rPr"]["a:ln"]; + + } + + // Border width: 1pt = 12700, default = 0.75pt + var borderWidth = parseInt(getTextByPathList(lineNode, ["attrs", "w"])) / 12700; + if (isNaN(borderWidth) || borderWidth < 1) { + cssText += "1pt "; + } else { + cssText += borderWidth + "pt "; + } + // Border type + var borderType = getTextByPathList(lineNode, ["a:prstDash", "attrs", "val"]); + var strokeDasharray = "0"; + switch (borderType) { + case "solid": + cssText += "solid"; + strokeDasharray = "0"; + break; + case "dash": + cssText += "dashed"; + strokeDasharray = "5"; + break; + case "dashDot": + cssText += "dashed"; + strokeDasharray = "5, 5, 1, 5"; + break; + case "dot": + cssText += "dotted"; + strokeDasharray = "1, 5"; + break; + case "lgDash": + cssText += "dashed"; + strokeDasharray = "10, 5"; + break; + case "lgDashDotDot": + cssText += "dashed"; + strokeDasharray = "10, 5, 1, 5, 1, 5"; + break; + case "sysDash": + cssText += "dashed"; + strokeDasharray = "5, 2"; + break; + case "sysDashDot": + cssText += "dashed"; + strokeDasharray = "5, 2, 1, 5"; + break; + case "sysDashDotDot": + cssText += "dashed"; + strokeDasharray = "5, 2, 1, 5, 1, 5"; + break; + case "sysDot": + cssText += "dotted"; + strokeDasharray = "2, 5"; + break; + case undefined: + //console.log(borderType); + default: + cssText += "solid"; + strokeDasharray = "0"; + } + // Border color + var borderColor = getTextByPathList(lineNode, ["a:solidFill", "a:srgbClr", "attrs", "val"]); + if (borderColor === undefined) { + var schemeClrNode = getTextByPathList(lineNode, ["a:solidFill", "a:schemeClr"]); + if(schemeClrNode !== undefined){ + var schemeClr = "a:" + getTextByPathList(schemeClrNode, ["attrs", "val"]); + var borderColor = getSchemeColorFromTheme(schemeClr,undefined); + } + } + + // 2. drawingML namespace + if (borderColor === undefined) { + var schemeClrNode = getTextByPathList(node, ["p:style", "a:lnRef", "a:schemeClr"]); + if(schemeClrNode !== undefined){ + var schemeClr = "a:" + getTextByPathList(schemeClrNode, ["attrs", "val"]); + var borderColor = getSchemeColorFromTheme(schemeClr,undefined); + } + + if (borderColor !== undefined) { + var shade = getTextByPathList(schemeClrNode, ["a:shade", "attrs", "val"]); + if (shade !== undefined) { + shade = parseInt(shade) / 100000; + var color = new colz.Color("#" + borderColor); + color.setLum(color.hsl.l * shade); + borderColor = color.hex.replace("#", ""); + } + } + + } + + if (borderColor === undefined) { + if (isSvgMode) { + borderColor = "none"; + } else { + borderColor = "#000"; + } + } else { + borderColor = "#" + borderColor; + + } + cssText += " " + borderColor + " "; + + + + if (isSvgMode) { + return {"color": borderColor, "width": borderWidth, "type": borderType, "strokeDasharray": strokeDasharray}; + } else { + return cssText + ";"; + } + } + + function getSlideBackgroundFill(slideContent, slideLayoutContent, slideMasterContent,warpObj) { + //console.log(slideContent) + //getFillType(node) + var bgPr = getTextByPathList(slideContent, ["p:sld", "p:cSld","p:bg","p:bgPr"]); + var bgRef = getTextByPathList(slideContent, ["p:sld", "p:cSld","p:bg","p:bgRef"]); + var bgcolor; + if(bgPr !== undefined){ + //bgcolor = "background-color: blue;"; + var bgFillTyp = getFillType(bgPr); + + if(bgFillTyp == "SOLID_FILL"){ + var sldFill = bgPr["a:solidFill"]; + var bgColor = getSolidFill(sldFill); + var sldTint = getColorOpacity(sldFill); + bgcolor = "background: rgba("+ hexToRgbNew(bgColor)+","+ sldTint+");"; + + }else if(bgFillTyp == "GRADIENT_FILL"){ + bgcolor = getBgGradientFill(bgPr, undefined, slideMasterContent); + }else if(bgFillTyp == "PIC_FILL"){ + bgcolor = getBgPicFill(bgPr, "slideBg", warpObj); + + } + //console.log(slideContent,slideMasterContent,color_ary,tint_ary,rot,bgcolor) + }else if(bgRef !== undefined){ + //console.log("slideContent",bgRef) + var phClr; + if (bgRef["a:srgbClr"] !== undefined) { + phClr = getTextByPathList(bgRef,["a:srgbClr","attrs", "val"]); //#... + }else if(bgRef["a:schemeClr"] !== undefined) { //a:schemeClr + var schemeClr = getTextByPathList(bgRef,["a:schemeClr","attrs", "val"]); + phClr = getSchemeColorFromTheme("a:" + schemeClr,slideMasterContent); //#... + //console.log("schemeClr",schemeClr,"phClr=",phClr) + } + var idx = Number(bgRef["attrs"]["idx"]); + + + if(idx == 0 || idx==1000){ + //no background + }else if(idx > 0 && idx < 1000){ + //fillStyleLst in themeContent + //themeContent["a:fmtScheme"]["a:fillStyleLst"] + //bgcolor = "background: red;"; + }else if(idx > 1000 ){ + //bgFillStyleLst in themeContent + //themeContent["a:fmtScheme"]["a:bgFillStyleLst"] + var trueIdx = idx - 1000; + var bgFillLst = themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"]; + var sortblAry = []; + Object.keys(bgFillLst).forEach(function(key) { + var bgFillLstTyp = bgFillLst[key]; + if(key != "attrs"){ + if(bgFillLstTyp.constructor === Array ){ + for(var i=0;i 1000 ){ + //bgFillStyleLst in themeContent + //themeContent["a:fmtScheme"]["a:bgFillStyleLst"] + var trueIdx = idx - 1000; + var bgFillLst = themeContent["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"]; + var sortblAry = []; + Object.keys(bgFillLst).forEach(function(key) { + //console.log("cubicBezTo["+key+"]:"); + var bgFillLstTyp = bgFillLst[key]; + if(key != "attrs"){ + if(bgFillLstTyp.constructor === Array ){ + for(var i=0;i a:fillRect =>attrs (l:-17000, r:-17000) + bgcolor = "background-image: url(" + picFillBase64 + "); z-index: " + ordr + ";"; + return bgcolor; + } + function hexToRgbNew(hex) { + var arrBuff = new ArrayBuffer(4); + var vw = new DataView(arrBuff); + vw.setUint32(0,parseInt(hex, 16),false); + var arrByte = new Uint8Array(arrBuff); + + return arrByte[1] + "," + arrByte[2] + "," + arrByte[3]; + } + function getShapeFill(node, isSvgMode, warpObj) { + + // 1. presentationML + // p:spPr/ [a:noFill, solidFill, gradFill, blipFill, pattFill, grpFill] + // From slide + //Fill Type: + //console.log("ShapeFill: ", node) + var fillType = getFillType(getTextByPathList(node, ["p:spPr"])); + var fillColor; + if (fillType == "NO_FILL") { + return isSvgMode ? "none" : "background-color: initial;"; + }else if(fillType == "SOLID_FILL"){ + var shpFill = node["p:spPr"]["a:solidFill"]; + fillColor = getSolidFill(shpFill); + }else if(fillType == "GRADIENT_FILL"){ + var shpFill = node["p:spPr"]["a:gradFill"]; + // fillColor = getSolidFill(shpFill); + fillColor = getGradientFill(shpFill); + //console.log("shpFill",shpFill,grndColor.color) + }else if(fillType == "PATTERN_FILL"){ + var shpFill = node["p:spPr"]["a:pattFill"]; + fillColor = getPatternFill(shpFill); + }else if(fillType == "PIC_FILL"){ + var shpFill = node["p:spPr"]["a:blipFill"]; + fillColor = getPicFill("slideBg",shpFill, warpObj); + } + + + // 2. drawingML namespace + if (fillColor === undefined) { + var clrName = getTextByPathList(node, ["p:style", "a:fillRef"]); + fillColor = getSolidFill(clrName); + } + + if (fillColor !== undefined) { + if(fillType == "GRADIENT_FILL"){ + if (isSvgMode) { + // console.log("GRADIENT_FILL color", fillColor.color[0]) + return fillColor; + } else { + var colorAry = fillColor.color; + var rot = fillColor.rot; + + var bgcolor = "background: linear-gradient("+rot+"deg,"; + for(var i=0;i //Need to test///////////////////////////////////////////// + var defBultColorVals = node["a:scrgbClr"]["attrs"]; + var red = (defBultColorVals["r"].indexOf("%") != -1)?defBultColorVals["r"].split("%").shift():defBultColorVals["r"]; + var green = (defBultColorVals["g"].indexOf("%") != -1)?defBultColorVals["g"].split("%").shift():defBultColorVals["g"]; + var blue = (defBultColorVals["b"].indexOf("%") != -1)?defBultColorVals["b"].split("%").shift():defBultColorVals["b"]; + var scrgbClr = red + "," + green + "," + blue; + color = toHex(255*(Number(red)/100)) + toHex(255*(Number(green)/100)) + toHex(255*(Number(blue)/100)); + //console.log("scrgbClr: " + scrgbClr); + + }else if(node["a:prstClr"] !== undefined){ + // //Need to test///////////////////////////////////////////// + var prstClr = node["a:prstClr"]["attrs"]["val"]; + color = getColorName2Hex(prstClr); + //console.log("prstClr: " + prstClr+" => hexClr: "+color); + }else if(node["a:hslClr"] !== undefined){ + // //Need to test///////////////////////////////////////////// + var defBultColorVals = node["a:hslClr"]["attrs"]; + var hue = Number(defBultColorVals["hue"])/100000; + var sat = Number((defBultColorVals["sat"].indexOf("%") != -1)?defBultColorVals["sat"].split("%").shift():defBultColorVals["sat"])/100; + var lum = Number((defBultColorVals["lum"].indexOf("%") != -1)?defBultColorVals["lum"].split("%").shift():defBultColorVals["lum"])/100; + var hslClr = defBultColorVals["hue"] + "," + defBultColorVals["sat"] + "," + defBultColorVals["lum"]; + var hsl2rgb = hslToRgb(hue, sat, lum); + color = toHex(hsl2rgb.r) + toHex(hsl2rgb.g) + toHex(hsl2rgb.b); + //defBultColor = cnvrtHslColor2Hex(hslClr); //TODO + // console.log("hslClr: " + hslClr); + }else if(node["a:sysClr"] !== undefined){ + // //Need to test///////////////////////////////////////////// + var sysClr = getTextByPathList(node,["a:sysClr","attrs","lastClr"]); + if(sysClr !== undefined){ + color = sysClr; + } + } + return color; + } + function toHex(n) { + var hex = n.toString(16); + while (hex.length < 2) {hex = "0" + hex; } + return hex; + } + function hslToRgb(hue, sat, light) { + var t1, t2, r, g, b; + hue = hue / 60; + if ( light <= 0.5 ) { + t2 = light * (sat + 1); + } else { + t2 = light + sat - (light * sat); + } + t1 = light * 2 - t2; + r = hueToRgb(t1, t2, hue + 2) * 255; + g = hueToRgb(t1, t2, hue) * 255; + b = hueToRgb(t1, t2, hue - 2) * 255; + return {r : r, g : g, b : b}; + } + function hueToRgb(t1, t2, hue) { + if (hue < 0) hue += 6; + if (hue >= 6) hue -= 6; + if (hue < 1) return (t2 - t1) * hue + t1; + else if(hue < 3) return t2; + else if(hue < 4) return (t2 - t1) * (4 - hue) + t1; + else return t1; + } + function getColorName2Hex(name) { + var hex; + var colorName = ['AliceBlue','AntiqueWhite','Aqua','Aquamarine','Azure','Beige','Bisque','Black','BlanchedAlmond','Blue','BlueViolet','Brown','BurlyWood','CadetBlue','Chartreuse','Chocolate','Coral','CornflowerBlue','Cornsilk','Crimson','Cyan','DarkBlue','DarkCyan','DarkGoldenRod','DarkGray','DarkGrey','DarkGreen','DarkKhaki','DarkMagenta','DarkOliveGreen','DarkOrange','DarkOrchid','DarkRed','DarkSalmon','DarkSeaGreen','DarkSlateBlue','DarkSlateGray','DarkSlateGrey','DarkTurquoise','DarkViolet','DeepPink','DeepSkyBlue','DimGray','DimGrey','DodgerBlue','FireBrick','FloralWhite','ForestGreen','Fuchsia','Gainsboro','GhostWhite','Gold','GoldenRod','Gray','Grey','Green','GreenYellow','HoneyDew','HotPink','IndianRed','Indigo','Ivory','Khaki','Lavender','LavenderBlush','LawnGreen','LemonChiffon','LightBlue','LightCoral','LightCyan','LightGoldenRodYellow','LightGray','LightGrey','LightGreen','LightPink','LightSalmon','LightSeaGreen','LightSkyBlue','LightSlateGray','LightSlateGrey','LightSteelBlue','LightYellow','Lime','LimeGreen','Linen','Magenta','Maroon','MediumAquaMarine','MediumBlue','MediumOrchid','MediumPurple','MediumSeaGreen','MediumSlateBlue','MediumSpringGreen','MediumTurquoise','MediumVioletRed','MidnightBlue','MintCream','MistyRose','Moccasin','NavajoWhite','Navy','OldLace','Olive','OliveDrab','Orange','OrangeRed','Orchid','PaleGoldenRod','PaleGreen','PaleTurquoise','PaleVioletRed','PapayaWhip','PeachPuff','Peru','Pink','Plum','PowderBlue','Purple','RebeccaPurple','Red','RosyBrown','RoyalBlue','SaddleBrown','Salmon','SandyBrown','SeaGreen','SeaShell','Sienna','Silver','SkyBlue','SlateBlue','SlateGray','SlateGrey','Snow','SpringGreen','SteelBlue','Tan','Teal','Thistle','Tomato','Turquoise','Violet','Wheat','White','WhiteSmoke','Yellow','YellowGreen']; + var colorHex = ['f0f8ff','faebd7','00ffff','7fffd4','f0ffff','f5f5dc','ffe4c4','000000','ffebcd','0000ff','8a2be2','a52a2a','deb887','5f9ea0','7fff00','d2691e','ff7f50','6495ed','fff8dc','dc143c','00ffff','00008b','008b8b','b8860b','a9a9a9','a9a9a9','006400','bdb76b','8b008b','556b2f','ff8c00','9932cc','8b0000','e9967a','8fbc8f','483d8b','2f4f4f','2f4f4f','00ced1','9400d3','ff1493','00bfff','696969','696969','1e90ff','b22222','fffaf0','228b22','ff00ff','dcdcdc','f8f8ff','ffd700','daa520','808080','808080','008000','adff2f','f0fff0','ff69b4','cd5c5c','4b0082','fffff0','f0e68c','e6e6fa','fff0f5','7cfc00','fffacd','add8e6','f08080','e0ffff','fafad2','d3d3d3','d3d3d3','90ee90','ffb6c1','ffa07a','20b2aa','87cefa','778899','778899','b0c4de','ffffe0','00ff00','32cd32','faf0e6','ff00ff','800000','66cdaa','0000cd','ba55d3','9370db','3cb371','7b68ee','00fa9a','48d1cc','c71585','191970','f5fffa','ffe4e1','ffe4b5','ffdead','000080','fdf5e6','808000','6b8e23','ffa500','ff4500','da70d6','eee8aa','98fb98','afeeee','db7093','ffefd5','ffdab9','cd853f','ffc0cb','dda0dd','b0e0e6','800080','663399','ff0000','bc8f8f','4169e1','8b4513','fa8072','f4a460','2e8b57','fff5ee','a0522d','c0c0c0','87ceeb','6a5acd','708090','708090','fffafa','00ff7f','4682b4','d2b48c','008080','d8bfd8','ff6347','40e0d0','ee82ee','f5deb3','ffffff','f5f5f5','ffff00','9acd32']; + var findIndx = colorName.indexOf(name); + if(findIndx != -1){ + hex = colorHex[findIndx]; + } + return hex; + } + function getColorOpacity(solidFill){ + + if (solidFill === undefined) { + return undefined; + } + var opcity = 1; + + if (solidFill["a:srgbClr"] !== undefined) { + var tint = getTextByPathList(solidFill,["a:srgbClr","a:tint","attrs", "val"]); + if(tint !== undefined){ + opcity = parseInt(tint) / 100000; + } + } else if (solidFill["a:schemeClr"] !== undefined) { + var tint = getTextByPathList(solidFill,["a:schemeClr","a:tint","attrs", "val"]); + if(tint !== undefined){ + opcity = parseInt(tint) / 100000; + } + }else if(solidFill["a:scrgbClr"] !== undefined){ + var tint = getTextByPathList(solidFill,["a:scrgbClr","a:tint","attrs", "val"]); + if(tint !== undefined){ + opcity = parseInt(tint) / 100000; + } + + }else if(solidFill["a:prstClr"] !== undefined){ + var tint = getTextByPathList(solidFill,["a:prstClr","a:tint","attrs", "val"]); + if(tint !== undefined){ + opcity = parseInt(tint) / 100000; + } + }else if(solidFill["a:hslClr"] !== undefined){ + var tint = getTextByPathList(solidFill,["a:hslClr","a:tint","attrs", "val"]); + if(tint !== undefined){ + opcity = parseInt(tint) / 100000; + } + }else if(solidFill["a:sysClr"] !== undefined){ + var tint = getTextByPathList(solidFill,["a:sysClr","a:tint","attrs", "val"]); + if(tint !== undefined){ + opcity = parseInt(tint) / 100000; + } + } + + return opcity; + } + function getSchemeColorFromTheme(schemeClr,sldMasterNode) { + // in slide master + // e.g. tx2="dk2" bg2="lt2" tx1="dk1" bg1="lt1" slideLayoutClrOvride + + if(slideLayoutClrOvride == "" || slideLayoutClrOvride === undefined ){ + slideLayoutClrOvride = getTextByPathList(sldMasterNode,["p:sldMaster","p:clrMap","attrs"]) + } + //console.log(slideLayoutClrOvride); + var schmClrName = schemeClr.substr(2); + if(slideLayoutClrOvride !== undefined){ + switch (schmClrName) { + case "tx1": + case "tx2": + case "bg1": + case "bg2": + schemeClr = "a:"+slideLayoutClrOvride[schmClrName]; + //console.log(schmClrName+ "=> "+schemeClr); + break; + } + }else{ + switch (schmClrName) { + case "tx1": + schemeClr = "a:dk1"; + break; + case "tx2": + schemeClr = "a:dk2"; + break; + case "bg1": + schemeClr = "a:lt1"; + break; + case "bg2": + schemeClr = "a:lt2"; + break; + } + } + var refNode = getTextByPathList(themeContent, ["a:theme", "a:themeElements", "a:clrScheme", schemeClr]); + var color = getTextByPathList(refNode, ["a:srgbClr", "attrs", "val"]); + if (color === undefined && refNode !== undefined) { + color = getTextByPathList(refNode, ["a:sysClr", "attrs", "lastClr"]); + } + //console.log(color) + return color; + } + + function extractChartData(serNode) { + + var dataMat = new Array(); + + if (serNode === undefined) { + return dataMat; + } + + if (serNode["c:xVal"] !== undefined) { + var dataRow = new Array(); + eachElement(serNode["c:xVal"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { + dataRow.push(parseFloat(innerNode["c:v"])); + return ""; + }); + dataMat.push(dataRow); + dataRow = new Array(); + eachElement(serNode["c:yVal"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { + dataRow.push(parseFloat(innerNode["c:v"])); + return ""; + }); + dataMat.push(dataRow); + } else { + eachElement(serNode, function(innerNode, index) { + var dataRow = new Array(); + var colName = getTextByPathList(innerNode, ["c:tx", "c:strRef", "c:strCache", "c:pt", "c:v"]) || index; + + // Category (string or number) + var rowNames = {}; + if (getTextByPathList(innerNode, ["c:cat", "c:strRef", "c:strCache", "c:pt"]) !== undefined) { + eachElement(innerNode["c:cat"]["c:strRef"]["c:strCache"]["c:pt"], function(innerNode, index) { + rowNames[innerNode["attrs"]["idx"]] = innerNode["c:v"]; + return ""; + }); + } else if (getTextByPathList(innerNode, ["c:cat", "c:numRef", "c:numCache", "c:pt"]) !== undefined) { + eachElement(innerNode["c:cat"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { + rowNames[innerNode["attrs"]["idx"]] = innerNode["c:v"]; + return ""; + }); + } + + // Value + if (getTextByPathList(innerNode, ["c:val", "c:numRef", "c:numCache", "c:pt"]) !== undefined) { + eachElement(innerNode["c:val"]["c:numRef"]["c:numCache"]["c:pt"], function(innerNode, index) { + dataRow.push({x: innerNode["attrs"]["idx"], y: parseFloat(innerNode["c:v"])}); + return ""; + }); + } + + dataMat.push({key: colName, values: dataRow, xlabels: rowNames}); + return ""; + }); + } + + return dataMat; + } + + // ===== Node functions ===== + /** + * getTextByPathStr + * @param {Object} node + * @param {string} pathStr + */ + function getTextByPathStr(node, pathStr) { + return getTextByPathList(node, pathStr.trim().split(/\s+/)); + } + + /** + * getTextByPathList + * @param {Object} node + * @param {string Array} path + */ + function getTextByPathList(node, path) { + + if (path.constructor !== Array) { + throw Error("Error of path type! path is not array."); + } + + if (node === undefined) { + return undefined; + } + + var l = path.length; + for (var i=0; i\n'; + svg += svgAngle; + + for (var i = 0; i < sal; i++) { + svg += ''; + ptrn += ''; + ptrn += ''; + return ptrn; + } + + function processMsgQueue(queue) { + for (var i=0; i 0){ + //console.log("DIV-"+i+":"); + var prevBultTyp = ""; + var prevBultLvl = ""; + var buletIndex = 0; + var tmpArry = new Array(); + var tmpArryIndx = 0; + var buletTypSrry = new Array(); + for(var j=0; j< buSpan.length; j++){ + var bult_typ = $(buSpan[j]).data("bulltname"); + var bult_lvl = $(buSpan[j]).data("bulltlvl"); + //console.log(j+" - "+bult_typ+" lvl: "+bult_lvl ); + if(buletIndex==0){ + prevBultTyp = bult_typ; + prevBultLvl = bult_lvl; + tmpArry[tmpArryIndx] = buletIndex; + buletTypSrry[tmpArryIndx] = bult_typ; + buletIndex++; + }else{ + if(bult_typ == prevBultTyp && bult_lvl == prevBultLvl){ + prevBultTyp = bult_typ; + prevBultLvl = bult_lvl; + buletIndex++; + tmpArry[tmpArryIndx] = buletIndex; + buletTypSrry[tmpArryIndx] = bult_typ; + }else if(bult_typ != prevBultTyp && bult_lvl == prevBultLvl){ + prevBultTyp = bult_typ; + prevBultLvl = bult_lvl; + tmpArryIndx++; + tmpArry[tmpArryIndx] = buletIndex; + buletTypSrry[tmpArryIndx] = bult_typ; + buletIndex = 1; + }else if(bult_typ != prevBultTyp && Number(bult_lvl) > Number(prevBultLvl)){ + prevBultTyp = bult_typ; + prevBultLvl = bult_lvl; + tmpArryIndx++; + tmpArry[tmpArryIndx] = buletIndex; + buletTypSrry[tmpArryIndx] = bult_typ; + buletIndex = 1; + }else if(bult_typ != prevBultTyp && Number(bult_lvl) < Number(prevBultLvl)){ + prevBultTyp = bult_typ; + prevBultLvl = bult_lvl; + tmpArryIndx--; + buletIndex = tmpArry[tmpArryIndx]+1; + } + } + //console.log(buletTypSrry[tmpArryIndx]+" - "+buletIndex); + var numIdx = getNumTypeNum(buletTypSrry[tmpArryIndx],buletIndex); + $(buSpan[j]).html(numIdx); + } + } + } + } + function getNumTypeNum(numTyp,num){ + var rtrnNum = ""; + switch(numTyp){ + case "arabicPeriod": + rtrnNum = num + ". "; + break; + case "arabicParenR": + rtrnNum = num + ") "; + break; + case "alphaLcParenR": + rtrnNum = alphaNumeric(num,"lowerCase") + ") "; + break; + case "alphaLcPeriod": + rtrnNum = alphaNumeric(num,"lowerCase") + ". "; + break; + + case "alphaUcParenR": + rtrnNum = alphaNumeric(num,"upperCase") + ") "; + break; + case "alphaUcPeriod": + rtrnNum = alphaNumeric(num,"upperCase") + ". "; + break; + + case "romanUcPeriod": + rtrnNum = romanize(num) + ". "; + break; + case "romanLcParenR": + rtrnNum = romanize(num) + ") "; + break; + case "hebrew2Minus": + rtrnNum = hebrew2Minus.format(num) + "-"; + break; + default: + rtrnNum = num; + } + return rtrnNum; + } + function romanize (num) { + if (!+num) + return false; + var digits = String(+num).split(""), + key = ["","C","CC","CCC","CD","D","DC","DCC","DCCC","CM", + "","X","XX","XXX","XL","L","LX","LXX","LXXX","XC", + "","I","II","III","IV","V","VI","VII","VIII","IX"], + roman = "", + i = 3; + while (i--) + roman = (key[+digits.pop() + (i * 10)] || "") + roman; + return Array(+digits.join("") + 1).join("M") + roman; + } + var hebrew2Minus = archaicNumbers([ + [1000,''], + [400,'ืช'], + [300,'ืฉ'], + [200,'ืจ'], + [100,'ืง'], + [90,'ืฆ'], + [80,'ืค'], + [70,'ืข'], + [60,'ืก'], + [50,'ื '], + [40,'ืž'], + [30,'ืœ'], + [20,'ื›'], + [10,'ื™'], + [9,'ื˜'], + [8,'ื—'], + [7,'ื–'], + [6,'ื•'], + [5,'ื”'], + [4,'ื“'], + [3,'ื’'], + [2,'ื‘'], + [1,'ื'], + [/ื™ื”/, 'ื˜ืดื•'], + [/ื™ื•/, 'ื˜ืดื–'], + [/([ื-ืช])([ื-ืช])$/, '$1ืด$2'], + [/^([ื-ืช])$/, "$1ืณ"] + ]); + function archaicNumbers(arr){ + var arrParse = arr.slice().sort(function (a,b) {return b[1].length - a[1].length}); + return { + format: function(n){ + var ret = ''; + jQuery.each(arr, function(){ + var num = this[0]; + if (parseInt(num) > 0){ + for (; n >= num; n -= num) ret += this[1]; + }else{ + ret = ret.replace(num, this[1]); + } + }); + return ret; + } + } + } + function alphaNumeric(num,upperLower){ + num = Number(num)-1; + var aNum = ""; + if(upperLower=="upperCase"){ + aNum = (( (num/26>=1)? String.fromCharCode(num/26+64):'') + String.fromCharCode(num%26+65)).toUpperCase(); + }else if(upperLower=="lowerCase"){ + aNum = (( (num/26>=1)? String.fromCharCode(num/26+64):'') + String.fromCharCode(num%26+65)).toLowerCase(); + } + return aNum; + } + function base64ArrayBuffer(arrayBuffer) { + var base64 = ''; + var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'; + var bytes = new Uint8Array(arrayBuffer); + var byteLength = bytes.byteLength; + var byteRemainder = byteLength % 3; + var mainLength = byteLength - byteRemainder; + + var a, b, c, d; + var chunk; + + for (var i = 0; i < mainLength; i = i + 3) { + chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]; + a = (chunk & 16515072) >> 18; + b = (chunk & 258048) >> 12; + c = (chunk & 4032) >> 6; + d = chunk & 63; + base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]; + } + + if (byteRemainder == 1) { + chunk = bytes[mainLength]; + a = (chunk & 252) >> 2; + b = (chunk & 3) << 4; + base64 += encodings[a] + encodings[b] + '=='; + } else if (byteRemainder == 2) { + chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]; + a = (chunk & 64512) >> 10; + b = (chunk & 1008) >> 4; + c = (chunk & 15) << 2; + base64 += encodings[a] + encodings[b] + encodings[c] + '='; + } + + return base64; + } + + function extractFileExtension(filename) { + return filename.substr((~-filename.lastIndexOf(".") >>> 0) + 2); + } + + function escapeHtml(text) { + var map = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' + }; + return text.replace(/[&<>"']/g, function(m) { return map[m]; }); + } + /////////////////////////////////////tXml/////////////////////////// + /* + This is my custom tXml.js file + */ + function tXml(t,r){"use strict";function e(){for(var r=[];t[l];)if(t.charCodeAt(l)==s){if(t.charCodeAt(l+1)===h)return l=t.indexOf(u,l),l+1&&(l+=1),r;if(t.charCodeAt(l+1)===v){if(t.charCodeAt(l+2)==m){for(;-1!==l&&(t.charCodeAt(l)!==d||t.charCodeAt(l-1)!=m||t.charCodeAt(l-2)!=m||-1==l);)l=t.indexOf(u,l+1);-1===l&&(l=t.length)}else for(l+=2;t.charCodeAt(l)!==d&&t[l];)l++;l++;continue}var e=a();r.push(e)}else{var i=n();i.trim().length>0&&r.push(i),l++}return r}function n(){var r=l;return l=t.indexOf(c,l)-1,-2===l&&(l=t.length),t.slice(r,l+1)}function i(){for(var r=l;-1===A.indexOf(t[l])&&t[l];)l++;return t.slice(r,l)}function a(){var r={};l++,r.tagName=i();for(var n=!1;t.charCodeAt(l)!==d&&t[l];){var a=t.charCodeAt(l);if(a>64&&91>a||a>96&&123>a){for(var f=i(),c=t.charCodeAt(l);c&&c!==p&&c!==g&&!(c>64&&91>c||c>96&&123>c)&&c!==d;)l++,c=t.charCodeAt(l);if(n||(r.attributes={},n=!0),c===p||c===g){var s=o();if(-1===l)return r}else s=null,l--;r.attributes[f]=s}l++}if(t.charCodeAt(l-1)!==h)if("script"==r.tagName){var u=l+1;l=t.indexOf("",l),r.children=[t.slice(u,l-1)],l+=8}else if("style"==r.tagName){var u=l+1;l=t.indexOf("",l),r.children=[t.slice(u,l-1)],l+=7}else-1==C.indexOf(r.tagName)&&(l++,r.children=e(f));else l++;return r}function o(){var r=t[l],e=++l;return l=t.indexOf(r,e),t.slice(e,l)}function f(){var e=new RegExp("\\s"+r.attrName+"\\s*=['\"]"+r.attrValue+"['\"]").exec(t);return e?e.index:-1}r=r||{};var l=r.pos||0,c="<",s="<".charCodeAt(0),u=">",d=">".charCodeAt(0),m="-".charCodeAt(0),h="/".charCodeAt(0),v="!".charCodeAt(0),p="'".charCodeAt(0),g='"'.charCodeAt(0),A="\n >/= ",C=["img","br","input","meta","link"],y=null;if(void 0!==r.attrValue){r.attrName=r.attrName||"id";for(var y=[];-1!==(l=f());)l=t.lastIndexOf("<",l),-1!==l&&y.push(a()),t=t.substr(l),l=0}else y=r.parseNode?a():e();return r.filter&&(y=tXml.filter(y,r.filter)),r.simplify&&(y=tXml.simplify(y)),y.pos=l,y}var _order=1;tXml.simplify=function(t){var r={};if(void 0===t)return{};if(1===t.length&&"string"==typeof t[0])return t[0];t.forEach(function(t){if("object"==typeof t){r[t.tagName]||(r[t.tagName]=[]);var e=tXml.simplify(t.children||[]);r[t.tagName].push(e),t.attributes&&(e.attrs=t.attributes),void 0===e.attrs?e.attrs={order:_order}:e.attrs.order=_order,_order++}});for(var e in r)1==r[e].length&&(r[e]=r[e][0]);return r},tXml.filter=function(t,r){var e=[];return t.forEach(function(t){if("object"==typeof t&&r(t)&&e.push(t),t.children){var n=tXml.filter(t.children,r);e=e.concat(n)}}),e},tXml.stringify=function(t){function r(t){if(t)for(var r=0;r"}var n="";return r(t),n},tXml.toContentString=function(t){if(Array.isArray(t)){var r="";return t.forEach(function(t){r+=" "+tXml.toContentString(t),r=r.trim()}),r}return"object"==typeof t?tXml.toContentString(t.children):" "+t},tXml.getElementById=function(t,r,e){var n=tXml(t,{attrValue:r,simplify:e});return e?n:n[0]},tXml.getElementsByClassName=function(t,r,e){return tXml(t,{attrName:"class",attrValue:"[a-zA-Z0-9-s ]*"+r+"[a-zA-Z0-9-s ]*",simplify:e})},tXml.parseStream=function(t,r){if("function"==typeof r&&(cb=r,r=0),"string"==typeof r&&(r=r.length+2),"string"==typeof t){var e=require("fs");t=e.createReadStream(t,{start:r}),r=0}var n=r,i="",a=0;return t.on("data",function(r){a++,i+=r;for(var e=0;;){n=i.indexOf("<",n)+1;var o=tXml(i,{pos:n,parseNode:!0});if(n=o.pos,n>i.length-1||e>n)return void(e&&(i=i.slice(e),n=0,e=0));t.emit("xml",o),e=n}i=i.slice(n),n=0}),t.on("end",function(){console.log("end")}),t},"object"==typeof module&&(module.exports=tXml); + }; + + /*! + JSZipUtils - A collection of cross-browser utilities to go along with JSZip. + + (c) 2014 Stuart Knightley, David Duponchel + Dual licenced under the MIT license or GPLv3. See https://raw.github.com/Stuk/jszip-utils/master/LICENSE.markdown. + */ + !function(a){"object"==typeof exports?module.exports=a():"function"==typeof define&&define.amd?define(a):"undefined"!=typeof window?window.JSZipUtils=a():"undefined"!=typeof global?global.JSZipUtils=a():"undefined"!=typeof self&&(self.JSZipUtils=a())}(function(){return function a(b,c,d){function e(g,h){if(!c[g]){if(!b[g]){var i="function"==typeof require&&require;if(!h&&i)return i(g,!0);if(f)return f(g,!0);throw new Error("Cannot find module '"+g+"'")}var j=c[g]={exports:{}};b[g][0].call(j.exports,function(a){var c=b[g][1][a];return e(c?c:a)},j,j.exports,a,b,c,d)}return c[g].exports}for(var f="function"==typeof require&&require,g=0;g 1) { + r = arg[0]; + g = arg[1]; + b = arg[2]; + } else { + r = arg[0][0]; + g = arg[0][1]; + b = arg[0][2]; + } + return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b); + }; + rgbToHsl = colz.rgbToHsl = function() { + var arg, r, g, b, h, s, l, d, max, min; + arg = arguments; + if (typeof arg[0] === "number") { + r = arg[0]; + g = arg[1]; + b = arg[2]; + } else { + r = arg[0][0]; + g = arg[0][1]; + b = arg[0][2]; + } + r /= 255; + g /= 255; + b /= 255; + max = Math.max(r, g, b); + min = Math.min(r, g, b); + l = (max + min) / 2; + if (max === min) { + h = s = 0; + } else { + d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch (max) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h /= 6; + } + h = round(h * 360); + s = round(s * 100); + l = round(l * 100); + return [h, s, l]; + }; + hue2rgb = colz.hue2rgb = function(p, q, t) { + if (t < 0) { + t += 1; + } + if (t > 1) { + t -= 1; + } + if (t < 1 / 6) { + return p + (q - p) * 6 * t; + } + if (t < 1 / 2) { + return q; + } + if (t < 2 / 3) { + return p + (q - p) * (2 / 3 - t) * 6; + } + return p; + }; + hslToRgb = colz.hslToRgb = function() { + var arg, r, g, b, h, s, l, q, p; + arg = arguments; + if (typeof arg[0] === "number") { + h = arg[0] / 360; + s = arg[1] / 100; + l = arg[2] / 100; + } else { + h = arg[0][0] / 360; + s = arg[0][1] / 100; + l = arg[0][2] / 100; + } + if (s === 0) { + r = g = b = l; + } else { + q = l < 0.5 ? l * (1 + s) : l + s - l * s; + p = 2 * l - q; + r = colz.hue2rgb(p, q, h + 1 / 3); + g = colz.hue2rgb(p, q, h); + b = colz.hue2rgb(p, q, h - 1 / 3); + } + return [round(r * 255), round(g * 255), round(b * 255)]; + }; + rgbToHsb = colz.rgbToHsb = function(r, g, b) { + var max, min, h, s, v, d; + r = r / 255; + g = g / 255; + b = b / 255; + max = Math.max(r, g, b); + min = Math.min(r, g, b); + v = max; + d = max - min; + s = max === 0 ? 0 : d / max; + if (max === min) { + h = 0; + } else { + switch (max) { + case r: + h = (g - b) / d + (g < b ? 6 : 0); + break; + case g: + h = (b - r) / d + 2; + break; + case b: + h = (r - g) / d + 4; + break; + } + h /= 6; + } + h = round(h * 360); + s = round(s * 100); + v = round(v * 100); + return [h, s, v]; + }; + hsbToRgb = colz.hsbToRgb = function(h, s, v) { + var r, g, b, i, f, p, q, t; + if (v === 0) { + return [0, 0, 0]; + } + s = s / 100; + v = v / 100; + h = h / 60; + i = Math.floor(h); + f = h - i; + p = v * (1 - s); + q = v * (1 - s * f); + t = v * (1 - s * (1 - f)); + if (i === 0) { + r = v; + g = t; + b = p; + } else if (i === 1) { + r = q; + g = v; + b = p; + } else if (i === 2) { + r = p; + g = v; + b = t; + } else if (i === 3) { + r = p; + g = q; + b = v; + } else if (i === 4) { + r = t; + g = p; + b = v; + } else if (i === 5) { + r = v; + g = p; + b = q; + } + r = Math.floor(r * 255); + g = Math.floor(g * 255); + b = Math.floor(b * 255); + return [r, g, b]; + }; + hsbToHsl = colz.hsbToHsl = function(h, s, b) { + return colz.rgbToHsl(colz.hsbToRgb(h, s, b)); + }; + hsvToHsl = colz.hsvToHsl = colz.hsbToHsl; + hsvToRgb = colz.hsvToRgb = colz.hsbToRgb; + ColorScheme = colz.ColorScheme = function(color_val, angle_array) { + this.palette = []; + if (angle_array === undefined && color_val instanceof Array) { + this.createFromColors(color_val); + } else { + this.createFromAngles(color_val, angle_array); + } + }; + var colorSchemePrototype = ColorScheme.prototype; + colorSchemePrototype.createFromColors = function(color_val) { + for (var i in color_val) { + if (color_val.hasOwnProperty(i)) { + this.palette.push(new Color(color_val[i])); + } + } + return this.palette; + }; + colorSchemePrototype.createFromAngles = function(color_val, angle_array) { + this.palette.push(new Color(color_val)); + for (var i in angle_array) { + if (angle_array.hasOwnProperty(i)) { + var tempHue = (this.palette[0].h + angle_array[i]) % 360; + this.palette.push( + new Color( + colz.hslToRgb([tempHue, this.palette[0].s, this.palette[0].l]) + ) + ); + } + } + return this.palette; + }; + ColorScheme.Compl = function(color_val) { + return new ColorScheme(color_val, [180]); + }; + ColorScheme.Triad = function(color_val) { + return new ColorScheme(color_val, [120, 240]); + }; + ColorScheme.Tetrad = function(color_val) { + return new ColorScheme(color_val, [60, 180, 240]); + }; + ColorScheme.Analog = function(color_val) { + return new ColorScheme(color_val, [-45, 45]); + }; + ColorScheme.Split = function(color_val) { + return new ColorScheme(color_val, [150, 210]); + }; + ColorScheme.Accent = function(color_val) { + return new ColorScheme(color_val, [-45, 45, 180]); + }; + return colz; + }); +}( jQuery )); diff --git a/example/include/PPTXjs/js/pptxjs.min.js b/example/pages/include/PPTXjs/js/pptxjs.min.js similarity index 99% rename from example/include/PPTXjs/js/pptxjs.min.js rename to example/pages/include/PPTXjs/js/pptxjs.min.js index 346b980..f9962ff 100644 --- a/example/include/PPTXjs/js/pptxjs.min.js +++ b/example/pages/include/PPTXjs/js/pptxjs.min.js @@ -1,12 +1,12 @@ -/** - * pptxjs.min.js - * Ver. : 1.10.3 - * last update: 14/05/2018 - * Author: meshesha , https://github.com/meshesha - * LICENSE: MIT - * url:https://meshesha.github.io/pptxjs - * New: - * - new divs2slides (v.1.3.2) - * - fixed div width issue - */ +/** + * pptxjs.min.js + * Ver. : 1.10.3 + * last update: 14/05/2018 + * Author: meshesha , https://github.com/meshesha + * LICENSE: MIT + * url:https://meshesha.github.io/pptxjs + * New: + * - new divs2slides (v.1.3.2) + * - fixed div width issue + */ !function(r){var t;r.fn.pptxToHtml=function(t){var e=r(this),s=e.attr("id"),o=!1,i=new Array,l=null,n="",d=0,h=1,p=!1,c={},f=r.extend(!0,{pptxFileUrl:"",fileInputId:"",slidesScale:"",slideMode:!1,keyBoardShortCut:!1,mediaProcess:!0,jsZipV2:!1,slideModeConfig:{first:1,nav:!0,navTxtColor:"black",keyBoardShortCut:!0,showSlideNum:!0,showTotalSlideNum:!0,autoSlide:!0,randomAutoSlide:!1,loop:!1,background:!1,transition:"default",transitionTime:1}},t);function u(a){for(var t=new JSZip,n=function(a){var r=[],t=new Date;if(null!==a.file("docProps/thumbnail.jpeg")){var e=oa(a.file("docProps/thumbnail.jpeg").asArrayBuffer());r.push({type:"pptx-thumb",data:e})}var s=function(a){for(var r=L(a,"[Content_Types].xml").Types.Override,t=[],e=[],s=0;s"+n[h].data+"");break;case"ExecutionTime":$(i),aa(r(".block")),aa(r("table td")),o=!0,f.slideMode&&!p?(p=!0,r("#"+s+" .slide").hide(),setTimeout(function(){var a=f.slideModeConfig;r(".slides-loadnig-msg").remove(),r("#"+s).divs2slides({first:a.first,nav:a.nav,showPlayPauseBtn:f.showPlayPauseBtn,navTxtColor:a.navTxtColor,keyBoardShortCut:a.keyBoardShortCut,showSlideNum:a.showSlideNum,showTotalSlideNum:a.showTotalSlideNum,autoSlide:a.autoSlide,randomAutoSlide:a.randomAutoSlide,loop:a.loop,background:a.background,transition:a.transition,transitionTime:a.transitionTime});var t=f.slidesScale,e="";if(""!=t){var o=parseInt(t)/100;e="transform:scale("+o+"); transform-origin:top"}var i=""!=t?o:1;r("#all_slides_warpper").attr({style:e+";height: "+1*d*i+"px"})},1500)):f.slideMode||r(".slides-loadnig-msg").remove()}f.slideMode||null===document.getElementById("all_slides_warpper")&&r("#"+s+" .slide").wrapAll("
");var u=f.slidesScale,m="";if(""!=u){var g=parseInt(u)/100;m="transform:scale("+g+"); transform-origin:top"}d=r("#"+s+" .slide").height();var b=r("#"+s+" .slide").length,M=""!=u?g:1;r("#all_slides_warpper").attr({style:m+";height: "+b*d*M+"px"})}function L(a,r){var t=la(a.file(r).asText(),{simplify:1});return void 0!==t["?xml"]?t["?xml"]:t}function v(a,r,t,e){var s=L(a,r.replace("slides/slide","slides/_rels/slide")+".rels").Relationships.Relationship,o="",i={};if(s.constructor===Array)for(var d=0;d0&&f<1e3);else if(f>1e3){var u=f-1e3,L=l["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"],v=[];Object.keys(L).forEach(function(a){var r=L[a];if("attrs"!=a)if(r.constructor===Array)for(var t=0;t0&&f<1e3);else if(f>1e3){var u=f-1e3,L=l["a:theme"]["a:themeElements"]["a:fmtScheme"]["a:bgFillStyleLst"],v=[];Object.keys(L).forEach(function(a){var r=L[a];if("attrs"!=a)if(r.constructor===Array)for(var t=0;t";for(var x in I)if(I[x].constructor===Array)for(d=0;d"}function m(a){var r=a[Object.keys(a)[0]]["p:cSld"]["p:spTree"],t={},e={},s={};for(var o in r)if("p:nvGrpSpPr"!=o&&"p:grpSpPr"!=o){var i=r[o];if(i.constructor===Array)for(var l=0;l",void 0===y&&void 0===z||!I||!w?t+="":(void 0!==y||void 0!==z)&&I&&w&&(void 0!==y&&(t+=""),void 0!==z&&(t+=''));!w&&e&&(t+="This media file Not supported by HTML5");void 0===y&&void 0===z||I||!w||console.log("Founded supported media file but media process disabled (mediaProcess=false)");return t+=""}(r,t);break;case"p:graphicFrame":h=function(a,r){var t="";switch(V(a,["a:graphic","a:graphicData","attrs","uri"])){case"http://schemas.openxmlformats.org/drawingml/2006/table":t=function(a,r){var t=a.attrs.order,e=V(a,["a:graphic","a:graphicData","a:tbl"]),s=V(a,["p:xfrm"]),o=V(a,["a:graphic","a:graphicData","a:tbl","a:tblPr"]),i=V(a,["a:graphic","a:graphicData","a:tbl","a:tblGrid","a:gridCol"]),l="";if(void 0!==o){var n=o.attrs.rtl;l=1==n?"dir=rtl":"dir=ltr"}var d=o.attrs.firstRow,h=(o.attrs.firstCol,o.attrs.lastRow,o.attrs.lastCol,o.attrs.bandRow),p=(o.attrs.bandCol,"
" + text + "" + text + "" + text + "
" + text + "" + text + "
"),c=e["a:tr"];if(c.constructor===Array)for(var f=0;f0&&void 0!==h){var k="fff",y=1;if(f%2==0){if(void 0!==u["a:band2H"]){var I=V(u,["a:band2H","a:tcStyle","a:fill","a:solidFill"]);void 0!==I&&(k=E(I),y=U(I));var P=V(u,["a:band2H","a:tcStyle","a:tcBdr"]);if(void 0!==P){var x=j(P);m+=x}V(u,["a:band2H","a:tcTxStyle"])}}else if(void 0!==u["a:band1H"]){var I=V(u,["a:band1H","a:tcStyle","a:fill","a:solidFill"]);void 0!==I&&(k=E(I),y=U(I));var P=V(u,["a:band1H","a:tcStyle","a:tcBdr"]);if(void 0!==P){var x=j(P);m+=x}V(u,["a:band1H","a:tcTxStyle"])}m+=" background-color:#"+k+"; opacity:"+y+";"}p+="";var D=c[f]["a:tc"];if(D.constructor===Array)for(var G=0;G"+S+"":void 0!==z?p+="":void 0===A&&void 0===R&&(p+="")}else{var S=w(D["a:txBody"]),B=i[0].attrs.w,N="";if(void 0!==B){var O=96*parseInt(B)/914400;N+="width:"+O+"px;"}var F=D["a:tcPr"]["a:solidFill"],k="",y=1;void 0!==F&&(k=E(F),y=U(F)),""!=k&&(N+=" background-color:#"+k+";",N+=" opacity"+y+";"),p+=""}p+=""}else{var L=c.attrs.h,v=0;void 0!==L?(v=96*parseInt(L)/914400,p+=""):p+="";var D=c["a:tc"];if(D.constructor===Array)for(var G=0;G"+S+""}else{var S=w(D["a:txBody"]),B=i[0].attrs.w,N="";if(void 0!==B){var O=96*parseInt(B)/914400;N+="width:"+O+"px;"}var F=D[G]["a:tcPr"]["a:solidFill"],k="",y=1;void 0!==F&&(k=E(F),y=U(F)),""!=k&&(N+=" background-color:#"+k+";",N+=" opacity"+y+";"),p+=""}p+=""}return p}(a,r);break;case"http://schemas.openxmlformats.org/drawingml/2006/chart":t=function(a,r){var t=a.attrs.order,e=V(a,["p:xfrm"]),s="
",o=a["a:graphic"]["a:graphicData"]["c:chart"].attrs["r:id"],l=r.slideResObj[o].target,n=V(L(r.zip,l),["c:chartSpace","c:chart","c:plotArea"]),h=null;for(var p in n)switch(p){case"c:lineChart":h={type:"createChart",data:{chartID:"chart"+d,chartType:"lineChart",chartData:X(n[p]["c:ser"])}};break;case"c:barChart":h={type:"createChart",data:{chartID:"chart"+d,chartType:"barChart",chartData:X(n[p]["c:ser"])}};break;case"c:pieChart":h={type:"createChart",data:{chartID:"chart"+d,chartType:"pieChart",chartData:X(n[p]["c:ser"])}};break;case"c:pie3DChart":h={type:"createChart",data:{chartID:"chart"+d,chartType:"pie3DChart",chartData:X(n[p]["c:ser"])}};break;case"c:areaChart":h={type:"createChart",data:{chartID:"chart"+d,chartType:"areaChart",chartData:X(n[p]["c:ser"])}};break;case"c:scatterChart":h={type:"createChart",data:{chartID:"chart"+d,chartType:"scatterChart",chartData:X(n[p]["c:ser"])}}}null!==h&&i.push(h);return d++,s}(a,r);break;case"http://schemas.openxmlformats.org/drawingml/2006/diagram":t=function(a,r){a.attrs.order;var t=r.zip,e=V(a,["p:xfrm"]),s=V(a,["a:graphic","a:graphicData","dgm:relIds","attrs"]),o=s["r:cs"],i=s["r:dm"],l=s["r:lo"],n=s["r:qs"],d=r.slideResObj[o].target,h=r.slideResObj[i].target,p=r.slideResObj[l].target;dgmQuickStyleFileName=r.slideResObj[n].target;L(t,d);var c=L(t,h),f=(L(t,p),L(t,dgmQuickStyleFileName),""),u=V(c,["dgm:dataModel","dgm:extLst","a:ext","dsp:dataModelExt","attrs"]);if(void 0!==u){var v=u.relId;f=r.slideResObj[v].target}var m="";""!=f&&(m=L(t,f));var g=V(m,["dsp:drawing","dsp:spTree","dsp:sp"]),M="";if(void 0!==g)for(var k=g.length,y=0;y"+M+""}(a,r)}return t}(r,t);break;case"p:grpSp":h=function(a,r){var t=96/914400,e=a["p:grpSpPr"]["a:xfrm"],s=parseInt(e["a:off"].attrs.x)*t,o=parseInt(e["a:off"].attrs.y)*t,i=parseInt(e["a:chOff"].attrs.x)*t,l=parseInt(e["a:chOff"].attrs.y)*t,n=parseInt(e["a:ext"].attrs.cx)*t,d=parseInt(e["a:ext"].attrs.cy)*t,h=parseInt(e["a:chExt"].attrs.cx)*t,p=parseInt(e["a:chExt"].attrs.cy)*t,c="
";for(var f in a)if(a[f].constructor===Array)for(var u=0;u",f+="";var z=B(a,!0,n),A=!1,R=!1,O=N(V(a,["p:spPr"]));if("GRADIENT_FILL"==O){A=!0;var F=z.color;f+=function(a,r,t,e,s){var o=function(a){var r=["0%","100%"];{if(0==a)return!0;for(var t=a;t--;){var e=100-100/(a+1)*(t+1),s=e+"%";r.splice(-1,0,s)}}return r}(e.length-2),i="",l=function(a,r,t){var e=parseFloat(t),s=parseFloat(r),o=parseFloat(a),i=2,l=2,n=e/2,d=s/2,h=2,p=2,c=2,f=2,u=(o%360+360)%360,L=(360-u)*Math.PI/180,v=Math.tan(L),m=d-v*n;0==u?(h=e,p=d,c=0,f=d):u<90?(l=e,i=0):90==u?(h=n,p=0,c=n,f=s):u<180?(l=0,i=0):180==u?(h=0,p=d,c=e,f=d):u<270?(l=0,i=s):270==u?(h=n,p=s,c=n,f=0):(l=e,i=s);var h=2==h?v*(i+l/v-m)/(Math.pow(v,2)+1):h,p=2==p?v*h+m:p,c=2==c?e-h:c,f=2==f?s-p:f,g=Math.round(c/e*100*100)/100,b=Math.round(f/s*100*100)/100,M=Math.round(h/e*100*100)/100,k=Math.round(p/s*100*100)/100;return[g,b,M,k]}(t,r,a),n=l[0],d=l[1],h=l[2],p=l[3],c=o.length,f=c<20?100:1e3;i+='\n";for(var u=0;u',b+='',b+="")}else"SOLID_FILL"==O||"PATTERN_FILL"==O||"arc"!=L&&"bracketPair"!=L&&"bracePair"!=L&&"leftBracket"!=L&&"leftBrace"!=L&&"rightBrace"!=L&&"rightBracket"!=L||(z="none");var E=T(a,!0,"shape"),q=V(a,["p:spPr","a:ln","a:headEnd","attrs"]),H=V(a,["p:spPr","a:ln","a:tailEnd","attrs"]);if(void 0!==q&&("triangle"===q.type||"arrow"===q.type)||void 0!==H&&("triangle"===H.type||"arrow"===H.type))f+="";f+=""}if(void 0!==L&&void 0===v){switch(L){case"rect":case"flowChartProcess":case"flowChartPredefinedProcess":case"flowChartInternalStorage":case"actionButtonBlank":f+="","flowChartPredefinedProcess"==L?f+="":"flowChartInternalStorage"==L&&(f+=" ",f+=" ");break;case"flowChartCollate":f+="";break;case"flowChartDocument":f+="";break;case"flowChartMultidocument":f+="";break;case"actionButtonBackPrevious":var U=j/2;f+="";break;case"actionButtonBeginning":U=j/2;f+="";break;case"actionButtonDocument":var Q=S/2;U=j/2;ji=3*(Ue=Math.min(S,j))/8,f+="";break;case"actionButtonEnd":U=j/2;f+="";break;case"actionButtonForwardNext":U=j/2;f+="";break;case"actionButtonHelp":Q=S/2;K=(Pe=(U=j/2)-(ji=3*(Ue=Math.min(S,j))/8))+(Be=17*(De=3*Ue/4)/28),aa=Pe+21*De/28,pa=De/14;var X=(ia=(_e=Q-ji)+(Ae=3*De/7))+(Ge=De/7),Y=(ra=Pe+(Oe=11*De/14))+(ca=3*De/28),W=((la=_e+(Re=4*De/7))+ia+(je=2*De/7))/2;f+="";break;case"actionButtonHome":f+="";break;case"actionButtonInformation":Q=S/2;$=(Pe=(U=j/2)-(ji=3*(Ue=Math.min(S,j))/8))+(Te=5*(De=3*Ue/4)/16),K=Pe+(ze=3*De/8),aa=Pe+13*De/16,ra=Pe+(Oe=7*De/8),ta=(_e=Q-ji)+Te,sa=_e+(Ae=13*De/32),oa=_e+(Re=19*De/32),la=_e+(Ne=11*De/16);var Z=(Fe=Pe+(Ge=De/32))+(na=3*De/32);f+="";break;case"actionButtonMovie":var $,K,aa,ra,ta,ea,sa,oa,ia,la,na,da,ha,pa,ca,fa,ua,La,va,ma;Q=S/2;Ce=(U=j/2)+(ji=3*(Ue=Math.min(S,j))/8),(Pe=U-ji)+(ra=(_e=Q-ji)+(Ge=1455*(De=3*Ue/4)/21600)),f+="";break;case"actionButtonReturn":var ga;U=j/2;Ne=(_e=(Q=S/2)-(ji=3*(Ue=Math.min(S,j))/8))+(Ge=7*(De=3*Ue/4)/8),Fe=_e+(Te=3*De/8),Ee=_e+(ze=De/4);Z=(Ae=(Pe=U-ji)+(Se=3*De/4))-(ga=De/8);var ba=_e+Te,Ma=(Ce=U+ji)-Te;f+="";break;case"actionButtonSound":U=j/2;f+="";break;case"irregularSeal1":case"irregularSeal2":if("irregularSeal1"==L)var ka="M"+10800*S/21600+","+5800*j/21600+" L"+14522*S/21600+",0 L"+14155*S/21600+","+5325*j/21600+" L"+18380*S/21600+","+4457*j/21600+" L"+16702*S/21600+","+7315*j/21600+" L"+21097*S/21600+","+8137*j/21600+" L"+17607*S/21600+","+10475*j/21600+" L"+S+","+13290*j/21600+" L"+16837*S/21600+","+12942*j/21600+" L"+18145*S/21600+","+18095*j/21600+" L"+14020*S/21600+","+14457*j/21600+" L"+13247*S/21600+","+19737*j/21600+" L"+10532*S/21600+","+14935*j/21600+" L"+8485*S/21600+","+j+" L"+7715*S/21600+","+15627*j/21600+" L"+4762*S/21600+","+17617*j/21600+" L"+5667*S/21600+","+13937*j/21600+" L"+135*S/21600+","+14587*j/21600+" L"+3722*S/21600+","+11775*j/21600+" L0,"+8615*j/21600+" L"+4627*S/21600+","+7617*j/21600+" L"+370*S/21600+","+2295*j/21600+" L"+7312*S/21600+","+6320*j/21600+" L"+8352*S/21600+","+2295*j/21600+" z";else if("irregularSeal2"==L)ka="M"+11462*S/21600+","+4342*j/21600+" L"+14790*S/21600+",0 L"+14525*S/21600+","+5777*j/21600+" L"+18007*S/21600+","+3172*j/21600+" L"+16380*S/21600+","+6532*j/21600+" L"+S+","+6645*j/21600+" L"+16985*S/21600+","+9402*j/21600+" L"+18270*S/21600+","+11290*j/21600+" L"+16380*S/21600+","+12310*j/21600+" L"+18877*S/21600+","+15632*j/21600+" L"+14640*S/21600+","+14350*j/21600+" L"+14942*S/21600+","+17370*j/21600+" L"+12180*S/21600+","+15935*j/21600+" L"+11612*S/21600+","+18842*j/21600+" L"+9872*S/21600+","+17370*j/21600+" L"+8700*S/21600+","+19712*j/21600+" L"+7527*S/21600+","+18125*j/21600+" L"+4917*S/21600+","+j+" L"+4805*S/21600+","+18240*j/21600+" L"+1285*S/21600+","+17825*j/21600+" L"+3330*S/21600+","+15370*j/21600+" L0,"+12877*j/21600+" L"+3935*S/21600+","+11592*j/21600+" L"+1172*S/21600+","+8270*j/21600+" L"+5372*S/21600+","+7817*j/21600+" L"+4502*S/21600+","+3625*j/21600+" L"+8550*S/21600+","+6382*j/21600+" L"+9722*S/21600+","+1887*j/21600+" z";f+="";break;case"flowChartTerminator":var ya=90;f+="";break;case"flowChartPunchedTape":Ni=18*j/20,f+="";break;case"flowChartOnlineStorage":ya=90;f+="";break;case"flowChartDisplay":f+="";break;case"flowChartDelay":ya=90;f+="";break;case"flowChartMagneticTape":var wa=S/2,Ia=180,Pa=270;ya=90;Ga=(Sa=j/2)+(Ro=Sa*Math.sin(Math.PI/4));var Ca=180*Math.atan(j/S)/Math.PI;f+="";break;case"ellipse":case"flowChartConnector":case"flowChartSummingJunction":case"flowChartOr":if(f+="","flowChartOr"==L)f+=" ",f+=" ";else if("flowChartSummingJunction"==L){Q=S/2,U=j/2,wa=S/2;var _a,xa,Da,Ga,Sa=j/2,ja=Math.PI/4;o=wa*Math.cos(ja),Ro=Sa*Math.sin(ja),f+=" ",f+=" "}break;case"roundRect":case"round1Rect":case"round2DiagRect":case"round2SameRect":case"snip1Rect":case"snip2DiagRect":case"snip2SameRect":case"flowChartAlternateProcess":case"flowChartPunchedCard":var Ta,za;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]))&&me.constructor===Array)for(var Aa=0;Aa";break;case"snipRoundRect":var Na=.33334,Oa=.33334;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"bentConnector2":ka="";f+="";break;case"triangle":case"flowChartExtract":case"flowChartMerge":var Fa=.5;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Fa=96*parseInt(Ua.substr(4))/9144e3);Ba="";"flowChartMerge"==L&&(Ba="transform='rotate(180 "+S/2+","+j/2+")'"),f+=" ";break;case"diamond":case"flowChartDecision":case"flowChartSort":f+=" ","flowChartSort"==L&&(f+=" ");break;case"trapezoid":case"flowChartManualOperation":case"flowChartManualInput":var Ea=.2,qa=.7407;if(void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"])))Ea=.5*(96*parseInt(Ua.substr(4))/9144e3)/qa;var Ha=0;Ba="";"flowChartManualOperation"==L&&(Ba="transform='rotate(180 "+S/2+","+j/2+")'"),"flowChartManualInput"==L&&(Ea=0,Ha=j/5),f+=" ";break;case"parallelogram":case"flowChartInputOutput":var Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]);Ea=.25;if(qa=S>j?S/j:j/S,void 0!==Ua)Ea=parseInt(Ua.substr(4))/1e5/qa;f+=" ";break;case"pentagon":f+=" ";break;case"hexagon":case"flowChartPreparation":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]);var Qa=24e5/914400,Xa=48e5/914400,Va=96e5/914400,Ya=60*Math.PI/180;void 0!==Ua&&(Qa=96*parseInt(Ua.substr(4))/914400);U=j/2,Sa=j/2;Rr=Xa*S/(Ue=Math.min(S,j)),zi=S-(Ti=Ue*(Ri=Qa<0?0:Qa>Rr?Rr:Qa)/Va),f+="";break;case"heptagon":f+=" ";break;case"octagon":var Wa=.25;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Wa=parseInt(Ua.substr(4))/1e5),f+=" ";break;case"decagon":f+=" ";break;case"dodecagon":f+=" ";break;case"star4":case"star5":case"star6":case"star7":case"star8":case"star10":case"star12":case"star16":case"star24":case"star32":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]);var Ja=L.substr(4);switch(Ja){case"4":Qa=30;break;case"5":Qa=40;break;case"6":Qa=60;break;case"7":Qa=70;break;case"8":Qa=77;break;case"10":Qa=86;break;case"12":case"16":case"24":case"32":Qa=75}void 0!==Ua&&(void 0===($a=V(Ua,["attrs","fmla"]))&&($a=Ua[0].attrs.fmla),void 0!==$a&&(Qa=2*parseInt($a.substr(4))/1e3)),f+=" ";break;case"pie":case"pieWedge":case"arc":var Za,$a,Ka,ar;Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]);"pie"==L?(Wa=0,gr=270,Za=j,ar=!0):"pieWedge"==L?(Wa=180,gr=270,Za=2*j,ar=!0):"arc"==L&&(Wa=270,gr=0,Za=j,ar=!1),void 0!==Ua&&(Ka=$a=V(Ua,["attrs","fmla"]),void 0===$a&&($a=Ua[0].attrs.fmla,Ka=Ua[1].attrs.fmla),void 0!==$a&&(Wa=parseInt($a.substr(4))/6e4),void 0!==Ka&&(gr=parseInt(Ka.substr(4))/6e4));var rr=function(a,r,t,e,s){var o=parseInt(e),i=parseInt(t),l=parseInt(a)/2,n=o-i;n<0&&(n=360+n);n=Math.min(Math.max(n,0),360);var d,h,p=Math.cos(2*Math.PI/(360/n)),c=Math.sin(2*Math.PI/(360/n));if(s)d="M"+l+","+l+" L"+l+",0 A"+l+","+l+" 0 "+(n<=180?0:1)+",1 "+(l+c*l)+","+(l-p*l)+" z",h="rotate("+(i-270)+", "+l+", "+l+")";else{var f=l,u=r/2;d="M"+f+",0 A"+u+","+f+" 0 "+(n<=180?0:1)+",1 "+(u+c*u)+","+(f-p*f),h="rotate("+(i+90)+", "+l+", "+l+")"}return[d,h]}(Za,S,Wa,gr,ar);f+="";break;case"chord":Na=45,Oa=270;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"frame":Wa=12e5/914400,Xa=48e5/914400,Va=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Wa=96*parseInt(Ua.substr(4))/914400),dl=Wa<0?0:Wa>Xa?Xa:Wa,f+="";break;case"donut":Qa=24e5/914400,Xa=48e5/914400,Va=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=96*parseInt(Ua.substr(4))/914400),Ri=Qa<0?0:Qa>Xa?Xa:Qa,Pr=S/2-(Ir=Math.min(S,j)*Ri/Va),Cr=j/2-Ir,f+="";break;case"noSmoking":var tr,er,sr,or,ir,lr,nr,dr,hr;Qa=18e5/914400,Xa=48e5/914400,Va=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=96*parseInt(Ua.substr(4))/914400),Ri=Qa<0?0:Qa>Xa?Xa:Qa,Pr=S/2-(Ir=Math.min(S,j)*Ri/Va),Cr=j/2-Ir,tr=Math.atan(j/S),er=Cr*Math.cos(tr),sr=Pr*Math.sin(tr),or=Pr*Cr/Math.sqrt(er*er+sr*sr),ir=Ir/2,qo=2*(lr=Math.atan(ir/or)),dh=-Math.PI+qo,Xo=(rs=tr-lr)-Math.PI,nr=Cr*Math.cos(rs),dr=Pr*Math.sin(rs),Ti=S/2+(Ui=(hr=Pr*Cr/Math.sqrt(nr*nr+dr*dr))*Math.cos(rs)),Bi=j/2+(Si=hr*Math.sin(rs)),zi=S/2-Ui,Ni=j/2-Si;var pr=180*rs/Math.PI,cr=180*Xo/Math.PI,fr=180*dh/Math.PI;f+="";break;case"halfFrame":Na=3.5,Oa=3.5;var ur=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:Oa)/ur)/S))/Tr;f+="";break;case"blockArc":Wa=180;var mr,gr=0,br=24e5/914400;Xa=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa360?360:Wa,Td=gr<0?0:gr>360?360:gr,mi=br<0?0:br>Xa?Xa:br;var Mr,kr,yr,wr,Ir,Pr,Cr,_r,xr,Dr=nh+(dh=(mr=Td-nh)>0?mr:mr+360),Gr=Td+(zd=-dh);yr=nh*Math.PI/180,wr=Td*Math.PI/180,wa=S/2,Sa=j/2,Q=S/2,U=j/2,nh>90&&nh<270?(Mr=wa*Math.sin(Math.PI/2-yr),kr=Sa*Math.cos(Math.PI/2-yr),Ti=Q-(Ui=wa*Math.cos(Math.atan(kr/Mr))),Bi=U-(Si=Sa*Math.sin(Math.atan(kr/Mr)))):(Mr=wa*Math.sin(yr),kr=Sa*Math.cos(yr),Ti=Q+(Ui=wa*Math.cos(Math.atan(Mr/kr))),Bi=U+(Si=Sa*Math.sin(Math.atan(Mr/kr)))),Pr=wa-(Ir=Math.min(S,j)*mi/Va),Cr=Sa-Ir,Dr<=450&&Dr>270||Dr>=630&&Dr<720?(_r=Pr*Math.sin(wr),xr=Cr*Math.cos(wr),zi=Q+(ji=Pr*Math.cos(Math.atan(_r/xr))),Ni=U+(Qi=Cr*Math.sin(Math.atan(_r/xr)))):(_r=Pr*Math.sin(Math.PI/2-wr),xr=Cr*Math.cos(Math.PI/2-wr),zi=Q-(ji=Pr*Math.cos(Math.atan(xr/_r))),Ni=U-(Qi=Cr*Math.sin(Math.atan(xr/_r)))),f+="";break;case"bracePair":Qa=799968/914400,Xa=24e5/914400,Va=48e5/914400;var Sr=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=96*parseInt(Ua.substr(4))/914400);U=j/2;var jr=360;Ia=180,ya=90,Pa=270;Ri=Qa<0?0:Qa>Xa?Xa:Qa,Ai=S-(zi=(Tr=Math.min(S,j))*Ri/Va),ut=S-(Ti=Tr*Ri/Sr),Ni=U-Ti,Oi=U+Ti,f+="";break;case"leftBrace":Wa=799968/914400,gr=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaVa?Va:gr;var Tr=Math.min(S,j);vr=(yn=(kn=Va-ql)vr?vr:Wa)/Va),Lt=Oi+Bi,f+="";break;case"rightBrace":Wa=799968/914400,gr=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaVa?Va:gr;Tr=Math.min(S,j),vr=(yn=(kn=Va-ql)vr?vr:Wa)/Va),Lt=j-Bi,f+="";break;case"bracketPair":Qa=1600032/914400,Xa=48e5/914400,Va=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=96*parseInt(Ua.substr(4))/914400);var zr=S,Ar=j;Ia=180,ya=90,Pa=270;Ri=Qa<0?0:Qa>Xa?Xa:Qa,zi=zr-(Ti=Math.min(S,j)*Ri/Va),Ni=Ar-Ti,f+="";break;case"leftBracket":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qa=799968/914400,Va=96e5/914400;var Rr=(Xa=48e5/914400)*j/Math.min(S,j);void 0!==Ua&&(Qa=96*parseInt(Ua.substr(4))/914400);zr=S,Ar=j,Ia=180,ya=90,Pa=270;Ri=Qa<0?0:Qa>Rr?Rr:Qa,(Bi=Math.min(S,j)*Ri/Va)>S&&(Bi=S),f+="";break;case"rightBracket":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qa=799968/914400,Va=96e5/914400,Rr=(Xa=48e5/914400)*j/Math.min(S,j);void 0!==Ua&&(Qa=96*parseInt(Ua.substr(4))/914400);jr=360,Ia=180,ya=90,Pa=270;Ri=Qa<0?0:Qa>Rr?Rr:Qa,f+="";break;case"moon":Qa=.5;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=parseInt(Ua.substr(4))/1e5);gr=(1-Qa)*S;f+="";break;case"corner":Na=48e5/914400,Oa=48e5/914400,ur=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aavr?vr:Na,f+="";break;case"diagStripe":Na=48e5/914400,ur=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Na=96*parseInt(Ua.substr(4))/914400),f+="";break;case"gear6":case"gear9":g=0;var Br=L.substr(4);f+="";break;case"bentConnector3":Fa=.5;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Fa=parseInt(Ua.substr(4))/1e5,f+=m?" ";break;case"teardrop":var Nr,Or,Fr,Er,qr=Wa=96e5/914400,Hr=192e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Wa=96*parseInt(Ua.substr(4))/914400),dl=Wa<0?0:Wa>Hr?Hr:Wa,Or=(Nr=Math.sqrt(2))*(S/2)*dl/qr,Fr=(pl=Nr*(j/2))*dl/qr,Er=45*Math.PI/180,Ui=Or*Math.cos(Er),Si=Fr*Math.cos(Er),zi=(S/2+(Ti=S/2+Ui))/2,Ni=(j/2+(Bi=j/2-Si))/2,f+="";break;case"plaque":Wa=1600032/914400,qr=48e5/914400,Hr=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Wa=96*parseInt(Ua.substr(4))/914400),zi=S-(Ti=(dl=Wa<0?0:Wa>qr?qr:Wa)*Math.min(S,j)/Hr),Ni=j-Ti,f+="";break;case"sun":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Wa=25e3*(Fi=96/914400),Xa=12500*Fi,Va=46875*Fi;void 0!==Ua&&(Wa=parseInt(Ua.substr(4))*Fi);var Ur,Qr=5e4*Fi,Xr=1e5*Fi,Vr=Qr-(dl=WaVa?Va:Wa),Yr=(Ur=Vr*(30274*Fi)/(32768*Fi))+Qr,Wr=(Me=Vr*(12540*Fi)/(32768*Fi))+Qr,Jr=S*(18436*Fi)/(21600*Fi),Zr=j*(3163*Fi)/(21600*Fi),$r=S*(3163*Fi)/(21600*Fi),Kr=j*(18436*Fi)/(21600*Fi),at=S*(Ie=Qr+(we=Vr*(23170*Fi)/(32768*Fi)))/Xr,rt=S*(Pe=Qr-we)/Xr,tt=S*(je=Xr-(xe=(Ce=3*(ke=Qr-Ur)/4)+3662*Fi))/Xr,et=S*(Te=Xr-(De=(_e=3*(ye=Qr-Me)/4)+36620*Fi))/Xr,st=S*(ze=Xr-(Ge=_e+12500*Fi))/Xr,ot=j*Ie/Xr,it=j*Pe/Xr,lt=j*xe/Xr,nt=j*De/Xr,dt=j*Ge/Xr,ht=j*(Se=Xr-Ce)/Xr,pt=j*je/Xr,ct=j*Te/Xr,ft=j*ze/Xr;f+="";break;case"heart":f+="";break;case"lightningBolt":var ut=8757*S/21600,Lt=(rt=13917*S/21600,7437*j/21600),vt=14277*j/21600;f+="";break;case"cube":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qa=25e3*(Fi=96/914400);void 0!==Ua&&(Qa=parseInt(Ua.substr(4))*Fi);Va=1e5*Fi;f+="";break;case"bevel":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qa=12500*(Fi=96/914400);void 0!==Ua&&(Qa=parseInt(Ua.substr(4))*Fi);Xa=5e4*Fi,Va=1e5*Fi;f+="";break;case"foldedCorner":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qa=16667*(Fi=96/914400);void 0!==Ua&&(Qa=parseInt(Ua.substr(4))*Fi);Xa=5e4*Fi,Va=1e5*Fi;f+="";break;case"cloud":case"cloudCallout":var mt,gt;Ti=4693*S/43200,zi=6928*S/43200,Ai=16478*S/43200,ut=28827*S/43200,ti=34129*S/43200,ri=41798*S/43200,ai=38324*S/43200,at=29078*S/43200,rt=22141*S/43200,$s=14e3*S/43200,4127*S/43200,gt=14370*j/43200,Bi=26177*j/43200,Ni=34899*j/43200,Oi=39090*j/43200,Lt=34751*j/43200,bi=22954*j/43200,jo=15354*j/43200,So=5426*j/43200,ot=3952*j/43200,it=4720*j/43200,vt=5192*j/43200,15789*j/43200;var bt,Mt,kt,yt,wt,It,Pt,Ct,_t,xt,Dt,Gt,St,jt,Tt,zt,At,Rt,Bt,Nt,Ot=6753*S/43200,Ft=9190*j/43200,Et=5333*S/43200,qt=7267*j/43200,Ht=4365*S/43200,Ut=5945*j/43200,Qt=4857*S/43200,Xt=6595*j/43200,Vt=7273*j/43200,Yt=6775*S/43200,Wt=9220*j/43200,Jt=5785*S/43200,Zt=7867*j/43200,$t=6752*S/43200,Kt=9215*j/43200,ae=7720*S/43200,re=10543*j/43200,te=4360*S/43200,ee=5918*j/43200,se=4345*S/43200,oe=-11429249/6e4,ie=-8646143/6e4,le=-8748475/6e4,ne=-7859164/6e4,de=-4722533/6e4,he=-46.26725,pe=37501/6e4,ce=22.4516,fe=3974558/6e4,ue=-16496525/6e4,Le=-246.8285;Dt=(bt=y((mt=3900*S/43200)-Ot*Math.cos(oe*Math.PI/180),gt-Ft*Math.sin(oe*Math.PI/180),Ot,Ft,oe,oe+7426832/6e4,!1).replace("M","L")).substr(bt.lastIndexOf("L")+1).split(" "),Gt=(Mt=y(Qe=parseInt(Dt[0])-Et*Math.cos(ie*Math.PI/180),Xe=parseInt(Dt[1])-qt*Math.sin(ie*Math.PI/180),Et,qt,ie,-54.15715,!1).replace("M","L")).substr(Mt.lastIndexOf("L")+1).split(" "),St=(kt=y(X=parseInt(Gt[0])-Ht*Math.cos(le*Math.PI/180),Z=parseInt(Gt[1])-Ut*Math.sin(le*Math.PI/180),Ht,Ut,le,le+5983381/6e4,!1).replace("M","L")).substr(kt.lastIndexOf("L")+1).split(" "),jt=(yt=y(ba=parseInt(St[0])-Qt*Math.cos(ne*Math.PI/180),Y=parseInt(St[1])-Xt*Math.sin(ne*Math.PI/180),Qt,Xt,ne,ne+7034504/6e4,!1).replace("M","L")).substr(yt.lastIndexOf("L")+1).split(" "),Tt=(wt=y(W=parseInt(jt[0])-Et*Math.cos(de*Math.PI/180),Ma=parseInt(jt[1])-Vt*Math.sin(de*Math.PI/180),Et,Vt,de,de+6541615/6e4,!1).replace("M","L")).substr(wt.lastIndexOf("L")+1).split(" "),zt=(It=y(parseInt(Tt[0])-Yt*Math.cos(he*Math.PI/180),parseInt(Tt[1])-Wt*Math.sin(he*Math.PI/180),Yt,Wt,he,he+130.269,!1).replace("M","L")).substr(It.lastIndexOf("L")+1).split(" "),At=(Pt=y(parseInt(zt[0])-Jt*Math.cos(pe*Math.PI/180),parseInt(zt[1])-Zt*Math.sin(pe*Math.PI/180),Jt,Zt,pe,114.65835,!1).replace("M","L")).substr(Pt.lastIndexOf("L")+1).split(" "),Rt=(Ct=y(parseInt(At[0])-$t*Math.cos(ce*Math.PI/180),parseInt(At[1])-Kt*Math.sin(ce*Math.PI/180),$t,Kt,ce,137.62415,!1).replace("M","L")).substr(Ct.lastIndexOf("L")+1).split(" "),Bt=(_t=y(parseInt(Rt[0])-ae*Math.cos(fe*Math.PI/180),parseInt(Rt[1])-re*Math.sin(fe*Math.PI/180),ae,re,fe,fe+4542661/6e4,!1).replace("M","L")).substr(_t.lastIndexOf("L")+1).split(" "),Nt=(xt=y(parseInt(Bt[0])-te*Math.cos(ue*Math.PI/180),parseInt(Bt[1])-ee*Math.sin(ue*Math.PI/180),te,ee,ue,ue+8804134/6e4,!1).replace("M","L")).substr(xt.lastIndexOf("L")+1).split(" ");var ve="M"+mt+","+gt+bt+Mt+kt+yt+wt+It+Pt+Ct+_t+xt+y(parseInt(Nt[0])-se*Math.cos(Le*Math.PI/180),parseInt(Nt[1])-Ut*Math.sin(Le*Math.PI/180),se,Ut,Le,-94.30965,!1).replace("M","L")+" z";if("cloudCallout"==L){var me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]);Wa=-20833*(Fi=96/914400),gr=62500*Fi;if(void 0!==me)for(Aa=0;Aa=0?(Wr=wa+Me,ke=Sa+Yr):(Wr=wa-Me,ke=Sa-Yr),ye=Wr-ss,we=ke-os,Te=(Se=(De=(_e=(Ce=(Ie=Math.sqrt(ye*ye+we*we))-(Pe=6600*Ue/21600))/3)+(xe=1800*Ue/21600))*we/Ie)+os,Oe=(Ne=(Re=(ze=4800*Ue/21600)+(Ae=2*_e))*we/Ie)+os,qe=(je=(Ge=De*ye/Ie)+ss)+(Fe=1200*Ue/21600),He=(Be=Re*ye/Ie)+ss+xe,ve+=Vd=y(ss+(Ee=600*Ue/21600)-Ee,os,Ee,Ee,0,360,!1)+" z M"+qe+","+Te+y(qe-Fe,Te,Fe,Fe,0,360,!1).replace("M","L")+" z M"+He+","+Oe+y(He-xe,Oe,xe,xe,0,360,!1).replace("M","L")+" z"}f+="";break;case"smileyFace":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qa=4653*(Fi=96/914400);void 0!==Ua&&(Qa=parseInt(Ua.substr(4))*Fi);Xa=5e4*Fi,Va=1e5*Fi,Sr=4653*Fi,Ue=Math.min(S,j);wa=S/2,Sa=j/2,Ti=4969*S/21699,Ai=13135*S/21600,ut=16640*S/21600,Bi=7570*j/21600,Ni=(Oi=16515*j/21600)-(Qi=j*(Ri=Qa<-Sr?-Sr:Qa>Sr?Sr:Qa)/Va),bi=(Lt=Oi+Qi)+(Xi=j*Ri/Xa),ih=1125*j/21600;var Qe=(zi=6215*S/21600)-(lh=1125*S/21600)*Math.cos(Math.PI),Xe=Bi-ih*Math.sin(Math.PI);X=Ai-lh*Math.cos(Math.PI);f+="";break;case"verticalScroll":case"horizontalScroll":Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]),Qa=12500*(Fi=96/914400);void 0!==Ua&&(Qa=parseInt(Ua.substr(4))*Fi);Xa=25e3*Fi,Va=1e5*Fi;var Ve,Ye,We,Je=0,Ze=0;Ar=j,zr=S;if(Ye=(Ve=(Ue=Math.min(S,j))*(Ri=Qa<0?0:Qa>Xa?Xa:Qa)/Va)/2,We=Ve/4,"verticalScroll"==L)ut=Ve+Ve,ai=zr-Ye,ti=(ri=zr-Ve)-Ye,Lt=Ar-Ye,Vd="M"+Ve+","+(Oi=Ar-Ve)+" L"+Ve+","+Ye+y(Ai=Ve+Ye,Ye,Ye,Ye,180,270,!1).replace("M","L")+" L"+ai+","+Je+y(ai,Ye,Ye,Ye,270,450,!1).replace("M","L")+" L"+ri+","+Ve+" L"+ri+","+Lt+y(ti,Lt,Ye,Ye,0,90,!1).replace("M","L")+" L"+Ye+","+Ar+y(Ye,Lt,Ye,Ye,90,270,!1).replace("M","L")+" z M"+Ai+","+Je+y(Ai,Ye,Ye,Ye,270,450,!1).replace("M","L")+y(Ai,Ai/2,We,We,90,270,!1).replace("M","L")+" L"+ut+","+Ye+" M"+ri+","+Ve+" L"+Ai+","+Ve+" M"+Ve+","+Lt+y(Ye,Lt,Ye,Ye,0,270,!1).replace("M","L")+y(Ye,(Lt+Oi)/2,We,We,270,450,!1).replace("M","L")+" z M"+Ve+","+Lt+" L"+Ve+","+Oi;else if("horizontalScroll"==L){Lt=Ve+Ve,So=Ar-Ye,bi=(jo=Ar-Ve)-Ye,Ai=zr-Ve,ut=zr-Ye,Vd="M"+Ze+","+(Oi=Ve+Ye)+y(Ye,Oi,Ye,Ye,180,270,!1).replace("M","L")+" L"+Ai+","+Ve+" L"+Ai+","+Ye+y(ut,Ye,Ye,Ye,180,360,!1).replace("M","L")+" L"+zr+","+bi+y(ut,bi,Ye,Ye,0,90,!1).replace("M","L")+" L"+Ve+","+jo+" L"+Ve+","+So+y(Ye,So,Ye,Ye,0,180,!1).replace("M","L")+" zM"+ut+","+Ve+y(ut,Ye,Ye,Ye,90,-180,!1).replace("M","L")+y((Ai+ut)/2,Ye,We,We,180,0,!1).replace("M","L")+" z M"+ut+","+Ve+" L"+Ai+","+Ve+" M"+Ye+","+Lt+" L"+Ye+","+Oi+y(Oi/2,Oi,We,We,180,360,!1).replace("M","L")+y(Ye,Oi,Ye,Ye,0,180,!1).replace("M","L")+" M"+Ve+","+Oi+" L"+Ve+","+jo}f+="";break;case"wedgeEllipseCallout":me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=-20833*(Fi=96/914400),gr=62500*Fi;if(void 0!==me)for(Aa=0;Aa=0?(Ti=Q+Ui,Bi=U+Si,zi=Q+ji,Ni=U+Qi):(Ti=Q-Ui,Bi=U-Si,zi=Q-ji,Ni=U-Qi),f+="";break;case"wedgeRectCallout":me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=-20833*(Fi=96/914400),gr=62500*Fi;if(void 0!==me)for(Aa=0;Aa0?7:2)/12,zi=S*(ts>0?10:5)/12,Bi=j*(es>0?7:2)/12,Ni=j*(es>0?10:5)/12,ns=ts>0?0:ss,ds=ls>0?0:ns,hs=es>0?Ti:ss,ps=ls>0?hs:Ti,cs=ts>0?ss:S,fs=ls>0?S:cs,us=es>0?ss:Ti,Ls=ls>0?us:Ti,vs=ts>0?Bi:os,ms=ls>0?Bi:vs,gs=es>0?0:os,bs=ls>0?gs:0,Ms=ts>0?os:Bi,ks=ls>0?Bi:Ms,ys=es>0?os:j,f+="";break;case"wedgeRoundRectCallout":me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=-20833*(Fi=96/914400),gr=62500*Fi,br=16667*Fi;if(void 0!==me)for(Aa=0;Aa0?7:2)/12,zi=S*(ts>0?10:5)/12,Bi=j*(es>0?7:2)/12,Ni=j*(es>0?10:5)/12,ns=ts>0?0:ss,ds=ls>0?0:ns,hs=es>0?Ti:ss,ps=ls>0?hs:Ti,cs=ts>0?ss:S,fs=ls>0?S:cs,us=es>0?ss:Ti,Ls=ls>0?us:Ti,vs=ts>0?Bi:os,ms=ls>0?Bi:vs,gs=es>0?0:os,bs=ls>0?gs:0,Ms=ts>0?os:Bi,ks=ls>0?Bi:Ms,ys=es>0?os:j,ws=ls>0?ys:j,xl=S-(_l=Ue*br/Xa),ed=j-_l,f+="";break;case"accentBorderCallout1":case"accentBorderCallout2":case"accentBorderCallout3":case"borderCallout1":case"borderCallout2":case"borderCallout3":case"accentCallout1":case"accentCallout2":case"accentCallout3":case"callout1":case"callout2":case"callout3":me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=18750*(Fi=96/914400),gr=-8333*Fi,br=18750*Fi;var Is,Ps,Cs,_s=-16667*Fi,xs=1e5*Fi,Ds=-16667*Fi,Gs=112963*Fi,Ss=-8333*Fi;if(void 0!==me)for(Aa=0;Aa";break;case"leftRightRibbon":me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=5e4*(Fi=96/914400),gr=5e4*Fi,br=16667*Fi;if(void 0!==me)for(Aa=0;AaXa?Xa:br),dl=Wa<0?0:Wa>vr?vr:Wa,Lr=Va*(Q-qs)/Ue,ut=S-(Ti=Ue*(ql=gr<0?0:gr>Lr?Lr:gr)/Va),zs=U+(Si=j*dl/Sr)-(Qi=j*mi/-Sr),Rs=j-(As=(Ts=U+Qi-Si)+Si),Ns=j-(Bs=2*As),zi=Q-qs,Ai=Q+qs,Ni=(Fs=j-(Os=Bs-Ts))-(ih=mi*Ue/Es),f+="";break;case"ribbon":case"ribbon2":Wa=1600032/914400,gr=48e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaVa?Va:Wa,$s=zr-Qs,Ai=(zi=Q-(ji=S*(ql=grSr?Sr:gr)/Hs))+qs,at=(rt=Q+ji)-qs,ut=(ti=zi+Qs)-qs,ai=(ri=rt-Qs)+qs,ih=j*dl/Us,"ribbon2"==L)Ni=Ar-(Qi=j*dl/Es),jo=Ar-ih,So=(Bi=Ar-(Si=j*dl/Hs))-ih,Vd="M"+Ze+","+Ar+" L"+Qs+","+(Oi=((Lt=Je+Qi)+Ar)/2)+" L"+Ze+","+Lt+" L"+zi+","+Lt+" L"+zi+","+ih+y(Ai,ih,qs,ih,180,270,!1).replace("M","L")+" L"+at+","+Je+y(at,ih,qs,ih,270,360,!1).replace("M","L")+" L"+rt+","+Lt+" L"+rt+","+Lt+" L"+zr+","+Lt+" L"+$s+","+Oi+" L"+zr+","+Ar+" L"+ai+","+Ar+y(ai,jo,qs,ih,90,270,!1).replace("M","L")+" L"+at+","+Bi+y(at,So,qs,ih,90,-90,!1).replace("M","L")+" L"+Ai+","+Ni+y(Ai,So,qs,ih,270,90,!1).replace("M","L")+" L"+ut+","+Bi+y(ut,jo,qs,ih,270,450,!1).replace("M","L")+" z M"+ti+","+Ni+" L"+ti+","+jo+"M"+ri+","+jo+" L"+ri+","+Ni+"M"+zi+","+So+" L"+zi+","+Lt+"M"+rt+","+Lt+" L"+rt+","+So;else if("ribbon"==L){Bi=j*dl/Hs,Oi=(Lt=Ar-(Ni=j*dl/Es))/2,bi=Ar-ih,jo=Ni-ih,Vd="M"+Ze+","+Je+" L"+ut+","+Je+y(ut,ih,qs,ih,270,450,!1).replace("M","L")+" L"+Ai+","+Bi+y(Ai,jo,qs,ih,270,90,!1).replace("M","L")+" L"+at+","+Ni+y(at,jo,qs,ih,90,-90,!1).replace("M","L")+" L"+ai+","+Bi+y(ai,ih,qs,ih,90,270,!1).replace("M","L")+" L"+zr+","+Je+" L"+$s+","+Oi+" L"+zr+","+Lt+" L"+rt+","+Lt+" L"+rt+","+bi+y(at,bi,qs,ih,0,90,!1).replace("M","L")+" L"+Ai+","+Ar+y(Ai,bi,qs,ih,90,180,!1).replace("M","L")+" L"+zi+","+Lt+" L"+Ze+","+Lt+" L"+Qs+","+Oi+" z M"+ti+","+ih+" L"+ti+","+Ni+"M"+ri+","+Ni+" L"+ri+","+ih+"M"+zi+","+Lt+" L"+zi+","+jo+"M"+rt+","+jo+" L"+rt+","+Lt}f+="";break;case"doubleWave":case"wave":me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa="doubleWave"==L?6e5/914400:12e5/914400,gr=0;if(void 0!==me)for(Aa=0;AaXa?Xa:Wa)/Es)-(Qi=10*Bi/3),Oi=Bi+Qi,bi=(Lt=Ar-Bi)-Qi,jo=Lt+Qi,Vd="M"+(zi=Ze-(ji=(Zs=S*(ql=grEs?Es:gr)/Sr)>0?0:Zs))+","+Bi+" C"+(Ai=zi+(Po=(ji+(at=zr-(Xs=Zs>0?Zs:0)))/6))+","+Ni+" "+(ut=zi+(co=(ji+at)/3))+","+Oi+" "+(ti=(zi+at)/2)+","+Bi+" C"+(ri=ti+Po)+","+Ni+" "+(ai=(ri+at)/2)+","+Oi+" "+at+","+Bi+" L"+(Vs=zr+ji)+","+Lt+" C"+(Js=((Ws=(Ys=((rt=Ze+Xs)+Vs)/2)+Po)+Vs)/2)+","+jo+" "+Ws+","+bi+" "+Ys+","+Lt+" C"+(rt+co)+","+jo+" "+($s=rt+Po)+","+bi+" "+rt+","+Lt+" z"}else if("wave"==L){var Zs,$s;Hs=192e4/914400;Ni=(Bi=j*(dl=Wa<0?0:Wa>Hs?Hs:Wa)/Es)-(Qi=10*Bi/3),Oi=Bi+Qi,bi=(Lt=Ar-Bi)-Qi,jo=Lt+Qi,Vd="M"+(zi=Ze-(ji=(Zs=S*(ql=grEs?Es:gr)/Sr)>0?0:Zs))+","+Bi+" C"+(Ai=zi+(Po=(ji+(ti=zr-(Mo=Zs>0?Zs:0)))/3))+","+Ni+" "+(ut=(Ai+ti)/2)+","+Oi+" "+ti+","+Bi+" L"+($s=zr+ji)+","+Lt+" C"+(at=((ai=(ri=Ze+Mo)+Po)+$s)/2)+","+jo+" "+ai+","+bi+" "+ri+","+Lt+" z"}f+="";break;case"ellipseRibbon":case"ellipseRibbon2":Wa=24e5/914400,gr=48e5/914400,br=12e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaEs?Es:Wa,ut=zr-(Ai=(zi=Q-(ji=S*(ql=grSr?Sr:gr)/Hs))+Qs),ti=zr-zi,ri=zr-Qs,yn=Ai-(kn=Ai*Ai/S),to=zr-(ro=Ai/2),Xi=(kn=j*dl/Es)-(Si=j*(mi=br<(Ks=0>(zn=dl-(jn=(Sn=Es-dl)/2))?0:zn)?Ks:br>dl?dl:br)/Es),Pn=(ao=4*Si/S)*(In=zi-zi*zi/S),no=Ar-kn,_n=14*Si/16,Gn=ao*(eo=zi/2),so=zr-eo,"ellipseRibbon"==L)kn+kn-(So=(Bi=ao*yn)+Xi),ot=Ar-Si,Vd="M"+Ze+","+Je+" Q"+ro+","+(oo=ao*ro)+" "+Ai+","+Bi+" L"+zi+","+(Oi=Pn+Xi)+" Q"+Q+","+(lo=(Cn=Si+Xi-Oi+Si)+Xi)+" "+ti+","+Oi+" L"+ut+","+Bi+" Q"+to+","+oo+" "+zr+","+Je+" L"+ri+","+(Ni=(_n+no)/2)+" L"+zr+","+no+" Q"+so+","+(ho=Gn+no)+" "+ti+","+(bi=Pn+no)+" L"+ti+","+(jo=Oi+no)+" Q"+Q+","+(lo+no)+" "+zi+","+jo+" L"+zi+","+bi+" Q"+eo+","+ho+" "+Ze+","+no+" L"+Qs+","+Ni+" zM"+zi+","+bi+" L"+zi+","+Oi+"M"+ti+","+Oi+" L"+ti+","+bi+"M"+Ai+","+Bi+" L"+Ai+","+So+"M"+ut+","+So+" L"+ut+","+Bi;else if("ellipseRibbon2"==L){var oo,io,lo,no,ho;Ar-(kn+kn-(Sl=(_l=ao*yn)+Xi)),Vd="M"+Ze+","+Ar+" L"+Qs+","+(Ni=Ar-(xl=(_n+no)/2))+" L"+Ze+","+kn+" Q"+eo+","+(ho=Ar-(Gn+no))+" "+zi+","+(bi=Ar-(Pn+no))+" L"+zi+","+(jo=Ar-((Dl=Pn+Xi)+no))+" Q"+Q+","+(Ar-((io=(Cn=Si+Xi-Dl+Si)+Xi)+no))+" "+ti+","+jo+" L"+ti+","+bi+" Q"+so+","+ho+" "+zr+","+kn+" L"+ri+","+Ni+" L"+zr+","+Ar+" Q"+to+","+(oo=Ar-ao*ro)+" "+ut+","+(Bi=Ar-_l)+" L"+ti+","+(Oi=Ar-Dl)+" Q"+Q+","+(lo=Ar-io)+" "+zi+","+Oi+" L"+Ai+","+Bi+" Q"+ro+","+oo+" "+Ze+","+Ar+" zM"+zi+","+Oi+" L"+zi+","+bi+"M"+ti+","+bi+" L"+ti+","+Oi+"M"+Ai+","+(So=Ar-Sl)+" L"+Ai+","+Bi+"M"+ut+","+Bi+" L"+ut+","+So}f+="";break;case"line":case"straightConnector1":case"bentConnector4":case"bentConnector5":case"curvedConnector2":case"curvedConnector3":case"curvedConnector4":case"curvedConnector5":f+=m?"";break;case"leftArrow":Na=.25,Oa=.5,po=S/j;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"downArrow":case"flowChartOffpageConnector":Na=.25,Oa=.5,po=j/S;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"upArrow":Na=.25,Oa=.5,po=j/S;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"leftRightArrow":Na=.25,Oa=.25,po=S/j;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"upDownArrow":Na=.25,Oa=.25,po=j/S;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"quadArrow":Wa=216e4/914400,gr=216e4/914400,br=216e4/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaXa?Xa:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=(kn=Va-vr)/2,f+="";break;case"leftRightUpArrow":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaXa?Xa:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=(kn=Va-vr)/2,f+="";break;case"leftUpArrow":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaXa?Xa:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=Va-vr,f+="";break;case"bentUpArrow":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"bentArrow":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,_s=42e5/914400,Xa=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaXa?Xa:gr),dl=Wa<0?0:Wa>vr?vr:Wa,wo=Va*((vo=S-(Bo=Tr*(mi=br<0?0:br>Xa?Xa:br)/Va))<(fo=j-(Lo=(Fo=Tr*ql/Va)-(fl=(pl=Tr*dl/Va)/2)))?vo:fo)/Tr,Ai=pl+(bo=(go=(mo=Tr*(Io=_s<0?0:_s>wo?wo:_s)/Va)-pl)>0?go:0),ut=S-Bo,Lt=(Oi=Lo+pl)+Lo,jo=Oi+bo,f+="";break;case"uturnArrow":var uo;Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,_s=42e5/914400,xs=72e5/914400,Xa=24e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaXa?Xa:gr),vi=(Va-(yn=(dl=Wa<0?0:Wa>vr?vr:Wa)*Tr/j))*j/Tr,wo=Va*((vo=(rt=S-(Lo=(Fo=Tr*ql/Va)-(fl=(pl=Tr*dl/Va)/2)))/2)<(Lt=(bi=j*(nl=xs<(uo=(kn=(mi=br<0?0:br>vi?vi:br)+dl)*Tr/j)?uo:xs>Va?Va:xs)/Va)-(Bo=Tr*mi/Va))?vo:Lt)/Tr,Ai=pl+(bo=(go=(mo=Tr*(Io=_s<0?0:_s>wo?wo:_s)/Va)-pl)>0?go:0),ut=rt-mo,ti=(ai=(ri=(at=S-Fo)-Fo)+Lo)-bo,cx=(pl+ai)/2;f+="";break;case"stripedRightArrow":Wa=48e5/914400,gr=48e5/914400,Xa=96e5/914400,Va=192e5/914400,Sr=81e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"notchedRightArrow":Wa=48e5/914400,gr=48e5/914400,Xa=96e5/914400,Va=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;Aa";break;case"homePlate":Qa=48e5/914400,Xa=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=96*parseInt(Ua.substr(4))/914400);U=j/2;Rr=Xa*S/(Tr=Math.min(S,j)),f+="";break;case"chevron":Qa=48e5/914400,Xa=96e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=96*parseInt(Ua.substr(4))/914400);U=j/2;Rr=Xa*S/(Tr=Math.min(S,j)),f+="";break;case"rightArrowCallout":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,_s=6237792/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=Va*S/Ue,wo=Ha-(yn=(mi=br<0?0:br>vi?vi:br)*Ue/S),Ti=(zi=S*(Io=_s<0?0:_s>wo?wo:_s)/Va)/2,f+="";break;case"downArrowCallout":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,_s=6237792/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=Va*j/Ue,wo=Va-(yn=(mi=br<0?0:br>vi?vi:br)*Ue/j),Bi=(Ni=j*(Io=_s<0?0:_s>wo?wo:_s)/Va)/2,f+="";break;case"leftArrowCallout":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,_s=6237792/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=Va*S/Ue,wo=Va-(yn=(mi=br<0?0:br>vi?vi:br)*Ue/S),Ai=((zi=zr-(ji=S*(Io=_s<0?0:_s>wo?wo:_s)/Va))+zr)/2,f+="";break;case"upArrowCallout":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,_s=6237792/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=Va*j/Ue,wo=Va-(yn=(mi=br<0?0:br>vi?vi:br)*Ue/j),Oi=((Ni=Ar-(Qi=j*(Io=_s<0?0:_s>wo?wo:_s)/Va))+Ar)/2,f+="";break;case"leftRightArrowCallout":Wa=24e5/914400,gr=24e5/914400,br=24e5/914400,_s=4619808/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=Xa*S/Ue,wo=Va-(yn=(mi=br<0?0:br>vi?vi:br)*Ue/wa),f+="";break;case"quadArrowCallout":Wa=1777440/914400,gr=1777440/914400,br=1777440/914400,_s=4619808/914400,Xa=48e5/914400,Va=96e5/914400,Sr=192e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaXa?Xa:gr),dl=Wa<0?0:Wa>vr?vr:Wa,vi=Xa-ql,wo=Va-(yn=2*(mi=br<0?0:br>vi?vi:br)),f+="";break;case"curvedDownArrow":Wa=24e5/914400,gr=48e5/914400,br=24e5/914400,Xa=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr,Sn=(_n=(Cn=2*(lh=wa-(kn=((pl=Ue*(dl=Wa<0?0:Wa>Va?Va:Wa)/Va)+(Ao=Ue*ql/Va))/4)))*Cn)-(Gn=pl*pl),vi=Va*(Ro=(jn=Math.sqrt(Sn))*j/Cn)/Ue,mi=br<0?0:br>vi?vi:br,Ai=lh+pl,In=(yn=j*j)-(Bo=Ue*br/Va)*Bo,ut=(ti=lh+(No=(Pn=Math.sqrt(In))*lh/j))-(Oo=(Ao-pl)/2),at=(ai=Ai+No)+Oo,ri=zr-(Fo=Ao/2),Bi=Ar-Bo;var Co=180*(dh=Math.atan(No/Bo))/Math.PI;Eo=-Co,Ar-Ro,(lh+Ai)/2,zn=pl/2;var _o=180*(qo=Math.atan(zn/Ro))/Math.PI;Xo=Pa-_o,Ho=_o-ya,Qo=ya+_o,f+="";break;case"curvedLeftArrow":Wa=24e5/914400,gr=48e5/914400,br=24e5/914400,Xa=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr,Sn=(_n=(Cn=2*(ih=Sa-(kn=((pl=Ue*(dl=Wa<0?0:Wa>ql?ql:Wa)/Va)+(Ao=Ue*ql/Va))/4)))*Cn)-(Gn=pl*pl),vi=Va*(o=(jn=Math.sqrt(Sn))*S/Cn)/Ue,Oi=ih+pl,In=(yn=S*S)-(Bo=Ue*(mi=br<0?0:br>vi?vi:br)/Va)*Bo,Lt=(bi=ih+(Go=(Pn=Math.sqrt(In))*ih/S))-(Oo=(Ao-pl)/2),ot=(So=Oi+Go)+Oo,jo=Ar-(Fo=Ao/2),Ti=Ze+Bo,Eo=-(dh=Math.atan(Go/Bo)),Ze+o,(ih+Oi)/2,zn=pl/2,Ho=(qo=Math.atan(zn/o))-dh,Qo=dh+qo,Uo=-qo,Yo=180*dh/Math.PI,xo=180*Ho/Math.PI,180*Qo/Math.PI,Do=180*Uo/Math.PI,f+="";break;case"curvedRightArrow":Wa=24e5/914400,gr=48e5/914400,br=24e5/914400,Xa=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr,Sn=(_n=(Cn=2*(ih=Sa-(kn=((pl=Ue*(dl=Wa<0?0:Wa>ql?ql:Wa)/Va)+(Ao=Ue*ql/Va))/4)))*Cn)-(Gn=pl*pl),vi=Va*(o=(jn=Math.sqrt(Sn))*S/Cn)/Ue,Oi=ih+pl,In=(yn=S*S)-(Bo=Ue*(mi=br<0?0:br>vi?vi:br)/Va)*Bo,Lt=(bi=ih+(Go=(Pn=Math.sqrt(In))*ih/S))-(Oo=(Ao-pl)/2),ot=(So=Oi+Go)+Oo,jo=Ar-(Fo=Ao/2),Ti=zr-Bo,dh=Math.atan(Go/Bo),nh=Math.PI+0-dh,Eo=-dh,zr-o,(ih+Oi)/2,zn=pl/2,Ho=(qo=Math.atan(zn/o))-Math.PI/2,Qo=Math.PI/2+qo,Uo=Math.PI-qo,To=180*nh/Math.PI,zo=180*Eo/Math.PI,Yo=180*dh/Math.PI,Wo=180*Ho/Math.PI,f+="";break;case"curvedUpArrow":Wa=24e5/914400,gr=48e5/914400,br=24e5/914400,Xa=48e5/914400,Va=96e5/914400;if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))for(Aa=0;AaLr?Lr:gr,Sn=(_n=(Cn=2*(lh=wa-(kn=((pl=Ue*(dl=Wa<0?0:Wa>Va?Va:Wa)/Va)+(Ao=Ue*ql/Va))/4)))*Cn)-(Gn=pl*pl),vi=Va*(Ro=(jn=Math.sqrt(Sn))*j/Cn)/Ue,mi=br<0?0:br>vi?vi:br,Ai=lh+pl,In=(yn=j*j)-(Bo=Ue*br/Va)*Bo,ut=(ti=lh+(No=(Pn=Math.sqrt(In))*lh/j))-(Oo=(Ao-pl)/2),at=(ai=Ai+No)+Oo,ri=zr-(Fo=Ao/2),Bi=Je+Bo,Eo=-(dh=Math.atan(No/Bo)),Je+Ro,(lh+Ai)/2,zn=pl/2,-(Ho=(qo=Math.atan(zn/Ro))-dh),Uo=Math.PI/2-dh,Qo=dh+qo,Vo=180*(Xo=Math.PI/2-qo)/Math.PI,Wo=180*Ho/Math.PI,Do=180*Uo/Math.PI,Yo=180*dh/Math.PI,f+="";break;case"mathDivide":case"mathEqual":case"mathMinus":case"mathMultiply":case"mathNotEqual":case"mathPlus":if(void 0!==(me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"])))if(me.constructor===Array)for(Aa=0;AaXa?Xa:Wa),Ti=Q-(Ui=S*Es/Sr),at=Q+Ui,Bi=(Ni=U-(Qi=j*(mi=br<0?0:br>vi?vi:br)/Sr))-(Si=j*dl/Va),Lt=(Oi=U+Qi)+Si,Jo=(grfi?fi:gr)-Math.PI/2,ri=(ai=Q+(Zo=Sa*Math.tan(Jo))-(Ko=($o=Math.sqrt(Zo*Zo+Sa*Sa))*Si/Sa)/2)-Zo*Bi/Sa,ti=ai-Zo*Ni/Sa,ut=ai-Zo*Oi/Sa,Ai=ai-Zo*Lt/Sa,ei=ai+Ko,(zi=ai-2*Zo)+Ko,si=Si*Sa/$o,Vi=-(Xi=Si*Zo/$o),((oi=Jo>0?ai+si:ei)+(ii=Jo>0?ai:ei-si))/2,((hi=S-ii)+(di=S-oi))/2,((li=Jo>0?Xi:0)+(ni=Jo>0?0:Vi))/2,(Bi+Ni)/2,(Oi+Lt)/2,((ci=j-ni)+(pi=j-li))/2,Yi="M"+Ti+","+Bi+" L"+ri+","+Bi+" L"+ii+","+ni+" L"+oi+","+li+" L"+(ri+Ko)+","+Bi+" L"+at+","+Bi+" L"+at+","+Ni+" L"+(ti+Ko)+","+Ni+" L"+(ut+Ko)+","+Oi+" L"+at+","+Oi+" L"+at+","+Lt+" L"+(Ai+Ko)+","+Lt+" L"+hi+","+ci+" L"+di+","+pi+" L"+Ai+","+Lt+" L"+Ti+","+Lt+" L"+Ti+","+Oi+" L"+ut+","+Oi+" L"+ti+","+Ni+" L"+Ti+","+Ni+" z"}else if("mathDivide"==L){var ui,Li,vi,mi,gi,bi;void 0===me?(Wa=2257920/914400,gr=564480/914400,br=1128960/914400):(Wa=96*Wa/914400,gr=96*gr/914400,br=96*br/914400);Hs=3527520/914400;vi=(ui=((Us=7055040/914400)+-(dl=Wa<(Es=96e3/914400)?Es:Wa>Hs?Hs:Wa))/4)<(Li=Hs*S/j)?ui:Li,Lr=Us+-4*(mi=brvi?vi:br)-dl,Lt=U+(Si=j*dl/Sr),bi=j-(Bi=(Ni=(Oi=U-Si)-(Ri=j*(ql=gr<0?0:gr>Lr?Lr:gr)/Va+(gi=j*mi/Va)))-gi),Ti=Q-(Ui=S*Us/Sr),Ai=Q+Ui,zi=Q-gi;ya=90,Pa=270,Qe=Q-Math.cos(Pa*Math.PI/180)*gi,Xe=Bi-Math.sin(Pa*Math.PI/180)*gi,X=Q-Math.cos(Math.PI/2)*gi,Z=bi-Math.sin(Math.PI/2)*gi;Yi="M"+Q+","+Bi+y(Qe,Xe,gi,gi,Pa,Pa+360,!1).replace("M","L")+" z M"+Q+","+bi+y(X,Z,gi,gi,ya,ya+360,!1).replace("M","L")+" z M"+Ti+","+Oi+" L"+Ai+","+Oi+" L"+Ai+","+Lt+" L"+Ti+","+Lt+" z"}else if("mathEqual"==L){void 0===me?(Wa=2257920/914400,gr=1128960/914400):(Wa=96*Wa/914400,gr=96*gr/914400);var Mi;Hs=3527520/914400,Us=7055040/914400;Mi=Va-2*(dl=Wa<0?0:Wa>Hs?Hs:Wa),((Bi=(Ni=U-(Qi=j*(ql=gr<0?0:gr>Mi?Mi:gr)/Sr))-(Si=j*dl/Va))+Ni)/2,((Oi=U+Qi)+(Lt=Oi+Si))/2,Yi="M"+(Ti=Q-(Ui=S*Us/Sr))+","+Bi+" L"+(zi=Q+Ui)+","+Bi+" L"+zi+","+Ni+" L"+Ti+","+Ni+" zM"+Ti+","+Oi+" L"+zi+","+Oi+" L"+zi+","+Lt+" L"+Ti+","+Lt+" z"}else if("mathMinus"==L){Yi="M"+(Ti=Q-(Ui=S*(Us=7055040/914400)/Sr))+","+(Bi=U-(Si=j*(dl=(Wa=void 0===me?2257920/914400:96*Wa/914400)<0?0:Wa>Va?Va:Wa)/Sr))+" L"+(zi=Q+Ui)+","+Bi+" L"+zi+","+(Ni=U+Si)+" L"+Ti+","+Ni+" z"}else if("mathMultiply"==L){Wa=void 0===me?2257920/914400:96*Wa/914400;var ki,yi,wi,Ii,Pi,Ci,_i,xi,Di,Gi;Us=4988640/914400;pl=(Ue=Math.min(S,j))*(dl=Wa<0?0:Wa>Us?Us:Wa)/Va,Ri=Math.atan(j/S),ki=1*Math.sin(Ri),yi=1*Math.cos(Ri),wi=1*Math.tan(Ri),S-(Ci=yi*(Pi=(Ii=Math.sqrt(S*S+j*j))-Ii*Us/Va)/2),j-(_i=ki*Pi/2),Yi="M"+(Xl=Ci-(xi=ki*pl/2))+","+(Vl=_i+(Di=yi*pl/2))+" L"+(ln=Ci+xi)+","+(nn=_i-Di)+" L"+Q+","+(Cd=(Q-ln)*wi+nn)+" L"+(an=S-ln)+","+nn+" L"+(Jl=S-Xl)+","+Vl+" L"+(Yn=Jl-(Gi=(U-Vl)/wi))+","+U+" L"+Jl+","+(en=j-Vl)+" L"+an+","+(Pl=j-nn)+" L"+Q+","+(j-Cd)+" L"+ln+","+Pl+" L"+Xl+","+en+" L"+(Xl+Gi)+","+U+" z"}else if("mathPlus"==L){Wa=void 0===me?2257920/914400:96*Wa/914400;var Si,ji,Ti,zi,Ai;Us=7055040/914400,Ue=Math.min(S,j);Yi="M"+(Ti=Q-(Ui=S*Us/Sr))+","+(Ni=U-(ji=Ue*(dl=Wa<0?0:Wa>Us?Us:Wa)/Sr))+" L"+(zi=Q-ji)+","+Ni+" L"+zi+","+(Bi=U-(Si=j*Us/Sr))+" L"+(Ai=Q+ji)+","+Bi+" L"+Ai+","+Ni+" L"+(ut=Q+Ui)+","+Ni+" L"+ut+","+(Oi=U+ji)+" L"+Ai+","+Oi+" L"+Ai+","+(Lt=U+Si)+" L"+zi+","+Lt+" L"+zi+","+Oi+" L"+Ti+","+Oi+" z"}f+="";break;case"can":case"flowChartMagneticDisk":case"flowChartMagneticDrum":Qa=24e5/914400,Xa=48e5/914400,Va=192e5/914400;void 0!==(Ua=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd","attrs","fmla"]))&&(Qa=96*parseInt(Ua.substr(4))/914400);var Ri,Bi,Ni,Oi;Ue=Math.min(S,j);"flowChartMagneticDisk"!=L&&"flowChartMagneticDrum"!=L||(Qa=48e5/914400),Rr=Xa*j/Ue,Ni=(Bi=Ue*(Ri=Qa<0?0:Qa>Rr?Rr:Qa)/Va)+Bi,Oi=j-Bi;Ia=180,wa=S/2,Ba="";"flowChartMagneticDrum"==L&&(Ba="transform='rotate(90 "+S/2+","+j/2+")'"),f+="";break;case"swooshArrow":var Fi;me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=25e3*(Fi=96/914400),gr=16667*Fi;if(void 0!==me)for(Aa=0;AaSr?Sr:Wa)/Es,ln=S-Ue*(ql=gr<0?0:gr>Lr?Lr:gr)/Es,nn=Wi,qi=Math.PI/2/14,Pd=ln-(Hi=Wi*Math.tan(qi)),Ui=Ei*Math.tan(qi),f+="";break;case"circularArrow":me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=12e5/914400,gr=19.03865*Math.PI/180,br=340.96135*Math.PI/180,_s=180*Math.PI/180,xs=12e5/914400;if(void 0!==me)for(Aa=0;AaXa?Xa:xs),dl=Wa<0?0:Wa>vr?vr:Wa,hl=br<$i?$i:br>Ki?Ki:br,nh=_s<0?0:_s>Ki?Ki:_s,bl=(ml=(Ll=Sa+(fl=(pl=Ue*dl/Va)/2)-(cl=Ue*nl/Va))-pl)+fl,Ml=(gl=(vl=(ul=wa+fl-cl)-pl)+fl)*Math.sin(hl),kl=bl*Math.cos(hl),Il=Q+(yl=gl*Math.cos(Math.atan2(Ml,kl))),Pl=U+(wl=bl*Math.sin(Math.atan2(Ml,kl))),jl=1-(Sl=(Gl=(_l=yl*yl)-(Dl=(Cl=vl0?zl:Al)-hl)+al,Ol=(Nl=Rl>0?Rl:Bl)-al,Fl=Nl-Ia>0?Ol:Nl,Zi=Math.abs(Fl),Hl=hl+(gr<0?0:gr>Zi?Zi:gr),Ul=gl*Math.sin(Hl),Ql=bl*Math.cos(Hl),Xl=Q+gl*Math.cos(Math.atan2(Ul,Ql)),Vl=U+bl*Math.sin(Math.atan2(Ul,Ql)),Yl=ul*Math.sin(nh),Wl=Ll*Math.cos(nh),Jl=Q+ul*Math.cos(Math.atan2(Yl,Wl)),Zl=U+Ll*Math.sin(Math.atan2(Yl,Wl)),tn=Il+cl*Math.cos(Hl),en=Pl+cl*Math.sin(Hl),sn=cl*Math.cos(Hl),on=cl*Math.sin(Hl),dn=(ln=Il-sn)-Q,hn=(nn=Pl-on)-U,cn=en-U,gn=(vn=(pn=tn-Q)*(fn=ul0?Cn:0,xn=Math.sqrt(_n),Fn=vn-(Tn=((jn=wn*bn)+(Sn=(Gn=(Dn=-1*bn>0?-1:1)*gn)*xn))/In),En=vn-(An=(zn=jn-Sn)/In),qn=mn-(Nn=((Bn=wn*gn/-1)+(Rn=Math.abs(bn)*xn))/In),Hn=mn-(On=(Bn-Rn)/In),Un=Math.sqrt(Fn*Fn+qn*qn),Yn=Q+(Xn=((Qn=Math.sqrt(En*En+Hn*Hn)-Un)>0?Tn:An)*ul/fn),Wn=U+(Vn=(Qn>0?Nn:On)*Ll/fn),ad=($n=pn*Cl/vl)-(Jn=dn*Cl/vl),rd=(Kn=cn*Cl/ml)-(Zn=hn*Cl/ml),ld=(id=Cl*Cl*(od=(td=Math.sqrt(ad*ad+rd*rd))*td)-(sd=Jn*Kn-(ed=$n*Zn))*sd)>0?id:0,md=Jn-(pd=((hd=sd*rd)+(dd=Dn*ad*(nd=Math.sqrt(ld))))/od),gd=Jn-(cd=(hd-dd)/od),bd=Zn-(Ld=((ud=sd*ad/-1)+(fd=Math.abs(rd)*nd))/od),Md=Zn-(vd=(ud-fd)/od),kd=Math.sqrt(md*md+bd*bd),Pd=Q+(wd=((yd=Math.sqrt(gd*gd+Md*Md)-kd)>0?pd:cd)*vl/Cl),Cd=U+(Id=(yd>0?Ld:vd)*ml/Cl),xd=(_d=Math.atan2(Id,wd))+al,Sd=(Gd=nh-(Td=_d>0?_d:xd))-al,zd=Gd>0?Sd:Gd,Ad=Yn-Pd,Rd=Wn-Cd,Nd=(Bd=Math.sqrt(Ad*Ad+Rd*Rd)/2-cl)>0?Yn:tn,Od=Bd>0?Wn:en,Fd=Bd>0?Pd:ln,Ed=Bd>0?Cd:nn,Hd=(qd=Math.atan2(Vn,Xn))+al,Qd=(Ud=(qd>0?qd:Hd)-nh)+al,dh=Ud>0?Ud:Qd;Dr=(Yd=180*nh/Math.PI)+180*dh/Math.PI;var rl=(Xd=180*Td/Math.PI)+180*zd/Math.PI;f+="";break;case"leftCircularArrow":var tl,el,sl,ol,il;me=V(a,["p:spPr","a:prstGeom","a:avLst","a:gd"]),Wa=12e5/914400,gr=-19.03865*Math.PI/180,br=19.03865*Math.PI/180,_s=180*Math.PI/180,xs=12e5/914400;if(void 0!==me)for(Aa=0;AaXa?Xa:xs),dl=Wa<0?0:Wa>vr?vr:Wa,hl=br<$i?$i:br>Ki?Ki:br,nh=_s<0?0:_s>Ki?Ki:_s,bl=(ml=(Ll=Sa+(fl=(pl=Ue*dl/Va)/2)-(cl=Ue*nl/Va))-pl)+fl,Ml=(gl=(vl=(ul=wa+fl-cl)-pl)+fl)*Math.sin(hl),kl=bl*Math.cos(hl),Il=Q+(yl=gl*Math.cos(Math.atan2(Ml,kl))),Pl=U+(wl=bl*Math.sin(Math.atan2(Ml,kl))),jl=1-(Sl=(Gl=(_l=yl*yl)-(Dl=(Cl=vl0?zl:Al)-hl)+al,Ol=(Nl=Rl>0?Rl:Bl)-al,Fl=Nl-Ia>0?Ol:Nl,El=-1*Math.abs(Fl),Hl=hl+((ql=-1*Math.abs(gr))0?0:ql),Ul=gl*Math.sin(Hl),Ql=bl*Math.cos(Hl),Xl=Q+gl*Math.cos(Math.atan2(Ul,Ql)),Vl=U+bl*Math.sin(Math.atan2(Ul,Ql)),Yl=ul*Math.sin(nh),Wl=Ll*Math.cos(nh),Jl=Q+ul*Math.cos(Math.atan2(Yl,Wl)),Zl=U+Ll*Math.sin(Math.atan2(Yl,Wl)),$l=vl*Math.sin(nh),Kl=ml*Math.cos(nh),an=Q+vl*Math.cos(Math.atan2($l,Kl)),rn=U+ml*Math.sin(Math.atan2($l,Kl)),tn=Il+cl*Math.cos(Hl),en=Pl+cl*Math.sin(Hl),sn=cl*Math.cos(Hl),on=cl*Math.sin(Hl),dn=(ln=Il-sn)-Q,hn=(nn=Pl-on)-U,cn=en-U,gn=(vn=(pn=tn-Q)*(fn=ul0?Cn:0,xn=Math.sqrt(_n),Fn=vn-(Tn=((jn=wn*bn)+(Sn=(Gn=(Dn=-1*bn>0?-1:1)*gn)*xn))/In),En=vn-(An=(zn=jn-Sn)/In),qn=mn-(Nn=((Bn=wn*gn/-1)+(Rn=Math.abs(bn)*xn))/In),Hn=mn-(On=(Bn-Rn)/In),Un=Math.sqrt(Fn*Fn+qn*qn),Yn=Q+(Xn=((Qn=Math.sqrt(En*En+Hn*Hn)-Un)>0?Tn:An)*ul/fn),Wn=U+(Vn=(Qn>0?Nn:On)*Ll/fn),ad=($n=pn*Cl/vl)-(Jn=dn*Cl/vl),rd=(Kn=cn*Cl/ml)-(Zn=hn*Cl/ml),ld=(id=Cl*Cl*(od=(td=Math.sqrt(ad*ad+rd*rd))*td)-(sd=Jn*Kn-(ed=$n*Zn))*sd)>0?id:0,md=Jn-(pd=((hd=sd*rd)+(dd=Dn*ad*(nd=Math.sqrt(ld))))/od),gd=Jn-(cd=(hd-dd)/od),bd=Zn-(Ld=((ud=sd*ad/-1)+(fd=Math.abs(rd)*nd))/od),Md=Zn-(vd=(ud-fd)/od),kd=Math.sqrt(md*md+bd*bd),Pd=Q+(wd=((yd=Math.sqrt(gd*gd+Md*Md)-kd)>0?pd:cd)*vl/Cl),Cd=U+(Id=(yd>0?Ld:vd)*ml/Cl),xd=(_d=Math.atan2(Id,wd))+al,Sd=(Gd=nh-(Dd=_d>0?_d:xd))+al,Td=Dd+(jd=Gd>0?Gd:Sd),zd=-jd,Ad=Yn-Pd,Rd=Wn-Cd,Nd=(Bd=Math.sqrt(Ad*Ad+Rd*Rd)/2-cl)>0?Yn:tn,Od=Bd>0?Wn:en,Fd=Bd>0?Pd:ln,Ed=Bd>0?Cd:nn,Hd=(qd=Math.atan2(Vn,Xn))+al,Qd=(Ud=(qd>0?qd:Hd)-nh)-al;var Xd,Vd,Yd=180*(nh+(dh=Ud>0?Qd:Ud))/Math.PI;Dr=180*nh/Math.PI;f+="";break;case"leftRightCircularArrow":case"chartPlus":case"chartStar":case"chartX":case"cornerTabs":case"flowChartOfflineStorage":case"folderCorner":case"funnel":case"lineInv":case"nonIsoscelesTrapezoid":case"plaqueTabs":case"squareTabs":case"upDownArrowCallout":console.log(L," -unsupported shape type.");break;case void 0:default:console.warn("Undefine shape type.("+L+")")}f+="",f+="
",void 0!==a["p:txBody"]&&(f+=w(a["p:txBody"],a,r,t,i,n)),f+="
"}else if(void 0!==v){var Wd=V(v,["a:pathLst"]),Jd=V(Wd,["a:path","attrs"]),Zd=(parseInt(Jd.w),parseInt(Jd.h),V(Wd,["a:path","a:close"])),$d=V(Wd,["a:path","a:moveTo","a:pt","attrs"]),Kd=(ka="M"+96*parseInt($d.x)/914400+","+96*parseInt($d.y)/914400,V(Wd,["a:path"])),ah=Kd["a:lnTo"],rh=Kd["a:cubicBezTo"],th=Kd["a:arcTo"],eh=[];if(void 0!==ah&&Object.keys(ah).forEach(function(a){var r=ah[a]["a:pt"];void 0!==r&&Object.keys(r).forEach(function(a){var t={},e=r[a],s=e.x,o=e.y,i=e.order;t.type="lnto",t.order=i,t.x=s,t.y=o,eh.push(t)})}),void 0!==rh&&Object.keys(rh).forEach(function(a){var r=rh[a]["a:pt"];void 0!==r&&Object.keys(r).forEach(function(a){var t=r[a];Object.keys(t).forEach(function(a){var r={},e=t[a],s=e.x,o=e.y,i=e.order;r.type="cubicBezTo",r.order=i,r.x=s,r.y=o,eh.push(r)})})}),void 0!==th){var sh=th.attrs,oh=sh.order,ih=sh.hR,lh=sh.wR,nh=sh.stAng,dh=sh.swAng,hh=0,ph=0,ch=V(th,["a:pt","attrs"]);void 0!==ch&&(hh=ch.x,ph=ch.y);var fh={type:"arcTo"};fh.order=oh,fh.hR=ih,fh.wR=lh,fh.stAng=nh,fh.swAng=dh,fh.shftX=hh,fh.shftY=ph,eh.push(fh)}var uh=eh.slice(0);uh.sort(function(a,r){return a.order-r.order});for(var Lh=0;Lh":(void 0===q||"triangle"!==q.type&&"arrow"!==q.type||(f+="marker-start='url(#markerTriangle_"+u+")' "),void 0===H||"triangle"!==H.type&&"arrow"!==H.type||(f+="marker-end='url(#markerTriangle_"+u+")' "),f+="/>"),f+="",f+="
",void 0!==a["p:txBody"]&&(f+=w(a["p:txBody"],a,r,t,i,n)),f+="
"}else f+="
",void 0!==a["p:txBody"]&&(f+=w(a["p:txBody"],a,r,t,i,n)),f+="
";return f}function k(r,t,e){var s=1.5*t,o=s;cy=s,notches=e,radiusO=s,radiusI=t,taperO=50,taperI=35,pi2=2*Math.PI,angle=pi2/(2*notches),taperAI=angle*taperI*.005,taperAO=angle*taperO*.005,a=angle,toggle=!1;for(var i=" M"+(o+radiusO*Math.cos(taperAO))+" "+(cy+radiusO*Math.sin(taperAO));a<=pi2+angle;a+=angle)toggle?(i+=" L"+(o+radiusI*Math.cos(a-taperAI))+","+(cy+radiusI*Math.sin(a-taperAI)),i+=" L"+(o+radiusO*Math.cos(a+taperAO))+","+(cy+radiusO*Math.sin(a+taperAO))):(i+=" L"+(o+radiusO*Math.cos(a-taperAO))+","+(cy+radiusO*Math.sin(a-taperAO)),i+=" L"+(o+radiusI*Math.cos(a+taperAI))+","+(cy+radiusI*Math.sin(a+taperAI))),toggle=!toggle;return i+=" "}function y(a,r,t,e,s,o,i){var l,n=s;if(o>=s)for(;n<=o;){var d=n*(Math.PI/180),h=a+Math.cos(d)*t,p=r+Math.sin(d)*e;n==s&&(l=" M"+h+" "+p),l+=" L"+h+" "+p,n++}else for(;n>o;){d=n*(Math.PI/180),h=a+Math.cos(d)*t,p=r+Math.sin(d)*e;n==s&&(l=" M "+h+" "+p),l+=" L "+h+" "+p,n--}return l+=i?" z":""}function w(a,r,t,e,s,o){var i="",l=o.slideMasterTextStyles;if(void 0===a)return i;if(a["a:p"].constructor===Array)for(var n=0;n",i+=I(p,r,t,e,s,o),void 0===d)i+=P(p,r,t,e,s,o);else if(d.constructor===Array)for(var h=0;h");else i+=P(d,r,t,e,s,o);i+="
"}else{var p;d=(p=a["a:p"])["a:r"];if(i+="
",i+=I(p,r,t,e,s,o),void 0===d)i+=P(p,r,t,e,s,o);else if(d.constructor===Array)for(h=0;h");else i+=P(d,r,t,e,s,o);i+="
"}return i}function I(a,r,t,e,s,o){var i,l,n,d,h=o.slideMasterTextStyles,p=V(a,["a:r"]);void 0!==p&&p.constructor===Array&&(p=p[0]),void 0!==p?(i=G(p,r,s,h)[0],l=S(p,t,e,s,h)):(i=G(a,r,s,h)[0],l=S(a,t,e,s,h));var c="",f=a["a:pPr"],u=V(f,["attrs","rtl"]),L=!1;void 0!==u&&"1"==u&&(L=!0);var v=parseInt(V(f,["attrs","lvl"]));isNaN(v)&&(v=0);var m=V(f,["a:buChar","attrs","char"]),g="TYPE_NONE",b=V(f,["a:buAutoNum","attrs","type"]),M=V(f,["a:buBlip"]);if(void 0!==m&&(g="TYPE_BULLET"),void 0!==b&&(g="TYPE_NUMERIC"),void 0!==M&&(g="TYPE_BULPIC"),"TYPE_NONE"!=g)var k=V(f,["a:buFont","attrs"]);var y,w=V(f,["a:buClr"]),I="NoNe";if(void 0!==w&&(I=E(w)),n="NoNe"==I?i:"#"+I,void 0!==(y=V(f,["a:buSzPts","attrs","val"])))d=parseInt(y)/100+"pt";else if(void 0!==(y=V(f,["a:buSzPct","attrs","val"]))){var P=parseInt(y)/1e5,C=l.substr(0,l.length-2);d=P*parseInt(C)+"pt"}else d=l;if("TYPE_BULLET"==g)if(void 0!==k){var _=96*parseInt(V(f,["attrs","marL"]))/914400,x=parseInt(k.pitchFamily);isNaN(_)&&(_=31545600/914400),isNaN(x)&&(x=0),c=""+m+""}else c=""+m+"";else if("TYPE_NUMERIC"==g)if(void 0!==k){_=96*parseInt(V(f,["attrs","marL"]))/914400,x=parseInt(k.pitchFamily);isNaN(_)&&(_=31545600/914400),isNaN(x)&&(x=0),c=""}else c="";else if("TYPE_BULPIC"==g){_=96*parseInt(V(f,["attrs","marL"]))/914400,x=96*parseInt(V(f,["attrs","marR"]))/914400;isNaN(x)&&(x=0),_=isNaN(_)?31545600/914400:0;var D,j=V(M,["a:blip","attrs","r:embed"]);if(void 0!==j){var T=o.slideResObj[j].target,z=o.zip.file(T).asArrayBuffer();D=""}void 0===j&&(D="‣"),c=""+D+" "}else c="";return c}function P(a,r,t,e,s,o){var i=o.slideMasterTextStyles,n=a["a:t"];"string"!=typeof n&&"string"!=typeof(n=V(a,["a:fld","a:t"]))&&(n=" ");var d,h,p,f=G(a,r,s,i),u="color:"+f[0]+";text-shadow:"+f[1]+";font-size:"+S(a,t,e,s,i)+";font-family:"+function(a,r,t){var e=V(a,["a:rPr","a:latin","attrs","typeface"]);if(void 0===e){var s=V(l,["a:theme","a:themeElements","a:fontScheme"]);e=V(s,"title"==r||"subTitle"==r||"ctrTitle"==r?["a:majorFont","a:latin","attrs","typeface"]:["a:minorFont","a:latin","attrs","typeface"])}return void 0===e?"inherit":e}(a,s)+";font-weight:"+(void 0!==(p=a)["a:rPr"]&&"1"===p["a:rPr"].attrs.b?"bold":"initial")+";font-style:"+(void 0!==(h=a)["a:rPr"]&&"1"===h["a:rPr"].attrs.i?"italic":"normal")+";text-decoration:"+function(a,r,t){{if(void 0!==a["a:rPr"]){var e=void 0!==a["a:rPr"].attrs.u?a["a:rPr"].attrs.u:"none",s=void 0!==a["a:rPr"].attrs.strike?a["a:rPr"].attrs.strike:"noStrike";return"none"!=e&&"noStrike"==s?"underline":"none"==e&&"noStrike"!=s?"line-through":"none"!=e&&"noStrike"!=s?"underline line-through":"initial"}return"initial"}}(a)+";text-align:"+function(a,r,t){var e=V(a,["a:pPr","attrs","algn"]),s="initial";if(void 0!==e)switch(e){case"l":s="left";break;case"r":s="right";break;case"ctr":s="center";break;case"just":case"dist":s="justify";break;default:s="initial"}return s}(a)+";vertical-align:"+(void 0===(d=V(a,["a:rPr","attrs","baseline"]))?"baseline":parseInt(d)/1e3+"%")+";",L=V(a,["a:rPr","a:highlight"]);void 0!==L&&(u+="background-color:#"+E(L)+";",u+="Opacity:"+U(L)+";");var v="";u in c?v=c[u].name:(v="_css_"+(Object.keys(c).length+1),c[u]={name:v,text:u});var m=V(a,["a:rPr","a:hlinkClick","attrs","r:id"]);return void 0!==m?""+n.replace(/\s/i," ")+"":""+n.replace(/\s/i," ")+""}function C(a,r,t){var e=void 0,s=-1,o=-1;return void 0!==a?e=a["a:off"].attrs:void 0!==r?e=r["a:off"].attrs:void 0!==t&&(e=t["a:off"].attrs),void 0===e?"":(s=96*parseInt(e.x)/914400,o=96*parseInt(e.y)/914400,isNaN(s)||isNaN(o)?"":"top:"+o+"px; left:"+s+"px;")}function _(a,r,t){var e=void 0,s=-1,o=-1;return void 0!==a?e=a["a:ext"].attrs:void 0!==r?e=r["a:ext"].attrs:void 0!==t&&(e=t["a:ext"].attrs),void 0===e?"":(s=96*parseInt(e.cx)/914400,o=96*parseInt(e.cy)/914400,isNaN(s)||isNaN(o)?"":"width:"+s+"px; height:"+o+"px;")}function x(a,r,t,e,s){var o=V(a,["a:pPr","attrs","algn"]);if(void 0===o&&void 0===(o=V(r,["p:txBody","a:p","a:pPr","attrs","algn"]))&&void 0===(o=V(t,["p:txBody","a:p","a:pPr","attrs","algn"])))switch(e){case"title":case"subTitle":case"ctrTitle":o=V(s,["p:titleStyle","a:lvl1pPr","attrs","alng"]);break;default:o=V(s,["p:otherStyle","a:lvl1pPr","attrs","alng"])}if(void 0===o){if("title"==e||"subTitle"==e||"ctrTitle"==e)return"h-mid";if("sldNum"==e)return"h-right"}return"ctr"===o?"h-mid":"r"===o?"h-right":"h-left"}function D(a,r,t,e,s){var o=V(a,["p:txBody","a:bodyPr","attrs","anchor"]);return void 0===o&&void 0===(o=V(r,["p:txBody","a:bodyPr","attrs","anchor"]))&&(o=V(t,["p:txBody","a:bodyPr","attrs","anchor"])),"ctr"===o?"v-mid":"b"===o?"v-down":"v-up"}function G(a,r,t,e){var s,o,i,l=V(a,["a:rPr"]);if(void 0!==l)if("SOLID_FILL"==(s=N(l)))o=E(V(a,["a:rPr","a:solidFill"]));else if("PATTERN_FILL"==s){o=F(V(a,["a:rPr","a:pattFill"]))}else{var n=V(r,["p:style","a:fontRef"]);void 0!==n&&(o=E(n))}if(o=void 0===o||"FFF"===o?"#000":"#"+o,void 0!==V(a,["a:rPr","a:ln"])){var d=T(a,!1,"text").split(" "),h=parseInt(d[0].substring(0,d[0].indexOf("pt")))*(4/3)+"px",p=d[2];i="-"+h+" 0 "+p+", 0 "+h+" "+p+", "+h+" 0 "+p+", 0 -"+h+" "+p+";"}else i="none";return[o,i]}function S(a,r,t,e,s){var o=void 0;if(void 0!==a["a:rPr"]&&(o=parseInt(a["a:rPr"].attrs.sz)/100),isNaN(o)||void 0===o){var i=V(r,["p:txBody","a:lstStyle","a:lvl1pPr","a:defRPr","attrs","sz"]);o=parseInt(i)/100}if(isNaN(o)||void 0===o){if("title"==e||"subTitle"==e||"ctrTitle"==e)i=V(s,["p:titleStyle","a:lvl1pPr","a:defRPr","attrs","sz"]);else if("body"==e)i=V(s,["p:bodyStyle","a:lvl1pPr","a:defRPr","attrs","sz"]);else if("dt"==e||"sldNum"==e)i="1200";else if(void 0===e)i=V(s,["p:otherStyle","a:lvl1pPr","a:defRPr","attrs","sz"]);o=parseInt(i)/100}return void 0===V(a,["a:rPr","attrs","baseline"])||isNaN(o)||(o-=10),isNaN(o)?"inherit":o+"pt"}function j(a){var r="";void 0!==a["a:bottom"]&&(r+=T({"p:spPr":{"a:ln":a["a:bottom"]["a:ln"]}},!1,"shape").replace("border","border-bottom"));void 0!==a["a:top"]&&(r+=T({"p:spPr":{"a:ln":a["a:top"]["a:ln"]}},!1,"shape").replace("border","border-top"));void 0!==a["a:right"]&&(r+=T({"p:spPr":{"a:ln":a["a:right"]["a:ln"]}},!1,"shape").replace("border","border-right"));void 0!==a["a:left"]&&(r+=T({"p:spPr":{"a:ln":a["a:left"]["a:ln"]}},!1,"shape").replace("border","border-left"));return r}function T(a,r,t){var e,s;"shape"==t?(e="border: ",s=a["p:spPr"]["a:ln"]):"text"==t&&(e="",s=a["a:rPr"]["a:ln"]);var o=parseInt(V(s,["attrs","w"]))/12700;isNaN(o)||o<1?e+="1pt ":e+=o+"pt ";var i=V(s,["a:prstDash","attrs","val"]),l="0";switch(i){case"solid":e+="solid",l="0";break;case"dash":e+="dashed",l="5";break;case"dashDot":e+="dashed",l="5, 5, 1, 5";break;case"dot":e+="dotted",l="1, 5";break;case"lgDash":e+="dashed",l="10, 5";break;case"lgDashDotDot":e+="dashed",l="10, 5, 1, 5, 1, 5";break;case"sysDash":e+="dashed",l="5, 2";break;case"sysDashDot":e+="dashed",l="5, 2, 1, 5";break;case"sysDashDotDot":e+="dashed",l="5, 2, 1, 5, 1, 5";break;case"sysDot":e+="dotted",l="2, 5";break;case void 0:default:e+="solid",l="0"}if(void 0===(n=V(s,["a:solidFill","a:srgbClr","attrs","val"]))&&void 0!==(d=V(s,["a:solidFill","a:schemeClr"])))var n=Q("a:"+V(d,["attrs","val"]),void 0);if(void 0===n){var d;if(void 0!==(d=V(a,["p:style","a:lnRef","a:schemeClr"])))n=Q("a:"+V(d,["attrs","val"]),void 0);if(void 0!==n){var h=V(d,["a:shade","attrs","val"]);if(void 0!==h){h=parseInt(h)/1e5;var p=new colz.Color("#"+n);p.setLum(p.hsl.l*h),n=p.hex.replace("#","")}}}return e+=" "+(n=void 0===n?r?"none":"#000":"#"+n)+" ",r?{color:n,width:o,type:i,strokeDasharray:l}:e+";"}function z(a,r,t){var e="";if(void 0!==a){for(var s=a["a:gradFill"],o=s["a:gsLst"]["a:gs"],i=[],l=[],n=0;n=6&&(t-=6),t<1?(r-a)*t+a:t<3?r:t<4?(r-a)*(4-t)+a:a}function U(a){if(void 0!==a){var r=1;if(void 0!==a["a:srgbClr"])void 0!==(t=V(a,["a:srgbClr","a:tint","attrs","val"]))&&(r=parseInt(t)/1e5);else if(void 0!==a["a:schemeClr"]){void 0!==(t=V(a,["a:schemeClr","a:tint","attrs","val"]))&&(r=parseInt(t)/1e5)}else if(void 0!==a["a:scrgbClr"]){void 0!==(t=V(a,["a:scrgbClr","a:tint","attrs","val"]))&&(r=parseInt(t)/1e5)}else if(void 0!==a["a:prstClr"]){void 0!==(t=V(a,["a:prstClr","a:tint","attrs","val"]))&&(r=parseInt(t)/1e5)}else if(void 0!==a["a:hslClr"]){void 0!==(t=V(a,["a:hslClr","a:tint","attrs","val"]))&&(r=parseInt(t)/1e5)}else if(void 0!==a["a:sysClr"]){var t;void 0!==(t=V(a,["a:sysClr","a:tint","attrs","val"]))&&(r=parseInt(t)/1e5)}return r}}function Q(a,r){""!=n&&void 0!==n||(n=V(r,["p:sldMaster","p:clrMap","attrs"]));var t=a.substr(2);if(void 0!==n)switch(t){case"tx1":case"tx2":case"bg1":case"bg2":a="a:"+n[t]}else switch(t){case"tx1":a="a:dk1";break;case"tx2":a="a:dk2";break;case"bg1":a="a:lt1";break;case"bg2":a="a:lt2"}var e=V(l,["a:theme","a:themeElements","a:clrScheme",a]),s=V(e,["a:srgbClr","attrs","val"]);return void 0===s&&void 0!==e&&(s=V(e,["a:sysClr","attrs","lastClr"])),s}function X(a){var r=new Array;if(void 0===a)return r;if(void 0!==a["c:xVal"]){var t=new Array;Y(a["c:xVal"]["c:numRef"]["c:numCache"]["c:pt"],function(a,r){return t.push(parseFloat(a["c:v"])),""}),r.push(t),t=new Array,Y(a["c:yVal"]["c:numRef"]["c:numCache"]["c:pt"],function(a,r){return t.push(parseFloat(a["c:v"])),""}),r.push(t)}else Y(a,function(a,t){var e=new Array,s=V(a,["c:tx","c:strRef","c:strCache","c:pt","c:v"])||t,o={};return void 0!==V(a,["c:cat","c:strRef","c:strCache","c:pt"])?Y(a["c:cat"]["c:strRef"]["c:strCache"]["c:pt"],function(a,r){return o[a.attrs.idx]=a["c:v"],""}):void 0!==V(a,["c:cat","c:numRef","c:numCache","c:pt"])&&Y(a["c:cat"]["c:numRef"]["c:numCache"]["c:pt"],function(a,r){return o[a.attrs.idx]=a["c:v"],""}),void 0!==V(a,["c:val","c:numRef","c:numCache","c:pt"])&&Y(a["c:val"]["c:numRef"]["c:numCache"]["c:pt"],function(a,r){return e.push({x:a.attrs.idx,y:parseFloat(a["c:v"])}),""}),r.push({key:s,values:e,xlabels:o}),""});return r}function V(a,r){if(r.constructor!==Array)throw Error("Error of path type! path is not array.");if(void 0!==a){for(var t=r.length,e=0;e0)for(var o="",i="",l=0,n=new Array,d=0,h=new Array,p=0;pNumber(i)?(o=c,i=f,n[++d]=l,h[d]=c,l=1):c!=o&&Number(f)").attr({class:"slides-loadnig-msg",style:"display:block; color:blue; font-size:20px; width:50%; margin:0 auto;"}).html("Loading...")),f.slideMode&&(jQuery().divs2slides||jQuery.getScript("./js/divs2slides.js")),!1!==f.jsZipV2&&(jQuery.getScript(f.jsZipV2),"yes"!==localStorage.getItem("isPPTXjsReLoaded")&&(localStorage.setItem("isPPTXjsReLoaded","yes"),location.reload())),f.keyBoardShortCut&&r(document).bind("keydown",function(a){a.preventDefault();var t=a.keyCode;console.log(t,o),116!=t||p||(p=!0,r("#"+s+" .slide").hide(),setTimeout(function(){var a=f.slideModeConfig;r(".slides-loadnig-msg").remove(),r("#"+s).divs2slides({first:a.first,nav:a.nav,showPlayPauseBtn:f.showPlayPauseBtn,navTxtColor:a.navTxtColor,keyBoardShortCut:a.keyBoardShortCut,showSlideNum:a.showSlideNum,showTotalSlideNum:a.showTotalSlideNum,autoSlide:a.autoSlide,randomAutoSlide:a.randomAutoSlide,loop:a.loop,background:a.background,transition:a.transition,transitionTime:a.transitionTime});var t=f.slidesScale,e="";if(""!=t){var o=parseInt(t)/100;e="transform:scale("+o+"); transform-origin:top"}r("#"+s+" .slide").height();r("#all_slides_warpper").attr({style:e})},1500))}),""!=f.pptxFileUrl?JSZipUtils.getBinaryContent(f.pptxFileUrl,function(a,r){var t=new Blob([r]),e=f.pptxFileUrl.split(".");e.pop(),t.name=e[0],FileReaderJS.setupBlob(t,{readAsDefault:"ArrayBuffer",on:{load:function(a,r){u(a.target.result)}}})}):r(".slides-loadnig-msg").remove(),""!=f.fileInputId&&r("#"+f.fileInputId).on("change",function(a){e.html("");var r=a.target.files[0];"application/vnd.openxmlformats-officedocument.presentationml.presentation"==r.type?FileReaderJS.setupBlob(r,{readAsDefault:"ArrayBuffer",on:{load:function(a,r){u(a.target.result)}}}):alert("This is not pptx file")});var ea=function(a){a.slice().sort(function(a,r){return r[1].length-a[1].length});return{format:function(r){var t="";return jQuery.each(a,function(){var a=this[0];if(parseInt(a)>0)for(;r>=a;r-=a)t+=this[1];else t=t.replace(a,this[1])}),t}}}([[1e3,""],[400,"ืช"],[300,"ืฉ"],[200,"ืจ"],[100,"ืง"],[90,"ืฆ"],[80,"ืค"],[70,"ืข"],[60,"ืก"],[50,"ื "],[40,"ืž"],[30,"ืœ"],[20,"ื›"],[10,"ื™"],[9,"ื˜"],[8,"ื—"],[7,"ื–"],[6,"ื•"],[5,"ื”"],[4,"ื“"],[3,"ื’"],[2,"ื‘"],[1,"ื"],[/ื™ื”/,"ื˜ืดื•"],[/ื™ื•/,"ื˜ืดื–"],[/([ื-ืช])([ื-ืช])$/,"$1ืด$2"],[/^([ื-ืช])$/,"$1ืณ"]]);function sa(a,r){a=Number(a)-1;var t="";return"upperCase"==r?t=((a/26>=1?String.fromCharCode(a/26+64):"")+String.fromCharCode(a%26+65)).toUpperCase():"lowerCase"==r&&(t=((a/26>=1?String.fromCharCode(a/26+64):"")+String.fromCharCode(a%26+65)).toLowerCase()),t}function oa(a){for(var r,t="",e="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",s=new Uint8Array(a),o=s.byteLength,i=o%3,l=o-i,n=0;n>18]+e[(258048&r)>>12]+e[(4032&r)>>6]+e[63&r];return 1==i?t+=e[(252&(r=s[l]))>>2]+e[(3&r)<<4]+"==":2==i&&(t+=e[(64512&(r=s[l]<<8|s[l+1]))>>10]+e[(1008&r)>>4]+e[(15&r)<<2]+"="),t}function ia(a){return a.substr(2+(~-a.lastIndexOf(".")>>>0))}function la(a,r){"use strict";function t(){for(var r=[];a[i];)if(a.charCodeAt(i)==n){if(a.charCodeAt(i+1)===c)return i=a.indexOf(d,i),i+1&&(i+=1),r;if(a.charCodeAt(i+1)===f){if(a.charCodeAt(i+2)==p){for(;-1!==i&&(a.charCodeAt(i)!==h||a.charCodeAt(i-1)!=p||a.charCodeAt(i-2)!=p||-1==i);)i=a.indexOf(d,i+1);-1===i&&(i=a.length)}else for(i+=2;a.charCodeAt(i)!==h&&a[i];)i++;i++;continue}var t=s();r.push(t)}else{var e=(void 0,o=i,-2===(i=a.indexOf(l,i)-1)&&(i=a.length),a.slice(o,i+1));e.trim().length>0&&r.push(e),i++}var o;return r}function e(){for(var r=i;-1===v.indexOf(a[i])&&a[i];)i++;return a.slice(r,i)}function s(){var r,s,o={};i++,o.tagName=e();for(var l=!1;a.charCodeAt(i)!==h&&a[i];){var n=a.charCodeAt(i);if(n>64&&91>n||n>96&&123>n){for(var d=e(),p=a.charCodeAt(i);p&&p!==u&&p!==L&&!(p>64&&91>p||p>96&&123>p)&&p!==h;)i++,p=a.charCodeAt(i);if(l||(o.attributes={},l=!0),p===u||p===L){var f=(void 0,void 0,r=a[i],s=++i,i=a.indexOf(r,s),a.slice(s,i));if(-1===i)return o}else f=null,i--;o.attributes[d]=f}i++}if(a.charCodeAt(i-1)!==c)if("script"==o.tagName){var v=i+1;i=a.indexOf("<\/script>",i),o.children=[a.slice(v,i-1)],i+=8}else if("style"==o.tagName){v=i+1;i=a.indexOf("",i),o.children=[a.slice(v,i-1)],i+=7}else-1==m.indexOf(o.tagName)&&(i++,o.children=t());else i++;return o}var o,i=(r=r||{}).pos||0,l="<",n="<".charCodeAt(0),d=">",h=">".charCodeAt(0),p="-".charCodeAt(0),c="/".charCodeAt(0),f="!".charCodeAt(0),u="'".charCodeAt(0),L='"'.charCodeAt(0),v="\n\t>/= ",m=["img","br","input","meta","link"],g=null;if(void 0!==r.attrValue){r.attrName=r.attrName||"id";for(g=[];-1!==(void 0,o=new RegExp("\\s"+r.attrName+"\\s*=['\"]"+r.attrValue+"['\"]").exec(a),i=o?o.index:-1);)i=a.lastIndexOf("<",i),-1!==i&&g.push(s()),a=a.substr(i),i=0}else g=r.parseNode?s():t();return r.filter&&(g=la.filter(g,r.filter)),r.simplify&&(g=la.simplify(g)),g.pos=i,g}h=1;la.simplify=function(a){var r={};if(void 0===a)return{};if(1===a.length&&"string"==typeof a[0])return a[0];a.forEach(function(a){if("object"==typeof a){r[a.tagName]||(r[a.tagName]=[]);var t=la.simplify(a.children||[]);r[a.tagName].push(t),a.attributes&&(t.attrs=a.attributes),void 0===t.attrs?t.attrs={order:h}:t.attrs.order=h,h++}});for(var t in r)1==r[t].length&&(r[t]=r[t][0]);return r},la.filter=function(a,r){var t=[];return a.forEach(function(a){if("object"==typeof a&&r(a)&&t.push(a),a.children){var e=la.filter(a.children,r);t=t.concat(e)}}),t},la.stringify=function(a){function r(a){if(a)for(var r=0;r"}var e="";return r(a),e},la.toContentString=function(a){if(Array.isArray(a)){var r="";return a.forEach(function(a){r=(r+=" "+la.toContentString(a)).trim()}),r}return"object"==typeof a?la.toContentString(a.children):" "+a},la.getElementById=function(a,r,t){var e=la(a,{attrValue:r,simplify:t});return t?e:e[0]},la.getElementsByClassName=function(a,r,t){return la(a,{attrName:"class",attrValue:"[a-zA-Z0-9-s ]*"+r+"[a-zA-Z0-9-s ]*",simplify:t})},la.parseStream=function(a,r){if("function"==typeof r&&(cb=r,r=0),"string"==typeof r&&(r=r.length+2),"string"==typeof a){var t=require("fs");a=t.createReadStream(a,{start:r}),r=0}var e=r,s="";return a.on("data",function(r){0,s+=r;for(var t=0;;){e=s.indexOf("<",e)+1;var o=la(s,{pos:e,parseNode:!0});if((e=o.pos)>s.length-1||t>e)return void(t&&(s=s.slice(t),e=0,t=0));a.emit("xml",o),t=e}s=s.slice(e),e=0}),a.on("end",function(){console.log("end")}),a},"object"==typeof module&&(module.exports=la)},t=function(){return function a(r,t,e){function s(i,l){if(!t[i]){if(!r[i]){var n="function"==typeof require&&require;if(!l&&n)return n(i,!0);if(o)return o(i,!0);throw new Error("Cannot find module '"+i+"'")}var d=t[i]={exports:{}};r[i][0].call(d.exports,function(a){var t=r[i][1][a];return s(t||a)},d,d.exports,a,r,t,e)}return t[i].exports}for(var o="function"==typeof require&&require,i=0;i1?(r=a[0],t=a[1],e=a[2]):(r=a[0][0],t=a[0][1],e=a[0][2]),"#"+l(r)+l(t)+l(e)},p.rgbToHsl=function(){var a,r,t,e,s,o,i,l,n,h;if("number"==typeof(a=arguments)[0]?(r=a[0],t=a[1],e=a[2]):(r=a[0][0],t=a[0][1],e=a[0][2]),r/=255,t/=255,e/=255,i=((n=Math.max(r,t,e))+(h=Math.min(r,t,e)))/2,n===h)s=o=0;else{switch(l=n-h,o=i>.5?l/(2-n-h):l/(n+h),n){case r:s=(t-e)/l+(t1&&(t-=1),t<1/6?a+6*(r-a)*t:t<.5?r:t<2/3?a+(r-a)*(2/3-t)*6:a},p.hslToRgb=function(){var a,r,t,e,s,o,i,l,n;return"number"==typeof(a=arguments)[0]?(s=a[0]/360,o=a[1]/100,i=a[2]/100):(s=a[0][0]/360,o=a[0][1]/100,i=a[0][2]/100),0===o?r=t=e=i:(n=2*i-(l=i<.5?i*(1+o):i+o-i*o),r=p.hue2rgb(n,l,s+1/3),t=p.hue2rgb(n,l,s),e=p.hue2rgb(n,l,s-1/3)),[d(255*r),d(255*t),d(255*e)]},p.rgbToHsb=function(a,r,t){var e,s,o,i,l,n;if(a/=255,r/=255,t/=255,l=e=Math.max(a,r,t),n=e-(s=Math.min(a,r,t)),i=0===e?0:n/e,e===s)o=0;else{switch(e){case a:o=(r-t)/n+(r + + + SheetJS Live Grid Demo + + + + + + + + + + + + + +
+
+
Drop a file here
+

Choose a worksheet:

+
+
+ + + + + + + + + + diff --git a/example/pages/include/SheetJS/xlsx.full.min.js b/example/pages/include/SheetJS/xlsx.full.min.js new file mode 100644 index 0000000..d007416 --- /dev/null +++ b/example/pages/include/SheetJS/xlsx.full.min.js @@ -0,0 +1,24 @@ +/* xlsx.js (C) 2013-present SheetJS -- http://sheetjs.com */ +(function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd){JSZip=e();define([],e)}else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof $&&$.global?f=$.global:"undefined"!=typeof self&&(f=self),f.JSZip=e()}})(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o>2;enc2=(chr1&3)<<4|chr2>>4;enc3=(chr2&15)<<2|chr3>>6;enc4=chr3&63;if(isNaN(chr2)){enc3=enc4=64}else if(isNaN(chr3)){enc4=64}output=output+_keyStr.charAt(enc1)+_keyStr.charAt(enc2)+_keyStr.charAt(enc3)+_keyStr.charAt(enc4)}return output};exports.decode=function(input,utf8){var output="";var chr1,chr2,chr3;var enc1,enc2,enc3,enc4;var i=0;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");while(i>4;chr2=(enc2&15)<<4|enc3>>2;chr3=(enc3&3)<<6|enc4;output=output+String.fromCharCode(chr1);if(enc3!=64){output=output+String.fromCharCode(chr2)}if(enc4!=64){output=output+String.fromCharCode(chr3)}}return output}},{}],2:[function(_dereq_,module,exports){"use strict";function CompressedObject(){this.compressedSize=0;this.uncompressedSize=0;this.crc32=0;this.compressionMethod=null;this.compressedContent=null}CompressedObject.prototype={getContent:function(){return null},getCompressedContent:function(){return null}};module.exports=CompressedObject},{}],3:[function(_dereq_,module,exports){"use strict";exports.STORE={magic:"\0\0",compress:function(content){return content},uncompress:function(content){return content},compressInputType:null,uncompressInputType:null};exports.DEFLATE=_dereq_("./flate")},{"./flate":8}],4:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var table=[0,1996959894,3993919788,2567524794,124634137,1886057615,3915621685,2657392035,249268274,2044508324,3772115230,2547177864,162941995,2125561021,3887607047,2428444049,498536548,1789927666,4089016648,2227061214,450548861,1843258603,4107580753,2211677639,325883990,1684777152,4251122042,2321926636,335633487,1661365465,4195302755,2366115317,997073096,1281953886,3579855332,2724688242,1006888145,1258607687,3524101629,2768942443,901097722,1119000684,3686517206,2898065728,853044451,1172266101,3705015759,2882616665,651767980,1373503546,3369554304,3218104598,565507253,1454621731,3485111705,3099436303,671266974,1594198024,3322730930,2970347812,795835527,1483230225,3244367275,3060149565,1994146192,31158534,2563907772,4023717930,1907459465,112637215,2680153253,3904427059,2013776290,251722036,2517215374,3775830040,2137656763,141376813,2439277719,3865271297,1802195444,476864866,2238001368,4066508878,1812370925,453092731,2181625025,4111451223,1706088902,314042704,2344532202,4240017532,1658658271,366619977,2362670323,4224994405,1303535960,984961486,2747007092,3569037538,1256170817,1037604311,2765210733,3554079995,1131014506,879679996,2909243462,3663771856,1141124467,855842277,2852801631,3708648649,1342533948,654459306,3188396048,3373015174,1466479909,544179635,3110523913,3462522015,1591671054,702138776,2966460450,3352799412,1504918807,783551873,3082640443,3233442989,3988292384,2596254646,62317068,1957810842,3939845945,2647816111,81470997,1943803523,3814918930,2489596804,225274430,2053790376,3826175755,2466906013,167816743,2097651377,4027552580,2265490386,503444072,1762050814,4150417245,2154129355,426522225,1852507879,4275313526,2312317920,282753626,1742555852,4189708143,2394877945,397917763,1622183637,3604390888,2714866558,953729732,1340076626,3518719985,2797360999,1068828381,1219638859,3624741850,2936675148,906185462,1090812512,3747672003,2825379669,829329135,1181335161,3412177804,3160834842,628085408,1382605366,3423369109,3138078467,570562233,1426400815,3317316542,2998733608,733239954,1555261956,3268935591,3050360625,752459403,1541320221,2607071920,3965973030,1969922972,40735498,2617837225,3943577151,1913087877,83908371,2512341634,3803740692,2075208622,213261112,2463272603,3855990285,2094854071,198958881,2262029012,4057260610,1759359992,534414190,2176718541,4139329115,1873836001,414664567,2282248934,4279200368,1711684554,285281116,2405801727,4167216745,1634467795,376229701,2685067896,3608007406,1308918612,956543938,2808555105,3495958263,1231636301,1047427035,2932959818,3654703836,1088359270,936918e3,2847714899,3736837829,1202900863,817233897,3183342108,3401237130,1404277552,615818150,3134207493,3453421203,1423857449,601450431,3009837614,3294710456,1567103746,711928724,3020668471,3272380065,1510334235,755167117];module.exports=function crc32(input,crc){if(typeof input==="undefined"||!input.length){return 0}var isArray=utils.getTypeOf(input)!=="string";if(typeof crc=="undefined"){crc=0}var x=0;var y=0;var b=0;crc=crc^-1;for(var i=0,iTop=input.length;i>>8^x}return crc^-1}},{"./utils":21}],5:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");function DataReader(data){this.data=null;this.length=0;this.index=0}DataReader.prototype={checkOffset:function(offset){this.checkIndex(this.index+offset)},checkIndex:function(newIndex){if(this.length=this.index;i--){result=(result<<8)+this.byteAt(i)}this.index+=size;return result},readString:function(size){return utils.transformTo("string",this.readData(size))},readData:function(size){},lastIndexOfSignature:function(sig){},readDate:function(){var dostime=this.readInt(4);return new Date((dostime>>25&127)+1980,(dostime>>21&15)-1,dostime>>16&31,dostime>>11&31,dostime>>5&63,(dostime&31)<<1)}};module.exports=DataReader},{"./utils":21}],6:[function(_dereq_,module,exports){"use strict";exports.base64=false;exports.binary=false;exports.dir=false;exports.createFolders=false;exports.date=null;exports.compression=null;exports.comment=null},{}],7:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");exports.string2binary=function(str){return utils.string2binary(str)};exports.string2Uint8Array=function(str){return utils.transformTo("uint8array",str)};exports.uint8Array2String=function(array){return utils.transformTo("string",array)};exports.string2Blob=function(str){var buffer=utils.transformTo("arraybuffer",str);return utils.arrayBuffer2Blob(buffer)};exports.arrayBuffer2Blob=function(buffer){return utils.arrayBuffer2Blob(buffer)};exports.transformTo=function(outputType,input){return utils.transformTo(outputType,input)};exports.getTypeOf=function(input){return utils.getTypeOf(input)};exports.checkSupport=function(type){return utils.checkSupport(type)};exports.MAX_VALUE_16BITS=utils.MAX_VALUE_16BITS;exports.MAX_VALUE_32BITS=utils.MAX_VALUE_32BITS;exports.pretty=function(str){return utils.pretty(str)};exports.findCompression=function(compressionMethod){return utils.findCompression(compressionMethod)};exports.isRegExp=function(object){return utils.isRegExp(object)}},{"./utils":21}],8:[function(_dereq_,module,exports){"use strict";var USE_TYPEDARRAY=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Uint32Array!=="undefined";var pako=_dereq_("pako");exports.uncompressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.compressInputType=USE_TYPEDARRAY?"uint8array":"array";exports.magic="\b\0";exports.compress=function(input){return pako.deflateRaw(input)};exports.uncompress=function(input){return pako.inflateRaw(input)}},{pako:24}],9:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");function JSZip(data,options){if(!(this instanceof JSZip))return new JSZip(data,options);this.files={};this.comment=null;this.root="";if(data){this.load(data,options)}this.clone=function(){var newObj=new JSZip;for(var i in this){if(typeof this[i]!=="function"){newObj[i]=this[i]}}return newObj}}JSZip.prototype=_dereq_("./object");JSZip.prototype.load=_dereq_("./load");JSZip.support=_dereq_("./support");JSZip.defaults=_dereq_("./defaults");JSZip.utils=_dereq_("./deprecatedPublicUtils");JSZip.base64={encode:function(input){return base64.encode(input)},decode:function(input){return base64.decode(input)}};JSZip.compressions=_dereq_("./compressions");module.exports=JSZip},{"./base64":1,"./compressions":3,"./defaults":6,"./deprecatedPublicUtils":7,"./load":10,"./object":13,"./support":17}],10:[function(_dereq_,module,exports){"use strict";var base64=_dereq_("./base64");var ZipEntries=_dereq_("./zipEntries");module.exports=function(data,options){var files,zipEntries,i,input;options=options||{};if(options.base64){data=base64.decode(data)}zipEntries=new ZipEntries(data,options);files=zipEntries.files;for(i=0;i>>8}return hex};var extend=function(){var result={},i,attr;for(i=0;i0?path.substring(0,lastSlash):""};var folderAdd=function(name,createFolders){if(name.slice(-1)!="/"){name+="/"}createFolders=typeof createFolders!=="undefined"?createFolders:false;if(!this.files[name]){fileAdd.call(this,name,null,{dir:true,createFolders:createFolders})}return this.files[name]};var generateCompressedObjectFrom=function(file,compression){var result=new CompressedObject,content;if(file._data instanceof CompressedObject){result.uncompressedSize=file._data.uncompressedSize;result.crc32=file._data.crc32;if(result.uncompressedSize===0||file.dir){compression=compressions["STORE"];result.compressedContent="";result.crc32=0}else if(file._data.compressionMethod===compression.magic){result.compressedContent=file._data.getCompressedContent()}else{content=file._data.getContent();result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}}else{content=getBinaryData(file);if(!content||content.length===0||file.dir){compression=compressions["STORE"];content=""}result.uncompressedSize=content.length;result.crc32=crc32(content);result.compressedContent=compression.compress(utils.transformTo(compression.compressInputType,content))}result.compressedSize=result.compressedContent.length;result.compressionMethod=compression.magic;return result};var generateZipParts=function(name,file,compressedObject,offset){var data=compressedObject.compressedContent,utfEncodedFileName=utils.transformTo("string",utf8.utf8encode(file.name)),comment=file.comment||"",utfEncodedComment=utils.transformTo("string",utf8.utf8encode(comment)),useUTF8ForFileName=utfEncodedFileName.length!==file.name.length,useUTF8ForComment=utfEncodedComment.length!==comment.length,o=file.options,dosTime,dosDate,extraFields="",unicodePathExtraField="",unicodeCommentExtraField="",dir,date;if(file._initialMetadata.dir!==file.dir){dir=file.dir}else{dir=o.dir}if(file._initialMetadata.date!==file.date){date=file.date}else{date=o.date}dosTime=date.getHours();dosTime=dosTime<<6;dosTime=dosTime|date.getMinutes();dosTime=dosTime<<5;dosTime=dosTime|date.getSeconds()/2;dosDate=date.getFullYear()-1980;dosDate=dosDate<<4;dosDate=dosDate|date.getMonth()+1;dosDate=dosDate<<5;dosDate=dosDate|date.getDate();if(useUTF8ForFileName){unicodePathExtraField=decToHex(1,1)+decToHex(crc32(utfEncodedFileName),4)+utfEncodedFileName;extraFields+="up"+decToHex(unicodePathExtraField.length,2)+unicodePathExtraField}if(useUTF8ForComment){unicodeCommentExtraField=decToHex(1,1)+decToHex(this.crc32(utfEncodedComment),4)+utfEncodedComment;extraFields+="uc"+decToHex(unicodeCommentExtraField.length,2)+unicodeCommentExtraField}var header="";header+="\n\0";header+=useUTF8ForFileName||useUTF8ForComment?"\0\b":"\0\0";header+=compressedObject.compressionMethod;header+=decToHex(dosTime,2);header+=decToHex(dosDate,2);header+=decToHex(compressedObject.crc32,4);header+=decToHex(compressedObject.compressedSize,4);header+=decToHex(compressedObject.uncompressedSize,4);header+=decToHex(utfEncodedFileName.length,2);header+=decToHex(extraFields.length,2);var fileRecord=signature.LOCAL_FILE_HEADER+header+utfEncodedFileName+extraFields;var dirRecord=signature.CENTRAL_FILE_HEADER+"\0"+header+decToHex(utfEncodedComment.length,2)+"\0\0"+"\0\0"+(dir===true?"\0\0\0":"\0\0\0\0")+decToHex(offset,4)+utfEncodedFileName+extraFields+utfEncodedComment;return{fileRecord:fileRecord,dirRecord:dirRecord,compressedObject:compressedObject}};var out={load:function(stream,options){throw new Error("Load method is not defined. Is the file jszip-load.js included ?")},filter:function(search){var result=[],filename,relativePath,file,fileClone;for(filename in this.files){if(!this.files.hasOwnProperty(filename)){continue}file=this.files[filename];fileClone=new ZipObject(file.name,file._data,extend(file.options));relativePath=filename.slice(this.root.length,filename.length);if(filename.slice(0,this.root.length)===this.root&&search(relativePath,fileClone)){result.push(fileClone)}}return result},file:function(name,data,o){if(arguments.length===1){if(utils.isRegExp(name)){var regexp=name;return this.filter(function(relativePath,file){return!file.dir&®exp.test(relativePath)})}else{return this.filter(function(relativePath,file){return!file.dir&&relativePath===name})[0]||null}}else{name=this.root+name;fileAdd.call(this,name,data,o)}return this},folder:function(arg){if(!arg){return this}if(utils.isRegExp(arg)){return this.filter(function(relativePath,file){return file.dir&&arg.test(relativePath)})}var name=this.root+arg;var newFolder=folderAdd.call(this,name);var ret=this.clone();ret.root=newFolder.name;return ret},remove:function(name){name=this.root+name;var file=this.files[name];if(!file){if(name.slice(-1)!="/"){name+="/"}file=this.files[name]}if(file&&!file.dir){delete this.files[name]}else{var kids=this.filter(function(relativePath,file){return file.name.slice(0,name.length)===name});for(var i=0;i=0;--i){if(this.data[i]===sig0&&this.data[i+1]===sig1&&this.data[i+2]===sig2&&this.data[i+3]===sig3){return i}}return-1};Uint8ArrayReader.prototype.readData=function(size){this.checkOffset(size);if(size===0){return new Uint8Array(0)}var result=this.data.subarray(this.index,this.index+size);this.index+=size;return result};module.exports=Uint8ArrayReader},{"./dataReader":5}],19:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var Uint8ArrayWriter=function(length){this.data=new Uint8Array(length);this.index=0};Uint8ArrayWriter.prototype={append:function(input){if(input.length!==0){input=utils.transformTo("uint8array",input);this.data.set(input,this.index);this.index+=input.length}},finalize:function(){return this.data}};module.exports=Uint8ArrayWriter},{"./utils":21}],20:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("./utils");var support=_dereq_("./support");var nodeBuffer=_dereq_("./nodeBuffer");var _utf8len=new Array(256);for(var i=0;i<256;i++){_utf8len[i]=i>=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;var string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};var utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max};var buf2string=function(buf){var str,i,out,c,c_len;var len=buf.length;var utf16buf=new Array(len*2);for(out=0,i=0;i4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}if(utf16buf.length!==out){if(utf16buf.subarray){utf16buf=utf16buf.subarray(0,out)}else{utf16buf.length=out}}return utils.applyFromCharCode(utf16buf)};exports.utf8encode=function utf8encode(str){if(support.nodebuffer){return nodeBuffer(str,"utf-8")}return string2buf(str)};exports.utf8decode=function utf8decode(buf){if(support.nodebuffer){return utils.transformTo("nodebuffer",buf).toString("utf-8")}buf=utils.transformTo(support.uint8array?"uint8array":"array",buf);var result=[],k=0,len=buf.length,chunk=65536;while(k1){try{if(type==="array"||type==="nodebuffer"){result.push(String.fromCharCode.apply(null,array.slice(k,Math.min(k+chunk,len))))}else{result.push(String.fromCharCode.apply(null,array.subarray(k,Math.min(k+chunk,len))))}k+=chunk}catch(e){chunk=Math.floor(chunk/2)}}return result.join("")}exports.applyFromCharCode=arrayLikeToString;function arrayLikeToArrayLike(arrayFrom,arrayTo){for(var i=0;i1){throw new Error("Multi-volumes zip are not supported")}},readLocalFiles:function(){var i,file;for(i=0;i0){opt.windowBits=-opt.windowBits}else if(opt.gzip&&opt.windowBits>0&&opt.windowBits<16){opt.windowBits+=16}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_deflate.deflateInit2(this.strm,opt.level,opt.method,opt.windowBits,opt.memLevel,opt.strategy);if(status!==Z_OK){throw new Error(msg[status])}if(opt.header){zlib_deflate.deflateSetHeader(this.strm,opt.header)}};Deflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?Z_FINISH:Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.string2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_deflate.deflate(strm,_mode);if(status!==Z_STREAM_END&&status!==Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.avail_out===0||strm.avail_in===0&&_mode===Z_FINISH){if(this.options.to==="string"){this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output,strm.next_out)))}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}while((strm.avail_in>0||strm.avail_out===0)&&status!==Z_STREAM_END);if(_mode===Z_FINISH){status=zlib_deflate.deflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===Z_OK}return true};Deflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Deflate.prototype.onEnd=function(status){if(status===Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function deflate(input,options){var deflator=new Deflate(options);deflator.push(input,true);if(deflator.err){throw deflator.msg}return deflator.result}function deflateRaw(input,options){options=options||{};options.raw=true;return deflate(input,options)}function gzip(input,options){options=options||{};options.gzip=true;return deflate(input,options)}exports.Deflate=Deflate;exports.deflate=deflate;exports.deflateRaw=deflateRaw;exports.gzip=gzip},{"./utils/common":27,"./utils/strings":28,"./zlib/deflate.js":32,"./zlib/messages":37,"./zlib/zstream":39}],26:[function(_dereq_,module,exports){"use strict";var zlib_inflate=_dereq_("./zlib/inflate.js");var utils=_dereq_("./utils/common");var strings=_dereq_("./utils/strings");var c=_dereq_("./zlib/constants");var msg=_dereq_("./zlib/messages");var zstream=_dereq_("./zlib/zstream");var gzheader=_dereq_("./zlib/gzheader");var Inflate=function(options){this.options=utils.assign({chunkSize:16384,windowBits:0,to:""},options||{});var opt=this.options;if(opt.raw&&opt.windowBits>=0&&opt.windowBits<16){opt.windowBits=-opt.windowBits;if(opt.windowBits===0){opt.windowBits=-15}}if(opt.windowBits>=0&&opt.windowBits<16&&!(options&&options.windowBits)){opt.windowBits+=32}if(opt.windowBits>15&&opt.windowBits<48){if((opt.windowBits&15)===0){opt.windowBits|=15}}this.err=0;this.msg="";this.ended=false;this.chunks=[];this.strm=new zstream;this.strm.avail_out=0;var status=zlib_inflate.inflateInit2(this.strm,opt.windowBits);if(status!==c.Z_OK){throw new Error(msg[status])}this.header=new gzheader;zlib_inflate.inflateGetHeader(this.strm,this.header)};Inflate.prototype.push=function(data,mode){var strm=this.strm;var chunkSize=this.options.chunkSize;var status,_mode;var next_out_utf8,tail,utf8str;if(this.ended){return false}_mode=mode===~~mode?mode:mode===true?c.Z_FINISH:c.Z_NO_FLUSH;if(typeof data==="string"){strm.input=strings.binstring2buf(data)}else{strm.input=data}strm.next_in=0;strm.avail_in=strm.input.length;do{if(strm.avail_out===0){strm.output=new utils.Buf8(chunkSize);strm.next_out=0;strm.avail_out=chunkSize}status=zlib_inflate.inflate(strm,c.Z_NO_FLUSH);if(status!==c.Z_STREAM_END&&status!==c.Z_OK){this.onEnd(status);this.ended=true;return false}if(strm.next_out){if(strm.avail_out===0||status===c.Z_STREAM_END||strm.avail_in===0&&_mode===c.Z_FINISH){if(this.options.to==="string"){next_out_utf8=strings.utf8border(strm.output,strm.next_out);tail=strm.next_out-next_out_utf8;utf8str=strings.buf2string(strm.output,next_out_utf8);strm.next_out=tail;strm.avail_out=chunkSize-tail;if(tail){utils.arraySet(strm.output,strm.output,next_out_utf8,tail,0)}this.onData(utf8str)}else{this.onData(utils.shrinkBuf(strm.output,strm.next_out))}}}}while(strm.avail_in>0&&status!==c.Z_STREAM_END);if(status===c.Z_STREAM_END){_mode=c.Z_FINISH}if(_mode===c.Z_FINISH){status=zlib_inflate.inflateEnd(this.strm);this.onEnd(status);this.ended=true;return status===c.Z_OK}return true};Inflate.prototype.onData=function(chunk){this.chunks.push(chunk)};Inflate.prototype.onEnd=function(status){if(status===c.Z_OK){if(this.options.to==="string"){this.result=this.chunks.join("")}else{this.result=utils.flattenChunks(this.chunks)}}this.chunks=[];this.err=status;this.msg=this.strm.msg};function inflate(input,options){var inflator=new Inflate(options);inflator.push(input,true);if(inflator.err){throw inflator.msg}return inflator.result}function inflateRaw(input,options){options=options||{};options.raw=true;return inflate(input,options)}exports.Inflate=Inflate;exports.inflate=inflate;exports.inflateRaw=inflateRaw;exports.ungzip=inflate},{"./utils/common":27,"./utils/strings":28,"./zlib/constants":30,"./zlib/gzheader":33,"./zlib/inflate.js":35,"./zlib/messages":37,"./zlib/zstream":39}],27:[function(_dereq_,module,exports){"use strict";var TYPED_OK=typeof Uint8Array!=="undefined"&&typeof Uint16Array!=="undefined"&&typeof Int32Array!=="undefined";exports.assign=function(obj){var sources=Array.prototype.slice.call(arguments,1);while(sources.length){var source=sources.shift();if(!source){continue}if(typeof source!=="object"){throw new TypeError(source+"must be non-object")}for(var p in source){if(source.hasOwnProperty(p)){obj[p]=source[p]}}}return obj};exports.shrinkBuf=function(buf,size){if(buf.length===size){return buf}if(buf.subarray){return buf.subarray(0,size)}buf.length=size;return buf};var fnTyped={arraySet:function(dest,src,src_offs,len,dest_offs){if(src.subarray&&dest.subarray){dest.set(src.subarray(src_offs,src_offs+len),dest_offs);return}for(var i=0;i=252?6:i>=248?5:i>=240?4:i>=224?3:i>=192?2:1}_utf8len[254]=_utf8len[254]=1;exports.string2buf=function(str){var buf,c,c2,m_pos,i,str_len=str.length,buf_len=0;for(m_pos=0;m_pos>>6;buf[i++]=128|c&63}else if(c<65536){buf[i++]=224|c>>>12;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}else{buf[i++]=240|c>>>18;buf[i++]=128|c>>>12&63;buf[i++]=128|c>>>6&63;buf[i++]=128|c&63}}return buf};function buf2binstring(buf,len){if(len<65537){if(buf.subarray&&STR_APPLY_UIA_OK||!buf.subarray&&STR_APPLY_OK){return String.fromCharCode.apply(null,utils.shrinkBuf(buf,len))}}var result="";for(var i=0;i4){utf16buf[out++]=65533;i+=c_len-1;continue}c&=c_len===2?31:c_len===3?15:7;while(c_len>1&&i1){utf16buf[out++]=65533;continue}if(c<65536){utf16buf[out++]=c}else{c-=65536;utf16buf[out++]=55296|c>>10&1023;utf16buf[out++]=56320|c&1023}}return buf2binstring(utf16buf,out)};exports.utf8border=function(buf,max){var pos;max=max||buf.length;if(max>buf.length){max=buf.length}pos=max-1;while(pos>=0&&(buf[pos]&192)===128){pos--}if(pos<0){return max}if(pos===0){return max}return pos+_utf8len[buf[pos]]>max?pos:max}},{"./common":27}],29:[function(_dereq_,module,exports){"use strict";function adler32(adler,buf,len,pos){var s1=adler&65535|0,s2=adler>>>16&65535|0,n=0;while(len!==0){n=len>2e3?2e3:len;len-=n;do{s1=s1+buf[pos++]|0;s2=s2+s1|0}while(--n);s1%=65521;s2%=65521}return s1|s2<<16|0}module.exports=adler32},{}],30:[function(_dereq_,module,exports){module.exports={Z_NO_FLUSH:0,Z_PARTIAL_FLUSH:1,Z_SYNC_FLUSH:2,Z_FULL_FLUSH:3,Z_FINISH:4,Z_BLOCK:5,Z_TREES:6,Z_OK:0,Z_STREAM_END:1,Z_NEED_DICT:2,Z_ERRNO:-1,Z_STREAM_ERROR:-2,Z_DATA_ERROR:-3,Z_BUF_ERROR:-5,Z_NO_COMPRESSION:0,Z_BEST_SPEED:1,Z_BEST_COMPRESSION:9,Z_DEFAULT_COMPRESSION:-1,Z_FILTERED:1,Z_HUFFMAN_ONLY:2,Z_RLE:3,Z_FIXED:4,Z_DEFAULT_STRATEGY:0,Z_BINARY:0,Z_TEXT:1,Z_UNKNOWN:2,Z_DEFLATED:8}},{}],31:[function(_dereq_,module,exports){"use strict";function makeTable(){var c,table=[];for(var n=0;n<256;n++){c=n;for(var k=0;k<8;k++){c=c&1?3988292384^c>>>1:c>>>1}table[n]=c}return table}var crcTable=makeTable();function crc32(crc,buf,len,pos){var t=crcTable,end=pos+len;crc=crc^-1;for(var i=pos;i>>8^t[(crc^buf[i])&255]}return crc^-1}module.exports=crc32},{}],32:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var trees=_dereq_("./trees");var adler32=_dereq_("./adler32");var crc32=_dereq_("./crc32");var msg=_dereq_("./messages");var Z_NO_FLUSH=0;var Z_PARTIAL_FLUSH=1;var Z_FULL_FLUSH=3;var Z_FINISH=4;var Z_BLOCK=5;var Z_OK=0;var Z_STREAM_END=1;var Z_STREAM_ERROR=-2;var Z_DATA_ERROR=-3;var Z_BUF_ERROR=-5;var Z_DEFAULT_COMPRESSION=-1;var Z_FILTERED=1;var Z_HUFFMAN_ONLY=2;var Z_RLE=3;var Z_FIXED=4;var Z_DEFAULT_STRATEGY=0;var Z_UNKNOWN=2;var Z_DEFLATED=8;var MAX_MEM_LEVEL=9;var MAX_WBITS=15;var DEF_MEM_LEVEL=8;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var MIN_MATCH=3;var MAX_MATCH=258;var MIN_LOOKAHEAD=MAX_MATCH+MIN_MATCH+1;var PRESET_DICT=32;var INIT_STATE=42;var EXTRA_STATE=69;var NAME_STATE=73;var COMMENT_STATE=91;var HCRC_STATE=103;var BUSY_STATE=113;var FINISH_STATE=666;var BS_NEED_MORE=1;var BS_BLOCK_DONE=2;var BS_FINISH_STARTED=3;var BS_FINISH_DONE=4;var OS_CODE=3;function err(strm,errorCode){strm.msg=msg[errorCode];return errorCode}function rank(f){return(f<<1)-(f>4?9:0)}function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}function flush_pending(strm){var s=strm.state;var len=s.pending;if(len>strm.avail_out){len=strm.avail_out}if(len===0){return}utils.arraySet(strm.output,s.pending_buf,s.pending_out,len,strm.next_out);strm.next_out+=len;s.pending_out+=len;strm.total_out+=len;strm.avail_out-=len;s.pending-=len;if(s.pending===0){s.pending_out=0}}function flush_block_only(s,last){trees._tr_flush_block(s,s.block_start>=0?s.block_start:-1,s.strstart-s.block_start,last);s.block_start=s.strstart;flush_pending(s.strm)}function put_byte(s,b){s.pending_buf[s.pending++]=b}function putShortMSB(s,b){s.pending_buf[s.pending++]=b>>>8&255;s.pending_buf[s.pending++]=b&255}function read_buf(strm,buf,start,size){var len=strm.avail_in;if(len>size){len=size}if(len===0){return 0}strm.avail_in-=len;utils.arraySet(buf,strm.input,strm.next_in,len,start);if(strm.state.wrap===1){strm.adler=adler32(strm.adler,buf,len,start)}else if(strm.state.wrap===2){strm.adler=crc32(strm.adler,buf,len,start)}strm.next_in+=len;strm.total_in+=len;return len}function longest_match(s,cur_match){var chain_length=s.max_chain_length;var scan=s.strstart;var match;var len;var best_len=s.prev_length;var nice_match=s.nice_match;var limit=s.strstart>s.w_size-MIN_LOOKAHEAD?s.strstart-(s.w_size-MIN_LOOKAHEAD):0;var _win=s.window;var wmask=s.w_mask;var prev=s.prev;var strend=s.strstart+MAX_MATCH;var scan_end1=_win[scan+best_len-1];var scan_end=_win[scan+best_len];if(s.prev_length>=s.good_match){chain_length>>=2}if(nice_match>s.lookahead){nice_match=s.lookahead}do{match=cur_match;if(_win[match+best_len]!==scan_end||_win[match+best_len-1]!==scan_end1||_win[match]!==_win[scan]||_win[++match]!==_win[scan+1]){continue}scan+=2;match++;do{}while(_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&_win[++scan]===_win[++match]&&scanbest_len){s.match_start=cur_match;best_len=len;if(len>=nice_match){break}scan_end1=_win[scan+best_len-1];scan_end=_win[scan+best_len]}}while((cur_match=prev[cur_match&wmask])>limit&&--chain_length!==0);if(best_len<=s.lookahead){return best_len}return s.lookahead}function fill_window(s){var _w_size=s.w_size;var p,n,m,more,str;do{more=s.window_size-s.lookahead-s.strstart;if(s.strstart>=_w_size+(_w_size-MIN_LOOKAHEAD)){utils.arraySet(s.window,s.window,_w_size,_w_size,0);s.match_start-=_w_size;s.strstart-=_w_size;s.block_start-=_w_size;n=s.hash_size;p=n;do{m=s.head[--p];s.head[p]=m>=_w_size?m-_w_size:0}while(--n);n=_w_size;p=n;do{m=s.prev[--p];s.prev[p]=m>=_w_size?m-_w_size:0}while(--n);more+=_w_size}if(s.strm.avail_in===0){break}n=read_buf(s.strm,s.window,s.strstart+s.lookahead,more);s.lookahead+=n;if(s.lookahead+s.insert>=MIN_MATCH){str=s.strstart-s.insert;s.ins_h=s.window[str];s.ins_h=(s.ins_h<s.pending_buf_size-5){max_block_size=s.pending_buf_size-5}for(;;){if(s.lookahead<=1){fill_window(s);if(s.lookahead===0&&flush===Z_NO_FLUSH){return BS_NEED_MORE}if(s.lookahead===0){break}}s.strstart+=s.lookahead;s.lookahead=0;var max_start=s.block_start+max_block_size;if(s.strstart===0||s.strstart>=max_start){s.lookahead=s.strstart-max_start;s.strstart=max_start;flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}if(s.strstart-s.block_start>=s.w_size-MIN_LOOKAHEAD){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.strstart>s.block_start){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_NEED_MORE}function deflate_fast(s,flush){var hash_head;var bflush;for(;;){if(s.lookahead=MIN_MATCH){s.ins_h=(s.ins_h<=MIN_MATCH){bflush=trees._tr_tally(s,s.strstart-s.match_start,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;if(s.match_length<=s.max_lazy_match&&s.lookahead>=MIN_MATCH){s.match_length--;do{s.strstart++;s.ins_h=(s.ins_h<=MIN_MATCH){s.ins_h=(s.ins_h<4096)){s.match_length=MIN_MATCH-1}}if(s.prev_length>=MIN_MATCH&&s.match_length<=s.prev_length){max_insert=s.strstart+s.lookahead-MIN_MATCH;bflush=trees._tr_tally(s,s.strstart-1-s.prev_match,s.prev_length-MIN_MATCH);s.lookahead-=s.prev_length-1;s.prev_length-=2;do{if(++s.strstart<=max_insert){s.ins_h=(s.ins_h<=MIN_MATCH&&s.strstart>0){scan=s.strstart-1;prev=_win[scan];if(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]){strend=s.strstart+MAX_MATCH;do{}while(prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&prev===_win[++scan]&&scans.lookahead){s.match_length=s.lookahead}}}if(s.match_length>=MIN_MATCH){bflush=trees._tr_tally(s,1,s.match_length-MIN_MATCH);s.lookahead-=s.match_length;s.strstart+=s.match_length;s.match_length=0}else{bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++}if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}function deflate_huff(s,flush){ +var bflush;for(;;){if(s.lookahead===0){fill_window(s);if(s.lookahead===0){if(flush===Z_NO_FLUSH){return BS_NEED_MORE}break}}s.match_length=0;bflush=trees._tr_tally(s,0,s.window[s.strstart]);s.lookahead--;s.strstart++;if(bflush){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}}s.insert=0;if(flush===Z_FINISH){flush_block_only(s,true);if(s.strm.avail_out===0){return BS_FINISH_STARTED}return BS_FINISH_DONE}if(s.last_lit){flush_block_only(s,false);if(s.strm.avail_out===0){return BS_NEED_MORE}}return BS_BLOCK_DONE}var Config=function(good_length,max_lazy,nice_length,max_chain,func){this.good_length=good_length;this.max_lazy=max_lazy;this.nice_length=nice_length;this.max_chain=max_chain;this.func=func};var configuration_table;configuration_table=[new Config(0,0,0,0,deflate_stored),new Config(4,4,8,4,deflate_fast),new Config(4,5,16,8,deflate_fast),new Config(4,6,32,32,deflate_fast),new Config(4,4,16,16,deflate_slow),new Config(8,16,32,32,deflate_slow),new Config(8,16,128,128,deflate_slow),new Config(8,32,128,256,deflate_slow),new Config(32,128,258,1024,deflate_slow),new Config(32,258,258,4096,deflate_slow)];function lm_init(s){s.window_size=2*s.w_size;zero(s.head);s.max_lazy_match=configuration_table[s.level].max_lazy;s.good_match=configuration_table[s.level].good_length;s.nice_match=configuration_table[s.level].nice_length;s.max_chain_length=configuration_table[s.level].max_chain;s.strstart=0;s.block_start=0;s.lookahead=0;s.insert=0;s.match_length=s.prev_length=MIN_MATCH-1;s.match_available=0;s.ins_h=0}function DeflateState(){this.strm=null;this.status=0;this.pending_buf=null;this.pending_buf_size=0;this.pending_out=0;this.pending=0;this.wrap=0;this.gzhead=null;this.gzindex=0;this.method=Z_DEFLATED;this.last_flush=-1;this.w_size=0;this.w_bits=0;this.w_mask=0;this.window=null;this.window_size=0;this.prev=null;this.head=null;this.ins_h=0;this.hash_size=0;this.hash_bits=0;this.hash_mask=0;this.hash_shift=0;this.block_start=0;this.match_length=0;this.prev_match=0;this.match_available=0;this.strstart=0;this.match_start=0;this.lookahead=0;this.prev_length=0;this.max_chain_length=0;this.max_lazy_match=0;this.level=0;this.strategy=0;this.good_match=0;this.nice_match=0;this.dyn_ltree=new utils.Buf16(HEAP_SIZE*2);this.dyn_dtree=new utils.Buf16((2*D_CODES+1)*2);this.bl_tree=new utils.Buf16((2*BL_CODES+1)*2);zero(this.dyn_ltree);zero(this.dyn_dtree);zero(this.bl_tree);this.l_desc=null;this.d_desc=null;this.bl_desc=null;this.bl_count=new utils.Buf16(MAX_BITS+1);this.heap=new utils.Buf16(2*L_CODES+1);zero(this.heap);this.heap_len=0;this.heap_max=0;this.depth=new utils.Buf16(2*L_CODES+1);zero(this.depth);this.l_buf=0;this.lit_bufsize=0;this.last_lit=0;this.d_buf=0;this.opt_len=0;this.static_len=0;this.matches=0;this.insert=0;this.bi_buf=0;this.bi_valid=0}function deflateResetKeep(strm){var s;if(!strm||!strm.state){return err(strm,Z_STREAM_ERROR)}strm.total_in=strm.total_out=0;strm.data_type=Z_UNKNOWN;s=strm.state;s.pending=0;s.pending_out=0;if(s.wrap<0){s.wrap=-s.wrap}s.status=s.wrap?INIT_STATE:BUSY_STATE;strm.adler=s.wrap===2?0:1;s.last_flush=Z_NO_FLUSH;trees._tr_init(s);return Z_OK}function deflateReset(strm){var ret=deflateResetKeep(strm);if(ret===Z_OK){lm_init(strm.state)}return ret}function deflateSetHeader(strm,head){if(!strm||!strm.state){return Z_STREAM_ERROR}if(strm.state.wrap!==2){return Z_STREAM_ERROR}strm.state.gzhead=head;return Z_OK}function deflateInit2(strm,level,method,windowBits,memLevel,strategy){if(!strm){return Z_STREAM_ERROR}var wrap=1;if(level===Z_DEFAULT_COMPRESSION){level=6}if(windowBits<0){wrap=0;windowBits=-windowBits}else if(windowBits>15){wrap=2;windowBits-=16}if(memLevel<1||memLevel>MAX_MEM_LEVEL||method!==Z_DEFLATED||windowBits<8||windowBits>15||level<0||level>9||strategy<0||strategy>Z_FIXED){return err(strm,Z_STREAM_ERROR)}if(windowBits===8){windowBits=9}var s=new DeflateState;strm.state=s;s.strm=strm;s.wrap=wrap;s.gzhead=null;s.w_bits=windowBits;s.w_size=1<>1;s.l_buf=(1+2)*s.lit_bufsize;s.level=level;s.strategy=strategy;s.method=method;return deflateReset(strm)}function deflateInit(strm,level){return deflateInit2(strm,level,Z_DEFLATED,MAX_WBITS,DEF_MEM_LEVEL,Z_DEFAULT_STRATEGY)}function deflate(strm,flush){var old_flush,s;var beg,val;if(!strm||!strm.state||flush>Z_BLOCK||flush<0){return strm?err(strm,Z_STREAM_ERROR):Z_STREAM_ERROR}s=strm.state;if(!strm.output||!strm.input&&strm.avail_in!==0||s.status===FINISH_STATE&&flush!==Z_FINISH){return err(strm,strm.avail_out===0?Z_BUF_ERROR:Z_STREAM_ERROR)}s.strm=strm;old_flush=s.last_flush;s.last_flush=flush;if(s.status===INIT_STATE){if(s.wrap===2){strm.adler=0;put_byte(s,31);put_byte(s,139);put_byte(s,8);if(!s.gzhead){put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,0);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,OS_CODE);s.status=BUSY_STATE}else{put_byte(s,(s.gzhead.text?1:0)+(s.gzhead.hcrc?2:0)+(!s.gzhead.extra?0:4)+(!s.gzhead.name?0:8)+(!s.gzhead.comment?0:16));put_byte(s,s.gzhead.time&255);put_byte(s,s.gzhead.time>>8&255);put_byte(s,s.gzhead.time>>16&255);put_byte(s,s.gzhead.time>>24&255);put_byte(s,s.level===9?2:s.strategy>=Z_HUFFMAN_ONLY||s.level<2?4:0);put_byte(s,s.gzhead.os&255);if(s.gzhead.extra&&s.gzhead.extra.length){put_byte(s,s.gzhead.extra.length&255);put_byte(s,s.gzhead.extra.length>>8&255)}if(s.gzhead.hcrc){strm.adler=crc32(strm.adler,s.pending_buf,s.pending,0)}s.gzindex=0;s.status=EXTRA_STATE}}else{var header=Z_DEFLATED+(s.w_bits-8<<4)<<8;var level_flags=-1;if(s.strategy>=Z_HUFFMAN_ONLY||s.level<2){level_flags=0}else if(s.level<6){level_flags=1}else if(s.level===6){level_flags=2}else{level_flags=3}header|=level_flags<<6;if(s.strstart!==0){header|=PRESET_DICT}header+=31-header%31;s.status=BUSY_STATE;putShortMSB(s,header);if(s.strstart!==0){putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}strm.adler=1}}if(s.status===EXTRA_STATE){if(s.gzhead.extra){beg=s.pending;while(s.gzindex<(s.gzhead.extra.length&65535)){if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){break}}put_byte(s,s.gzhead.extra[s.gzindex]&255);s.gzindex++}if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(s.gzindex===s.gzhead.extra.length){s.gzindex=0;s.status=NAME_STATE}}else{s.status=NAME_STATE}}if(s.status===NAME_STATE){if(s.gzhead.name){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindexbeg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.gzindex=0;s.status=COMMENT_STATE}}else{s.status=COMMENT_STATE}}if(s.status===COMMENT_STATE){if(s.gzhead.comment){beg=s.pending;do{if(s.pending===s.pending_buf_size){if(s.gzhead.hcrc&&s.pending>beg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}flush_pending(strm);beg=s.pending;if(s.pending===s.pending_buf_size){val=1;break}}if(s.gzindexbeg){strm.adler=crc32(strm.adler,s.pending_buf,s.pending-beg,beg)}if(val===0){s.status=HCRC_STATE}}else{s.status=HCRC_STATE}}if(s.status===HCRC_STATE){if(s.gzhead.hcrc){if(s.pending+2>s.pending_buf_size){flush_pending(strm)}if(s.pending+2<=s.pending_buf_size){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);strm.adler=0;s.status=BUSY_STATE}}else{s.status=BUSY_STATE}}if(s.pending!==0){flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}else if(strm.avail_in===0&&rank(flush)<=rank(old_flush)&&flush!==Z_FINISH){return err(strm,Z_BUF_ERROR)}if(s.status===FINISH_STATE&&strm.avail_in!==0){return err(strm,Z_BUF_ERROR)}if(strm.avail_in!==0||s.lookahead!==0||flush!==Z_NO_FLUSH&&s.status!==FINISH_STATE){var bstate=s.strategy===Z_HUFFMAN_ONLY?deflate_huff(s,flush):s.strategy===Z_RLE?deflate_rle(s,flush):configuration_table[s.level].func(s,flush);if(bstate===BS_FINISH_STARTED||bstate===BS_FINISH_DONE){s.status=FINISH_STATE}if(bstate===BS_NEED_MORE||bstate===BS_FINISH_STARTED){if(strm.avail_out===0){s.last_flush=-1}return Z_OK}if(bstate===BS_BLOCK_DONE){if(flush===Z_PARTIAL_FLUSH){trees._tr_align(s)}else if(flush!==Z_BLOCK){trees._tr_stored_block(s,0,0,false);if(flush===Z_FULL_FLUSH){zero(s.head);if(s.lookahead===0){s.strstart=0;s.block_start=0;s.insert=0}}}flush_pending(strm);if(strm.avail_out===0){s.last_flush=-1;return Z_OK}}}if(flush!==Z_FINISH){return Z_OK}if(s.wrap<=0){return Z_STREAM_END}if(s.wrap===2){put_byte(s,strm.adler&255);put_byte(s,strm.adler>>8&255);put_byte(s,strm.adler>>16&255);put_byte(s,strm.adler>>24&255);put_byte(s,strm.total_in&255);put_byte(s,strm.total_in>>8&255);put_byte(s,strm.total_in>>16&255);put_byte(s,strm.total_in>>24&255)}else{putShortMSB(s,strm.adler>>>16);putShortMSB(s,strm.adler&65535)}flush_pending(strm);if(s.wrap>0){s.wrap=-s.wrap}return s.pending!==0?Z_OK:Z_STREAM_END}function deflateEnd(strm){var status;if(!strm||!strm.state){return Z_STREAM_ERROR}status=strm.state.status;if(status!==INIT_STATE&&status!==EXTRA_STATE&&status!==NAME_STATE&&status!==COMMENT_STATE&&status!==HCRC_STATE&&status!==BUSY_STATE&&status!==FINISH_STATE){return err(strm,Z_STREAM_ERROR)}strm.state=null;return status===BUSY_STATE?err(strm,Z_DATA_ERROR):Z_OK}exports.deflateInit=deflateInit;exports.deflateInit2=deflateInit2;exports.deflateReset=deflateReset;exports.deflateResetKeep=deflateResetKeep;exports.deflateSetHeader=deflateSetHeader;exports.deflate=deflate;exports.deflateEnd=deflateEnd;exports.deflateInfo="pako deflate (from Nodeca project)"},{"../utils/common":27,"./adler32":29,"./crc32":31,"./messages":37,"./trees":38}],33:[function(_dereq_,module,exports){"use strict";function GZheader(){this.text=0;this.time=0;this.xflags=0;this.os=0;this.extra=null;this.extra_len=0;this.name="";this.comment="";this.hcrc=0;this.done=false}module.exports=GZheader},{}],34:[function(_dereq_,module,exports){"use strict";var BAD=30;var TYPE=12;module.exports=function inflate_fast(strm,start){var state;var _in;var last;var _out;var beg;var end;var dmax;var wsize;var whave;var wnext;var window;var hold;var bits;var lcode;var dcode;var lmask;var dmask;var here;var op;var len;var dist;var from;var from_source;var input,output;state=strm.state;_in=strm.next_in;input=strm.input;last=_in+(strm.avail_in-5);_out=strm.next_out;output=strm.output;beg=_out-(start-strm.avail_out);end=_out+(strm.avail_out-257);dmax=state.dmax;wsize=state.wsize;whave=state.whave;wnext=state.wnext;window=state.window;hold=state.hold;bits=state.bits;lcode=state.lencode;dcode=state.distcode;lmask=(1<>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op===0){output[_out++]=here&65535}else if(op&16){len=here&65535;op&=15;if(op){if(bits>>=op;bits-=op}if(bits<15){hold+=input[_in++]<>>24;hold>>>=op;bits-=op;op=here>>>16&255;if(op&16){dist=here&65535;op&=15;if(bitsdmax){strm.msg="invalid distance too far back";state.mode=BAD;break top}hold>>>=op;bits-=op;op=_out-beg;if(dist>op){op=dist-op;if(op>whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break top}}from=0;from_source=window;if(wnext===0){from+=wsize-op;if(op2){output[_out++]=from_source[from++];output[_out++]=from_source[from++];output[_out++]=from_source[from++];len-=3}if(len){output[_out++]=from_source[from++];if(len>1){output[_out++]=from_source[from++]}}}else{from=_out-dist;do{output[_out++]=output[from++];output[_out++]=output[from++];output[_out++]=output[from++];len-=3}while(len>2);if(len){output[_out++]=output[from++];if(len>1){output[_out++]=output[from++]}}}}else if((op&64)===0){here=dcode[(here&65535)+(hold&(1<>3;_in-=len;bits-=len<<3;hold&=(1<>>24&255)+(q>>>8&65280)+((q&65280)<<8)+((q&255)<<24)}function InflateState(){this.mode=0;this.last=false;this.wrap=0;this.havedict=false;this.flags=0;this.dmax=0;this.check=0;this.total=0;this.head=null;this.wbits=0;this.wsize=0;this.whave=0;this.wnext=0;this.window=null;this.hold=0;this.bits=0;this.length=0;this.offset=0;this.extra=0;this.lencode=null;this.distcode=null;this.lenbits=0;this.distbits=0;this.ncode=0;this.nlen=0;this.ndist=0;this.have=0;this.next=null;this.lens=new utils.Buf16(320);this.work=new utils.Buf16(288);this.lendyn=null;this.distdyn=null;this.sane=0;this.back=0;this.was=0}function inflateResetKeep(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;strm.total_in=strm.total_out=state.total=0;strm.msg="";if(state.wrap){strm.adler=state.wrap&1}state.mode=HEAD;state.last=0;state.havedict=0;state.dmax=32768;state.head=null;state.hold=0;state.bits=0;state.lencode=state.lendyn=new utils.Buf32(ENOUGH_LENS);state.distcode=state.distdyn=new utils.Buf32(ENOUGH_DISTS);state.sane=1;state.back=-1;return Z_OK}function inflateReset(strm){var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;state.wsize=0;state.whave=0;state.wnext=0;return inflateResetKeep(strm)}function inflateReset2(strm,windowBits){var wrap;var state;if(!strm||!strm.state){return Z_STREAM_ERROR}state=strm.state;if(windowBits<0){wrap=0;windowBits=-windowBits}else{wrap=(windowBits>>4)+1;if(windowBits<48){windowBits&=15}}if(windowBits&&(windowBits<8||windowBits>15)){return Z_STREAM_ERROR}if(state.window!==null&&state.wbits!==windowBits){state.window=null}state.wrap=wrap;state.wbits=windowBits;return inflateReset(strm)}function inflateInit2(strm,windowBits){var ret;var state;if(!strm){return Z_STREAM_ERROR}state=new InflateState;strm.state=state;state.window=null;ret=inflateReset2(strm,windowBits);if(ret!==Z_OK){strm.state=null}return ret}function inflateInit(strm){return inflateInit2(strm,DEF_WBITS)}var virgin=true;var lenfix,distfix;function fixedtables(state){if(virgin){var sym;lenfix=new utils.Buf32(512);distfix=new utils.Buf32(32);sym=0;while(sym<144){state.lens[sym++]=8}while(sym<256){state.lens[sym++]=9}while(sym<280){state.lens[sym++]=7}while(sym<288){state.lens[sym++]=8}inflate_table(LENS,state.lens,0,288,lenfix,0,state.work,{bits:9});sym=0;while(sym<32){state.lens[sym++]=5}inflate_table(DISTS,state.lens,0,32,distfix,0,state.work,{bits:5});virgin=false}state.lencode=lenfix;state.lenbits=9;state.distcode=distfix;state.distbits=5}function updatewindow(strm,src,end,copy){var dist;var state=strm.state;if(state.window===null){state.wsize=1<=state.wsize){utils.arraySet(state.window,src,end-state.wsize,state.wsize,0);state.wnext=0;state.whave=state.wsize}else{dist=state.wsize-state.wnext;if(dist>copy){dist=copy}utils.arraySet(state.window,src,end-copy,dist,state.wnext);copy-=dist;if(copy){utils.arraySet(state.window,src,end-copy,copy,0);state.wnext=copy;state.whave=state.wsize}else{state.wnext+=dist;if(state.wnext===state.wsize){state.wnext=0}if(state.whave>>8&255;state.check=crc32(state.check,hbuf,2,0);hold=0;bits=0;state.mode=FLAGS;break}state.flags=0;if(state.head){state.head.done=false}if(!(state.wrap&1)||(((hold&255)<<8)+(hold>>8))%31){strm.msg="incorrect header check";state.mode=BAD;break}if((hold&15)!==Z_DEFLATED){strm.msg="unknown compression method";state.mode=BAD;break}hold>>>=4;bits-=4;len=(hold&15)+8;if(state.wbits===0){state.wbits=len}else if(len>state.wbits){strm.msg="invalid window size";state.mode=BAD;break}state.dmax=1<>8&1}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=TIME;case TIME:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>8&255;hbuf[2]=hold>>>16&255;hbuf[3]=hold>>>24&255;state.check=crc32(state.check,hbuf,4,0)}hold=0;bits=0;state.mode=OS;case OS:while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<>8}if(state.flags&512){hbuf[0]=hold&255;hbuf[1]=hold>>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0;state.mode=EXLEN;case EXLEN:if(state.flags&1024){while(bits<16){if(have===0){break inf_leave}have--;hold+=input[next++]<>>8&255;state.check=crc32(state.check,hbuf,2,0)}hold=0;bits=0}else if(state.head){state.head.extra=null}state.mode=EXTRA;case EXTRA:if(state.flags&1024){copy=state.length;if(copy>have){copy=have}if(copy){if(state.head){len=state.head.extra_len-state.length;if(!state.head.extra){state.head.extra=new Array(state.head.extra_len)}utils.arraySet(state.head.extra,input,next,copy,len)}if(state.flags&512){state.check=crc32(state.check,input,copy,next)}have-=copy;next+=copy;state.length-=copy}if(state.length){break inf_leave}}state.length=0;state.mode=NAME;case NAME:if(state.flags&2048){if(have===0){break inf_leave}copy=0;do{len=input[next+copy++];if(state.head&&len&&state.length<65536){state.head.name+=String.fromCharCode(len)}}while(len&©>9&1;state.head.done=true}strm.adler=state.check=0;state.mode=TYPE;break;case DICTID:while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=bits&7;bits-=bits&7;state.mode=CHECK;break}while(bits<3){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=1;bits-=1;switch(hold&3){case 0:state.mode=STORED;break;case 1:fixedtables(state);state.mode=LEN_;if(flush===Z_TREES){hold>>>=2;bits-=2;break inf_leave}break;case 2:state.mode=TABLE;break;case 3:strm.msg="invalid block type";state.mode=BAD;}hold>>>=2;bits-=2;break;case STORED:hold>>>=bits&7;bits-=bits&7;while(bits<32){if(have===0){break inf_leave}have--;hold+=input[next++]<>>16^65535)){strm.msg="invalid stored block lengths";state.mode=BAD;break}state.length=hold&65535;hold=0;bits=0;state.mode=COPY_;if(flush===Z_TREES){break inf_leave};case COPY_:state.mode=COPY;case COPY:copy=state.length;if(copy){if(copy>have){copy=have}if(copy>left){copy=left}if(copy===0){break inf_leave}utils.arraySet(output,input,next,copy,put);have-=copy;next+=copy;left-=copy;put+=copy;state.length-=copy;break}state.mode=TYPE;break;case TABLE:while(bits<14){if(have===0){break inf_leave}have--;hold+=input[next++]<>>=5;bits-=5;state.ndist=(hold&31)+1;hold>>>=5;bits-=5;state.ncode=(hold&15)+4;hold>>>=4;bits-=4;if(state.nlen>286||state.ndist>30){strm.msg="too many length or distance symbols";state.mode=BAD;break}state.have=0;state.mode=LENLENS;case LENLENS:while(state.have>>=3;bits-=3}while(state.have<19){state.lens[order[state.have++]]=0}state.lencode=state.lendyn;state.lenbits=7;opts={bits:state.lenbits};ret=inflate_table(CODES,state.lens,0,19,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid code lengths set";state.mode=BAD;break}state.have=0;state.mode=CODELENS;case CODELENS:while(state.have>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=here_bits;bits-=here_bits;state.lens[state.have++]=here_val}else{if(here_val===16){n=here_bits+2;while(bits>>=here_bits;bits-=here_bits;if(state.have===0){strm.msg="invalid bit length repeat";state.mode=BAD;break}len=state.lens[state.have-1];copy=3+(hold&3);hold>>>=2;bits-=2}else if(here_val===17){n=here_bits+3;while(bits>>=here_bits;bits-=here_bits;len=0;copy=3+(hold&7);hold>>>=3;bits-=3}else{n=here_bits+7;while(bits>>=here_bits;bits-=here_bits;len=0;copy=11+(hold&127);hold>>>=7;bits-=7}if(state.have+copy>state.nlen+state.ndist){strm.msg="invalid bit length repeat";state.mode=BAD;break}while(copy--){state.lens[state.have++]=len}}}if(state.mode===BAD){break}if(state.lens[256]===0){strm.msg="invalid code -- missing end-of-block";state.mode=BAD;break}state.lenbits=9;opts={bits:state.lenbits};ret=inflate_table(LENS,state.lens,0,state.nlen,state.lencode,0,state.work,opts);state.lenbits=opts.bits;if(ret){strm.msg="invalid literal/lengths set";state.mode=BAD;break}state.distbits=6;state.distcode=state.distdyn;opts={bits:state.distbits};ret=inflate_table(DISTS,state.lens,state.nlen,state.ndist,state.distcode,0,state.work,opts);state.distbits=opts.bits;if(ret){strm.msg="invalid distances set";state.mode=BAD;break}state.mode=LEN_;if(flush===Z_TREES){break inf_leave};case LEN_:state.mode=LEN;case LEN:if(have>=6&&left>=258){strm.next_out=put;strm.avail_out=left;strm.next_in=next;strm.avail_in=have;state.hold=hold;state.bits=bits;inflate_fast(strm,_out);put=strm.next_out;output=strm.output;left=strm.avail_out;next=strm.next_in;input=strm.input;have=strm.avail_in;hold=state.hold;bits=state.bits;if(state.mode===TYPE){state.back=-1}break}state.back=0;for(;;){here=state.lencode[hold&(1<>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;state.length=here_val;if(here_op===0){state.mode=LIT;break}if(here_op&32){state.back=-1;state.mode=TYPE;break}if(here_op&64){strm.msg="invalid literal/length code";state.mode=BAD;break}state.extra=here_op&15;state.mode=LENEXT;case LENEXT:if(state.extra){n=state.extra;while(bits>>=state.extra;bits-=state.extra;state.back+=state.extra}state.was=state.length;state.mode=DIST;case DIST:for(;;){here=state.distcode[hold&(1<>>24;here_op=here>>>16&255;here_val=here&65535;if(here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>last_bits)];here_bits=here>>>24;here_op=here>>>16&255;here_val=here&65535;if(last_bits+here_bits<=bits){break}if(have===0){break inf_leave}have--;hold+=input[next++]<>>=last_bits;bits-=last_bits;state.back+=last_bits}hold>>>=here_bits;bits-=here_bits;state.back+=here_bits;if(here_op&64){strm.msg="invalid distance code";state.mode=BAD;break}state.offset=here_val;state.extra=here_op&15;state.mode=DISTEXT;case DISTEXT:if(state.extra){n=state.extra;while(bits>>=state.extra;bits-=state.extra;state.back+=state.extra}if(state.offset>state.dmax){strm.msg="invalid distance too far back";state.mode=BAD;break}state.mode=MATCH;case MATCH:if(left===0){break inf_leave}copy=_out-left;if(state.offset>copy){copy=state.offset-copy;if(copy>state.whave){if(state.sane){strm.msg="invalid distance too far back";state.mode=BAD;break}}if(copy>state.wnext){copy-=state.wnext;from=state.wsize-copy}else{from=state.wnext-copy}if(copy>state.length){copy=state.length}from_source=state.window}else{from_source=output;from=put-state.offset;copy=state.length}if(copy>left){copy=left}left-=copy;state.length-=copy;do{output[put++]=from_source[from++]}while(--copy);if(state.length===0){state.mode=LEN}break;case LIT:if(left===0){break inf_leave}output[put++]=state.length;left--;state.mode=LEN;break;case CHECK:if(state.wrap){while(bits<32){if(have===0){break inf_leave}have--;hold|=input[next++]<=1;max--){if(count[max]!==0){break}}if(root>max){root=max}if(max===0){table[table_index++]=1<<24|64<<16|0;table[table_index++]=1<<24|64<<16|0;opts.bits=1;return 0}for(min=1;min0&&(type===CODES||max!==1)){return-1}offs[1]=0;for(len=1;lenENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}var i=0;for(;;){i++;here_bits=len-drop;if(work[sym]end){here_op=extra[extra_index+work[sym]];here_val=base[base_index+work[sym]]}else{here_op=32+64;here_val=0}incr=1<>drop)+fill]=here_bits<<24|here_op<<16|here_val|0}while(fill!==0);incr=1<>=1}if(incr!==0){huff&=incr-1;huff+=incr}else{huff=0}sym++;if(--count[len]===0){if(len===max){break}len=lens[lens_index+work[sym]]}if(len>root&&(huff&mask)!==low){if(drop===0){drop=root}next+=min;curr=len-drop;left=1<ENOUGH_LENS||type===DISTS&&used>ENOUGH_DISTS){return 1}low=huff&mask;table[low]=root<<24|curr<<16|next-table_index|0}}if(huff!==0){table[next+huff]=len-drop<<24|64<<16|0}opts.bits=root;return 0}},{"../utils/common":27}],37:[function(_dereq_,module,exports){"use strict";module.exports={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"}},{}],38:[function(_dereq_,module,exports){"use strict";var utils=_dereq_("../utils/common");var Z_FIXED=4;var Z_BINARY=0;var Z_TEXT=1;var Z_UNKNOWN=2;function zero(buf){var len=buf.length;while(--len>=0){buf[len]=0}}var STORED_BLOCK=0;var STATIC_TREES=1;var DYN_TREES=2;var MIN_MATCH=3;var MAX_MATCH=258;var LENGTH_CODES=29;var LITERALS=256;var L_CODES=LITERALS+1+LENGTH_CODES;var D_CODES=30;var BL_CODES=19;var HEAP_SIZE=2*L_CODES+1;var MAX_BITS=15;var Buf_size=16;var MAX_BL_BITS=7;var END_BLOCK=256;var REP_3_6=16;var REPZ_3_10=17;var REPZ_11_138=18;var extra_lbits=[0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0];var extra_dbits=[0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13];var extra_blbits=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7];var bl_order=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];var DIST_CODE_LEN=512;var static_ltree=new Array((L_CODES+2)*2);zero(static_ltree);var static_dtree=new Array(D_CODES*2);zero(static_dtree);var _dist_code=new Array(DIST_CODE_LEN);zero(_dist_code);var _length_code=new Array(MAX_MATCH-MIN_MATCH+1);zero(_length_code);var base_length=new Array(LENGTH_CODES);zero(base_length);var base_dist=new Array(D_CODES);zero(base_dist);var StaticTreeDesc=function(static_tree,extra_bits,extra_base,elems,max_length){this.static_tree=static_tree;this.extra_bits=extra_bits;this.extra_base=extra_base;this.elems=elems;this.max_length=max_length;this.has_stree=static_tree&&static_tree.length};var static_l_desc;var static_d_desc;var static_bl_desc;var TreeDesc=function(dyn_tree,stat_desc){this.dyn_tree=dyn_tree;this.max_code=0;this.stat_desc=stat_desc};function d_code(dist){return dist<256?_dist_code[dist]:_dist_code[256+(dist>>>7)]}function put_short(s,w){s.pending_buf[s.pending++]=w&255;s.pending_buf[s.pending++]=w>>>8&255}function send_bits(s,value,length){if(s.bi_valid>Buf_size-length){s.bi_buf|=value<>Buf_size-s.bi_valid;s.bi_valid+=length-Buf_size}else{s.bi_buf|=value<>>=1;res<<=1}while(--len>0);return res>>>1}function bi_flush(s){if(s.bi_valid===16){put_short(s,s.bi_buf);s.bi_buf=0;s.bi_valid=0}else if(s.bi_valid>=8){s.pending_buf[s.pending++]=s.bi_buf&255;s.bi_buf>>=8;s.bi_valid-=8}}function gen_bitlen(s,desc){var tree=desc.dyn_tree;var max_code=desc.max_code;var stree=desc.stat_desc.static_tree;var has_stree=desc.stat_desc.has_stree;var extra=desc.stat_desc.extra_bits;var base=desc.stat_desc.extra_base;var max_length=desc.stat_desc.max_length;var h;var n,m;var bits;var xbits;var f;var overflow=0;for(bits=0;bits<=MAX_BITS;bits++){s.bl_count[bits]=0}tree[s.heap[s.heap_max]*2+1]=0;for(h=s.heap_max+1;hmax_length){bits=max_length;overflow++}tree[n*2+1]=bits;if(n>max_code){continue}s.bl_count[bits]++;xbits=0;if(n>=base){xbits=extra[n-base]}f=tree[n*2];s.opt_len+=f*(bits+xbits);if(has_stree){s.static_len+=f*(stree[n*2+1]+xbits)}}if(overflow===0){return}do{bits=max_length-1;while(s.bl_count[bits]===0){bits--}s.bl_count[bits]--;s.bl_count[bits+1]+=2;s.bl_count[max_length]--;overflow-=2}while(overflow>0);for(bits=max_length;bits!==0;bits--){n=s.bl_count[bits];while(n!==0){m=s.heap[--h];if(m>max_code){continue}if(tree[m*2+1]!==bits){s.opt_len+=(bits-tree[m*2+1])*tree[m*2];tree[m*2+1]=bits}n--}}}function gen_codes(tree,max_code,bl_count){var next_code=new Array(MAX_BITS+1);var code=0;var bits;var n;for(bits=1;bits<=MAX_BITS;bits++){next_code[bits]=code=code+bl_count[bits-1]<<1}for(n=0;n<=max_code;n++){var len=tree[n*2+1];if(len===0){continue}tree[n*2]=bi_reverse(next_code[len]++,len)}}function tr_static_init(){var n;var bits;var length;var code;var dist;var bl_count=new Array(MAX_BITS+1);length=0;for(code=0;code>=7;for(;code8){put_short(s,s.bi_buf)}else if(s.bi_valid>0){s.pending_buf[s.pending++]=s.bi_buf}s.bi_buf=0;s.bi_valid=0}function copy_block(s,buf,len,header){bi_windup(s);if(header){put_short(s,len);put_short(s,~len)}utils.arraySet(s.pending_buf,s.window,buf,len,s.pending);s.pending+=len}function smaller(tree,n,m,depth){var _n2=n*2;var _m2=m*2;return tree[_n2]>1;n>=1;n--){pqdownheap(s,tree,n)}node=elems;do{n=s.heap[1];s.heap[1]=s.heap[s.heap_len--];pqdownheap(s,tree,1);m=s.heap[1];s.heap[--s.heap_max]=n;s.heap[--s.heap_max]=m;tree[node*2]=tree[n*2]+tree[m*2];s.depth[node]=(s.depth[n]>=s.depth[m]?s.depth[n]:s.depth[m])+1;tree[n*2+1]=tree[m*2+1]=node;s.heap[1]=node++;pqdownheap(s,tree,1)}while(s.heap_len>=2);s.heap[--s.heap_max]=s.heap[1];gen_bitlen(s,desc);gen_codes(tree,max_code,s.bl_count)}function scan_tree(s,tree,max_code){var n;var prevlen=-1;var curlen;var nextlen=tree[0*2+1];var count=0;var max_count=7;var min_count=4;if(nextlen===0){max_count=138;min_count=3}tree[(max_code+1)*2+1]=65535;for(n=0;n<=max_code;n++){curlen=nextlen;nextlen=tree[(n+1)*2+1];if(++count=3;max_blindex--){if(s.bl_tree[bl_order[max_blindex]*2+1]!==0){break}}s.opt_len+=3*(max_blindex+1)+5+5+4;return max_blindex}function send_all_trees(s,lcodes,dcodes,blcodes){var rank;send_bits(s,lcodes-257,5);send_bits(s,dcodes-1,5);send_bits(s,blcodes-4,4);for(rank=0;rank>>=1){if(black_mask&1&&s.dyn_ltree[n*2]!==0){return Z_BINARY}}if(s.dyn_ltree[9*2]!==0||s.dyn_ltree[10*2]!==0||s.dyn_ltree[13*2]!==0){return Z_TEXT}for(n=32;n0){if(s.strm.data_type===Z_UNKNOWN){s.strm.data_type=detect_data_type(s)}build_tree(s,s.l_desc);build_tree(s,s.d_desc);max_blindex=build_bl_tree(s);opt_lenb=s.opt_len+3+7>>>3;static_lenb=s.static_len+3+7>>>3;if(static_lenb<=opt_lenb){opt_lenb=static_lenb}}else{opt_lenb=static_lenb=stored_len+5}if(stored_len+4<=opt_lenb&&buf!==-1){_tr_stored_block(s,buf,stored_len,last)}else if(s.strategy===Z_FIXED||static_lenb===opt_lenb){send_bits(s,(STATIC_TREES<<1)+(last?1:0),3);compress_block(s,static_ltree,static_dtree)}else{send_bits(s,(DYN_TREES<<1)+(last?1:0),3);send_all_trees(s,s.l_desc.max_code+1,s.d_desc.max_code+1,max_blindex+1);compress_block(s,s.dyn_ltree,s.dyn_dtree)}init_block(s);if(last){bi_windup(s)}}function _tr_tally(s,dist,lc){s.pending_buf[s.d_buf+s.last_lit*2]=dist>>>8&255;s.pending_buf[s.d_buf+s.last_lit*2+1]=dist&255;s.pending_buf[s.l_buf+s.last_lit]=lc&255;s.last_lit++;if(dist===0){s.dyn_ltree[lc*2]++}else{s.matches++;dist--;s.dyn_ltree[(_length_code[lc]+LITERALS+1)*2]++;s.dyn_dtree[d_code(dist)*2]++}return s.last_lit===s.lit_bufsize-1}exports._tr_init=_tr_init;exports._tr_stored_block=_tr_stored_block;exports._tr_flush_block=_tr_flush_block;exports._tr_tally=_tr_tally;exports._tr_align=_tr_align},{"../utils/common":27}],39:[function(_dereq_,module,exports){"use strict";function ZStream(){this.input=null;this.next_in=0;this.avail_in=0;this.total_in=0;this.output=null;this.next_out=0;this.avail_out=0;this.total_out=0;this.msg="";this.state=null;this.data_type=2;this.adler=0}module.exports=ZStream},{}]},{},[9])(9)});var cptable={version:"1.8.0"};cptable[437]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎรฌร„ร…ร‰รฆร†รดรถรฒรปรนรฟร–รœยขยฃยฅโ‚งฦ’รกรญรณรบรฑร‘ยชยบยฟโŒยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[620]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร‡รผรฉรขรคร ฤ…รงรชรซรจรฏรฎฤ‡ร„ฤ„ฤ˜ฤ™ล‚รดรถฤ†รปรนลšร–รœยขลยฅล›ฦ’ลนลปรณร“ล„ลƒลบลผยฟโŒยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[737]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮกฮฃฮคฮฅฮฆฮงฮจฮฉฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯƒฯ‚ฯ„ฯ…ฯ†ฯ‡ฯˆโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฯ‰ฮฌฮญฮฎฯŠฮฏฯŒฯฯ‹ฯŽฮ†ฮˆฮ‰ฮŠฮŒฮŽฮยฑโ‰ฅโ‰คฮชฮซรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[850]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎรฌร„ร…ร‰รฆร†รดรถรฒรปรนรฟร–รœรธยฃร˜ร—ฦ’รกรญรณรบรฑร‘ยชยบยฟยฎยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”ครร‚ร€ยฉโ•ฃโ•‘โ•—โ•ยขยฅโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผรฃรƒโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยครฐรรŠร‹รˆฤฑรรŽรโ”˜โ”Œโ–ˆโ–„ยฆรŒโ–€ร“รŸร”ร’รตร•ยตรพรžรšร›ร™รฝรยฏยดยญยฑโ€—ยพยถยงรทยธยฐยจยทยนยณยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[852]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร‡รผรฉรขรคลฏฤ‡รงล‚รซลล‘รฎลนร„ฤ†ร‰ฤนฤบรดรถฤฝฤพลšล›ร–รœลคลฅลร—ฤรกรญรณรบฤ„ฤ…ลฝลพฤ˜ฤ™ยฌลบฤŒลŸยซยปโ–‘โ–’โ–“โ”‚โ”ครร‚ฤšลžโ•ฃโ•‘โ•—โ•ลปลผโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผฤ‚ฤƒโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยคฤ‘ฤฤŽร‹ฤล‡รรŽฤ›โ”˜โ”Œโ–ˆโ–„ลขลฎโ–€ร“รŸร”ลƒล„ลˆล ลกล”รšล•ลฐรฝรลฃยดยญหห›ห‡ห˜ยงรทยธยฐยจห™ลฑล˜ล™โ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[857]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎฤฑร„ร…ร‰รฆร†รดรถรฒรปรนฤฐร–รœรธยฃร˜ลžลŸรกรญรณรบรฑร‘ฤžฤŸยฟยฎยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”ครร‚ร€ยฉโ•ฃโ•‘โ•—โ•ยขยฅโ”โ””โ”ดโ”ฌโ”œโ”€โ”ผรฃรƒโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌยคยบยชรŠร‹รˆ๏ฟฝรรŽรโ”˜โ”Œโ–ˆโ–„ยฆรŒโ–€ร“รŸร”ร’รตร•ยต๏ฟฝร—รšร›ร™รฌรฟยฏยดยญยฑ๏ฟฝยพยถยงรทยธยฐยจยทยนยณยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[861]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร‡รผรฉรขรคร รฅรงรชรซรจรรฐรžร„ร…ร‰รฆร†รดรถรพรปรรฝร–รœรธยฃร˜โ‚งฦ’รกรญรณรบรรร“รšยฟโŒยฌยฝยผยกยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[865]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร‡รผรฉรขรคร รฅรงรชรซรจรฏรฎรฌร„ร…ร‰รฆร†รดรถรฒรปรนรฟร–รœรธยฃร˜โ‚งฦ’รกรญรณรบรฑร‘ยชยบยฟโŒยฌยฝยผยกยซยคโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[866]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽัะั‘ะ„ั”ะ‡ั—ะŽัžยฐโˆ™ยทโˆšโ„–ยคโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[874]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€ฆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝย เธเธ‚เธƒเธ„เธ…เธ†เธ‡เธˆเธ‰เธŠเธ‹เธŒเธเธŽเธเธเธ‘เธ’เธ“เธ”เธ•เธ–เธ—เธ˜เธ™เธšเธ›เธœเธเธžเธŸเธ เธกเธขเธฃเธคเธฅเธฆเธงเธจเธฉเธชเธซเธฌเธญเธฎเธฏเธฐเธฑเธฒเธณเธดเธตเธถเธทเธธเธนเธบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝเธฟเน€เนเน‚เนƒเน„เน…เน†เน‡เนˆเน‰เนŠเน‹เนŒเนเนŽเนเนเน‘เน’เน“เน”เน•เน–เน—เน˜เน™เนšเน›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[895]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ฤŒรผรฉฤรคฤŽลคฤฤ›ฤšฤนรฤพวชร„รร‰ลพลฝรดรถร“ลฏรšรฝร–รœล ฤฝรล˜ลฅรกรญรณรบลˆล‡ลฎร”ลกล™ล•ล”ยผยงยซยปโ–‘โ–’โ–“โ”‚โ”คโ•กโ•ขโ•–โ••โ•ฃโ•‘โ•—โ•โ•œโ•›โ”โ””โ”ดโ”ฌโ”œโ”€โ”ผโ•žโ•Ÿโ•šโ•”โ•ฉโ•ฆโ• โ•โ•ฌโ•งโ•จโ•คโ•ฅโ•™โ•˜โ•’โ•“โ•ซโ•ชโ”˜โ”Œโ–ˆโ–„โ–Œโ–โ–€ฮฑรŸฮ“ฯ€ฮฃฯƒยตฯ„ฮฆฮ˜ฮฉฮดโˆžฯ†ฮตโˆฉโ‰กยฑโ‰ฅโ‰คโŒ โŒกรทโ‰ˆยฐโˆ™ยทโˆšโฟยฒโ– ย ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[932]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฝก๏ฝข๏ฝฃ๏ฝค๏ฝฅ๏ฝฆ๏ฝง๏ฝจ๏ฝฉ๏ฝช๏ฝซ๏ฝฌ๏ฝญ๏ฝฎ๏ฝฏ๏ฝฐ๏ฝฑ๏ฝฒ๏ฝณ๏ฝด๏ฝต๏ฝถ๏ฝท๏ฝธ๏ฝน๏ฝบ๏ฝป๏ฝผ๏ฝฝ๏ฝพ๏ฝฟ๏พ€๏พ๏พ‚๏พƒ๏พ„๏พ…๏พ†๏พ‡๏พˆ๏พ‰๏พŠ๏พ‹๏พŒ๏พ๏พŽ๏พ๏พ๏พ‘๏พ’๏พ“๏พ”๏พ•๏พ–๏พ—๏พ˜๏พ™๏พš๏พ›๏พœ๏พ๏พž๏พŸ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[129]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ€€ใ€ใ€‚๏ผŒ๏ผŽใƒป๏ผš๏ผ›๏ผŸ๏ผใ‚›ใ‚œยด๏ฝ€ยจ๏ผพ๏ฟฃ๏ผฟใƒฝใƒพใ‚ใ‚žใ€ƒไปใ€…ใ€†ใ€‡ใƒผโ€•โ€๏ผ๏ผผ๏ฝžโˆฅ๏ฝœโ€ฆโ€ฅโ€˜โ€™โ€œโ€๏ผˆ๏ผ‰ใ€”ใ€•๏ผป๏ผฝ๏ฝ›๏ฝใ€ˆใ€‰ใ€Šใ€‹ใ€Œใ€ใ€Žใ€ใ€ใ€‘๏ผ‹๏ผยฑร—๏ฟฝรท๏ผโ‰ ๏ผœ๏ผžโ‰ฆโ‰งโˆžโˆดโ™‚โ™€ยฐโ€ฒโ€ณโ„ƒ๏ฟฅ๏ผ„๏ฟ ๏ฟก๏ผ…๏ผƒ๏ผ†๏ผŠ๏ผ ยงโ˜†โ˜…โ—‹โ—โ—Žโ—‡โ—†โ–กโ– โ–ณโ–ฒโ–ฝโ–ผโ€ปใ€’โ†’โ†โ†‘โ†“ใ€“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโˆˆโˆ‹โŠ†โŠ‡โŠ‚โŠƒโˆชโˆฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโˆงโˆจ๏ฟขโ‡’โ‡”โˆ€โˆƒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโˆ โŠฅโŒ’โˆ‚โˆ‡โ‰กโ‰’โ‰ชโ‰ซโˆšโˆฝโˆโˆตโˆซโˆฌ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ„ซโ€ฐโ™ฏโ™ญโ™ชโ€ โ€กยถ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ—ฏ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[129].length;++j)if(D[129][j].charCodeAt(0)!==65533){e[D[129][j]]=33024+j;d[33024+j]=D[129][j]}D[130]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ผ๏ผ‘๏ผ’๏ผ“๏ผ”๏ผ•๏ผ–๏ผ—๏ผ˜๏ผ™๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ผก๏ผข๏ผฃ๏ผค๏ผฅ๏ผฆ๏ผง๏ผจ๏ผฉ๏ผช๏ผซ๏ผฌ๏ผญ๏ผฎ๏ผฏ๏ผฐ๏ผฑ๏ผฒ๏ผณ๏ผด๏ผต๏ผถ๏ผท๏ผธ๏ผน๏ผบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฝ๏ฝ‚๏ฝƒ๏ฝ„๏ฝ…๏ฝ†๏ฝ‡๏ฝˆ๏ฝ‰๏ฝŠ๏ฝ‹๏ฝŒ๏ฝ๏ฝŽ๏ฝ๏ฝ๏ฝ‘๏ฝ’๏ฝ“๏ฝ”๏ฝ•๏ฝ–๏ฝ—๏ฝ˜๏ฝ™๏ฝš๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใใ‚ใƒใ„ใ…ใ†ใ‡ใˆใ‰ใŠใ‹ใŒใใŽใใใ‘ใ’ใ“ใ”ใ•ใ–ใ—ใ˜ใ™ใšใ›ใœใใžใŸใ ใกใขใฃใคใฅใฆใงใจใฉใชใซใฌใญใฎใฏใฐใฑใฒใณใดใตใถใทใธในใบใปใผใฝใพใฟใ‚€ใ‚ใ‚‚ใ‚ƒใ‚„ใ‚…ใ‚†ใ‚‡ใ‚ˆใ‚‰ใ‚Šใ‚‹ใ‚Œใ‚ใ‚Žใ‚ใ‚ใ‚‘ใ‚’ใ‚“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[130].length;++j)if(D[130][j].charCodeAt(0)!==65533){e[D[130][j]]=33280+j;d[33280+j]=D[130][j]}D[131]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ‚กใ‚ขใ‚ฃใ‚คใ‚ฅใ‚ฆใ‚งใ‚จใ‚ฉใ‚ชใ‚ซใ‚ฌใ‚ญใ‚ฎใ‚ฏใ‚ฐใ‚ฑใ‚ฒใ‚ณใ‚ดใ‚ตใ‚ถใ‚ทใ‚ธใ‚นใ‚บใ‚ปใ‚ผใ‚ฝใ‚พใ‚ฟใƒ€ใƒใƒ‚ใƒƒใƒ„ใƒ…ใƒ†ใƒ‡ใƒˆใƒ‰ใƒŠใƒ‹ใƒŒใƒใƒŽใƒใƒใƒ‘ใƒ’ใƒ“ใƒ”ใƒ•ใƒ–ใƒ—ใƒ˜ใƒ™ใƒšใƒ›ใƒœใƒใƒžใƒŸ๏ฟฝใƒ ใƒกใƒขใƒฃใƒคใƒฅใƒฆใƒงใƒจใƒฉใƒชใƒซใƒฌใƒญใƒฎใƒฏใƒฐใƒฑใƒฒใƒณใƒดใƒตใƒถ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮกฮฃฮคฮฅฮฆฮงฮจฮฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯƒฯ„ฯ…ฯ†ฯ‡ฯˆฯ‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[131].length;++j)if(D[131][j].charCodeAt(0)!==65533){e[D[131][j]]=33536+j;d[33536+j]=D[131][j]}D[132]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝะะ‘ะ’ะ“ะ”ะ•ะะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝะฐะฑะฒะณะดะตั‘ะถะทะธะนะบะปะผะฝ๏ฟฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽั๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ”€โ”‚โ”Œโ”โ”˜โ””โ”œโ”ฌโ”คโ”ดโ”ผโ”โ”ƒโ”โ”“โ”›โ”—โ”ฃโ”ณโ”ซโ”ปโ•‹โ” โ”ฏโ”จโ”ทโ”ฟโ”โ”ฐโ”ฅโ”ธโ•‚๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[132].length;++j)if(D[132][j].charCodeAt(0)!==65533){e[D[132][j]]=33792+j;d[33792+j]=D[132][j]}D[135]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ‘ โ‘กโ‘ขโ‘ฃโ‘คโ‘ฅโ‘ฆโ‘งโ‘จโ‘ฉโ‘ชโ‘ซโ‘ฌโ‘ญโ‘ฎโ‘ฏโ‘ฐโ‘ฑโ‘ฒโ‘ณโ… โ…กโ…ขโ…ฃโ…คโ…ฅโ…ฆโ…งโ…จโ…ฉ๏ฟฝใ‰ใŒ”ใŒขใใŒ˜ใŒงใŒƒใŒถใ‘ใ—ใŒใŒฆใŒฃใŒซใŠใŒปใŽœใŽใŽžใŽŽใŽใ„ใŽก๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใป๏ฟฝใ€ใ€Ÿโ„–ใโ„กใŠคใŠฅใŠฆใŠงใŠจใˆฑใˆฒใˆนใพใฝใผโ‰’โ‰กโˆซโˆฎโˆ‘โˆšโŠฅโˆ โˆŸโŠฟโˆตโˆฉโˆช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[135].length;++j)if(D[135][j].charCodeAt(0)!==65533){e[D[135][j]]=34560+j;d[34560+j]=D[135][j]}D[136]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไบœๅ”–ๅจƒ้˜ฟๅ“€ๆ„›ๆŒจๅงถ้€ข่‘ต่Œœ็ฉๆ‚ชๆกๆธฅๆ—ญ่‘ฆ่Šฆ้ฏตๆข“ๅœงๆ–กๆ‰ฑๅฎ›ๅง่™ป้ฃด็ตข็ถพ้ฎŽๆˆ–็ฒŸ่ขทๅฎ‰ๅบตๆŒ‰ๆš—ๆกˆ้—‡้žๆไปฅไผŠไฝไพๅ‰ๅ›ฒๅคทๅง”ๅจๅฐ‰ๆƒŸๆ„ๆ…ฐๆ˜“ๆค…็‚บ็•็•ฐ็งป็ถญ็ทฏ่ƒƒ่Ž่กฃ่ฌ‚้•้บๅŒปไบ•ไบฅๅŸŸ่‚ฒ้ƒ็ฃฏไธ€ๅฃฑๆบข้€ธ็จฒ่Œจ่Š‹้ฐฏๅ…ๅฐๅ’ฝๅ“กๅ› ๅงปๅผ•้ฃฒๆทซ่ƒค่”ญ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[136].length;++j)if(D[136][j].charCodeAt(0)!==65533){e[D[136][j]]=34816+j;d[34816+j]=D[136][j]}D[137]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้™ข้™ฐ้š ้Ÿปๅ‹ๅณๅฎ‡็ƒ็พฝ่ฟ‚้›จๅฏ้ตœ็ชบไธ‘็ข“่‡ผๆธฆๅ˜˜ๅ”„ๆฌ่”š้ฐปๅงฅๅŽฉๆตฆ็“œ้–ๅ™‚ไบ‘้‹้›ฒ่้คŒๅกๅ–ถๅฌฐๅฝฑๆ˜ ๆ›ณๆ „ๆฐธๆณณๆดฉ็‘›็›ˆ็ฉŽ้ ด่‹ฑ่ก›่ฉ ้‹ญๆถฒ็–ซ็›Š้ง…ๆ‚ฆ่ฌ่ถŠ้–ฒๆฆŽๅŽญๅ††๏ฟฝๅœ’ๅ ฐๅฅ„ๅฎดๅปถๆ€จๆŽฉๆดๆฒฟๆผ”็‚Ž็„”็…™็‡•็Œฟ็ธ่‰ถ่‹‘่–—้ ้‰›้ด›ๅกฉๆ–ผๆฑš็”ฅๅ‡นๅคฎๅฅฅๅพ€ๅฟœๆŠผๆ—บๆจชๆฌงๆฎด็Ž‹็ฟ่ฅ–้ดฌ้ดŽ้ป„ๅฒกๆฒ–่ปๅ„„ๅฑ‹ๆ†ถ่‡†ๆกถ็‰กไน™ไฟบๅธๆฉๆธฉ็ฉ้Ÿณไธ‹ๅŒ–ไปฎไฝ•ไผฝไพกไฝณๅŠ ๅฏๅ˜‰ๅคๅซๅฎถๅฏก็ง‘ๆš‡ๆžœๆžถๆญŒๆฒณ็ซ็‚็ฆ็ฆพ็จผ็ฎ‡่Šฑ่‹›่Œ„่ท่ฏ่“่ฆ่ชฒๅ˜ฉ่ฒจ่ฟฆ้Ž้œž่šŠไฟ„ๅณจๆˆ‘็‰™็”ป่‡ฅ่Šฝ่›พ่ณ€้›…้ค“้ง•ไป‹ไผš่งฃๅ›žๅกŠๅฃŠๅปปๅฟซๆ€ชๆ‚”ๆขๆ‡ๆˆ’ๆ‹ๆ”น๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[137].length;++j)if(D[137][j].charCodeAt(0)!==65533){e[D[137][j]]=35072+j;d[35072+j]=D[137][j]}D[138]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ญๆ™ฆๆขฐๆตท็ฐ็•Œ็š†็ตต่Šฅ่Ÿน้–‹้šŽ่ฒๅ‡ฑๅŠพๅค–ๅ’ณๅฎณๅด–ๆ…จๆฆ‚ๆถฏ็ข่“‹่ก—่ฉฒ้Žง้ชธๆตฌ้ฆจ่›™ๅžฃๆŸฟ่›Ž้ˆŽๅŠƒๅš‡ๅ„ๅป“ๆ‹กๆ’นๆ ผๆ ธๆฎป็ฒ็ขบ็ฉซ่ฆš่ง’่ตซ่ผƒ้ƒญ้–ฃ้š”้ฉๅญฆๅฒณๆฅฝ้ก้กŽๆŽ›็ฌ ๆจซ๏ฟฝๆฉฟๆขถ้ฐๆฝŸๅ‰ฒๅ–ๆฐๆ‹ฌๆดปๆธ‡ๆป‘่‘›่ค่ฝ„ไธ”้ฐนๅถๆค›ๆจบ้ž„ๆ ชๅ…œ็ซƒ่’ฒ้‡œ้ŽŒๅ™›้ดจๆ ข่Œ…่ฑ็ฒฅๅˆˆ่‹…็“ฆไนพไพƒๅ† ๅฏ’ๅˆŠๅ‹˜ๅ‹งๅทปๅ–šๅ ชๅงฆๅฎŒๅฎ˜ๅฏ›ๅนฒๅนนๆ‚ฃๆ„Ÿๆ…ฃๆ†พๆ›ๆ•ขๆŸ‘ๆก“ๆฃบๆฌพๆญ“ๆฑ—ๆผขๆพ—ๆฝ…็’ฐ็”˜็›ฃ็œ‹็ซฟ็ฎก็ฐก็ทฉ็ผถ็ฟฐ่‚่‰ฆ่Žž่ฆณ่ซŒ่ฒซ้‚„้‘‘้–“้–‘้–ข้™ฅ้Ÿ“้คจ่ˆ˜ไธธๅซๅฒธๅทŒ็Žฉ็™Œ็œผๅฒฉ็ฟซ่ด‹้›้ ‘้ก”้ก˜ไผไผŽๅฑๅ–œๅ™จๅŸบๅฅ‡ๅฌ‰ๅฏ„ๅฒๅธŒๅนพๅฟŒๆฎๆœบๆ——ๆ—ขๆœŸๆฃ‹ๆฃ„๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[138].length;++j)if(D[138][j].charCodeAt(0)!==65533){e[D[138][j]]=35328+j;d[35328+j]=D[138][j]}D[139]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฉŸๅธฐๆฏ…ๆฐ—ๆฑฝ็•ฟ็ฅˆๅญฃ็จ€็ด€ๅพฝ่ฆ่จ˜่ฒด่ตท่ปŒ่ผ้ฃข้จŽ้ฌผไบ€ๅฝๅ„€ๅฆ“ๅฎœๆˆฏๆŠ€ๆ“ฌๆฌบ็Š ็–‘็ฅ‡็พฉ่Ÿป่ชผ่ญฐๆŽฌ่Š้ž ๅ‰ๅƒๅ–ซๆก”ๆฉ˜่ฉฐ็ งๆต้ปๅดๅฎข่„š่™้€†ไธ˜ไน…ไป‡ไผ‘ๅŠๅธๅฎฎๅผ“ๆ€ฅๆ•‘๏ฟฝๆœฝๆฑ‚ๆฑฒๆณฃ็ธ็ƒ็ฉถ็ชฎ็ฌˆ็ดš็ณพ็ตฆๆ—ง็‰›ๅŽปๅฑ…ๅทจๆ‹’ๆ‹ ๆŒ™ๆธ ่™š่จฑ่ท้‹ธๆผ็ฆฆ้ญšไบจไบซไบฌไพ›ไพ ๅƒ‘ๅ…‡็ซถๅ…ฑๅ‡ถๅ”ๅŒกๅฟๅซๅ–ฌๅขƒๅณกๅผทๅฝŠๆ€ฏๆๆญๆŒŸๆ•™ๆฉ‹ๆณ็‹‚็‹ญ็Ÿฏ่ƒธ่„…่ˆˆ่•Ž้ƒท้ก้Ÿฟ้ฅ—้ฉšไปฐๅ‡ๅฐญๆšๆฅญๅฑ€ๆ›ฒๆฅต็Ž‰ๆก็ฒๅƒ…ๅ‹คๅ‡ๅทพ้Œฆๆ–คๆฌฃๆฌฝ็ด็ฆ็ฆฝ็ญ‹็ทŠ่Šน่Œ่กฟ่ฅŸ่ฌน่ฟ‘้‡‘ๅŸ้Š€ไนๅ€ถๅฅๅŒบ็‹—็Ž–็Ÿฉ่‹ฆ่บฏ้ง†้งˆ้ง’ๅ…ทๆ„š่™žๅ–ฐ็ฉบๅถๅฏ“้‡้š…ไธฒๆซ›้‡งๅฑ‘ๅฑˆ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[139].length;++j)if(D[139][j].charCodeAt(0)!==65533){e[D[139][j]]=35584+j;d[35584+j]=D[139][j]}D[140]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆŽ˜็ชŸๆฒ“้ด่ฝก็ชช็†Š้šˆ็ฒ‚ๆ —็นฐๆก‘้ฌๅ‹ฒๅ›่–ซ่จ“็พค่ป้ƒกๅฆ่ขˆ็ฅไฟ‚ๅ‚พๅˆ‘ๅ…„ๅ•“ๅœญ็ชๅž‹ๅฅ‘ๅฝขๅพ„ๆตๆ…ถๆ…งๆ†ฉๆŽฒๆบๆ•ฌๆ™ฏๆก‚ๆธ“็•ฆ็จฝ็ณป็ตŒ็ถ™็น‹็ฝซ่ŒŽ่Š่›่จˆ่ฉฃ่ญฆ่ปฝ้ š้ถ่Šธ่ฟŽ้ฏจ๏ฟฝๅŠ‡ๆˆŸๆ’ƒๆฟ€้š™ๆกๅ‚‘ๆฌ ๆฑบๆฝ”็ฉด็ต่ก€่จฃๆœˆไปถๅ€นๅ€ฆๅฅๅ…ผๅˆธๅ‰ฃๅ–งๅœๅ …ๅซŒๅปบๆ†ฒๆ‡ธๆ‹ณๆฒๆคœๆจฉ็‰ฝ็Šฌ็Œฎ็ ”็กฏ็ตน็œŒ่‚ฉ่ฆ‹่ฌ™่ณข่ป’้ฃ้ต้™บ้ก•้จ“้นธๅ…ƒๅŽŸๅŽณๅนปๅผฆๆธ›ๆบ็Ž„็พ็ตƒ่ˆท่จ€่ซบ้™ไนŽๅ€‹ๅคๅ‘ผๅ›บๅง‘ๅญคๅทฑๅบซๅผงๆˆธๆ•…ๆžฏๆน–็‹็ณŠ่ขด่‚ก่ƒก่ฐ่™Ž่ช‡่ทจ้ˆท้›‡้กง้ผ“ไบ”ไบ’ไผๅˆๅ‘‰ๅพๅจฏๅพŒๅพกๆ‚ŸๆขงๆชŽ็‘š็ข่ชž่ชค่ญท้†ไนž้ฏ‰ไบคไฝผไพฏๅ€™ๅ€–ๅ…‰ๅ…ฌๅŠŸๅŠนๅ‹พๅŽšๅฃๅ‘๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[140].length;++j)if(D[140][j].charCodeAt(0)!==65533){e[D[140][j]]=35840+j;d[35840+j]=D[140][j]}D[141]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅŽๅ–‰ๅ‘ๅžขๅฅฝๅญ”ๅญๅฎๅทฅๅทงๅททๅนธๅบƒๅบšๅบทๅผ˜ๆ’ๆ…ŒๆŠ—ๆ‹˜ๆŽงๆ”ปๆ˜‚ๆ™ƒๆ›ดๆญๆ กๆข—ๆง‹ๆฑŸๆดชๆตฉๆธฏๆบ็”ฒ็š‡็กฌ็จฟ็ณ ็ด…็ด˜็ตž็ถฑ่€•่€ƒ่‚ฏ่‚ฑ่…”่†่ˆช่’่กŒ่กก่ฌ›่ฒข่ณผ้ƒŠ้…ต้‰ฑ็ ฟ้‹ผ้–ค้™๏ฟฝ้ …้ฆ™้ซ˜้ดปๅ‰›ๅŠซๅทๅˆๅฃ•ๆ‹ทๆฟ ่ฑช่ฝŸ้บนๅ…‹ๅˆปๅ‘Šๅ›ฝ็ฉ€้…ท้ต ้ป’็„ๆผ‰่…ฐ็”‘ๅฟฝๆƒš้ชจ็‹›่พผๆญค้ ƒไปŠๅ›ฐๅคๅขพๅฉšๆจๆ‡‡ๆ˜ๆ˜†ๆ นๆขฑๆทท็—•็ดบ่‰ฎ้ญ‚ไบ›ไฝๅ‰ๅ”†ๅตฏๅทฆๅทฎๆŸปๆฒ™็‘ณ็ ‚่ฉ้Ž–่ฃŸๅๅบงๆŒซๅ‚ตๅ‚ฌๅ†ๆœ€ๅ“‰ๅกžๅฆปๅฎฐๅฝฉๆ‰ๆŽกๆ ฝๆญณๆธˆ็ฝ้‡‡็Š€็ •็ ฆ็ฅญๆ–Ž็ดฐ่œ่ฃ่ผ‰้š›ๅ‰คๅœจๆ็ฝช่ฒกๅ†ดๅ‚้˜ชๅ บๆฆŠ่‚ดๅ’ฒๅดŽๅŸผ็ข•้ทบไฝœๅ‰Šๅ’‹ๆพๆ˜จๆœ”ๆŸต็ช„็ญ–็ดข้Œฏๆกœ้ฎญ็ฌนๅŒ™ๅ†Šๅˆท๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[141].length;++j)if(D[141][j].charCodeAt(0)!==65533){e[D[141][j]]=36096+j;d[36096+j]=D[141][j]}D[142]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฏŸๆ‹ถๆ’ฎๆ“ฆๆœญๆฎบ่–ฉ้›‘็š้ฏ–ๆŒ้Œ†้ฎซ็šฟๆ™’ไธ‰ๅ‚˜ๅ‚ๅฑฑๆƒจๆ’’ๆ•ฃๆกŸ็‡ฆ็Š็”ฃ็ฎ—็บ‚่š•่ฎƒ่ณ›้…ธ้คๆ–ฌๆšซๆฎ‹ไป•ไป”ไผบไฝฟๅˆบๅธๅฒๅ—ฃๅ››ๅฃซๅง‹ๅง‰ๅงฟๅญๅฑๅธ‚ๅธซๅฟ—ๆ€ๆŒ‡ๆ”ฏๅญœๆ–ฏๆ–ฝๆ—จๆžๆญข๏ฟฝๆญปๆฐ็…็ฅ‰็ง็ณธ็ด™็ดซ่‚ข่„‚่‡ณ่ฆ–่ฉž่ฉฉ่ฉฆ่ชŒ่ซฎ่ณ‡่ณœ้›Œ้ฃผๆญฏไบ‹ไผผไพๅ…ๅญ—ๅฏบๆ…ˆๆŒๆ™‚ๆฌกๆป‹ๆฒป็ˆพ็’ฝ็—”็ฃ็คบ่€Œ่€ณ่‡ช่’”่พžๆฑ้นฟๅผ่ญ˜้ดซ็ซบ่ปธๅฎ้›ซไธƒๅฑๅŸทๅคฑๅซ‰ๅฎคๆ‚‰ๆนฟๆผ†็–พ่ณชๅฎŸ่”€็ฏ ๅฒๆŸด่Šๅฑก่•Š็ธž่ˆŽๅ†™ๅฐ„ๆจ่ตฆๆ–œ็…ฎ็คพ็ด—่€…่ฌ่ปŠ้ฎ่›‡้‚ชๅ€Ÿๅ‹บๅฐบๆ“็ผ็ˆต้…Œ้‡ˆ้Œซ่‹ฅๅฏ‚ๅผฑๆƒนไธปๅ–ๅฎˆๆ‰‹ๆœฑๆฎŠ็‹ฉ็ ็จฎ่…ซ่ถฃ้…’้ฆ–ๅ„’ๅ—ๅ‘ชๅฏฟๆŽˆๆจน็ถฌ้œ€ๅ›šๅŽๅ‘จ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[142].length;++j)if(D[142][j].charCodeAt(0)!==65533){e[D[142][j]]=36352+j;d[36352+j]=D[142][j]}D[143]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฎ—ๅฐฑๅทžไฟฎๆ„ๆ‹พๆดฒ็ง€็ง‹็ต‚็น็ฟ’่‡ญ่ˆŸ่’่ก†่ฅฒ่ฎ่นด่ผฏ้€ฑ้…‹้…ฌ้›†้†œไป€ไฝๅ……ๅๅพ“ๆˆŽๆŸ”ๆฑๆธ‹็ฃ็ธฆ้‡้Šƒๅ”ๅค™ๅฎฟๆท‘็ฅ็ธฎ็ฒ›ๅกพ็†Ÿๅ‡บ่ก“่ฟฐไฟŠๅณปๆ˜ฅ็žฌ็ซฃ่ˆœ้งฟๅ‡†ๅพชๆ—ฌๆฅฏๆฎ‰ๆทณ๏ฟฝๆบ–ๆฝค็›พ็ด”ๅทก้ต้†‡้ †ๅ‡ฆๅˆๆ‰€ๆš‘ๆ›™ๆธšๅบถ็ท’็ฝฒๆ›ธ่–ฏ่—ท่ซธๅŠฉๅ™ๅฅณๅบๅพๆ•้‹ค้™คๅ‚ทๅ„Ÿๅ‹ๅŒ ๅ‡ๅฌๅ“จๅ•†ๅ”ฑๅ˜—ๅฅจๅฆพๅจผๅฎตๅฐ†ๅฐๅฐ‘ๅฐšๅบ„ๅบŠๅป ๅฝฐๆ‰ฟๆŠ„ๆ‹›ๆŽŒๆทๆ˜‡ๆ˜Œๆ˜ญๆ™ถๆพๆขขๆจŸๆจตๆฒผๆถˆๆธ‰ๆน˜็„ผ็„ฆ็…ง็—‡็œ็ก็ค็ฅฅ็งฐ็ซ ็ฌ‘็ฒง็ดน่‚–่–่’‹่•‰่ก่ฃณ่จŸ่จผ่ฉ”่ฉณ่ฑก่ณž้†ค้‰ฆ้พ้˜้šœ้ž˜ไธŠไธˆไธžไน—ๅ†—ๅ‰ฐๅŸŽๅ ดๅฃŒๅฌขๅธธๆƒ…ๆ“พๆกๆ–ๆต„็Šถ็•ณ็ฉฃ่’ธ่ญฒ้†ธ้Œ ๅ˜ฑๅŸด้ฃพ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[143].length;++j)if(D[143][j].charCodeAt(0)!==65533){e[D[143][j]]=36608+j;d[36608+j]=D[143][j]}D[144]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ‹ญๆคๆฎ–็‡ญ็น”่ท่‰ฒ่งฆ้ฃŸ่•่พฑๅฐปไผธไฟกไพตๅ”‡ๅจ ๅฏๅฏฉๅฟƒๆ…ŽๆŒฏๆ–ฐๆ™‹ๆฃฎๆฆ›ๆตธๆทฑ็”ณ็–น็œŸ็ฅž็งฆ็ดณ่‡ฃ่Šฏ่–ช่ฆช่จบ่บซ่พ›้€ฒ้‡้œ‡ไบบไปๅˆƒๅกตๅฃฌๅฐ‹็”šๅฐฝ่…Ž่จŠ่ฟ…้™ฃ้ญ็ฌฅ่ซ้ ˆ้…ขๅ›ณๅŽจ๏ฟฝ้€—ๅนๅž‚ๅธฅๆŽจๆฐด็‚Š็ก็ฒ‹็ฟ ่กฐ้‚้…”้Œ้Œ˜้š็‘ž้ซ„ๅด‡ๅตฉๆ•ฐๆžข่ถจ้››ๆฎๆ‰ๆค™่…้ —้›€่ฃพๆพ„ๆ‘บๅฏธไธ–็€ฌ็•ๆ˜ฏๅ‡„ๅˆถๅ‹ขๅง“ๅพๆ€งๆˆๆ”ฟๆ•ดๆ˜Ÿๆ™ดๆฃฒๆ –ๆญฃๆธ…็‰ฒ็”Ÿ็››็ฒพ่–ๅฃฐ่ฃฝ่ฅฟ่ช ่ช“่ซ‹้€้†’้’้™ๆ–‰็จŽ่„†้šปๅธญๆƒœๆˆšๆ–ฅๆ˜”ๆž็Ÿณ็ฉ็ฑ็ธพ่„Š่ฒฌ่ตค่ทก่นŸ็ขฉๅˆ‡ๆ‹™ๆŽฅๆ‘‚ๆŠ˜่จญ็ชƒ็ฏ€่ชฌ้›ช็ตถ่ˆŒ่‰ไป™ๅ…ˆๅƒๅ ๅฎฃๅฐ‚ๅฐ–ๅทๆˆฆๆ‰‡ๆ’ฐๆ “ๆ ดๆณ‰ๆต…ๆด—ๆŸ“ๆฝœ็…Ž็…ฝๆ—‹็ฉฟ็ฎญ็ทš๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[144].length;++j)if(D[144][j].charCodeAt(0)!==65533){e[D[144][j]]=36864+j;d[36864+j]=D[144][j]}D[145]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็นŠ็พจ่…บ่ˆ›่ˆน่–ฆ่ฉฎ่ณŽ่ทต้ธ้ท้Šญ้Š‘้–ƒ้ฎฎๅ‰ๅ–„ๆผธ็„ถๅ…จ็ฆ…็น•่†ณ็ณŽๅ™Œๅก‘ๅฒจๆŽชๆ›พๆ›ฝๆฅš็‹™็–็–Ž็คŽ็ฅ–็งŸ็ฒ—็ด ็ต„่˜‡่จด้˜ป้ก้ผ ๅƒงๅ‰ตๅŒๅขๅ€‰ๅ–ชๅฃฎๅฅ็ˆฝๅฎ‹ๅฑคๅŒๆƒฃๆƒณๆœๆŽƒๆŒฟๆŽป๏ฟฝๆ“ๆ—ฉๆ›นๅทฃๆงๆงฝๆผ•็‡ฅไบ‰็—ฉ็›ธ็ช“็ณŸ็ท็ถœ่ก่‰่˜่‘ฌ่’ผ่—ป่ฃ…่ตฐ้€้ญ้Ž—้œœ้จ’ๅƒๅข—ๆ†Ž่‡“่”ต่ดˆ้€ ไฟƒๅดๅ‰‡ๅณๆฏๆ‰ๆŸๆธฌ่ถณ้€Ÿไฟ—ๅฑž่ณŠๆ—็ถšๅ’่ข–ๅ…ถๆƒๅญ˜ๅญซๅฐŠๆๆ‘้œไป–ๅคšๅคชๆฑฐ่ฉ‘ๅ”พๅ •ๅฆฅๆƒฐๆ‰“ๆŸ่ˆตๆฅ•้™€้ง„้จจไฝ“ๅ †ๅฏพ่€ๅฒฑๅธฏๅพ…ๆ€ ๆ…‹ๆˆดๆ›ฟๆณฐๆปž่ƒŽ่…ฟ่‹”่ข‹่ฒธ้€€้€ฎ้šŠ้ป›้ฏ›ไปฃๅฐๅคง็ฌฌ้†้กŒ้ทนๆป็€งๅ“ๅ•„ๅฎ…ๆ‰˜ๆŠžๆ‹“ๆฒขๆฟฏ็ข่จ—้ธๆฟ่ซพ่Œธๅ‡ง่›ธๅช๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[145].length;++j)if(D[145][j].charCodeAt(0)!==65533){e[D[145][j]]=37120+j;d[37120+j]=D[145][j]}D[146]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฉไฝ†้”่พฐๅฅช่„ฑๅทฝ็ซช่พฟๆฃš่ฐท็‹ธ้ฑˆๆจฝ่ชฐไธนๅ˜ๅ˜†ๅฆๆ‹…ๆŽขๆ—ฆๆญŽๆทกๆน›็‚ญ็Ÿญ็ซฏ็ฎช็ถป่€ฝ่ƒ†่›‹่ช•้›ๅ›ฃๅฃ‡ๅผพๆ–ญๆš–ๆช€ๆฎต็”ท่ซ‡ๅ€ค็Ÿฅๅœฐๅผ›ๆฅๆ™บๆฑ ็—ด็จš็ฝฎ่‡ด่œ˜้…้ฆณ็ฏ‰็•œ็ซน็ญ‘่“„๏ฟฝ้€็งฉ็ช’่Œถๅซก็€ไธญไปฒๅฎ™ๅฟ ๆŠฝๆ˜ผๆŸฑๆณจ่™ซ่กท่จป้…Ž้‹ณ้งๆจ—็€ฆ็Œช่‹ง่‘—่ฒฏไธๅ…†ๅ‡‹ๅ–‹ๅฏตๅธ–ๅธณๅบๅผ”ๅผตๅฝซๅพดๆ‡ฒๆŒ‘ๆšขๆœๆฝฎ็‰’็”บ็œบ่ด่„น่…ธ่ถ่ชฟ่ซœ่ถ…่ทณ้Šš้•ท้ ‚้ณฅๅ‹…ๆ—็›ดๆœ•ๆฒˆ็่ณƒ้Žฎ้™ณๆดฅๅขœๆคŽๆงŒ่ฟฝ้Žš็—›้€šๅกšๆ ‚ๆŽดๆงปไฝƒๆผฌๆŸ˜่พป่”ฆ็ถด้”ๆคฟๆฝฐๅชๅฃทๅฌฌ็ดฌ็ˆชๅŠ้‡ฃ้ถดไบญไฝŽๅœๅตๅ‰ƒ่ฒžๅ‘ˆๅ คๅฎšๅธๅบ•ๅบญๅปทๅผŸๆ‚ŒๆŠตๆŒบๆๆขฏๆฑ€็ข‡็ฆŽ็จ‹็ท ่‰‡่จ‚่ซฆ่น„้€“๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[146].length;++j)if(D[146][j].charCodeAt(0)!==65533){e[D[146][j]]=37376+j;d[37376+j]=D[146][j]}D[147]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้‚ธ้„ญ้‡˜้ผŽๆณฅๆ‘˜ๆ“ขๆ•ตๆปด็š„็ฌ›้ฉ้‘ๆบบๅ“ฒๅพนๆ’ค่ฝ่ฟญ้‰„ๅ…ธๅกซๅคฉๅฑ•ๅบ—ๆทป็บ็”œ่ฒผ่ปข้ก›็‚นไผๆฎฟๆพฑ็”ฐ้›ปๅ…Žๅๅ ตๅก—ๅฆฌๅฑ ๅพ’ๆ–—ๆœๆธก็™ป่Ÿ่ณญ้€”้ƒฝ้็ ฅ็ บๅŠชๅบฆๅœŸๅฅดๆ€’ๅ€’ๅ…šๅ†ฌ๏ฟฝๅ‡ๅˆ€ๅ”ๅก”ๅก˜ๅฅ—ๅฎ•ๅณถๅถ‹ๆ‚ผๆŠ•ๆญๆฑๆกƒๆขผๆฃŸ็›—ๆท˜ๆนฏๆถ›็ฏ็‡ˆๅฝ“็—˜็ฅท็ญ‰็ญ”็ญ’็ณ–็ตฑๅˆฐ่‘ฃ่•ฉ่—ค่จŽ่ฌ„่ฑ†่ธ้€ƒ้€้™้™ถ้ ญ้จฐ้—˜ๅƒๅ‹•ๅŒๅ ‚ๅฐŽๆ†งๆ’žๆดž็žณ็ซฅ่ƒด่„้“้Š…ๅณ ้ด‡ๅŒฟๅพ—ๅพณๆถœ็‰น็ฃ็ฆฟ็ฏคๆฏ’็‹ฌ่ชญๆ ƒๆฉกๅ‡ธ็ชๆคดๅฑŠ้ณถ่‹ซๅฏ…้…‰็€žๅ™ธๅฑฏๆƒ‡ๆ•ฆๆฒŒ่ฑš้้ “ๅ‘‘ๆ›‡้ˆๅฅˆ้‚ฃๅ†…ไนๅ‡ช่–™่ฌŽ็˜ๆบ้‹ๆฅข้ฆด็ธ„็•ทๅ—ๆฅ ่ปŸ้›ฃๆฑไบŒๅฐผๅผ่ฟฉๅŒ‚่ณ‘่‚‰่™นๅปฟๆ—ฅไนณๅ…ฅ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[147].length;++j)if(D[147][j].charCodeAt(0)!==65533){e[D[147][j]]=37632+j;d[37632+j]=D[147][j]}D[148]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฆ‚ๅฐฟ้ŸฎไปปๅฆŠๅฟ่ชๆฟก็ฆฐ็ฅขๅฏง่‘ฑ็Œซ็†ฑๅนดๅฟตๆปๆ’š็‡ƒ็ฒ˜ไนƒๅปผไน‹ๅŸœๅšขๆ‚ฉๆฟƒ็ด่ƒฝ่„ณ่†ฟ่พฒ่ฆ—่šคๅทดๆŠŠๆ’ญ่ฆ‡ๆทๆณขๆดพ็ถ็ ดๅฉ†็ฝต่Šญ้ฆฌไฟณๅปƒๆ‹ๆŽ’ๆ•—ๆฏ็›ƒ็‰Œ่ƒŒ่‚บ่ผฉ้…ๅ€ๅŸนๅช’ๆข…๏ฟฝๆฅณ็…ค็‹ฝ่ฒทๅฃฒ่ณ ้™ช้€™่ฟ็งค็Ÿง่ฉไผฏๅ‰ฅๅšๆ‹ๆŸๆณŠ็™ฝ็ฎ”็ฒ•่ˆถ่–„่ฟซๆ›ๆผ ็ˆ†็ธ›่Žซ้ง้บฆๅ‡ฝ็ฎฑ็กฒ็ฎธ่‚‡็ญˆๆซจๅนก่‚Œ็•‘็• ๅ…ซ้‰ขๆบŒ็™บ้†—้ซชไผ็ฝฐๆŠœ็ญ้–ฅ้ณฉๅ™บๅก™่›ค้šผไผดๅˆคๅŠๅๅ›ๅธ†ๆฌๆ–‘ๆฟๆฐพๆฑŽ็‰ˆ็Šฏ็ญ็•”็น่ˆฌ่—ฉ่ฒฉ็ฏ„้‡†็…ฉ้ ’้ฃฏๆŒฝๆ™ฉ็•ช็›ค็ฃ่•ƒ่›ฎๅŒชๅ‘ๅฆๅฆƒๅบ‡ๅฝผๆ‚ฒๆ‰‰ๆ‰นๆŠซๆ–ๆฏ”ๆณŒ็–ฒ็šฎ็ข‘็ง˜็ท‹็ฝท่‚ฅ่ขซ่ชน่ฒป้ฟ้ž้ฃ›ๆจ‹็ฐธๅ‚™ๅฐพๅพฎๆž‡ๆฏ˜็ต็œ‰็พŽ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[148].length;++j)if(D[148][j].charCodeAt(0)!==65533){e[D[148][j]]=37888+j;d[37888+j]=D[148][j]}D[149]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ผปๆŸŠ็จ—ๅŒน็–‹้ซญๅฝฆ่†่ฑ่‚˜ๅผผๅฟ…็•ข็ญ†้€ผๆกงๅงซๅช›็ด็™พ่ฌฌไฟตๅฝชๆจ™ๆฐทๆผ‚็“ข็ฅจ่กจ่ฉ•่ฑนๅปŸๆ็—…็ง’่‹—้Œจ้‹ฒ่’œ่›ญ้ฐญๅ“ๅฝฌๆ–Œๆตœ็€•่ฒง่ณ“้ ปๆ•็“ถไธไป˜ๅŸ ๅคซๅฉฆๅฏŒๅ†จๅธƒๅบœๆ€–ๆ‰ถๆ•ท๏ฟฝๆ–งๆ™ฎๆตฎ็ˆถ็ฌฆ่…่†š่Š™่ญœ่ฒ ่ณฆ่ตด้˜œ้™„ไพฎๆ’ซๆญฆ่ˆž่‘ก่•ช้ƒจๅฐๆฅ“้ขจ่‘บ่•—ไผๅ‰ฏๅพฉๅน…ๆœ็ฆ่…น่ค‡่ฆ†ๆทตๅผ—ๆ‰•ๆฒธไป็‰ฉ้ฎ’ๅˆ†ๅปๅ™ดๅขณๆ†คๆ‰ฎ็„šๅฅฎ็ฒ‰็ณž็ด›้›ฐๆ–‡่žไธ™ไฝตๅ…ตๅก€ๅนฃๅนณๅผŠๆŸ„ไธฆ่”ฝ้–‰้™›็ฑณ้ ๅƒปๅฃ็™–็ขงๅˆฅ็žฅ่”‘็ฎ†ๅๅค‰็‰‡็ฏ‡็ทจ่พบ่ฟ”้ไพฟๅ‹‰ๅจฉๅผ้žญไฟ่ˆ—้‹ชๅœƒๆ•ๆญฉ็”ซ่ฃœ่ผ”็ฉ‚ๅ‹Ÿๅข“ๆ…•ๆˆŠๆšฎๆฏ็ฐฟ่ฉๅ€ฃไฟธๅŒ…ๅ‘†ๅ ฑๅฅ‰ๅฎๅณฐๅณฏๅดฉๅบ–ๆŠฑๆงๆ”พๆ–นๆœ‹๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[149].length;++j)if(D[149][j].charCodeAt(0)!==65533){e[D[149][j]]=38144+j;d[38144+j]=D[149][j]}D[150]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆณ•ๆณก็ƒน็ ฒ็ธซ่ƒž่Šณ่Œ่“ฌ่œ‚่ค’่จช่ฑŠ้‚ฆ้‹’้ฃฝ้ณณ้ตฌไนไบกๅ‚ๅ‰–ๅŠๅฆจๅธฝๅฟ˜ๅฟ™ๆˆฟๆšดๆœ›ๆŸๆฃ’ๅ†’็ดก่‚ช่†จ่ฌ€่ฒŒ่ฒฟ้‰พ้˜ฒๅ ้ ฌๅŒ—ๅƒ•ๅœๅขจๆ’ฒๆœด็‰ง็ฆ็ฉ†้‡ฆๅ‹ƒๆฒกๆฎ†ๅ €ๅนŒๅฅ”ๆœฌ็ฟปๅ‡ก็›†๏ฟฝๆ‘ฉ็ฃจ้ญ”้บปๅŸ‹ๅฆนๆ˜งๆžšๆฏŽๅ“ฉๆง™ๅน•่†œๆž•้ฎชๆŸพ้ฑ’ๆกไบฆไฟฃๅˆๆŠนๆœซๆฒซ่ฟ„ไพญ็นญ้บฟไธ‡ๆ…ขๆบ€ๆผซ่”“ๅ‘ณๆœช้ญ…ๅทณ็ฎ•ๅฒฌๅฏ†่œœๆนŠ่“‘็จ”่„ˆๅฆ™็ฒๆฐ‘็œ ๅ‹™ๅคข็„ก็‰Ÿ็Ÿ›้œง้ตกๆค‹ๅฉฟๅจ˜ๅ†ฅๅๅ‘ฝๆ˜Ž็›Ÿ่ฟท้Š˜้ณดๅงช็‰ๆป…ๅ…ๆฃ‰็ถฟ็ทฌ้ข้บบๆ‘ธๆจก่Œ‚ๅฆ„ๅญŸๆฏ›็Œ›็›ฒ็ถฒ่€—่’™ๅ„ฒๆœจ้ป™็›ฎๆขๅ‹ฟ้ค…ๅฐคๆˆป็ฑพ่ฒฐๅ•ๆ‚ถ็ด‹้–€ๅŒไนŸๅ†ถๅคœ็ˆบ่€ถ้‡Žๅผฅ็ŸขๅŽ„ๅฝน็ด„่–ฌ่จณ่บ้–ๆŸณ่–ฎ้‘“ๆ„‰ๆ„ˆๆฒน็™’๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[150].length;++j)if(D[150][j].charCodeAt(0)!==65533){e[D[150][j]]=38400+j;d[38400+j]=D[150][j]}D[151]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ซญ่ผธๅ”ฏไฝ‘ๅ„ชๅ‹‡ๅ‹ๅฎฅๅนฝๆ‚ ๆ†‚ๆ–ๆœ‰ๆŸšๆนงๆถŒ็Œถ็Œท็”ฑ็ฅ่ฃ•่ช˜้Š้‚‘้ƒต้›„่žๅค•ไบˆไฝ™ไธŽ่ช‰่ผฟ้ ๅ‚ญๅนผๅฆ–ๅฎนๅบธๆšๆบๆ“ๆ›œๆฅŠๆง˜ๆด‹ๆบถ็†”็”จ็ชฏ็พŠ่€€่‘‰่“‰่ฆ่ฌก่ธŠ้ฅ้™ฝ้คŠๆ…พๆŠ‘ๆฌฒ๏ฟฝๆฒƒๆตด็ฟŒ็ฟผๆท€็พ…่žบ่ฃธๆฅ่Žฑ้ ผ้›ทๆด›็ตก่ฝ้…ชไนฑๅตๅตๆฌ„ๆฟซ่—่˜ญ่ฆงๅˆฉๅๅฑฅๆŽๆขจ็†็’ƒ็—ข่ฃ่ฃก้‡Œ้›ข้™ธๅพ‹็Ž‡็ซ‹่‘ŽๆŽ ็•ฅๅŠ‰ๆตๆบœ็‰็•™็กซ็ฒ’้š†็ซœ้พไพถๆ…ฎๆ—…่™œไบ†ไบฎๅƒšไธกๅ‡Œๅฏฎๆ–™ๆขๆถผ็ŒŸ็™‚็žญ็จœ็ณง่‰ฏ่ซ’้ผ้‡้™ต้ ˜ๅŠ›็ท‘ๅ€ซๅŽ˜ๆž—ๆท‹็‡็ณ่‡จ่ผช้šฃ้ฑ—้บŸ็‘ ๅกๆถ™็ดฏ้กžไปคไผถไพ‹ๅ†ทๅŠฑๅถบๆ€œ็Žฒ็คผ่‹“้ˆด้šท้›ถ้œŠ้บ—้ฝขๆšฆๆญดๅˆ—ๅŠฃ็ƒˆ่ฃ‚ๅป‰ๆ‹ๆ†ๆผฃ็…‰็ฐพ็ทด่ฏ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[151].length;++j)if(D[151][j].charCodeAt(0)!==65533){e[D[151][j]]=38656+j;d[38656+j]=D[151][j]}D[152]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่“ฎ้€ฃ้Œฌๅ‘‚้ญฏๆซ“็‚‰่ณ‚่ทฏ้œฒๅŠดๅฉๅปŠๅผ„ๆœ—ๆฅผๆฆ”ๆตชๆผ็‰ข็‹ผ็ฏญ่€่พ่‹้ƒŽๅ…ญ้บ“็ฆ„่‚‹้Œฒ่ซ–ๅ€ญๅ’Œ่ฉฑๆญช่ณ„่„‡ๆƒ‘ๆž ้ทฒไบ™ไบ˜้ฐ่ฉซ่—่•จๆค€ๆนพ็ข—่…•๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅผŒไธไธ•ไธชไธฑไธถไธผไธฟไน‚ไน–ไน˜ไบ‚ไบ…่ฑซไบŠ่ˆ’ๅผไบŽไบžไบŸไบ ไบขไบฐไบณไบถไปŽไปไป„ไป†ไป‚ไป—ไปžไปญไปŸไปทไผ‰ไฝšไผฐไฝ›ไฝไฝ—ไฝ‡ไฝถไพˆไพไพ˜ไฝปไฝฉไฝฐไพ‘ไฝฏไพ†ไพ–ๅ„˜ไฟ”ไฟŸไฟŽไฟ˜ไฟ›ไฟ‘ไฟšไฟไฟคไฟฅๅ€šๅ€จๅ€”ๅ€ชๅ€ฅๅ€…ไผœไฟถๅ€กๅ€ฉๅ€ฌไฟพไฟฏๅ€‘ๅ€†ๅƒๅ‡ๆœƒๅ•ๅๅˆๅšๅ–ๅฌๅธๅ‚€ๅ‚šๅ‚…ๅ‚ดๅ‚ฒ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[152].length;++j)if(D[152][j].charCodeAt(0)!==65533){e[D[152][j]]=38912+j;d[38912+j]=D[152][j]}D[153]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅƒ‰ๅƒŠๅ‚ณๅƒ‚ๅƒ–ๅƒžๅƒฅๅƒญๅƒฃๅƒฎๅƒนๅƒตๅ„‰ๅ„ๅ„‚ๅ„–ๅ„•ๅ„”ๅ„šๅ„กๅ„บๅ„ทๅ„ผๅ„ปๅ„ฟๅ…€ๅ…’ๅ…Œๅ…”ๅ…ข็ซธๅ…ฉๅ…ชๅ…ฎๅ†€ๅ†‚ๅ›˜ๅ†Œๅ†‰ๅ†ๅ†‘ๅ†“ๅ†•ๅ†–ๅ†คๅ†ฆๅ†ขๅ†ฉๅ†ชๅ†ซๅ†ณๅ†ฑๅ†ฒๅ†ฐๅ†ตๅ†ฝๅ‡…ๅ‡‰ๅ‡›ๅ‡ ่™•ๅ‡ฉๅ‡ญ๏ฟฝๅ‡ฐๅ‡ตๅ‡พๅˆ„ๅˆ‹ๅˆ”ๅˆŽๅˆงๅˆชๅˆฎๅˆณๅˆนๅ‰ๅ‰„ๅ‰‹ๅ‰Œๅ‰žๅ‰”ๅ‰ชๅ‰ดๅ‰ฉๅ‰ณๅ‰ฟๅ‰ฝๅŠๅŠ”ๅŠ’ๅ‰ฑๅŠˆๅŠ‘่พจ่พงๅŠฌๅŠญๅŠผๅŠตๅ‹ๅ‹ๅ‹—ๅ‹žๅ‹ฃๅ‹ฆ้ฃญๅ‹ ๅ‹ณๅ‹ตๅ‹ธๅ‹นๅŒ†ๅŒˆ็”ธๅŒๅŒๅŒๅŒ•ๅŒšๅŒฃๅŒฏๅŒฑๅŒณๅŒธๅ€ๅ†ๅ…ไธ—ๅ‰ๅๅ‡–ๅžๅฉๅฎๅค˜ๅปๅทๅŽ‚ๅŽ–ๅŽ ๅŽฆๅŽฅๅŽฎๅŽฐๅŽถๅƒ็ฐ’้›™ๅŸๆ›ผ็‡ฎๅฎๅจๅญๅบๅๅฝๅ‘€ๅฌๅญๅผๅฎๅถๅฉๅๅ‘Žๅ’ๅ‘ตๅ’Žๅ‘Ÿๅ‘ฑๅ‘ทๅ‘ฐๅ’’ๅ‘ปๅ’€ๅ‘ถๅ’„ๅ’ๅ’†ๅ“‡ๅ’ขๅ’ธๅ’ฅๅ’ฌๅ“„ๅ“ˆๅ’จ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[153].length;++j)if(D[153][j].charCodeAt(0)!==65533){e[D[153][j]]=39168+j;d[39168+j]=D[153][j]}D[154]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ’ซๅ“‚ๅ’คๅ’พๅ’ผๅ“˜ๅ“ฅๅ“ฆๅ”ๅ””ๅ“ฝๅ“ฎๅ“ญๅ“บๅ“ขๅ”นๅ•€ๅ•ฃๅ•Œๅ”ฎๅ•œๅ•…ๅ•–ๅ•—ๅ”ธๅ”ณๅ•ๅ–™ๅ–€ๅ’ฏๅ–Šๅ–Ÿๅ•ปๅ•พๅ–˜ๅ–žๅ–ฎๅ•ผๅ–ƒๅ–ฉๅ–‡ๅ–จๅ—šๅ—…ๅ—Ÿๅ—„ๅ—œๅ—คๅ—”ๅ˜”ๅ—ทๅ˜–ๅ—พๅ—ฝๅ˜›ๅ—นๅ™Žๅ™็‡Ÿๅ˜ดๅ˜ถๅ˜ฒๅ˜ธ๏ฟฝๅ™ซๅ™คๅ˜ฏๅ™ฌๅ™ชๅš†ๅš€ๅšŠๅš ๅš”ๅšๅšฅๅšฎๅšถๅšดๅ›‚ๅšผๅ›ๅ›ƒๅ›€ๅ›ˆๅ›Žๅ›‘ๅ›“ๅ›—ๅ›ฎๅ›นๅœ€ๅ›ฟๅœ„ๅœ‰ๅœˆๅœ‹ๅœๅœ“ๅœ˜ๅœ–ๅ—‡ๅœœๅœฆๅœทๅœธๅŽๅœปๅ€ๅๅฉๅŸ€ๅžˆๅกๅฟๅž‰ๅž“ๅž ๅžณๅžคๅžชๅžฐๅŸƒๅŸ†ๅŸ”ๅŸ’ๅŸ“ๅ ŠๅŸ–ๅŸฃๅ ‹ๅ ™ๅ ๅกฒๅ กๅกขๅก‹ๅกฐๆฏ€ๅก’ๅ ฝๅกนๅข…ๅขนๅขŸๅขซๅขบๅฃžๅขปๅขธๅขฎๅฃ…ๅฃ“ๅฃ‘ๅฃ—ๅฃ™ๅฃ˜ๅฃฅๅฃœๅฃคๅฃŸๅฃฏๅฃบๅฃนๅฃปๅฃผๅฃฝๅค‚ๅคŠๅคๅค›ๆขฆๅคฅๅคฌๅคญๅคฒๅคธๅคพ็ซ’ๅฅ•ๅฅๅฅŽๅฅšๅฅ˜ๅฅขๅฅ ๅฅงๅฅฌๅฅฉ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[154].length;++j)if(D[154][j].charCodeAt(0)!==65533){e[D[154][j]]=39424+j;d[39424+j]=D[154][j]}D[155]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฅธๅฆๅฆไฝžไพซๅฆฃๅฆฒๅง†ๅงจๅงœๅฆๅง™ๅงšๅจฅๅจŸๅจ‘ๅจœๅจ‰ๅจšๅฉ€ๅฉฌๅฉ‰ๅจตๅจถๅฉขๅฉชๅชšๅชผๅชพๅซ‹ๅซ‚ๅชฝๅซฃๅซ—ๅซฆๅซฉๅซ–ๅซบๅซปๅฌŒๅฌ‹ๅฌ–ๅฌฒๅซๅฌชๅฌถๅฌพๅญƒๅญ…ๅญ€ๅญ‘ๅญ•ๅญšๅญ›ๅญฅๅญฉๅญฐๅญณๅญตๅญธๆ–ˆๅญบๅฎ€๏ฟฝๅฎƒๅฎฆๅฎธๅฏƒๅฏ‡ๅฏ‰ๅฏ”ๅฏๅฏคๅฏฆๅฏขๅฏžๅฏฅๅฏซๅฏฐๅฏถๅฏณๅฐ…ๅฐ‡ๅฐˆๅฐๅฐ“ๅฐ ๅฐขๅฐจๅฐธๅฐนๅฑๅฑ†ๅฑŽๅฑ“ๅฑๅฑๅญฑๅฑฌๅฑฎไนขๅฑถๅฑนๅฒŒๅฒ‘ๅฒ”ๅฆ›ๅฒซๅฒปๅฒถๅฒผๅฒทๅณ…ๅฒพๅณ‡ๅณ™ๅณฉๅณฝๅณบๅณญๅถŒๅณชๅด‹ๅด•ๅด—ๅตœๅดŸๅด›ๅด‘ๅด”ๅดขๅดšๅด™ๅด˜ๅตŒๅต’ๅตŽๅต‹ๅตฌๅตณๅตถๅถ‡ๅถ„ๅถ‚ๅถขๅถๅถฌๅถฎๅถฝๅถๅถทๅถผๅท‰ๅทๅท“ๅท’ๅท–ๅท›ๅทซๅทฒๅทตๅธ‹ๅธšๅธ™ๅธ‘ๅธ›ๅธถๅธทๅน„ๅนƒๅน€ๅนŽๅน—ๅน”ๅนŸๅนขๅนคๅน‡ๅนตๅนถๅนบ้บผๅนฟๅบ ๅปๅป‚ๅปˆๅปๅป๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[155].length;++j)if(D[155][j].charCodeAt(0)!==65533){e[D[155][j]]=39680+j;d[39680+j]=D[155][j]}D[156]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅป–ๅปฃๅปๅปšๅป›ๅปขๅปกๅปจๅปฉๅปฌๅปฑๅปณๅปฐๅปดๅปธๅปพๅผƒๅผ‰ๅฝๅฝœๅผ‹ๅผ‘ๅผ–ๅผฉๅผญๅผธๅฝๅฝˆๅฝŒๅฝŽๅผฏๅฝ‘ๅฝ–ๅฝ—ๅฝ™ๅฝกๅฝญๅฝณๅฝทๅพƒๅพ‚ๅฝฟๅพŠๅพˆๅพ‘ๅพ‡ๅพžๅพ™ๅพ˜ๅพ ๅพจๅพญๅพผๅฟ–ๅฟปๅฟคๅฟธๅฟฑๅฟๆ‚ณๅฟฟๆ€กๆ ๏ฟฝๆ€™ๆ€ๆ€ฉๆ€Žๆ€ฑๆ€›ๆ€•ๆ€ซๆ€ฆๆ€ๆ€บๆšๆๆชๆทๆŸๆŠๆ†ๆๆฃๆƒๆคๆ‚ๆฌๆซๆ™ๆ‚ๆ‚ๆƒงๆ‚ƒๆ‚šๆ‚„ๆ‚›ๆ‚–ๆ‚—ๆ‚’ๆ‚งๆ‚‹ๆƒกๆ‚ธๆƒ ๆƒ“ๆ‚ดๅฟฐๆ‚ฝๆƒ†ๆ‚ตๆƒ˜ๆ…ๆ„•ๆ„†ๆƒถๆƒทๆ„€ๆƒดๆƒบๆ„ƒๆ„กๆƒปๆƒฑๆ„ๆ„Žๆ…‡ๆ„พๆ„จๆ„งๆ…Šๆ„ฟๆ„ผๆ„ฌๆ„ดๆ„ฝๆ…‚ๆ…„ๆ…ณๆ…ทๆ…˜ๆ…™ๆ…šๆ…ซๆ…ดๆ…ฏๆ…ฅๆ…ฑๆ…Ÿๆ…ๆ…“ๆ…ตๆ†™ๆ†–ๆ†‡ๆ†ฌๆ†”ๆ†šๆ†Šๆ†‘ๆ†ซๆ†ฎๆ‡Œๆ‡Šๆ‡‰ๆ‡ทๆ‡ˆๆ‡ƒๆ‡†ๆ†บๆ‡‹็ฝนๆ‡ๆ‡ฆๆ‡ฃๆ‡ถๆ‡บๆ‡ดๆ‡ฟๆ‡ฝๆ‡ผๆ‡พๆˆ€ๆˆˆๆˆ‰ๆˆๆˆŒๆˆ”ๆˆ›๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[156].length;++j)if(D[156][j].charCodeAt(0)!==65533){e[D[156][j]]=39936+j;d[39936+j]=D[156][j]}D[157]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆˆžๆˆกๆˆชๆˆฎๆˆฐๆˆฒๆˆณๆ‰ๆ‰Žๆ‰žๆ‰ฃๆ‰›ๆ‰ ๆ‰จๆ‰ผๆŠ‚ๆŠ‰ๆ‰พๆŠ’ๆŠ“ๆŠ–ๆ‹”ๆŠƒๆŠ”ๆ‹—ๆ‹‘ๆŠปๆ‹ๆ‹ฟๆ‹†ๆ“”ๆ‹ˆๆ‹œๆ‹Œๆ‹Šๆ‹‚ๆ‹‡ๆŠ›ๆ‹‰ๆŒŒๆ‹ฎๆ‹ฑๆŒงๆŒ‚ๆŒˆๆ‹ฏๆ‹ตๆๆŒพๆๆœๆๆŽ–ๆŽŽๆŽ€ๆŽซๆถๆŽฃๆŽๆŽ‰ๆŽŸๆŽตๆซ๏ฟฝๆฉๆŽพๆฉๆ€ๆ†ๆฃๆ‰ๆ’ๆถๆ„ๆ–ๆดๆ†ๆ“ๆฆๆถๆ”ๆ—ๆจๆๆ‘งๆ‘ฏๆ‘ถๆ‘Žๆ”ชๆ’•ๆ’“ๆ’ฅๆ’ฉๆ’ˆๆ’ผๆ“šๆ“’ๆ“…ๆ“‡ๆ’ปๆ“˜ๆ“‚ๆ“ฑๆ“ง่ˆ‰ๆ“ ๆ“กๆŠฌๆ“ฃๆ“ฏๆ”ฌๆ“ถๆ“ดๆ“ฒๆ“บๆ”€ๆ“ฝๆ”˜ๆ”œๆ”…ๆ”คๆ”ฃๆ”ซๆ”ดๆ”ตๆ”ทๆ”ถๆ”ธ็•‹ๆ•ˆๆ•–ๆ••ๆ•ๆ•˜ๆ•žๆ•ๆ•ฒๆ•ธๆ–‚ๆ–ƒ่ฎŠๆ–›ๆ–Ÿๆ–ซๆ–ทๆ—ƒๆ—†ๆ—ๆ—„ๆ—Œๆ—’ๆ—›ๆ—™ๆ— ๆ—กๆ—ฑๆฒๆ˜Šๆ˜ƒๆ—ปๆณๆ˜ตๆ˜ถๆ˜ดๆ˜œๆ™ๆ™„ๆ™‰ๆ™ๆ™žๆ™ๆ™คๆ™งๆ™จๆ™Ÿๆ™ขๆ™ฐๆšƒๆšˆๆšŽๆš‰ๆš„ๆš˜ๆšๆ›ๆšนๆ›‰ๆšพๆšผ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[157].length;++j)if(D[157][j].charCodeAt(0)!==65533){e[D[157][j]]=40192+j;d[40192+j]=D[157][j]}D[158]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ›„ๆšธๆ›–ๆ›šๆ› ๆ˜ฟๆ›ฆๆ›ฉๆ›ฐๆ›ตๆ›ทๆœๆœ–ๆœžๆœฆๆœง้œธๆœฎๆœฟๆœถๆๆœธๆœทๆ†ๆžๆ ๆ™ๆฃๆคๆž‰ๆฐๆžฉๆผๆชๆžŒๆž‹ๆžฆๆžกๆž…ๆžทๆŸฏๆžดๆŸฌๆžณๆŸฉๆžธๆŸคๆŸžๆŸๆŸขๆŸฎๆžนๆŸŽๆŸ†ๆŸงๆชœๆ žๆก†ๆ ฉๆก€ๆกๆ ฒๆกŽ๏ฟฝๆขณๆ ซๆก™ๆกฃๆกทๆกฟๆขŸๆขๆขญๆข”ๆขๆข›ๆขƒๆชฎๆขนๆกดๆขตๆข ๆขบๆคๆขๆกพๆคๆฃŠๆคˆๆฃ˜ๆคขๆคฆๆฃกๆคŒๆฃๆฃ”ๆฃงๆฃ•ๆคถๆค’ๆค„ๆฃ—ๆฃฃๆคฅๆฃนๆฃ ๆฃฏๆคจๆคชๆคšๆคฃๆคกๆฃ†ๆฅนๆฅทๆฅœๆฅธๆฅซๆฅ”ๆฅพๆฅฎๆคนๆฅดๆคฝๆฅ™ๆคฐๆฅกๆฅžๆฅๆฆๆฅชๆฆฒๆฆฎๆงๆฆฟๆงๆง“ๆฆพๆงŽๅฏจๆงŠๆงๆฆปๆงƒๆฆงๆจฎๆฆ‘ๆฆ ๆฆœๆฆ•ๆฆดๆงžๆงจๆจ‚ๆจ›ๆงฟๆฌŠๆงนๆงฒๆงงๆจ…ๆฆฑๆจžๆงญๆจ”ๆงซๆจŠๆจ’ๆซๆจฃๆจ“ๆฉ„ๆจŒๆฉฒๆจถๆฉธๆฉ‡ๆฉขๆฉ™ๆฉฆๆฉˆๆจธๆจขๆชๆชๆช ๆช„ๆชขๆชฃ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[158].length;++j)if(D[158][j].charCodeAt(0)!==65533){e[D[158][j]]=40448+j;d[40448+j]=D[158][j]}D[159]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆช—่˜—ๆชปๆซƒๆซ‚ๆชธๆชณๆชฌๆซžๆซ‘ๆซŸๆชชๆซšๆซชๆซปๆฌ…่˜–ๆซบๆฌ’ๆฌ–้ฌฑๆฌŸๆฌธๆฌท็›œๆฌน้ฃฎๆญ‡ๆญƒๆญ‰ๆญๆญ™ๆญ”ๆญ›ๆญŸๆญกๆญธๆญนๆญฟๆฎ€ๆฎ„ๆฎƒๆฎๆฎ˜ๆฎ•ๆฎžๆฎคๆฎชๆฎซๆฎฏๆฎฒๆฎฑๆฎณๆฎทๆฎผๆฏ†ๆฏ‹ๆฏ“ๆฏŸๆฏฌๆฏซๆฏณๆฏฏ๏ฟฝ้บพๆฐˆๆฐ“ๆฐ”ๆฐ›ๆฐคๆฐฃๆฑžๆฑ•ๆฑขๆฑชๆฒ‚ๆฒๆฒšๆฒๆฒ›ๆฑพๆฑจๆฑณๆฒ’ๆฒๆณ„ๆณฑๆณ“ๆฒฝๆณ—ๆณ…ๆณๆฒฎๆฒฑๆฒพๆฒบๆณ›ๆณฏๆณ™ๆณชๆดŸ่กๆดถๆดซๆดฝๆดธๆด™ๆดตๆดณๆด’ๆดŒๆตฃๆถ“ๆตคๆตšๆตนๆต™ๆถŽๆถ•ๆฟคๆถ…ๆทนๆธ•ๆธŠๆถตๆท‡ๆทฆๆถธๆท†ๆทฌๆทžๆทŒๆทจๆท’ๆท…ๆทบๆท™ๆทคๆท•ๆทชๆทฎๆธญๆนฎๆธฎๆธ™ๆนฒๆนŸๆธพๆธฃๆนซๆธซๆนถๆนๆธŸๆนƒๆธบๆนŽๆธคๆปฟๆธๆธธๆบ‚ๆบชๆบ˜ๆป‰ๆบทๆป“ๆบฝๆบฏๆป„ๆบฒๆป”ๆป•ๆบๆบฅๆป‚ๆบŸๆฝๆผ‘็ŒๆปฌๆปธๆปพๆผฟๆปฒๆผฑๆปฏๆผฒๆปŒ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[159].length;++j)if(D[159][j].charCodeAt(0)!==65533){e[D[159][j]]=40704+j;d[40704+j]=D[159][j]}D[224]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆผพๆผ“ๆปทๆพ†ๆฝบๆฝธๆพๆพ€ๆฝฏๆฝ›ๆฟณๆฝญๆพ‚ๆฝผๆฝ˜ๆพŽๆพ‘ๆฟ‚ๆฝฆๆพณๆพฃๆพกๆพคๆพนๆฟ†ๆพชๆฟŸๆฟ•ๆฟฌๆฟ”ๆฟ˜ๆฟฑๆฟฎๆฟ›็€‰็€‹ๆฟบ็€‘็€็€ๆฟพ็€›็€šๆฝด็€็€˜็€Ÿ็€ฐ็€พ็€ฒ็‘็ฃ็‚™็‚’็‚ฏ็ƒฑ็‚ฌ็‚ธ็‚ณ็‚ฎ็ƒŸ็ƒ‹็ƒ๏ฟฝ็ƒ™็„‰็ƒฝ็„œ็„™็…ฅ็…•็†ˆ็…ฆ็…ข็…Œ็…–็…ฌ็†็‡ป็†„็†•็†จ็†ฌ็‡—็†น็†พ็‡’็‡‰็‡”็‡Ž็‡ ็‡ฌ็‡ง็‡ต็‡ผ็‡น็‡ฟ็ˆ็ˆ็ˆ›็ˆจ็ˆญ็ˆฌ็ˆฐ็ˆฒ็ˆป็ˆผ็ˆฟ็‰€็‰†็‰‹็‰˜็‰ด็‰พ็Š‚็Š็Š‡็Š’็Š–็Šข็Šง็Šน็Šฒ็‹ƒ็‹†็‹„็‹Ž็‹’็‹ข็‹ ็‹ก็‹น็‹ทๅ€็Œ—็ŒŠ็Œœ็Œ–็Œ็Œด็Œฏ็Œฉ็Œฅ็Œพ็Ž็้ป˜็—็ช็จ็ฐ็ธ็ต็ป็บ็ˆ็Žณ็Ž็Žป็€็ฅ็ฎ็ž็’ข็…็‘ฏ็ฅ็ธ็ฒ็บ็‘•็ฟ็‘Ÿ็‘™็‘็‘œ็‘ฉ็‘ฐ็‘ฃ็‘ช็‘ถ็‘พ็’‹็’ž็’ง็“Š็“็“”็ฑ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็“ ็“ฃ็“ง็“ฉ็“ฎ็“ฒ็“ฐ็“ฑ็“ธ็“ท็”„็”ƒ็”…็”Œ็”Ž็”็”•็”“็”ž็”ฆ็”ฌ็”ผ็•„็•็•Š็•‰็•›็•†็•š็•ฉ็•ค็•ง็•ซ็•ญ็•ธ็•ถ็–†็–‡็•ด็–Š็–‰็–‚็–”็–š็–็–ฅ็–ฃ็—‚็–ณ็—ƒ็–ต็–ฝ็–ธ็–ผ็–ฑ็—็—Š็—’็—™็—ฃ็—ž็—พ็—ฟ๏ฟฝ็—ผ็˜็—ฐ็—บ็—ฒ็—ณ็˜‹็˜็˜‰็˜Ÿ็˜ง็˜ ็˜ก็˜ข็˜ค็˜ด็˜ฐ็˜ป็™‡็™ˆ็™†็™œ็™˜็™ก็™ข็™จ็™ฉ็™ช็™ง็™ฌ็™ฐ็™ฒ็™ถ็™ธ็™ผ็š€็šƒ็šˆ็š‹็šŽ็š–็š“็š™็šš็šฐ็šด็šธ็šน็šบ็›‚็›็›–็›’็›ž็›ก็›ฅ็›ง็›ช่˜ฏ็›ป็œˆ็œ‡็œ„็œฉ็œค็œž็œฅ็œฆ็œ›็œท็œธ็‡็š็จ็ซ็›็ฅ็ฟ็พ็น็žŽ็ž‹็ž‘็ž ็žž็žฐ็žถ็žน็žฟ็žผ็žฝ็žป็Ÿ‡็Ÿ็Ÿ—็Ÿš็Ÿœ็Ÿฃ็Ÿฎ็Ÿผ็ Œ็ ’็คฆ็  ็คช็ก…็ขŽ็กด็ข†็กผ็ขš็ขŒ็ขฃ็ขต็ขช็ขฏ็ฃ‘็ฃ†็ฃ‹็ฃ”็ขพ็ขผ็ฃ…็ฃŠ็ฃฌ๏ฟฝ๏ฟฝ๏ฟฝ".split(""); +for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฃง็ฃš็ฃฝ็ฃด็ค‡็ค’็ค‘็ค™็คฌ็คซ็ฅ€็ฅ ็ฅ—็ฅŸ็ฅš็ฅ•็ฅ“็ฅบ็ฅฟ็ฆŠ็ฆ็ฆง้ฝ‹็ฆช็ฆฎ็ฆณ็ฆน็ฆบ็ง‰็ง•็งง็งฌ็งก็งฃ็จˆ็จ็จ˜็จ™็จ ็จŸ็ฆ€็จฑ็จป็จพ็จท็ฉƒ็ฉ—็ฉ‰็ฉก็ฉข็ฉฉ้พ็ฉฐ็ฉน็ฉฝ็ชˆ็ช—็ช•็ช˜็ช–็ชฉ็ซˆ็ชฐ๏ฟฝ็ชถ็ซ…็ซ„็ชฟ้‚ƒ็ซ‡็ซŠ็ซ็ซ็ซ•็ซ“็ซ™็ซš็ซ็ซก็ซข็ซฆ็ซญ็ซฐ็ฌ‚็ฌ็ฌŠ็ฌ†็ฌณ็ฌ˜็ฌ™็ฌž็ฌต็ฌจ็ฌถ็ญ็ญบ็ฌ„็ญ็ฌ‹็ญŒ็ญ…็ญต็ญฅ็ญด็ญง็ญฐ็ญฑ็ญฌ็ญฎ็ฎ็ฎ˜็ฎŸ็ฎ็ฎœ็ฎš็ฎ‹็ฎ’็ฎ็ญ็ฎ™็ฏ‹็ฏ็ฏŒ็ฏ็ฎด็ฏ†็ฏ็ฏฉ็ฐ‘็ฐ”็ฏฆ็ฏฅ็ฑ ็ฐ€็ฐ‡็ฐ“็ฏณ็ฏท็ฐ—็ฐ็ฏถ็ฐฃ็ฐง็ฐช็ฐŸ็ฐท็ฐซ็ฐฝ็ฑŒ็ฑƒ็ฑ”็ฑ็ฑ€็ฑ็ฑ˜็ฑŸ็ฑค็ฑ–็ฑฅ็ฑฌ็ฑต็ฒƒ็ฒ็ฒค็ฒญ็ฒข็ฒซ็ฒก็ฒจ็ฒณ็ฒฒ็ฒฑ็ฒฎ็ฒน็ฒฝ็ณ€็ณ…็ณ‚็ณ˜็ณ’็ณœ็ณข้ฌป็ณฏ็ณฒ็ณด็ณถ็ณบ็ด†๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ด‚็ดœ็ด•็ดŠ็ต…็ต‹็ดฎ็ดฒ็ดฟ็ดต็ต†็ตณ็ต–็ตŽ็ตฒ็ตจ็ตฎ็ต็ตฃ็ถ“็ถ‰็ต›็ถ็ตฝ็ถ›็ถบ็ถฎ็ถฃ็ถต็ท‡็ถฝ็ถซ็ธฝ็ถข็ถฏ็ทœ็ถธ็ถŸ็ถฐ็ท˜็ท็ทค็ทž็ทป็ทฒ็ทก็ธ…็ธŠ็ธฃ็ธก็ธ’็ธฑ็ธŸ็ธ‰็ธ‹็ธข็น†็นฆ็ธป็ธต็ธน็นƒ็ธท๏ฟฝ็ธฒ็ธบ็นง็น็น–็นž็น™็นš็นน็นช็นฉ็นผ็นป็บƒ็ท•็นฝ่พฎ็นฟ็บˆ็บ‰็บŒ็บ’็บ็บ“็บ”็บ–็บŽ็บ›็บœ็ผธ็ผบ็ฝ…็ฝŒ็ฝ็ฝŽ็ฝ็ฝ‘็ฝ•็ฝ”็ฝ˜็ฝŸ็ฝ ็ฝจ็ฝฉ็ฝง็ฝธ็พ‚็พ†็พƒ็พˆ็พ‡็พŒ็พ”็พž็พ็พš็พฃ็พฏ็พฒ็พน็พฎ็พถ็พธ่ญฑ็ฟ…็ฟ†็ฟŠ็ฟ•็ฟ”็ฟก็ฟฆ็ฟฉ็ฟณ็ฟน้ฃœ่€†่€„่€‹่€’่€˜่€™่€œ่€ก่€จ่€ฟ่€ป่Š่†่’่˜่š่Ÿ่ข่จ่ณ่ฒ่ฐ่ถ่น่ฝ่ฟ่‚„่‚†่‚…่‚›่‚“่‚š่‚ญๅ†่‚ฌ่ƒ›่ƒฅ่ƒ™่ƒ่ƒ„่ƒš่ƒ–่„‰่ƒฏ่ƒฑ่„›่„ฉ่„ฃ่„ฏ่…‹๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้š‹่…†่„พ่…“่…‘่ƒผ่…ฑ่…ฎ่…ฅ่…ฆ่…ด่†ƒ่†ˆ่†Š่†€่†‚่† ่†•่†ค่†ฃ่…Ÿ่†“่†ฉ่†ฐ่†ต่†พ่†ธ่†ฝ่‡€่‡‚่†บ่‡‰่‡่‡‘่‡™่‡˜่‡ˆ่‡š่‡Ÿ่‡ ่‡ง่‡บ่‡ป่‡พ่ˆ่ˆ‚่ˆ…่ˆ‡่ˆŠ่ˆ่ˆ่ˆ–่ˆฉ่ˆซ่ˆธ่ˆณ่‰€่‰™่‰˜่‰่‰š่‰Ÿ่‰ค๏ฟฝ่‰ข่‰จ่‰ช่‰ซ่ˆฎ่‰ฑ่‰ท่‰ธ่‰พ่Š่Š’่Šซ่ŠŸ่Šป่Šฌ่‹ก่‹ฃ่‹Ÿ่‹’่‹ด่‹ณ่‹บ่Ž“่Œƒ่‹ป่‹น่‹ž่Œ†่‹œ่Œ‰่‹™่Œต่Œด่Œ–่Œฒ่Œฑ่€่Œน่่…่Œฏ่Œซ่Œ—่Œ˜่Ž…่Žš่Žช่ŽŸ่Žข่Ž–่Œฃ่ŽŽ่Ž‡่ŽŠ่ผ่Žต่ณ่ต่Ž ่Ž‰่Žจ่ด่“่ซ่Ž่ฝ่ƒ่˜่‹่่ท่‡่ ่ฒ่่ข่ ่Žฝ่ธ่”†่ป่‘ญ่ช่ผ่•š่’„่‘ท่‘ซ่’ญ่‘ฎ่’‚่‘ฉ่‘†่ฌ่‘ฏ่‘น่ต่“Š่‘ข่’น่’ฟ่’Ÿ่“™่“่’ป่“š่“่“่“†่“–่’ก่”ก่“ฟ่“ด่”—่”˜่”ฌ่”Ÿ่”•่””่“ผ่•€่•ฃ่•˜่•ˆ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่•่˜‚่•‹่••่–€่–ค่–ˆ่–‘่–Š่–จ่•ญ่–”่–›่—ช่–‡่–œ่•ท่•พ่–่—‰่–บ่—่–น่—่—•่—่—ฅ่—œ่—น่˜Š่˜“่˜‹่—พ่—บ่˜†่˜ข่˜š่˜ฐ่˜ฟ่™ไน•่™”่™Ÿ่™ง่™ฑ่š“่šฃ่šฉ่šช่š‹่šŒ่šถ่šฏ่›„่›†่šฐ่›‰่ ฃ่šซ่›”่›ž่›ฉ่›ฌ๏ฟฝ่›Ÿ่››่›ฏ่œ’่œ†่œˆ่œ€่œƒ่›ป่œ‘่œ‰่œ่›น่œŠ่œด่œฟ่œท่œป่œฅ่œฉ่œš่ ่Ÿ่ธ่Œ่Ž่ด่—่จ่ฎ่™่“่ฃ่ช่ …่žข่žŸ่ž‚่žฏ่Ÿ‹่žฝ่Ÿ€่Ÿ้›–่žซ่Ÿ„่žณ่Ÿ‡่Ÿ†่žป่Ÿฏ่Ÿฒ่Ÿ ่ ่ ่Ÿพ่Ÿถ่Ÿท่ Ž่Ÿ’่ ‘่ –่ •่ ข่ ก่ ฑ่ ถ่ น่ ง่ ป่ก„่ก‚่ก’่ก™่กž่กข่กซ่ข่กพ่ขž่กต่กฝ่ขต่กฒ่ข‚่ข—่ข’่ขฎ่ข™่ขข่ข่ขค่ขฐ่ขฟ่ขฑ่ฃƒ่ฃ„่ฃ”่ฃ˜่ฃ™่ฃ่ฃน่ค‚่ฃผ่ฃด่ฃจ่ฃฒ่ค„่คŒ่คŠ่ค“่ฅƒ่คž่คฅ่คช่คซ่ฅ่ฅ„่คป่คถ่คธ่ฅŒ่ค่ฅ ่ฅž๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฅฆ่ฅค่ฅญ่ฅช่ฅฏ่ฅด่ฅท่ฅพ่ฆƒ่ฆˆ่ฆŠ่ฆ“่ฆ˜่ฆก่ฆฉ่ฆฆ่ฆฌ่ฆฏ่ฆฒ่ฆบ่ฆฝ่ฆฟ่ง€่งš่งœ่ง่งง่งด่งธ่จƒ่จ–่จ่จŒ่จ›่จ่จฅ่จถ่ฉ่ฉ›่ฉ’่ฉ†่ฉˆ่ฉผ่ฉญ่ฉฌ่ฉข่ช…่ช‚่ช„่ชจ่ชก่ช‘่ชฅ่ชฆ่ชš่ชฃ่ซ„่ซ่ซ‚่ซš่ซซ่ซณ่ซง๏ฟฝ่ซค่ซฑ่ฌ”่ซ ่ซข่ซท่ซž่ซ›่ฌŒ่ฌ‡่ฌš่ซก่ฌ–่ฌ่ฌ—่ฌ ่ฌณ้žซ่ฌฆ่ฌซ่ฌพ่ฌจ่ญ่ญŒ่ญ่ญŽ่ญ‰่ญ–่ญ›่ญš่ญซ่ญŸ่ญฌ่ญฏ่ญด่ญฝ่ฎ€่ฎŒ่ฎŽ่ฎ’่ฎ“่ฎ–่ฎ™่ฎš่ฐบ่ฑ่ฐฟ่ฑˆ่ฑŒ่ฑŽ่ฑ่ฑ•่ฑข่ฑฌ่ฑธ่ฑบ่ฒ‚่ฒ‰่ฒ…่ฒŠ่ฒ่ฒŽ่ฒ”่ฑผ่ฒ˜ๆˆ่ฒญ่ฒช่ฒฝ่ฒฒ่ฒณ่ฒฎ่ฒถ่ณˆ่ณ่ณค่ณฃ่ณš่ณฝ่ณบ่ณป่ด„่ด…่ดŠ่ด‡่ด่ด่ด้ฝŽ่ด“่ณ่ด”่ด–่ตง่ตญ่ตฑ่ตณ่ถ่ถ™่ท‚่ถพ่ถบ่ท่ทš่ท–่ทŒ่ท›่ท‹่ทช่ทซ่ทŸ่ทฃ่ทผ่ธˆ่ธ‰่ทฟ่ธ่ธž่ธ่ธŸ่น‚่ธต่ธฐ่ธด่นŠ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่น‡่น‰่นŒ่น่นˆ่น™่นค่น ่ธช่นฃ่น•่นถ่นฒ่นผ่บ่บ‡่บ…่บ„่บ‹่บŠ่บ“่บ‘่บ”่บ™่บช่บก่บฌ่บฐ่ป†่บฑ่บพ่ป…่ปˆ่ป‹่ป›่ปฃ่ปผ่ปป่ปซ่ปพ่ผŠ่ผ…่ผ•่ผ’่ผ™่ผ“่ผœ่ผŸ่ผ›่ผŒ่ผฆ่ผณ่ผป่ผน่ฝ…่ฝ‚่ผพ่ฝŒ่ฝ‰่ฝ†่ฝŽ่ฝ—่ฝœ๏ฟฝ่ฝข่ฝฃ่ฝค่พœ่พŸ่พฃ่พญ่พฏ่พท่ฟš่ฟฅ่ฟข่ฟช่ฟฏ้‚‡่ฟด้€…่ฟน่ฟบ้€‘้€•้€ก้€้€ž้€–้€‹้€ง้€ถ้€ต้€น่ฟธ้้้‘้’้€Ž้‰้€พ้–้˜้ž้จ้ฏ้ถ้šจ้ฒ้‚‚้ฝ้‚้‚€้‚Š้‚‰้‚้‚จ้‚ฏ้‚ฑ้‚ต้ƒข้ƒคๆ‰ˆ้ƒ›้„‚้„’้„™้„ฒ้„ฐ้…Š้…–้…˜้…ฃ้…ฅ้…ฉ้…ณ้…ฒ้†‹้†‰้†‚้†ข้†ซ้†ฏ้†ช้†ต้†ด้†บ้‡€้‡้‡‰้‡‹้‡้‡–้‡Ÿ้‡ก้‡›้‡ผ้‡ต้‡ถ้ˆž้‡ฟ้ˆ”้ˆฌ้ˆ•้ˆ‘้‰ž้‰—้‰…้‰‰้‰ค้‰ˆ้Š•้ˆฟ้‰‹้‰้Šœ้Š–้Š“้Š›้‰š้‹้Šน้Šท้‹ฉ้Œ้‹บ้„้Œฎ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้Œ™้Œข้Œš้Œฃ้Œบ้Œต้Œป้œ้ ้ผ้ฎ้–้Žฐ้Žฌ้Žญ้Ž”้Žน้–้—้จ้ฅ้˜้ƒ้้้ˆ้ค้š้”้“้ƒ้‡้้ถ้ซ้ต้ก้บ้‘้‘’้‘„้‘›้‘ ้‘ข้‘ž้‘ช้ˆฉ้‘ฐ้‘ต้‘ท้‘ฝ้‘š้‘ผ้‘พ้’้‘ฟ้–‚้–‡้–Š้–”้––้–˜้–™๏ฟฝ้– ้–จ้–ง้–ญ้–ผ้–ป้–น้–พ้—Šๆฟถ้—ƒ้—้—Œ้—•้—”้—–้—œ้—ก้—ฅ้—ข้˜ก้˜จ้˜ฎ้˜ฏ้™‚้™Œ้™้™‹้™ท้™œ้™ž้™้™Ÿ้™ฆ้™ฒ้™ฌ้š้š˜้š•้š—้šช้šง้šฑ้šฒ้šฐ้šด้šถ้šธ้šน้›Ž้›‹้›‰้›่ฅ้›œ้œ้›•้›น้œ„้œ†้œˆ้œ“้œŽ้œ‘้œ้œ–้œ™้œค้œช้œฐ้œน้œฝ้œพ้„้†้ˆ้‚้‰้œ้ ้ค้ฆ้จๅ‹’้ซ้ฑ้น้ž…้ผ้ž้บ้ž†้ž‹้ž้ž้žœ้žจ้žฆ้žฃ้žณ้žด้Ÿƒ้Ÿ†้Ÿˆ้Ÿ‹้Ÿœ้Ÿญ้ฝ้Ÿฒ็ซŸ้Ÿถ้Ÿต้ ้ Œ้ ธ้ ค้ ก้ ท้ ฝ้ก†้ก้ก‹้กซ้กฏ้กฐ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้กฑ้กด้กณ้ขช้ขฏ้ขฑ้ขถ้ฃ„้ฃƒ้ฃ†้ฃฉ้ฃซ้คƒ้ค‰้ค’้ค”้ค˜้คก้ค้คž้คค้ค ้คฌ้คฎ้คฝ้คพ้ฅ‚้ฅ‰้ฅ…้ฅ้ฅ‹้ฅ‘้ฅ’้ฅŒ้ฅ•้ฆ—้ฆ˜้ฆฅ้ฆญ้ฆฎ้ฆผ้งŸ้ง›้ง้ง˜้ง‘้งญ้งฎ้งฑ้งฒ้งป้งธ้จ้จ้จ…้งข้จ™้จซ้จท้ฉ…้ฉ‚้ฉ€้ฉƒ๏ฟฝ้จพ้ฉ•้ฉ้ฉ›้ฉ—้ฉŸ้ฉข้ฉฅ้ฉค้ฉฉ้ฉซ้ฉช้ชญ้ชฐ้ชผ้ซ€้ซ้ซ‘้ซ“้ซ”้ซž้ซŸ้ซข้ซฃ้ซฆ้ซฏ้ซซ้ซฎ้ซด้ซฑ้ซท้ซป้ฌ†้ฌ˜้ฌš้ฌŸ้ฌข้ฌฃ้ฌฅ้ฌง้ฌจ้ฌฉ้ฌช้ฌฎ้ฌฏ้ฌฒ้ญ„้ญƒ้ญ้ญ้ญŽ้ญ‘้ญ˜้ญด้ฎ“้ฎƒ้ฎ‘้ฎ–้ฎ—้ฎŸ้ฎ ้ฎจ้ฎด้ฏ€้ฏŠ้ฎน้ฏ†้ฏ้ฏ‘้ฏ’้ฏฃ้ฏข้ฏค้ฏ”้ฏก้ฐบ้ฏฒ้ฏฑ้ฏฐ้ฐ•้ฐ”้ฐ‰้ฐ“้ฐŒ้ฐ†้ฐˆ้ฐ’้ฐŠ้ฐ„้ฐฎ้ฐ›้ฐฅ้ฐค้ฐก้ฐฐ้ฑ‡้ฐฒ้ฑ†้ฐพ้ฑš้ฑ ้ฑง้ฑถ้ฑธ้ณง้ณฌ้ณฐ้ด‰้ดˆ้ณซ้ดƒ้ด†้ดช้ดฆ้ถฏ้ดฃ้ดŸ้ต„้ด•้ด’้ต้ดฟ้ดพ้ต†้ตˆ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ต้ตž้ตค้ต‘้ต้ต™้ตฒ้ถ‰้ถ‡้ถซ้ตฏ้ตบ้ถš้ถค้ถฉ้ถฒ้ท„้ท้ถป้ถธ้ถบ้ท†้ท้ท‚้ท™้ท“้ทธ้ทฆ้ทญ้ทฏ้ทฝ้ธš้ธ›้ธž้นต้นน้นฝ้บ้บˆ้บ‹้บŒ้บ’้บ•้บ‘้บ้บฅ้บฉ้บธ้บช้บญ้ก้ปŒ้ปŽ้ป้ป้ป”้ปœ้ปž้ป้ป ้ปฅ้ปจ้ปฏ๏ฟฝ้ปด้ปถ้ปท้ปน้ปป้ปผ้ปฝ้ผ‡้ผˆ็šท้ผ•้ผก้ผฌ้ผพ้ฝŠ้ฝ’้ฝ”้ฝฃ้ฝŸ้ฝ ้ฝก้ฝฆ้ฝง้ฝฌ้ฝช้ฝท้ฝฒ้ฝถ้พ•้พœ้พ ๅ ฏๆง‡้™็‘คๅ‡œ็†™๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[237]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็บŠ่คœ้ˆ้Šˆ่“œไฟ‰็‚ปๆ˜ฑๆฃˆ้‹นๆ›ปๅฝ…ไธจไปกไปผไผ€ไผƒไผนไฝ–ไพ’ไพŠไพšไพ”ไฟๅ€ๅ€ขไฟฟๅ€žๅ†ๅฐๅ‚ๅ‚”ๅƒดๅƒ˜ๅ…Šๅ…คๅ†ๅ†พๅ‡ฌๅˆ•ๅŠœๅŠฆๅ‹€ๅ‹›ๅŒ€ๅŒ‡ๅŒคๅฒๅŽ“ๅŽฒๅ๏จŽๅ’œๅ’Šๅ’ฉๅ“ฟๅ–†ๅ™ๅฅๅžฌๅŸˆๅŸ‡๏จ๏ฟฝ๏จๅขžๅขฒๅค‹ๅฅ“ๅฅ›ๅฅๅฅฃๅฆคๅฆบๅญ–ๅฏ€็”ฏๅฏ˜ๅฏฌๅฐžๅฒฆๅฒบๅณตๅดงๅต“๏จ‘ๅต‚ๅตญๅถธๅถนๅทๅผกๅผดๅฝงๅพทๅฟžๆๆ‚…ๆ‚Šๆƒžๆƒ•ๆ„ ๆƒฒๆ„‘ๆ„ทๆ„ฐๆ†˜ๆˆ“ๆŠฆๆตๆ‘ ๆ’ๆ“Žๆ•Žๆ˜€ๆ˜•ๆ˜ปๆ˜‰ๆ˜ฎๆ˜žๆ˜คๆ™ฅๆ™—ๆ™™๏จ’ๆ™ณๆš™ๆš ๆšฒๆšฟๆ›บๆœŽ๏คฉๆฆๆžปๆก’ๆŸ€ๆ ๆก„ๆฃ๏จ“ๆฅจ๏จ”ๆฆ˜ๆงขๆจฐๆฉซๆฉ†ๆฉณๆฉพๆซขๆซคๆฏ–ๆฐฟๆฑœๆฒ†ๆฑฏๆณšๆด„ๆถ‡ๆตฏๆถ–ๆถฌๆทๆทธๆทฒๆทผๆธนๆนœๆธงๆธผๆบฟๆพˆๆพตๆฟต็€…็€‡็€จ็‚…็‚ซ็„็„„็…œ็…†็…‡๏จ•็‡็‡พ็Šฑ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็Šพ็Œค๏จ–็ท็Žฝ็‰็–็ฃ็’็‡็ต็ฆ็ช็ฉ็ฎ็‘ข็’‰็’Ÿ็”็•ฏ็š‚็šœ็šž็š›็šฆ๏จ—็†ๅŠฏ็ ก็กŽ็กค็กบ็คฐ๏จ˜๏จ™๏จš็ฆ”๏จ›็ฆ›็ซ‘็ซง๏จœ็ซซ็ฎž๏จ็ตˆ็ตœ็ถท็ถ ็ท–็น’็ฝ‡็พก๏จž่Œ่ข่ฟ่‡่ถ่‘ˆ่’ด่•“่•™๏ฟฝ่•ซ๏จŸ่–ฐ๏จ ๏จก่ ‡่ฃต่จ’่จท่ฉน่ชง่ชพ่ซŸ๏จข่ซถ่ญ“่ญฟ่ณฐ่ณด่ด’่ตถ๏จฃ่ป๏จค๏จฅ้ง้ƒž๏จฆ้„•้„ง้‡š้‡—้‡ž้‡ญ้‡ฎ้‡ค้‡ฅ้ˆ†้ˆ้ˆŠ้ˆบ้‰€้ˆผ้‰Ž้‰™้‰‘้ˆน้‰ง้Šง้‰ท้‰ธ้‹ง้‹—้‹™้‹๏จง้‹•้‹ ้‹“้Œฅ้Œก้‹ป๏จจ้Œž้‹ฟ้Œ้Œ‚้ฐ้—้Žค้†้ž้ธ้ฑ้‘…้‘ˆ้–’๏งœ๏จฉ้š้šฏ้œณ้œป้ƒ้้้‘้•้ก—้กฅ๏จช๏จซ้คง๏จฌ้ฆž้ฉŽ้ซ™้ซœ้ญต้ญฒ้ฎ้ฎฑ้ฎป้ฐ€้ตฐ้ตซ๏จญ้ธ™้ป‘๏ฟฝ๏ฟฝโ…ฐโ…ฑโ…ฒโ…ณโ…ดโ…ตโ…ถโ…ทโ…ธโ…น๏ฟข๏ฟค๏ผ‡๏ผ‚๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[250]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ…ฐโ…ฑโ…ฒโ…ณโ…ดโ…ตโ…ถโ…ทโ…ธโ…นโ… โ…กโ…ขโ…ฃโ…คโ…ฅโ…ฆโ…งโ…จโ…ฉ๏ฟข๏ฟค๏ผ‡๏ผ‚ใˆฑโ„–โ„กโˆต็บŠ่คœ้ˆ้Šˆ่“œไฟ‰็‚ปๆ˜ฑๆฃˆ้‹นๆ›ปๅฝ…ไธจไปกไปผไผ€ไผƒไผนไฝ–ไพ’ไพŠไพšไพ”ไฟๅ€ๅ€ขไฟฟๅ€žๅ†ๅฐๅ‚ๅ‚”ๅƒดๅƒ˜ๅ…Š๏ฟฝๅ…คๅ†ๅ†พๅ‡ฌๅˆ•ๅŠœๅŠฆๅ‹€ๅ‹›ๅŒ€ๅŒ‡ๅŒคๅฒๅŽ“ๅŽฒๅ๏จŽๅ’œๅ’Šๅ’ฉๅ“ฟๅ–†ๅ™ๅฅๅžฌๅŸˆๅŸ‡๏จ๏จๅขžๅขฒๅค‹ๅฅ“ๅฅ›ๅฅๅฅฃๅฆคๅฆบๅญ–ๅฏ€็”ฏๅฏ˜ๅฏฌๅฐžๅฒฆๅฒบๅณตๅดงๅต“๏จ‘ๅต‚ๅตญๅถธๅถนๅทๅผกๅผดๅฝงๅพทๅฟžๆๆ‚…ๆ‚Šๆƒžๆƒ•ๆ„ ๆƒฒๆ„‘ๆ„ทๆ„ฐๆ†˜ๆˆ“ๆŠฆๆตๆ‘ ๆ’ๆ“Žๆ•Žๆ˜€ๆ˜•ๆ˜ปๆ˜‰ๆ˜ฎๆ˜žๆ˜คๆ™ฅๆ™—ๆ™™๏จ’ๆ™ณๆš™ๆš ๆšฒๆšฟๆ›บๆœŽ๏คฉๆฆๆžปๆก’ๆŸ€ๆ ๆก„ๆฃ๏จ“ๆฅจ๏จ”ๆฆ˜ๆงขๆจฐๆฉซๆฉ†ๆฉณๆฉพๆซขๆซคๆฏ–ๆฐฟๆฑœๆฒ†ๆฑฏๆณšๆด„ๆถ‡ๆตฏ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[250].length;++j)if(D[250][j].charCodeAt(0)!==65533){e[D[250][j]]=64e3+j;d[64e3+j]=D[250][j]}D[251]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆถ–ๆถฌๆทๆทธๆทฒๆทผๆธนๆนœๆธงๆธผๆบฟๆพˆๆพตๆฟต็€…็€‡็€จ็‚…็‚ซ็„็„„็…œ็…†็…‡๏จ•็‡็‡พ็Šฑ็Šพ็Œค๏จ–็ท็Žฝ็‰็–็ฃ็’็‡็ต็ฆ็ช็ฉ็ฎ็‘ข็’‰็’Ÿ็”็•ฏ็š‚็šœ็šž็š›็šฆ๏จ—็†ๅŠฏ็ ก็กŽ็กค็กบ็คฐ๏จ˜๏จ™๏ฟฝ๏จš็ฆ”๏จ›็ฆ›็ซ‘็ซง๏จœ็ซซ็ฎž๏จ็ตˆ็ตœ็ถท็ถ ็ท–็น’็ฝ‡็พก๏จž่Œ่ข่ฟ่‡่ถ่‘ˆ่’ด่•“่•™่•ซ๏จŸ่–ฐ๏จ ๏จก่ ‡่ฃต่จ’่จท่ฉน่ชง่ชพ่ซŸ๏จข่ซถ่ญ“่ญฟ่ณฐ่ณด่ด’่ตถ๏จฃ่ป๏จค๏จฅ้ง้ƒž๏จฆ้„•้„ง้‡š้‡—้‡ž้‡ญ้‡ฎ้‡ค้‡ฅ้ˆ†้ˆ้ˆŠ้ˆบ้‰€้ˆผ้‰Ž้‰™้‰‘้ˆน้‰ง้Šง้‰ท้‰ธ้‹ง้‹—้‹™้‹๏จง้‹•้‹ ้‹“้Œฅ้Œก้‹ป๏จจ้Œž้‹ฟ้Œ้Œ‚้ฐ้—้Žค้†้ž้ธ้ฑ้‘…้‘ˆ้–’๏งœ๏จฉ้š้šฏ้œณ้œป้ƒ้้้‘้•้ก—้กฅ๏จช๏จซ้คง๏จฌ้ฆž้ฉŽ้ซ™๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[251].length;++j)if(D[251][j].charCodeAt(0)!==65533){e[D[251][j]]=64256+j;d[64256+j]=D[251][j]}D[252]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ซœ้ญต้ญฒ้ฎ้ฎฑ้ฎป้ฐ€้ตฐ้ตซ๏จญ้ธ™้ป‘๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[252].length;++j)if(D[252][j].charCodeAt(0)!==65533){e[D[252][j]]=64512+j;d[64512+j]=D[252][j]}return{enc:e,dec:d}}();cptable[936]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[129]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไธ‚ไธ„ไธ…ไธ†ไธไธ’ไธ—ไธŸไธ ไธกไธฃไธฆไธฉไธฎไธฏไธฑไธณไธตไธทไธผไน€ไนไน‚ไน„ไน†ไนŠไน‘ไน•ไน—ไนšไน›ไนขไนฃไนคไนฅไนงไนจไนชไนซไนฌไนญไนฎไนฏไนฒไนดไนตไนถไนทไนธไนนไนบไนปไนผไนฝไนฟไบ€ไบไบ‚ไบƒไบ„ไบ…ไบ‡ไบŠ๏ฟฝไบไบ–ไบ—ไบ™ไบœไบไบžไบฃไบชไบฏไบฐไบฑไบดไบถไบทไบธไบนไบผไบฝไบพไปˆไปŒไปไปไป’ไปšไป›ไปœไป ไปขไปฆไปงไปฉไปญไปฎไปฏไปฑไปดไปธไปนไปบไปผไปพไผ€ไผ‚ไผƒไผ„ไผ…ไผ†ไผ‡ไผˆไผ‹ไผŒไผ’ไผ“ไผ”ไผ•ไผ–ไผœไผไผกไผฃไผจไผฉไผฌไผญไผฎไผฑไผณไผตไผทไผนไผปไผพไผฟไฝ€ไฝไฝ‚ไฝ„ไฝ…ไฝ‡ไฝˆไฝ‰ไฝŠไฝ‹ไฝŒไฝ’ไฝ”ไฝ–ไฝกไฝขไฝฆไฝจไฝชไฝซไฝญไฝฎไฝฑไฝฒไฝตไฝทไฝธไฝนไฝบไฝฝไพ€ไพไพ‚ไพ…ไพ†ไพ‡ไพŠไพŒไพŽไพไพ’ไพ“ไพ•ไพ–ไพ˜ไพ™ไพšไพœไพžไพŸไพกไพข๏ฟฝ".split("");for(j=0;j!=D[129].length;++j)if(D[129][j].charCodeAt(0)!==65533){e[D[129][j]]=33024+j;d[33024+j]=D[129][j]}D[130]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไพคไพซไพญไพฐไพฑไพฒไพณไพดไพถไพทไพธไพนไพบไพปไพผไพฝไพพไฟ€ไฟไฟ‚ไฟ†ไฟ‡ไฟˆไฟ‰ไฟ‹ไฟŒไฟไฟ’ไฟ“ไฟ”ไฟ•ไฟ–ไฟ™ไฟ›ไฟ ไฟขไฟคไฟฅไฟงไฟซไฟฌไฟฐไฟฒไฟดไฟตไฟถไฟทไฟนไฟปไฟผไฟฝไฟฟๅ€€ๅ€ๅ€‚ๅ€ƒๅ€„ๅ€…ๅ€†ๅ€‡ๅ€ˆๅ€‰ๅ€Š๏ฟฝๅ€‹ๅ€Žๅ€ๅ€‘ๅ€“ๅ€•ๅ€–ๅ€—ๅ€›ๅ€ๅ€žๅ€ ๅ€ขๅ€ฃๅ€คๅ€งๅ€ซๅ€ฏๅ€ฐๅ€ฑๅ€ฒๅ€ณๅ€ดๅ€ตๅ€ถๅ€ทๅ€ธๅ€นๅ€ปๅ€ฝๅ€ฟๅ€ๅๅ‚ๅ„ๅ…ๅ†ๅ‰ๅŠๅ‹ๅๅๅ‘ๅ’ๅ“ๅ”ๅ–ๅ—ๅ˜ๅ™ๅ›ๅๅžๅŸๅ ๅกๅขๅฃๅคๅฆๅงๅจๅฉๅชๅซๅญๅฎๅฏๅฐๅฑๅฒๅณๅดๅตๅธๅนๅบๅผๅฝๅ‚ๅ‚‚ๅ‚ƒๅ‚„ๅ‚†ๅ‚‡ๅ‚‰ๅ‚Šๅ‚‹ๅ‚Œๅ‚Žๅ‚ๅ‚ๅ‚‘ๅ‚’ๅ‚“ๅ‚”ๅ‚•ๅ‚–ๅ‚—ๅ‚˜ๅ‚™ๅ‚šๅ‚›ๅ‚œๅ‚ๅ‚žๅ‚Ÿๅ‚ ๅ‚กๅ‚ขๅ‚คๅ‚ฆๅ‚ชๅ‚ซๅ‚ญๅ‚ฎๅ‚ฏๅ‚ฐๅ‚ฑๅ‚ณๅ‚ดๅ‚ตๅ‚ถๅ‚ทๅ‚ธๅ‚นๅ‚ผ๏ฟฝ".split("");for(j=0;j!=D[130].length;++j)if(D[130][j].charCodeAt(0)!==65533){e[D[130][j]]=33280+j;d[33280+j]=D[130][j]}D[131]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ‚ฝๅ‚พๅ‚ฟๅƒ€ๅƒๅƒ‚ๅƒƒๅƒ„ๅƒ…ๅƒ†ๅƒ‡ๅƒˆๅƒ‰ๅƒŠๅƒ‹ๅƒŒๅƒๅƒŽๅƒๅƒ‘ๅƒ’ๅƒ“ๅƒ”ๅƒ•ๅƒ—ๅƒ˜ๅƒ™ๅƒ›ๅƒœๅƒๅƒžๅƒŸๅƒ ๅƒกๅƒขๅƒฃๅƒคๅƒฅๅƒจๅƒฉๅƒชๅƒซๅƒฏๅƒฐๅƒฑๅƒฒๅƒดๅƒถๅƒทๅƒธๅƒนๅƒบๅƒผๅƒฝๅƒพๅƒฟๅ„€ๅ„ๅ„‚ๅ„ƒๅ„„ๅ„…ๅ„ˆ๏ฟฝๅ„‰ๅ„Šๅ„Œๅ„ๅ„Žๅ„ๅ„ๅ„‘ๅ„“ๅ„”ๅ„•ๅ„–ๅ„—ๅ„˜ๅ„™ๅ„šๅ„›ๅ„œๅ„ๅ„žๅ„Ÿๅ„ ๅ„ขๅ„ฃๅ„คๅ„ฅๅ„ฆๅ„งๅ„จๅ„ฉๅ„ชๅ„ซๅ„ฌๅ„ญๅ„ฎๅ„ฏๅ„ฐๅ„ฑๅ„ฒๅ„ณๅ„ดๅ„ตๅ„ถๅ„ทๅ„ธๅ„นๅ„บๅ„ปๅ„ผๅ„ฝๅ„พๅ…‚ๅ…‡ๅ…Šๅ…Œๅ…Žๅ…ๅ…ๅ…’ๅ…“ๅ…—ๅ…˜ๅ…™ๅ…›ๅ…ๅ…žๅ…Ÿๅ… ๅ…กๅ…ฃๅ…คๅ…ฆๅ…งๅ…ฉๅ…ชๅ…ฏๅ…ฒๅ…บๅ…พๅ…ฟๅ†ƒๅ†„ๅ††ๅ†‡ๅ†Šๅ†‹ๅ†Žๅ†ๅ†ๅ†‘ๅ†“ๅ†”ๅ†˜ๅ†šๅ†ๅ†žๅ†Ÿๅ†กๅ†ฃๅ†ฆๅ†งๅ†จๅ†ฉๅ†ชๅ†ญๅ†ฎๅ†ดๅ†ธๅ†นๅ†บๅ†พๅ†ฟๅ‡ๅ‡‚ๅ‡ƒๅ‡…ๅ‡ˆๅ‡Šๅ‡ๅ‡Žๅ‡ๅ‡’ๅ‡“ๅ‡”ๅ‡•ๅ‡–ๅ‡—๏ฟฝ".split("");for(j=0;j!=D[131].length;++j)if(D[131][j].charCodeAt(0)!==65533){e[D[131][j]]=33536+j;d[33536+j]=D[131][j]}D[132]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ‡˜ๅ‡™ๅ‡šๅ‡œๅ‡žๅ‡Ÿๅ‡ขๅ‡ฃๅ‡ฅๅ‡ฆๅ‡งๅ‡จๅ‡ฉๅ‡ชๅ‡ฌๅ‡ฎๅ‡ฑๅ‡ฒๅ‡ดๅ‡ทๅ‡พๅˆ„ๅˆ…ๅˆ‰ๅˆ‹ๅˆŒๅˆๅˆๅˆ“ๅˆ”ๅˆ•ๅˆœๅˆžๅˆŸๅˆกๅˆขๅˆฃๅˆฅๅˆฆๅˆงๅˆชๅˆฌๅˆฏๅˆฑๅˆฒๅˆดๅˆตๅˆผๅˆพๅ‰„ๅ‰…ๅ‰†ๅ‰‡ๅ‰ˆๅ‰‰ๅ‰‹ๅ‰Žๅ‰ๅ‰’ๅ‰“ๅ‰•ๅ‰—ๅ‰˜๏ฟฝๅ‰™ๅ‰šๅ‰›ๅ‰ๅ‰Ÿๅ‰ ๅ‰ขๅ‰ฃๅ‰คๅ‰ฆๅ‰จๅ‰ซๅ‰ฌๅ‰ญๅ‰ฎๅ‰ฐๅ‰ฑๅ‰ณๅ‰ดๅ‰ตๅ‰ถๅ‰ทๅ‰ธๅ‰นๅ‰บๅ‰ปๅ‰ผๅ‰พๅŠ€ๅŠƒๅŠ„ๅŠ…ๅŠ†ๅŠ‡ๅŠ‰ๅŠŠๅŠ‹ๅŠŒๅŠๅŠŽๅŠๅŠ‘ๅŠ’ๅŠ”ๅŠ•ๅŠ–ๅŠ—ๅŠ˜ๅŠ™ๅŠšๅŠœๅŠคๅŠฅๅŠฆๅŠงๅŠฎๅŠฏๅŠฐๅŠดๅŠตๅŠถๅŠทๅŠธๅŠนๅŠบๅŠปๅŠผๅŠฝๅ‹€ๅ‹ๅ‹‚ๅ‹„ๅ‹…ๅ‹†ๅ‹ˆๅ‹Šๅ‹Œๅ‹ๅ‹Žๅ‹ๅ‹‘ๅ‹“ๅ‹”ๅ‹•ๅ‹—ๅ‹™ๅ‹šๅ‹›ๅ‹œๅ‹ๅ‹žๅ‹ ๅ‹กๅ‹ขๅ‹ฃๅ‹ฅๅ‹ฆๅ‹งๅ‹จๅ‹ฉๅ‹ชๅ‹ซๅ‹ฌๅ‹ญๅ‹ฎๅ‹ฏๅ‹ฑๅ‹ฒๅ‹ณๅ‹ดๅ‹ตๅ‹ถๅ‹ทๅ‹ธๅ‹ปๅ‹ผๅ‹ฝๅŒๅŒ‚ๅŒƒๅŒ„ๅŒ‡ๅŒ‰ๅŒŠๅŒ‹ๅŒŒๅŒŽ๏ฟฝ".split("");for(j=0;j!=D[132].length;++j)if(D[132][j].charCodeAt(0)!==65533){e[D[132][j]]=33792+j;d[33792+j]=D[132][j]}D[133]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅŒ‘ๅŒ’ๅŒ“ๅŒ”ๅŒ˜ๅŒ›ๅŒœๅŒžๅŒŸๅŒขๅŒคๅŒฅๅŒงๅŒจๅŒฉๅŒซๅŒฌๅŒญๅŒฏๅŒฐๅŒฑๅŒฒๅŒณๅŒดๅŒตๅŒถๅŒทๅŒธๅŒผๅŒฝๅ€ๅ‚ๅ„ๅ†ๅ‹ๅŒๅๅๅ”ๅ˜ๅ™ๅ›ๅๅฅๅจๅชๅฌๅญๅฒๅถๅนๅปๅผๅฝๅพๅŽ€ๅŽๅŽƒๅŽ‡ๅŽˆๅŽŠๅŽŽๅŽ๏ฟฝๅŽๅŽ‘ๅŽ’ๅŽ“ๅŽ”ๅŽ–ๅŽ—ๅŽ™ๅŽ›ๅŽœๅŽžๅŽ ๅŽกๅŽคๅŽงๅŽชๅŽซๅŽฌๅŽญๅŽฏๅŽฐๅŽฑๅŽฒๅŽณๅŽดๅŽตๅŽทๅŽธๅŽนๅŽบๅŽผๅŽฝๅŽพๅ€ๅƒๅ„ๅ…ๅ†ๅ‡ๅŽๅๅๅ’ๅ“ๅ•ๅšๅœๅๅžๅกๅขๅงๅดๅบๅพๅฟๅ€ๅ‚ๅ…ๅ‡ๅ‹ๅ”ๅ˜ๅ™ๅšๅœๅขๅคๅฅๅชๅฐๅณๅถๅทๅบๅฝๅฟๅ‘ๅ‘‚ๅ‘„ๅ‘…ๅ‘‡ๅ‘‰ๅ‘Œๅ‘ๅ‘Žๅ‘ๅ‘‘ๅ‘šๅ‘ๅ‘žๅ‘Ÿๅ‘ ๅ‘กๅ‘ฃๅ‘ฅๅ‘งๅ‘ฉๅ‘ชๅ‘ซๅ‘ฌๅ‘ญๅ‘ฎๅ‘ฏๅ‘ฐๅ‘ดๅ‘นๅ‘บๅ‘พๅ‘ฟๅ’ๅ’ƒๅ’…ๅ’‡ๅ’ˆๅ’‰ๅ’Šๅ’ๅ’‘ๅ’“ๅ’—ๅ’˜ๅ’œๅ’žๅ’Ÿๅ’ ๅ’ก๏ฟฝ".split("");for(j=0;j!=D[133].length;++j)if(D[133][j].charCodeAt(0)!==65533){e[D[133][j]]=34048+j;d[34048+j]=D[133][j]}D[134]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ’ขๅ’ฅๅ’ฎๅ’ฐๅ’ฒๅ’ตๅ’ถๅ’ทๅ’นๅ’บๅ’ผๅ’พๅ“ƒๅ“…ๅ“Šๅ“‹ๅ“–ๅ“˜ๅ“›ๅ“ ๅ“กๅ“ขๅ“ฃๅ“คๅ“ซๅ“ฌๅ“ฏๅ“ฐๅ“ฑๅ“ดๅ“ตๅ“ถๅ“ทๅ“ธๅ“นๅ“ปๅ“พๅ”€ๅ”‚ๅ”ƒๅ”„ๅ”…ๅ”ˆๅ”Šๅ”‹ๅ”Œๅ”ๅ”Žๅ”’ๅ”“ๅ”•ๅ”–ๅ”—ๅ”˜ๅ”™ๅ”šๅ”œๅ”ๅ”žๅ”Ÿๅ”กๅ”ฅๅ”ฆ๏ฟฝๅ”จๅ”ฉๅ”ซๅ”ญๅ”ฒๅ”ดๅ”ตๅ”ถๅ”ธๅ”นๅ”บๅ”ปๅ”ฝๅ•€ๅ•‚ๅ•…ๅ•‡ๅ•ˆๅ•‹ๅ•Œๅ•ๅ•Žๅ•ๅ•‘ๅ•’ๅ•“ๅ•”ๅ•—ๅ•˜ๅ•™ๅ•šๅ•›ๅ•ๅ•žๅ•Ÿๅ• ๅ•ขๅ•ฃๅ•จๅ•ฉๅ•ซๅ•ฏๅ•ฐๅ•ฑๅ•ฒๅ•ณๅ•ดๅ•นๅ•บๅ•ฝๅ•ฟๅ–…ๅ–†ๅ–Œๅ–ๅ–Žๅ–ๅ–’ๅ–“ๅ–•ๅ––ๅ–—ๅ–šๅ–›ๅ–žๅ– ๅ–กๅ–ขๅ–ฃๅ–คๅ–ฅๅ–ฆๅ–จๅ–ฉๅ–ชๅ–ซๅ–ฌๅ–ญๅ–ฎๅ–ฏๅ–ฐๅ–ฒๅ–ดๅ–ถๅ–ธๅ–บๅ–ผๅ–ฟๅ—€ๅ—ๅ—‚ๅ—ƒๅ—†ๅ—‡ๅ—ˆๅ—Šๅ—‹ๅ—Žๅ—ๅ—ๅ—•ๅ——ๅ—˜ๅ—™ๅ—šๅ—›ๅ—žๅ— ๅ—ขๅ—งๅ—ฉๅ—ญๅ—ฎๅ—ฐๅ—ฑๅ—ดๅ—ถๅ—ธๅ—นๅ—บๅ—ปๅ—ผๅ—ฟๅ˜‚ๅ˜ƒๅ˜„ๅ˜…๏ฟฝ".split("");for(j=0;j!=D[134].length;++j)if(D[134][j].charCodeAt(0)!==65533){e[D[134][j]]=34304+j;d[34304+j]=D[134][j]}D[135]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ˜†ๅ˜‡ๅ˜Šๅ˜‹ๅ˜ๅ˜ๅ˜‘ๅ˜’ๅ˜“ๅ˜”ๅ˜•ๅ˜–ๅ˜—ๅ˜™ๅ˜šๅ˜œๅ˜ๅ˜ ๅ˜กๅ˜ขๅ˜ฅๅ˜ฆๅ˜จๅ˜ฉๅ˜ชๅ˜ซๅ˜ฎๅ˜ฏๅ˜ฐๅ˜ณๅ˜ตๅ˜ทๅ˜ธๅ˜บๅ˜ผๅ˜ฝๅ˜พๅ™€ๅ™ๅ™‚ๅ™ƒๅ™„ๅ™…ๅ™†ๅ™‡ๅ™ˆๅ™‰ๅ™Šๅ™‹ๅ™ๅ™ๅ™‘ๅ™’ๅ™“ๅ™•ๅ™–ๅ™šๅ™›ๅ™ๅ™žๅ™Ÿๅ™ ๅ™ก๏ฟฝๅ™ฃๅ™ฅๅ™ฆๅ™งๅ™ญๅ™ฎๅ™ฏๅ™ฐๅ™ฒๅ™ณๅ™ดๅ™ตๅ™ทๅ™ธๅ™นๅ™บๅ™ฝๅ™พๅ™ฟๅš€ๅšๅš‚ๅšƒๅš„ๅš‡ๅšˆๅš‰ๅšŠๅš‹ๅšŒๅšๅšๅš‘ๅš’ๅš”ๅš•ๅš–ๅš—ๅš˜ๅš™ๅššๅš›ๅšœๅšๅšžๅšŸๅš ๅšกๅšขๅšคๅšฅๅšฆๅšงๅšจๅšฉๅšชๅšซๅšฌๅšญๅšฎๅšฐๅšฑๅšฒๅšณๅšดๅšตๅšถๅšธๅšนๅšบๅšปๅšฝๅšพๅšฟๅ›€ๅ›ๅ›‚ๅ›ƒๅ›„ๅ›…ๅ›†ๅ›‡ๅ›ˆๅ›‰ๅ›‹ๅ›Œๅ›ๅ›Žๅ›ๅ›ๅ›‘ๅ›’ๅ›“ๅ›•ๅ›–ๅ›˜ๅ›™ๅ›œๅ›ฃๅ›ฅๅ›ฆๅ›งๅ›จๅ›ฉๅ›ชๅ›ฌๅ›ฎๅ›ฏๅ›ฒๅ›ณๅ›ถๅ›ทๅ›ธๅ›ปๅ›ผๅœ€ๅœๅœ‚ๅœ…ๅœ‡ๅœ‹ๅœŒๅœๅœŽๅœๅœๅœ‘๏ฟฝ".split("");for(j=0;j!=D[135].length;++j)if(D[135][j].charCodeAt(0)!==65533){e[D[135][j]]=34560+j;d[34560+j]=D[135][j]}D[136]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅœ’ๅœ“ๅœ”ๅœ•ๅœ–ๅœ—ๅœ˜ๅœ™ๅœšๅœ›ๅœๅœžๅœ ๅœกๅœขๅœคๅœฅๅœฆๅœงๅœซๅœฑๅœฒๅœดๅœตๅœถๅœทๅœธๅœผๅœฝๅœฟๅๅƒๅ„ๅ…ๅ†ๅˆๅ‰ๅ‹ๅ’ๅ“ๅ”ๅ•ๅ–ๅ˜ๅ™ๅขๅฃๅฅๅงๅฌๅฎๅฐๅฑๅฒๅดๅตๅธๅนๅบๅฝๅพๅฟๅž€๏ฟฝๅžๅž‡ๅžˆๅž‰ๅžŠๅžๅžŽๅžๅžๅž‘ๅž”ๅž•ๅž–ๅž—ๅž˜ๅž™ๅžšๅžœๅžๅžžๅžŸๅžฅๅžจๅžชๅžฌๅžฏๅžฐๅžฑๅžณๅžตๅžถๅžทๅžนๅžบๅžปๅžผๅžฝๅžพๅžฟๅŸ€ๅŸๅŸ„ๅŸ…ๅŸ†ๅŸ‡ๅŸˆๅŸ‰ๅŸŠๅŸŒๅŸๅŸๅŸ‘ๅŸ“ๅŸ–ๅŸ—ๅŸ›ๅŸœๅŸžๅŸกๅŸขๅŸฃๅŸฅๅŸฆๅŸงๅŸจๅŸฉๅŸชๅŸซๅŸฌๅŸฎๅŸฐๅŸฑๅŸฒๅŸณๅŸตๅŸถๅŸทๅŸปๅŸผๅŸพๅŸฟๅ ๅ ƒๅ „ๅ …ๅ ˆๅ ‰ๅ Šๅ Œๅ Žๅ ๅ ๅ ’ๅ “ๅ ”ๅ –ๅ —ๅ ˜ๅ šๅ ›ๅ œๅ ๅ Ÿๅ ขๅ ฃๅ ฅๅ ฆๅ งๅ จๅ ฉๅ ซๅ ฌๅ ญๅ ฎๅ ฏๅ ฑๅ ฒๅ ณๅ ดๅ ถๅ ทๅ ธๅ นๅ บๅ ปๅ ผๅ ฝ๏ฟฝ".split("");for(j=0;j!=D[136].length;++j)if(D[136][j].charCodeAt(0)!==65533){e[D[136][j]]=34816+j;d[34816+j]=D[136][j]}D[137]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ พๅ ฟๅก€ๅกๅก‚ๅกƒๅก…ๅก†ๅก‡ๅกˆๅก‰ๅกŠๅก‹ๅกŽๅกๅกๅก’ๅก“ๅก•ๅก–ๅก—ๅก™ๅกšๅก›ๅกœๅกๅกŸๅก ๅกกๅกขๅกฃๅกคๅกฆๅกงๅกจๅกฉๅกชๅกญๅกฎๅกฏๅกฐๅกฑๅกฒๅกณๅกดๅกตๅกถๅกทๅกธๅกนๅกบๅกปๅกผๅกฝๅกฟๅข‚ๅข„ๅข†ๅข‡ๅขˆๅขŠๅข‹ๅขŒ๏ฟฝๅขๅขŽๅขๅขๅข‘ๅข”ๅข•ๅข–ๅข—ๅข˜ๅข›ๅขœๅขๅข ๅขกๅขขๅขฃๅขคๅขฅๅขฆๅขงๅขชๅขซๅขฌๅขญๅขฎๅขฏๅขฐๅขฑๅขฒๅขณๅขดๅขตๅขถๅขทๅขธๅขนๅขบๅขปๅขฝๅขพๅขฟๅฃ€ๅฃ‚ๅฃƒๅฃ„ๅฃ†ๅฃ‡ๅฃˆๅฃ‰ๅฃŠๅฃ‹ๅฃŒๅฃๅฃŽๅฃๅฃๅฃ’ๅฃ“ๅฃ”ๅฃ–ๅฃ—ๅฃ˜ๅฃ™ๅฃšๅฃ›ๅฃœๅฃๅฃžๅฃŸๅฃ ๅฃกๅฃขๅฃฃๅฃฅๅฃฆๅฃงๅฃจๅฃฉๅฃชๅฃญๅฃฏๅฃฑๅฃฒๅฃดๅฃตๅฃทๅฃธๅฃบๅฃปๅฃผๅฃฝๅฃพๅฃฟๅค€ๅคๅคƒๅค…ๅค†ๅคˆๅค‰ๅคŠๅค‹ๅคŒๅคŽๅคๅค‘ๅค’ๅค“ๅค—ๅค˜ๅค›ๅคๅคžๅค ๅคกๅคขๅคฃๅคฆๅคจๅคฌๅคฐๅคฒๅคณๅคตๅคถๅคป๏ฟฝ".split("");for(j=0;j!=D[137].length;++j)if(D[137][j].charCodeAt(0)!==65533){e[D[137][j]]=35072+j;d[35072+j]=D[137][j]}D[138]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅคฝๅคพๅคฟๅฅ€ๅฅƒๅฅ…ๅฅ†ๅฅŠๅฅŒๅฅๅฅๅฅ’ๅฅ“ๅฅ™ๅฅ›ๅฅœๅฅๅฅžๅฅŸๅฅกๅฅฃๅฅคๅฅฆๅฅงๅฅจๅฅฉๅฅชๅฅซๅฅฌๅฅญๅฅฎๅฅฏๅฅฐๅฅฑๅฅฒๅฅตๅฅทๅฅบๅฅปๅฅผๅฅพๅฅฟๅฆ€ๅฆ…ๅฆ‰ๅฆ‹ๅฆŒๅฆŽๅฆๅฆๅฆ‘ๅฆ”ๅฆ•ๅฆ˜ๅฆšๅฆ›ๅฆœๅฆๅฆŸๅฆ ๅฆกๅฆขๅฆฆ๏ฟฝๅฆงๅฆฌๅฆญๅฆฐๅฆฑๅฆณๅฆดๅฆตๅฆถๅฆทๅฆธๅฆบๅฆผๅฆฝๅฆฟๅง€ๅงๅง‚ๅงƒๅง„ๅง…ๅง‡ๅงˆๅง‰ๅงŒๅงๅงŽๅงๅง•ๅง–ๅง™ๅง›ๅงžๅงŸๅง ๅงกๅงขๅงคๅงฆๅงงๅงฉๅงชๅงซๅงญๅงฎๅงฏๅงฐๅงฑๅงฒๅงณๅงดๅงตๅงถๅงทๅงธๅงบๅงผๅงฝๅงพๅจ€ๅจ‚ๅจŠๅจ‹ๅจๅจŽๅจๅจๅจ’ๅจ”ๅจ•ๅจ–ๅจ—ๅจ™ๅจšๅจ›ๅจๅจžๅจกๅจขๅจคๅจฆๅจงๅจจๅจชๅจซๅจฌๅจญๅจฎๅจฏๅจฐๅจณๅจตๅจทๅจธๅจนๅจบๅจปๅจฝๅจพๅจฟๅฉๅฉ‚ๅฉƒๅฉ„ๅฉ…ๅฉ‡ๅฉˆๅฉ‹ๅฉŒๅฉๅฉŽๅฉๅฉๅฉ‘ๅฉ’ๅฉ“ๅฉ”ๅฉ–ๅฉ—ๅฉ˜ๅฉ™ๅฉ›ๅฉœๅฉๅฉžๅฉŸๅฉ ๏ฟฝ".split("");for(j=0;j!=D[138].length;++j)if(D[138][j].charCodeAt(0)!==65533){e[D[138][j]]=35328+j;d[35328+j]=D[138][j]}D[139]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฉกๅฉฃๅฉคๅฉฅๅฉฆๅฉจๅฉฉๅฉซๅฉฌๅฉญๅฉฎๅฉฏๅฉฐๅฉฑๅฉฒๅฉณๅฉธๅฉนๅฉปๅฉผๅฉฝๅฉพๅช€ๅชๅช‚ๅชƒๅช„ๅช…ๅช†ๅช‡ๅชˆๅช‰ๅชŠๅช‹ๅชŒๅชๅชŽๅชๅชๅช‘ๅช“ๅช”ๅช•ๅช–ๅช—ๅช˜ๅช™ๅชœๅชๅชžๅชŸๅช ๅชกๅชขๅชฃๅชคๅชฅๅชฆๅชงๅชจๅชฉๅชซๅชฌ๏ฟฝๅชญๅชฎๅชฏๅชฐๅชฑๅชดๅชถๅชทๅชนๅชบๅชปๅชผๅชฝๅชฟๅซ€ๅซƒๅซ„ๅซ…ๅซ†ๅซ‡ๅซˆๅซŠๅซ‹ๅซๅซŽๅซๅซๅซ‘ๅซ“ๅซ•ๅซ—ๅซ™ๅซšๅซ›ๅซๅซžๅซŸๅซขๅซคๅซฅๅซงๅซจๅซชๅซฌๅซญๅซฎๅซฏๅซฐๅซฒๅซณๅซดๅซตๅซถๅซทๅซธๅซนๅซบๅซปๅซผๅซฝๅซพๅซฟๅฌ€ๅฌๅฌ‚ๅฌƒๅฌ„ๅฌ…ๅฌ†ๅฌ‡ๅฌˆๅฌŠๅฌ‹ๅฌŒๅฌๅฌŽๅฌๅฌๅฌ‘ๅฌ’ๅฌ“ๅฌ”ๅฌ•ๅฌ˜ๅฌ™ๅฌšๅฌ›ๅฌœๅฌๅฌžๅฌŸๅฌ ๅฌกๅฌขๅฌฃๅฌคๅฌฅๅฌฆๅฌงๅฌจๅฌฉๅฌชๅฌซๅฌฌๅฌญๅฌฎๅฌฏๅฌฐๅฌฑๅฌณๅฌตๅฌถๅฌธๅฌนๅฌบๅฌปๅฌผๅฌฝๅฌพๅฌฟๅญๅญ‚ๅญƒๅญ„ๅญ…ๅญ†ๅญ‡๏ฟฝ".split("");for(j=0;j!=D[139].length;++j)if(D[139][j].charCodeAt(0)!==65533){e[D[139][j]]=35584+j;d[35584+j]=D[139][j]}D[140]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅญˆๅญ‰ๅญŠๅญ‹ๅญŒๅญๅญŽๅญๅญ’ๅญ–ๅญžๅญ ๅญกๅญงๅญจๅญซๅญญๅญฎๅญฏๅญฒๅญดๅญถๅญทๅญธๅญนๅญปๅญผๅญพๅญฟๅฎ‚ๅฎ†ๅฎŠๅฎๅฎŽๅฎๅฎ‘ๅฎ’ๅฎ”ๅฎ–ๅฎŸๅฎงๅฎจๅฎฉๅฎฌๅฎญๅฎฎๅฎฏๅฎฑๅฎฒๅฎทๅฎบๅฎปๅฎผๅฏ€ๅฏๅฏƒๅฏˆๅฏ‰ๅฏŠๅฏ‹ๅฏๅฏŽๅฏ๏ฟฝๅฏ‘ๅฏ”ๅฏ•ๅฏ–ๅฏ—ๅฏ˜ๅฏ™ๅฏšๅฏ›ๅฏœๅฏ ๅฏขๅฏฃๅฏฆๅฏงๅฏฉๅฏชๅฏซๅฏฌๅฏญๅฏฏๅฏฑๅฏฒๅฏณๅฏดๅฏตๅฏถๅฏทๅฏฝๅฏพๅฐ€ๅฐ‚ๅฐƒๅฐ…ๅฐ‡ๅฐˆๅฐ‹ๅฐŒๅฐๅฐŽๅฐๅฐ’ๅฐ“ๅฐ—ๅฐ™ๅฐ›ๅฐžๅฐŸๅฐ ๅฐกๅฐฃๅฐฆๅฐจๅฐฉๅฐชๅฐซๅฐญๅฐฎๅฐฏๅฐฐๅฐฒๅฐณๅฐตๅฐถๅฐทๅฑƒๅฑ„ๅฑ†ๅฑ‡ๅฑŒๅฑๅฑ’ๅฑ“ๅฑ”ๅฑ–ๅฑ—ๅฑ˜ๅฑšๅฑ›ๅฑœๅฑๅฑŸๅฑขๅฑคๅฑงๅฑจๅฑฉๅฑชๅฑซๅฑฌๅฑญๅฑฐๅฑฒๅฑณๅฑดๅฑตๅฑถๅฑทๅฑธๅฑปๅฑผๅฑฝๅฑพๅฒ€ๅฒƒๅฒ„ๅฒ…ๅฒ†ๅฒ‡ๅฒ‰ๅฒŠๅฒ‹ๅฒŽๅฒๅฒ’ๅฒ“ๅฒ•ๅฒๅฒžๅฒŸๅฒ ๅฒกๅฒคๅฒฅๅฒฆๅฒงๅฒจ๏ฟฝ".split("");for(j=0;j!=D[140].length;++j)if(D[140][j].charCodeAt(0)!==65533){e[D[140][j]]=35840+j;d[35840+j]=D[140][j]}D[141]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฒชๅฒฎๅฒฏๅฒฐๅฒฒๅฒดๅฒถๅฒนๅฒบๅฒปๅฒผๅฒพๅณ€ๅณ‚ๅณƒๅณ…ๅณ†ๅณ‡ๅณˆๅณ‰ๅณŠๅณŒๅณๅณŽๅณๅณๅณ‘ๅณ“ๅณ”ๅณ•ๅณ–ๅณ—ๅณ˜ๅณšๅณ›ๅณœๅณๅณžๅณŸๅณ ๅณขๅณฃๅณงๅณฉๅณซๅณฌๅณฎๅณฏๅณฑๅณฒๅณณๅณดๅณตๅณถๅณทๅณธๅณนๅณบๅณผๅณฝๅณพๅณฟๅด€๏ฟฝๅดๅด„ๅด…ๅดˆๅด‰ๅดŠๅด‹ๅดŒๅดๅดๅดๅด‘ๅด’ๅด“ๅด•ๅด—ๅด˜ๅด™ๅดšๅดœๅดๅดŸๅด ๅดกๅดขๅดฃๅดฅๅดจๅดชๅดซๅดฌๅดฏๅดฐๅดฑๅดฒๅดณๅดตๅดถๅดทๅดธๅดนๅดบๅดปๅดผๅดฟๅต€ๅตๅต‚ๅตƒๅต„ๅต…ๅต†ๅตˆๅต‰ๅตๅตŽๅตๅตๅต‘ๅต’ๅต“ๅต”ๅต•ๅต–ๅต—ๅต™ๅตšๅตœๅตžๅตŸๅต ๅตกๅตขๅตฃๅตคๅตฅๅตฆๅตงๅตจๅตชๅตญๅตฎๅตฐๅตฑๅตฒๅตณๅตตๅตถๅตทๅตธๅตนๅตบๅตปๅตผๅตฝๅตพๅตฟๅถ€ๅถๅถƒๅถ„ๅถ…ๅถ†ๅถ‡ๅถˆๅถ‰ๅถŠๅถ‹ๅถŒๅถๅถŽๅถๅถๅถ‘ๅถ’ๅถ“ๅถ”ๅถ•ๅถ–ๅถ—ๅถ˜ๅถšๅถ›ๅถœๅถžๅถŸๅถ ๏ฟฝ".split("");for(j=0;j!=D[141].length;++j)if(D[141][j].charCodeAt(0)!==65533){e[D[141][j]]=36096+j;d[36096+j]=D[141][j]}D[142]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅถกๅถขๅถฃๅถคๅถฅๅถฆๅถงๅถจๅถฉๅถชๅถซๅถฌๅถญๅถฎๅถฏๅถฐๅถฑๅถฒๅถณๅถดๅถตๅถถๅถธๅถนๅถบๅถปๅถผๅถฝๅถพๅถฟๅท€ๅทๅท‚ๅทƒๅท„ๅท†ๅท‡ๅทˆๅท‰ๅทŠๅท‹ๅทŒๅทŽๅทๅทๅท‘ๅท’ๅท“ๅท”ๅท•ๅท–ๅท—ๅท˜ๅท™ๅทšๅทœๅทŸๅท ๅทฃๅทคๅทชๅทฌๅทญ๏ฟฝๅทฐๅทตๅทถๅทธๅทนๅทบๅทปๅทผๅทฟๅธ€ๅธ„ๅธ‡ๅธ‰ๅธŠๅธ‹ๅธๅธŽๅธ’ๅธ“ๅธ—ๅธžๅธŸๅธ ๅธกๅธขๅธฃๅธคๅธฅๅธจๅธฉๅธชๅธซๅธฌๅธฏๅธฐๅธฒๅธณๅธดๅธตๅธถๅธนๅธบๅธพๅธฟๅน€ๅนๅนƒๅน†ๅน‡ๅนˆๅน‰ๅนŠๅน‹ๅนๅนŽๅนๅนๅน‘ๅน’ๅน“ๅน–ๅน—ๅน˜ๅน™ๅนšๅนœๅนๅนŸๅน ๅนฃๅนคๅนฅๅนฆๅนงๅนจๅนฉๅนชๅนซๅนฌๅนญๅนฎๅนฏๅนฐๅนฑๅนตๅนทๅนนๅนพๅบๅบ‚ๅบƒๅบ…ๅบˆๅบ‰ๅบŒๅบๅบŽๅบ’ๅบ˜ๅบ›ๅบๅบกๅบขๅบฃๅบคๅบจๅบฉๅบชๅบซๅบฌๅบฎๅบฏๅบฐๅบฑๅบฒๅบดๅบบๅบปๅบผๅบฝๅบฟๅป€ๅปๅป‚ๅปƒๅป„ๅป…๏ฟฝ".split("");for(j=0;j!=D[142].length;++j)if(D[142][j].charCodeAt(0)!==65533){e[D[142][j]]=36352+j;d[36352+j]=D[142][j]}D[143]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅป†ๅป‡ๅปˆๅป‹ๅปŒๅปๅปŽๅปๅปๅป”ๅป•ๅป—ๅป˜ๅป™ๅปšๅปœๅปๅปžๅปŸๅป ๅปกๅปขๅปฃๅปคๅปฅๅปฆๅปงๅปฉๅปซๅปฌๅปญๅปฎๅปฏๅปฐๅปฑๅปฒๅปณๅปตๅปธๅปนๅปปๅปผๅปฝๅผ…ๅผ†ๅผ‡ๅผ‰ๅผŒๅผๅผŽๅผๅผ’ๅผ”ๅผ–ๅผ™ๅผšๅผœๅผๅผžๅผกๅผขๅผฃๅผค๏ฟฝๅผจๅผซๅผฌๅผฎๅผฐๅผฒๅผณๅผดๅผตๅผถๅผทๅผธๅผปๅผฝๅผพๅผฟๅฝๅฝ‚ๅฝƒๅฝ„ๅฝ…ๅฝ†ๅฝ‡ๅฝˆๅฝ‰ๅฝŠๅฝ‹ๅฝŒๅฝๅฝŽๅฝๅฝ‘ๅฝ”ๅฝ™ๅฝšๅฝ›ๅฝœๅฝžๅฝŸๅฝ ๅฝฃๅฝฅๅฝงๅฝจๅฝซๅฝฎๅฝฏๅฝฒๅฝดๅฝตๅฝถๅฝธๅฝบๅฝฝๅฝพๅฝฟๅพƒๅพ†ๅพๅพŽๅพๅพ‘ๅพ“ๅพ”ๅพ–ๅพšๅพ›ๅพๅพžๅพŸๅพ ๅพขๅพฃๅพคๅพฅๅพฆๅพงๅพฉๅพซๅพฌๅพฏๅพฐๅพฑๅพฒๅพณๅพดๅพถๅพธๅพนๅพบๅพปๅพพๅพฟๅฟ€ๅฟๅฟ‚ๅฟ‡ๅฟˆๅฟŠๅฟ‹ๅฟŽๅฟ“ๅฟ”ๅฟ•ๅฟšๅฟ›ๅฟœๅฟžๅฟŸๅฟขๅฟฃๅฟฅๅฟฆๅฟจๅฟฉๅฟฌๅฟฏๅฟฐๅฟฒๅฟณๅฟดๅฟถๅฟทๅฟนๅฟบๅฟผๆ€‡๏ฟฝ".split("");for(j=0;j!=D[143].length;++j)if(D[143][j].charCodeAt(0)!==65533){e[D[143][j]]=36608+j;d[36608+j]=D[143][j]}D[144]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ€ˆๆ€‰ๆ€‹ๆ€Œๆ€ๆ€‘ๆ€“ๆ€—ๆ€˜ๆ€šๆ€žๆ€Ÿๆ€ขๆ€ฃๆ€คๆ€ฌๆ€ญๆ€ฎๆ€ฐๆ€ฑๆ€ฒๆ€ณๆ€ดๆ€ถๆ€ทๆ€ธๆ€นๆ€บๆ€ฝๆ€พๆ€ๆ„ๆ…ๆ†ๆ‡ๆˆๆ‰ๆŠๆŒๆŽๆๆ‘ๆ“ๆ”ๆ–ๆ—ๆ˜ๆ›ๆœๆžๆŸๆ ๆกๆฅๆฆๆฎๆฑๆฒๆดๆตๆทๆพๆ‚€๏ฟฝๆ‚ๆ‚‚ๆ‚…ๆ‚†ๆ‚‡ๆ‚ˆๆ‚Šๆ‚‹ๆ‚Žๆ‚ๆ‚ๆ‚‘ๆ‚“ๆ‚•ๆ‚—ๆ‚˜ๆ‚™ๆ‚œๆ‚žๆ‚กๆ‚ขๆ‚คๆ‚ฅๆ‚งๆ‚ฉๆ‚ชๆ‚ฎๆ‚ฐๆ‚ณๆ‚ตๆ‚ถๆ‚ทๆ‚นๆ‚บๆ‚ฝๆ‚พๆ‚ฟๆƒ€ๆƒๆƒ‚ๆƒƒๆƒ„ๆƒ‡ๆƒˆๆƒ‰ๆƒŒๆƒๆƒŽๆƒๆƒๆƒ’ๆƒ“ๆƒ”ๆƒ–ๆƒ—ๆƒ™ๆƒ›ๆƒžๆƒกๆƒขๆƒฃๆƒคๆƒฅๆƒชๆƒฑๆƒฒๆƒตๆƒทๆƒธๆƒปๆƒผๆƒฝๆƒพๆƒฟๆ„‚ๆ„ƒๆ„„ๆ„…ๆ„‡ๆ„Šๆ„‹ๆ„Œๆ„ๆ„‘ๆ„’ๆ„“ๆ„”ๆ„–ๆ„—ๆ„˜ๆ„™ๆ„›ๆ„œๆ„ๆ„žๆ„กๆ„ขๆ„ฅๆ„จๆ„ฉๆ„ชๆ„ฌๆ„ญๆ„ฎๆ„ฏๆ„ฐๆ„ฑๆ„ฒๆ„ณๆ„ดๆ„ตๆ„ถๆ„ทๆ„ธๆ„นๆ„บๆ„ปๆ„ผๆ„ฝๆ„พๆ…€ๆ…ๆ…‚ๆ…ƒๆ…„ๆ……ๆ…†๏ฟฝ".split("");for(j=0;j!=D[144].length;++j)if(D[144][j].charCodeAt(0)!==65533){e[D[144][j]]=36864+j;d[36864+j]=D[144][j]}D[145]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ…‡ๆ…‰ๆ…‹ๆ…ๆ…ๆ…ๆ…’ๆ…“ๆ…”ๆ…–ๆ…—ๆ…˜ๆ…™ๆ…šๆ…›ๆ…œๆ…žๆ…Ÿๆ… ๆ…กๆ…ฃๆ…คๆ…ฅๆ…ฆๆ…ฉๆ…ชๆ…ซๆ…ฌๆ…ญๆ…ฎๆ…ฏๆ…ฑๆ…ฒๆ…ณๆ…ดๆ…ถๆ…ธๆ…นๆ…บๆ…ปๆ…ผๆ…ฝๆ…พๆ…ฟๆ†€ๆ†ๆ†‚ๆ†ƒๆ†„ๆ†…ๆ††ๆ†‡ๆ†ˆๆ†‰ๆ†Šๆ†Œๆ†ๆ†ๆ†ๆ†‘ๆ†’ๆ†“ๆ†•๏ฟฝๆ†–ๆ†—ๆ†˜ๆ†™ๆ†šๆ†›ๆ†œๆ†žๆ†Ÿๆ† ๆ†กๆ†ขๆ†ฃๆ†คๆ†ฅๆ†ฆๆ†ชๆ†ซๆ†ญๆ†ฎๆ†ฏๆ†ฐๆ†ฑๆ†ฒๆ†ณๆ†ดๆ†ตๆ†ถๆ†ธๆ†นๆ†บๆ†ปๆ†ผๆ†ฝๆ†ฟๆ‡€ๆ‡ๆ‡ƒๆ‡„ๆ‡…ๆ‡†ๆ‡‡ๆ‡‰ๆ‡Œๆ‡ๆ‡Žๆ‡ๆ‡ๆ‡“ๆ‡•ๆ‡–ๆ‡—ๆ‡˜ๆ‡™ๆ‡šๆ‡›ๆ‡œๆ‡ๆ‡žๆ‡Ÿๆ‡ ๆ‡กๆ‡ขๆ‡ฃๆ‡คๆ‡ฅๆ‡งๆ‡จๆ‡ฉๆ‡ชๆ‡ซๆ‡ฌๆ‡ญๆ‡ฎๆ‡ฏๆ‡ฐๆ‡ฑๆ‡ฒๆ‡ณๆ‡ดๆ‡ถๆ‡ทๆ‡ธๆ‡นๆ‡บๆ‡ปๆ‡ผๆ‡ฝๆ‡พๆˆ€ๆˆๆˆ‚ๆˆƒๆˆ„ๆˆ…ๆˆ‡ๆˆ‰ๆˆ“ๆˆ”ๆˆ™ๆˆœๆˆๆˆžๆˆ ๆˆฃๆˆฆๆˆงๆˆจๆˆฉๆˆซๆˆญๆˆฏๆˆฐๆˆฑๆˆฒๆˆตๆˆถๆˆธๆˆนๆˆบๆˆปๆˆผๆ‰‚ๆ‰„ๆ‰…ๆ‰†ๆ‰Š๏ฟฝ".split("");for(j=0;j!=D[145].length;++j)if(D[145][j].charCodeAt(0)!==65533){e[D[145][j]]=37120+j;d[37120+j]=D[145][j]}D[146]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ‰ๆ‰ๆ‰•ๆ‰–ๆ‰—ๆ‰™ๆ‰šๆ‰œๆ‰ๆ‰žๆ‰Ÿๆ‰ ๆ‰กๆ‰ขๆ‰คๆ‰ฅๆ‰จๆ‰ฑๆ‰ฒๆ‰ดๆ‰ตๆ‰ทๆ‰ธๆ‰บๆ‰ปๆ‰ฝๆŠๆŠ‚ๆŠƒๆŠ…ๆŠ†ๆŠ‡ๆŠˆๆŠ‹ๆŠŒๆŠๆŠŽๆŠๆŠๆŠ”ๆŠ™ๆŠœๆŠๆŠžๆŠฃๆŠฆๆŠงๆŠฉๆŠชๆŠญๆŠฎๆŠฏๆŠฐๆŠฒๆŠณๆŠดๆŠถๆŠทๆŠธๆŠบๆŠพๆ‹€ๆ‹๏ฟฝๆ‹ƒๆ‹‹ๆ‹ๆ‹‘ๆ‹•ๆ‹ๆ‹žๆ‹ ๆ‹กๆ‹คๆ‹ชๆ‹ซๆ‹ฐๆ‹ฒๆ‹ตๆ‹ธๆ‹นๆ‹บๆ‹ปๆŒ€ๆŒƒๆŒ„ๆŒ…ๆŒ†ๆŒŠๆŒ‹ๆŒŒๆŒๆŒๆŒๆŒ’ๆŒ“ๆŒ”ๆŒ•ๆŒ—ๆŒ˜ๆŒ™ๆŒœๆŒฆๆŒงๆŒฉๆŒฌๆŒญๆŒฎๆŒฐๆŒฑๆŒณๆŒดๆŒตๆŒถๆŒทๆŒธๆŒปๆŒผๆŒพๆŒฟๆ€ๆๆ„ๆ‡ๆˆๆŠๆ‘ๆ’ๆ“ๆ”ๆ–ๆ—ๆ˜ๆ™ๆšๆ›ๆœๆๆ ๆคๆฅๆฆๆจๆชๆซๆฌๆฏๆฐๆฒๆณๆดๆตๆธๆนๆผๆฝๆพๆฟๆŽๆŽƒๆŽ„ๆŽ…ๆŽ†ๆŽ‹ๆŽๆŽ‘ๆŽ“ๆŽ”ๆŽ•ๆŽ—ๆŽ™ๆŽšๆŽ›ๆŽœๆŽๆŽžๆŽŸๆŽกๆŽคๆŽฆๆŽซๆŽฏๆŽฑๆŽฒๆŽตๆŽถๆŽนๆŽปๆŽฝๆŽฟๆ€๏ฟฝ".split("");for(j=0;j!=D[146].length;++j)if(D[146][j].charCodeAt(0)!==65533){e[D[146][j]]=37376+j;d[37376+j]=D[146][j]}D[147]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆๆ‚ๆƒๆ…ๆ‡ๆˆๆŠๆ‹ๆŒๆ‘ๆ“ๆ”ๆ•ๆ—ๆ˜ๆ™ๆšๆ›ๆœๆๆŸๆขๆคๆฅๆฆๆงๆจๆซๆฌๆฎๆฏๆฐๆฑๆณๆตๆทๆนๆบๆปๆผๆพๆƒๆ„ๆ†ๆ‡ๆˆๆ‰ๆŠๆๆŽๆ‘ๆ’ๆ•ๆ–ๆ—ๆ˜ๆ™ๆšๆๆŸๆขๆฃๆค๏ฟฝๆฅๆงๆจๆฉๆซๆฎๆฏๆฐๆฑๆฒๆณๆตๆถๆทๆธๆนๆปๆผๆพๆ‘€ๆ‘‚ๆ‘ƒๆ‘‰ๆ‘‹ๆ‘Œๆ‘ๆ‘Žๆ‘ๆ‘ๆ‘‘ๆ‘“ๆ‘•ๆ‘–ๆ‘—ๆ‘™ๆ‘šๆ‘›ๆ‘œๆ‘ๆ‘Ÿๆ‘ ๆ‘กๆ‘ขๆ‘ฃๆ‘คๆ‘ฅๆ‘ฆๆ‘จๆ‘ชๆ‘ซๆ‘ฌๆ‘ฎๆ‘ฏๆ‘ฐๆ‘ฑๆ‘ฒๆ‘ณๆ‘ดๆ‘ตๆ‘ถๆ‘ทๆ‘ปๆ‘ผๆ‘ฝๆ‘พๆ‘ฟๆ’€ๆ’ๆ’ƒๆ’†ๆ’ˆๆ’‰ๆ’Šๆ’‹ๆ’Œๆ’ๆ’Žๆ’ๆ’ๆ’“ๆ’”ๆ’—ๆ’˜ๆ’šๆ’›ๆ’œๆ’ๆ’Ÿๆ’ ๆ’กๆ’ขๆ’ฃๆ’ฅๆ’ฆๆ’งๆ’จๆ’ชๆ’ซๆ’ฏๆ’ฑๆ’ฒๆ’ณๆ’ดๆ’ถๆ’นๆ’ปๆ’ฝๆ’พๆ’ฟๆ“ๆ“ƒๆ“„ๆ“†ๆ“‡ๆ“ˆๆ“‰ๆ“Šๆ“‹ๆ“Œๆ“ๆ“‘ๆ““ๆ“”ๆ“•ๆ“–ๆ“™ๆ“š๏ฟฝ".split("");for(j=0;j!=D[147].length;++j)if(D[147][j].charCodeAt(0)!==65533){e[D[147][j]]=37632+j;d[37632+j]=D[147][j]}D[148]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ“›ๆ“œๆ“ๆ“Ÿๆ“ ๆ“กๆ“ฃๆ“ฅๆ“งๆ“จๆ“ฉๆ“ชๆ“ซๆ“ฌๆ“ญๆ“ฎๆ“ฏๆ“ฐๆ“ฑๆ“ฒๆ“ณๆ“ดๆ“ตๆ“ถๆ“ทๆ“ธๆ“นๆ“บๆ“ปๆ“ผๆ“ฝๆ“พๆ“ฟๆ”ๆ”‚ๆ”ƒๆ”„ๆ”…ๆ”†ๆ”‡ๆ”ˆๆ”Šๆ”‹ๆ”Œๆ”ๆ”Žๆ”ๆ”ๆ”‘ๆ”“ๆ””ๆ”•ๆ”–ๆ”—ๆ”™ๆ”šๆ”›ๆ”œๆ”ๆ”žๆ”Ÿๆ” ๆ”ก๏ฟฝๆ”ขๆ”ฃๆ”คๆ”ฆๆ”งๆ”จๆ”ฉๆ”ชๆ”ฌๆ”ญๆ”ฐๆ”ฑๆ”ฒๆ”ณๆ”ทๆ”บๆ”ผๆ”ฝๆ•€ๆ•ๆ•‚ๆ•ƒๆ•„ๆ•†ๆ•‡ๆ•Šๆ•‹ๆ•ๆ•Žๆ•ๆ•’ๆ•“ๆ•”ๆ•—ๆ•˜ๆ•šๆ•œๆ•Ÿๆ• ๆ•กๆ•คๆ•ฅๆ•งๆ•จๆ•ฉๆ•ชๆ•ญๆ•ฎๆ•ฏๆ•ฑๆ•ณๆ•ตๆ•ถๆ•ธๆ•นๆ•บๆ•ปๆ•ผๆ•ฝๆ•พๆ•ฟๆ–€ๆ–ๆ–‚ๆ–ƒๆ–„ๆ–…ๆ–†ๆ–ˆๆ–‰ๆ–Šๆ–ๆ–Žๆ–ๆ–’ๆ–”ๆ–•ๆ––ๆ–˜ๆ–šๆ–ๆ–žๆ– ๆ–ขๆ–ฃๆ–ฆๆ–จๆ–ชๆ–ฌๆ–ฎๆ–ฑๆ–ฒๆ–ณๆ–ดๆ–ตๆ–ถๆ–ทๆ–ธๆ–บๆ–ปๆ–พๆ–ฟๆ—€ๆ—‚ๆ—‡ๆ—ˆๆ—‰ๆ—Šๆ—ๆ—ๆ—‘ๆ—“ๆ—”ๆ—•ๆ—˜ๆ—™ๆ—šๆ—›ๆ—œๆ—ๆ—žๆ—Ÿๆ—กๆ—ฃๆ—คๆ—ชๆ—ซ๏ฟฝ".split("");for(j=0;j!=D[148].length;++j)if(D[148][j].charCodeAt(0)!==65533){e[D[148][j]]=37888+j;d[37888+j]=D[148][j]}D[149]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ—ฒๆ—ณๆ—ดๆ—ตๆ—ธๆ—นๆ—ปๆ—ผๆ—ฝๆ—พๆ—ฟๆ˜ๆ˜„ๆ˜…ๆ˜‡ๆ˜ˆๆ˜‰ๆ˜‹ๆ˜ๆ˜ๆ˜‘ๆ˜’ๆ˜–ๆ˜—ๆ˜˜ๆ˜šๆ˜›ๆ˜œๆ˜žๆ˜กๆ˜ขๆ˜ฃๆ˜คๆ˜ฆๆ˜ฉๆ˜ชๆ˜ซๆ˜ฌๆ˜ฎๆ˜ฐๆ˜ฒๆ˜ณๆ˜ทๆ˜ธๆ˜นๆ˜บๆ˜ปๆ˜ฝๆ˜ฟๆ™€ๆ™‚ๆ™„ๆ™…ๆ™†ๆ™‡ๆ™ˆๆ™‰ๆ™Šๆ™ๆ™Žๆ™ๆ™‘ๆ™˜๏ฟฝๆ™™ๆ™›ๆ™œๆ™ๆ™žๆ™ ๆ™ขๆ™ฃๆ™ฅๆ™งๆ™ฉๆ™ชๆ™ซๆ™ฌๆ™ญๆ™ฑๆ™ฒๆ™ณๆ™ตๆ™ธๆ™นๆ™ปๆ™ผๆ™ฝๆ™ฟๆš€ๆšๆšƒๆš…ๆš†ๆšˆๆš‰ๆšŠๆš‹ๆšๆšŽๆšๆšๆš’ๆš“ๆš”ๆš•ๆš˜ๆš™ๆššๆš›ๆšœๆšžๆšŸๆš ๆšกๆšขๆšฃๆšคๆšฅๆšฆๆšฉๆšชๆšซๆšฌๆšญๆšฏๆšฐๆšฑๆšฒๆšณๆšตๆšถๆšทๆšธๆšบๆšปๆšผๆšฝๆšฟๆ›€ๆ›ๆ›‚ๆ›ƒๆ›„ๆ›…ๆ›†ๆ›‡ๆ›ˆๆ›‰ๆ›Šๆ›‹ๆ›Œๆ›ๆ›Žๆ›ๆ›ๆ›‘ๆ›’ๆ›“ๆ›”ๆ›•ๆ›–ๆ›—ๆ›˜ๆ›šๆ›žๆ›Ÿๆ› ๆ›กๆ›ขๆ›ฃๆ›คๆ›ฅๆ›งๆ›จๆ›ชๆ›ซๆ›ฌๆ›ญๆ›ฎๆ›ฏๆ›ฑๆ›ตๆ›ถๆ›ธๆ›บๆ›ปๆ›ฝๆœๆœ‚ๆœƒ๏ฟฝ".split("");for(j=0;j!=D[149].length;++j)if(D[149][j].charCodeAt(0)!==65533){e[D[149][j]]=38144+j;d[38144+j]=D[149][j]}D[150]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆœ„ๆœ…ๆœ†ๆœ‡ๆœŒๆœŽๆœๆœ‘ๆœ’ๆœ“ๆœ–ๆœ˜ๆœ™ๆœšๆœœๆœžๆœ ๆœกๆœขๆœฃๆœคๆœฅๆœงๆœฉๆœฎๆœฐๆœฒๆœณๆœถๆœทๆœธๆœนๆœปๆœผๆœพๆœฟๆๆ„ๆ…ๆ‡ๆŠๆ‹ๆๆ’ๆ”ๆ•ๆ—ๆ˜ๆ™ๆšๆ›ๆๆขๆฃๆคๆฆๆงๆซๆฌๆฎๆฑๆดๆถ๏ฟฝๆธๆนๆบๆปๆฝๆž€ๆž‚ๆžƒๆž…ๆž†ๆžˆๆžŠๆžŒๆžๆžŽๆžๆž‘ๆž’ๆž“ๆž”ๆž–ๆž™ๆž›ๆžŸๆž ๆžกๆžคๆžฆๆžฉๆžฌๆžฎๆžฑๆžฒๆžดๆžนๆžบๆžปๆžผๆžฝๆžพๆžฟๆŸ€ๆŸ‚ๆŸ…ๆŸ†ๆŸ‡ๆŸˆๆŸ‰ๆŸŠๆŸ‹ๆŸŒๆŸๆŸŽๆŸ•ๆŸ–ๆŸ—ๆŸ›ๆŸŸๆŸกๆŸฃๆŸคๆŸฆๆŸงๆŸจๆŸชๆŸซๆŸญๆŸฎๆŸฒๆŸตๆŸถๆŸทๆŸธๆŸนๆŸบๆŸปๆŸผๆŸพๆ ๆ ‚ๆ ƒๆ „ๆ †ๆ ๆ ๆ ’ๆ ”ๆ •ๆ ˜ๆ ™ๆ šๆ ›ๆ œๆ žๆ Ÿๆ  ๆ ขๆ ฃๆ คๆ ฅๆ ฆๆ งๆ จๆ ซๆ ฌๆ ญๆ ฎๆ ฏๆ ฐๆ ฑๆ ดๆ ตๆ ถๆ บๆ ปๆ ฟๆก‡ๆก‹ๆกๆกๆก’ๆก–ๆก—ๆก˜ๆก™ๆกšๆก›๏ฟฝ".split("");for(j=0;j!=D[150].length;++j)if(D[150][j].charCodeAt(0)!==65533){e[D[150][j]]=38400+j;d[38400+j]=D[150][j]}D[151]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆกœๆกๆกžๆกŸๆกชๆกฌๆกญๆกฎๆกฏๆกฐๆกฑๆกฒๆกณๆกตๆกธๆกนๆกบๆกปๆกผๆกฝๆกพๆกฟๆข€ๆข‚ๆข„ๆข‡ๆขˆๆข‰ๆขŠๆข‹ๆขŒๆขๆขŽๆขๆข‘ๆข’ๆข”ๆข•ๆข–ๆข˜ๆข™ๆขšๆข›ๆขœๆขๆขžๆขŸๆข ๆขกๆขฃๆขคๆขฅๆขฉๆขชๆขซๆขฌๆขฎๆขฑๆขฒๆขดๆขถๆขทๆขธ๏ฟฝๆขนๆขบๆขปๆขผๆขฝๆขพๆขฟๆฃๆฃƒๆฃ„ๆฃ…ๆฃ†ๆฃ‡ๆฃˆๆฃŠๆฃŒๆฃŽๆฃๆฃๆฃ‘ๆฃ“ๆฃ”ๆฃ–ๆฃ—ๆฃ™ๆฃ›ๆฃœๆฃๆฃžๆฃŸๆฃกๆฃขๆฃคๆฃฅๆฃฆๆฃงๆฃจๆฃฉๆฃชๆฃซๆฃฌๆฃญๆฃฏๆฃฒๆฃณๆฃดๆฃถๆฃทๆฃธๆฃปๆฃฝๆฃพๆฃฟๆค€ๆค‚ๆคƒๆค„ๆค†ๆค‡ๆคˆๆค‰ๆคŠๆคŒๆคๆค‘ๆค“ๆค”ๆค•ๆค–ๆค—ๆค˜ๆค™ๆคšๆค›ๆคœๆคๆคžๆคกๆคขๆคฃๆคฅๆคฆๆคงๆคจๆคฉๆคชๆคซๆคฌๆคฎๆคฏๆคฑๆคฒๆคณๆคตๆคถๆคทๆคธๆคบๆคปๆคผๆคพๆฅ€ๆฅๆฅƒๆฅ„ๆฅ…ๆฅ†ๆฅ‡ๆฅˆๆฅ‰ๆฅŠๆฅ‹ๆฅŒๆฅๆฅŽๆฅๆฅๆฅ‘ๆฅ’ๆฅ“ๆฅ•ๆฅ–ๆฅ˜ๆฅ™ๆฅ›ๆฅœๆฅŸ๏ฟฝ".split("");for(j=0;j!=D[151].length;++j)if(D[151][j].charCodeAt(0)!==65533){e[D[151][j]]=38656+j;d[38656+j]=D[151][j]}D[152]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฅกๆฅขๆฅคๆฅฅๆฅงๆฅจๆฅฉๆฅชๆฅฌๆฅญๆฅฏๆฅฐๆฅฒๆฅณๆฅดๆฅตๆฅถๆฅบๆฅปๆฅฝๆฅพๆฅฟๆฆๆฆƒๆฆ…ๆฆŠๆฆ‹ๆฆŒๆฆŽๆฆๆฆๆฆ‘ๆฆ’ๆฆ“ๆฆ–ๆฆ—ๆฆ™ๆฆšๆฆๆฆžๆฆŸๆฆ ๆฆกๆฆขๆฆฃๆฆคๆฆฅๆฆฆๆฆฉๆฆชๆฆฌๆฆฎๆฆฏๆฆฐๆฆฒๆฆณๆฆตๆฆถๆฆธๆฆนๆฆบๆฆผๆฆฝ๏ฟฝๆฆพๆฆฟๆง€ๆง‚ๆงƒๆง„ๆง…ๆง†ๆง‡ๆงˆๆง‰ๆง‹ๆงๆงๆง‘ๆง’ๆง“ๆง•ๆง–ๆง—ๆง˜ๆง™ๆงšๆงœๆงๆงžๆงกๆงขๆงฃๆงคๆงฅๆงฆๆงงๆงจๆงฉๆงชๆงซๆงฌๆงฎๆงฏๆงฐๆงฑๆงณๆงดๆงตๆงถๆงทๆงธๆงนๆงบๆงปๆงผๆงพๆจ€ๆจๆจ‚ๆจƒๆจ„ๆจ…ๆจ†ๆจ‡ๆจˆๆจ‰ๆจ‹ๆจŒๆจๆจŽๆจๆจๆจ‘ๆจ’ๆจ“ๆจ”ๆจ•ๆจ–ๆจ™ๆจšๆจ›ๆจœๆจๆจžๆจ ๆจขๆจฃๆจคๆจฅๆจฆๆจงๆจฉๆจซๆจฌๆจญๆจฎๆจฐๆจฒๆจณๆจดๆจถๆจทๆจธๆจนๆจบๆจปๆจผๆจฟๆฉ€ๆฉๆฉ‚ๆฉƒๆฉ…ๆฉ†ๆฉˆๆฉ‰ๆฉŠๆฉ‹ๆฉŒๆฉๆฉŽๆฉๆฉ‘ๆฉ’ๆฉ“ๆฉ”ๆฉ•ๆฉ–ๆฉ—ๆฉš๏ฟฝ".split("");for(j=0;j!=D[152].length;++j)if(D[152][j].charCodeAt(0)!==65533){e[D[152][j]]=38912+j;d[38912+j]=D[152][j]}D[153]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฉœๆฉๆฉžๆฉŸๆฉ ๆฉขๆฉฃๆฉคๆฉฆๆฉงๆฉจๆฉฉๆฉชๆฉซๆฉฌๆฉญๆฉฎๆฉฏๆฉฐๆฉฒๆฉณๆฉดๆฉตๆฉถๆฉทๆฉธๆฉบๆฉปๆฉฝๆฉพๆฉฟๆชๆช‚ๆชƒๆช…ๆช†ๆช‡ๆชˆๆช‰ๆชŠๆช‹ๆชŒๆชๆชๆช’ๆช“ๆช”ๆช•ๆช–ๆช˜ๆช™ๆชšๆช›ๆชœๆชๆชžๆชŸๆชกๆชขๆชฃๆชคๆชฅๆชฆ๏ฟฝๆชงๆชจๆชชๆชญๆชฎๆชฏๆชฐๆชฑๆชฒๆชณๆชดๆชตๆชถๆชทๆชธๆชนๆชบๆชปๆชผๆชฝๆชพๆชฟๆซ€ๆซๆซ‚ๆซƒๆซ„ๆซ…ๆซ†ๆซ‡ๆซˆๆซ‰ๆซŠๆซ‹ๆซŒๆซๆซŽๆซๆซๆซ‘ๆซ’ๆซ“ๆซ”ๆซ•ๆซ–ๆซ—ๆซ˜ๆซ™ๆซšๆซ›ๆซœๆซๆซžๆซŸๆซ ๆซกๆซขๆซฃๆซคๆซฅๆซฆๆซงๆซจๆซฉๆซชๆซซๆซฌๆซญๆซฎๆซฏๆซฐๆซฑๆซฒๆซณๆซดๆซตๆซถๆซทๆซธๆซนๆซบๆซปๆซผๆซฝๆซพๆซฟๆฌ€ๆฌๆฌ‚ๆฌƒๆฌ„ๆฌ…ๆฌ†ๆฌ‡ๆฌˆๆฌ‰ๆฌŠๆฌ‹ๆฌŒๆฌๆฌŽๆฌๆฌๆฌ‘ๆฌ’ๆฌ“ๆฌ”ๆฌ•ๆฌ–ๆฌ—ๆฌ˜ๆฌ™ๆฌšๆฌ›ๆฌœๆฌๆฌžๆฌŸๆฌฅๆฌฆๆฌจๆฌฉๆฌชๆฌซๆฌฌๆฌญๆฌฎ๏ฟฝ".split("");for(j=0;j!=D[153].length;++j)if(D[153][j].charCodeAt(0)!==65533){e[D[153][j]]=39168+j;d[39168+j]=D[153][j]}D[154]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฌฏๆฌฐๆฌฑๆฌณๆฌดๆฌตๆฌถๆฌธๆฌปๆฌผๆฌฝๆฌฟๆญ€ๆญๆญ‚ๆญ„ๆญ…ๆญˆๆญŠๆญ‹ๆญๆญŽๆญๆญๆญ‘ๆญ’ๆญ“ๆญ”ๆญ•ๆญ–ๆญ—ๆญ˜ๆญšๆญ›ๆญœๆญๆญžๆญŸๆญ ๆญกๆญจๆญฉๆญซๆญฌๆญญๆญฎๆญฏๆญฐๆญฑๆญฒๆญณๆญดๆญตๆญถๆญทๆญธๆญบๆญฝๆญพๆญฟๆฎ€ๆฎ…ๆฎˆ๏ฟฝๆฎŒๆฎŽๆฎๆฎๆฎ‘ๆฎ”ๆฎ•ๆฎ—ๆฎ˜ๆฎ™ๆฎœๆฎๆฎžๆฎŸๆฎ ๆฎขๆฎฃๆฎคๆฎฅๆฎฆๆฎงๆฎจๆฎฉๆฎซๆฎฌๆฎญๆฎฎๆฎฏๆฎฐๆฎฑๆฎฒๆฎถๆฎธๆฎนๆฎบๆฎปๆฎผๆฎฝๆฎพๆฏ€ๆฏƒๆฏ„ๆฏ†ๆฏ‡ๆฏˆๆฏ‰ๆฏŠๆฏŒๆฏŽๆฏๆฏ‘ๆฏ˜ๆฏšๆฏœๆฏๆฏžๆฏŸๆฏ ๆฏขๆฏฃๆฏคๆฏฅๆฏฆๆฏงๆฏจๆฏฉๆฏฌๆฏญๆฏฎๆฏฐๆฏฑๆฏฒๆฏดๆฏถๆฏทๆฏธๆฏบๆฏปๆฏผๆฏพๆฏฟๆฐ€ๆฐๆฐ‚ๆฐƒๆฐ„ๆฐˆๆฐ‰ๆฐŠๆฐ‹ๆฐŒๆฐŽๆฐ’ๆฐ—ๆฐœๆฐๆฐžๆฐ ๆฐฃๆฐฅๆฐซๆฐฌๆฐญๆฐฑๆฐณๆฐถๆฐทๆฐนๆฐบๆฐปๆฐผๆฐพๆฐฟๆฑƒๆฑ„ๆฑ…ๆฑˆๆฑ‹ๆฑŒๆฑๆฑŽๆฑๆฑ‘ๆฑ’ๆฑ“ๆฑ–ๆฑ˜๏ฟฝ".split("");for(j=0;j!=D[154].length;++j)if(D[154][j].charCodeAt(0)!==65533){e[D[154][j]]=39424+j;d[39424+j]=D[154][j]}D[155]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฑ™ๆฑšๆฑขๆฑฃๆฑฅๆฑฆๆฑงๆฑซๆฑฌๆฑญๆฑฎๆฑฏๆฑฑๆฑณๆฑตๆฑทๆฑธๆฑบๆฑปๆฑผๆฑฟๆฒ€ๆฒ„ๆฒ‡ๆฒŠๆฒ‹ๆฒๆฒŽๆฒ‘ๆฒ’ๆฒ•ๆฒ–ๆฒ—ๆฒ˜ๆฒšๆฒœๆฒๆฒžๆฒ ๆฒขๆฒจๆฒฌๆฒฏๆฒฐๆฒดๆฒตๆฒถๆฒทๆฒบๆณ€ๆณๆณ‚ๆณƒๆณ†ๆณ‡ๆณˆๆณ‹ๆณๆณŽๆณๆณ‘ๆณ’ๆณ˜๏ฟฝๆณ™ๆณšๆณœๆณๆณŸๆณคๆณฆๆณงๆณฉๆณฌๆณญๆณฒๆณดๆณนๆณฟๆด€ๆด‚ๆดƒๆด…ๆด†ๆดˆๆด‰ๆดŠๆดๆดๆดๆด‘ๆด“ๆด”ๆด•ๆด–ๆด˜ๆดœๆดๆดŸๆด ๆดกๆดขๆดฃๆดคๆดฆๆดจๆดฉๆดฌๆดญๆดฏๆดฐๆดดๆดถๆดทๆดธๆดบๆดฟๆต€ๆต‚ๆต„ๆต‰ๆตŒๆตๆต•ๆต–ๆต—ๆต˜ๆต›ๆตๆตŸๆตกๆตขๆตคๆตฅๆตงๆตจๆตซๆตฌๆตญๆตฐๆตฑๆตฒๆตณๆตตๆตถๆตนๆตบๆตปๆตฝๆตพๆตฟๆถ€ๆถๆถƒๆถ„ๆถ†ๆถ‡ๆถŠๆถ‹ๆถๆถๆถๆถ’ๆถ–ๆถ—ๆถ˜ๆถ™ๆถšๆถœๆถขๆถฅๆถฌๆถญๆถฐๆถฑๆถณๆถดๆถถๆถทๆถนๆถบๆถปๆถผๆถฝๆถพๆทๆท‚ๆทƒๆทˆๆท‰ๆทŠ๏ฟฝ".split("");for(j=0;j!=D[155].length;++j)if(D[155][j].charCodeAt(0)!==65533){e[D[155][j]]=39680+j;d[39680+j]=D[155][j]}D[156]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆทๆทŽๆทๆทๆท’ๆท“ๆท”ๆท•ๆท—ๆทšๆท›ๆทœๆทŸๆทขๆทฃๆทฅๆทงๆทจๆทฉๆทชๆทญๆทฏๆทฐๆทฒๆทดๆทตๆทถๆทธๆทบๆทฝๆทพๆทฟๆธ€ๆธๆธ‚ๆธƒๆธ„ๆธ†ๆธ‡ๆธˆๆธ‰ๆธ‹ๆธๆธ’ๆธ“ๆธ•ๆธ˜ๆธ™ๆธ›ๆธœๆธžๆธŸๆธขๆธฆๆธงๆธจๆธชๆธฌๆธฎๆธฐๆธฑๆธณๆธต๏ฟฝๆธถๆธทๆธนๆธปๆธผๆธฝๆธพๆธฟๆน€ๆนๆน‚ๆน…ๆน†ๆน‡ๆนˆๆน‰ๆนŠๆน‹ๆนŒๆนๆนๆน‘ๆน’ๆน•ๆน—ๆน™ๆนšๆนœๆนๆนžๆน ๆนกๆนขๆนฃๆนคๆนฅๆนฆๆนงๆนจๆนฉๆนชๆนฌๆนญๆนฏๆนฐๆนฑๆนฒๆนณๆนดๆนตๆนถๆนทๆนธๆนนๆนบๆนปๆนผๆนฝๆบ€ๆบๆบ‚ๆบ„ๆบ‡ๆบˆๆบŠๆบ‹ๆบŒๆบๆบŽๆบ‘ๆบ’ๆบ“ๆบ”ๆบ•ๆบ–ๆบ—ๆบ™ๆบšๆบ›ๆบๆบžๆบ ๆบกๆบฃๆบคๆบฆๆบจๆบฉๆบซๆบฌๆบญๆบฎๆบฐๆบณๆบตๆบธๆบนๆบผๆบพๆบฟๆป€ๆปƒๆป„ๆป…ๆป†ๆปˆๆป‰ๆปŠๆปŒๆปๆปŽๆปๆป’ๆป–ๆป˜ๆป™ๆป›ๆปœๆปๆปฃๆปงๆปชๆปซๆปฌๆปญๆปฎๆปฏ๏ฟฝ".split("");for(j=0;j!=D[156].length;++j)if(D[156][j].charCodeAt(0)!==65533){e[D[156][j]]=39936+j;d[39936+j]=D[156][j]}D[157]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆปฐๆปฑๆปฒๆปณๆปตๆปถๆปทๆปธๆปบๆปปๆปผๆปฝๆปพๆปฟๆผ€ๆผๆผƒๆผ„ๆผ…ๆผ‡ๆผˆๆผŠๆผ‹ๆผŒๆผๆผŽๆผๆผ‘ๆผ’ๆผ–ๆผ—ๆผ˜ๆผ™ๆผšๆผ›ๆผœๆผๆผžๆผŸๆผกๆผขๆผฃๆผฅๆผฆๆผงๆผจๆผฌๆผฎๆผฐๆผฒๆผดๆผตๆผทๆผธๆผนๆผบๆผปๆผผๆผฝๆผฟๆฝ€ๆฝๆฝ‚๏ฟฝๆฝƒๆฝ„ๆฝ…ๆฝˆๆฝ‰ๆฝŠๆฝŒๆฝŽๆฝๆฝๆฝ‘ๆฝ’ๆฝ“ๆฝ”ๆฝ•ๆฝ–ๆฝ—ๆฝ™ๆฝšๆฝ›ๆฝๆฝŸๆฝ ๆฝกๆฝฃๆฝคๆฝฅๆฝงๆฝจๆฝฉๆฝชๆฝซๆฝฌๆฝฏๆฝฐๆฝฑๆฝณๆฝตๆฝถๆฝทๆฝนๆฝปๆฝฝๆฝพๆฝฟๆพ€ๆพๆพ‚ๆพƒๆพ…ๆพ†ๆพ‡ๆพŠๆพ‹ๆพๆพๆพ‘ๆพ’ๆพ“ๆพ”ๆพ•ๆพ–ๆพ—ๆพ˜ๆพ™ๆพšๆพ›ๆพๆพžๆพŸๆพ ๆพขๆพฃๆพคๆพฅๆพฆๆพจๆพฉๆพชๆพซๆพฌๆพญๆพฎๆพฏๆพฐๆพฑๆพฒๆพดๆพตๆพทๆพธๆพบๆพปๆพผๆพฝๆพพๆพฟๆฟๆฟƒๆฟ„ๆฟ…ๆฟ†ๆฟ‡ๆฟˆๆฟŠๆฟ‹ๆฟŒๆฟๆฟŽๆฟๆฟๆฟ“ๆฟ”ๆฟ•ๆฟ–ๆฟ—ๆฟ˜ๆฟ™ๆฟšๆฟ›ๆฟœๆฟๆฟŸๆฟขๆฟฃๆฟคๆฟฅ๏ฟฝ".split("");for(j=0;j!=D[157].length;++j)if(D[157][j].charCodeAt(0)!==65533){e[D[157][j]]=40192+j;d[40192+j]=D[157][j]}D[158]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฟฆๆฟงๆฟจๆฟฉๆฟชๆฟซๆฟฌๆฟญๆฟฐๆฟฑๆฟฒๆฟณๆฟดๆฟตๆฟถๆฟทๆฟธๆฟนๆฟบๆฟปๆฟผๆฟฝๆฟพๆฟฟ็€€็€็€‚็€ƒ็€„็€…็€†็€‡็€ˆ็€‰็€Š็€‹็€Œ็€็€Ž็€็€็€’็€“็€”็€•็€–็€—็€˜็€™็€œ็€็€ž็€Ÿ็€ ็€ก็€ข็€ค็€ฅ็€ฆ็€ง็€จ็€ฉ็€ช๏ฟฝ็€ซ็€ฌ็€ญ็€ฎ็€ฏ็€ฐ็€ฑ็€ฒ็€ณ็€ด็€ถ็€ท็€ธ็€บ็€ป็€ผ็€ฝ็€พ็€ฟ็€็็‚็ƒ็„็…็†็‡็ˆ็‰็Š็‹็็Ž็็‘็’็“็”็•็–็—็˜็™็š็›็œ็็Ÿ็ ็ก็ข็ฃ็ค็ฅ็ฆ็ง็จ็ฉ็ช็ฎ็ฑ็ฒ็ณ็ด็ท็น็บ็ป็ฝ็‚็‚‚็‚ƒ็‚„็‚†็‚‡็‚ˆ็‚‹็‚Œ็‚็‚็‚็‚‘็‚“็‚—็‚˜็‚š็‚›็‚ž็‚Ÿ็‚ ็‚ก็‚ข็‚ฃ็‚ค็‚ฅ็‚ฆ็‚ง็‚จ็‚ฉ็‚ช็‚ฐ็‚ฒ็‚ด็‚ต็‚ถ็‚บ็‚พ็‚ฟ็ƒ„็ƒ…็ƒ†็ƒ‡็ƒ‰็ƒ‹็ƒŒ็ƒ็ƒŽ็ƒ็ƒ็ƒ‘็ƒ’็ƒ“็ƒ”็ƒ•็ƒ–็ƒ—็ƒš๏ฟฝ".split("");for(j=0;j!=D[158].length;++j)if(D[158][j].charCodeAt(0)!==65533){e[D[158][j]]=40448+j;d[40448+j]=D[158][j]}D[159]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ƒœ็ƒ็ƒž็ƒ ็ƒก็ƒข็ƒฃ็ƒฅ็ƒช็ƒฎ็ƒฐ็ƒฑ็ƒฒ็ƒณ็ƒด็ƒต็ƒถ็ƒธ็ƒบ็ƒป็ƒผ็ƒพ็ƒฟ็„€็„็„‚็„ƒ็„„็„…็„†็„‡็„ˆ็„‹็„Œ็„็„Ž็„็„‘็„’็„”็„—็„›็„œ็„็„ž็„Ÿ็„ ็„ก็„ข็„ฃ็„ค็„ฅ็„ง็„จ็„ฉ็„ช็„ซ็„ฌ็„ญ็„ฎ็„ฒ็„ณ็„ด๏ฟฝ็„ต็„ท็„ธ็„น็„บ็„ป็„ผ็„ฝ็„พ็„ฟ็…€็…็…‚็…ƒ็…„็…†็…‡็…ˆ็…‰็…‹็…็…็…็…‘็…’็…“็…”็…•็…–็…—็…˜็…™็…š็…›็…็…Ÿ็… ็…ก็…ข็…ฃ็…ฅ็…ฉ็…ช็…ซ็…ฌ็…ญ็…ฏ็…ฐ็…ฑ็…ด็…ต็…ถ็…ท็…น็…ป็…ผ็…พ็…ฟ็†€็†็†‚็†ƒ็†…็††็†‡็†ˆ็†‰็†‹็†Œ็†็†Ž็†็†‘็†’็†“็†•็†–็†—็†š็†›็†œ็†็†ž็†ก็†ข็†ฃ็†ค็†ฅ็†ฆ็†ง็†ฉ็†ช็†ซ็†ญ็†ฎ็†ฏ็†ฐ็†ฑ็†ฒ็†ด็†ถ็†ท็†ธ็†บ็†ป็†ผ็†ฝ็†พ็†ฟ็‡€็‡็‡‚็‡„็‡…็‡†็‡‡็‡ˆ็‡‰็‡Š็‡‹็‡Œ็‡็‡็‡็‡‘็‡’็‡“๏ฟฝ".split("");for(j=0;j!=D[159].length;++j)if(D[159][j].charCodeAt(0)!==65533){e[D[159][j]]=40704+j;d[40704+j]=D[159][j]}D[160]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็‡–็‡—็‡˜็‡™็‡š็‡›็‡œ็‡็‡ž็‡Ÿ็‡ก็‡ข็‡ฃ็‡ค็‡ฆ็‡จ็‡ฉ็‡ช็‡ซ็‡ฌ็‡ญ็‡ฏ็‡ฐ็‡ฑ็‡ฒ็‡ณ็‡ด็‡ต็‡ถ็‡ท็‡ธ็‡บ็‡ป็‡ผ็‡ฝ็‡พ็‡ฟ็ˆ€็ˆ็ˆ‚็ˆƒ็ˆ„็ˆ…็ˆ‡็ˆˆ็ˆ‰็ˆŠ็ˆ‹็ˆŒ็ˆ็ˆŽ็ˆ็ˆ็ˆ‘็ˆ’็ˆ“็ˆ”็ˆ•็ˆ–็ˆ—็ˆ˜็ˆ™็ˆš๏ฟฝ็ˆ›็ˆœ็ˆž็ˆŸ็ˆ ็ˆก็ˆข็ˆฃ็ˆค็ˆฅ็ˆฆ็ˆง็ˆฉ็ˆซ็ˆญ็ˆฎ็ˆฏ็ˆฒ็ˆณ็ˆด็ˆบ็ˆผ็ˆพ็‰€็‰็‰‚็‰ƒ็‰„็‰…็‰†็‰‰็‰Š็‰‹็‰Ž็‰็‰็‰‘็‰“็‰”็‰•็‰—็‰˜็‰š็‰œ็‰ž็‰ ็‰ฃ็‰ค็‰ฅ็‰จ็‰ช็‰ซ็‰ฌ็‰ญ็‰ฐ็‰ฑ็‰ณ็‰ด็‰ถ็‰ท็‰ธ็‰ป็‰ผ็‰ฝ็Š‚็Šƒ็Š…็Š†็Š‡็Šˆ็Š‰็ŠŒ็ŠŽ็Š็Š‘็Š“็Š”็Š•็Š–็Š—็Š˜็Š™็Šš็Š›็Šœ็Š็Šž็Š ็Šก็Šข็Šฃ็Šค็Šฅ็Šฆ็Šง็Šจ็Šฉ็Šช็Šซ็Šฎ็Šฑ็Šฒ็Šณ็Šต็Šบ็Šป็Šผ็Šฝ็Šพ็Šฟ็‹€็‹…็‹†็‹‡็‹‰็‹Š็‹‹็‹Œ็‹็‹‘็‹“็‹”็‹•็‹–็‹˜็‹š็‹›๏ฟฝ".split("");for(j=0;j!=D[160].length;++j)if(D[160][j].charCodeAt(0)!==65533){e[D[160][j]]=40960+j;d[40960+j]=D[160][j]}D[161]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ€€ใ€ใ€‚ยทห‰ห‡ยจใ€ƒใ€…โ€”๏ฝžโ€–โ€ฆโ€˜โ€™โ€œโ€ใ€”ใ€•ใ€ˆใ€‰ใ€Šใ€‹ใ€Œใ€ใ€Žใ€ใ€–ใ€—ใ€ใ€‘ยฑร—รทโˆถโˆงโˆจโˆ‘โˆโˆชโˆฉโˆˆโˆทโˆšโŠฅโˆฅโˆ โŒ’โŠ™โˆซโˆฎโ‰กโ‰Œโ‰ˆโˆฝโˆโ‰ โ‰ฎโ‰ฏโ‰คโ‰ฅโˆžโˆตโˆดโ™‚โ™€ยฐโ€ฒโ€ณโ„ƒ๏ผ„ยค๏ฟ ๏ฟกโ€ฐยงโ„–โ˜†โ˜…โ—‹โ—โ—Žโ—‡โ—†โ–กโ– โ–ณโ–ฒโ€ปโ†’โ†โ†‘โ†“ใ€“๏ฟฝ".split("");for(j=0;j!=D[161].length;++j)if(D[161][j].charCodeAt(0)!==65533){e[D[161][j]]=41216+j;d[41216+j]=D[161][j]}D[162]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ…ฐโ…ฑโ…ฒโ…ณโ…ดโ…ตโ…ถโ…ทโ…ธโ…น๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ’ˆโ’‰โ’Šโ’‹โ’Œโ’โ’Žโ’โ’โ’‘โ’’โ’“โ’”โ’•โ’–โ’—โ’˜โ’™โ’šโ’›โ‘ดโ‘ตโ‘ถโ‘ทโ‘ธโ‘นโ‘บโ‘ปโ‘ผโ‘ฝโ‘พโ‘ฟโ’€โ’โ’‚โ’ƒโ’„โ’…โ’†โ’‡โ‘ โ‘กโ‘ขโ‘ฃโ‘คโ‘ฅโ‘ฆโ‘งโ‘จโ‘ฉ๏ฟฝ๏ฟฝใˆ ใˆกใˆขใˆฃใˆคใˆฅใˆฆใˆงใˆจใˆฉ๏ฟฝ๏ฟฝโ… โ…กโ…ขโ…ฃโ…คโ…ฅโ…ฆโ…งโ…จโ…ฉโ…ชโ…ซ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[162].length;++j)if(D[162][j].charCodeAt(0)!==65533){e[D[162][j]]=41472+j;d[41472+j]=D[162][j]}D[163]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ผ๏ผ‚๏ผƒ๏ฟฅ๏ผ…๏ผ†๏ผ‡๏ผˆ๏ผ‰๏ผŠ๏ผ‹๏ผŒ๏ผ๏ผŽ๏ผ๏ผ๏ผ‘๏ผ’๏ผ“๏ผ”๏ผ•๏ผ–๏ผ—๏ผ˜๏ผ™๏ผš๏ผ›๏ผœ๏ผ๏ผž๏ผŸ๏ผ ๏ผก๏ผข๏ผฃ๏ผค๏ผฅ๏ผฆ๏ผง๏ผจ๏ผฉ๏ผช๏ผซ๏ผฌ๏ผญ๏ผฎ๏ผฏ๏ผฐ๏ผฑ๏ผฒ๏ผณ๏ผด๏ผต๏ผถ๏ผท๏ผธ๏ผน๏ผบ๏ผป๏ผผ๏ผฝ๏ผพ๏ผฟ๏ฝ€๏ฝ๏ฝ‚๏ฝƒ๏ฝ„๏ฝ…๏ฝ†๏ฝ‡๏ฝˆ๏ฝ‰๏ฝŠ๏ฝ‹๏ฝŒ๏ฝ๏ฝŽ๏ฝ๏ฝ๏ฝ‘๏ฝ’๏ฝ“๏ฝ”๏ฝ•๏ฝ–๏ฝ—๏ฝ˜๏ฝ™๏ฝš๏ฝ›๏ฝœ๏ฝ๏ฟฃ๏ฟฝ".split("");for(j=0;j!=D[163].length;++j)if(D[163][j].charCodeAt(0)!==65533){e[D[163][j]]=41728+j;d[41728+j]=D[163][j]}D[164]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใใ‚ใƒใ„ใ…ใ†ใ‡ใˆใ‰ใŠใ‹ใŒใใŽใใใ‘ใ’ใ“ใ”ใ•ใ–ใ—ใ˜ใ™ใšใ›ใœใใžใŸใ ใกใขใฃใคใฅใฆใงใจใฉใชใซใฌใญใฎใฏใฐใฑใฒใณใดใตใถใทใธในใบใปใผใฝใพใฟใ‚€ใ‚ใ‚‚ใ‚ƒใ‚„ใ‚…ใ‚†ใ‚‡ใ‚ˆใ‚‰ใ‚Šใ‚‹ใ‚Œใ‚ใ‚Žใ‚ใ‚ใ‚‘ใ‚’ใ‚“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[164].length;++j)if(D[164][j].charCodeAt(0)!==65533){e[D[164][j]]=41984+j;d[41984+j]=D[164][j]}D[165]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ‚กใ‚ขใ‚ฃใ‚คใ‚ฅใ‚ฆใ‚งใ‚จใ‚ฉใ‚ชใ‚ซใ‚ฌใ‚ญใ‚ฎใ‚ฏใ‚ฐใ‚ฑใ‚ฒใ‚ณใ‚ดใ‚ตใ‚ถใ‚ทใ‚ธใ‚นใ‚บใ‚ปใ‚ผใ‚ฝใ‚พใ‚ฟใƒ€ใƒใƒ‚ใƒƒใƒ„ใƒ…ใƒ†ใƒ‡ใƒˆใƒ‰ใƒŠใƒ‹ใƒŒใƒใƒŽใƒใƒใƒ‘ใƒ’ใƒ“ใƒ”ใƒ•ใƒ–ใƒ—ใƒ˜ใƒ™ใƒšใƒ›ใƒœใƒใƒžใƒŸใƒ ใƒกใƒขใƒฃใƒคใƒฅใƒฆใƒงใƒจใƒฉใƒชใƒซใƒฌใƒญใƒฎใƒฏใƒฐใƒฑใƒฒใƒณใƒดใƒตใƒถ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[165].length;++j)if(D[165][j].charCodeAt(0)!==65533){e[D[165][j]]=42240+j;d[42240+j]=D[165][j]}D[166]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮกฮฃฮคฮฅฮฆฮงฮจฮฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯƒฯ„ฯ…ฯ†ฯ‡ฯˆฯ‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ธต๏ธถ๏ธน๏ธบ๏ธฟ๏น€๏ธฝ๏ธพ๏น๏น‚๏นƒ๏น„๏ฟฝ๏ฟฝ๏ธป๏ธผ๏ธท๏ธธ๏ธฑ๏ฟฝ๏ธณ๏ธด๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[166].length;++j)if(D[166][j].charCodeAt(0)!==65533){e[D[166][j]]=42496+j;d[42496+j]=D[166][j]}D[167]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝะะ‘ะ’ะ“ะ”ะ•ะะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝะฐะฑะฒะณะดะตั‘ะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽั๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[167].length;++j)if(D[167][j].charCodeAt(0)!==65533){e[D[167][j]]=42752+j;d[42752+j]=D[167][j]}D[168]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝหŠห‹ห™โ€“โ€•โ€ฅโ€ตโ„…โ„‰โ†–โ†—โ†˜โ†™โˆ•โˆŸโˆฃโ‰’โ‰ฆโ‰งโŠฟโ•โ•‘โ•’โ•“โ•”โ••โ•–โ•—โ•˜โ•™โ•šโ•›โ•œโ•โ•žโ•Ÿโ• โ•กโ•ขโ•ฃโ•คโ•ฅโ•ฆโ•งโ•จโ•ฉโ•ชโ•ซโ•ฌโ•ญโ•ฎโ•ฏโ•ฐโ•ฑโ•ฒโ•ณโ–โ–‚โ–ƒโ–„โ–…โ–†โ–‡๏ฟฝโ–ˆโ–‰โ–Šโ–‹โ–Œโ–โ–Žโ–โ–“โ–”โ–•โ–ผโ–ฝโ—ขโ—ฃโ—คโ—ฅโ˜‰โŠ•ใ€’ใ€ใ€ž๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฤรกวŽร ฤ“รฉฤ›รจฤซรญวรฌลรณว’รฒลซรบว”รนว–ว˜วšวœรผรชษ‘๏ฟฝล„ลˆ๏ฟฝษก๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ„…ใ„†ใ„‡ใ„ˆใ„‰ใ„Šใ„‹ใ„Œใ„ใ„Žใ„ใ„ใ„‘ใ„’ใ„“ใ„”ใ„•ใ„–ใ„—ใ„˜ใ„™ใ„šใ„›ใ„œใ„ใ„žใ„Ÿใ„ ใ„กใ„ขใ„ฃใ„คใ„ฅใ„ฆใ„งใ„จใ„ฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[168].length;++j)if(D[168][j].charCodeAt(0)!==65533){e[D[168][j]]=43008+j;d[43008+j]=D[168][j]}D[169]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ€กใ€ขใ€ฃใ€คใ€ฅใ€ฆใ€งใ€จใ€ฉใŠฃใŽŽใŽใŽœใŽใŽžใŽกใ„ใŽใ‘ใ’ใ•๏ธฐ๏ฟข๏ฟค๏ฟฝโ„กใˆฑ๏ฟฝโ€๏ฟฝ๏ฟฝ๏ฟฝใƒผใ‚›ใ‚œใƒฝใƒพใ€†ใ‚ใ‚ž๏น‰๏นŠ๏น‹๏นŒ๏น๏นŽ๏น๏น๏น‘๏น’๏น”๏น•๏น–๏น—๏น™๏นš๏น›๏นœ๏น๏นž๏นŸ๏น ๏นก๏ฟฝ๏นข๏นฃ๏นค๏นฅ๏นฆ๏นจ๏นฉ๏นช๏นซ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ€‡๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ”€โ”โ”‚โ”ƒโ”„โ”…โ”†โ”‡โ”ˆโ”‰โ”Šโ”‹โ”Œโ”โ”Žโ”โ”โ”‘โ”’โ”“โ””โ”•โ”–โ”—โ”˜โ”™โ”šโ”›โ”œโ”โ”žโ”Ÿโ” โ”กโ”ขโ”ฃโ”คโ”ฅโ”ฆโ”งโ”จโ”ฉโ”ชโ”ซโ”ฌโ”ญโ”ฎโ”ฏโ”ฐโ”ฑโ”ฒโ”ณโ”ดโ”ตโ”ถโ”ทโ”ธโ”นโ”บโ”ปโ”ผโ”ฝโ”พโ”ฟโ•€โ•โ•‚โ•ƒโ•„โ•…โ•†โ•‡โ•ˆโ•‰โ•Šโ•‹๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[169].length;++j)if(D[169][j].charCodeAt(0)!==65533){e[D[169][j]]=43264+j;d[43264+j]=D[169][j]}D[170]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็‹œ็‹็‹Ÿ็‹ข็‹ฃ็‹ค็‹ฅ็‹ฆ็‹ง็‹ช็‹ซ็‹ต็‹ถ็‹น็‹ฝ็‹พ็‹ฟ็Œ€็Œ‚็Œ„็Œ…็Œ†็Œ‡็Œˆ็Œ‰็Œ‹็ŒŒ็Œ็Œ็Œ็Œ‘็Œ’็Œ”็Œ˜็Œ™็Œš็ŒŸ็Œ ็Œฃ็Œค็Œฆ็Œง็Œจ็Œญ็Œฏ็Œฐ็Œฒ็Œณ็Œต็Œถ็Œบ็Œป็Œผ็Œฝ็€็็‚็ƒ็„็…็†็‡็ˆ๏ฟฝ็‰็Š็‹็Œ็Ž็็‘็“็”็•็–็˜็™็š็›็œ็็ž็Ÿ็ก็ข็ฃ็ค็ฅ็ฆ็ง็จ็ฉ็ช็ซ็ฎ็ฐ็ฑ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[170].length;++j)if(D[170][j].charCodeAt(0)!==65533){e[D[170][j]]=43520+j;d[43520+j]=D[170][j]}D[171]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฒ็ณ็ด็ต็ถ็ท็ธ็น็บ็ป็ผ็ฝ็ฟ็Ž€็Ž็Ž‚็Žƒ็Ž…็Ž†็Žˆ็ŽŠ็ŽŒ็Ž็Ž็Ž็Ž’็Ž“็Ž”็Ž•็Ž—็Ž˜็Ž™็Žš็Žœ็Ž็Žž็Ž ็Žก็Žฃ็Žค็Žฅ็Žฆ็Žง็Žจ็Žช็Žฌ็Žญ็Žฑ็Žด็Žต็Žถ็Žธ็Žน็Žผ็Žฝ็Žพ็Žฟ็็ƒ็„็…็†็‡๏ฟฝ็‹็Œ็Ž็’็“็”็•็–็—็˜็š็›็œ็็Ÿ็ก็ข็ฃ็ค็ฆ็จ็ช็ซ็ฌ็ฎ็ฏ็ฐ็ฑ็ณ็ด็ต็ถ็ท๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[171].length;++j)if(D[171][j].charCodeAt(0)!==65533){e[D[171][j]]=43776+j;d[43776+j]=D[171][j]}D[172]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ธ็น็บ็ป็ผ็ฝ็พ็ฟ็€็็‚็„็‡็ˆ็‹็Œ็็Ž็‘็’็“็”็•็–็—็˜็™็œ็็ž็Ÿ็ ็ก็ฃ็ค็ง็ฉ็ซ็ญ็ฏ็ฑ็ฒ็ท็ธ็น็บ็ป็ฝ็พ็ฟ็‘€็‘‚็‘ƒ็‘„็‘…็‘†็‘‡็‘ˆ็‘‰็‘Š็‘‹็‘Œ็‘๏ฟฝ็‘Ž็‘็‘็‘‘็‘’็‘“็‘”็‘–็‘˜็‘็‘ ็‘ก็‘ข็‘ฃ็‘ค็‘ฅ็‘ฆ็‘ง็‘จ็‘ฉ็‘ช็‘ซ็‘ฌ็‘ฎ็‘ฏ็‘ฑ็‘ฒ็‘ณ็‘ด็‘ต็‘ธ็‘น็‘บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[172].length;++j)if(D[172][j].charCodeAt(0)!==65533){e[D[172][j]]=44032+j;d[44032+j]=D[172][j]}D[173]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็‘ป็‘ผ็‘ฝ็‘ฟ็’‚็’„็’…็’†็’ˆ็’‰็’Š็’Œ็’็’็’‘็’’็’“็’”็’•็’–็’—็’˜็’™็’š็’›็’็’Ÿ็’ ็’ก็’ข็’ฃ็’ค็’ฅ็’ฆ็’ช็’ซ็’ฌ็’ญ็’ฎ็’ฏ็’ฐ็’ฑ็’ฒ็’ณ็’ด็’ต็’ถ็’ท็’ธ็’น็’ป็’ผ็’ฝ็’พ็’ฟ็“€็“็“‚็“ƒ็“„็“…็“†็“‡๏ฟฝ็“ˆ็“‰็“Š็“‹็“Œ็“็“Ž็“็“็“‘็““็“”็“•็“–็“—็“˜็“™็“š็“›็“็“Ÿ็“ก็“ฅ็“ง็“จ็“ฉ็“ช็“ซ็“ฌ็“ญ็“ฐ็“ฑ็“ฒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[173].length;++j)if(D[173][j].charCodeAt(0)!==65533){e[D[173][j]]=44288+j;d[44288+j]=D[173][j]}D[174]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็“ณ็“ต็“ธ็“น็“บ็“ป็“ผ็“ฝ็“พ็”€็”็”‚็”ƒ็”…็”†็”‡็”ˆ็”‰็”Š็”‹็”Œ็”Ž็”็”’็””็”•็”–็”—็”›็”็”ž็” ็”ก็”ข็”ฃ็”ค็”ฆ็”ง็”ช็”ฎ็”ด็”ถ็”น็”ผ็”ฝ็”ฟ็•็•‚็•ƒ็•„็•†็•‡็•‰็•Š็•็•็•‘็•’็•“็••็•–็•—็•˜๏ฟฝ็•็•ž็•Ÿ็• ็•ก็•ข็•ฃ็•ค็•ง็•จ็•ฉ็•ซ็•ฌ็•ญ็•ฎ็•ฏ็•ฐ็•ฑ็•ณ็•ต็•ถ็•ท็•บ็•ป็•ผ็•ฝ็•พ็–€็–็–‚็–„็–…็–‡๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[174].length;++j)if(D[174][j].charCodeAt(0)!==65533){e[D[174][j]]=44544+j;d[44544+j]=D[174][j]}D[175]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็–ˆ็–‰็–Š็–Œ็–็–Ž็–็–“็–•็–˜็–›็–œ็–ž็–ข็–ฆ็–ง็–จ็–ฉ็–ช็–ญ็–ถ็–ท็–บ็–ป็–ฟ็—€็—็—†็—‹็—Œ็—Ž็—็—็—‘็—“็——็—™็—š็—œ็—็—Ÿ็— ็—ก็—ฅ็—ฉ็—ฌ็—ญ็—ฎ็—ฏ็—ฒ็—ณ็—ต็—ถ็—ท็—ธ็—บ็—ป็—ฝ็—พ็˜‚็˜„็˜†็˜‡๏ฟฝ็˜ˆ็˜‰็˜‹็˜็˜Ž็˜็˜‘็˜’็˜“็˜”็˜–็˜š็˜œ็˜็˜ž็˜ก็˜ฃ็˜ง็˜จ็˜ฌ็˜ฎ็˜ฏ็˜ฑ็˜ฒ็˜ถ็˜ท็˜น็˜บ็˜ป็˜ฝ็™็™‚็™„๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[175].length;++j)if(D[175][j].charCodeAt(0)!==65533){e[D[175][j]]=44800+j;d[44800+j]=D[175][j]}D[176]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็™…็™†็™‡็™ˆ็™‰็™Š็™‹็™Ž็™็™็™‘็™’็™“็™•็™—็™˜็™™็™š็™›็™็™Ÿ็™ ็™ก็™ข็™ค็™ฅ็™ฆ็™ง็™จ็™ฉ็™ช็™ฌ็™ญ็™ฎ็™ฐ็™ฑ็™ฒ็™ณ็™ด็™ต็™ถ็™ท็™น็™บ็™ผ็™ฟ็š€็š็šƒ็š…็š‰็šŠ็šŒ็š็š็š็š’็š”็š•็š—็š˜็šš็š›๏ฟฝ็šœ็š็šž็šŸ็š ็šก็šข็šฃ็šฅ็šฆ็šง็šจ็šฉ็šช็šซ็šฌ็šญ็šฏ็šฐ็šณ็šต็šถ็šท็šธ็šน็šบ็šป็šผ็šฝ็šพ็›€็›็›ƒๅ•Š้˜ฟๅŸƒๆŒจๅ“Žๅ”‰ๅ“€็š‘็™Œ่”ผ็Ÿฎ่‰พ็ข็ˆฑ้š˜้žๆฐจๅฎ‰ไฟบๆŒ‰ๆš—ๅฒธ่ƒบๆกˆ่‚ฎๆ˜‚็›Žๅ‡นๆ•–็†ฌ็ฟฑ่ข„ๅ‚ฒๅฅฅๆ‡Šๆพณ่ŠญๆŒๆ‰’ๅญๅง็ฌ†ๅ…ซ็–คๅทดๆ‹”่ท‹้ถๆŠŠ่€™ๅ้œธ็ฝข็ˆธ็™ฝๆŸ็™พๆ‘†ไฝฐ่ดฅๆ‹œ็จ—ๆ–‘็ญๆฌๆ‰ณ่ˆฌ้ขๆฟ็‰ˆๆ‰ฎๆ‹Œไผด็“ฃๅŠๅŠž็ปŠ้‚ฆๅธฎๆข†ๆฆœ่†€็ป‘ๆฃ’็ฃ…่šŒ้•‘ๅ‚่ฐค่‹ž่ƒžๅŒ…่ค’ๅ‰ฅ๏ฟฝ".split("");for(j=0;j!=D[176].length;++j)if(D[176][j].charCodeAt(0)!==65533){e[D[176][j]]=45056+j;d[45056+j]=D[176][j]}D[177]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็›„็›‡็›‰็›‹็›Œ็›“็›•็›™็›š็›œ็›็›ž็› ็›ก็›ข็›ฃ็›ค็›ฆ็›ง็›จ็›ฉ็›ช็›ซ็›ฌ็›ญ็›ฐ็›ณ็›ต็›ถ็›ท็›บ็›ป็›ฝ็›ฟ็œ€็œ‚็œƒ็œ…็œ†็œŠ็œŒ็œŽ็œ็œ็œ‘็œ’็œ“็œ”็œ•็œ–็œ—็œ˜็œ›็œœ็œ็œž็œก็œฃ็œค็œฅ็œง็œช็œซ๏ฟฝ็œฌ็œฎ็œฐ็œฑ็œฒ็œณ็œด็œน็œป็œฝ็œพ็œฟ็‚็„็…็†็ˆ็‰็Š็‹็Œ็็Ž็็’็“็”็•็–็—็˜็™็œ่–„้›นไฟๅ ก้ฅฑๅฎๆŠฑๆŠฅๆšด่ฑน้ฒ็ˆ†ๆฏ็ข‘ๆ‚ฒๅ‘ๅŒ—่พˆ่ƒŒ่ด้’กๅ€็‹ˆๅค‡ๆƒซ็„™่ขซๅฅ”่‹ฏๆœฌ็ฌจๅดฉ็ปท็”ญๆณต่นฆ่ฟธ้€ผ้ผปๆฏ”้„™็ฌ”ๅฝผ็ขง่“–่”ฝๆฏ•ๆฏ™ๆฏ–ๅธๅบ‡็—น้—ญๆ•ๅผŠๅฟ…่พŸๅฃ่‡‚้ฟ้™›้žญ่พน็ผ–่ดฌๆ‰ไพฟๅ˜ๅž่พจ่พฉ่พซ้ๆ ‡ๅฝช่†˜่กจ้ณ–ๆ†‹ๅˆซ็˜ชๅฝฌๆ–Œๆฟ’ๆปจๅฎพๆ‘ˆๅ…ตๅ†ฐๆŸ„ไธ™็ง‰้ฅผ็‚ณ๏ฟฝ".split("");for(j=0;j!=D[177].length;++j)if(D[177][j].charCodeAt(0)!==65533){e[D[177][j]]=45312+j;d[45312+j]=D[177][j]}D[178]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็็ž็Ÿ็ ็ค็ง็ฉ็ช็ญ็ฎ็ฏ็ฐ็ฑ็ฒ็ณ็ด็ต็ถ็ท็ธ็บ็ป็ผ็ž็ž‚็žƒ็ž†็ž‡็žˆ็ž‰็žŠ็ž‹็ž็ž็ž“็ž”็ž•็ž–็ž—็ž˜็ž™็žš็ž›็žœ็ž็žž็žก็žฃ็žค็žฆ็žจ็žซ็žญ็žฎ็žฏ็žฑ็žฒ็žด็žถ็žท็žธ็žน็žบ๏ฟฝ็žผ็žพ็Ÿ€็Ÿ็Ÿ‚็Ÿƒ็Ÿ„็Ÿ…็Ÿ†็Ÿ‡็Ÿˆ็Ÿ‰็ŸŠ็Ÿ‹็ŸŒ็ŸŽ็Ÿ็Ÿ็Ÿ‘็Ÿ’็Ÿ“็Ÿ”็Ÿ•็Ÿ–็Ÿ˜็Ÿ™็Ÿš็Ÿ็Ÿž็ŸŸ็Ÿ ็Ÿก็Ÿค็—…ๅนถ็Žป่ ๆ’ญๆ‹จ้’ตๆณขๅšๅ‹ƒๆ้“‚็ฎ”ไผฏๅธ›่ˆถ่„–่†ŠๆธคๆณŠ้ฉณๆ•ๅœๅ“บ่กฅๅŸ ไธๅธƒๆญฅ็ฐฟ้ƒจๆ€–ๆ“ฆ็Œœ่ฃๆๆ‰่ดข็ฌ่ธฉ้‡‡ๅฝฉ่œ่”ก้คๅ‚่š•ๆฎ‹ๆƒญๆƒจ็ฟ่‹่ˆฑไป“ๆฒง่—ๆ“็ณ™ๆงฝๆ›น่‰ๅŽ•็ญ–ไพงๅ†Œๆต‹ๅฑ‚่นญๆ’ๅ‰่Œฌ่ŒถๆŸฅ็ขดๆฝๅฏŸๅฒ”ๅทฎ่ฏงๆ‹†ๆŸด่ฑบๆ€ๆŽบ่‰้ฆ‹่ฐ—็ผ ้“ฒไบง้˜้ขคๆ˜Œ็Œ–๏ฟฝ".split("");for(j=0;j!=D[178].length;++j)if(D[178][j].charCodeAt(0)!==65533){e[D[178][j]]=45568+j;d[45568+j]=D[178][j]}D[179]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็Ÿฆ็Ÿจ็Ÿช็Ÿฏ็Ÿฐ็Ÿฑ็Ÿฒ็Ÿด็Ÿต็Ÿท็Ÿน็Ÿบ็Ÿป็Ÿผ็ ƒ็ „็ …็ †็ ‡็ ˆ็ Š็ ‹็ Ž็ ็ ็ “็ •็ ™็ ›็ ž็  ็ ก็ ข็ ค็ จ็ ช็ ซ็ ฎ็ ฏ็ ฑ็ ฒ็ ณ็ ต็ ถ็ ฝ็ ฟ็ก็ก‚็กƒ็ก„็ก†็กˆ็ก‰็กŠ็ก‹็ก็ก็ก‘็ก“็ก”็ก˜็ก™็กš๏ฟฝ็ก›็กœ็กž็กŸ็ก ็กก็กข็กฃ็กค็กฅ็กฆ็กง็กจ็กฉ็กฏ็กฐ็กฑ็กฒ็กณ็กด็กต็กถ็กธ็กน็กบ็กป็กฝ็กพ็กฟ็ข€็ข็ข‚็ขƒๅœบๅฐๅธธ้•ฟๅฟ่‚ ๅŽ‚ๆ•ž็•…ๅ”ฑๅ€ก่ถ…ๆŠ„้’žๆœๅ˜ฒๆฝฎๅทขๅต็‚’่ฝฆๆ‰ฏๆ’คๆŽฃๅฝปๆพˆ้ƒด่‡ฃ่พฐๅฐ˜ๆ™จๅฟฑๆฒ‰้™ˆ่ถ่กฌๆ’‘็งฐๅŸŽๆฉ™ๆˆๅ‘ˆไน˜็จ‹ๆƒฉๆพ„่ฏšๆ‰ฟ้€ž้ช‹็งคๅƒ็—ดๆŒๅŒ™ๆฑ ่ฟŸๅผ›้ฉฐ่€ป้ฝฟไพˆๅฐบ่ตค็ฟ…ๆ–ฅ็‚ฝๅ……ๅ†ฒ่™ซๅด‡ๅฎ ๆŠฝ้…ฌ็•ด่ธŒ็จ ๆ„็ญนไป‡็ปธ็ž…ไธ‘่‡ญๅˆๅ‡บๆฉฑๅŽจ่บ‡้”„้›ๆป้™คๆฅš๏ฟฝ".split("");for(j=0;j!=D[179].length;++j)if(D[179][j].charCodeAt(0)!==65533){e[D[179][j]]=45824+j;d[45824+j]=D[179][j]}D[180]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ข„็ข…็ข†็ขˆ็ขŠ็ข‹็ข็ข็ข’็ข”็ข•็ข–็ข™็ข็ขž็ข ็ขข็ขค็ขฆ็ขจ็ขฉ็ขช็ขซ็ขฌ็ขญ็ขฎ็ขฏ็ขต็ขถ็ขท็ขธ็ขบ็ขป็ขผ็ขฝ็ขฟ็ฃ€็ฃ‚็ฃƒ็ฃ„็ฃ†็ฃ‡็ฃˆ็ฃŒ็ฃ็ฃŽ็ฃ็ฃ‘็ฃ’็ฃ“็ฃ–็ฃ—็ฃ˜็ฃš็ฃ›็ฃœ็ฃ็ฃž็ฃŸ็ฃ ็ฃก็ฃข็ฃฃ๏ฟฝ็ฃค็ฃฅ็ฃฆ็ฃง็ฃฉ็ฃช็ฃซ็ฃญ็ฃฎ็ฃฏ็ฃฐ็ฃฑ็ฃณ็ฃต็ฃถ็ฃธ็ฃน็ฃป็ฃผ็ฃฝ็ฃพ็ฃฟ็ค€็ค‚็คƒ็ค„็ค†็ค‡็คˆ็ค‰็คŠ็ค‹็คŒ็ก€ๅ‚จ็Ÿ—ๆ่งฆๅค„ๆฃๅท็ฉฟๆคฝไผ ่ˆนๅ–˜ไธฒ็–ฎ็ช—ๅนขๅบŠ้—ฏๅˆ›ๅน็‚Šๆถ้”คๅž‚ๆ˜ฅๆคฟ้†‡ๅ”‡ๆทณ็บฏ่ ขๆˆณ็ปฐ็–ต่Œจ็ฃ้›Œ่พžๆ…ˆ็“ท่ฏๆญคๅˆบ่ตๆฌก่ช่‘ฑๅ›ฑๅŒ†ไปŽไธ›ๅ‡‘็ฒ—้†‹็ฐ‡ไฟƒ่นฟ็ฏก็ชœๆ‘งๅด”ๅ‚ฌ่„†็˜็ฒนๆทฌ็ฟ ๆ‘ๅญ˜ๅฏธ็ฃ‹ๆ’ฎๆ“ๆŽชๆŒซ้”™ๆญ่พพ็ญ”็˜ฉๆ‰“ๅคงๅ‘†ๆญนๅ‚ฃๆˆดๅธฆๆฎ†ไปฃ่ดท่ข‹ๅพ…้€ฎ๏ฟฝ".split("");for(j=0;j!=D[180].length;++j)if(D[180][j].charCodeAt(0)!==65533){e[D[180][j]]=46080+j;d[46080+j]=D[180][j]}D[181]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ค็คŽ็ค็ค็ค‘็ค’็ค”็ค•็ค–็ค—็ค˜็ค™็คš็ค›็คœ็ค็คŸ็ค ็คก็คข็คฃ็คฅ็คฆ็คง็คจ็คฉ็คช็คซ็คฌ็คญ็คฎ็คฏ็คฐ็คฑ็คฒ็คณ็คต็คถ็คท็คธ็คน็คฝ็คฟ็ฅ‚็ฅƒ็ฅ„็ฅ…็ฅ‡็ฅŠ็ฅ‹็ฅŒ็ฅ็ฅŽ็ฅ็ฅ็ฅ‘็ฅ’็ฅ”็ฅ•็ฅ˜็ฅ™็ฅก็ฅฃ๏ฟฝ็ฅค็ฅฆ็ฅฉ็ฅช็ฅซ็ฅฌ็ฅฎ็ฅฐ็ฅฑ็ฅฒ็ฅณ็ฅด็ฅต็ฅถ็ฅน็ฅป็ฅผ็ฅฝ็ฅพ็ฅฟ็ฆ‚็ฆƒ็ฆ†็ฆ‡็ฆˆ็ฆ‰็ฆ‹็ฆŒ็ฆ็ฆŽ็ฆ็ฆ‘็ฆ’ๆ€ ่€ฝๆ‹…ไธนๅ•้ƒธๆŽธ่ƒ†ๆ—ฆๆฐฎไฝ†ๆƒฎๆทก่ฏžๅผน่›‹ๅฝ“ๆŒกๅ…š่กๆกฃๅˆ€ๆฃ่นˆๅ€’ๅฒ›็ฅทๅฏผๅˆฐ็จปๆ‚ผ้“็›—ๅพทๅพ—็š„่นฌ็ฏ็™ป็ญ‰็žชๅ‡ณ้‚“ๅ คไฝŽๆปด่ฟชๆ•Œ็ฌ›็‹„ๆถค็ฟŸๅซกๆŠตๅบ•ๅœฐ่’‚็ฌฌๅธๅผŸ้€’็ผ”้ข ๆŽ‚ๆป‡็ข˜็‚นๅ…ธ้›ๅžซ็”ตไฝƒ็”ธๅบ—ๆƒฆๅฅ ๆท€ๆฎฟ็ข‰ๅผ้›•ๅ‡‹ๅˆๆŽ‰ๅŠ้’“่ฐƒ่ทŒ็ˆน็ขŸ่ถ่ฟญ่ฐๅ ๏ฟฝ".split("");for(j=0;j!=D[181].length;++j)if(D[181][j].charCodeAt(0)!==65533){e[D[181][j]]=46336+j;d[46336+j]=D[181][j]}D[182]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฆ“็ฆ”็ฆ•็ฆ–็ฆ—็ฆ˜็ฆ™็ฆ›็ฆœ็ฆ็ฆž็ฆŸ็ฆ ็ฆก็ฆข็ฆฃ็ฆค็ฆฅ็ฆฆ็ฆจ็ฆฉ็ฆช็ฆซ็ฆฌ็ฆญ็ฆฎ็ฆฏ็ฆฐ็ฆฑ็ฆฒ็ฆด็ฆต็ฆถ็ฆท็ฆธ็ฆผ็ฆฟ็ง‚็ง„็ง…็ง‡็งˆ็งŠ็งŒ็งŽ็ง็ง็ง“็ง”็ง–็ง—็ง™็งš็ง›็งœ็ง็งž็ง ็งก็งข็งฅ็งจ็งช๏ฟฝ็งฌ็งฎ็งฑ็งฒ็งณ็งด็งต็งถ็งท็งน็งบ็งผ็งพ็งฟ็จ็จ„็จ…็จ‡็จˆ็จ‰็จŠ็จŒ็จ็จ็จ‘็จ’็จ“็จ•็จ–็จ˜็จ™็จ›็จœไธ็›ฏๅฎ้’‰้กถ้ผŽ้”ญๅฎš่ฎขไธขไธœๅ†ฌ่‘ฃๆ‡‚ๅŠจๆ ‹ไพ—ๆซๅ†ปๆดžๅ…œๆŠ–ๆ–—้™ก่ฑ†้€—็—˜้ƒฝ็ฃๆฏ’็ŠŠ็‹ฌ่ฏปๅ ต็น่ตŒๆœ้•€่‚šๅบฆๆธกๅฆ’็ซฏ็Ÿญ้”ปๆฎตๆ–ญ็ผŽๅ †ๅ…‘้˜Ÿๅฏนๅขฉๅจ่นฒๆ•ฆ้กฟๅ›ค้’็›พ้ๆŽ‡ๅ“†ๅคšๅคบๅž›่บฒๆœต่ทบ่ˆตๅ‰ๆƒฐๅ •่›พๅณจ้น…ไฟ„้ข่ฎนๅจฅๆถๅŽ„ๆ‰ผ้้„‚้ฅฟๆฉ่€Œๅ„ฟ่€ณๅฐ”้ฅตๆดฑไบŒ๏ฟฝ".split("");for(j=0;j!=D[182].length;++j)if(D[182][j].charCodeAt(0)!==65533){e[D[182][j]]=46592+j;d[46592+j]=D[182][j]}D[183]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็จ็จŸ็จก็จข็จค็จฅ็จฆ็จง็จจ็จฉ็จช็จซ็จฌ็จญ็จฎ็จฏ็จฐ็จฑ็จฒ็จด็จต็จถ็จธ็จบ็จพ็ฉ€็ฉ็ฉ‚็ฉƒ็ฉ„็ฉ…็ฉ‡็ฉˆ็ฉ‰็ฉŠ็ฉ‹็ฉŒ็ฉ็ฉŽ็ฉ็ฉ็ฉ’็ฉ“็ฉ”็ฉ•็ฉ–็ฉ˜็ฉ™็ฉš็ฉ›็ฉœ็ฉ็ฉž็ฉŸ็ฉ ็ฉก็ฉข็ฉฃ็ฉค็ฉฅ็ฉฆ็ฉง็ฉจ๏ฟฝ็ฉฉ็ฉช็ฉซ็ฉฌ็ฉญ็ฉฎ็ฉฏ็ฉฑ็ฉฒ็ฉณ็ฉต็ฉป็ฉผ็ฉฝ็ฉพ็ช‚็ช…็ช‡็ช‰็ชŠ็ช‹็ชŒ็ชŽ็ช็ช็ช“็ช”็ช™็ชš็ช›็ชž็ชก็ชข่ดฐๅ‘็ฝš็ญไผไน้˜€ๆณ•็่—ฉๅธ†็•ช็ฟปๆจŠ็Ÿพ้’’็นๅ‡ก็ƒฆๅ่ฟ”่Œƒ่ดฉ็Šฏ้ฅญๆณ›ๅŠ่Šณๆ–น่‚ชๆˆฟ้˜ฒๅฆจไปฟ่ฎฟ็บบๆ”พ่ฒ้žๅ•ก้ฃž่‚ฅๅŒช่ฏฝๅ ่‚บๅบŸๆฒธ่ดน่Šฌ้…šๅฉๆฐ›ๅˆ†็บทๅŸ็„šๆฑพ็ฒ‰ๅฅ‹ไปฝๅฟฟๆ„ค็ฒชไธฐๅฐๆžซ่œ‚ๅณฐ้”‹้ฃŽ็–ฏ็ƒฝ้€ขๅ†ฏ็ผ่ฎฝๅฅ‰ๅ‡คไฝ›ๅฆๅคซๆ•ท่‚คๅญตๆ‰ถๆ‹‚่พๅน…ๆฐŸ็ฌฆไผไฟ˜ๆœ๏ฟฝ".split("");for(j=0;j!=D[183].length;++j)if(D[183][j].charCodeAt(0)!==65533){e[D[183][j]]=46848+j;d[46848+j]=D[183][j]}D[184]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ชฃ็ชค็ชง็ชฉ็ชช็ชซ็ชฎ็ชฏ็ชฐ็ชฑ็ชฒ็ชด็ชต็ชถ็ชท็ชธ็ชน็ชบ็ชป็ชผ็ชฝ็ชพ็ซ€็ซ็ซ‚็ซƒ็ซ„็ซ…็ซ†็ซ‡็ซˆ็ซ‰็ซŠ็ซŒ็ซ็ซŽ็ซ็ซ็ซ‘็ซ’็ซ“็ซ”็ซ•็ซ—็ซ˜็ซš็ซ›็ซœ็ซ็ซก็ซข็ซค็ซง็ซจ็ซฉ็ซช็ซซ็ซฌ็ซฎ็ซฐ็ซฑ็ซฒ็ซณ๏ฟฝ็ซด็ซต็ซถ็ซท็ซธ็ซป็ซผ็ซพ็ฌ€็ฌ็ฌ‚็ฌ…็ฌ‡็ฌ‰็ฌŒ็ฌ็ฌŽ็ฌ็ฌ’็ฌ“็ฌ–็ฌ—็ฌ˜็ฌš็ฌœ็ฌ็ฌŸ็ฌก็ฌข็ฌฃ็ฌง็ฌฉ็ฌญๆตฎๆถช็ฆ่ขฑๅผ—็”ซๆŠš่พ…ไฟฏ้‡œๆ–ง่„ฏ่…‘ๅบœ่…่ตดๅ‰ฏ่ฆ†่ต‹ๅคๅ‚…ไป˜้˜œ็ˆถ่…น่ดŸๅฏŒ่ฎฃ้™„ๅฆ‡็ผšๅ’ๅ™ถๅ˜Ž่ฏฅๆ”นๆฆ‚้’™็›–ๆบ‰ๅนฒ็”˜ๆ†ๆŸ‘็ซฟ่‚่ตถๆ„Ÿ็ง†ๆ•ข่ตฃๅ†ˆๅˆš้’ข็ผธ่‚›็บฒๅฒ—ๆธฏๆ ็ฏ™็š‹้ซ˜่†็พ”็ณ•ๆž้•็จฟๅ‘Šๅ“ฅๆญŒๆๆˆˆ้ธฝ่ƒณ็–™ๅ‰ฒ้ฉ่‘›ๆ ผ่›ค้˜้š”้“ฌไธชๅ„็ป™ๆ น่ทŸ่€•ๆ›ดๅบš็พน๏ฟฝ".split("");for(j=0;j!=D[184].length;++j)if(D[184][j].charCodeAt(0)!==65533){e[D[184][j]]=47104+j;d[47104+j]=D[184][j]}D[185]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฌฏ็ฌฐ็ฌฒ็ฌด็ฌต็ฌถ็ฌท็ฌน็ฌป็ฌฝ็ฌฟ็ญ€็ญ็ญ‚็ญƒ็ญ„็ญ†็ญˆ็ญŠ็ญ็ญŽ็ญ“็ญ•็ญ—็ญ™็ญœ็ญž็ญŸ็ญก็ญฃ็ญค็ญฅ็ญฆ็ญง็ญจ็ญฉ็ญช็ญซ็ญฌ็ญญ็ญฏ็ญฐ็ญณ็ญด็ญถ็ญธ็ญบ็ญผ็ญฝ็ญฟ็ฎ็ฎ‚็ฎƒ็ฎ„็ฎ†็ฎ‡็ฎˆ็ฎ‰็ฎŠ็ฎ‹็ฎŒ็ฎŽ็ฎ๏ฟฝ็ฎ‘็ฎ’็ฎ“็ฎ–็ฎ˜็ฎ™็ฎš็ฎ›็ฎž็ฎŸ็ฎ ็ฎฃ็ฎค็ฎฅ็ฎฎ็ฎฏ็ฎฐ็ฎฒ็ฎณ็ฎต็ฎถ็ฎท็ฎน็ฎบ็ฎป็ฎผ็ฎฝ็ฎพ็ฎฟ็ฏ€็ฏ‚็ฏƒ็ฏ„ๅŸ‚่€ฟๆข—ๅทฅๆ”ปๅŠŸๆญ้พšไพ›่บฌๅ…ฌๅฎซๅผ“ๅทฉๆฑžๆ‹ฑ่ดกๅ…ฑ้’ฉๅ‹พๆฒŸ่‹Ÿ็‹—ๅžขๆž„่ดญๅคŸ่พœ่‡ๅ’•็ฎไผฐๆฒฝๅญคๅง‘้ผ“ๅค่›Š้ชจ่ฐท่‚กๆ•…้กพๅ›บ้›‡ๅˆฎ็“œๅ‰ๅฏกๆŒ‚่ค‚ไน–ๆ‹ๆ€ชๆฃบๅ…ณๅฎ˜ๅ† ่ง‚็ฎก้ฆ†็ฝๆƒฏ็Œ่ดฏๅ…‰ๅนฟ้€›็‘ฐ่ง„ๅœญ็ก…ๅฝ’้พŸ้—บ่ฝจ้ฌผ่ฏก็™ธๆก‚ๆŸœ่ทช่ดตๅˆฝ่พŠๆปšๆฃ้”…้ƒญๅ›ฝๆžœ่ฃน่ฟ‡ๅ“ˆ๏ฟฝ".split("");for(j=0;j!=D[185].length;++j)if(D[185][j].charCodeAt(0)!==65533){e[D[185][j]]=47360+j;d[47360+j]=D[185][j]}D[186]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฏ…็ฏˆ็ฏ‰็ฏŠ็ฏ‹็ฏ็ฏŽ็ฏ็ฏ็ฏ’็ฏ”็ฏ•็ฏ–็ฏ—็ฏ˜็ฏ›็ฏœ็ฏž็ฏŸ็ฏ ็ฏข็ฏฃ็ฏค็ฏง็ฏจ็ฏฉ็ฏซ็ฏฌ็ฏญ็ฏฏ็ฏฐ็ฏฒ็ฏณ็ฏด็ฏต็ฏถ็ฏธ็ฏน็ฏบ็ฏป็ฏฝ็ฏฟ็ฐ€็ฐ็ฐ‚็ฐƒ็ฐ„็ฐ…็ฐ†็ฐˆ็ฐ‰็ฐŠ็ฐ็ฐŽ็ฐ็ฐ‘็ฐ’็ฐ“็ฐ”็ฐ•็ฐ—็ฐ˜็ฐ™๏ฟฝ็ฐš็ฐ›็ฐœ็ฐ็ฐž็ฐ ็ฐก็ฐข็ฐฃ็ฐค็ฐฅ็ฐจ็ฐฉ็ฐซ็ฐฌ็ฐญ็ฐฎ็ฐฏ็ฐฐ็ฐฑ็ฐฒ็ฐณ็ฐด็ฐต็ฐถ็ฐท็ฐน็ฐบ็ฐป็ฐผ็ฐฝ็ฐพ็ฑ‚้ชธๅญฉๆตทๆฐฆไบฅๅฎณ้ช‡้…ฃๆ†จ้‚ฏ้Ÿฉๅซๆถตๅฏ’ๅ‡ฝๅ–Š็ฝ•็ฟฐๆ’ผๆๆ—ฑๆ†พๆ‚็„Šๆฑ—ๆฑ‰ๅคฏๆญ่ˆชๅฃ•ๅšŽ่ฑชๆฏซ้ƒๅฅฝ่€—ๅทๆตฉๅ‘ตๅ–่ท่ๆ ธ็ฆพๅ’Œไฝ•ๅˆ็›’่ฒ‰้˜‚ๆฒณๆถธ่ตซ่ค้นค่ดบๅ˜ฟ้ป‘็—•ๅพˆ็‹ ๆจๅ“ผไบจๆจช่กกๆ’่ฝฐๅ“„็ƒ˜่™น้ธฟๆดชๅฎๅผ˜็บขๅ–‰ไพฏ็ŒดๅผๅŽšๅ€™ๅŽๅ‘ผไนŽๅฟฝ็‘šๅฃถ่‘ซ่ƒก่ด็‹็ณŠๆน–๏ฟฝ".split("");for(j=0;j!=D[186].length;++j)if(D[186][j].charCodeAt(0)!==65533){e[D[186][j]]=47616+j;d[47616+j]=D[186][j]}D[187]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฑƒ็ฑ„็ฑ…็ฑ†็ฑ‡็ฑˆ็ฑ‰็ฑŠ็ฑ‹็ฑŒ็ฑŽ็ฑ็ฑ็ฑ‘็ฑ’็ฑ“็ฑ”็ฑ•็ฑ–็ฑ—็ฑ˜็ฑ™็ฑš็ฑ›็ฑœ็ฑ็ฑž็ฑŸ็ฑ ็ฑก็ฑข็ฑฃ็ฑค็ฑฅ็ฑฆ็ฑง็ฑจ็ฑฉ็ฑช็ฑซ็ฑฌ็ฑญ็ฑฎ็ฑฏ็ฑฐ็ฑฑ็ฑฒ็ฑต็ฑถ็ฑท็ฑธ็ฑน็ฑบ็ฑพ็ฑฟ็ฒ€็ฒ็ฒ‚็ฒƒ็ฒ„็ฒ…็ฒ†็ฒ‡๏ฟฝ็ฒˆ็ฒŠ็ฒ‹็ฒŒ็ฒ็ฒŽ็ฒ็ฒ็ฒ“็ฒ”็ฒ–็ฒ™็ฒš็ฒ›็ฒ ็ฒก็ฒฃ็ฒฆ็ฒง็ฒจ็ฒฉ็ฒซ็ฒฌ็ฒญ็ฒฏ็ฒฐ็ฒด็ฒต็ฒถ็ฒท็ฒธ็ฒบ็ฒปๅผง่™Žๅ”ฌๆŠคไบ’ๆฒชๆˆท่Šฑๅ“—ๅŽ็Œพๆป‘็”ปๅˆ’ๅŒ–่ฏๆงๅพŠๆ€€ๆทฎๅๆฌข็Žฏๆก“่ฟ˜็ผ“ๆขๆ‚ฃๅ”ค็—ช่ฑข็„•ๆถฃๅฎฆๅนป่’ๆ…Œ้ป„็ฃบ่—็ฐง็š‡ๅ‡ฐๆƒถ็…Œๆ™ƒๅนŒๆ่ฐŽ็ฐๆŒฅ่พ‰ๅพฝๆข่›”ๅ›žๆฏๆ‚”ๆ…งๅ‰ๆƒ ๆ™ฆ่ดฟ็งฝไผš็ƒฉๆฑ‡่ฎณ่ฏฒ็ป˜่คๆ˜ๅฉš้ญ‚ๆต‘ๆทท่ฑๆดปไผ™็ซ่Žทๆˆ–ๆƒ‘้œ่ดง็ฅธๅ‡ปๅœพๅŸบๆœบ็•ธ็จฝ็งฏ็ฎ•๏ฟฝ".split("");for(j=0;j!=D[187].length;++j)if(D[187][j].charCodeAt(0)!==65533){e[D[187][j]]=47872+j;d[47872+j]=D[187][j]}D[188]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฒฟ็ณ€็ณ‚็ณƒ็ณ„็ณ†็ณ‰็ณ‹็ณŽ็ณ็ณ็ณ‘็ณ’็ณ“็ณ”็ณ˜็ณš็ณ›็ณ็ณž็ณก็ณข็ณฃ็ณค็ณฅ็ณฆ็ณง็ณฉ็ณช็ณซ็ณฌ็ณญ็ณฎ็ณฐ็ณฑ็ณฒ็ณณ็ณด็ณต็ณถ็ณท็ณน็ณบ็ณผ็ณฝ็ณพ็ณฟ็ด€็ด็ด‚็ดƒ็ด„็ด…็ด†็ด‡็ดˆ็ด‰็ด‹็ดŒ็ด็ดŽ็ด็ด๏ฟฝ็ด‘็ด’็ด“็ด”็ด•็ด–็ด—็ด˜็ด™็ดš็ด›็ดœ็ด็ดž็ดŸ็ดก็ดฃ็ดค็ดฅ็ดฆ็ดจ็ดฉ็ดช็ดฌ็ดญ็ดฎ็ดฐ็ดฑ็ดฒ็ดณ็ดด็ดต็ดถ่‚Œ้ฅฅ่ฟนๆฟ€่ฎฅ้ธกๅงฌ็ปฉ็ผ‰ๅ‰ๆžๆฃ˜่พ‘็ฑ้›†ๅŠๆ€ฅ็–พๆฑฒๅณๅซ‰็บงๆŒคๅ‡ ่„Šๅทฑ่“ŸๆŠ€ๅ†€ๅญฃไผŽ็ฅญๅ‰‚ๆ‚ธๆตŽๅฏ„ๅฏ‚่ฎก่ฎฐๆ—ขๅฟŒ้™…ๅฆ“็ปง็บชๅ˜‰ๆžทๅคนไฝณๅฎถๅŠ ่š้ขŠ่ดพ็”ฒ้’พๅ‡็จผไปทๆžถ้ฉพๅซๆญผ็›‘ๅšๅฐ–็ฌบ้—ด็…Žๅ…ผ่‚ฉ่‰ฐๅฅธ็ผ„่Œงๆฃ€ๆŸฌ็ขฑ็กทๆ‹ฃๆก็ฎ€ไฟญๅ‰ชๅ‡่ๆง›้‰ด่ทต่ดฑ่ง้”ฎ็ฎญไปถ๏ฟฝ".split("");for(j=0;j!=D[188].length;++j)if(D[188][j].charCodeAt(0)!==65533){e[D[188][j]]=48128+j;d[48128+j]=D[188][j]}D[189]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ดท็ดธ็ดน็ดบ็ดป็ดผ็ดฝ็ดพ็ดฟ็ต€็ต็ต‚็ตƒ็ต„็ต…็ต†็ต‡็ตˆ็ต‰็ตŠ็ต‹็ตŒ็ต็ตŽ็ต็ต็ต‘็ต’็ต“็ต”็ต•็ต–็ต—็ต˜็ต™็ตš็ต›็ตœ็ต็ตž็ตŸ็ต ็ตก็ตข็ตฃ็ตค็ตฅ็ตฆ็ตง็ตจ็ตฉ็ตช็ตซ็ตฌ็ตญ็ตฏ็ตฐ็ตฑ็ตฒ็ตณ็ตด็ตต็ตถ๏ฟฝ็ตธ็ตน็ตบ็ตป็ตผ็ตฝ็ตพ็ตฟ็ถ€็ถ็ถ‚็ถƒ็ถ„็ถ…็ถ†็ถ‡็ถˆ็ถ‰็ถŠ็ถ‹็ถŒ็ถ็ถŽ็ถ็ถ็ถ‘็ถ’็ถ“็ถ”็ถ•็ถ–็ถ—็ถ˜ๅฅ่ˆฐๅ‰‘้ฅฏๆธๆบ…ๆถงๅปบๅƒตๅงœๅฐ†ๆต†ๆฑŸ็–†่’‹ๆกจๅฅ–่ฎฒๅŒ ้…ฑ้™่•‰ๆค’็ค็„ฆ่ƒถไบค้ƒŠๆต‡้ช„ๅจ‡ๅšผๆ…้“ฐ็Ÿซไพฅ่„š็‹ก่ง’้ฅบ็ผด็ปžๅ‰ฟๆ•™้…ต่ฝฟ่พƒๅซ็ช–ๆญๆŽฅ็š†็งธ่ก—้˜ถๆˆชๅŠซ่Š‚ๆก”ๆฐๆท็ซ็ซญๆด็ป“่งฃๅงๆˆ’่—‰่Šฅ็•Œๅ€Ÿไป‹็–ฅ่ฏซๅฑŠๅทพ็ญ‹ๆ–ค้‡‘ไปŠๆดฅ่ฅŸ็ดง้”ฆไป…่ฐจ่ฟ›้ณๆ™‹็ฆ่ฟ‘็ƒฌๆตธ๏ฟฝ".split("");for(j=0;j!=D[189].length;++j)if(D[189][j].charCodeAt(0)!==65533){e[D[189][j]]=48384+j;d[48384+j]=D[189][j]}D[190]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ถ™็ถš็ถ›็ถœ็ถ็ถž็ถŸ็ถ ็ถก็ถข็ถฃ็ถค็ถฅ็ถง็ถจ็ถฉ็ถช็ถซ็ถฌ็ถญ็ถฏ็ถฐ็ถฑ็ถฒ็ถณ็ถด็ถต็ถถ็ถท็ถธ็ถน็ถบ็ถป็ถผ็ถฝ็ถพ็ถฟ็ท€็ท็ท‚็ทƒ็ท„็ท…็ท†็ท‡็ทˆ็ท‰็ทŠ็ท‹็ทŒ็ท็ทŽ็ท็ท็ท‘็ท’็ท“็ท”็ท•็ท–็ท—็ท˜็ท™๏ฟฝ็ทš็ท›็ทœ็ท็ทž็ทŸ็ท ็ทก็ทข็ทฃ็ทค็ทฅ็ทฆ็ทง็ทจ็ทฉ็ทช็ทซ็ทฌ็ทญ็ทฎ็ทฏ็ทฐ็ทฑ็ทฒ็ทณ็ทด็ทต็ทถ็ทท็ทธ็ทน็ทบๅฐฝๅŠฒ่†ๅ…ข่ŒŽ็›ๆ™ถ้ฒธไบฌๆƒŠ็ฒพ็ฒณ็ปไบ•่ญฆๆ™ฏ้ขˆ้™ๅขƒๆ•ฌ้•œๅพ„็—‰้–็ซŸ็ซžๅ‡€็‚ฏ็ช˜ๆช็ฉถ็บ ็Ž–้Ÿญไน…็ธไน้…’ๅŽฉๆ•‘ๆ—ง่‡ผ่ˆ…ๅ’Žๅฐฑ็–š้ž ๆ‹˜็‹™็–ฝๅฑ…้ฉน่Šๅฑ€ๅ’€็Ÿฉไธพๆฒฎ่šๆ‹’ๆฎๅทจๅ…ท่ท่ธž้”ฏไฟฑๅฅๆƒง็‚ฌๅ‰งๆ้นƒๅจŸๅ€ฆ็œทๅท็ปขๆ’…ๆ”ซๆŠ‰ๆŽ˜ๅ€”็ˆต่ง‰ๅ†ณ่ฏ€็ปๅ‡่Œ้’งๅ†›ๅ›ๅณป๏ฟฝ".split("");for(j=0;j!=D[190].length;++j)if(D[190][j].charCodeAt(0)!==65533){e[D[190][j]]=48640+j;d[48640+j]=D[190][j]}D[191]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ทป็ทผ็ทฝ็ทพ็ทฟ็ธ€็ธ็ธ‚็ธƒ็ธ„็ธ…็ธ†็ธ‡็ธˆ็ธ‰็ธŠ็ธ‹็ธŒ็ธ็ธŽ็ธ็ธ็ธ‘็ธ’็ธ“็ธ”็ธ•็ธ–็ธ—็ธ˜็ธ™็ธš็ธ›็ธœ็ธ็ธž็ธŸ็ธ ็ธก็ธข็ธฃ็ธค็ธฅ็ธฆ็ธง็ธจ็ธฉ็ธช็ธซ็ธฌ็ธญ็ธฎ็ธฏ็ธฐ็ธฑ็ธฒ็ธณ็ธด็ธต็ธถ็ธท็ธธ็ธน๏ฟฝ็ธบ็ธผ็ธฝ็ธพ็ธฟ็น€็น‚็นƒ็น„็น…็น†็นˆ็น‰็นŠ็น‹็นŒ็น็นŽ็น็น็น‘็น’็น“็น”็น•็น–็น—็น˜็น™็นš็น›็นœ็นไฟŠ็ซฃๆตš้ƒก้ชๅ–€ๅ’–ๅกๅ’ฏๅผ€ๆฉๆฅทๅ‡ฏๆ…จๅˆŠๅ ชๅ‹˜ๅŽ็ ็œ‹ๅบทๆ…ท็ณ ๆ‰›ๆŠ—ไบข็‚•่€ƒๆ‹ท็ƒค้ ๅท่‹›ๆŸฏๆฃต็ฃ•้ข—็ง‘ๅฃณๅ’ณๅฏๆธดๅ…‹ๅˆปๅฎข่ฏพ่‚ฏๅ•ƒๅžฆๆณๅ‘ๅญ็ฉบๆๅญ”ๆŽงๆŠ ๅฃๆ‰ฃๅฏ‡ๆžฏๅ“ญ็ชŸ่‹ฆ้…ทๅบ“่ฃคๅคธๅžฎๆŒŽ่ทจ่ƒฏๅ—็ญทไพฉๅฟซๅฎฝๆฌพๅŒก็ญ็‹‚ๆก†็Ÿฟ็œถๆ—ทๅ†ตไบ็›”ๅฒฟ็ชฅ่‘ตๅฅŽ้ญๅ‚€๏ฟฝ".split("");for(j=0;j!=D[191].length;++j)if(D[191][j].charCodeAt(0)!==65533){e[D[191][j]]=48896+j;d[48896+j]=D[191][j]}D[192]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็นž็นŸ็น ็นก็นข็นฃ็นค็นฅ็นฆ็นง็นจ็นฉ็นช็นซ็นฌ็นญ็นฎ็นฏ็นฐ็นฑ็นฒ็นณ็นด็นต็นถ็นท็นธ็นน็นบ็นป็นผ็นฝ็นพ็นฟ็บ€็บ็บƒ็บ„็บ…็บ†็บ‡็บˆ็บ‰็บŠ็บ‹็บŒ็บ็บŽ็บ็บ็บ‘็บ’็บ“็บ”็บ•็บ–็บ—็บ˜็บ™็บš็บœ็บ็บž๏ฟฝ็บฎ็บด็บป็บผ็ป–็ปค็ปฌ็ปน็ผŠ็ผ็ผž็ผท็ผน็ผป็ผผ็ผฝ็ผพ็ผฟ็ฝ€็ฝ็ฝƒ็ฝ†็ฝ‡็ฝˆ็ฝ‰็ฝŠ็ฝ‹็ฝŒ็ฝ็ฝŽ็ฝ็ฝ’็ฝ“้ฆˆๆ„งๆบƒๅคๆ˜†ๆ†ๅ›ฐๆ‹ฌๆ‰ฉๅป“้˜”ๅžƒๆ‹‰ๅ–‡่œก่…Š่พฃๅ•ฆ่Žฑๆฅ่ต–่“ๅฉชๆ ๆ‹ฆ็ฏฎ้˜‘ๅ…ฐๆพœ่ฐฐๆฝ่งˆๆ‡’็ผ†็ƒ‚ๆปฅ็…ๆฆ”็‹ผๅปŠ้ƒŽๆœ—ๆตชๆžๅŠณ็‰ข่€ไฝฌๅงฅ้…ช็ƒ™ๆถๅ‹’ไน้›ท้•ญ่•พ็ฃŠ็ดฏๅ„กๅž’ๆ“‚่‚‹็ฑปๆณชๆฃฑๆฅžๅ†ทๅŽ˜ๆขจ็Š้ปŽ็ฏฑ็‹ธ็ฆปๆผ“็†ๆŽ้‡Œ้ฒค็คผ่Ž‰่”ๅๆ —ไธฝๅŽ‰ๅŠฑ็ พๅŽ†ๅˆฉๅ‚ˆไพ‹ไฟ๏ฟฝ".split("");for(j=0;j!=D[192].length;++j)if(D[192][j].charCodeAt(0)!==65533){e[D[192][j]]=49152+j;d[49152+j]=D[192][j]}D[193]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฝ–็ฝ™็ฝ›็ฝœ็ฝ็ฝž็ฝ ็ฝฃ็ฝค็ฝฅ็ฝฆ็ฝง็ฝซ็ฝฌ็ฝญ็ฝฏ็ฝฐ็ฝณ็ฝต็ฝถ็ฝท็ฝธ็ฝบ็ฝป็ฝผ็ฝฝ็ฝฟ็พ€็พ‚็พƒ็พ„็พ…็พ†็พ‡็พˆ็พ‰็พ‹็พ็พ็พ็พ‘็พ’็พ“็พ•็พ–็พ—็พ˜็พ™็พ›็พœ็พ ็พข็พฃ็พฅ็พฆ็พจ็พฉ็พช็พซ็พฌ็พญ็พฎ็พฑ๏ฟฝ็พณ็พด็พต็พถ็พท็พบ็พป็พพ็ฟ€็ฟ‚็ฟƒ็ฟ„็ฟ†็ฟ‡็ฟˆ็ฟ‰็ฟ‹็ฟ็ฟ็ฟ็ฟ‘็ฟ’็ฟ“็ฟ–็ฟ—็ฟ™็ฟš็ฟ›็ฟœ็ฟ็ฟž็ฟข็ฟฃ็—ข็ซ‹็ฒ’ๆฒฅ้šถๅŠ›็’ƒๅ“ฉไฟฉ่”่Žฒ่ฟž้•ฐๅป‰ๆ€œๆถŸๅธ˜ๆ•›่„ธ้“พๆ‹็‚ผ็ปƒ็ฒฎๅ‡‰ๆข็ฒฑ่‰ฏไธค่พ†้‡ๆ™พไบฎ่ฐ…ๆ’ฉ่Šๅƒš็–—็‡Žๅฏฅ่พฝๆฝฆไบ†ๆ’‚้•ฃๅป–ๆ–™ๅˆ—่ฃ‚็ƒˆๅŠฃ็ŒŽ็ณๆž—็ฃท้œ–ไธด้‚ป้ณžๆท‹ๅ‡›่ตๅๆ‹Ž็Žฒ่ฑ้›ถ้พ„้“ƒไผถ็พšๅ‡Œ็ต้™ตๅฒญ้ข†ๅฆไปคๆบœ็‰ๆฆด็กซ้ฆ็•™ๅˆ˜็˜คๆตๆŸณๅ…ญ้พ™่‹ๅ’™็ฌผ็ชฟ๏ฟฝ".split("");for(j=0;j!=D[193].length;++j)if(D[193][j].charCodeAt(0)!==65533){e[D[193][j]]=49408+j;d[49408+j]=D[193][j]}D[194]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฟค็ฟง็ฟจ็ฟช็ฟซ็ฟฌ็ฟญ็ฟฏ็ฟฒ็ฟด็ฟต็ฟถ็ฟท็ฟธ็ฟน็ฟบ็ฟฝ็ฟพ็ฟฟ่€‚่€‡่€ˆ่€‰่€Š่€Ž่€่€‘่€“่€š่€›่€่€ž่€Ÿ่€ก่€ฃ่€ค่€ซ่€ฌ่€ญ่€ฎ่€ฏ่€ฐ่€ฒ่€ด่€น่€บ่€ผ่€พ่€่่„่…่‡่ˆ่‰่Ž่่่‘่“่•่–่—๏ฟฝ่™่›่œ่่ž่Ÿ่ ่ก่ข่ฃ่ค่ฅ่ฆ่ง่จ่ซ่ฌ่ญ่ฎ่ฏ่ฐ่ฒ่ณ่ด่ต่ถ่ท่ธ่น่บ่ป่ผ่ฝ้š†ๅž„ๆ‹ข้™‡ๆฅผๅจ„ๆ‚็ฏ“ๆผ้™‹่Šฆๅข้ข…ๅบ็‚‰ๆŽณๅค่™้ฒ้บ“็ขŒ้œฒ่ทฏ่ต‚้นฟๆฝž็ฆ„ๅฝ•้™†ๆˆฎ้ฉดๅ•้“ไพฃๆ—…ๅฑฅๅฑก็ผ•่™‘ๆฐฏๅพ‹็Ž‡ๆปค็ปฟๅณฆๆŒ›ๅญชๆปฆๅตไนฑๆŽ ็•ฅๆŠก่ฝฎไผฆไป‘ๆฒฆ็บถ่ฎบ่่žบ็ฝ—้€ป้”ฃ็ฎฉ้ชก่ฃธ่ฝๆด›้ช†็ปœๅฆˆ้บป็Ž›็ ่š‚้ฉฌ้ช‚ๅ˜›ๅ—ๅŸ‹ไนฐ้บฆๅ–่ฟˆ่„‰็ž’้ฆ’่›ฎๆปก่”“ๆ›ผๆ…ขๆผซ๏ฟฝ".split("");for(j=0;j!=D[194].length;++j)if(D[194][j].charCodeAt(0)!==65533){e[D[194][j]]=49664+j;d[49664+j]=D[194][j]}D[195]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่พ่‚่‚‚่‚…่‚ˆ่‚Š่‚่‚Ž่‚่‚่‚‘่‚’่‚”่‚•่‚—่‚™่‚ž่‚ฃ่‚ฆ่‚ง่‚จ่‚ฌ่‚ฐ่‚ณ่‚ต่‚ถ่‚ธ่‚น่‚ป่ƒ…่ƒ‡่ƒˆ่ƒ‰่ƒŠ่ƒ‹่ƒ่ƒ่ƒ‘่ƒ’่ƒ“่ƒ”่ƒ•่ƒ˜่ƒŸ่ƒ ่ƒข่ƒฃ่ƒฆ่ƒฎ่ƒต่ƒท่ƒน่ƒป่ƒพ่ƒฟ่„€่„่„ƒ่„„่„…่„‡่„ˆ่„‹๏ฟฝ่„Œ่„•่„—่„™่„›่„œ่„่„Ÿ่„ ่„ก่„ข่„ฃ่„ค่„ฅ่„ฆ่„ง่„จ่„ฉ่„ช่„ซ่„ญ่„ฎ่„ฐ่„ณ่„ด่„ต่„ท่„น่„บ่„ป่„ผ่„ฝ่„ฟ่ฐฉ่Š’่Œซ็›ฒๆฐ“ๅฟ™่Žฝ็Œซ่Œ…้”šๆฏ›็Ÿ›้“†ๅฏ่Œ‚ๅ†’ๅธฝ่ฒŒ่ดธไนˆ็Žซๆžšๆข…้…ถ้œ‰็…คๆฒก็œ‰ๅช’้•ๆฏ็พŽๆ˜งๅฏๅฆนๅชš้—จ้—ทไปฌ่Œ่’™ๆชฌ็›Ÿ้”ฐ็Œ›ๆขฆๅญŸ็œฏ้†š้ก็ณœ่ฟท่ฐœๅผฅ็ฑณ็ง˜่ง…ๆณŒ่œœๅฏ†ๅน‚ๆฃ‰็œ ็ปตๅ†•ๅ…ๅ‹‰ๅจฉ็ผ…้ข่‹—ๆ็ž„่—็ง’ๆธบๅบ™ๅฆ™่”‘็ญๆฐ‘ๆŠฟ็šฟๆ•ๆ‚ฏ้—ฝๆ˜Ž่žŸ้ธฃ้“ญๅๅ‘ฝ่ฐฌๆ‘ธ๏ฟฝ".split("");for(j=0;j!=D[195].length;++j)if(D[195][j].charCodeAt(0)!==65533){e[D[195][j]]=49920+j;d[49920+j]=D[195][j]}D[196]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่…€่…่…‚่…ƒ่…„่……่…‡่…‰่…่…Ž่…่…’่…–่…—่…˜่…›่…œ่…่…ž่…Ÿ่…ก่…ข่…ฃ่…ค่…ฆ่…จ่…ช่…ซ่…ฌ่…ฏ่…ฒ่…ณ่…ต่…ถ่…ท่…ธ่†่†ƒ่†„่†…่††่†‡่†‰่†‹่†Œ่†่†Ž่†่†’่†“่†”่†•่†–่†—่†™่†š่†ž่†Ÿ่† ่†ก่†ข่†ค่†ฅ๏ฟฝ่†ง่†ฉ่†ซ่†ฌ่†ญ่†ฎ่†ฏ่†ฐ่†ฑ่†ฒ่†ด่†ต่†ถ่†ท่†ธ่†น่†ผ่†ฝ่†พ่†ฟ่‡„่‡…่‡‡่‡ˆ่‡‰่‡‹่‡่‡Ž่‡่‡่‡‘่‡’่‡“ๆ‘น่˜‘ๆจก่†œ็ฃจๆ‘ฉ้ญ”ๆŠนๆœซ่Žซๅขจ้ป˜ๆฒซๆผ ๅฏž้™Œ่ฐ‹็‰ŸๆŸๆ‹‡็‰กไบฉๅง†ๆฏๅข“ๆšฎๅน•ๅ‹Ÿๆ…•ๆœจ็›ฎ็ฆ็‰ง็ฉ†ๆ‹ฟๅ“ชๅ‘้’ ้‚ฃๅจœ็บณๆฐ–ไนƒๅฅถ่€ๅฅˆๅ—็”ท้šพๅ›ŠๆŒ ่„‘ๆผ้—นๆท–ๅ‘ข้ฆๅ†…ๅซฉ่ƒฝๅฆฎ้œ“ๅ€ชๆณฅๅฐผๆ‹Ÿไฝ ๅŒฟ่…ป้€†ๆบบ่”ซๆ‹ˆๅนด็ขพๆ’ตๆปๅฟตๅจ˜้…ฟ้ธŸๅฐฟๆ่‚ๅญฝๅ•ฎ้•Š้•ๆถ…ๆ‚จๆŸ ็‹žๅ‡ๅฎ๏ฟฝ".split("");for(j=0;j!=D[196].length;++j)if(D[196][j].charCodeAt(0)!==65533){e[D[196][j]]=50176+j;d[50176+j]=D[196][j]}D[197]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่‡”่‡•่‡–่‡—่‡˜่‡™่‡š่‡›่‡œ่‡่‡ž่‡Ÿ่‡ ่‡ก่‡ข่‡ค่‡ฅ่‡ฆ่‡จ่‡ฉ่‡ซ่‡ฎ่‡ฏ่‡ฐ่‡ฑ่‡ฒ่‡ต่‡ถ่‡ท่‡ธ่‡น่‡บ่‡ฝ่‡ฟ่ˆƒ่ˆ‡่ˆˆ่ˆ‰่ˆŠ่ˆ‹่ˆŽ่ˆ่ˆ‘่ˆ“่ˆ•่ˆ–่ˆ—่ˆ˜่ˆ™่ˆš่ˆ่ˆ ่ˆค่ˆฅ่ˆฆ่ˆง่ˆฉ่ˆฎ่ˆฒ่ˆบ่ˆผ่ˆฝ่ˆฟ๏ฟฝ่‰€่‰่‰‚่‰ƒ่‰…่‰†่‰ˆ่‰Š่‰Œ่‰่‰Ž่‰่‰‘่‰’่‰“่‰”่‰•่‰–่‰—่‰™่‰›่‰œ่‰่‰ž่‰ ่‰ก่‰ข่‰ฃ่‰ค่‰ฅ่‰ฆ่‰ง่‰ฉๆ‹งๆณž็‰›ๆ‰ญ้’ฎ็บฝ่„“ๆต“ๅ†œๅผ„ๅฅดๅŠชๆ€’ๅฅณๆš–่™็–ŸๆŒชๆ‡ฆ็ณฏ่ฏบๅ“ฆๆฌง้ธฅๆฎด่—•ๅ‘•ๅถๆฒคๅ•ช่ถด็ˆฌๅธ•ๆ€•็ถๆ‹ๆŽ’็‰Œๅพ˜ๆนƒๆดพๆ”€ๆฝ˜็›˜็ฃ็›ผ็•”ๅˆคๅ›ไน“ๅบžๆ—่€ช่ƒ–ๆŠ›ๅ’†ๅˆจ็‚ฎ่ข่ท‘ๆณกๅ‘ธ่ƒšๅŸน่ฃด่ต”้™ช้…ไฝฉๆฒ›ๅ–ท็›†็ ฐๆŠจ็ƒนๆพŽๅฝญ่“ฌๆฃš็กผ็ฏท่†จๆœ‹้นๆง็ขฐๅฏ็ ’้œนๆ‰นๆŠซๅŠˆ็ตๆฏ—๏ฟฝ".split(""); +for(j=0;j!=D[197].length;++j)if(D[197][j].charCodeAt(0)!==65533){e[D[197][j]]=50432+j;d[50432+j]=D[197][j]}D[198]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่‰ช่‰ซ่‰ฌ่‰ญ่‰ฑ่‰ต่‰ถ่‰ท่‰ธ่‰ป่‰ผ่Š€่Š่Šƒ่Š…่Š†่Š‡่Š‰่ŠŒ่Š่Š“่Š”่Š•่Š–่Šš่Š›่Šž่Š ่Šข่Šฃ่Šง่Šฒ่Šต่Šถ่Šบ่Šป่Šผ่Šฟ่‹€่‹‚่‹ƒ่‹…่‹†่‹‰่‹่‹–่‹™่‹š่‹่‹ข่‹ง่‹จ่‹ฉ่‹ช่‹ฌ่‹ญ่‹ฎ่‹ฐ่‹ฒ่‹ณ่‹ต่‹ถ่‹ธ๏ฟฝ่‹บ่‹ผ่‹ฝ่‹พ่‹ฟ่Œ€่ŒŠ่Œ‹่Œ่Œ่Œ’่Œ“่Œ–่Œ˜่Œ™่Œ่Œž่ŒŸ่Œ ่Œก่Œข่Œฃ่Œค่Œฅ่Œฆ่Œฉ่Œช่Œฎ่Œฐ่Œฒ่Œท่Œป่Œฝๅ•ค่„พ็–ฒ็šฎๅŒน็—žๅƒปๅฑ่ญฌ็ฏ‡ๅ็‰‡้ช—้ฃ˜ๆผ‚็“ข็ฅจๆ’‡็žฅๆ‹ผ้ข‘่ดซๅ“่˜ไน’ๅช่‹น่ๅนณๅ‡ญ็“ถ่ฏ„ๅฑๅกๆณผ้ข‡ๅฉ†็ ด้ญ„่ฟซ็ฒ•ๅ‰–ๆ‰‘้“บไป†่Ž†่‘ก่ฉ่’ฒๅŸ”ๆœดๅœƒๆ™ฎๆตฆ่ฐฑๆ›็€‘ๆœŸๆฌบๆ –ๆˆšๅฆปไธƒๅ‡„ๆผ†ๆŸ’ๆฒๅ…ถๆฃ‹ๅฅ‡ๆญง็•ฆๅดŽ่„้ฝๆ——็ฅˆ็ฅ้ช‘่ตทๅฒ‚ไนžไผๅฏๅฅ‘็ Œๅ™จๆฐ”่ฟ„ๅผƒๆฑฝๆณฃ่ฎซๆŽ๏ฟฝ".split("");for(j=0;j!=D[198].length;++j)if(D[198][j].charCodeAt(0)!==65533){e[D[198][j]]=50688+j;d[50688+j]=D[198][j]}D[199]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่Œพ่Œฟ่่‚่„่…่ˆ่Š่‹่Œ่่Ž่“่•่–่—่˜่™่่ข่ฐ่ฑ่ฒ่ณ่ด่ต่ถ่น่บ่พ่ฟ่Ž€่Ž่Ž‚่Žƒ่Ž„่Ž‡่Žˆ่ŽŠ่Ž‹่ŽŒ่Ž่Ž่Ž่Ž‘่Ž”่Ž•่Ž–่Ž—่Ž™่Žš่Ž่ŽŸ่Žก่Žข่Žฃ่Žค่Žฅ่Žฆ่Žง่Žฌ่Žญ่Žฎ๏ฟฝ่Žฏ่Žต่Žป่Žพ่Žฟ่‚่ƒ่„่†่ˆ่‰่‹่่Ž่่‘่’่“่•่—่™่š่›่ž่ข่ฃ่ค่ฆ่ง่จ่ซ่ฌ่ญๆฐๆดฝ็‰ตๆ‰ฆ้’Ž้“…ๅƒ่ฟ็ญพไปŸ่ฐฆไนพ้ป”้’ฑ้’ณๅ‰ๆฝœ้ฃๆต…่ฐดๅ ‘ๅตŒๆฌ ๆญ‰ๆžชๅ‘›่…”็พŒๅข™่”ทๅผบๆŠขๆฉ‡้”นๆ•ฒๆ‚„ๆกฅ็žงไน”ไพจๅทง้ž˜ๆ’ฌ็ฟ˜ๅณญไฟ็ชๅˆ‡่Œ„ไธ”ๆ€ฏ็ชƒ้’ฆไพตไบฒ็งฆ็ดๅ‹ค่Šนๆ“’็ฆฝๅฏๆฒ้’่ฝปๆฐขๅ€พๅฟๆธ…ๆ“Žๆ™ดๆฐฐๆƒ…้กท่ฏทๅบ†็ผ็ฉท็ง‹ไธ˜้‚ฑ็ƒๆฑ‚ๅ›š้…‹ๆณ…่ถ‹ๅŒบ่›†ๆ›ฒ่บฏๅฑˆ้ฉฑๆธ ๏ฟฝ".split("");for(j=0;j!=D[199].length;++j)if(D[199][j].charCodeAt(0)!==65533){e[D[199][j]]=50944+j;d[50944+j]=D[199][j]}D[200]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฎ่ฏ่ณ่ด่ต่ถ่ท่บ่ป่ผ่พ่ฟ่€่‚่…่‡่ˆ่‰่Š่่’่“่”่•่–่—่™่š่›่ž่Ÿ่ ่ก่ข่ฃ่ฉ่ช่ซ่ฌ่ญ่ฎ่ฏ่ฐ่ฒ่ณ่ด่ต่ถ่ท่น่บ่ป่พ่ฟ่‘€่‘่‘‚่‘ƒ่‘„่‘…่‘‡่‘ˆ่‘‰๏ฟฝ่‘Š่‘‹่‘Œ่‘่‘Ž่‘่‘่‘’่‘“่‘”่‘•่‘–่‘˜่‘่‘ž่‘Ÿ่‘ ่‘ข่‘ค่‘ฅ่‘ฆ่‘ง่‘จ่‘ช่‘ฎ่‘ฏ่‘ฐ่‘ฒ่‘ด่‘ท่‘น่‘ป่‘ผๅ–ๅจถ้พ‹่ถฃๅŽปๅœˆ้ขงๆƒ้†›ๆณ‰ๅ…จ็—Šๆ‹ณ็ŠฌๅˆธๅŠ็ผบ็‚”็˜ธๅด้นŠๆฆท็กฎ้›€่ฃ™็พค็„ถ็‡ƒๅ†‰ๆŸ“็“คๅฃคๆ”˜ๅšท่ฎฉ้ฅถๆ‰ฐ็ป•ๆƒน็ƒญๅฃฌไปไบบๅฟ้Ÿงไปป่ฎคๅˆƒๅฆŠ็บซๆ‰”ไปๆ—ฅๆˆŽ่Œธ่“‰่ฃ่ž็†”ๆบถๅฎน็ป’ๅ†—ๆ‰ๆŸ”่‚‰่Œน่ •ๅ„’ๅญบๅฆ‚่พฑไนณๆฑๅ…ฅ่คฅ่ฝฏ้˜ฎ่•Š็‘ž้”้—ฐๆถฆ่‹ฅๅผฑๆ’’ๆด’่จ่…ฎ้ณƒๅกž่ต›ไธ‰ๅ๏ฟฝ".split("");for(j=0;j!=D[200].length;++j)if(D[200][j].charCodeAt(0)!==65533){e[D[200][j]]=51200+j;d[51200+j]=D[200][j]}D[201]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่‘ฝ่‘พ่‘ฟ่’€่’่’ƒ่’„่’…่’†่’Š่’่’่’่’‘่’’่’“่’”่’•่’–่’˜่’š่’›่’่’ž่’Ÿ่’ ่’ข่’ฃ่’ค่’ฅ่’ฆ่’ง่’จ่’ฉ่’ช่’ซ่’ฌ่’ญ่’ฎ่’ฐ่’ฑ่’ณ่’ต่’ถ่’ท่’ป่’ผ่’พ่“€่“‚่“ƒ่“…่“†่“‡่“ˆ่“‹่“Œ่“Ž่“่“’่“”่“•่“—๏ฟฝ่“˜่“™่“š่“›่“œ่“ž่“ก่“ข่“ค่“ง่“จ่“ฉ่“ช่“ซ่“ญ่“ฎ่“ฏ่“ฑ่“ฒ่“ณ่“ด่“ต่“ถ่“ท่“ธ่“น่“บ่“ป่“ฝ่“พ่”€่”่”‚ไผžๆ•ฃๆก‘ๅ—“ไธงๆ”้ชšๆ‰ซๅซ‚็‘Ÿ่‰ฒๆถฉๆฃฎๅƒง่ŽŽ็ ‚ๆ€ๅˆนๆฒ™็บฑๅ‚ปๅ•ฅ็…ž็ญ›ๆ™’็Š่‹ซๆ‰ๅฑฑๅˆ ็…ฝ่กซ้—ช้™•ๆ“…่ตก่†ณๅ–„ๆฑ•ๆ‰‡็ผฎๅข’ไผคๅ•†่ตๆ™ŒไธŠๅฐš่ฃณๆขขๆŽ็จ็ƒง่Šๅ‹บ้Ÿถๅฐ‘ๅ“จ้‚ต็ปๅฅข่ตŠ่›‡่ˆŒ่ˆ่ตฆๆ‘„ๅฐ„ๆ…‘ๆถ‰็คพ่ฎพ็ ท็”ณๅ‘ปไผธ่บซๆทฑๅจ ็ป…็ฅžๆฒˆๅฎกๅฉถ็”š่‚พๆ…Žๆธ—ๅฃฐ็”Ÿ็”ฅ็‰ฒๅ‡็ปณ๏ฟฝ".split("");for(j=0;j!=D[201].length;++j)if(D[201][j].charCodeAt(0)!==65533){e[D[201][j]]=51456+j;d[51456+j]=D[201][j]}D[202]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่”ƒ่”„่”…่”†่”‡่”ˆ่”‰่”Š่”‹่”่”Ž่”่”่”’่””่”•่”–่”˜่”™่”›่”œ่”่”ž่” ่”ข่”ฃ่”ค่”ฅ่”ฆ่”ง่”จ่”ฉ่”ช่”ญ่”ฎ่”ฏ่”ฐ่”ฑ่”ฒ่”ณ่”ด่”ต่”ถ่”พ่”ฟ่•€่•่•‚่•„่•…่•†่•‡่•‹่•Œ่•่•Ž่•่•่•‘่•’่•“่•”่••๏ฟฝ่•—่•˜่•š่•›่•œ่•่•Ÿ่• ่•ก่•ข่•ฃ่•ฅ่•ฆ่•ง่•ฉ่•ช่•ซ่•ฌ่•ญ่•ฎ่•ฏ่•ฐ่•ฑ่•ณ่•ต่•ถ่•ท่•ธ่•ผ่•ฝ่•ฟ่–€่–็œ็››ๅ‰ฉ่ƒœๅœฃๅธˆๅคฑ็‹ฎๆ–ฝๆนฟ่ฏ—ๅฐธ่™ฑๅ็Ÿณๆ‹พๆ—ถไป€้ฃŸ่š€ๅฎž่ฏ†ๅฒ็ŸขไฝฟๅฑŽ้ฉถๅง‹ๅผ็คบๅฃซไธ–ๆŸฟไบ‹ๆ‹ญ่ช“้€ๅŠฟๆ˜ฏๅ—œๅ™ฌ้€‚ไป•ไพ้‡Š้ฅฐๆฐๅธ‚ๆƒๅฎค่ง†่ฏ•ๆ”ถๆ‰‹้ฆ–ๅฎˆๅฏฟๆŽˆๅ”ฎๅ—็˜ฆๅ…ฝ่”ฌๆžขๆขณๆฎŠๆŠ’่พ“ๅ”่ˆ’ๆท‘็–ไนฆ่ตŽๅญฐ็†Ÿ่–ฏๆš‘ๆ›™็ฝฒ่œ€้ป้ผ ๅฑžๆœฏ่ฟฐๆ ‘ๆŸๆˆ็ซ–ๅข…ๅบถๆ•ฐๆผฑ๏ฟฝ".split("");for(j=0;j!=D[202].length;++j)if(D[202][j].charCodeAt(0)!==65533){e[D[202][j]]=51712+j;d[51712+j]=D[202][j]}D[203]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่–‚่–ƒ่–†่–ˆ่–‰่–Š่–‹่–Œ่–่–Ž่–่–‘่–’่–“่–”่–•่––่–—่–˜่–™่–š่–่–ž่–Ÿ่– ่–ก่–ข่–ฃ่–ฅ่–ฆ่–ง่–ฉ่–ซ่–ฌ่–ญ่–ฑ่–ฒ่–ณ่–ด่–ต่–ถ่–ธ่–บ่–ป่–ผ่–ฝ่–พ่–ฟ่—€่—‚่—ƒ่—„่—…่—†่—‡่—ˆ่—Š่—‹่—Œ่—่—Ž่—‘่—’๏ฟฝ่—”่—–่——่—˜่—™่—š่—›่—่—ž่—Ÿ่— ่—ก่—ข่—ฃ่—ฅ่—ฆ่—ง่—จ่—ช่—ซ่—ฌ่—ญ่—ฎ่—ฏ่—ฐ่—ฑ่—ฒ่—ณ่—ด่—ต่—ถ่—ท่—ธๆ•ๅˆท่€ๆ‘”่กฐ็”ฉๅธ…ๆ “ๆ‹ด้œœๅŒ็ˆฝ่ฐๆฐด็ก็จŽๅฎ็žฌ้กบ่ˆœ่ฏด็ก•ๆœ”็ƒๆ–ฏๆ’•ๅ˜ถๆ€็งๅธไธๆญป่‚†ๅฏบๅ—ฃๅ››ไผบไผผ้ฅฒๅทณๆพ่€ธๆ€‚้ข‚้€ๅฎ‹่ฎผ่ฏตๆœ่‰˜ๆ“žๅ—ฝ่‹้…ฅไฟ—็ด ้€Ÿ็ฒŸๅƒณๅก‘ๆบฏๅฎฟ่ฏ‰่‚ƒ้…ธ่’œ็ฎ—่™ฝ้š‹้š็ปฅ้ซ“็ขŽๅฒ็ฉ—้‚้šง็ฅŸๅญ™ๆŸ็ฌ‹่“‘ๆขญๅ”†็ผฉ็็ดข้”ๆ‰€ๅกŒไป–ๅฎƒๅฅนๅก”๏ฟฝ".split("");for(j=0;j!=D[203].length;++j)if(D[203][j].charCodeAt(0)!==65533){e[D[203][j]]=51968+j;d[51968+j]=D[203][j]}D[204]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่—น่—บ่—ผ่—ฝ่—พ่˜€่˜่˜‚่˜ƒ่˜„่˜†่˜‡่˜ˆ่˜‰่˜Š่˜‹่˜Œ่˜่˜Ž่˜่˜่˜’่˜“่˜”่˜•่˜—่˜˜่˜™่˜š่˜›่˜œ่˜่˜ž่˜Ÿ่˜ ่˜ก่˜ข่˜ฃ่˜ค่˜ฅ่˜ฆ่˜จ่˜ช่˜ซ่˜ฌ่˜ญ่˜ฎ่˜ฏ่˜ฐ่˜ฑ่˜ฒ่˜ณ่˜ด่˜ต่˜ถ่˜ท่˜น่˜บ่˜ป่˜ฝ่˜พ่˜ฟ่™€๏ฟฝ่™่™‚่™ƒ่™„่™…่™†่™‡่™ˆ่™‰่™Š่™‹่™Œ่™’่™“่™•่™–่™—่™˜่™™่™›่™œ่™่™Ÿ่™ ่™ก่™ฃ่™ค่™ฅ่™ฆ่™ง่™จ่™ฉ่™ช็ญๆŒž่น‹่ธ่ƒŽ่‹”ๆŠฌๅฐๆณฐ้…žๅคชๆ€ๆฑฐๅๆ‘Š่ดช็˜ซๆปฉๅ›ๆช€็—ฐๆฝญ่ฐญ่ฐˆๅฆๆฏฏ่ข’็ขณๆŽขๅน็‚ญๆฑคๅก˜ๆชๅ ‚ๆฃ ่†›ๅ”็ณ–ๅ€˜่บบๆทŒ่ถŸ็ƒซๆŽๆถ›ๆป”็ปฆ่„ๆกƒ้€ƒๆท˜้™ถ่ฎจๅฅ—็‰น่—ค่…พ็–ผ่ชŠๆขฏๅ‰”่ธข้”‘ๆ้ข˜่น„ๅ•ผไฝ“ๆ›ฟๅšๆƒ•ๆถ•ๅ‰ƒๅฑ‰ๅคฉๆทปๅกซ็”ฐ็”œๆฌ่ˆ”่…†ๆŒ‘ๆก่ฟข็œบ่ทณ่ดด้“ๅธ–ๅŽ…ๅฌ็ƒƒ๏ฟฝ".split("");for(j=0;j!=D[204].length;++j)if(D[204][j].charCodeAt(0)!==65533){e[D[204][j]]=52224+j;d[52224+j]=D[204][j]}D[205]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่™ญ่™ฏ่™ฐ่™ฒ่™ณ่™ด่™ต่™ถ่™ท่™ธ่šƒ่š„่š…่š†่š‡่šˆ่š‰่šŽ่š่š่š‘่š’่š”่š–่š—่š˜่š™่šš่š›่šž่šŸ่š ่šก่šข่šฅ่šฆ่šซ่šญ่šฎ่šฒ่šณ่šท่šธ่šน่šป่šผ่šฝ่šพ่šฟ่›่›‚่›ƒ่›…่›ˆ่›Œ่›่›’่›“่›•่›–่›—่›š่›œ๏ฟฝ่›่› ่›ก่›ข่›ฃ่›ฅ่›ฆ่›ง่›จ่›ช่›ซ่›ฌ่›ฏ่›ต่›ถ่›ท่›บ่›ป่›ผ่›ฝ่›ฟ่œ่œ„่œ…่œ†่œ‹่œŒ่œŽ่œ่œ่œ‘่œ”่œ–ๆฑ€ๅปทๅœไบญๅบญๆŒบ่‰‡้€šๆก้…ฎ็žณๅŒ้“œๅฝค็ซฅๆกถๆ…็ญ’็ปŸ็—›ๅทๆŠ•ๅคด้€ๅ‡ธ็งƒ็ชๅ›พๅพ’้€”ๆถ‚ๅฑ ๅœŸๅๅ…”ๆนๅ›ขๆŽจ้ข“่…ฟ่œ•่คช้€€ๅžๅฑฏ่‡€ๆ‹–ๆ‰˜่„ฑ้ธต้™€้ฉฎ้ฉผๆคญๅฆฅๆ‹“ๅ”พๆŒ–ๅ“‡่›™ๆดผๅจƒ็“ฆ่ขœๆญชๅค–่ฑŒๅผฏๆนพ็Žฉ้กฝไธธ็ƒทๅฎŒ็ข—ๆŒฝๆ™š็š–ๆƒ‹ๅฎ›ๅฉ‰ไธ‡่…•ๆฑช็Ž‹ไบกๆž‰็ฝ‘ๅพ€ๆ—บๆœ›ๅฟ˜ๅฆ„ๅจ๏ฟฝ".split("");for(j=0;j!=D[205].length;++j)if(D[205][j].charCodeAt(0)!==65533){e[D[205][j]]=52480+j;d[52480+j]=D[205][j]}D[206]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่œ™่œ›่œ่œŸ่œ ่œค่œฆ่œง่œจ่œช่œซ่œฌ่œญ่œฏ่œฐ่œฒ่œณ่œต่œถ่œธ่œน่œบ่œผ่œฝ่€่่‚่ƒ่„่…่†่Š่‹่่่่‘่’่”่•่–่˜่š่›่œ่่ž่Ÿ่ก่ข่ฆ่ง่จ่ฉ่ช่ซ่ฌ่ญ่ฏ่ฑ่ฒ่ณ่ต๏ฟฝ่ท่ธ่น่บ่ฟ่ž€่ž่ž„่ž†่ž‡่ž‰่žŠ่žŒ่žŽ่ž่ž่ž‘่ž’่ž”่ž•่ž–่ž˜่ž™่žš่ž›่žœ่ž่žž่ž ่žก่žข่žฃ่žคๅทๅพฎๅฑ้Ÿฆ่ฟๆก…ๅ›ดๅ”ฏๆƒŸไธบๆฝ็ปด่‹‡่Žๅง”ไผŸไผชๅฐพ็บฌๆœช่”šๅ‘ณ็•่ƒƒๅ–‚้ญไฝๆธญ่ฐ“ๅฐ‰ๆ…ฐๅซ็˜Ÿๆธฉ่šŠๆ–‡้—ป็บนๅป็จณ็ดŠ้—ฎๅ—ก็ฟ็“ฎๆŒ่œ—ๆถก็ชๆˆ‘ๆ–กๅงๆกๆฒƒๅทซๅ‘œ้’จไนŒๆฑก่ฏฌๅฑ‹ๆ— ่Šœๆขงๅพๅดๆฏ‹ๆญฆไบ”ๆ‚ๅˆ่ˆžไผไพฎๅžๆˆŠ้›พๆ™ค็‰ฉๅ‹ฟๅŠกๆ‚Ÿ่ฏฏๆ˜”็†™ๆž่ฅฟ็ก’็Ÿฝๆ™ฐๅ˜ปๅธ้”ก็‰บ๏ฟฝ".split("");for(j=0;j!=D[206].length;++j)if(D[206][j].charCodeAt(0)!==65533){e[D[206][j]]=52736+j;d[52736+j]=D[206][j]}D[207]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่žฅ่žฆ่žง่žฉ่žช่žฎ่žฐ่žฑ่žฒ่žด่žถ่žท่žธ่žน่žป่žผ่žพ่žฟ่Ÿ่Ÿ‚่Ÿƒ่Ÿ„่Ÿ…่Ÿ‡่Ÿˆ่Ÿ‰่ŸŒ่Ÿ่ŸŽ่Ÿ่Ÿ่Ÿ”่Ÿ•่Ÿ–่Ÿ—่Ÿ˜่Ÿ™่Ÿš่Ÿœ่Ÿ่Ÿž่ŸŸ่Ÿก่Ÿข่Ÿฃ่Ÿค่Ÿฆ่Ÿง่Ÿจ่Ÿฉ่Ÿซ่Ÿฌ่Ÿญ่Ÿฏ่Ÿฐ่Ÿฑ่Ÿฒ่Ÿณ่Ÿด่Ÿต่Ÿถ่Ÿท่Ÿธ๏ฟฝ่Ÿบ่Ÿป่Ÿผ่Ÿฝ่Ÿฟ่ €่ ่ ‚่ „่ …่ †่ ‡่ ˆ่ ‰่ ‹่ Œ่ ่ Ž่ ่ ่ ‘่ ’่ ”่ —่ ˜่ ™่ š่ œ่ ่ ž่ Ÿ่  ่ ฃ็จ€ๆฏๅธŒๆ‚‰่†ๅค•ๆƒœ็†„็ƒฏๆบชๆฑ็Š€ๆช„่ขญๅธญไน ๅชณๅ–œ้“ฃๆด—็ณป้š™ๆˆ็ป†็žŽ่™พๅŒฃ้œž่พ–ๆš‡ๅณกไพ ็‹ญไธ‹ๅŽฆๅคๅ“ๆŽ€้”จๅ…ˆไป™้ฒœ็บคๅ’ธ่ดค่ก”่ˆท้—ฒๆถŽๅผฆๅซŒๆ˜พ้™ฉ็Žฐ็ŒฎๅŽฟ่…บ้ฆ…็พกๅฎช้™ท้™็บฟ็›ธๅŽข้•ถ้ฆ™็ฎฑ่ฅ„ๆน˜ไนก็ฟ”็ฅฅ่ฏฆๆƒณๅ“ไบซ้กนๅททๆฉกๅƒๅ‘่ฑก่ง็ก้œ„ๅ‰Šๅ“ฎๅšฃ้”€ๆถˆๅฎตๆท†ๆ™“๏ฟฝ".split("");for(j=0;j!=D[207].length;++j)if(D[207][j].charCodeAt(0)!==65533){e[D[207][j]]=52992+j;d[52992+j]=D[207][j]}D[208]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ ค่ ฅ่ ฆ่ ง่ จ่ ฉ่ ช่ ซ่ ฌ่ ญ่ ฎ่ ฏ่ ฐ่ ฑ่ ณ่ ด่ ต่ ถ่ ท่ ธ่ บ่ ป่ ฝ่ พ่ ฟ่ก่ก‚่กƒ่ก†่ก‡่กˆ่ก‰่กŠ่ก‹่กŽ่ก่ก่ก‘่ก’่ก“่ก•่ก–่ก˜่กš่ก›่กœ่ก่กž่กŸ่ก ่กฆ่กง่กช่กญ่กฏ่กฑ่กณ่กด่กต่กถ่กธ่กน่กบ๏ฟฝ่กป่กผ่ข€่ขƒ่ข†่ข‡่ข‰่ขŠ่ขŒ่ขŽ่ข่ข่ข‘่ข“่ข”่ข•่ข—่ข˜่ข™่ขš่ข›่ข่ขž่ขŸ่ข ่ขก่ขฃ่ขฅ่ขฆ่ขง่ขจ่ขฉ่ขชๅฐๅญๆ ก่‚–ๅ•ธ็ฌ‘ๆ•ˆๆฅ”ไบ›ๆญ‡่Ž้ž‹ๅๆŒŸๆบ้‚ชๆ–œ่ƒ่ฐๅ†™ๆขฐๅธ่Ÿนๆ‡ˆๆณ„ๆณป่ฐขๅฑ‘่–ช่Šฏ้”Œๆฌฃ่พ›ๆ–ฐๅฟปๅฟƒไฟก่ก…ๆ˜Ÿ่…ฅ็Œฉๆƒบๅ…ดๅˆ‘ๅž‹ๅฝข้‚ข่กŒ้†’ๅนธๆๆ€งๅง“ๅ…„ๅ‡ถ่ƒธๅŒˆๆฑน้›„็†Šไผ‘ไฟฎ็พžๆœฝๅ—…้”ˆ็ง€่ข–็ปฃๅขŸๆˆŒ้œ€่™šๅ˜˜้กปๅพ่ฎธ่“„้…—ๅ™ๆ—ญๅบ็•œๆค็ตฎๅฉฟ็ปช็ปญ่ฝฉๅ–งๅฎฃๆ‚ฌๆ—‹็Ž„๏ฟฝ".split("");for(j=0;j!=D[208].length;++j)if(D[208][j].charCodeAt(0)!==65533){e[D[208][j]]=53248+j;d[53248+j]=D[208][j]}D[209]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ขฌ่ขฎ่ขฏ่ขฐ่ขฒ่ขณ่ขด่ขต่ขถ่ขธ่ขน่ขบ่ขป่ขฝ่ขพ่ขฟ่ฃ€่ฃƒ่ฃ„่ฃ‡่ฃˆ่ฃŠ่ฃ‹่ฃŒ่ฃ่ฃ่ฃ่ฃ‘่ฃ“่ฃ–่ฃ—่ฃš่ฃ›่ฃœ่ฃ่ฃž่ฃ ่ฃก่ฃฆ่ฃง่ฃฉ่ฃช่ฃซ่ฃฌ่ฃญ่ฃฎ่ฃฏ่ฃฒ่ฃต่ฃถ่ฃท่ฃบ่ฃป่ฃฝ่ฃฟ่ค€่ค่คƒ่ค„่ค…่ค†่ค‡่คˆ๏ฟฝ่ค‰่ค‹่คŒ่ค่คŽ่ค่ค‘่ค”่ค•่ค–่ค—่ค˜่คœ่ค่คž่คŸ่ค ่คข่คฃ่คค่คฆ่คง่คจ่คฉ่คฌ่คญ่คฎ่คฏ่คฑ่คฒ่คณ่คต่คท้€‰็™ฃ็œฉ็ปš้ด่–›ๅญฆ็ฉด้›ช่ก€ๅ‹‹็†ๅพชๆ—ฌ่ฏขๅฏป้ฉฏๅทกๆฎ‰ๆฑ›่ฎญ่ฎฏ้€Š่ฟ…ๅŽ‹ๆŠผ้ธฆ้ธญๅ‘€ไธซ่Šฝ็‰™่šœๅด–่ก™ๆถฏ้›…ๅ“‘ไบš่ฎถ็„‰ๅ’ฝ้˜‰็ƒŸๆทน็›ไธฅ็ ”่œ’ๅฒฉๅปถ่จ€้ขœ้˜Ž็‚Žๆฒฟๅฅ„ๆŽฉ็œผ่กๆผ”่‰ณๅ ฐ็‡•ๅŽŒ็ š้›ๅ”ๅฝฆ็„ฐๅฎด่ฐš้ชŒๆฎƒๅคฎ้ธฏ็งงๆจๆ‰ฌไฝฏ็–ก็พŠๆด‹้˜ณๆฐงไปฐ็—’ๅ…ปๆ ทๆผพ้‚€่…ฐๅฆ–็‘ถ๏ฟฝ".split("");for(j=0;j!=D[209].length;++j)if(D[209][j].charCodeAt(0)!==65533){e[D[209][j]]=53504+j;d[53504+j]=D[209][j]}D[210]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่คธ่คน่คบ่คป่คผ่คฝ่คพ่คฟ่ฅ€่ฅ‚่ฅƒ่ฅ…่ฅ†่ฅ‡่ฅˆ่ฅ‰่ฅŠ่ฅ‹่ฅŒ่ฅ่ฅŽ่ฅ่ฅ่ฅ‘่ฅ’่ฅ“่ฅ”่ฅ•่ฅ–่ฅ—่ฅ˜่ฅ™่ฅš่ฅ›่ฅœ่ฅ่ฅ ่ฅก่ฅข่ฅฃ่ฅค่ฅฅ่ฅง่ฅจ่ฅฉ่ฅช่ฅซ่ฅฌ่ฅญ่ฅฎ่ฅฏ่ฅฐ่ฅฑ่ฅฒ่ฅณ่ฅด่ฅต่ฅถ่ฅท่ฅธ่ฅน่ฅบ่ฅผ๏ฟฝ่ฅฝ่ฅพ่ฆ€่ฆ‚่ฆ„่ฆ…่ฆ‡่ฆˆ่ฆ‰่ฆŠ่ฆ‹่ฆŒ่ฆ่ฆŽ่ฆ่ฆ่ฆ‘่ฆ’่ฆ“่ฆ”่ฆ•่ฆ–่ฆ—่ฆ˜่ฆ™่ฆš่ฆ›่ฆœ่ฆ่ฆž่ฆŸ่ฆ ่ฆกๆ‘‡ๅฐง้ฅ็ช‘่ฐฃๅงšๅ’ฌ่ˆ€่ฏ่ฆ่€€ๆคฐๅ™Ž่€ถ็ˆท้‡Žๅ†ถไนŸ้กตๆŽ–ไธšๅถๆ›ณ่…‹ๅคœๆถฒไธ€ๅฃนๅŒปๆ–้“ฑไพไผŠ่กฃ้ขๅคท้—็งปไปช่ƒฐ็–‘ๆฒ‚ๅฎœๅงจๅฝๆค…่šๅ€šๅทฒไน™็Ÿฃไปฅ่‰บๆŠ‘ๆ˜“้‚‘ๅฑนไบฟๅฝน่‡†้€ธ่‚„็–ซไบฆ่ฃ”ๆ„ๆฏ…ๅฟ†ไน‰็›Šๆบข่ฏฃ่ฎฎ่ฐŠ่ฏ‘ๅผ‚็ฟผ็ฟŒ็ปŽ่Œต่ซๅ› ๆฎท้Ÿณ้˜ดๅงปๅŸ้“ถๆทซๅฏ…้ฅฎๅฐนๅผ•้š๏ฟฝ".split("");for(j=0;j!=D[210].length;++j)if(D[210][j].charCodeAt(0)!==65533){e[D[210][j]]=53760+j;d[53760+j]=D[210][j]}D[211]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฆข่ฆฃ่ฆค่ฆฅ่ฆฆ่ฆง่ฆจ่ฆฉ่ฆช่ฆซ่ฆฌ่ฆญ่ฆฎ่ฆฏ่ฆฐ่ฆฑ่ฆฒ่ฆณ่ฆด่ฆต่ฆถ่ฆท่ฆธ่ฆน่ฆบ่ฆป่ฆผ่ฆฝ่ฆพ่ฆฟ่ง€่งƒ่ง่ง“่ง”่ง•่ง—่ง˜่ง™่ง›่ง่งŸ่ง ่งก่งข่งค่งง่งจ่งฉ่งช่งฌ่งญ่งฎ่งฐ่งฑ่งฒ่งด่งต่งถ่งท่งธ่งน่งบ๏ฟฝ่งป่งผ่งฝ่งพ่งฟ่จ่จ‚่จƒ่จ„่จ…่จ†่จˆ่จ‰่จŠ่จ‹่จŒ่จ่จŽ่จ่จ่จ‘่จ’่จ“่จ”่จ•่จ–่จ—่จ˜่จ™่จš่จ›่จœ่จๅฐ่‹ฑๆจฑๅฉด้นฐๅบ”็ผจ่Žน่ค่ฅ่ง่‡่ฟŽ่ตข็›ˆๅฝฑ้ข–็กฌๆ˜ ๅ“Ÿๆ‹ฅไฝฃ่‡ƒ็—ˆๅบธ้›่ธŠ่›นๅ’ๆณณๆถŒๆฐธๆฟๅ‹‡็”จๅนฝไผ˜ๆ‚ ๅฟงๅฐค็”ฑ้‚ฎ้“€็Šนๆฒนๆธธ้…‰ๆœ‰ๅ‹ๅณไฝ‘้‡‰่ฏฑๅˆๅนผ่ฟ‚ๆทคไบŽ็›‚ๆฆ†่™žๆ„š่ˆ†ไฝ™ไฟž้€พ้ฑผๆ„‰ๆธๆธ”้š…ไบˆๅจฑ้›จไธŽๅฑฟ็ฆนๅฎ‡่ฏญ็พฝ็Ž‰ๅŸŸ่Š‹้ƒๅ้‡ๅ–ปๅณชๅพกๆ„ˆๆฌฒ็‹ฑ่‚ฒ่ช‰๏ฟฝ".split("");for(j=0;j!=D[211].length;++j)if(D[211][j].charCodeAt(0)!==65533){e[D[211][j]]=54016+j;d[54016+j]=D[211][j]}D[212]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่จž่จŸ่จ ่จก่จข่จฃ่จค่จฅ่จฆ่จง่จจ่จฉ่จช่จซ่จฌ่จญ่จฎ่จฏ่จฐ่จฑ่จฒ่จณ่จด่จต่จถ่จท่จธ่จน่จบ่จป่จผ่จฝ่จฟ่ฉ€่ฉ่ฉ‚่ฉƒ่ฉ„่ฉ…่ฉ†่ฉ‡่ฉ‰่ฉŠ่ฉ‹่ฉŒ่ฉ่ฉŽ่ฉ่ฉ่ฉ‘่ฉ’่ฉ“่ฉ”่ฉ•่ฉ–่ฉ—่ฉ˜่ฉ™่ฉš่ฉ›่ฉœ่ฉ่ฉž๏ฟฝ่ฉŸ่ฉ ่ฉก่ฉข่ฉฃ่ฉค่ฉฅ่ฉฆ่ฉง่ฉจ่ฉฉ่ฉช่ฉซ่ฉฌ่ฉญ่ฉฎ่ฉฏ่ฉฐ่ฉฑ่ฉฒ่ฉณ่ฉด่ฉต่ฉถ่ฉท่ฉธ่ฉบ่ฉป่ฉผ่ฉฝ่ฉพ่ฉฟ่ช€ๆตดๅฏ“่ฃ•้ข„่ฑซ้ฉญ้ธณๆธŠๅ†คๅ…ƒๅžฃ่ขๅŽŸๆด่พ•ๅ›ญๅ‘˜ๅœ†็Œฟๆบ็ผ˜่ฟœ่‹‘ๆ„ฟๆ€จ้™ขๆ›ฐ็บฆ่ถŠ่ทƒ้’ฅๅฒณ็ฒคๆœˆๆ‚ฆ้˜…่€˜ไบ‘้ƒงๅŒ€้™จๅ…่ฟ่•ด้…ๆ™•้Ÿตๅญ•ๅŒ็ ธๆ‚ๆ ฝๅ“‰็พๅฎฐ่ฝฝๅ†ๅœจๅ’ฑๆ”’ๆš‚่ตž่ตƒ่„่‘ฌ้ญ็ณŸๅ‡ฟ่—ปๆžฃๆ—ฉๆพก่šค่บๅ™ช้€ ็š‚็ถ็‡ฅ่ดฃๆ‹ฉๅˆ™ๆณฝ่ดผๆ€Žๅขžๆ†Žๆ›พ่ต ๆ‰Žๅ–ณๆธฃๆœญ่ฝง๏ฟฝ".split("");for(j=0;j!=D[212].length;++j)if(D[212][j].charCodeAt(0)!==65533){e[D[212][j]]=54272+j;d[54272+j]=D[212][j]}D[213]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ช่ช‚่ชƒ่ช„่ช…่ช†่ช‡่ชˆ่ช‹่ชŒ่ช่ชŽ่ช่ช่ช‘่ช’่ช”่ช•่ช–่ช—่ช˜่ช™่ชš่ช›่ชœ่ช่ชž่ชŸ่ช ่ชก่ชข่ชฃ่ชค่ชฅ่ชฆ่ชง่ชจ่ชฉ่ชช่ชซ่ชฌ่ชญ่ชฎ่ชฏ่ชฐ่ชฑ่ชฒ่ชณ่ชด่ชต่ชถ่ชท่ชธ่ชน่ชบ่ชป่ชผ่ชฝ่ชพ่ชฟ่ซ€่ซ่ซ‚๏ฟฝ่ซƒ่ซ„่ซ…่ซ†่ซ‡่ซˆ่ซ‰่ซŠ่ซ‹่ซŒ่ซ่ซŽ่ซ่ซ่ซ‘่ซ’่ซ“่ซ”่ซ•่ซ–่ซ—่ซ˜่ซ™่ซš่ซ›่ซœ่ซ่ซž่ซŸ่ซ ่ซก่ซข่ซฃ้“ก้—ธ็œจๆ …ๆฆจๅ’‹ไน็‚ธ่ฏˆๆ‘˜ๆ–‹ๅฎ…็ช„ๅ€บๅฏจ็žปๆฏก่ฉน็ฒ˜ๆฒพ็›ๆ–ฉ่พ—ๅดญๅฑ•่˜ธๆ ˆๅ ๆˆ˜็ซ™ๆน›็ปฝๆจŸ็ซ ๅฝฐๆผณๅผ ๆŽŒๆถจๆ–ไธˆๅธ่ดฆไป—่ƒ€็˜ด้šœๆ‹›ๆ˜ญๆ‰พๆฒผ่ตต็…ง็ฝฉๅ…†่‚‡ๅฌ้ฎๆŠ˜ๅ“ฒ่›ฐ่พ™่€…้”—่”—่ฟ™ๆต™็ๆ–Ÿ็œŸ็”„็ ง่‡ป่ดž้’ˆไพฆๆž•็–น่ฏŠ้œ‡ๆŒฏ้•‡้˜ต่’ธๆŒฃ็ๅพ็‹ฐไบ‰ๆ€”ๆ•ดๆ‹ฏๆญฃๆ”ฟ๏ฟฝ".split("");for(j=0;j!=D[213].length;++j)if(D[213][j].charCodeAt(0)!==65533){e[D[213][j]]=54528+j;d[54528+j]=D[213][j]}D[214]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ซค่ซฅ่ซฆ่ซง่ซจ่ซฉ่ซช่ซซ่ซฌ่ซญ่ซฎ่ซฏ่ซฐ่ซฑ่ซฒ่ซณ่ซด่ซต่ซถ่ซท่ซธ่ซน่ซบ่ซป่ซผ่ซฝ่ซพ่ซฟ่ฌ€่ฌ่ฌ‚่ฌƒ่ฌ„่ฌ…่ฌ†่ฌˆ่ฌ‰่ฌŠ่ฌ‹่ฌŒ่ฌ่ฌŽ่ฌ่ฌ่ฌ‘่ฌ’่ฌ“่ฌ”่ฌ•่ฌ–่ฌ—่ฌ˜่ฌ™่ฌš่ฌ›่ฌœ่ฌ่ฌž่ฌŸ่ฌ ่ฌก่ฌข่ฌฃ๏ฟฝ่ฌค่ฌฅ่ฌง่ฌจ่ฌฉ่ฌช่ฌซ่ฌฌ่ฌญ่ฌฎ่ฌฏ่ฌฐ่ฌฑ่ฌฒ่ฌณ่ฌด่ฌต่ฌถ่ฌท่ฌธ่ฌน่ฌบ่ฌป่ฌผ่ฌฝ่ฌพ่ฌฟ่ญ€่ญ่ญ‚่ญƒ่ญ„่ญ…ๅธง็—‡้ƒ‘่ฏ่Šๆžๆ”ฏๅฑ่œ˜็Ÿฅ่‚ข่„‚ๆฑไน‹็ป‡่Œ็›ดๆคๆฎ–ๆ‰งๅ€ผไพ„ๅ€ๆŒ‡ๆญข่ถพๅชๆ—จ็บธๅฟ—ๆŒšๆŽท่‡ณ่‡ด็ฝฎๅธœๅณ™ๅˆถๆ™บ็งฉ็จš่ดจ็‚™็—”ๆปžๆฒป็ช’ไธญ็›…ๅฟ ้’Ÿ่กท็ปˆ็ง่‚ฟ้‡ไปฒไผ—่ˆŸๅ‘จๅทžๆดฒ่ฏŒ็ฒฅ่ฝด่‚˜ๅธšๅ’’็šฑๅฎ™ๆ˜ผ้ชค็ ๆ ช่››ๆœฑ็Œช่ฏธ่ฏ›้€็ซน็ƒ›็…ฎๆ‹„็žฉๅ˜ฑไธป่‘—ๆŸฑๅŠฉ่›€่ดฎ้“ธ็ญ‘๏ฟฝ".split("");for(j=0;j!=D[214].length;++j)if(D[214][j].charCodeAt(0)!==65533){e[D[214][j]]=54784+j;d[54784+j]=D[214][j]}D[215]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ญ†่ญ‡่ญˆ่ญ‰่ญŠ่ญ‹่ญŒ่ญ่ญŽ่ญ่ญ่ญ‘่ญ’่ญ“่ญ”่ญ•่ญ–่ญ—่ญ˜่ญ™่ญš่ญ›่ญœ่ญ่ญž่ญŸ่ญ ่ญก่ญข่ญฃ่ญค่ญฅ่ญง่ญจ่ญฉ่ญช่ญซ่ญญ่ญฎ่ญฏ่ญฐ่ญฑ่ญฒ่ญณ่ญด่ญต่ญถ่ญท่ญธ่ญน่ญบ่ญป่ญผ่ญฝ่ญพ่ญฟ่ฎ€่ฎ่ฎ‚่ฎƒ่ฎ„่ฎ…่ฎ†๏ฟฝ่ฎ‡่ฎˆ่ฎ‰่ฎŠ่ฎ‹่ฎŒ่ฎ่ฎŽ่ฎ่ฎ่ฎ‘่ฎ’่ฎ“่ฎ”่ฎ•่ฎ–่ฎ—่ฎ˜่ฎ™่ฎš่ฎ›่ฎœ่ฎ่ฎž่ฎŸ่ฎฌ่ฎฑ่ฎป่ฏ‡่ฏ่ฏช่ฐ‰่ฐžไฝๆณจ็ฅ้ฉปๆŠ“็ˆชๆ‹ฝไธ“็ –่ฝฌๆ’ฐ่ตš็ฏ†ๆกฉๅบ„่ฃ…ๅฆ†ๆ’žๅฃฎ็ŠถๆคŽ้”ฅ่ฟฝ่ต˜ๅ ็ผ€่ฐ†ๅ‡†ๆ‰ๆ‹™ๅ“ๆกŒ็ข่Œ้…Œๅ•„็€็ผๆตŠๅ…นๅ’จ่ต„ๅงฟๆป‹ๆท„ๅญœ็ดซไป”็ฑฝๆป“ๅญ่‡ชๆธๅญ—้ฌƒๆฃ•่ธชๅฎ—็ปผๆ€ป็บต้‚น่ตฐๅฅๆ็งŸ่ถณๅ’ๆ—็ฅ–่ฏ…้˜ป็ป„้’ป็บ‚ๅ˜ด้†‰ๆœ€็ฝชๅฐŠ้ตๆ˜จๅทฆไฝๆŸžๅšไฝœๅๅบง๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[215].length;++j)if(D[215][j].charCodeAt(0)!==65533){e[D[215][j]]=55040+j;d[55040+j]=D[215][j]}D[216]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฐธ่ฐน่ฐบ่ฐป่ฐผ่ฐฝ่ฐพ่ฐฟ่ฑ€่ฑ‚่ฑƒ่ฑ„่ฑ…่ฑˆ่ฑŠ่ฑ‹่ฑ่ฑŽ่ฑ่ฑ่ฑ‘่ฑ’่ฑ“่ฑ”่ฑ–่ฑ—่ฑ˜่ฑ™่ฑ›่ฑœ่ฑ่ฑž่ฑŸ่ฑ ่ฑฃ่ฑค่ฑฅ่ฑฆ่ฑง่ฑจ่ฑฉ่ฑฌ่ฑญ่ฑฎ่ฑฏ่ฑฐ่ฑฑ่ฑฒ่ฑด่ฑต่ฑถ่ฑท่ฑป่ฑผ่ฑฝ่ฑพ่ฑฟ่ฒ€่ฒ่ฒƒ่ฒ„่ฒ†่ฒ‡๏ฟฝ่ฒˆ่ฒ‹่ฒ่ฒŽ่ฒ่ฒ่ฒ‘่ฒ’่ฒ“่ฒ•่ฒ–่ฒ—่ฒ™่ฒš่ฒ›่ฒœ่ฒ่ฒž่ฒŸ่ฒ ่ฒก่ฒข่ฒฃ่ฒค่ฒฅ่ฒฆ่ฒง่ฒจ่ฒฉ่ฒช่ฒซ่ฒฌ่ฒญไบไธŒๅ…€ไธๅปฟๅ…ไธ•ไบ˜ไธž้ฌฒๅญฌๅ™ฉไธจ็ฆบไธฟๅŒ•ไน‡ๅคญ็ˆปๅฎๆฐๅ›Ÿ่ƒค้ฆ—ๆฏ“็พ้ผ—ไธถไบŸ้ผไนœไนฉไบ“่Šˆๅญ›ๅ•ฌๅ˜ไป„ๅŽๅŽๅŽฃๅŽฅๅŽฎ้ฅ่ตๅŒšๅตๅŒฆๅŒฎๅŒพ่ตœๅฆๅฃๅˆ‚ๅˆˆๅˆŽๅˆญๅˆณๅˆฟๅ‰€ๅ‰Œๅ‰žๅ‰กๅ‰œ่’ฏๅ‰ฝๅŠ‚ๅŠๅŠๅŠ“ๅ†‚็ฝ”ไบปไปƒไป‰ไป‚ไปจไปกไปซไปžไผ›ไปณไผขไฝคไปตไผฅไผงไผ‰ไผซไฝžไฝงๆ”ธไฝšไฝ๏ฟฝ".split("");for(j=0;j!=D[216].length;++j)if(D[216][j].charCodeAt(0)!==65533){e[D[216][j]]=55296+j;d[55296+j]=D[216][j]}D[217]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฒฎ่ฒฏ่ฒฐ่ฒฑ่ฒฒ่ฒณ่ฒด่ฒต่ฒถ่ฒท่ฒธ่ฒน่ฒบ่ฒป่ฒผ่ฒฝ่ฒพ่ฒฟ่ณ€่ณ่ณ‚่ณƒ่ณ„่ณ…่ณ†่ณ‡่ณˆ่ณ‰่ณŠ่ณ‹่ณŒ่ณ่ณŽ่ณ่ณ่ณ‘่ณ’่ณ“่ณ”่ณ•่ณ–่ณ—่ณ˜่ณ™่ณš่ณ›่ณœ่ณ่ณž่ณŸ่ณ ่ณก่ณข่ณฃ่ณค่ณฅ่ณฆ่ณง่ณจ่ณฉ่ณช่ณซ่ณฌ๏ฟฝ่ณญ่ณฎ่ณฏ่ณฐ่ณฑ่ณฒ่ณณ่ณด่ณต่ณถ่ณท่ณธ่ณน่ณบ่ณป่ณผ่ณฝ่ณพ่ณฟ่ด€่ด่ด‚่ดƒ่ด„่ด…่ด†่ด‡่ดˆ่ด‰่ดŠ่ด‹่ดŒ่ดไฝŸไฝ—ไผฒไผฝไฝถไฝดไพ‘ไพ‰ไพƒไพไฝพไฝปไพชไฝผไพฌไพ”ไฟฆไฟจไฟชไฟ…ไฟšไฟฃไฟœไฟ‘ไฟŸไฟธๅ€ฉๅŒไฟณๅ€ฌๅ€ๅ€ฎๅ€ญไฟพๅ€œๅ€Œๅ€ฅๅ€จๅพๅƒๅ•ๅˆๅŽๅฌๅปๅ‚ฅๅ‚งๅ‚ฉๅ‚บๅƒ–ๅ„†ๅƒญๅƒฌๅƒฆๅƒฎๅ„‡ๅ„‹ไปๆฐฝไฝ˜ไฝฅไฟŽ้พ ๆฑ†็ฑดๅ…ฎๅทฝ้ป‰้ฆ˜ๅ†ๅค”ๅ‹นๅŒ่จ‡ๅŒๅ‡ซๅค™ๅ…•ไบ ๅ…–ไบณ่กฎ่ขคไบต่„”่ฃ’็ฆ€ๅฌด่ ƒ็พธๅ†ซๅ†ฑๅ†ฝๅ†ผ๏ฟฝ".split("");for(j=0;j!=D[217].length;++j)if(D[217][j].charCodeAt(0)!==65533){e[D[217][j]]=55552+j;d[55552+j]=D[217][j]}D[218]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ดŽ่ด่ด่ด‘่ด’่ด“่ด”่ด•่ด–่ด—่ด˜่ด™่ดš่ด›่ดœ่ด ่ต‘่ต’่ต—่ตŸ่ตฅ่ตจ่ตฉ่ตช่ตฌ่ตฎ่ตฏ่ตฑ่ตฒ่ตธ่ตน่ตบ่ตป่ตผ่ตฝ่ตพ่ตฟ่ถ€่ถ‚่ถƒ่ถ†่ถ‡่ถˆ่ถ‰่ถŒ่ถ่ถŽ่ถ่ถ่ถ’่ถ“่ถ•่ถ–่ถ—่ถ˜่ถ™่ถš่ถ›่ถœ่ถ่ถž่ถ ่ถก๏ฟฝ่ถข่ถค่ถฅ่ถฆ่ถง่ถจ่ถฉ่ถช่ถซ่ถฌ่ถญ่ถฎ่ถฏ่ถฐ่ถฒ่ถถ่ถท่ถน่ถป่ถฝ่ท€่ท่ท‚่ท…่ท‡่ทˆ่ท‰่ทŠ่ท่ท่ท’่ท“่ท”ๅ‡‡ๅ†–ๅ†ขๅ†ฅ่ฎ ่ฎฆ่ฎง่ฎช่ฎด่ฎต่ฎท่ฏ‚่ฏƒ่ฏ‹่ฏ่ฏŽ่ฏ’่ฏ“่ฏ”่ฏ–่ฏ˜่ฏ™่ฏœ่ฏŸ่ฏ ่ฏค่ฏจ่ฏฉ่ฏฎ่ฏฐ่ฏณ่ฏถ่ฏน่ฏผ่ฏฟ่ฐ€่ฐ‚่ฐ„่ฐ‡่ฐŒ่ฐ่ฐ‘่ฐ’่ฐ”่ฐ•่ฐ–่ฐ™่ฐ›่ฐ˜่ฐ่ฐŸ่ฐ ่ฐก่ฐฅ่ฐง่ฐช่ฐซ่ฐฎ่ฐฏ่ฐฒ่ฐณ่ฐต่ฐถๅฉๅบ้˜้˜ข้˜ก้˜ฑ้˜ช้˜ฝ้˜ผ้™‚้™‰้™”้™Ÿ้™ง้™ฌ้™ฒ้™ด้šˆ้š้š—้šฐ้‚—้‚›้‚้‚™้‚ฌ้‚ก้‚ด้‚ณ้‚ถ้‚บ๏ฟฝ".split("");for(j=0;j!=D[218].length;++j)if(D[218][j].charCodeAt(0)!==65533){e[D[218][j]]=55808+j;d[55808+j]=D[218][j]}D[219]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ท•่ท˜่ท™่ทœ่ท ่ทก่ทข่ทฅ่ทฆ่ทง่ทฉ่ทญ่ทฎ่ทฐ่ทฑ่ทฒ่ทด่ทถ่ทผ่ทพ่ทฟ่ธ€่ธ่ธ‚่ธƒ่ธ„่ธ†่ธ‡่ธˆ่ธ‹่ธ่ธŽ่ธ่ธ‘่ธ’่ธ“่ธ•่ธ–่ธ—่ธ˜่ธ™่ธš่ธ›่ธœ่ธ ่ธก่ธค่ธฅ่ธฆ่ธง่ธจ่ธซ่ธญ่ธฐ่ธฒ่ธณ่ธด่ธถ่ธท่ธธ่ธป่ธผ่ธพ๏ฟฝ่ธฟ่นƒ่น…่น†่นŒ่น่นŽ่น่น่น“่น”่น•่น–่น—่น˜่นš่น›่นœ่น่นž่นŸ่น ่นก่นข่นฃ่นค่นฅ่นง่นจ่นช่นซ่นฎ่นฑ้‚ธ้‚ฐ้ƒ้ƒ…้‚พ้ƒ้ƒ„้ƒ‡้ƒ“้ƒฆ้ƒข้ƒœ้ƒ—้ƒ›้ƒซ้ƒฏ้ƒพ้„„้„ข้„ž้„ฃ้„ฑ้„ฏ้„น้…ƒ้…†ๅˆๅฅ‚ๅŠขๅŠฌๅŠญๅŠพๅ“ฟๅ‹ๅ‹–ๅ‹ฐๅŸ็‡ฎ็Ÿๅปดๅ‡ตๅ‡ผ้ฌฏๅŽถๅผ็•šๅทฏๅŒๅžฉๅžกๅกพๅขผๅฃ…ๅฃ‘ๅœฉๅœฌๅœชๅœณๅœนๅœฎๅœฏๅœๅœปๅ‚ๅฉๅž…ๅซๅž†ๅผๅปๅจๅญๅถๅณๅžญๅžคๅžŒๅžฒๅŸๅžงๅžดๅž“ๅž ๅŸ•ๅŸ˜ๅŸšๅŸ™ๅŸ’ๅžธๅŸดๅŸฏๅŸธๅŸคๅŸ๏ฟฝ".split("");for(j=0;j!=D[219].length;++j)if(D[219][j].charCodeAt(0)!==65533){e[D[219][j]]=56064+j;d[56064+j]=D[219][j]}D[220]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่นณ่นต่นท่นธ่นน่นบ่นป่นฝ่นพ่บ€่บ‚่บƒ่บ„่บ†่บˆ่บ‰่บŠ่บ‹่บŒ่บ่บŽ่บ‘่บ’่บ“่บ•่บ–่บ—่บ˜่บ™่บš่บ›่บ่บŸ่บ ่บก่บข่บฃ่บค่บฅ่บฆ่บง่บจ่บฉ่บช่บญ่บฎ่บฐ่บฑ่บณ่บด่บต่บถ่บท่บธ่บน่บป่บผ่บฝ่บพ่บฟ่ป€่ป่ป‚๏ฟฝ่ปƒ่ป„่ป…่ป†่ป‡่ปˆ่ป‰่ปŠ่ป‹่ปŒ่ป่ป่ป่ป‘่ป’่ป“่ป”่ป•่ป–่ป—่ป˜่ป™่ปš่ป›่ปœ่ป่ปž่ปŸ่ป ่ปก่ปข่ปฃ่ปคๅ ‹ๅ ๅŸฝๅŸญๅ €ๅ žๅ ™ๅก„ๅ  ๅกฅๅกฌๅขๅข‰ๅขšๅข€้ฆจ้ผ™ๆ‡ฟ่‰น่‰ฝ่‰ฟ่Š่ŠŠ่Šจ่Š„่ŠŽ่Š‘่Š—่Š™่Šซ่Šธ่Šพ่Šฐ่‹ˆ่‹Š่‹ฃ่Š˜่Šท่Šฎ่‹‹่‹Œ่‹่Šฉ่Šด่Šก่Šช่ŠŸ่‹„่‹Ž่Šค่‹ก่Œ‰่‹ท่‹ค่Œ่Œ‡่‹œ่‹ด่‹’่‹˜่ŒŒ่‹ป่‹“่Œ‘่Œš่Œ†่Œ”่Œ•่‹ ่‹•่Œœ่‘่›่œ่Œˆ่Ž’่Œผ่Œด่Œฑ่Ž›่ž่Œฏ่่‡่ƒ่Ÿ่€่Œ—่ ่Œญ่Œบ่Œณ่ฆ่ฅ๏ฟฝ".split("");for(j=0;j!=D[220].length;++j)if(D[220][j].charCodeAt(0)!==65533){e[D[220][j]]=56320+j;d[56320+j]=D[220][j]}D[221]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ปฅ่ปฆ่ปง่ปจ่ปฉ่ปช่ปซ่ปฌ่ปญ่ปฎ่ปฏ่ปฐ่ปฑ่ปฒ่ปณ่ปด่ปต่ปถ่ปท่ปธ่ปน่ปบ่ปป่ปผ่ปฝ่ปพ่ปฟ่ผ€่ผ่ผ‚่ผƒ่ผ„่ผ…่ผ†่ผ‡่ผˆ่ผ‰่ผŠ่ผ‹่ผŒ่ผ่ผŽ่ผ่ผ่ผ‘่ผ’่ผ“่ผ”่ผ•่ผ–่ผ—่ผ˜่ผ™่ผš่ผ›่ผœ่ผ่ผž่ผŸ่ผ ่ผก่ผข่ผฃ๏ฟฝ่ผค่ผฅ่ผฆ่ผง่ผจ่ผฉ่ผช่ผซ่ผฌ่ผญ่ผฎ่ผฏ่ผฐ่ผฑ่ผฒ่ผณ่ผด่ผต่ผถ่ผท่ผธ่ผน่ผบ่ผป่ผผ่ผฝ่ผพ่ผฟ่ฝ€่ฝ่ฝ‚่ฝƒ่ฝ„่จ่Œ›่ฉ่ฌ่ช่ญ่ฎ่Žฐ่ธ่Žณ่Žด่Ž ่Žช่Ž“่Žœ่Ž…่ผ่Žถ่Žฉ่ฝ่Žธ่ป่Ž˜่Žž่Žจ่Žบ่Žผ่่่ฅ่˜ๅ ‡่˜่‹่่ฝ่–่œ่ธ่‘่†่”่Ÿ่่ƒ่ธ่น่ช่…่€่ฆ่ฐ่ก่‘œ่‘‘่‘š่‘™่‘ณ่’‡่’ˆ่‘บ่’‰่‘ธ่ผ่‘†่‘ฉ่‘ถ่’Œ่’Ž่ฑ่‘ญ่“่“่“่“ฆ่’ฝ่““่“Š่’ฟ่’บ่“ ่’ก่’น่’ด่’—่“ฅ่“ฃ่”Œ็”่”ธ่“ฐ่”น่”Ÿ่”บ๏ฟฝ".split("");for(j=0;j!=D[221].length;++j)if(D[221][j].charCodeAt(0)!==65533){e[D[221][j]]=56576+j;d[56576+j]=D[221][j]}D[222]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฝ…่ฝ†่ฝ‡่ฝˆ่ฝ‰่ฝŠ่ฝ‹่ฝŒ่ฝ่ฝŽ่ฝ่ฝ่ฝ‘่ฝ’่ฝ“่ฝ”่ฝ•่ฝ–่ฝ—่ฝ˜่ฝ™่ฝš่ฝ›่ฝœ่ฝ่ฝž่ฝŸ่ฝ ่ฝก่ฝข่ฝฃ่ฝค่ฝฅ่ฝช่พ€่พŒ่พ’่พ่พ ่พก่พข่พค่พฅ่พฆ่พง่พช่พฌ่พญ่พฎ่พฏ่พฒ่พณ่พด่พต่พท่พธ่พบ่พป่พผ่พฟ่ฟ€่ฟƒ่ฟ†๏ฟฝ่ฟ‰่ฟŠ่ฟ‹่ฟŒ่ฟ่ฟ่ฟ’่ฟ–่ฟ—่ฟš่ฟ ่ฟก่ฟฃ่ฟง่ฟฌ่ฟฏ่ฟฑ่ฟฒ่ฟด่ฟต่ฟถ่ฟบ่ฟป่ฟผ่ฟพ่ฟฟ้€‡้€ˆ้€Œ้€Ž้€“้€•้€˜่•–่”ป่“ฟ่“ผ่•™่•ˆ่•จ่•ค่•ž่•บ็žข่•ƒ่•ฒ่•ป่–ค่–จ่–‡่–่•น่–ฎ่–œ่–…่–น่–ท่–ฐ่—“่—่—œ่—ฟ่˜ง่˜…่˜ฉ่˜–่˜ผๅปพๅผˆๅคผๅฅ่€ทๅฅ•ๅฅšๅฅ˜ๅŒๅฐขๅฐฅๅฐฌๅฐดๆ‰Œๆ‰ชๆŠŸๆŠปๆ‹Šๆ‹šๆ‹—ๆ‹ฎๆŒขๆ‹ถๆŒนๆ‹ๆƒๆŽญๆถๆฑๆบๆŽŽๆŽดๆญๆŽฌๆŽŠๆฉๆŽฎๆŽผๆฒๆธๆ ๆฟๆ„ๆžๆŽๆ‘’ๆ†ๆŽพๆ‘…ๆ‘ๆ‹ๆ›ๆ ๆŒๆฆๆกๆ‘žๆ’„ๆ‘ญๆ’–๏ฟฝ".split("");for(j=0;j!=D[222].length;++j)if(D[222][j].charCodeAt(0)!==65533){e[D[222][j]]=56832+j;d[56832+j]=D[222][j]}D[223]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้€™้€œ้€ฃ้€ค้€ฅ้€ง้€จ้€ฉ้€ช้€ซ้€ฌ้€ฐ้€ฑ้€ฒ้€ณ้€ด้€ท้€น้€บ้€ฝ้€ฟ้€้ƒ้…้†้ˆ้‰้Š้‹้Œ้Ž้”้•้–้™้š้œ้้ž้Ÿ้ ้ก้ค้ฆ้ง้ฉ้ช้ซ้ฌ้ฏ้ฐ้ฑ้ฒ้ณ้ถ้ท้ธ้น้บ้ป้ผ้พ้‚๏ฟฝ้‚„้‚…้‚†้‚‡้‚‰้‚Š้‚Œ้‚้‚Ž้‚้‚้‚’้‚”้‚–้‚˜้‚š้‚œ้‚ž้‚Ÿ้‚ ้‚ค้‚ฅ้‚ง้‚จ้‚ฉ้‚ซ้‚ญ้‚ฒ้‚ท้‚ผ้‚ฝ้‚ฟ้ƒ€ๆ‘บๆ’ทๆ’ธๆ’™ๆ’บๆ“€ๆ“ๆ“—ๆ“คๆ“ขๆ”‰ๆ”ฅๆ”ฎๅผ‹ๅฟ’็”™ๅผ‘ๅŸๅฑๅฝๅฉๅจๅปๅ’ๅ–ๅ†ๅ‘‹ๅ‘’ๅ‘“ๅ‘”ๅ‘–ๅ‘ƒๅกๅ‘—ๅ‘™ๅฃๅฒๅ’‚ๅ’”ๅ‘ทๅ‘ฑๅ‘คๅ’šๅ’›ๅ’„ๅ‘ถๅ‘ฆๅ’ๅ“ๅ’ญๅ“‚ๅ’ดๅ“’ๅ’งๅ’ฆๅ““ๅ“”ๅ‘ฒๅ’ฃๅ“•ๅ’ปๅ’ฟๅ“Œๅ“™ๅ“šๅ“œๅ’ฉๅ’ชๅ’คๅ“ๅ“ๅ“žๅ”›ๅ“งๅ” ๅ“ฝๅ””ๅ“ณๅ”ขๅ”ฃๅ”ๅ”‘ๅ”งๅ”ชๅ•งๅ–ๅ–ตๅ•‰ๅ•ญๅ•ๅ••ๅ”ฟๅ•ๅ”ผ๏ฟฝ".split("");for(j=0;j!=D[223].length;++j)if(D[223][j].charCodeAt(0)!==65533){e[D[223][j]]=57088+j;d[57088+j]=D[223][j]}D[224]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ƒ‚้ƒƒ้ƒ†้ƒˆ้ƒ‰้ƒ‹้ƒŒ้ƒ้ƒ’้ƒ”้ƒ•้ƒ–้ƒ˜้ƒ™้ƒš้ƒž้ƒŸ้ƒ ้ƒฃ้ƒค้ƒฅ้ƒฉ้ƒช้ƒฌ้ƒฎ้ƒฐ้ƒฑ้ƒฒ้ƒณ้ƒต้ƒถ้ƒท้ƒน้ƒบ้ƒป้ƒผ้ƒฟ้„€้„้„ƒ้„…้„†้„‡้„ˆ้„‰้„Š้„‹้„Œ้„้„Ž้„้„้„‘้„’้„“้„”้„•้„–้„—้„˜้„š้„›้„œ๏ฟฝ้„้„Ÿ้„ ้„ก้„ค้„ฅ้„ฆ้„ง้„จ้„ฉ้„ช้„ซ้„ฌ้„ญ้„ฎ้„ฐ้„ฒ้„ณ้„ด้„ต้„ถ้„ท้„ธ้„บ้„ป้„ผ้„ฝ้„พ้„ฟ้…€้…้…‚้…„ๅ”ทๅ•–ๅ•ตๅ•ถๅ•ทๅ”ณๅ”ฐๅ•œๅ–‹ๅ—’ๅ–ƒๅ–ฑๅ–นๅ–ˆๅ–ๅ–Ÿๅ•พๅ—–ๅ–‘ๅ•ปๅ—Ÿๅ–ฝๅ–พๅ–”ๅ–™ๅ—ชๅ—ทๅ—‰ๅ˜Ÿๅ—‘ๅ—ซๅ—ฌๅ—”ๅ—ฆๅ—ๅ—„ๅ—ฏๅ—ฅๅ—ฒๅ—ณๅ—Œๅ—ๅ—จๅ—ตๅ—ค่พ”ๅ˜žๅ˜ˆๅ˜Œๅ˜ๅ˜คๅ˜ฃๅ—พๅ˜€ๅ˜งๅ˜ญๅ™˜ๅ˜นๅ™—ๅ˜ฌๅ™ๅ™ขๅ™™ๅ™œๅ™Œๅ™”ๅš†ๅ™คๅ™ฑๅ™ซๅ™ปๅ™ผๅš…ๅš“ๅšฏๅ›”ๅ›—ๅ›ๅ›กๅ›ตๅ›ซๅ›นๅ›ฟๅœ„ๅœŠๅœ‰ๅœœๅธๅธ™ๅธ”ๅธ‘ๅธฑๅธปๅธผ๏ฟฝ".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้……้…‡้…ˆ้…‘้…“้…”้…•้…–้…˜้…™้…›้…œ้…Ÿ้… ้…ฆ้…ง้…จ้…ซ้…ญ้…ณ้…บ้…ป้…ผ้†€้†้†‚้†ƒ้†„้††้†ˆ้†Š้†Ž้†้†“้†”้†•้†–้†—้†˜้†™้†œ้†้†ž้†Ÿ้† ้†ก้†ค้†ฅ้†ฆ้†ง้†จ้†ฉ้†ซ้†ฌ้†ฐ้†ฑ้†ฒ้†ณ้†ถ้†ท้†ธ้†น้†ป๏ฟฝ้†ผ้†ฝ้†พ้†ฟ้‡€้‡้‡‚้‡ƒ้‡„้‡…้‡†้‡ˆ้‡‹้‡้‡’้‡“้‡”้‡•้‡–้‡—้‡˜้‡™้‡š้‡›้‡้‡ž้‡Ÿ้‡ ้‡ก้‡ข้‡ฃ้‡ค้‡ฅๅธทๅน„ๅน”ๅน›ๅนžๅนกๅฒŒๅฑบๅฒๅฒๅฒ–ๅฒˆๅฒ˜ๅฒ™ๅฒ‘ๅฒšๅฒœๅฒตๅฒขๅฒฝๅฒฌๅฒซๅฒฑๅฒฃๅณๅฒทๅณ„ๅณ’ๅณคๅณ‹ๅณฅๅด‚ๅดƒๅดงๅดฆๅดฎๅดคๅดžๅด†ๅด›ๅต˜ๅดพๅดดๅดฝๅตฌๅต›ๅตฏๅตๅตซๅต‹ๅตŠๅตฉๅตดๅถ‚ๅถ™ๅถ่ฑณๅถทๅท…ๅฝณๅฝทๅพ‚ๅพ‡ๅพ‰ๅพŒๅพ•ๅพ™ๅพœๅพจๅพญๅพตๅพผ่กขๅฝก็Šญ็Šฐ็Šด็Šท็Šธ็‹ƒ็‹็‹Ž็‹็‹’็‹จ็‹ฏ็‹ฉ็‹ฒ็‹ด็‹ท็Œ็‹ณ็Œƒ็‹บ๏ฟฝ".split("");for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้‡ฆ้‡ง้‡จ้‡ฉ้‡ช้‡ซ้‡ฌ้‡ญ้‡ฎ้‡ฏ้‡ฐ้‡ฑ้‡ฒ้‡ณ้‡ด้‡ต้‡ถ้‡ท้‡ธ้‡น้‡บ้‡ป้‡ผ้‡ฝ้‡พ้‡ฟ้ˆ€้ˆ้ˆ‚้ˆƒ้ˆ„้ˆ…้ˆ†้ˆ‡้ˆˆ้ˆ‰้ˆŠ้ˆ‹้ˆŒ้ˆ้ˆŽ้ˆ้ˆ้ˆ‘้ˆ’้ˆ“้ˆ”้ˆ•้ˆ–้ˆ—้ˆ˜้ˆ™้ˆš้ˆ›้ˆœ้ˆ้ˆž้ˆŸ้ˆ ้ˆก้ˆข้ˆฃ้ˆค๏ฟฝ้ˆฅ้ˆฆ้ˆง้ˆจ้ˆฉ้ˆช้ˆซ้ˆฌ้ˆญ้ˆฎ้ˆฏ้ˆฐ้ˆฑ้ˆฒ้ˆณ้ˆด้ˆต้ˆถ้ˆท้ˆธ้ˆน้ˆบ้ˆป้ˆผ้ˆฝ้ˆพ้ˆฟ้‰€้‰้‰‚้‰ƒ้‰„้‰…็‹ป็Œ—็Œ“็Œก็ŒŠ็Œž็Œ็Œ•็Œข็Œน็Œฅ็Œฌ็Œธ็Œฑ็็็—็ ็ฌ็ฏ็พ่ˆ›ๅคฅ้ฃงๅคคๅค‚้ฅฃ้ฅง้ฅจ้ฅฉ้ฅช้ฅซ้ฅฌ้ฅด้ฅท้ฅฝ้ฆ€้ฆ„้ฆ‡้ฆŠ้ฆ้ฆ้ฆ‘้ฆ“้ฆ”้ฆ•ๅบ€ๅบ‘ๅบ‹ๅบ–ๅบฅๅบ ๅบนๅบตๅบพๅบณ่ต“ๅป’ๅป‘ๅป›ๅปจๅปช่†บๅฟ„ๅฟ‰ๅฟ–ๅฟๆ€ƒๅฟฎๆ€„ๅฟกๅฟคๅฟพๆ€…ๆ€†ๅฟชๅฟญๅฟธๆ€™ๆ€ตๆ€ฆๆ€›ๆ€ๆ€ๆ€ฉๆ€ซๆ€Šๆ€ฟๆ€กๆธๆนๆปๆบๆ‚๏ฟฝ".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้‰†้‰‡้‰ˆ้‰‰้‰Š้‰‹้‰Œ้‰้‰Ž้‰้‰้‰‘้‰’้‰“้‰”้‰•้‰–้‰—้‰˜้‰™้‰š้‰›้‰œ้‰้‰ž้‰Ÿ้‰ ้‰ก้‰ข้‰ฃ้‰ค้‰ฅ้‰ฆ้‰ง้‰จ้‰ฉ้‰ช้‰ซ้‰ฌ้‰ญ้‰ฎ้‰ฏ้‰ฐ้‰ฑ้‰ฒ้‰ณ้‰ต้‰ถ้‰ท้‰ธ้‰น้‰บ้‰ป้‰ผ้‰ฝ้‰พ้‰ฟ้Š€้Š้Š‚้Šƒ้Š„้Š…๏ฟฝ้Š†้Š‡้Šˆ้Š‰้ŠŠ้Š‹้ŠŒ้Š้Š้Š้Š‘้Š’้Š“้Š”้Š•้Š–้Š—้Š˜้Š™้Šš้Š›้Šœ้Š้Šž้ŠŸ้Š ้Šก้Šข้Šฃ้Šค้Šฅ้Šฆ้Šงๆชๆฝๆ‚–ๆ‚šๆ‚ญๆ‚ๆ‚ƒๆ‚’ๆ‚Œๆ‚›ๆƒฌๆ‚ปๆ‚ฑๆƒๆƒ˜ๆƒ†ๆƒšๆ‚ดๆ„ ๆ„ฆๆ„•ๆ„ฃๆƒดๆ„€ๆ„Žๆ„ซๆ…Šๆ…ตๆ†ฌๆ†”ๆ†งๆ†ทๆ‡”ๆ‡ตๅฟ้šณ้—ฉ้—ซ้—ฑ้—ณ้—ต้—ถ้—ผ้—พ้˜ƒ้˜„้˜†้˜ˆ้˜Š้˜‹้˜Œ้˜้˜้˜’้˜•้˜–้˜—้˜™้˜šไธฌ็ˆฟๆˆ•ๆฐตๆฑ”ๆฑœๆฑŠๆฒฃๆฒ…ๆฒๆฒ”ๆฒŒๆฑจๆฑฉๆฑดๆฑถๆฒ†ๆฒฉๆณๆณ”ๆฒญๆณทๆณธๆณฑๆณ—ๆฒฒๆณ ๆณ–ๆณบๆณซๆณฎๆฒฑๆณ“ๆณฏๆณพ๏ฟฝ".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้Šจ้Šฉ้Šช้Šซ้Šฌ้Šญ้Šฏ้Šฐ้Šฑ้Šฒ้Šณ้Šด้Šต้Šถ้Šท้Šธ้Šน้Šบ้Šป้Šผ้Šฝ้Šพ้Šฟ้‹€้‹้‹‚้‹ƒ้‹„้‹…้‹†้‹‡้‹‰้‹Š้‹‹้‹Œ้‹้‹Ž้‹้‹้‹‘้‹’้‹“้‹”้‹•้‹–้‹—้‹˜้‹™้‹š้‹›้‹œ้‹้‹ž้‹Ÿ้‹ ้‹ก้‹ข้‹ฃ้‹ค้‹ฅ้‹ฆ้‹ง้‹จ๏ฟฝ้‹ฉ้‹ช้‹ซ้‹ฌ้‹ญ้‹ฎ้‹ฏ้‹ฐ้‹ฑ้‹ฒ้‹ณ้‹ด้‹ต้‹ถ้‹ท้‹ธ้‹น้‹บ้‹ป้‹ผ้‹ฝ้‹พ้‹ฟ้Œ€้Œ้Œ‚้Œƒ้Œ„้Œ…้Œ†้Œ‡้Œˆ้Œ‰ๆดนๆดงๆดŒๆตƒๆตˆๆด‡ๆด„ๆด™ๆดŽๆดซๆตๆดฎๆดตๆดšๆตๆต’ๆต”ๆดณๆถ‘ๆตฏๆถžๆถ ๆตžๆถ“ๆถ”ๆตœๆต ๆตผๆตฃๆธšๆท‡ๆท…ๆทžๆธŽๆถฟๆท ๆธ‘ๆทฆๆทๆท™ๆธ–ๆถซๆธŒๆถฎๆธซๆนฎๆนŽๆนซๆบฒๆนŸๆบ†ๆน“ๆน”ๆธฒๆธฅๆน„ๆปŸๆบฑๆบ˜ๆป ๆผญๆปขๆบฅๆบงๆบฝๆบปๆบทๆป—ๆบดๆปๆบๆป‚ๆบŸๆฝขๆฝ†ๆฝ‡ๆผคๆผ•ๆปนๆผฏๆผถๆฝ‹ๆฝดๆผชๆผ‰ๆผฉๆพ‰ๆพๆพŒๆฝธๆฝฒๆฝผๆฝบๆฟ‘๏ฟฝ".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ŒŠ้Œ‹้ŒŒ้Œ้ŒŽ้Œ้Œ้Œ‘้Œ’้Œ“้Œ”้Œ•้Œ–้Œ—้Œ˜้Œ™้Œš้Œ›้Œœ้Œ้Œž้ŒŸ้Œ ้Œก้Œข้Œฃ้Œค้Œฅ้Œฆ้Œง้Œจ้Œฉ้Œช้Œซ้Œฌ้Œญ้Œฎ้Œฏ้Œฐ้Œฑ้Œฒ้Œณ้Œด้Œต้Œถ้Œท้Œธ้Œน้Œบ้Œป้Œผ้Œฝ้Œฟ้€้้‚้ƒ้„้…้†้‡้ˆ้‰๏ฟฝ้Š้‹้Œ้้Ž้้้‘้’้“้”้•้–้—้˜้™้š้›้œ้้ž้Ÿ้ ้ก้ข้ฃ้ค้ฅ้ฆ้ง้จ้ฉ้ซๆฟ‰ๆพงๆพนๆพถๆฟ‚ๆฟกๆฟฎๆฟžๆฟ ๆฟฏ็€š็€ฃ็€›็€น็€ต็็žๅฎ€ๅฎ„ๅฎ•ๅฎ“ๅฎฅๅฎธ็”ฏ้ชžๆดๅฏคๅฏฎ่คฐๅฏฐ่น‡่ฌ‡่พถ่ฟ“่ฟ•่ฟฅ่ฟฎ่ฟค่ฟฉ่ฟฆ่ฟณ่ฟจ้€…้€„้€‹้€ฆ้€‘้€้€–้€ก้€ต้€ถ้€ญ้€ฏ้„้‘้’้้จ้˜้ข้›ๆšน้ด้ฝ้‚‚้‚ˆ้‚ƒ้‚‹ๅฝๅฝ—ๅฝ–ๅฝ˜ๅฐปๅ’ซๅฑๅฑ™ๅญฑๅฑฃๅฑฆ็พผๅผชๅผฉๅผญ่‰ดๅผผ้ฌปๅฑฎๅฆๅฆƒๅฆๅฆฉๅฆชๅฆฃ๏ฟฝ".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฌ้ญ้ฎ้ฏ้ฐ้ฑ้ฒ้ณ้ด้ต้ถ้ท้ธ้น้บ้ป้ผ้ฝ้พ้ฟ้Ž€้Ž้Ž‚้Žƒ้Ž„้Ž…้Ž†้Ž‡้Žˆ้Ž‰้ŽŠ้Ž‹้ŽŒ้Ž้ŽŽ้Ž้Ž‘้Ž’้Ž“้Ž”้Ž•้Ž–้Ž—้Ž˜้Ž™้Žš้Ž›้Žœ้Ž้Žž้ŽŸ้Ž ้Žก้Žข้Žฃ้Žค้Žฅ้Žฆ้Žง้Žจ้Žฉ้Žช้Žซ๏ฟฝ้Žฌ้Žญ้Žฎ้Žฏ้Žฐ้Žฑ้Žฒ้Žณ้Žด้Žต้Žถ้Žท้Žธ้Žน้Žบ้Žป้Žผ้Žฝ้Žพ้Žฟ้€้้‚้ƒ้„้…้†้‡้ˆ้‰้‹้Œ้ๅฆ—ๅงŠๅฆซๅฆžๅฆคๅง’ๅฆฒๅฆฏๅง—ๅฆพๅจ…ๅจ†ๅงๅจˆๅงฃๅง˜ๅงนๅจŒๅจ‰ๅจฒๅจดๅจ‘ๅจฃๅจ“ๅฉ€ๅฉงๅฉŠๅฉ•ๅจผๅฉขๅฉต่ƒฌๅชชๅช›ๅฉทๅฉบๅชพๅซซๅชฒๅซ’ๅซ”ๅชธๅซ ๅซฃๅซฑๅซ–ๅซฆๅซ˜ๅซœๅฌ‰ๅฌ—ๅฌ–ๅฌฒๅฌทๅญ€ๅฐ•ๅฐœๅญšๅญฅๅญณๅญ‘ๅญ“ๅญข้ฉต้ฉท้ฉธ้ฉบ้ฉฟ้ฉฝ้ช€้ช้ช…้ชˆ้ชŠ้ช้ช’้ช“้ช–้ช˜้ช›้ชœ้ช้ชŸ้ช ้ชข้ชฃ้ชฅ้ชง็บŸ็บก็บฃ็บฅ็บจ็บฉ๏ฟฝ".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้Ž้้้‘้’้“้”้•้—้˜้™้š้›้œ้้ž้Ÿ้ ้ก้ข้ฃ้ค้ฅ้ฆ้ง้จ้ฉ้ช้ซ้ฌ้ญ้ฎ้ฏ้ฐ้ฑ้ฒ้ณ้ด้ต้ถ้ท้ธ้น้บ้ป้ผ้ฝ้พ้ฟ้€้้‚้ƒ้„้…้†้‡้ˆ้‰้Š้‹้Œ้๏ฟฝ้Ž้้้‘้’้“้”้•้–้—้˜้™้š้›้œ้้ž้Ÿ้ ้ก้ข้ฃ้ค้ฅ้ฆ้ง้จ้ฉ้ช้ซ้ฌ้ญ้ฎ็บญ็บฐ็บพ็ป€็ป็ป‚็ป‰็ป‹็ปŒ็ป็ป”็ป—็ป›็ป ็ปก็ปจ็ปซ็ปฎ็ปฏ็ปฑ็ปฒ็ผ็ปถ็ปบ็ปป็ปพ็ผ็ผ‚็ผƒ็ผ‡็ผˆ็ผ‹็ผŒ็ผ็ผ‘็ผ’็ผ—็ผ™็ผœ็ผ›็ผŸ็ผก็ผข็ผฃ็ผค็ผฅ็ผฆ็ผง็ผช็ผซ็ผฌ็ผญ็ผฏ็ผฐ็ผฑ็ผฒ็ผณ็ผตๅนบ็•ฟๅท›็”พ้‚•็ŽŽ็Ž‘็Žฎ็Žข็ŽŸ็็‚็‘็Žท็Žณ็€็‰็ˆ็ฅ็™้กผ็Š็ฉ็ง็ž็Žบ็ฒ็็ช็‘›็ฆ็ฅ็จ็ฐ็ฎ็ฌ๏ฟฝ".split("");for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฏ้ฐ้ฑ้ฒ้ณ้ด้ต้ถ้ท้ธ้น้บ้ป้ผ้ฝ้ฟ้‘€้‘้‘‚้‘ƒ้‘„้‘…้‘†้‘‡้‘ˆ้‘‰้‘Š้‘‹้‘Œ้‘้‘Ž้‘้‘้‘‘้‘’้‘“้‘”้‘•้‘–้‘—้‘˜้‘™้‘š้‘›้‘œ้‘้‘ž้‘Ÿ้‘ ้‘ก้‘ข้‘ฃ้‘ค้‘ฅ้‘ฆ้‘ง้‘จ้‘ฉ้‘ช้‘ฌ้‘ญ้‘ฎ้‘ฏ๏ฟฝ้‘ฐ้‘ฑ้‘ฒ้‘ณ้‘ด้‘ต้‘ถ้‘ท้‘ธ้‘น้‘บ้‘ป้‘ผ้‘ฝ้‘พ้‘ฟ้’€้’้’‚้’ƒ้’„้’‘้’–้’˜้“‡้“้““้“”้“š้“ฆ้“ป้”œ้” ็›็š็‘็‘œ็‘—็‘•็‘™็‘ท็‘ญ็‘พ็’œ็’Ž็’€็’็’‡็’‹็’ž็’จ็’ฉ็’็’ง็“’็’บ้Ÿช้Ÿซ้ŸฌๆŒๆ“ๆžๆˆๆฉๆžฅๆž‡ๆชๆณๆž˜ๆžงๆตๆžจๆžžๆžญๆž‹ๆทๆผๆŸฐๆ ‰ๆŸ˜ๆ ŠๆŸฉๆžฐๆ ŒๆŸ™ๆžตๆŸšๆžณๆŸๆ €ๆŸƒๆžธๆŸขๆ ŽๆŸๆŸฝๆ ฒๆ ณๆก ๆกกๆกŽๆกขๆก„ๆกคๆขƒๆ ๆก•ๆกฆๆกๆกงๆก€ๆ พๆกŠๆก‰ๆ ฉๆขตๆขๆกดๆกทๆข“ๆกซๆฃ‚ๆฅฎๆฃผๆคŸๆค ๆฃน๏ฟฝ".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้”ง้”ณ้”ฝ้•ƒ้•ˆ้•‹้••้•š้• ้•ฎ้•ด้•ต้•ท้•ธ้•น้•บ้•ป้•ผ้•ฝ้•พ้–€้–้–‚้–ƒ้–„้–…้–†้–‡้–ˆ้–‰้–Š้–‹้–Œ้–้–Ž้–้–้–‘้–’้–“้–”้–•้––้–—้–˜้–™้–š้–›้–œ้–้–ž้–Ÿ้– ้–ก้–ข้–ฃ้–ค้–ฅ้–ฆ้–ง้–จ้–ฉ้–ช๏ฟฝ้–ซ้–ฌ้–ญ้–ฎ้–ฏ้–ฐ้–ฑ้–ฒ้–ณ้–ด้–ต้–ถ้–ท้–ธ้–น้–บ้–ป้–ผ้–ฝ้–พ้–ฟ้—€้—้—‚้—ƒ้—„้—…้—†้—‡้—ˆ้—‰้—Š้—‹ๆคคๆฃฐๆค‹ๆคๆฅ—ๆฃฃๆคๆฅฑๆคนๆฅ ๆฅ‚ๆฅๆฆ„ๆฅซๆฆ€ๆฆ˜ๆฅธๆคดๆงŒๆฆ‡ๆฆˆๆงŽๆฆ‰ๆฅฆๆฅฃๆฅนๆฆ›ๆฆงๆฆปๆฆซๆฆญๆง”ๆฆฑๆงๆงŠๆงŸๆฆ•ๆง ๆฆๆงฟๆจฏๆงญๆจ—ๆจ˜ๆฉฅๆงฒๆฉ„ๆจพๆช ๆฉๆฉ›ๆจตๆชŽๆฉนๆจฝๆจจๆฉ˜ๆฉผๆช‘ๆชๆชฉๆช—ๆชซ็Œท็’ๆฎๆฎ‚ๆฎ‡ๆฎ„ๆฎ’ๆฎ“ๆฎๆฎšๆฎ›ๆฎกๆฎช่ฝซ่ฝญ่ฝฑ่ฝฒ่ฝณ่ฝต่ฝถ่ฝธ่ฝท่ฝน่ฝบ่ฝผ่ฝพ่พ่พ‚่พ„่พ‡่พ‹๏ฟฝ".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้—Œ้—้—Ž้—้—้—‘้—’้—“้—”้—•้—–้——้—˜้—™้—š้—›้—œ้—้—ž้—Ÿ้— ้—ก้—ข้—ฃ้—ค้—ฅ้—ฆ้—ง้—ฌ้—ฟ้˜‡้˜“้˜˜้˜›้˜ž้˜ ้˜ฃ้˜ค้˜ฅ้˜ฆ้˜ง้˜จ้˜ฉ้˜ซ้˜ฌ้˜ญ้˜ฏ้˜ฐ้˜ท้˜ธ้˜น้˜บ้˜พ้™้™ƒ้™Š้™Ž้™้™‘้™’้™“้™–้™—๏ฟฝ้™˜้™™้™š้™œ้™้™ž้™ ้™ฃ้™ฅ้™ฆ้™ซ้™ญ้™ฎ้™ฏ้™ฐ้™ฑ้™ณ้™ธ้™น้™บ้™ป้™ผ้™ฝ้™พ้™ฟ้š€้š้š‚้šƒ้š„้š‡้š‰้šŠ่พ่พŽ่พ่พ˜่พš่ปŽๆˆ‹ๆˆ—ๆˆ›ๆˆŸๆˆขๆˆกๆˆฅๆˆคๆˆฌ่‡ง็“ฏ็“ด็“ฟ็”็”‘็”“ๆ”ดๆ—ฎๆ—ฏๆ—ฐๆ˜Šๆ˜™ๆฒๆ˜ƒๆ˜•ๆ˜€็‚…ๆ›ทๆ˜ๆ˜ดๆ˜ฑๆ˜ถๆ˜ต่€†ๆ™Ÿๆ™”ๆ™ๆ™ๆ™–ๆ™กๆ™—ๆ™ทๆš„ๆšŒๆšงๆšๆšพๆ››ๆ›œๆ›ฆๆ›ฉ่ดฒ่ดณ่ดถ่ดป่ดฝ่ต€่ต…่ต†่ตˆ่ต‰่ต‡่ต่ต•่ต™่ง‡่งŠ่ง‹่งŒ่งŽ่ง่ง่ง‘็‰ฎ็ŠŸ็‰็‰ฆ็‰ฏ็‰พ็‰ฟ็Š„็Š‹็Š็Š็Š’ๆŒˆๆŒฒๆŽฐ๏ฟฝ".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[235]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้šŒ้šŽ้š‘้š’้š“้š•้š–้šš้š›้š้šž้šŸ้š ้šก้šข้šฃ้šค้šฅ้šฆ้šจ้šฉ้šช้šซ้šฌ้šญ้šฎ้šฏ้šฑ้šฒ้šด้šต้šท้šธ้šบ้šป้šฟ้›‚้›ƒ้›ˆ้›Š้›‹้›้›‘้›“้›”้›–้›—้›˜้›™้›š้››้›œ้›้›ž้›Ÿ้›ก้›ข้›ฃ้›ค้›ฅ้›ฆ้›ง้›ซ๏ฟฝ้›ฌ้›ญ้›ฎ้›ฐ้›ฑ้›ฒ้›ด้›ต้›ธ้›บ้›ป้›ผ้›ฝ้›ฟ้œ‚้œƒ้œ…้œŠ้œ‹้œŒ้œ้œ‘้œ’้œ”้œ•้œ—้œ˜้œ™้œš้œ›้œ้œŸ้œ ๆฟๆ“˜่€„ๆฏชๆฏณๆฏฝๆฏตๆฏนๆฐ…ๆฐ‡ๆฐ†ๆฐๆฐ•ๆฐ˜ๆฐ™ๆฐšๆฐกๆฐฉๆฐคๆฐชๆฐฒๆ”ตๆ••ๆ•ซ็‰็‰’็‰–็ˆฐ่™ขๅˆ–่‚Ÿ่‚œ่‚“่‚ผๆœŠ่‚ฝ่‚ฑ่‚ซ่‚ญ่‚ด่‚ท่ƒง่ƒจ่ƒฉ่ƒช่ƒ›่ƒ‚่ƒ„่ƒ™่ƒ่ƒ—ๆœ่ƒ่ƒซ่ƒฑ่ƒด่ƒญ่„่„Ž่ƒฒ่ƒผๆœ•่„’่ฑš่„ถ่„ž่„ฌ่„˜่„ฒ่…ˆ่…Œ่…“่…ด่…™่…š่…ฑ่… ่…ฉ่…ผ่…ฝ่…ญ่…งๅกๅชต่†ˆ่†‚่†‘ๆป•่†ฃ่†ช่‡Œๆœฆ่‡Š่†ป๏ฟฝ".split("");for(j=0;j!=D[235].length;++j)if(D[235][j].charCodeAt(0)!==65533){e[D[235][j]]=60160+j;d[60160+j]=D[235][j]}D[236]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้œก้œข้œฃ้œค้œฅ้œฆ้œง้œจ้œฉ้œซ้œฌ้œฎ้œฏ้œฑ้œณ้œด้œต้œถ้œท้œบ้œป้œผ้œฝ้œฟ้€้้‚้ƒ้„้…้†้‡้ˆ้‰้Š้‹้Œ้้Ž้้้‘้”้•้—้˜้š้œ้้Ÿ้ฃ้ค้ฆ้ง้จ้ช้ซ้ฌ้ญ้ฎ้ฏ้ฐ้ฑ๏ฟฝ้ฒ้ต้ท้ธ้น้บ้ป้ฝ้พ้ฟ้ž€้ž้ž‚้žƒ้ž„้ž†้ž‡้žˆ้ž‰้žŠ้žŒ้žŽ้ž้ž้ž“้ž•้ž–้ž—้ž™้žš้ž›้žœ้ž่‡่†ฆๆฌคๆฌทๆฌนๆญƒๆญ†ๆญ™้ฃ‘้ฃ’้ฃ“้ฃ•้ฃ™้ฃšๆฎณๅฝ€ๆฏ‚่งณๆ–้ฝ‘ๆ–“ๆ–ผๆ—†ๆ—„ๆ—ƒๆ—Œๆ—Žๆ—’ๆ—–็‚€็‚œ็‚–็‚็‚ป็ƒ€็‚ท็‚ซ็‚ฑ็ƒจ็ƒŠ็„็„“็„–็„ฏ็„ฑ็…ณ็…œ็…จ็……็…ฒ็…Š็…ธ็…บ็†˜็†ณ็†ต็†จ็† ็‡ ็‡”็‡ง็‡น็ˆ็ˆจ็ฌ็„˜็…ฆ็†นๆˆพๆˆฝๆ‰ƒๆ‰ˆๆ‰‰็คป็ฅ€็ฅ†็ฅ‰็ฅ›็ฅœ็ฅ“็ฅš็ฅข็ฅ—็ฅ ็ฅฏ็ฅง็ฅบ็ฆ…็ฆŠ็ฆš็ฆง็ฆณๅฟ‘ๅฟ๏ฟฝ".split("");for(j=0;j!=D[236].length;++j)if(D[236][j].charCodeAt(0)!==65533){e[D[236][j]]=60416+j;d[60416+j]=D[236][j]}D[237]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้žž้žŸ้žก้žข้žค้žฅ้žฆ้žง้žจ้žฉ้žช้žฌ้žฎ้žฐ้žฑ้žณ้žต้žถ้žท้žธ้žน้žบ้žป้žผ้žฝ้žพ้žฟ้Ÿ€้Ÿ้Ÿ‚้Ÿƒ้Ÿ„้Ÿ…้Ÿ†้Ÿ‡้Ÿˆ้Ÿ‰้ŸŠ้Ÿ‹้ŸŒ้Ÿ้ŸŽ้Ÿ้Ÿ้Ÿ‘้Ÿ’้Ÿ“้Ÿ”้Ÿ•้Ÿ–้Ÿ—้Ÿ˜้Ÿ™้Ÿš้Ÿ›้Ÿœ้Ÿ้Ÿž้ŸŸ้Ÿ ้Ÿก้Ÿข้Ÿฃ๏ฟฝ้Ÿค้Ÿฅ้Ÿจ้Ÿฎ้Ÿฏ้Ÿฐ้Ÿฑ้Ÿฒ้Ÿด้Ÿท้Ÿธ้Ÿน้Ÿบ้Ÿป้Ÿผ้Ÿฝ้Ÿพ้Ÿฟ้ €้ ้ ‚้ ƒ้ „้ …้ †้ ‡้ ˆ้ ‰้ Š้ ‹้ Œ้ ้ Žๆ€ผๆๆšๆงๆๆ™ๆฃๆ‚ซๆ„†ๆ„ๆ…ๆ†ฉๆ†ๆ‡‹ๆ‡‘ๆˆ†่‚€่ฟๆฒ“ๆณถๆทผ็Ÿถ็Ÿธ็ €็ ‰็ —็ ˜็ ‘ๆ–ซ็ ญ็ œ็ ็ น็ บ็ ป็ Ÿ็ ผ็ ฅ็ ฌ็ ฃ็ ฉ็กŽ็กญ็ก–็ก—็ ฆ็ก็ก‡็กŒ็กช็ข›็ข“็ขš็ข‡็ขœ็ขก็ขฃ็ขฒ็ขน็ขฅ็ฃ”็ฃ™็ฃ‰็ฃฌ็ฃฒ็ค…็ฃด็ค“็คค็คž็คด้พ›้ปน้ปป้ปผ็›ฑ็œ„็œ็›น็œ‡็œˆ็œš็œข็œ™็œญ็œฆ็œต็œธ็็‘็‡็ƒ็š็จ๏ฟฝ".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ ้ ้ ‘้ ’้ “้ ”้ •้ –้ —้ ˜้ ™้ š้ ›้ œ้ ้ ž้ Ÿ้  ้ ก้ ข้ ฃ้ ค้ ฅ้ ฆ้ ง้ จ้ ฉ้ ช้ ซ้ ฌ้ ญ้ ฎ้ ฏ้ ฐ้ ฑ้ ฒ้ ณ้ ด้ ต้ ถ้ ท้ ธ้ น้ บ้ ป้ ผ้ ฝ้ พ้ ฟ้ก€้ก้ก‚้กƒ้ก„้ก…้ก†้ก‡้กˆ้ก‰้กŠ้ก‹้กŒ้ก๏ฟฝ้กŽ้ก้ก้ก‘้ก’้ก“้ก”้ก•้ก–้ก—้ก˜้ก™้กš้ก›้กœ้ก้กž้กŸ้ก ้กก้กข้กฃ้กค้กฅ้กฆ้กง้กจ้กฉ้กช้กซ้กฌ้กญ้กฎ็ข็ฅ็ฟ็ž็ฝ็ž€็žŒ็ž‘็žŸ็ž ็žฐ็žต็žฝ็”บ็•€็•Ž็•‹็•ˆ็•›็•ฒ็•น็–ƒ็ฝ˜็ฝก็ฝŸ่ฉˆ็ฝจ็ฝด็ฝฑ็ฝน็พ็ฝพ็›็›ฅ่ ฒ้’…้’†้’‡้’‹้’Š้’Œ้’้’้’้’”้’—้’•้’š้’›้’œ้’ฃ้’ค้’ซ้’ช้’ญ้’ฌ้’ฏ้’ฐ้’ฒ้’ด้’ถ้’ท้’ธ้’น้’บ้’ผ้’ฝ้’ฟ้“„้“ˆ้“‰้“Š้“‹้“Œ้“้“Ž้“้“‘้“’้“•้“–้“—้“™้“˜้“›้“ž้“Ÿ้“ ้“ข้“ค้“ฅ้“ง้“จ้“ช๏ฟฝ".split("");for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[239]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้กฏ้กฐ้กฑ้กฒ้กณ้กด้ข‹้ขŽ้ข’้ข•้ข™้ขฃ้ขจ้ขฉ้ขช้ขซ้ขฌ้ขญ้ขฎ้ขฏ้ขฐ้ขฑ้ขฒ้ขณ้ขด้ขต้ขถ้ขท้ขธ้ขน้ขบ้ขป้ขผ้ขฝ้ขพ้ขฟ้ฃ€้ฃ้ฃ‚้ฃƒ้ฃ„้ฃ…้ฃ†้ฃ‡้ฃˆ้ฃ‰้ฃŠ้ฃ‹้ฃŒ้ฃ้ฃ้ฃ้ฃ”้ฃ–้ฃ—้ฃ›้ฃœ้ฃ้ฃ ้ฃก้ฃข้ฃฃ้ฃค๏ฟฝ้ฃฅ้ฃฆ้ฃฉ้ฃช้ฃซ้ฃฌ้ฃญ้ฃฎ้ฃฏ้ฃฐ้ฃฑ้ฃฒ้ฃณ้ฃด้ฃต้ฃถ้ฃท้ฃธ้ฃน้ฃบ้ฃป้ฃผ้ฃฝ้ฃพ้ฃฟ้ค€้ค้ค‚้คƒ้ค„้ค…้ค†้ค‡้“ฉ้“ซ้“ฎ้“ฏ้“ณ้“ด้“ต้“ท้“น้“ผ้“ฝ้“ฟ้”ƒ้”‚้”†้”‡้”‰้”Š้”้”Ž้”้”’้”“้””้”•้”–้”˜้”›้”้”ž้”Ÿ้”ข้”ช้”ซ้”ฉ้”ฌ้”ฑ้”ฒ้”ด้”ถ้”ท้”ธ้”ผ้”พ้”ฟ้•‚้”ต้•„้•…้•†้•‰้•Œ้•Ž้•้•’้•“้•”้•–้•—้•˜้•™้•›้•ž้•Ÿ้•้•ก้•ข้•ค้•ฅ้•ฆ้•ง้•จ้•ฉ้•ช้•ซ้•ฌ้•ฏ้•ฑ้•ฒ้•ณ้”บ็Ÿง็Ÿฌ้›‰็ง•็งญ็งฃ็งซ็จ†ๅต‡็จƒ็จ‚็จž็จ”๏ฟฝ".split("");for(j=0;j!=D[239].length;++j)if(D[239][j].charCodeAt(0)!==65533){e[D[239][j]]=61184+j;d[61184+j]=D[239][j]}D[240]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้คˆ้ค‰้คŠ้ค‹้คŒ้คŽ้ค้ค‘้ค’้ค“้ค”้ค•้ค–้ค—้ค˜้ค™้คš้ค›้คœ้ค้คž้คŸ้ค ้คก้คข้คฃ้คค้คฅ้คฆ้คง้คจ้คฉ้คช้คซ้คฌ้คญ้คฏ้คฐ้คฑ้คฒ้คณ้คด้คต้คถ้คท้คธ้คน้คบ้คป้คผ้คฝ้คพ้คฟ้ฅ€้ฅ้ฅ‚้ฅƒ้ฅ„้ฅ…้ฅ†้ฅ‡้ฅˆ้ฅ‰๏ฟฝ้ฅŠ้ฅ‹้ฅŒ้ฅ้ฅŽ้ฅ้ฅ้ฅ‘้ฅ’้ฅ“้ฅ–้ฅ—้ฅ˜้ฅ™้ฅš้ฅ›้ฅœ้ฅ้ฅž้ฅŸ้ฅ ้ฅก้ฅข้ฅค้ฅฆ้ฅณ้ฅธ้ฅน้ฅป้ฅพ้ฆ‚้ฆƒ้ฆ‰็จน็จท็ฉ‘้ป้ฆฅ็ฉฐ็šˆ็šŽ็š“็š™็šค็“ž็“ ็”ฌ้ธ ้ธข้ธจ้ธฉ้ธช้ธซ้ธฌ้ธฒ้ธฑ้ธถ้ธธ้ธท้ธน้ธบ้ธพ้น้น‚้น„้น†้น‡้นˆ้น‰้น‹้นŒ้นŽ้น‘้น•้น—้นš้น›้นœ้นž้นฃ้นฆ้นง้นจ้นฉ้นช้นซ้นฌ้นฑ้นญ้นณ็–’็–”็––็– ็–็–ฌ็–ฃ็–ณ็–ด็–ธ็—„็–ฑ็–ฐ็—ƒ็—‚็—–็—็—ฃ็—จ็—ฆ็—ค็—ซ็—ง็˜ƒ็—ฑ็—ผ็—ฟ็˜็˜€็˜…็˜Œ็˜—็˜Š็˜ฅ็˜˜็˜•็˜™๏ฟฝ".split("");for(j=0;j!=D[240].length;++j)if(D[240][j].charCodeAt(0)!==65533){e[D[240][j]]=61440+j;d[61440+j]=D[240][j]}D[241]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฆŒ้ฆŽ้ฆš้ฆ›้ฆœ้ฆ้ฆž้ฆŸ้ฆ ้ฆก้ฆข้ฆฃ้ฆค้ฆฆ้ฆง้ฆฉ้ฆช้ฆซ้ฆฌ้ฆญ้ฆฎ้ฆฏ้ฆฐ้ฆฑ้ฆฒ้ฆณ้ฆด้ฆต้ฆถ้ฆท้ฆธ้ฆน้ฆบ้ฆป้ฆผ้ฆฝ้ฆพ้ฆฟ้ง€้ง้ง‚้งƒ้ง„้ง…้ง†้ง‡้งˆ้ง‰้งŠ้ง‹้งŒ้ง้งŽ้ง้ง้ง‘้ง’้ง“้ง”้ง•้ง–้ง—้ง˜๏ฟฝ้ง™้งš้ง›้งœ้ง้งž้งŸ้ง ้งก้งข้งฃ้งค้งฅ้งฆ้งง้งจ้งฉ้งช้งซ้งฌ้งญ้งฎ้งฏ้งฐ้งฑ้งฒ้งณ้งด้งต้งถ้งท้งธ้งน็˜›็˜ผ็˜ข็˜ ็™€็˜ญ็˜ฐ็˜ฟ็˜ต็™ƒ็˜พ็˜ณ็™็™ž็™”็™œ็™–็™ซ็™ฏ็ฟŠ็ซฆ็ฉธ็ฉน็ช€็ช†็ชˆ็ช•็ชฆ็ช ็ชฌ็ชจ็ชญ็ชณ่กค่กฉ่กฒ่กฝ่กฟ่ข‚่ขข่ฃ†่ขท่ขผ่ฃ‰่ฃข่ฃŽ่ฃฃ่ฃฅ่ฃฑ่คš่ฃผ่ฃจ่ฃพ่ฃฐ่คก่ค™่ค“่ค›่คŠ่คด่คซ่คถ่ฅ่ฅฆ่ฅป็–‹่ƒฅ็šฒ็šด็Ÿœ่€’่€”่€–่€œ่€ ่€ข่€ฅ่€ฆ่€ง่€ฉ่€จ่€ฑ่€‹่€ต่ƒ่†่่’่ฉ่ฑ่ฆƒ้กธ้ข€้ขƒ๏ฟฝ".split("");for(j=0;j!=D[241].length;++j)if(D[241][j].charCodeAt(0)!==65533){e[D[241][j]]=61696+j;d[61696+j]=D[241][j]}D[242]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้งบ้งป้งผ้งฝ้งพ้งฟ้จ€้จ้จ‚้จƒ้จ„้จ…้จ†้จ‡้จˆ้จ‰้จŠ้จ‹้จŒ้จ้จŽ้จ้จ้จ‘้จ’้จ“้จ”้จ•้จ–้จ—้จ˜้จ™้จš้จ›้จœ้จ้จž้จŸ้จ ้จก้จข้จฃ้จค้จฅ้จฆ้จง้จจ้จฉ้จช้จซ้จฌ้จญ้จฎ้จฏ้จฐ้จฑ้จฒ้จณ้จด้จต้จถ้จท้จธ๏ฟฝ้จน้จบ้จป้จผ้จฝ้จพ้จฟ้ฉ€้ฉ้ฉ‚้ฉƒ้ฉ„้ฉ…้ฉ†้ฉ‡้ฉˆ้ฉ‰้ฉŠ้ฉ‹้ฉŒ้ฉ้ฉŽ้ฉ้ฉ้ฉ‘้ฉ’้ฉ“้ฉ”้ฉ•้ฉ–้ฉ—้ฉ˜้ฉ™้ข‰้ขŒ้ข้ข้ข”้ขš้ข›้ขž้ขŸ้ขก้ขข้ขฅ้ขฆ่™่™”่™ฌ่™ฎ่™ฟ่™บ่™ผ่™ป่šจ่š่š‹่šฌ่š่šง่šฃ่šช่š“่šฉ่šถ่›„่šต่›Ž่šฐ่šบ่šฑ่šฏ่›‰่›่šด่›ฉ่›ฑ่›ฒ่›ญ่›ณ่›่œ“่›ž่›ด่›Ÿ่›˜่›‘่œƒ่œ‡่›ธ่œˆ่œŠ่œ่œ‰่œฃ่œป่œž่œฅ่œฎ่œš่œพ่ˆ่œด่œฑ่œฉ่œท่œฟ่ž‚่œข่ฝ่พ่ป่ ่ฐ่Œ่ฎ่ž‹่“่ฃ่ผ่ค่™่ฅ่ž“่žฏ่žจ่Ÿ’๏ฟฝ".split("");for(j=0;j!=D[242].length;++j)if(D[242][j].charCodeAt(0)!==65533){e[D[242][j]]=61952+j;d[61952+j]=D[242][j]}D[243]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฉš้ฉ›้ฉœ้ฉ้ฉž้ฉŸ้ฉ ้ฉก้ฉข้ฉฃ้ฉค้ฉฅ้ฉฆ้ฉง้ฉจ้ฉฉ้ฉช้ฉซ้ฉฒ้ชƒ้ช‰้ช้ชŽ้ช”้ช•้ช™้ชฆ้ชฉ้ชช้ชซ้ชฌ้ชญ้ชฎ้ชฏ้ชฒ้ชณ้ชด้ชต้ชน้ชป้ชฝ้ชพ้ชฟ้ซƒ้ซ„้ซ†้ซ‡้ซˆ้ซ‰้ซŠ้ซ้ซŽ้ซ้ซ้ซ’้ซ”้ซ•้ซ–้ซ—้ซ™้ซš้ซ›้ซœ๏ฟฝ้ซ้ซž้ซ ้ซข้ซฃ้ซค้ซฅ้ซง้ซจ้ซฉ้ซช้ซฌ้ซฎ้ซฐ้ซฑ้ซฒ้ซณ้ซด้ซต้ซถ้ซท้ซธ้ซบ้ซผ้ซฝ้ซพ้ซฟ้ฌ€้ฌ้ฌ‚้ฌ„้ฌ…้ฌ†่Ÿ†่žˆ่ž…่žญ่ž—่žƒ่žซ่Ÿฅ่žฌ่žต่žณ่Ÿ‹่Ÿ“่žฝ่Ÿ‘่Ÿ€่ŸŠ่Ÿ›่Ÿช่Ÿ ่Ÿฎ่ –่ “่Ÿพ่ Š่ ›่ ก่ น่ ผ็ผถ็ฝ‚็ฝ„็ฝ…่ˆ็ซบ็ซฝ็ฌˆ็ฌƒ็ฌ„็ฌ•็ฌŠ็ฌซ็ฌ็ญ‡็ฌธ็ฌช็ฌ™็ฌฎ็ฌฑ็ฌ ็ฌฅ็ฌค็ฌณ็ฌพ็ฌž็ญ˜็ญš็ญ…็ญต็ญŒ็ญ็ญ ็ญฎ็ญป็ญข็ญฒ็ญฑ็ฎ็ฎฆ็ฎง็ฎธ็ฎฌ็ฎ็ฎจ็ฎ…็ฎช็ฎœ็ฎข็ฎซ็ฎด็ฏ‘็ฏ็ฏŒ็ฏ็ฏš็ฏฅ็ฏฆ็ฏช็ฐŒ็ฏพ็ฏผ็ฐ็ฐ–็ฐ‹๏ฟฝ".split("");for(j=0;j!=D[243].length;++j)if(D[243][j].charCodeAt(0)!==65533){e[D[243][j]]=62208+j;d[62208+j]=D[243][j]}D[244]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฌ‡้ฌ‰้ฌŠ้ฌ‹้ฌŒ้ฌ้ฌŽ้ฌ้ฌ‘้ฌ’้ฌ”้ฌ•้ฌ–้ฌ—้ฌ˜้ฌ™้ฌš้ฌ›้ฌœ้ฌ้ฌž้ฌ ้ฌก้ฌข้ฌค้ฌฅ้ฌฆ้ฌง้ฌจ้ฌฉ้ฌช้ฌซ้ฌฌ้ฌญ้ฌฎ้ฌฐ้ฌฑ้ฌณ้ฌด้ฌต้ฌถ้ฌท้ฌธ้ฌน้ฌบ้ฌฝ้ฌพ้ฌฟ้ญ€้ญ†้ญŠ้ญ‹้ญŒ้ญŽ้ญ้ญ’้ญ“้ญ•้ญ–้ญ—้ญ˜้ญ™้ญš๏ฟฝ้ญ›้ญœ้ญ้ญž้ญŸ้ญ ้ญก้ญข้ญฃ้ญค้ญฅ้ญฆ้ญง้ญจ้ญฉ้ญช้ญซ้ญฌ้ญญ้ญฎ้ญฏ้ญฐ้ญฑ้ญฒ้ญณ้ญด้ญต้ญถ้ญท้ญธ้ญน้ญบ้ญป็ฐŸ็ฐช็ฐฆ็ฐธ็ฑ็ฑ€่‡พ่ˆ่ˆ‚่ˆ„่‡ฌ่ก„่ˆก่ˆข่ˆฃ่ˆญ่ˆฏ่ˆจ่ˆซ่ˆธ่ˆป่ˆณ่ˆด่ˆพ่‰„่‰‰่‰‹่‰่‰š่‰Ÿ่‰จ่กพ่ข…่ขˆ่ฃ˜่ฃŸ่ฅž็พ็พŸ็พง็พฏ็พฐ็พฒ็ฑผๆ•‰็ฒ‘็ฒ็ฒœ็ฒž็ฒข็ฒฒ็ฒผ็ฒฝ็ณ็ณ‡็ณŒ็ณ็ณˆ็ณ…็ณ—็ณจ่‰ฎๆšจ็พฟ็ฟŽ็ฟ•็ฟฅ็ฟก็ฟฆ็ฟฉ็ฟฎ็ฟณ็ณธ็ตท็ถฆ็ถฎ็น‡็บ›้บธ้บด่ตณ่ถ„่ถ”่ถ‘่ถฑ่ตง่ตญ่ฑ‡่ฑ‰้…Š้…้…Ž้…้…ค๏ฟฝ".split("");for(j=0;j!=D[244].length;++j)if(D[244][j].charCodeAt(0)!==65533){e[D[244][j]]=62464+j;d[62464+j]=D[244][j]}D[245]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ญผ้ญฝ้ญพ้ญฟ้ฎ€้ฎ้ฎ‚้ฎƒ้ฎ„้ฎ…้ฎ†้ฎ‡้ฎˆ้ฎ‰้ฎŠ้ฎ‹้ฎŒ้ฎ้ฎŽ้ฎ้ฎ้ฎ‘้ฎ’้ฎ“้ฎ”้ฎ•้ฎ–้ฎ—้ฎ˜้ฎ™้ฎš้ฎ›้ฎœ้ฎ้ฎž้ฎŸ้ฎ ้ฎก้ฎข้ฎฃ้ฎค้ฎฅ้ฎฆ้ฎง้ฎจ้ฎฉ้ฎช้ฎซ้ฎฌ้ฎญ้ฎฎ้ฎฏ้ฎฐ้ฎฑ้ฎฒ้ฎณ้ฎด้ฎต้ฎถ้ฎท้ฎธ้ฎน้ฎบ๏ฟฝ้ฎป้ฎผ้ฎฝ้ฎพ้ฎฟ้ฏ€้ฏ้ฏ‚้ฏƒ้ฏ„้ฏ…้ฏ†้ฏ‡้ฏˆ้ฏ‰้ฏŠ้ฏ‹้ฏŒ้ฏ้ฏŽ้ฏ้ฏ้ฏ‘้ฏ’้ฏ“้ฏ”้ฏ•้ฏ–้ฏ—้ฏ˜้ฏ™้ฏš้ฏ›้…ข้…ก้…ฐ้…ฉ้…ฏ้…ฝ้…พ้…ฒ้…ด้…น้†Œ้†…้†้†้†‘้†ข้†ฃ้†ช้†ญ้†ฎ้†ฏ้†ต้†ด้†บ่ฑ•้นพ่ถธ่ทซ่ธ…่น™่นฉ่ถต่ถฟ่ถผ่ถบ่ท„่ท–่ท—่ทš่ทž่ทŽ่ท่ท›่ท†่ทฌ่ทท่ทธ่ทฃ่ทน่ทป่ทค่ธ‰่ทฝ่ธ”่ธ่ธŸ่ธฌ่ธฎ่ธฃ่ธฏ่ธบ่น€่ธน่ธต่ธฝ่ธฑ่น‰่น่น‚่น‘่น’่นŠ่นฐ่นถ่นผ่นฏ่นด่บ…่บ่บ”่บ่บœ่บž่ฑธ่ฒ‚่ฒŠ่ฒ…่ฒ˜่ฒ”ๆ–›่ง–่งž่งš่งœ๏ฟฝ".split("");for(j=0;j!=D[245].length;++j)if(D[245][j].charCodeAt(0)!==65533){e[D[245][j]]=62720+j;d[62720+j]=D[245][j]}D[246]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฏœ้ฏ้ฏž้ฏŸ้ฏ ้ฏก้ฏข้ฏฃ้ฏค้ฏฅ้ฏฆ้ฏง้ฏจ้ฏฉ้ฏช้ฏซ้ฏฌ้ฏญ้ฏฎ้ฏฏ้ฏฐ้ฏฑ้ฏฒ้ฏณ้ฏด้ฏต้ฏถ้ฏท้ฏธ้ฏน้ฏบ้ฏป้ฏผ้ฏฝ้ฏพ้ฏฟ้ฐ€้ฐ้ฐ‚้ฐƒ้ฐ„้ฐ…้ฐ†้ฐ‡้ฐˆ้ฐ‰้ฐŠ้ฐ‹้ฐŒ้ฐ้ฐŽ้ฐ้ฐ้ฐ‘้ฐ’้ฐ“้ฐ”้ฐ•้ฐ–้ฐ—้ฐ˜้ฐ™้ฐš๏ฟฝ้ฐ›้ฐœ้ฐ้ฐž้ฐŸ้ฐ ้ฐก้ฐข้ฐฃ้ฐค้ฐฅ้ฐฆ้ฐง้ฐจ้ฐฉ้ฐช้ฐซ้ฐฌ้ฐญ้ฐฎ้ฐฏ้ฐฐ้ฐฑ้ฐฒ้ฐณ้ฐด้ฐต้ฐถ้ฐท้ฐธ้ฐน้ฐบ้ฐป่งฅ่งซ่งฏ่จพ่ฌฆ้“้›ฉ้›ณ้›ฏ้œ†้œ้œˆ้œ้œŽ้œช้œญ้œฐ้œพ้พ€้พƒ้พ…้พ†้พ‡้พˆ้พ‰้พŠ้พŒ้ปพ้ผ‹้ผ้šน้šผ้šฝ้›Ž้›’็žฟ้› ้ŠŽ้Šฎ้‹ˆ้Œพ้ช้Š้Ž้พ้‘ซ้ฑฟ้ฒ‚้ฒ…้ฒ†้ฒ‡้ฒˆ็จฃ้ฒ‹้ฒŽ้ฒ้ฒ‘้ฒ’้ฒ”้ฒ•้ฒš้ฒ›้ฒž้ฒŸ้ฒ ้ฒก้ฒข้ฒฃ้ฒฅ้ฒฆ้ฒง้ฒจ้ฒฉ้ฒซ้ฒญ้ฒฎ้ฒฐ้ฒฑ้ฒฒ้ฒณ้ฒด้ฒต้ฒถ้ฒท้ฒบ้ฒป้ฒผ้ฒฝ้ณ„้ณ…้ณ†้ณ‡้ณŠ้ณ‹๏ฟฝ".split("");for(j=0;j!=D[246].length;++j)if(D[246][j].charCodeAt(0)!==65533){e[D[246][j]]=62976+j;d[62976+j]=D[246][j]}D[247]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฐผ้ฐฝ้ฐพ้ฐฟ้ฑ€้ฑ้ฑ‚้ฑƒ้ฑ„้ฑ…้ฑ†้ฑ‡้ฑˆ้ฑ‰้ฑŠ้ฑ‹้ฑŒ้ฑ้ฑŽ้ฑ้ฑ้ฑ‘้ฑ’้ฑ“้ฑ”้ฑ•้ฑ–้ฑ—้ฑ˜้ฑ™้ฑš้ฑ›้ฑœ้ฑ้ฑž้ฑŸ้ฑ ้ฑก้ฑข้ฑฃ้ฑค้ฑฅ้ฑฆ้ฑง้ฑจ้ฑฉ้ฑช้ฑซ้ฑฌ้ฑญ้ฑฎ้ฑฏ้ฑฐ้ฑฑ้ฑฒ้ฑณ้ฑด้ฑต้ฑถ้ฑท้ฑธ้ฑน้ฑบ๏ฟฝ้ฑป้ฑฝ้ฑพ้ฒ€้ฒƒ้ฒ„้ฒ‰้ฒŠ้ฒŒ้ฒ้ฒ“้ฒ–้ฒ—้ฒ˜้ฒ™้ฒ้ฒช้ฒฌ้ฒฏ้ฒน้ฒพ้ฒฟ้ณ€้ณ้ณ‚้ณˆ้ณ‰้ณ‘้ณ’้ณš้ณ›้ณ ้ณก้ณŒ้ณ้ณŽ้ณ้ณ้ณ“้ณ”้ณ•้ณ—้ณ˜้ณ™้ณœ้ณ้ณŸ้ณข้ผ้ž…้ž‘้ž’้ž”้žฏ้žซ้žฃ้žฒ้žด้ชฑ้ชฐ้ชท้น˜้ชถ้ชบ้ชผ้ซ้ซ€้ซ…้ซ‚้ซ‹้ซŒ้ซ‘้ญ…้ญƒ้ญ‡้ญ‰้ญˆ้ญ้ญ‘้ฃจ้ค้คฎ้ฅ•้ฅ”้ซŸ้ซก้ซฆ้ซฏ้ซซ้ซป้ซญ้ซน้ฌˆ้ฌ้ฌ“้ฌŸ้ฌฃ้บฝ้บพ็ธป้บ‚้บ‡้บˆ้บ‹้บ’้–้บ้บŸ้ป›้ปœ้ป้ป ้ปŸ้ปข้ปฉ้ปง้ปฅ้ปช้ปฏ้ผข้ผฌ้ผฏ้ผน้ผท้ผฝ้ผพ้ฝ„๏ฟฝ".split("");for(j=0;j!=D[247].length;++j)if(D[247][j].charCodeAt(0)!==65533){e[D[247][j]]=63232+j;d[63232+j]=D[247][j]}D[248]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ณฃ้ณค้ณฅ้ณฆ้ณง้ณจ้ณฉ้ณช้ณซ้ณฌ้ณญ้ณฎ้ณฏ้ณฐ้ณฑ้ณฒ้ณณ้ณด้ณต้ณถ้ณท้ณธ้ณน้ณบ้ณป้ณผ้ณฝ้ณพ้ณฟ้ด€้ด้ด‚้ดƒ้ด„้ด…้ด†้ด‡้ดˆ้ด‰้ดŠ้ด‹้ดŒ้ด้ดŽ้ด้ด้ด‘้ด’้ด“้ด”้ด•้ด–้ด—้ด˜้ด™้ดš้ด›้ดœ้ด้ดž้ดŸ้ด ้ดก๏ฟฝ้ดข้ดฃ้ดค้ดฅ้ดฆ้ดง้ดจ้ดฉ้ดช้ดซ้ดฌ้ดญ้ดฎ้ดฏ้ดฐ้ดฑ้ดฒ้ดณ้ดด้ดต้ดถ้ดท้ดธ้ดน้ดบ้ดป้ดผ้ดฝ้ดพ้ดฟ้ต€้ต้ต‚๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[248].length;++j)if(D[248][j].charCodeAt(0)!==65533){e[D[248][j]]=63488+j;d[63488+j]=D[248][j]}D[249]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ตƒ้ต„้ต…้ต†้ต‡้ตˆ้ต‰้ตŠ้ต‹้ตŒ้ต้ตŽ้ต้ต้ต‘้ต’้ต“้ต”้ต•้ต–้ต—้ต˜้ต™้ตš้ต›้ตœ้ต้ตž้ตŸ้ต ้ตก้ตข้ตฃ้ตค้ตฅ้ตฆ้ตง้ตจ้ตฉ้ตช้ตซ้ตฌ้ตญ้ตฎ้ตฏ้ตฐ้ตฑ้ตฒ้ตณ้ตด้ตต้ตถ้ตท้ตธ้ตน้ตบ้ตป้ตผ้ตฝ้ตพ้ตฟ้ถ€้ถ๏ฟฝ้ถ‚้ถƒ้ถ„้ถ…้ถ†้ถ‡้ถˆ้ถ‰้ถŠ้ถ‹้ถŒ้ถ้ถŽ้ถ้ถ้ถ‘้ถ’้ถ“้ถ”้ถ•้ถ–้ถ—้ถ˜้ถ™้ถš้ถ›้ถœ้ถ้ถž้ถŸ้ถ ้ถก้ถข๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[249].length;++j)if(D[249][j].charCodeAt(0)!==65533){e[D[249][j]]=63744+j;d[63744+j]=D[249][j]}D[250]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ถฃ้ถค้ถฅ้ถฆ้ถง้ถจ้ถฉ้ถช้ถซ้ถฌ้ถญ้ถฎ้ถฏ้ถฐ้ถฑ้ถฒ้ถณ้ถด้ถต้ถถ้ถท้ถธ้ถน้ถบ้ถป้ถผ้ถฝ้ถพ้ถฟ้ท€้ท้ท‚้ทƒ้ท„้ท…้ท†้ท‡้ทˆ้ท‰้ทŠ้ท‹้ทŒ้ท้ทŽ้ท้ท้ท‘้ท’้ท“้ท”้ท•้ท–้ท—้ท˜้ท™้ทš้ท›้ทœ้ท้ทž้ทŸ้ท ้ทก๏ฟฝ้ทข้ทฃ้ทค้ทฅ้ทฆ้ทง้ทจ้ทฉ้ทช้ทซ้ทฌ้ทญ้ทฎ้ทฏ้ทฐ้ทฑ้ทฒ้ทณ้ทด้ทต้ทถ้ทท้ทธ้ทน้ทบ้ทป้ทผ้ทฝ้ทพ้ทฟ้ธ€้ธ้ธ‚๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[250].length;++j)if(D[250][j].charCodeAt(0)!==65533){e[D[250][j]]=64e3+j;d[64e3+j]=D[250][j]}D[251]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ธƒ้ธ„้ธ…้ธ†้ธ‡้ธˆ้ธ‰้ธŠ้ธ‹้ธŒ้ธ้ธŽ้ธ้ธ้ธ‘้ธ’้ธ“้ธ”้ธ•้ธ–้ธ—้ธ˜้ธ™้ธš้ธ›้ธœ้ธ้ธž้ธค้ธง้ธฎ้ธฐ้ธด้ธป้ธผ้น€้น้น้น’้น“้น”้น–้น™้น้นŸ้น ้นก้นข้นฅ้นฎ้นฏ้นฒ้นด้นต้นถ้นท้นธ้นน้นบ้นป้นผ้นฝ้บ€๏ฟฝ้บ้บƒ้บ„้บ…้บ†้บ‰้บŠ้บŒ้บ้บŽ้บ้บ้บ‘้บ”้บ•้บ–้บ—้บ˜้บ™้บš้บ›้บœ้บž้บ ้บก้บข้บฃ้บค้บฅ้บง้บจ้บฉ้บช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[251].length;++j)if(D[251][j].charCodeAt(0)!==65533){e[D[251][j]]=64256+j;d[64256+j]=D[251][j]}D[252]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้บซ้บฌ้บญ้บฎ้บฏ้บฐ้บฑ้บฒ้บณ้บต้บถ้บท้บน้บบ้บผ้บฟ้ป€้ป้ป‚้ปƒ้ป…้ป†้ป‡้ปˆ้ปŠ้ป‹้ปŒ้ป้ป’้ป“้ป•้ป–้ป—้ป™้ปš้ปž้ปก้ปฃ้ปค้ปฆ้ปจ้ปซ้ปฌ้ปญ้ปฎ้ปฐ้ปฑ้ปฒ้ปณ้ปด้ปต้ปถ้ปท้ปธ้ปบ้ปฝ้ปฟ้ผ€้ผ้ผ‚้ผƒ้ผ„้ผ…๏ฟฝ้ผ†้ผ‡้ผˆ้ผ‰้ผŠ้ผŒ้ผ้ผ‘้ผ’้ผ”้ผ•้ผ–้ผ˜้ผš้ผ›้ผœ้ผ้ผž้ผŸ้ผก้ผฃ้ผค้ผฅ้ผฆ้ผง้ผจ้ผฉ้ผช้ผซ้ผญ้ผฎ้ผฐ้ผฑ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[252].length;++j)if(D[252][j].charCodeAt(0)!==65533){e[D[252][j]]=64512+j;d[64512+j]=D[252][j]}D[253]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ผฒ้ผณ้ผด้ผต้ผถ้ผธ้ผบ้ผผ้ผฟ้ฝ€้ฝ้ฝ‚้ฝƒ้ฝ…้ฝ†้ฝ‡้ฝˆ้ฝ‰้ฝŠ้ฝ‹้ฝŒ้ฝ้ฝŽ้ฝ้ฝ’้ฝ“้ฝ”้ฝ•้ฝ–้ฝ—้ฝ˜้ฝ™้ฝš้ฝ›้ฝœ้ฝ้ฝž้ฝŸ้ฝ ้ฝก้ฝข้ฝฃ้ฝค้ฝฅ้ฝฆ้ฝง้ฝจ้ฝฉ้ฝช้ฝซ้ฝฌ้ฝญ้ฝฎ้ฝฏ้ฝฐ้ฝฑ้ฝฒ้ฝณ้ฝด้ฝต้ฝถ้ฝท้ฝธ๏ฟฝ้ฝน้ฝบ้ฝป้ฝผ้ฝฝ้ฝพ้พ้พ‚้พ้พŽ้พ้พ้พ‘้พ’้พ“้พ”้พ•้พ–้พ—้พ˜้พœ้พ้พž้พก้พข้พฃ้พค้พฅ๏คฌ๏ฅน๏ฆ•๏งง๏งฑ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[253].length;++j)if(D[253][j].charCodeAt(0)!==65533){e[D[253][j]]=64768+j;d[64768+j]=D[253][j]}D[254]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏จŒ๏จ๏จŽ๏จ๏จ‘๏จ“๏จ”๏จ˜๏จŸ๏จ ๏จก๏จฃ๏จค๏จง๏จจ๏จฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[254].length;++j)if(D[254][j].charCodeAt(0)!==65533){e[D[254][j]]=65024+j;d[65024+j]=D[254][j]}return{enc:e,dec:d}}();cptable[949]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[129]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ฐ‚๊ฐƒ๊ฐ…๊ฐ†๊ฐ‹๊ฐŒ๊ฐ๊ฐŽ๊ฐ๊ฐ˜๊ฐž๊ฐŸ๊ฐก๊ฐข๊ฐฃ๊ฐฅ๊ฐฆ๊ฐง๊ฐจ๊ฐฉ๊ฐช๊ฐซ๊ฐฎ๊ฐฒ๊ฐณ๊ฐด๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ฐต๊ฐถ๊ฐท๊ฐบ๊ฐป๊ฐฝ๊ฐพ๊ฐฟ๊ฑ๊ฑ‚๊ฑƒ๊ฑ„๊ฑ…๊ฑ†๊ฑ‡๊ฑˆ๊ฑ‰๊ฑŠ๊ฑŒ๊ฑŽ๊ฑ๊ฑ๊ฑ‘๊ฑ’๊ฑ“๊ฑ•๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ฑ–๊ฑ—๊ฑ™๊ฑš๊ฑ›๊ฑ๊ฑž๊ฑŸ๊ฑ ๊ฑก๊ฑข๊ฑฃ๊ฑค๊ฑฅ๊ฑฆ๊ฑง๊ฑจ๊ฑฉ๊ฑช๊ฑซ๊ฑฌ๊ฑญ๊ฑฎ๊ฑฏ๊ฑฒ๊ฑณ๊ฑต๊ฑถ๊ฑน๊ฑป๊ฑผ๊ฑฝ๊ฑพ๊ฑฟ๊ฒ‚๊ฒ‡๊ฒˆ๊ฒ๊ฒŽ๊ฒ๊ฒ‘๊ฒ’๊ฒ“๊ฒ•๊ฒ–๊ฒ—๊ฒ˜๊ฒ™๊ฒš๊ฒ›๊ฒž๊ฒข๊ฒฃ๊ฒค๊ฒฅ๊ฒฆ๊ฒง๊ฒซ๊ฒญ๊ฒฎ๊ฒฑ๊ฒฒ๊ฒณ๊ฒด๊ฒต๊ฒถ๊ฒท๊ฒบ๊ฒพ๊ฒฟ๊ณ€๊ณ‚๊ณƒ๊ณ…๊ณ†๊ณ‡๊ณ‰๊ณŠ๊ณ‹๊ณ๊ณŽ๊ณ๊ณ๊ณ‘๊ณ’๊ณ“๊ณ”๊ณ–๊ณ˜๊ณ™๊ณš๊ณ›๊ณœ๊ณ๊ณž๊ณŸ๊ณข๊ณฃ๊ณฅ๊ณฆ๊ณฉ๊ณซ๊ณญ๊ณฎ๊ณฒ๊ณด๊ณท๊ณธ๊ณน๊ณบ๊ณป๊ณพ๊ณฟ๊ด๊ด‚๊ดƒ๊ด…๊ด‡๊ดˆ๊ด‰๊ดŠ๊ด‹๊ดŽ๊ด๊ด’๊ด“๏ฟฝ".split("");for(j=0;j!=D[129].length;++j)if(D[129][j].charCodeAt(0)!==65533){e[D[129][j]]=33024+j;d[33024+j]=D[129][j]}D[130]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ด”๊ด•๊ด–๊ด—๊ด™๊ดš๊ด›๊ด๊ดž๊ดŸ๊ดก๊ดข๊ดฃ๊ดค๊ดฅ๊ดฆ๊ดง๊ดจ๊ดช๊ดซ๊ดฎ๊ดฏ๊ดฐ๊ดฑ๊ดฒ๊ดณ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ดถ๊ดท๊ดน๊ดบ๊ดป๊ดฝ๊ดพ๊ดฟ๊ต€๊ต๊ต‚๊ตƒ๊ต†๊ตˆ๊ตŠ๊ต‹๊ตŒ๊ต๊ตŽ๊ต๊ต‘๊ต’๊ต“๊ต•๊ต–๊ต—๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ต™๊ตš๊ต›๊ตœ๊ต๊ตž๊ตŸ๊ต ๊ตข๊ตค๊ตฅ๊ตฆ๊ตง๊ตจ๊ตฉ๊ตช๊ตซ๊ตฎ๊ตฏ๊ตฑ๊ตฒ๊ตท๊ตธ๊ตน๊ตบ๊ตพ๊ถ€๊ถƒ๊ถ„๊ถ…๊ถ†๊ถ‡๊ถŠ๊ถ‹๊ถ๊ถŽ๊ถ๊ถ‘๊ถ’๊ถ“๊ถ”๊ถ•๊ถ–๊ถ—๊ถ˜๊ถ™๊ถš๊ถ›๊ถž๊ถŸ๊ถ ๊ถก๊ถข๊ถฃ๊ถฅ๊ถฆ๊ถง๊ถจ๊ถฉ๊ถช๊ถซ๊ถฌ๊ถญ๊ถฎ๊ถฏ๊ถฐ๊ถฑ๊ถฒ๊ถณ๊ถด๊ถต๊ถถ๊ถธ๊ถน๊ถบ๊ถป๊ถผ๊ถฝ๊ถพ๊ถฟ๊ท‚๊ทƒ๊ท…๊ท†๊ท‡๊ท‰๊ทŠ๊ท‹๊ทŒ๊ท๊ทŽ๊ท๊ท’๊ท”๊ท•๊ท–๊ท—๊ท˜๊ท™๊ทš๊ท›๊ท๊ทž๊ทŸ๊ทก๊ทข๊ทฃ๊ทฅ๊ทฆ๊ทง๊ทจ๊ทฉ๊ทช๊ทซ๊ทฌ๊ทญ๊ทฎ๊ทฏ๊ทฐ๊ทฑ๊ทฒ๊ทณ๊ทด๊ทต๊ทถ๊ทท๏ฟฝ".split("");for(j=0;j!=D[130].length;++j)if(D[130][j].charCodeAt(0)!==65533){e[D[130][j]]=33280+j;d[33280+j]=D[130][j]}D[131]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ทบ๊ทป๊ทฝ๊ทพ๊ธ‚๊ธƒ๊ธ„๊ธ…๊ธ†๊ธ‡๊ธŠ๊ธŒ๊ธŽ๊ธ๊ธ๊ธ‘๊ธ’๊ธ“๊ธ•๊ธ–๊ธ—๊ธ˜๊ธ™๊ธš๊ธ›๊ธœ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ธ๊ธž๊ธŸ๊ธ ๊ธก๊ธข๊ธฃ๊ธค๊ธฅ๊ธฆ๊ธง๊ธจ๊ธฉ๊ธช๊ธซ๊ธฌ๊ธญ๊ธฎ๊ธฏ๊ธฒ๊ธณ๊ธต๊ธถ๊ธน๊ธป๊ธผ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ธฝ๊ธพ๊ธฟ๊น‚๊น„๊น‡๊นˆ๊น‰๊น‹๊น๊น‘๊น’๊น“๊น•๊น—๊น˜๊น™๊นš๊น›๊นž๊นข๊นฃ๊นค๊นฆ๊นง๊นช๊นซ๊นญ๊นฎ๊นฏ๊นฑ๊นฒ๊นณ๊นด๊นต๊นถ๊นท๊นบ๊นพ๊นฟ๊บ€๊บ๊บ‚๊บƒ๊บ†๊บ‡๊บˆ๊บ‰๊บŠ๊บ‹๊บ๊บŽ๊บ๊บ๊บ‘๊บ’๊บ“๊บ”๊บ•๊บ–๊บ—๊บ˜๊บ™๊บš๊บ›๊บœ๊บ๊บž๊บŸ๊บ ๊บก๊บข๊บฃ๊บค๊บฅ๊บฆ๊บง๊บจ๊บฉ๊บช๊บซ๊บฌ๊บญ๊บฎ๊บฏ๊บฐ๊บฑ๊บฒ๊บณ๊บด๊บต๊บถ๊บท๊บธ๊บน๊บบ๊บป๊บฟ๊ป๊ป‚๊ปƒ๊ป…๊ป†๊ป‡๊ปˆ๊ป‰๊ปŠ๊ป‹๊ปŽ๊ป’๊ป“๊ป”๊ป•๊ป–๊ป—๊ปš๊ป›๊ป๊ปž๊ปŸ๊ป ๊ปก๊ปข๊ปฃ๊ปค๊ปฅ๏ฟฝ".split("");for(j=0;j!=D[131].length;++j)if(D[131][j].charCodeAt(0)!==65533){e[D[131][j]]=33536+j;d[33536+j]=D[131][j]}D[132]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ปฆ๊ปง๊ปฉ๊ปช๊ปฌ๊ปฎ๊ปฏ๊ปฐ๊ปฑ๊ปฒ๊ปณ๊ปต๊ปถ๊ปท๊ปน๊ปบ๊ปป๊ปฝ๊ปพ๊ปฟ๊ผ€๊ผ๊ผ‚๊ผƒ๊ผ„๊ผ…๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ผ†๊ผ‰๊ผŠ๊ผ‹๊ผŒ๊ผŽ๊ผ๊ผ‘๊ผ’๊ผ“๊ผ”๊ผ•๊ผ–๊ผ—๊ผ˜๊ผ™๊ผš๊ผ›๊ผœ๊ผ๊ผž๊ผŸ๊ผ ๊ผก๊ผข๊ผฃ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ผค๊ผฅ๊ผฆ๊ผง๊ผจ๊ผฉ๊ผช๊ผซ๊ผฎ๊ผฏ๊ผฑ๊ผณ๊ผต๊ผถ๊ผท๊ผธ๊ผน๊ผบ๊ผป๊ผพ๊ฝ€๊ฝ„๊ฝ…๊ฝ†๊ฝ‡๊ฝŠ๊ฝ‹๊ฝŒ๊ฝ๊ฝŽ๊ฝ๊ฝ‘๊ฝ’๊ฝ“๊ฝ”๊ฝ•๊ฝ–๊ฝ—๊ฝ˜๊ฝ™๊ฝš๊ฝ›๊ฝž๊ฝŸ๊ฝ ๊ฝก๊ฝข๊ฝฃ๊ฝฆ๊ฝง๊ฝจ๊ฝฉ๊ฝช๊ฝซ๊ฝฌ๊ฝญ๊ฝฎ๊ฝฏ๊ฝฐ๊ฝฑ๊ฝฒ๊ฝณ๊ฝด๊ฝต๊ฝถ๊ฝท๊ฝธ๊ฝบ๊ฝป๊ฝผ๊ฝฝ๊ฝพ๊ฝฟ๊พ๊พ‚๊พƒ๊พ…๊พ†๊พ‡๊พ‰๊พŠ๊พ‹๊พŒ๊พ๊พŽ๊พ๊พ’๊พ“๊พ”๊พ–๊พ—๊พ˜๊พ™๊พš๊พ›๊พ๊พž๊พŸ๊พ ๊พก๊พข๊พฃ๊พค๊พฅ๊พฆ๊พง๊พจ๊พฉ๊พช๊พซ๊พฌ๊พญ๊พฎ๊พฏ๊พฐ๊พฑ๊พฒ๊พณ๊พด๊พต๊พถ๊พท๊พบ๊พป๊พฝ๊พพ๏ฟฝ".split("");for(j=0;j!=D[132].length;++j)if(D[132][j].charCodeAt(0)!==65533){e[D[132][j]]=33792+j;d[33792+j]=D[132][j]}D[133]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊พฟ๊ฟ๊ฟ‚๊ฟƒ๊ฟ„๊ฟ…๊ฟ†๊ฟŠ๊ฟŒ๊ฟ๊ฟ๊ฟ‘๊ฟ’๊ฟ“๊ฟ•๊ฟ–๊ฟ—๊ฟ˜๊ฟ™๊ฟš๊ฟ›๊ฟ๊ฟž๊ฟŸ๊ฟ ๊ฟก๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๊ฟข๊ฟฃ๊ฟค๊ฟฅ๊ฟฆ๊ฟง๊ฟช๊ฟซ๊ฟฌ๊ฟญ๊ฟฎ๊ฟฏ๊ฟฒ๊ฟณ๊ฟต๊ฟถ๊ฟท๊ฟน๊ฟบ๊ฟป๊ฟผ๊ฟฝ๊ฟพ๊ฟฟ๋€‚๋€ƒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋€…๋€†๋€‡๋€ˆ๋€‰๋€Š๋€‹๋€๋€Ž๋€๋€‘๋€’๋€“๋€•๋€–๋€—๋€˜๋€™๋€š๋€›๋€ž๋€Ÿ๋€ ๋€ก๋€ข๋€ฃ๋€ค๋€ฅ๋€ฆ๋€ง๋€ฉ๋€ช๋€ซ๋€ฌ๋€ญ๋€ฎ๋€ฏ๋€ฐ๋€ฑ๋€ฒ๋€ณ๋€ด๋€ต๋€ถ๋€ท๋€ธ๋€น๋€บ๋€ป๋€ผ๋€ฝ๋€พ๋€ฟ๋€๋๋‚๋ƒ๋†๋‡๋‰๋‹๋๋๋๋‘๋’๋–๋˜๋š๋›๋œ๋ž๋Ÿ๋ ๋ก๋ข๋ฃ๋ค๋ฅ๋ฆ๋ง๋จ๋ฉ๋ช๋ซ๋ฌ๋ญ๋ฎ๋ฏ๋ฐ๋ฑ๋ฒ๋ณ๋ด๋ต๋ถ๋ท๋ธ๋น๋บ๋ป๋พ๋ฟ๋‚๋‚‚๋‚ƒ๋‚…๋‚†๋‚‡๋‚ˆ๋‚‰๋‚Š๋‚‹๋‚Ž๋‚๋‚’๋‚“๋‚”๋‚•๋‚–๋‚—๋‚›๋‚๋‚ž๋‚ฃ๋‚ค๏ฟฝ".split("");for(j=0;j!=D[133].length;++j)if(D[133][j].charCodeAt(0)!==65533){e[D[133][j]]=34048+j;d[34048+j]=D[133][j]}D[134]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋‚ฅ๋‚ฆ๋‚ง๋‚ช๋‚ฐ๋‚ฒ๋‚ถ๋‚ท๋‚น๋‚บ๋‚ป๋‚ฝ๋‚พ๋‚ฟ๋ƒ€๋ƒ๋ƒ‚๋ƒƒ๋ƒ†๋ƒŠ๋ƒ‹๋ƒŒ๋ƒ๋ƒŽ๋ƒ๋ƒ’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ƒ“๋ƒ•๋ƒ–๋ƒ—๋ƒ™๋ƒš๋ƒ›๋ƒœ๋ƒ๋ƒž๋ƒŸ๋ƒก๋ƒข๋ƒฃ๋ƒค๋ƒฆ๋ƒง๋ƒจ๋ƒฉ๋ƒช๋ƒซ๋ƒฌ๋ƒญ๋ƒฎ๋ƒฏ๋ƒฐ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ƒฑ๋ƒฒ๋ƒณ๋ƒด๋ƒต๋ƒถ๋ƒท๋ƒธ๋ƒน๋ƒบ๋ƒป๋ƒผ๋ƒฝ๋ƒพ๋ƒฟ๋„€๋„๋„‚๋„ƒ๋„„๋„…๋„†๋„‡๋„Š๋„๋„Ž๋„๋„‘๋„”๋„•๋„–๋„—๋„š๋„ž๋„Ÿ๋„ ๋„ก๋„ข๋„ฆ๋„ง๋„ฉ๋„ช๋„ซ๋„ญ๋„ฎ๋„ฏ๋„ฐ๋„ฑ๋„ฒ๋„ณ๋„ถ๋„บ๋„ป๋„ผ๋„ฝ๋„พ๋„ฟ๋…‚๋…ƒ๋……๋…†๋…‡๋…‰๋…Š๋…‹๋…Œ๋…๋…Ž๋…๋…’๋…“๋…–๋…—๋…™๋…š๋…›๋…๋…ž๋…Ÿ๋…ก๋…ข๋…ฃ๋…ค๋…ฅ๋…ฆ๋…ง๋…จ๋…ฉ๋…ช๋…ซ๋…ฌ๋…ญ๋…ฎ๋…ฏ๋…ฐ๋…ฑ๋…ฒ๋…ณ๋…ด๋…ต๋…ถ๋…ท๋…บ๋…ป๋…ฝ๋…พ๋…ฟ๋†๋†ƒ๋†„๋†…๋††๋†‡๋†Š๋†Œ๋†Ž๋†๋†๋†‘๋†•๋†–๋†—๋†™๋†š๋†›๋†๏ฟฝ".split("");for(j=0;j!=D[134].length;++j)if(D[134][j].charCodeAt(0)!==65533){e[D[134][j]]=34304+j;d[34304+j]=D[134][j]}D[135]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋†ž๋†Ÿ๋† ๋†ก๋†ข๋†ฃ๋†ค๋†ฅ๋†ฆ๋†ง๋†ฉ๋†ช๋†ซ๋†ฌ๋†ญ๋†ฎ๋†ฏ๋†ฐ๋†ฑ๋†ฒ๋†ณ๋†ด๋†ต๋†ถ๋†ท๋†ธ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋†น๋†บ๋†ป๋†ผ๋†ฝ๋†พ๋†ฟ๋‡€๋‡๋‡‚๋‡ƒ๋‡„๋‡…๋‡†๋‡‡๋‡ˆ๋‡‰๋‡Š๋‡‹๋‡๋‡Ž๋‡๋‡‘๋‡’๋‡“๋‡•๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋‡–๋‡—๋‡˜๋‡™๋‡š๋‡›๋‡ž๋‡ ๋‡ก๋‡ข๋‡ฃ๋‡ค๋‡ฅ๋‡ฆ๋‡ง๋‡ช๋‡ซ๋‡ญ๋‡ฎ๋‡ฏ๋‡ฑ๋‡ฒ๋‡ณ๋‡ด๋‡ต๋‡ถ๋‡ท๋‡ธ๋‡บ๋‡ผ๋‡พ๋‡ฟ๋ˆ€๋ˆ๋ˆ‚๋ˆƒ๋ˆ†๋ˆ‡๋ˆ‰๋ˆŠ๋ˆ๋ˆŽ๋ˆ๋ˆ๋ˆ‘๋ˆ’๋ˆ“๋ˆ–๋ˆ˜๋ˆš๋ˆ›๋ˆœ๋ˆ๋ˆž๋ˆŸ๋ˆก๋ˆข๋ˆฃ๋ˆค๋ˆฅ๋ˆฆ๋ˆง๋ˆจ๋ˆฉ๋ˆช๋ˆซ๋ˆฌ๋ˆญ๋ˆฎ๋ˆฏ๋ˆฐ๋ˆฑ๋ˆฒ๋ˆณ๋ˆต๋ˆถ๋ˆท๋ˆธ๋ˆน๋ˆบ๋ˆป๋ˆฝ๋ˆพ๋ˆฟ๋‰€๋‰๋‰‚๋‰ƒ๋‰„๋‰…๋‰†๋‰‡๋‰ˆ๋‰‰๋‰Š๋‰‹๋‰Œ๋‰๋‰Ž๋‰๋‰๋‰‘๋‰’๋‰“๋‰”๋‰•๋‰–๋‰—๋‰™๋‰š๋‰›๋‰๋‰ž๋‰Ÿ๋‰ก๋‰ข๋‰ฃ๋‰ค๋‰ฅ๋‰ฆ๋‰ง๋‰ช๋‰ซ๋‰ฌ๋‰ญ๋‰ฎ๏ฟฝ".split("");for(j=0;j!=D[135].length;++j)if(D[135][j].charCodeAt(0)!==65533){e[D[135][j]]=34560+j;d[34560+j]=D[135][j]}D[136]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋‰ฏ๋‰ฐ๋‰ฑ๋‰ฒ๋‰ณ๋‰ถ๋‰ท๋‰ธ๋‰น๋‰บ๋‰ป๋‰ฝ๋‰พ๋‰ฟ๋Š€๋Š๋Š‚๋Šƒ๋Š†๋Š‡๋Šˆ๋ŠŠ๋Š‹๋ŠŒ๋Š๋ŠŽ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋Š๋Š’๋Š“๋Š•๋Š–๋Š—๋Š›๋Šœ๋Š๋Šž๋ŠŸ๋Šข๋Šค๋Šง๋Šจ๋Šฉ๋Šซ๋Šญ๋Šฎ๋Šฏ๋Šฑ๋Šฒ๋Šณ๋Šต๋Šถ๋Šท๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋Šธ๋Šน๋Šบ๋Šป๋Šผ๋Šฝ๋Šพ๋Šฟ๋‹€๋‹๋‹‚๋‹ƒ๋‹„๋‹…๋‹†๋‹‡๋‹Š๋‹‹๋‹๋‹Ž๋‹๋‹‘๋‹“๋‹”๋‹•๋‹–๋‹—๋‹š๋‹œ๋‹ž๋‹Ÿ๋‹ ๋‹ก๋‹ฃ๋‹ง๋‹ฉ๋‹ช๋‹ฐ๋‹ฑ๋‹ฒ๋‹ถ๋‹ผ๋‹ฝ๋‹พ๋Œ‚๋Œƒ๋Œ…๋Œ†๋Œ‡๋Œ‰๋ŒŠ๋Œ‹๋ŒŒ๋Œ๋ŒŽ๋Œ๋Œ’๋Œ–๋Œ—๋Œ˜๋Œ™๋Œš๋Œ›๋Œ๋Œž๋ŒŸ๋Œ ๋Œก๋Œข๋Œฃ๋Œค๋Œฅ๋Œฆ๋Œง๋Œจ๋Œฉ๋Œช๋Œซ๋Œฌ๋Œญ๋Œฎ๋Œฏ๋Œฐ๋Œฑ๋Œฒ๋Œณ๋Œด๋Œต๋Œถ๋Œท๋Œธ๋Œน๋Œบ๋Œป๋Œผ๋Œฝ๋Œพ๋Œฟ๋€๋๋‚๋ƒ๋„๋…๋†๋‡๋ˆ๋‰๋Š๋‹๋Œ๋๋Ž๋๋๋‘๋’๋“๋—๋™๋š๋๋ ๋ก๋ข๋ฃ๏ฟฝ".split("");for(j=0;j!=D[136].length;++j)if(D[136][j].charCodeAt(0)!==65533){e[D[136][j]]=34816+j;d[34816+j]=D[136][j]}D[137]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฆ๋จ๋ช๋ฌ๋ญ๋ฏ๋ฒ๋ณ๋ต๋ถ๋ท๋น๋บ๋ป๋ผ๋ฝ๋พ๋ฟ๋Ž‚๋Ž†๋Ž‡๋Žˆ๋Ž‰๋ŽŠ๋Ž‹๋Ž๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ŽŽ๋Ž๋Ž‘๋Ž’๋Ž“๋Ž•๋Ž–๋Ž—๋Ž˜๋Ž™๋Žš๋Ž›๋Žœ๋Ž๋Žž๋ŽŸ๋Žข๋Žฃ๋Žค๋Žฅ๋Žฆ๋Žง๋Žฉ๋Žช๋Žซ๋Žญ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋Žฎ๋Žฏ๋Žฐ๋Žฑ๋Žฒ๋Žณ๋Žด๋Žต๋Žถ๋Žท๋Žธ๋Žน๋Žบ๋Žป๋Žผ๋Žฝ๋Žพ๋Žฟ๋€๋๋‚๋ƒ๋†๋‡๋‰๋Š๋๋๋‘๋’๋“๋–๋˜๋š๋œ๋ž๋Ÿ๋ก๋ข๋ฃ๋ฅ๋ฆ๋ง๋ฉ๋ช๋ซ๋ฌ๋ญ๋ฎ๋ฏ๋ฐ๋ฑ๋ฒ๋ณ๋ด๋ต๋ถ๋ท๋ธ๋น๋บ๋ป๋ฝ๋พ๋ฟ๋€๋๋‚๋ƒ๋„๋…๋†๋‡๋ˆ๋‰๋Š๋‹๋Œ๋๋Ž๋๋‘๋’๋“๋”๋•๋–๋—๋™๋š๋›๋๋ž๋Ÿ๋ก๋ข๋ฃ๋ค๋ฅ๋ฆ๋ง๋ช๋ฌ๋ญ๋ฎ๋ฏ๋ฐ๋ฑ๋ฒ๋ณ๋ต๋ถ๋ท๋ธ๋น๋บ๋ป๋ผ๋ฝ๋พ๋ฟ๋‘€๋‘๋‘‚๋‘ƒ๋‘„๏ฟฝ".split("");for(j=0;j!=D[137].length;++j)if(D[137][j].charCodeAt(0)!==65533){e[D[137][j]]=35072+j;d[35072+j]=D[137][j]}D[138]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋‘…๋‘†๋‘‡๋‘ˆ๋‘‰๋‘Š๋‘‹๋‘Œ๋‘๋‘Ž๋‘๋‘’๋‘“๋‘•๋‘–๋‘—๋‘™๋‘š๋‘›๋‘œ๋‘๋‘ž๋‘Ÿ๋‘ข๋‘ค๋‘ฆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋‘ง๋‘จ๋‘ฉ๋‘ช๋‘ซ๋‘ญ๋‘ฎ๋‘ฏ๋‘ฐ๋‘ฑ๋‘ฒ๋‘ณ๋‘ด๋‘ต๋‘ถ๋‘ท๋‘ธ๋‘น๋‘บ๋‘ป๋‘ผ๋‘ฝ๋‘พ๋‘ฟ๋’๋’‚๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋’ƒ๋’„๋’…๋’†๋’‡๋’‰๋’Š๋’‹๋’Œ๋’๋’Ž๋’๋’๋’‘๋’’๋’“๋’”๋’•๋’–๋’—๋’˜๋’™๋’š๋’›๋’œ๋’ž๋’Ÿ๋’ ๋’ก๋’ข๋’ฃ๋’ฅ๋’ฆ๋’ง๋’ฉ๋’ช๋’ซ๋’ญ๋’ฎ๋’ฏ๋’ฐ๋’ฑ๋’ฒ๋’ณ๋’ด๋’ถ๋’ธ๋’บ๋’ป๋’ผ๋’ฝ๋’พ๋’ฟ๋“๋“‚๋“ƒ๋“…๋“†๋“‡๋“‰๋“Š๋“‹๋“Œ๋“๋“Ž๋“๋“‘๋“’๋““๋“”๋“–๋“—๋“˜๋“™๋“š๋“›๋“ž๋“Ÿ๋“ก๋“ข๋“ฅ๋“ง๋“จ๋“ฉ๋“ช๋“ซ๋“ฎ๋“ฐ๋“ฒ๋“ณ๋“ด๋“ต๋“ถ๋“ท๋“น๋“บ๋“ป๋“ผ๋“ฝ๋“พ๋“ฟ๋”€๋”๋”‚๋”ƒ๋”„๋”…๋”†๋”‡๋”ˆ๋”‰๋”Š๋”‹๋”Œ๋”๋”Ž๋”๋”๋”‘๋”’๋”“๋”–๋”—๋”™๋”š๋”๏ฟฝ".split("");for(j=0;j!=D[138].length;++j)if(D[138][j].charCodeAt(0)!==65533){e[D[138][j]]=35328+j;d[35328+j]=D[138][j]}D[139]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋”ž๋”Ÿ๋” ๋”ก๋”ข๋”ฃ๋”ฆ๋”ซ๋”ฌ๋”ญ๋”ฎ๋”ฏ๋”ฒ๋”ณ๋”ต๋”ถ๋”ท๋”น๋”บ๋”ป๋”ผ๋”ฝ๋”พ๋”ฟ๋•‚๋•†๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋•‡๋•ˆ๋•‰๋•Š๋•Ž๋•๋•‘๋•’๋•“๋••๋•–๋•—๋•˜๋•™๋•š๋•›๋•ž๋•ข๋•ฃ๋•ค๋•ฅ๋•ฆ๋•ง๋•จ๋•ฉ๋•ช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋•ซ๋•ฌ๋•ญ๋•ฎ๋•ฏ๋•ฐ๋•ฑ๋•ฒ๋•ณ๋•ด๋•ต๋•ถ๋•ท๋•ธ๋•น๋•บ๋•ป๋•ผ๋•ฝ๋•พ๋•ฟ๋–€๋–๋–‚๋–ƒ๋–„๋–…๋–†๋–‡๋–ˆ๋–‰๋–Š๋–‹๋–Œ๋–๋–Ž๋–๋–๋–‘๋–’๋–“๋–”๋–•๋––๋–—๋–˜๋–™๋–š๋–›๋–œ๋–๋–ž๋–Ÿ๋–ข๋–ฃ๋–ฅ๋–ฆ๋–ง๋–ฉ๋–ฌ๋–ญ๋–ฎ๋–ฏ๋–ฒ๋–ถ๋–ท๋–ธ๋–น๋–บ๋–พ๋–ฟ๋—๋—‚๋—ƒ๋—…๋—†๋—‡๋—ˆ๋—‰๋—Š๋—‹๋—Ž๋—’๋—“๋—”๋—•๋—–๋——๋—™๋—š๋—›๋—œ๋—๋—ž๋—Ÿ๋— ๋—ก๋—ข๋—ฃ๋—ค๋—ฅ๋—ฆ๋—ง๋—จ๋—ฉ๋—ช๋—ซ๋—ญ๋—ฎ๋—ฏ๋—ฐ๋—ฑ๋—ฒ๋—ณ๋—ด๋—ต๋—ถ๋—ท๋—ธ๋—น๋—บ๋—ป๋—ผ๋—ฝ๋—พ๋—ฟ๏ฟฝ".split("");for(j=0;j!=D[139].length;++j)if(D[139][j].charCodeAt(0)!==65533){e[D[139][j]]=35584+j;d[35584+j]=D[139][j]}D[140]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋˜€๋˜๋˜‚๋˜ƒ๋˜„๋˜…๋˜†๋˜‡๋˜ˆ๋˜‰๋˜Š๋˜‹๋˜Œ๋˜๋˜Ž๋˜๋˜’๋˜“๋˜•๋˜–๋˜—๋˜™๋˜š๋˜›๋˜œ๋˜๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋˜ž๋˜Ÿ๋˜ ๋˜ก๋˜ข๋˜ฃ๋˜ค๋˜ฆ๋˜ง๋˜จ๋˜ฉ๋˜ช๋˜ซ๋˜ญ๋˜ฎ๋˜ฏ๋˜ฐ๋˜ฑ๋˜ฒ๋˜ณ๋˜ต๋˜ถ๋˜ท๋˜ธ๋˜น๋˜บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋˜ป๋˜ผ๋˜ฝ๋˜พ๋˜ฟ๋™€๋™๋™‚๋™ƒ๋™„๋™…๋™†๋™‡๋™‰๋™Š๋™‹๋™Œ๋™๋™Ž๋™๋™๋™‘๋™’๋™“๋™”๋™•๋™–๋™—๋™˜๋™™๋™š๋™›๋™œ๋™๋™ž๋™Ÿ๋™ ๋™ก๋™ข๋™ฃ๋™ฅ๋™ฆ๋™ง๋™ฉ๋™ช๋™ซ๋™ฌ๋™ญ๋™ฎ๋™ฏ๋™ฐ๋™ฑ๋™ฒ๋™ณ๋™ด๋™ต๋™ถ๋™ท๋™ธ๋™น๋™บ๋™ป๋™ผ๋™ฝ๋™พ๋™ฟ๋š€๋š๋š‚๋šƒ๋š„๋š…๋š†๋š‡๋šˆ๋š‰๋šŠ๋š‹๋šŒ๋š๋šŽ๋š๋š๋š‘๋š’๋š“๋š”๋š•๋š–๋š—๋š˜๋š™๋šš๋š›๋šž๋šŸ๋šก๋šข๋šฃ๋šฅ๋šฆ๋šง๋šจ๋šฉ๋šช๋šญ๋šฎ๋šฏ๋šฐ๋šฒ๋šณ๋šด๋šต๋šถ๋šท๋šธ๋šน๋šบ๋šป๋šผ๋šฝ๋šพ๋šฟ๋›€๋›๋›‚๏ฟฝ".split("");for(j=0;j!=D[140].length;++j)if(D[140][j].charCodeAt(0)!==65533){e[D[140][j]]=35840+j;d[35840+j]=D[140][j]}D[141]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋›ƒ๋›„๋›…๋›†๋›‡๋›ˆ๋›‰๋›Š๋›‹๋›Œ๋›๋›Ž๋›๋›๋›‘๋›’๋›“๋›•๋›–๋›—๋›˜๋›™๋›š๋››๋›œ๋›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋›ž๋›Ÿ๋› ๋›ก๋›ข๋›ฃ๋›ค๋›ฅ๋›ฆ๋›ง๋›จ๋›ฉ๋›ช๋›ซ๋›ฌ๋›ญ๋›ฎ๋›ฏ๋›ฑ๋›ฒ๋›ณ๋›ต๋›ถ๋›ท๋›น๋›บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋›ป๋›ผ๋›ฝ๋›พ๋›ฟ๋œ‚๋œƒ๋œ„๋œ†๋œ‡๋œˆ๋œ‰๋œŠ๋œ‹๋œŒ๋œ๋œŽ๋œ๋œ๋œ‘๋œ’๋œ“๋œ”๋œ•๋œ–๋œ—๋œ˜๋œ™๋œš๋œ›๋œœ๋œ๋œž๋œŸ๋œ ๋œก๋œข๋œฃ๋œค๋œฅ๋œฆ๋œง๋œช๋œซ๋œญ๋œฎ๋œฑ๋œฒ๋œณ๋œด๋œต๋œถ๋œท๋œบ๋œผ๋œฝ๋œพ๋œฟ๋€๋๋‚๋ƒ๋…๋†๋‡๋‰๋Š๋‹๋๋Ž๋๋๋‘๋’๋“๋–๋—๋˜๋™๋š๋›๋œ๋๋ž๋Ÿ๋ก๋ข๋ฃ๋ฅ๋ฆ๋ง๋ฉ๋ช๋ซ๋ฌ๋ญ๋ฎ๋ฏ๋ฒ๋ด๋ถ๋ท๋ธ๋น๋บ๋ป๋พ๋ฟ๋ž๋ž‚๋žƒ๋ž…๋ž†๋ž‡๋žˆ๋ž‰๋žŠ๋ž‹๋žŽ๋ž“๋ž”๋ž•๋žš๋ž›๋ž๋žž๏ฟฝ".split("");for(j=0;j!=D[141].length;++j)if(D[141][j].charCodeAt(0)!==65533){e[D[141][j]]=36096+j;d[36096+j]=D[141][j]}D[142]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋žŸ๋žก๋žข๋žฃ๋žค๋žฅ๋žฆ๋žง๋žช๋žฎ๋žฏ๋žฐ๋žฑ๋žฒ๋žณ๋žถ๋žท๋žน๋žบ๋žป๋žผ๋žฝ๋žพ๋žฟ๋Ÿ€๋Ÿ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋Ÿ‚๋Ÿƒ๋Ÿ„๋Ÿ…๋Ÿ†๋Ÿˆ๋ŸŠ๋Ÿ‹๋ŸŒ๋Ÿ๋ŸŽ๋Ÿ๋Ÿ๋Ÿ‘๋Ÿ’๋Ÿ“๋Ÿ”๋Ÿ•๋Ÿ–๋Ÿ—๋Ÿ˜๋Ÿ™๋Ÿš๋Ÿ›๋Ÿœ๋Ÿ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋Ÿž๋ŸŸ๋Ÿ ๋Ÿก๋Ÿข๋Ÿฃ๋Ÿค๋Ÿฅ๋Ÿฆ๋Ÿง๋Ÿจ๋Ÿฉ๋Ÿช๋Ÿซ๋Ÿฎ๋Ÿฏ๋Ÿฑ๋Ÿฒ๋Ÿณ๋Ÿต๋Ÿถ๋Ÿท๋Ÿธ๋Ÿน๋Ÿบ๋Ÿป๋Ÿพ๋ ‚๋ ƒ๋ „๋ …๋ †๋ Š๋ ‹๋ ๋ Ž๋ ๋ ‘๋ ’๋ “๋ ”๋ •๋ –๋ —๋ š๋ œ๋ ž๋ Ÿ๋  ๋ ก๋ ข๋ ฃ๋ ฆ๋ ง๋ ฉ๋ ช๋ ซ๋ ญ๋ ฎ๋ ฏ๋ ฐ๋ ฑ๋ ฒ๋ ณ๋ ถ๋ บ๋ ป๋ ผ๋ ฝ๋ พ๋ ฟ๋ก๋ก‚๋กƒ๋ก…๋ก†๋ก‡๋กˆ๋ก‰๋กŠ๋ก‹๋กŒ๋ก๋กŽ๋ก๋ก๋ก’๋ก”๋ก•๋ก–๋ก—๋ก˜๋ก™๋กš๋ก›๋กž๋กŸ๋กก๋กข๋กฃ๋กฅ๋กฆ๋กง๋กจ๋กฉ๋กช๋กซ๋กฎ๋กฐ๋กฒ๋กณ๋กด๋กต๋กถ๋กท๋กน๋กบ๋กป๋กฝ๋กพ๋กฟ๋ข€๋ข๋ข‚๋ขƒ๋ข„๏ฟฝ".split("");for(j=0;j!=D[142].length;++j)if(D[142][j].charCodeAt(0)!==65533){e[D[142][j]]=36352+j;d[36352+j]=D[142][j]}D[143]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ข…๋ข†๋ข‡๋ขˆ๋ข‰๋ขŠ๋ข‹๋ขŒ๋ขŽ๋ข๋ข๋ข‘๋ข’๋ข“๋ข”๋ข•๋ข–๋ข—๋ข˜๋ข™๋ขš๋ข›๋ขœ๋ข๋ขž๋ขŸ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ข ๋ขก๋ขข๋ขฃ๋ขค๋ขฅ๋ขฆ๋ขง๋ขฉ๋ขช๋ขซ๋ขฌ๋ขญ๋ขฎ๋ขฏ๋ขฑ๋ขฒ๋ขณ๋ขต๋ขถ๋ขท๋ขน๋ขบ๋ขป๋ขผ๋ขฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ขพ๋ขฟ๋ฃ‚๋ฃ„๋ฃ†๋ฃ‡๋ฃˆ๋ฃ‰๋ฃŠ๋ฃ‹๋ฃ๋ฃŽ๋ฃ๋ฃ‘๋ฃ’๋ฃ“๋ฃ•๋ฃ–๋ฃ—๋ฃ˜๋ฃ™๋ฃš๋ฃ›๋ฃœ๋ฃž๋ฃ ๋ฃข๋ฃฃ๋ฃค๋ฃฅ๋ฃฆ๋ฃง๋ฃช๋ฃซ๋ฃญ๋ฃฎ๋ฃฏ๋ฃฑ๋ฃฒ๋ฃณ๋ฃด๋ฃต๋ฃถ๋ฃท๋ฃบ๋ฃผ๋ฃพ๋ฃฟ๋ค€๋ค๋ค‚๋คƒ๋ค…๋ค†๋ค‡๋คˆ๋ค‰๋คŠ๋ค‹๋คŒ๋ค๋คŽ๋ค๋ค๋ค‘๋ค’๋ค“๋ค”๋ค•๋ค–๋ค—๋ค™๋คš๋ค›๋คœ๋ค๋คž๋คŸ๋คก๋คข๋คฃ๋คค๋คฅ๋คฆ๋คง๋คจ๋คฉ๋คช๋คซ๋คฌ๋คญ๋คฎ๋คฏ๋คฐ๋คฑ๋คฒ๋คณ๋คด๋คต๋คถ๋คท๋คธ๋คน๋คบ๋คป๋คพ๋คฟ๋ฅ๋ฅ‚๋ฅƒ๋ฅ…๋ฅ†๋ฅ‡๋ฅˆ๋ฅ‰๋ฅŠ๋ฅ‹๋ฅ๋ฅŽ๋ฅ๋ฅ’๋ฅ“๋ฅ”๋ฅ•๋ฅ–๋ฅ—๏ฟฝ".split("");for(j=0;j!=D[143].length;++j)if(D[143][j].charCodeAt(0)!==65533){e[D[143][j]]=36608+j;d[36608+j]=D[143][j]}D[144]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฅš๋ฅ›๋ฅ๋ฅž๋ฅŸ๋ฅก๋ฅข๋ฅฃ๋ฅค๋ฅฅ๋ฅฆ๋ฅง๋ฅช๋ฅฌ๋ฅฎ๋ฅฏ๋ฅฐ๋ฅฑ๋ฅฒ๋ฅณ๋ฅถ๋ฅท๋ฅน๋ฅบ๋ฅป๋ฅฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฅพ๋ฅฟ๋ฆ€๋ฆ๋ฆ‚๋ฆƒ๋ฆ†๋ฆˆ๋ฆ‹๋ฆŒ๋ฆ๋ฆ๋ฆ‘๋ฆ’๋ฆ“๋ฆ”๋ฆ•๋ฆ–๋ฆ—๋ฆ˜๋ฆ™๋ฆš๋ฆ›๋ฆœ๋ฆ๋ฆž๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฆŸ๋ฆ ๋ฆก๋ฆข๋ฆฃ๋ฆค๋ฆฅ๋ฆฆ๋ฆง๋ฆจ๋ฆฉ๋ฆช๋ฆซ๋ฆฎ๋ฆฏ๋ฆฑ๋ฆฒ๋ฆณ๋ฆต๋ฆถ๋ฆท๋ฆธ๋ฆน๋ฆบ๋ฆป๋ฆพ๋ง€๋ง‚๋งƒ๋ง„๋ง…๋ง†๋ง‡๋งŠ๋ง‹๋ง๋ง“๋ง”๋ง•๋ง–๋ง—๋งš๋งœ๋งŸ๋ง ๋งข๋งฆ๋งง๋งฉ๋งช๋งซ๋งญ๋งฎ๋งฏ๋งฐ๋งฑ๋งฒ๋งณ๋งถ๋งป๋งผ๋งฝ๋งพ๋งฟ๋จ‚๋จƒ๋จ„๋จ…๋จ†๋จ‡๋จ‰๋จŠ๋จ‹๋จŒ๋จ๋จŽ๋จ๋จ๋จ‘๋จ’๋จ“๋จ”๋จ–๋จ—๋จ˜๋จ™๋จš๋จ›๋จœ๋จ๋จž๋จŸ๋จ ๋จก๋จข๋จฃ๋จค๋จฅ๋จฆ๋จง๋จจ๋จฉ๋จช๋จซ๋จฌ๋จญ๋จฎ๋จฏ๋จฐ๋จฑ๋จฒ๋จณ๋จด๋จต๋จถ๋จท๋จบ๋จป๋จฝ๋จพ๋จฟ๋ฉ๋ฉƒ๋ฉ„๋ฉ…๋ฉ†๏ฟฝ".split("");for(j=0;j!=D[144].length;++j)if(D[144][j].charCodeAt(0)!==65533){e[D[144][j]]=36864+j;d[36864+j]=D[144][j]}D[145]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฉ‡๋ฉŠ๋ฉŒ๋ฉ๋ฉ๋ฉ‘๋ฉ’๋ฉ–๋ฉ—๋ฉ™๋ฉš๋ฉ›๋ฉ๋ฉž๋ฉŸ๋ฉ ๋ฉก๋ฉข๋ฉฃ๋ฉฆ๋ฉช๋ฉซ๋ฉฌ๋ฉญ๋ฉฎ๋ฉฏ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฉฒ๋ฉณ๋ฉต๋ฉถ๋ฉท๋ฉน๋ฉบ๋ฉป๋ฉผ๋ฉฝ๋ฉพ๋ฉฟ๋ช€๋ช๋ช‚๋ช†๋ชˆ๋ช‰๋ชŠ๋ช‹๋ช๋ชŽ๋ช๋ช๋ช‘๋ช’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ช“๋ช”๋ช•๋ช–๋ช—๋ช˜๋ช™๋ชš๋ช›๋ชœ๋ช๋ชž๋ชŸ๋ช ๋ชก๋ชข๋ชฃ๋ชค๋ชฅ๋ชฆ๋ชง๋ชช๋ชญ๋ชฎ๋ชฏ๋ชฑ๋ชณ๋ชด๋ชต๋ชถ๋ชท๋ชบ๋ชผ๋ชพ๋ชฟ๋ซ€๋ซ๋ซ‚๋ซƒ๋ซ…๋ซ†๋ซ‡๋ซ‰๋ซŠ๋ซ‹๋ซŒ๋ซ๋ซŽ๋ซ๋ซ๋ซ‘๋ซ’๋ซ“๋ซ”๋ซ•๋ซ–๋ซ—๋ซš๋ซ›๋ซœ๋ซ๋ซž๋ซŸ๋ซ ๋ซก๋ซข๋ซฃ๋ซค๋ซฅ๋ซฆ๋ซง๋ซจ๋ซฉ๋ซช๋ซซ๋ซฌ๋ซญ๋ซฎ๋ซฏ๋ซฐ๋ซฑ๋ซฒ๋ซณ๋ซด๋ซต๋ซถ๋ซท๋ซธ๋ซน๋ซบ๋ซป๋ซฝ๋ซพ๋ซฟ๋ฌ๋ฌ‚๋ฌƒ๋ฌ…๋ฌ†๋ฌ‡๋ฌˆ๋ฌ‰๋ฌŠ๋ฌ‹๋ฌŒ๋ฌŽ๋ฌ๋ฌ’๋ฌ“๋ฌ”๋ฌ•๋ฌ–๋ฌ—๋ฌ™๋ฌš๋ฌ›๋ฌ๋ฌž๋ฌŸ๋ฌก๋ฌข๋ฌฃ๋ฌค๋ฌฅ๋ฌฆ๋ฌง๏ฟฝ".split("");for(j=0;j!=D[145].length;++j)if(D[145][j].charCodeAt(0)!==65533){e[D[145][j]]=37120+j;d[37120+j]=D[145][j]}D[146]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฌจ๋ฌช๋ฌฌ๋ฌญ๋ฌฎ๋ฌฏ๋ฌฐ๋ฌฑ๋ฌฒ๋ฌณ๋ฌท๋ฌน๋ฌบ๋ฌฟ๋ญ€๋ญ๋ญ‚๋ญƒ๋ญ†๋ญˆ๋ญŠ๋ญ‹๋ญŒ๋ญŽ๋ญ‘๋ญ’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ญ“๋ญ•๋ญ–๋ญ—๋ญ™๋ญš๋ญ›๋ญœ๋ญ๋ญž๋ญŸ๋ญ ๋ญข๋ญค๋ญฅ๋ญฆ๋ญง๋ญจ๋ญฉ๋ญช๋ญซ๋ญญ๋ญฎ๋ญฏ๋ญฐ๋ญฑ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ญฒ๋ญณ๋ญด๋ญต๋ญถ๋ญท๋ญธ๋ญน๋ญบ๋ญป๋ญผ๋ญฝ๋ญพ๋ญฟ๋ฎ€๋ฎ๋ฎ‚๋ฎƒ๋ฎ„๋ฎ…๋ฎ†๋ฎ‡๋ฎ‰๋ฎŠ๋ฎ‹๋ฎ๋ฎŽ๋ฎ๋ฎ‘๋ฎ’๋ฎ“๋ฎ”๋ฎ•๋ฎ–๋ฎ—๋ฎ˜๋ฎ™๋ฎš๋ฎ›๋ฎœ๋ฎ๋ฎž๋ฎŸ๋ฎ ๋ฎก๋ฎข๋ฎฃ๋ฎฅ๋ฎฆ๋ฎง๋ฎฉ๋ฎช๋ฎซ๋ฎญ๋ฎฎ๋ฎฏ๋ฎฐ๋ฎฑ๋ฎฒ๋ฎณ๋ฎต๋ฎถ๋ฎธ๋ฎน๋ฎบ๋ฎป๋ฎผ๋ฎฝ๋ฎพ๋ฎฟ๋ฏ๋ฏ‚๋ฏƒ๋ฏ…๋ฏ†๋ฏ‡๋ฏ‰๋ฏŠ๋ฏ‹๋ฏŒ๋ฏ๋ฏŽ๋ฏ๋ฏ‘๋ฏ’๋ฏ”๋ฏ•๋ฏ–๋ฏ—๋ฏ˜๋ฏ™๋ฏš๋ฏ›๋ฏœ๋ฏ๋ฏž๋ฏŸ๋ฏ ๋ฏก๋ฏข๋ฏฃ๋ฏค๋ฏฅ๋ฏฆ๋ฏง๋ฏจ๋ฏฉ๋ฏช๋ฏซ๋ฏฌ๋ฏญ๋ฏฎ๋ฏฏ๋ฏฐ๋ฏฑ๋ฏฒ๋ฏณ๋ฏด๋ฏต๋ฏถ๋ฏท๋ฏบ๋ฏป๋ฏฝ๋ฏพ๋ฐ๏ฟฝ".split("");for(j=0;j!=D[146].length;++j)if(D[146][j].charCodeAt(0)!==65533){e[D[146][j]]=37376+j;d[37376+j]=D[146][j]}D[147]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฐƒ๋ฐ„๋ฐ…๋ฐ†๋ฐ‡๋ฐŠ๋ฐŽ๋ฐ๋ฐ’๋ฐ“๋ฐ™๋ฐš๋ฐ ๋ฐก๋ฐข๋ฐฃ๋ฐฆ๋ฐจ๋ฐช๋ฐซ๋ฐฌ๋ฐฎ๋ฐฏ๋ฐฒ๋ฐณ๋ฐต๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฐถ๋ฐท๋ฐน๋ฐบ๋ฐป๋ฐผ๋ฐฝ๋ฐพ๋ฐฟ๋ฑ‚๋ฑ†๋ฑ‡๋ฑˆ๋ฑŠ๋ฑ‹๋ฑŽ๋ฑ๋ฑ‘๋ฑ’๋ฑ“๋ฑ”๋ฑ•๋ฑ–๋ฑ—๋ฑ˜๋ฑ™๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ฑš๋ฑ›๋ฑœ๋ฑž๋ฑŸ๋ฑ ๋ฑก๋ฑข๋ฑฃ๋ฑค๋ฑฅ๋ฑฆ๋ฑง๋ฑจ๋ฑฉ๋ฑช๋ฑซ๋ฑฌ๋ฑญ๋ฑฎ๋ฑฏ๋ฑฐ๋ฑฑ๋ฑฒ๋ฑณ๋ฑด๋ฑต๋ฑถ๋ฑท๋ฑธ๋ฑน๋ฑบ๋ฑป๋ฑผ๋ฑฝ๋ฑพ๋ฑฟ๋ฒ€๋ฒ๋ฒ‚๋ฒƒ๋ฒ†๋ฒ‡๋ฒ‰๋ฒŠ๋ฒ๋ฒ๋ฒ๋ฒ‘๋ฒ’๋ฒ“๋ฒ–๋ฒ˜๋ฒ›๋ฒœ๋ฒ๋ฒž๋ฒŸ๋ฒข๋ฒฃ๋ฒฅ๋ฒฆ๋ฒฉ๋ฒช๋ฒซ๋ฒฌ๋ฒญ๋ฒฎ๋ฒฏ๋ฒฒ๋ฒถ๋ฒท๋ฒธ๋ฒน๋ฒบ๋ฒป๋ฒพ๋ฒฟ๋ณ๋ณ‚๋ณƒ๋ณ…๋ณ†๋ณ‡๋ณˆ๋ณ‰๋ณŠ๋ณ‹๋ณŒ๋ณŽ๋ณ’๋ณ“๋ณ”๋ณ–๋ณ—๋ณ™๋ณš๋ณ›๋ณ๋ณž๋ณŸ๋ณ ๋ณก๋ณข๋ณฃ๋ณค๋ณฅ๋ณฆ๋ณง๋ณจ๋ณฉ๋ณช๋ณซ๋ณฌ๋ณญ๋ณฎ๋ณฏ๋ณฐ๋ณฑ๋ณฒ๋ณณ๋ณท๋ณน๋ณบ๋ณป๋ณฝ๏ฟฝ".split("");for(j=0;j!=D[147].length;++j)if(D[147][j].charCodeAt(0)!==65533){e[D[147][j]]=37632+j;d[37632+j]=D[147][j]}D[148]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ณพ๋ณฟ๋ด€๋ด๋ด‚๋ดƒ๋ด†๋ดˆ๋ดŠ๋ด‹๋ดŒ๋ด๋ดŽ๋ด๋ด‘๋ด’๋ด“๋ด•๋ด–๋ด—๋ด˜๋ด™๋ดš๋ด›๋ดœ๋ด๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ดž๋ดŸ๋ด ๋ดก๋ดข๋ดฃ๋ดฅ๋ดฆ๋ดง๋ดจ๋ดฉ๋ดช๋ดซ๋ดญ๋ดฎ๋ดฏ๋ดฐ๋ดฑ๋ดฒ๋ดณ๋ดด๋ดต๋ดถ๋ดท๋ดธ๋ดน๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ดบ๋ดป๋ดผ๋ดฝ๋ดพ๋ดฟ๋ต๋ต‚๋ตƒ๋ต„๋ต…๋ต†๋ต‡๋ตŠ๋ต‹๋ต๋ตŽ๋ต๋ต‘๋ต’๋ต“๋ต”๋ต•๋ต–๋ต—๋ตš๋ต›๋ตœ๋ต๋ตž๋ตŸ๋ต ๋ตก๋ตข๋ตฃ๋ตฅ๋ตฆ๋ตง๋ตฉ๋ตช๋ตซ๋ตฌ๋ตญ๋ตฎ๋ตฏ๋ตฐ๋ตฑ๋ตฒ๋ตณ๋ตด๋ตต๋ตถ๋ตท๋ตธ๋ตน๋ตบ๋ตป๋ตผ๋ตฝ๋ตพ๋ตฟ๋ถ‚๋ถƒ๋ถ…๋ถ†๋ถ‹๋ถŒ๋ถ๋ถŽ๋ถ๋ถ’๋ถ”๋ถ–๋ถ—๋ถ˜๋ถ›๋ถ๋ถž๋ถŸ๋ถ ๋ถก๋ถข๋ถฃ๋ถฅ๋ถฆ๋ถง๋ถจ๋ถฉ๋ถช๋ถซ๋ถฌ๋ถญ๋ถฎ๋ถฏ๋ถฑ๋ถฒ๋ถณ๋ถด๋ถต๋ถถ๋ถท๋ถน๋ถบ๋ถป๋ถผ๋ถฝ๋ถพ๋ถฟ๋ท€๋ท๋ท‚๋ทƒ๋ท„๋ท…๋ท†๋ท‡๋ทˆ๋ท‰๋ทŠ๋ท‹๋ทŒ๋ท๋ทŽ๋ท๋ท๋ท‘๏ฟฝ".split("");for(j=0;j!=D[148].length;++j)if(D[148][j].charCodeAt(0)!==65533){e[D[148][j]]=37888+j;d[37888+j]=D[148][j]}D[149]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ท’๋ท“๋ท–๋ท—๋ท™๋ทš๋ท›๋ท๋ทž๋ทŸ๋ท ๋ทก๋ทข๋ทฃ๋ทค๋ทฅ๋ทฆ๋ทง๋ทจ๋ทช๋ทซ๋ทฌ๋ทญ๋ทฎ๋ทฏ๋ทฑ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ทฒ๋ทณ๋ทต๋ทถ๋ทท๋ทน๋ทบ๋ทป๋ทผ๋ทฝ๋ทพ๋ทฟ๋ธ๋ธ‚๋ธ„๋ธ†๋ธ‡๋ธˆ๋ธ‰๋ธŠ๋ธ‹๋ธŽ๋ธ๋ธ‘๋ธ’๋ธ“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ธ•๋ธ–๋ธ—๋ธ˜๋ธ™๋ธš๋ธ›๋ธž๋ธ ๋ธก๋ธข๋ธฃ๋ธค๋ธฅ๋ธฆ๋ธง๋ธจ๋ธฉ๋ธช๋ธซ๋ธฌ๋ธญ๋ธฎ๋ธฏ๋ธฐ๋ธฑ๋ธฒ๋ธณ๋ธด๋ธต๋ธถ๋ธท๋ธธ๋ธน๋ธบ๋ธป๋ธผ๋ธฝ๋ธพ๋ธฟ๋น€๋น๋น‚๋นƒ๋น†๋น‡๋น‰๋นŠ๋น‹๋น๋น๋น๋น‘๋น’๋น“๋น–๋น˜๋นœ๋น๋นž๋นŸ๋นข๋นฃ๋นฅ๋นฆ๋นง๋นฉ๋นซ๋นฌ๋นญ๋นฎ๋นฏ๋นฒ๋นถ๋นท๋นธ๋นน๋นบ๋นพ๋นฟ๋บ๋บ‚๋บƒ๋บ…๋บ†๋บ‡๋บˆ๋บ‰๋บŠ๋บ‹๋บŽ๋บ’๋บ“๋บ”๋บ•๋บ–๋บ—๋บš๋บ›๋บœ๋บ๋บž๋บŸ๋บ ๋บก๋บข๋บฃ๋บค๋บฅ๋บฆ๋บง๋บฉ๋บช๋บซ๋บฌ๋บญ๋บฎ๋บฏ๋บฐ๋บฑ๋บฒ๋บณ๋บด๋บต๋บถ๋บท๏ฟฝ".split("");for(j=0;j!=D[149].length;++j)if(D[149][j].charCodeAt(0)!==65533){e[D[149][j]]=38144+j;d[38144+j]=D[149][j]}D[150]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋บธ๋บน๋บบ๋บป๋บผ๋บฝ๋บพ๋บฟ๋ป€๋ป๋ป‚๋ปƒ๋ป„๋ป…๋ป†๋ป‡๋ปˆ๋ป‰๋ปŠ๋ป‹๋ปŒ๋ป๋ปŽ๋ป๋ป’๋ป“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ป•๋ป–๋ป™๋ปš๋ป›๋ปœ๋ป๋ปž๋ปŸ๋ปก๋ปข๋ปฆ๋ปง๋ปจ๋ปฉ๋ปช๋ปซ๋ปญ๋ปฎ๋ปฏ๋ปฐ๋ปฑ๋ปฒ๋ปณ๋ปด๋ปต๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋ปถ๋ปท๋ปธ๋ปน๋ปบ๋ปป๋ปผ๋ปฝ๋ปพ๋ปฟ๋ผ€๋ผ‚๋ผƒ๋ผ„๋ผ…๋ผ†๋ผ‡๋ผŠ๋ผ‹๋ผŒ๋ผ๋ผŽ๋ผ๋ผ๋ผ‘๋ผ’๋ผ“๋ผ”๋ผ•๋ผ–๋ผ—๋ผš๋ผž๋ผŸ๋ผ ๋ผก๋ผข๋ผฃ๋ผค๋ผฅ๋ผฆ๋ผง๋ผจ๋ผฉ๋ผช๋ผซ๋ผฌ๋ผญ๋ผฎ๋ผฏ๋ผฐ๋ผฑ๋ผฒ๋ผณ๋ผด๋ผต๋ผถ๋ผท๋ผธ๋ผน๋ผบ๋ผป๋ผผ๋ผฝ๋ผพ๋ผฟ๋ฝ‚๋ฝƒ๋ฝ…๋ฝ†๋ฝ‡๋ฝ‰๋ฝŠ๋ฝ‹๋ฝŒ๋ฝ๋ฝŽ๋ฝ๋ฝ’๋ฝ“๋ฝ”๋ฝ–๋ฝ—๋ฝ˜๋ฝ™๋ฝš๋ฝ›๋ฝœ๋ฝ๋ฝž๋ฝŸ๋ฝ ๋ฝก๋ฝข๋ฝฃ๋ฝค๋ฝฅ๋ฝฆ๋ฝง๋ฝจ๋ฝฉ๋ฝช๋ฝซ๋ฝฌ๋ฝญ๋ฝฎ๋ฝฏ๋ฝฐ๋ฝฑ๋ฝฒ๋ฝณ๋ฝด๋ฝต๋ฝถ๋ฝท๋ฝธ๋ฝน๋ฝบ๋ฝป๋ฝผ๋ฝฝ๋ฝพ๋ฝฟ๋พ€๋พ๋พ‚๏ฟฝ".split("");for(j=0;j!=D[150].length;++j)if(D[150][j].charCodeAt(0)!==65533){e[D[150][j]]=38400+j;d[38400+j]=D[150][j]}D[151]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋พƒ๋พ„๋พ…๋พ†๋พ‡๋พˆ๋พ‰๋พŠ๋พ‹๋พŒ๋พ๋พŽ๋พ๋พ๋พ‘๋พ’๋พ“๋พ•๋พ–๋พ—๋พ˜๋พ™๋พš๋พ›๋พœ๋พ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋พž๋พŸ๋พ ๋พก๋พข๋พฃ๋พค๋พฅ๋พฆ๋พง๋พจ๋พฉ๋พช๋พซ๋พฌ๋พญ๋พฎ๋พฏ๋พฑ๋พฒ๋พณ๋พด๋พต๋พถ๋พท๋พธ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๋พน๋พบ๋พป๋พผ๋พฝ๋พพ๋พฟ๋ฟ€๋ฟ๋ฟ‚๋ฟƒ๋ฟ„๋ฟ†๋ฟ‡๋ฟˆ๋ฟ‰๋ฟŠ๋ฟ‹๋ฟŽ๋ฟ๋ฟ‘๋ฟ’๋ฟ“๋ฟ•๋ฟ–๋ฟ—๋ฟ˜๋ฟ™๋ฟš๋ฟ›๋ฟ๋ฟž๋ฟ ๋ฟข๋ฟฃ๋ฟค๋ฟฅ๋ฟฆ๋ฟง๋ฟจ๋ฟฉ๋ฟช๋ฟซ๋ฟฌ๋ฟญ๋ฟฎ๋ฟฏ๋ฟฐ๋ฟฑ๋ฟฒ๋ฟณ๋ฟด๋ฟต๋ฟถ๋ฟท๋ฟธ๋ฟน๋ฟบ๋ฟป๋ฟผ๋ฟฝ๋ฟพ๋ฟฟ์€€์€์€‚์€ƒ์€„์€…์€†์€‡์€ˆ์€‰์€Š์€‹์€Œ์€์€Ž์€์€์€‘์€’์€“์€”์€•์€–์€—์€˜์€™์€š์€›์€œ์€์€ž์€Ÿ์€ ์€ก์€ข์€ฃ์€ค์€ฅ์€ฆ์€ง์€จ์€ฉ์€ช์€ซ์€ฌ์€ญ์€ฎ์€ฏ์€ฐ์€ฑ์€ฒ์€ณ์€ด์€ต์€ถ์€ท์€ธ์€น์€บ์€ป์€ฝ์€พ์€ฟ๏ฟฝ".split("");for(j=0;j!=D[151].length;++j)if(D[151][j].charCodeAt(0)!==65533){e[D[151][j]]=38656+j;d[38656+j]=D[151][j]}D[152]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์€์์‚์ƒ์„์…์†์‡์ˆ์‰์Š์‹์Œ์์Ž์์์’์“์”์•์–์—์™์š์›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์์ž์Ÿ์ก์ข์ฃ์ค์ฅ์ฆ์ง์ช์ซ์ฌ์ญ์ฎ์ฏ์ฐ์ฑ์ฒ์ณ์ด์ต์ถ์ท์ธ์น๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์บ์ป์ผ์ฝ์พ์ฟ์‚€์‚์‚‚์‚ƒ์‚„์‚…์‚†์‚‡์‚ˆ์‚‰์‚Š์‚‹์‚Œ์‚์‚Ž์‚์‚’์‚“์‚•์‚–์‚—์‚™์‚š์‚›์‚œ์‚์‚ž์‚Ÿ์‚ข์‚ค์‚ฆ์‚ง์‚จ์‚ฉ์‚ช์‚ซ์‚ฎ์‚ฑ์‚ฒ์‚ท์‚ธ์‚น์‚บ์‚ป์‚พ์ƒ‚์ƒƒ์ƒ„์ƒ†์ƒ‡์ƒŠ์ƒ‹์ƒ์ƒŽ์ƒ์ƒ‘์ƒ’์ƒ“์ƒ”์ƒ•์ƒ–์ƒ—์ƒš์ƒž์ƒŸ์ƒ ์ƒก์ƒข์ƒฃ์ƒฆ์ƒง์ƒฉ์ƒช์ƒซ์ƒญ์ƒฎ์ƒฏ์ƒฐ์ƒฑ์ƒฒ์ƒณ์ƒถ์ƒธ์ƒบ์ƒป์ƒผ์ƒฝ์ƒพ์ƒฟ์„์„‚์„ƒ์„…์„†์„‡์„‰์„Š์„‹์„Œ์„์„Ž์„์„‘์„’์„“์„”์„–์„—์„˜์„™์„š์„›์„ก์„ข์„ฅ์„จ์„ฉ์„ช์„ซ์„ฎ๏ฟฝ".split("");for(j=0;j!=D[152].length;++j)if(D[152][j].charCodeAt(0)!==65533){e[D[152][j]]=38912+j;d[38912+j]=D[152][j]}D[153]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์„ฒ์„ณ์„ด์„ต์„ท์„บ์„ป์„ฝ์„พ์„ฟ์…์…‚์…ƒ์…„์……์…†์…‡์…Š์…Ž์…์…์…‘์…’์…“์…–์…—๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์…™์…š์…›์…์…ž์…Ÿ์… ์…ก์…ข์…ฃ์…ฆ์…ช์…ซ์…ฌ์…ญ์…ฎ์…ฏ์…ฑ์…ฒ์…ณ์…ต์…ถ์…ท์…น์…บ์…ป๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์…ผ์…ฝ์…พ์…ฟ์†€์†์†‚์†ƒ์†„์††์†‡์†ˆ์†‰์†Š์†‹์†์†‘์†’์†“์†•์†—์†˜์†™์†š์†›์†ž์† ์†ข์†ฃ์†ค์†ฆ์†ง์†ช์†ซ์†ญ์†ฎ์†ฏ์†ฑ์†ฒ์†ณ์†ด์†ต์†ถ์†ท์†ธ์†น์†บ์†ป์†ผ์†พ์†ฟ์‡€์‡์‡‚์‡ƒ์‡…์‡†์‡‡์‡‰์‡Š์‡‹์‡์‡Ž์‡์‡์‡‘์‡’์‡“์‡•์‡–์‡™์‡š์‡›์‡œ์‡์‡ž์‡Ÿ์‡ก์‡ข์‡ฃ์‡ฅ์‡ฆ์‡ง์‡ฉ์‡ช์‡ซ์‡ฌ์‡ญ์‡ฎ์‡ฏ์‡ฒ์‡ด์‡ต์‡ถ์‡ท์‡ธ์‡น์‡บ์‡ป์‡พ์‡ฟ์ˆ์ˆ‚์ˆƒ์ˆ…์ˆ†์ˆ‡์ˆˆ์ˆ‰์ˆŠ์ˆ‹์ˆŽ์ˆ์ˆ’์ˆ“์ˆ”์ˆ•์ˆ–์ˆ—์ˆš์ˆ›์ˆ์ˆž์ˆก์ˆข์ˆฃ๏ฟฝ".split("");for(j=0;j!=D[153].length;++j)if(D[153][j].charCodeAt(0)!==65533){e[D[153][j]]=39168+j;d[39168+j]=D[153][j]}D[154]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ˆค์ˆฅ์ˆฆ์ˆง์ˆช์ˆฌ์ˆฎ์ˆฐ์ˆณ์ˆต์ˆถ์ˆท์ˆธ์ˆน์ˆบ์ˆป์ˆผ์ˆฝ์ˆพ์ˆฟ์‰€์‰์‰‚์‰ƒ์‰„์‰…๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์‰†์‰‡์‰‰์‰Š์‰‹์‰Œ์‰์‰Ž์‰์‰’์‰“์‰•์‰–์‰—์‰™์‰š์‰›์‰œ์‰์‰ž์‰Ÿ์‰ก์‰ข์‰ฃ์‰ค์‰ฆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์‰ง์‰จ์‰ฉ์‰ช์‰ซ์‰ฎ์‰ฏ์‰ฑ์‰ฒ์‰ณ์‰ต์‰ถ์‰ท์‰ธ์‰น์‰บ์‰ป์‰พ์Š€์Š‚์Šƒ์Š„์Š…์Š†์Š‡์ŠŠ์Š‹์ŠŒ์Š์ŠŽ์Š์Š‘์Š’์Š“์Š”์Š•์Š–์Š—์Š™์Šš์Šœ์Šž์ŠŸ์Š ์Šก์Šข์Šฃ์Šฆ์Šง์Šฉ์Šช์Šซ์Šฎ์Šฏ์Šฐ์Šฑ์Šฒ์Šณ์Šถ์Šธ์Šบ์Šป์Šผ์Šฝ์Šพ์Šฟ์‹€์‹์‹‚์‹ƒ์‹„์‹…์‹†์‹‡์‹ˆ์‹‰์‹Š์‹‹์‹Œ์‹์‹Ž์‹์‹์‹‘์‹’์‹“์‹”์‹•์‹–์‹—์‹˜์‹™์‹š์‹›์‹ž์‹Ÿ์‹ก์‹ข์‹ฅ์‹ฆ์‹ง์‹จ์‹ฉ์‹ช์‹ฎ์‹ฐ์‹ฒ์‹ณ์‹ด์‹ต์‹ท์‹บ์‹ฝ์‹พ์‹ฟ์Œ์Œ‚์Œƒ์Œ„์Œ…์Œ†์Œ‡์ŒŠ์Œ‹์ŒŽ์Œ๏ฟฝ".split(""); +for(j=0;j!=D[154].length;++j)if(D[154][j].charCodeAt(0)!==65533){e[D[154][j]]=39424+j;d[39424+j]=D[154][j]}D[155]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์Œ์Œ‘์Œ’์Œ–์Œ—์Œ™์Œš์Œ›์Œ์Œž์ŒŸ์Œ ์Œก์Œข์Œฃ์Œฆ์Œง์Œช์Œซ์Œฌ์Œญ์Œฎ์Œฏ์Œฐ์Œฑ์Œฒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์Œณ์Œด์Œต์Œถ์Œท์Œธ์Œน์Œบ์Œป์Œผ์Œฝ์Œพ์Œฟ์€์์‚์ƒ์„์†์‡์ˆ์‰์Š์‹์Œ์๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์Ž์์์‘์’์“์”์•์–์—์˜์™์š์›์œ์์ž์Ÿ์ ์ก์ข์ฃ์ค์ฅ์ฆ์ง์ช์ซ์ญ์ฎ์ฏ์ฑ์ณ์ด์ต์ถ์ท์บ์ป์พ์ฟ์Ž€์Ž์Ž‚์Žƒ์Ž…์Ž†์Ž‡์Ž‰์ŽŠ์Ž‹์Ž์ŽŽ์Ž์Ž์Ž‘์Ž’์Ž“์Ž”์Ž•์Ž–์Ž—์Ž˜์Ž™์Žš์Ž›์Žœ์Ž์Žž์ŽŸ์Ž ์Žก์Žข์Žฃ์Žค์Žฅ์Žฆ์Žง์Žจ์Žฉ์Žช์Žซ์Žฌ์Žญ์Žฎ์Žฏ์Žฐ์Žฑ์Žฒ์Žณ์Žด์Žต์Žถ์Žท์Žธ์Žน์Žบ์Žป์Žผ์Žฝ์Žพ์Žฟ์์‚์ƒ์„์…์†์‡์ˆ์‰์Š์‹์Œ์์Ž์์์‘์’์“์”์•์–์—์š๏ฟฝ".split("");for(j=0;j!=D[155].length;++j)if(D[155][j].charCodeAt(0)!==65533){e[D[155][j]]=39680+j;d[39680+j]=D[155][j]}D[156]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์›์์ž์ก์ฃ์ค์ฅ์ฆ์ง์ช์ซ์ฌ์ฎ์ฏ์ฐ์ฑ์ฒ์ณ์ถ์ท์น์บ์ป์ผ์ฝ์พ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฟ์€์์‚์ƒ์„์…์†์‡์‰์Š์‹์Œ์์Ž์์‘์’์“์”์•์–์—์˜์™์š๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์›์œ์์ž์Ÿ์ ์ก์ข์ฃ์ฅ์ฆ์ง์จ์ฉ์ช์ซ์ญ์ฎ์ฏ์ฑ์ฒ์ณ์ต์ถ์ท์ธ์น์บ์ป์พ์ฟ์‘€์‘์‘‚์‘ƒ์‘„์‘…์‘†์‘‡์‘‰์‘Š์‘‹์‘Œ์‘์‘Ž์‘์‘์‘‘์‘’์‘“์‘”์‘•์‘–์‘—์‘˜์‘™์‘š์‘›์‘œ์‘์‘ž์‘Ÿ์‘ ์‘ก์‘ข์‘ฃ์‘ฆ์‘ง์‘ฉ์‘ช์‘ซ์‘ญ์‘ฎ์‘ฏ์‘ฐ์‘ฑ์‘ฒ์‘ณ์‘ถ์‘ท์‘ธ์‘บ์‘ป์‘ผ์‘ฝ์‘พ์‘ฟ์’์’‚์’ƒ์’„์’…์’†์’‡์’ˆ์’‰์’Š์’‹์’Œ์’์’Ž์’์’์’‘์’’์’“์’•์’–์’—์’˜์’™์’š์’›์’์’ž์’Ÿ์’ ์’ก์’ข์’ฃ์’ค์’ฅ์’ฆ์’ง์’จ์’ฉ๏ฟฝ".split("");for(j=0;j!=D[156].length;++j)if(D[156][j].charCodeAt(0)!==65533){e[D[156][j]]=39936+j;d[39936+j]=D[156][j]}D[157]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์’ช์’ซ์’ฌ์’ญ์’ฎ์’ฏ์’ฐ์’ฑ์’ฒ์’ณ์’ด์’ต์’ถ์’ท์’น์’บ์’ป์’ฝ์’พ์’ฟ์“€์“์“‚์“ƒ์“„์“…๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์“†์“‡์“ˆ์“‰์“Š์“‹์“Œ์“์“Ž์“์“์“‘์“’์““์“”์“•์“–์“—์“˜์“™์“š์“›์“œ์“์“ž์“Ÿ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์“ ์“ก์“ข์“ฃ์“ค์“ฅ์“ฆ์“ง์“จ์“ช์“ซ์“ฌ์“ญ์“ฎ์“ฏ์“ฒ์“ณ์“ต์“ถ์“ท์“น์“ป์“ผ์“ฝ์“พ์”‚์”ƒ์”„์”…์”†์”‡์”ˆ์”‰์”Š์”‹์”์”Ž์”์”‘์”’์”“์”•์”–์”—์”˜์”™์”š์”›์”์”ž์”Ÿ์” ์”ก์”ข์”ฃ์”ค์”ฅ์”ฆ์”ง์”ช์”ซ์”ญ์”ฎ์”ฏ์”ฑ์”ฒ์”ณ์”ด์”ต์”ถ์”ท์”บ์”ผ์”พ์”ฟ์•€์•์•‚์•ƒ์•†์•‡์•‹์•์•์•‘์•’์•–์•š์•›์•œ์•Ÿ์•ข์•ฃ์•ฅ์•ฆ์•ง์•ฉ์•ช์•ซ์•ฌ์•ญ์•ฎ์•ฏ์•ฒ์•ถ์•ท์•ธ์•น์•บ์•ป์•พ์•ฟ์–์–‚์–ƒ์–…์–†์–ˆ์–‰์–Š์–‹์–Ž์–์–’์–“์–”๏ฟฝ".split("");for(j=0;j!=D[157].length;++j)if(D[157][j].charCodeAt(0)!==65533){e[D[157][j]]=40192+j;d[40192+j]=D[157][j]}D[158]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์––์–™์–š์–›์–์–ž์–Ÿ์–ก์–ข์–ฃ์–ค์–ฅ์–ฆ์–ง์–จ์–ช์–ซ์–ฌ์–ญ์–ฎ์–ฏ์–ฐ์–ฑ์–ฒ์–ณ์–ถ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์–ท์–บ์–ฟ์—€์—์—‚์—ƒ์—‹์—์—์—’์—“์—•์—–์——์—™์—š์—›์—œ์—์—ž์—Ÿ์—ข์—ค์—ฆ์—ง๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์—จ์—ฉ์—ช์—ซ์—ฏ์—ฑ์—ฒ์—ณ์—ต์—ธ์—น์—บ์—ป์˜‚์˜ƒ์˜„์˜‰์˜Š์˜‹์˜์˜Ž์˜์˜‘์˜’์˜“์˜”์˜•์˜–์˜—์˜š์˜์˜ž์˜Ÿ์˜ ์˜ก์˜ข์˜ฃ์˜ฆ์˜ง์˜ฉ์˜ช์˜ซ์˜ฏ์˜ฑ์˜ฒ์˜ถ์˜ธ์˜บ์˜ผ์˜ฝ์˜พ์˜ฟ์™‚์™ƒ์™…์™†์™‡์™‰์™Š์™‹์™Œ์™์™Ž์™์™’์™–์™—์™˜์™™์™š์™›์™ž์™Ÿ์™ก์™ข์™ฃ์™ค์™ฅ์™ฆ์™ง์™จ์™ฉ์™ช์™ซ์™ญ์™ฎ์™ฐ์™ฒ์™ณ์™ด์™ต์™ถ์™ท์™บ์™ป์™ฝ์™พ์™ฟ์š์š‚์šƒ์š„์š…์š†์š‡์šŠ์šŒ์šŽ์š์š์š‘์š’์š“์š–์š—์š™์šš์š›์š์šž์šŸ์š ์šก์šข์šฃ์šฆ๏ฟฝ".split("");for(j=0;j!=D[158].length;++j)if(D[158][j].charCodeAt(0)!==65533){e[D[158][j]]=40448+j;d[40448+j]=D[158][j]}D[159]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์šจ์šช์šซ์šฌ์šญ์šฎ์šฏ์šฒ์šณ์šต์šถ์šท์šป์šผ์šฝ์šพ์šฟ์›‚์›„์›†์›‡์›ˆ์›‰์›Š์›‹์›Ž๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์›์›‘์›’์›“์›•์›–์›—์›˜์›™์›š์››์›ž์›Ÿ์›ข์›ฃ์›ค์›ฅ์›ฆ์›ง์›ช์›ซ์›ญ์›ฎ์›ฏ์›ฑ์›ฒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์›ณ์›ด์›ต์›ถ์›ท์›บ์›ป์›ผ์›พ์›ฟ์œ€์œ์œ‚์œƒ์œ†์œ‡์œ‰์œŠ์œ‹์œ์œŽ์œ์œ์œ‘์œ’์œ“์œ–์œ˜์œš์œ›์œœ์œ์œž์œŸ์œข์œฃ์œฅ์œฆ์œง์œฉ์œช์œซ์œฌ์œญ์œฎ์œฏ์œฒ์œด์œถ์œธ์œน์œบ์œป์œพ์œฟ์์‚์ƒ์…์†์‡์ˆ์‰์‹์Ž์์™์š์›์์ž์Ÿ์ก์ข์ฃ์ค์ฅ์ฆ์ง์ฉ์ช์ฌ์ญ์ฎ์ฏ์ฐ์ฑ์ฒ์ณ์ถ์ท์น์บ์ป์ฟ์ž€์ž์ž‚์ž†์ž‹์žŒ์ž์ž์ž’์ž“์ž•์ž™์ž›์žœ์ž์žž์žŸ์žข์žง์žจ์žฉ์žช์žซ์žฎ์žฏ์žฑ์žฒ์žณ์žต์žถ์žท๏ฟฝ".split("");for(j=0;j!=D[159].length;++j)if(D[159][j].charCodeAt(0)!==65533){e[D[159][j]]=40704+j;d[40704+j]=D[159][j]}D[160]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์žธ์žน์žบ์žป์žพ์Ÿ‚์Ÿƒ์Ÿ„์Ÿ…์Ÿ†์Ÿ‡์ŸŠ์Ÿ‹์Ÿ์Ÿ์Ÿ‘์Ÿ’์Ÿ“์Ÿ”์Ÿ•์Ÿ–์Ÿ—์Ÿ™์Ÿš์Ÿ›์Ÿœ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์Ÿž์ŸŸ์Ÿ ์Ÿก์Ÿข์Ÿฃ์Ÿฅ์Ÿฆ์Ÿง์Ÿฉ์Ÿช์Ÿซ์Ÿญ์Ÿฎ์Ÿฏ์Ÿฐ์Ÿฑ์Ÿฒ์Ÿณ์Ÿด์Ÿต์Ÿถ์Ÿท์Ÿธ์Ÿน์Ÿบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์Ÿป์Ÿผ์Ÿฝ์Ÿพ์Ÿฟ์ ‚์ ƒ์ …์ †์ ‡์ ‰์ ‹์ Œ์ ์ Ž์ ์ ’์ ”์ —์ ˜์ ™์ š์ ›์ ž์ Ÿ์ ก์ ข์ ฃ์ ฅ์ ฆ์ ง์ จ์ ฉ์ ช์ ซ์ ฎ์ ฐ์ ฒ์ ณ์ ด์ ต์ ถ์ ท์ น์ บ์ ป์ ฝ์ พ์ ฟ์ก์ก‚์กƒ์ก„์ก…์ก†์ก‡์กŠ์ก‹์กŽ์ก์ก์ก‘์ก’์ก“์ก•์ก–์ก—์ก˜์ก™์กš์ก›์กœ์ก์กž์กŸ์ก ์กก์กข์กฃ์กค์กฅ์กฆ์กง์กจ์กฉ์กช์กซ์กฌ์กญ์กฎ์กฏ์กฒ์กณ์กต์กถ์กท์กน์กป์กผ์กฝ์กพ์กฟ์ข‚์ข„์ขˆ์ข‰์ขŠ์ขŽ์ข์ข์ข‘์ข’์ข“์ข•์ข–์ข—์ข˜์ข™์ขš์ข›์ขœ์ขž์ข ์ขข์ขฃ์ขค๏ฟฝ".split("");for(j=0;j!=D[160].length;++j)if(D[160][j].charCodeAt(0)!==65533){e[D[160][j]]=40960+j;d[40960+j]=D[160][j]}D[161]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ขฅ์ขฆ์ขง์ขฉ์ขช์ขซ์ขฌ์ขญ์ขฎ์ขฏ์ขฐ์ขฑ์ขฒ์ขณ์ขด์ขต์ขถ์ขท์ขธ์ขน์ขบ์ขป์ขพ์ขฟ์ฃ€์ฃ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฃ‚์ฃƒ์ฃ…์ฃ†์ฃ‡์ฃ‰์ฃŠ์ฃ‹์ฃ์ฃŽ์ฃ์ฃ์ฃ‘์ฃ’์ฃ“์ฃ–์ฃ˜์ฃš์ฃ›์ฃœ์ฃ์ฃž์ฃŸ์ฃข์ฃฃ์ฃฅ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฃฆ์ฃง์ฃจ์ฃฉ์ฃช์ฃซ์ฃฌ์ฃญ์ฃฎ์ฃฏ์ฃฐ์ฃฑ์ฃฒ์ฃณ์ฃด์ฃถ์ฃท์ฃธ์ฃน์ฃบ์ฃป์ฃพ์ฃฟ์ค์ค‚์คƒ์ค‡์คˆ์ค‰์คŠ์ค‹์คŽใ€€ใ€ใ€‚ยทโ€ฅโ€ฆยจใ€ƒยญโ€•โˆฅ๏ผผโˆผโ€˜โ€™โ€œโ€ใ€”ใ€•ใ€ˆใ€‰ใ€Šใ€‹ใ€Œใ€ใ€Žใ€ใ€ใ€‘ยฑร—รทโ‰ โ‰คโ‰ฅโˆžโˆดยฐโ€ฒโ€ณโ„ƒโ„ซ๏ฟ ๏ฟก๏ฟฅโ™‚โ™€โˆ โŠฅโŒ’โˆ‚โˆ‡โ‰กโ‰’ยงโ€ปโ˜†โ˜…โ—‹โ—โ—Žโ—‡โ—†โ–กโ– โ–ณโ–ฒโ–ฝโ–ผโ†’โ†โ†‘โ†“โ†”ใ€“โ‰ชโ‰ซโˆšโˆฝโˆโˆตโˆซโˆฌโˆˆโˆ‹โŠ†โŠ‡โŠ‚โŠƒโˆชโˆฉโˆงโˆจ๏ฟข๏ฟฝ".split("");for(j=0;j!=D[161].length;++j)if(D[161][j].charCodeAt(0)!==65533){e[D[161][j]]=41216+j;d[41216+j]=D[161][j]}D[162]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ค์ค’์ค“์ค”์ค•์ค–์ค—์ค™์คš์ค›์คœ์ค์คž์คŸ์ค ์คก์คข์คฃ์คค์คฅ์คฆ์คง์คจ์คฉ์คช์คซ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์คญ์คฎ์คฏ์คฐ์คฑ์คฒ์คณ์คต์คถ์คท์คธ์คน์คบ์คป์คผ์คฝ์คพ์คฟ์ฅ€์ฅ์ฅ‚์ฅƒ์ฅ„์ฅ…์ฅ†์ฅ‡๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฅˆ์ฅ‰์ฅŠ์ฅ‹์ฅŒ์ฅ์ฅŽ์ฅ์ฅ’์ฅ“์ฅ•์ฅ–์ฅ—์ฅ™์ฅš์ฅ›์ฅœ์ฅ์ฅž์ฅŸ์ฅข์ฅค์ฅฅ์ฅฆ์ฅง์ฅจ์ฅฉ์ฅช์ฅซ์ฅญ์ฅฎ์ฅฏโ‡’โ‡”โˆ€โˆƒยด๏ฝžห‡ห˜หหšห™ยธห›ยกยฟหโˆฎโˆ‘โˆยคโ„‰โ€ฐโ—โ—€โ–ทโ–ถโ™คโ™ โ™กโ™ฅโ™งโ™ฃโŠ™โ—ˆโ–ฃโ—โ—‘โ–’โ–คโ–ฅโ–จโ–งโ–ฆโ–ฉโ™จโ˜โ˜Žโ˜œโ˜žยถโ€ โ€กโ†•โ†—โ†™โ†–โ†˜โ™ญโ™ฉโ™ชโ™ฌใ‰ฟใˆœโ„–ใ‡โ„ขใ‚ใ˜โ„กโ‚ฌยฎ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[162].length;++j)if(D[162][j].charCodeAt(0)!==65533){e[D[162][j]]=41472+j;d[41472+j]=D[162][j]}D[163]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฅฑ์ฅฒ์ฅณ์ฅต์ฅถ์ฅท์ฅธ์ฅน์ฅบ์ฅป์ฅฝ์ฅพ์ฅฟ์ฆ€์ฆ์ฆ‚์ฆƒ์ฆ„์ฆ…์ฆ†์ฆ‡์ฆŠ์ฆ‹์ฆ์ฆŽ์ฆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฆ‘์ฆ’์ฆ“์ฆ”์ฆ•์ฆ–์ฆ—์ฆš์ฆœ์ฆž์ฆŸ์ฆ ์ฆก์ฆข์ฆฃ์ฆค์ฆฅ์ฆฆ์ฆง์ฆจ์ฆฉ์ฆช์ฆซ์ฆฌ์ฆญ์ฆฎ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฆฏ์ฆฐ์ฆฑ์ฆฒ์ฆณ์ฆด์ฆต์ฆถ์ฆท์ฆธ์ฆน์ฆบ์ฆป์ฆผ์ฆฝ์ฆพ์ฆฟ์ง‚์งƒ์ง…์ง†์ง‰์ง‹์งŒ์ง์งŽ์ง์ง’์ง”์ง—์ง˜์ง›๏ผ๏ผ‚๏ผƒ๏ผ„๏ผ…๏ผ†๏ผ‡๏ผˆ๏ผ‰๏ผŠ๏ผ‹๏ผŒ๏ผ๏ผŽ๏ผ๏ผ๏ผ‘๏ผ’๏ผ“๏ผ”๏ผ•๏ผ–๏ผ—๏ผ˜๏ผ™๏ผš๏ผ›๏ผœ๏ผ๏ผž๏ผŸ๏ผ ๏ผก๏ผข๏ผฃ๏ผค๏ผฅ๏ผฆ๏ผง๏ผจ๏ผฉ๏ผช๏ผซ๏ผฌ๏ผญ๏ผฎ๏ผฏ๏ผฐ๏ผฑ๏ผฒ๏ผณ๏ผด๏ผต๏ผถ๏ผท๏ผธ๏ผน๏ผบ๏ผป๏ฟฆ๏ผฝ๏ผพ๏ผฟ๏ฝ€๏ฝ๏ฝ‚๏ฝƒ๏ฝ„๏ฝ…๏ฝ†๏ฝ‡๏ฝˆ๏ฝ‰๏ฝŠ๏ฝ‹๏ฝŒ๏ฝ๏ฝŽ๏ฝ๏ฝ๏ฝ‘๏ฝ’๏ฝ“๏ฝ”๏ฝ•๏ฝ–๏ฝ—๏ฝ˜๏ฝ™๏ฝš๏ฝ›๏ฝœ๏ฝ๏ฟฃ๏ฟฝ".split("");for(j=0;j!=D[163].length;++j)if(D[163][j].charCodeAt(0)!==65533){e[D[163][j]]=41728+j;d[41728+j]=D[163][j]}D[164]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์งž์งŸ์งก์งฃ์งฅ์งฆ์งจ์งฉ์งช์งซ์งฎ์งฒ์งณ์งด์งต์งถ์งท์งบ์งป์งฝ์งพ์งฟ์จ์จ‚์จƒ์จ„๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์จ…์จ†์จ‡์จŠ์จŽ์จ์จ์จ‘์จ’์จ“์จ•์จ–์จ—์จ™์จš์จ›์จœ์จ์จž์จŸ์จ ์จก์จข์จฃ์จค์จฅ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์จฆ์จง์จจ์จช์จซ์จฌ์จญ์จฎ์จฏ์จฐ์จฑ์จฒ์จณ์จด์จต์จถ์จท์จธ์จน์จบ์จป์จผ์จฝ์จพ์จฟ์ฉ€์ฉ์ฉ‚์ฉƒ์ฉ„์ฉ…์ฉ†ใ„ฑใ„ฒใ„ณใ„ดใ„ตใ„ถใ„ทใ„ธใ„นใ„บใ„ปใ„ผใ„ฝใ„พใ„ฟใ…€ใ…ใ…‚ใ…ƒใ…„ใ……ใ…†ใ…‡ใ…ˆใ…‰ใ…Šใ…‹ใ…Œใ…ใ…Žใ…ใ…ใ…‘ใ…’ใ…“ใ…”ใ…•ใ…–ใ…—ใ…˜ใ…™ใ…šใ…›ใ…œใ…ใ…žใ…Ÿใ… ใ…กใ…ขใ…ฃใ…คใ…ฅใ…ฆใ…งใ…จใ…ฉใ…ชใ…ซใ…ฌใ…ญใ…ฎใ…ฏใ…ฐใ…ฑใ…ฒใ…ณใ…ดใ…ตใ…ถใ…ทใ…ธใ…นใ…บใ…ปใ…ผใ…ฝใ…พใ…ฟใ†€ใ†ใ†‚ใ†ƒใ†„ใ†…ใ††ใ†‡ใ†ˆใ†‰ใ†Šใ†‹ใ†Œใ†ใ†Ž๏ฟฝ".split("");for(j=0;j!=D[164].length;++j)if(D[164][j].charCodeAt(0)!==65533){e[D[164][j]]=41984+j;d[41984+j]=D[164][j]}D[165]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฉ‡์ฉˆ์ฉ‰์ฉŠ์ฉ‹์ฉŽ์ฉ์ฉ‘์ฉ’์ฉ“์ฉ•์ฉ–์ฉ—์ฉ˜์ฉ™์ฉš์ฉ›์ฉž์ฉข์ฉฃ์ฉค์ฉฅ์ฉฆ์ฉง์ฉฉ์ฉช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฉซ์ฉฌ์ฉญ์ฉฎ์ฉฏ์ฉฐ์ฉฑ์ฉฒ์ฉณ์ฉด์ฉต์ฉถ์ฉท์ฉธ์ฉน์ฉบ์ฉป์ฉผ์ฉพ์ฉฟ์ช€์ช์ช‚์ชƒ์ช…์ช†๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ช‡์ชˆ์ช‰์ชŠ์ช‹์ชŒ์ช์ชŽ์ช์ช์ช‘์ช’์ช“์ช”์ช•์ช–์ช—์ช™์ชš์ช›์ชœ์ช์ชž์ชŸ์ช ์ชก์ชข์ชฃ์ชค์ชฅ์ชฆ์ชงโ…ฐโ…ฑโ…ฒโ…ณโ…ดโ…ตโ…ถโ…ทโ…ธโ…น๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ… โ…กโ…ขโ…ฃโ…คโ…ฅโ…ฆโ…งโ…จโ…ฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮกฮฃฮคฮฅฮฆฮงฮจฮฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯƒฯ„ฯ…ฯ†ฯ‡ฯˆฯ‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[165].length;++j)if(D[165][j].charCodeAt(0)!==65533){e[D[165][j]]=42240+j;d[42240+j]=D[165][j]}D[166]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ชจ์ชฉ์ชช์ชซ์ชฌ์ชญ์ชฎ์ชฏ์ชฐ์ชฑ์ชฒ์ชณ์ชด์ชต์ชถ์ชท์ชธ์ชน์ชบ์ชป์ชพ์ชฟ์ซ์ซ‚์ซƒ์ซ…๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ซ†์ซ‡์ซˆ์ซ‰์ซŠ์ซ‹์ซŽ์ซ์ซ’์ซ”์ซ•์ซ–์ซ—์ซš์ซ›์ซœ์ซ์ซž์ซŸ์ซก์ซข์ซฃ์ซค์ซฅ์ซฆ์ซง๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ซจ์ซฉ์ซช์ซซ์ซญ์ซฎ์ซฏ์ซฐ์ซฑ์ซฒ์ซณ์ซต์ซถ์ซท์ซธ์ซน์ซบ์ซป์ซผ์ซฝ์ซพ์ซฟ์ฌ€์ฌ์ฌ‚์ฌƒ์ฌ„์ฌ…์ฌ†์ฌ‡์ฌ‰์ฌŠโ”€โ”‚โ”Œโ”โ”˜โ””โ”œโ”ฌโ”คโ”ดโ”ผโ”โ”ƒโ”โ”“โ”›โ”—โ”ฃโ”ณโ”ซโ”ปโ•‹โ” โ”ฏโ”จโ”ทโ”ฟโ”โ”ฐโ”ฅโ”ธโ•‚โ”’โ”‘โ”šโ”™โ”–โ”•โ”Žโ”โ”žโ”Ÿโ”กโ”ขโ”ฆโ”งโ”ฉโ”ชโ”ญโ”ฎโ”ฑโ”ฒโ”ตโ”ถโ”นโ”บโ”ฝโ”พโ•€โ•โ•ƒโ•„โ•…โ•†โ•‡โ•ˆโ•‰โ•Š๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[166].length;++j)if(D[166][j].charCodeAt(0)!==65533){e[D[166][j]]=42496+j;d[42496+j]=D[166][j]}D[167]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฌ‹์ฌŒ์ฌ์ฌŽ์ฌ์ฌ‘์ฌ’์ฌ“์ฌ•์ฌ–์ฌ—์ฌ™์ฌš์ฌ›์ฌœ์ฌ์ฌž์ฌŸ์ฌข์ฌฃ์ฌค์ฌฅ์ฌฆ์ฌง์ฌจ์ฌฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฌช์ฌซ์ฌฌ์ฌญ์ฌฎ์ฌฏ์ฌฐ์ฌฑ์ฌฒ์ฌณ์ฌด์ฌต์ฌถ์ฌท์ฌธ์ฌน์ฌบ์ฌป์ฌผ์ฌฝ์ฌพ์ฌฟ์ญ€์ญ‚์ญƒ์ญ„๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ญ…์ญ†์ญ‡์ญŠ์ญ‹์ญ์ญŽ์ญ์ญ‘์ญ’์ญ“์ญ”์ญ•์ญ–์ญ—์ญš์ญ›์ญœ์ญž์ญŸ์ญ ์ญก์ญข์ญฃ์ญฅ์ญฆ์ญง์ญจ์ญฉ์ญช์ญซ์ญฌใŽ•ใŽ–ใŽ—โ„“ใŽ˜ใ„ใŽฃใŽคใŽฅใŽฆใŽ™ใŽšใŽ›ใŽœใŽใŽžใŽŸใŽ ใŽกใŽขใŠใŽใŽŽใŽใใŽˆใŽ‰ใˆใŽงใŽจใŽฐใŽฑใŽฒใŽณใŽดใŽตใŽถใŽทใŽธใŽนใŽ€ใŽใŽ‚ใŽƒใŽ„ใŽบใŽปใŽผใŽฝใŽพใŽฟใŽใŽ‘ใŽ’ใŽ“ใŽ”โ„ฆใ€ใใŽŠใŽ‹ใŽŒใ–ใ…ใŽญใŽฎใŽฏใ›ใŽฉใŽชใŽซใŽฌใใใ“ใƒใ‰ใœใ†๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[167].length;++j)if(D[167][j].charCodeAt(0)!==65533){e[D[167][j]]=42752+j;d[42752+j]=D[167][j]}D[168]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ญญ์ญฎ์ญฏ์ญฐ์ญฑ์ญฒ์ญณ์ญด์ญต์ญถ์ญท์ญบ์ญป์ญผ์ญฝ์ญพ์ญฟ์ฎ€์ฎ์ฎ‚์ฎƒ์ฎ„์ฎ…์ฎ†์ฎ‡์ฎˆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฎ‰์ฎŠ์ฎ‹์ฎŒ์ฎ์ฎŽ์ฎ์ฎ์ฎ‘์ฎ’์ฎ“์ฎ”์ฎ•์ฎ–์ฎ—์ฎ˜์ฎ™์ฎš์ฎ›์ฎ์ฎž์ฎŸ์ฎ ์ฎก์ฎข์ฎฃ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฎค์ฎฅ์ฎฆ์ฎง์ฎจ์ฎฉ์ฎช์ฎซ์ฎฌ์ฎญ์ฎฎ์ฎฏ์ฎฐ์ฎฑ์ฎฒ์ฎณ์ฎด์ฎต์ฎถ์ฎท์ฎน์ฎบ์ฎป์ฎผ์ฎฝ์ฎพ์ฎฟ์ฏ€์ฏ์ฏ‚์ฏƒ์ฏ„ร†รยชฤฆ๏ฟฝฤฒ๏ฟฝฤฟลร˜ล’ยบรžลฆลŠ๏ฟฝใ‰ ใ‰กใ‰ขใ‰ฃใ‰คใ‰ฅใ‰ฆใ‰งใ‰จใ‰ฉใ‰ชใ‰ซใ‰ฌใ‰ญใ‰ฎใ‰ฏใ‰ฐใ‰ฑใ‰ฒใ‰ณใ‰ดใ‰ตใ‰ถใ‰ทใ‰ธใ‰นใ‰บใ‰ปโ“โ“‘โ“’โ““โ“”โ“•โ“–โ“—โ“˜โ“™โ“šโ“›โ“œโ“โ“žโ“Ÿโ“ โ“กโ“ขโ“ฃโ“คโ“ฅโ“ฆโ“งโ“จโ“ฉโ‘ โ‘กโ‘ขโ‘ฃโ‘คโ‘ฅโ‘ฆโ‘งโ‘จโ‘ฉโ‘ชโ‘ซโ‘ฌโ‘ญโ‘ฎยฝโ…“โ…”ยผยพโ…›โ…œโ…โ…ž๏ฟฝ".split("");for(j=0;j!=D[168].length;++j)if(D[168][j].charCodeAt(0)!==65533){e[D[168][j]]=43008+j;d[43008+j]=D[168][j]}D[169]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฏ…์ฏ†์ฏ‡์ฏˆ์ฏ‰์ฏŠ์ฏ‹์ฏŒ์ฏ์ฏŽ์ฏ์ฏ์ฏ‘์ฏ’์ฏ“์ฏ•์ฏ–์ฏ—์ฏ˜์ฏ™์ฏš์ฏ›์ฏœ์ฏ์ฏž์ฏŸ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฏ ์ฏก์ฏข์ฏฃ์ฏฅ์ฏฆ์ฏจ์ฏช์ฏซ์ฏฌ์ฏญ์ฏฎ์ฏฏ์ฏฐ์ฏฑ์ฏฒ์ฏณ์ฏด์ฏต์ฏถ์ฏท์ฏธ์ฏน์ฏบ์ฏป์ฏผ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฏฝ์ฏพ์ฏฟ์ฐ€์ฐ์ฐ‚์ฐƒ์ฐ„์ฐ…์ฐ†์ฐ‡์ฐˆ์ฐ‰์ฐŠ์ฐ‹์ฐŽ์ฐ์ฐ‘์ฐ’์ฐ“์ฐ•์ฐ–์ฐ—์ฐ˜์ฐ™์ฐš์ฐ›์ฐž์ฐŸ์ฐ ์ฐฃ์ฐครฆฤ‘รฐฤงฤฑฤณฤธล€ล‚รธล“รŸรพลงล‹ล‰ใˆ€ใˆใˆ‚ใˆƒใˆ„ใˆ…ใˆ†ใˆ‡ใˆˆใˆ‰ใˆŠใˆ‹ใˆŒใˆใˆŽใˆใˆใˆ‘ใˆ’ใˆ“ใˆ”ใˆ•ใˆ–ใˆ—ใˆ˜ใˆ™ใˆšใˆ›โ’œโ’โ’žโ’Ÿโ’ โ’กโ’ขโ’ฃโ’คโ’ฅโ’ฆโ’งโ’จโ’ฉโ’ชโ’ซโ’ฌโ’ญโ’ฎโ’ฏโ’ฐโ’ฑโ’ฒโ’ณโ’ดโ’ตโ‘ดโ‘ตโ‘ถโ‘ทโ‘ธโ‘นโ‘บโ‘ปโ‘ผโ‘ฝโ‘พโ‘ฟโ’€โ’โ’‚ยนยฒยณโดโฟโ‚โ‚‚โ‚ƒโ‚„๏ฟฝ".split("");for(j=0;j!=D[169].length;++j)if(D[169][j].charCodeAt(0)!==65533){e[D[169][j]]=43264+j;d[43264+j]=D[169][j]}D[170]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฐฅ์ฐฆ์ฐช์ฐซ์ฐญ์ฐฏ์ฐฑ์ฐฒ์ฐณ์ฐด์ฐต์ฐถ์ฐท์ฐบ์ฐฟ์ฑ€์ฑ์ฑ‚์ฑƒ์ฑ†์ฑ‡์ฑ‰์ฑŠ์ฑ‹์ฑ์ฑŽ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฑ์ฑ์ฑ‘์ฑ’์ฑ“์ฑ–์ฑš์ฑ›์ฑœ์ฑ์ฑž์ฑŸ์ฑก์ฑข์ฑฃ์ฑฅ์ฑง์ฑฉ์ฑช์ฑซ์ฑฌ์ฑญ์ฑฎ์ฑฏ์ฑฑ์ฑฒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฑณ์ฑด์ฑถ์ฑท์ฑธ์ฑน์ฑบ์ฑป์ฑผ์ฑฝ์ฑพ์ฑฟ์ฒ€์ฒ์ฒ‚์ฒƒ์ฒ„์ฒ…์ฒ†์ฒ‡์ฒˆ์ฒ‰์ฒŠ์ฒ‹์ฒŒ์ฒ์ฒŽ์ฒ์ฒ์ฒ‘์ฒ’์ฒ“ใใ‚ใƒใ„ใ…ใ†ใ‡ใˆใ‰ใŠใ‹ใŒใใŽใใใ‘ใ’ใ“ใ”ใ•ใ–ใ—ใ˜ใ™ใšใ›ใœใใžใŸใ ใกใขใฃใคใฅใฆใงใจใฉใชใซใฌใญใฎใฏใฐใฑใฒใณใดใตใถใทใธในใบใปใผใฝใพใฟใ‚€ใ‚ใ‚‚ใ‚ƒใ‚„ใ‚…ใ‚†ใ‚‡ใ‚ˆใ‚‰ใ‚Šใ‚‹ใ‚Œใ‚ใ‚Žใ‚ใ‚ใ‚‘ใ‚’ใ‚“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[170].length;++j)if(D[170][j].charCodeAt(0)!==65533){e[D[170][j]]=43520+j;d[43520+j]=D[170][j]}D[171]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฒ”์ฒ•์ฒ–์ฒ—์ฒš์ฒ›์ฒ์ฒž์ฒŸ์ฒก์ฒข์ฒฃ์ฒค์ฒฅ์ฒฆ์ฒง์ฒช์ฒฎ์ฒฏ์ฒฐ์ฒฑ์ฒฒ์ฒณ์ฒถ์ฒท์ฒน๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฒบ์ฒป์ฒฝ์ฒพ์ฒฟ์ณ€์ณ์ณ‚์ณƒ์ณ†์ณˆ์ณŠ์ณ‹์ณŒ์ณ์ณŽ์ณ์ณ‘์ณ’์ณ“์ณ•์ณ–์ณ—์ณ˜์ณ™์ณš๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ณ›์ณœ์ณ์ณž์ณŸ์ณ ์ณก์ณข์ณฃ์ณฅ์ณฆ์ณง์ณจ์ณฉ์ณช์ณซ์ณญ์ณฎ์ณฏ์ณฑ์ณฒ์ณณ์ณด์ณต์ณถ์ณท์ณธ์ณน์ณบ์ณป์ณผ์ณฝใ‚กใ‚ขใ‚ฃใ‚คใ‚ฅใ‚ฆใ‚งใ‚จใ‚ฉใ‚ชใ‚ซใ‚ฌใ‚ญใ‚ฎใ‚ฏใ‚ฐใ‚ฑใ‚ฒใ‚ณใ‚ดใ‚ตใ‚ถใ‚ทใ‚ธใ‚นใ‚บใ‚ปใ‚ผใ‚ฝใ‚พใ‚ฟใƒ€ใƒใƒ‚ใƒƒใƒ„ใƒ…ใƒ†ใƒ‡ใƒˆใƒ‰ใƒŠใƒ‹ใƒŒใƒใƒŽใƒใƒใƒ‘ใƒ’ใƒ“ใƒ”ใƒ•ใƒ–ใƒ—ใƒ˜ใƒ™ใƒšใƒ›ใƒœใƒใƒžใƒŸใƒ ใƒกใƒขใƒฃใƒคใƒฅใƒฆใƒงใƒจใƒฉใƒชใƒซใƒฌใƒญใƒฎใƒฏใƒฐใƒฑใƒฒใƒณใƒดใƒตใƒถ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[171].length;++j)if(D[171][j].charCodeAt(0)!==65533){e[D[171][j]]=43776+j;d[43776+j]=D[171][j]}D[172]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ณพ์ณฟ์ด€์ด‚์ดƒ์ด„์ด…์ด†์ด‡์ดŠ์ด‹์ด์ดŽ์ด์ด‘์ด’์ด“์ด”์ด•์ด–์ด—์ดš์ดœ์ดž์ดŸ์ด ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ดก์ดข์ดฃ์ดฅ์ดฆ์ดง์ดฉ์ดช์ดซ์ดญ์ดฎ์ดฏ์ดฐ์ดฑ์ดฒ์ดณ์ดด์ดต์ดถ์ดท์ดธ์ดบ์ดป์ดผ์ดฝ์ดพ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ดฟ์ต€์ต์ต‚์ตƒ์ต„์ต…์ต†์ต‡์ตˆ์ต‰์ตŠ์ต‹์ตŒ์ต์ตŽ์ต์ต์ต‘์ต’์ต“์ต”์ต•์ต–์ต—์ต˜์ต™์ตš์ต›์ต์ตž์ตŸะะ‘ะ’ะ“ะ”ะ•ะะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝะฐะฑะฒะณะดะตั‘ะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽั๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[172].length;++j)if(D[172][j].charCodeAt(0)!==65533){e[D[172][j]]=44032+j;d[44032+j]=D[172][j]}D[173]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ตก์ตข์ตฃ์ตฅ์ตฆ์ตง์ตจ์ตฉ์ตช์ตซ์ตฎ์ตฐ์ตฒ์ตณ์ตด์ตต์ตถ์ตท์ตน์ตบ์ตป์ตผ์ตฝ์ตพ์ตฟ์ถ€๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ถ์ถ‚์ถƒ์ถ„์ถ…์ถ†์ถ‡์ถ‰์ถŠ์ถ‹์ถŒ์ถ์ถŽ์ถ์ถ์ถ‘์ถ’์ถ“์ถ–์ถ—์ถ™์ถš์ถ›์ถ์ถž์ถŸ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ถ ์ถก์ถข์ถฃ์ถฆ์ถจ์ถช์ถซ์ถฌ์ถญ์ถฎ์ถฏ์ถฑ์ถฒ์ถณ์ถด์ถต์ถถ์ถท์ถธ์ถน์ถบ์ถป์ถผ์ถฝ์ถพ์ถฟ์ท€์ท์ท‚์ทƒ์ท…๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[173].length;++j)if(D[173][j].charCodeAt(0)!==65533){e[D[173][j]]=44288+j;d[44288+j]=D[173][j]}D[174]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ท†์ท‡์ทˆ์ท‰์ทŠ์ท‹์ท์ทŽ์ท์ท‘์ท’์ท“์ท”์ท•์ท–์ท—์ท˜์ท™์ทš์ท›์ทœ์ท์ทž์ทŸ์ท ์ทก๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ทข์ทฃ์ทค์ทฅ์ทฆ์ทง์ทฉ์ทช์ทซ์ทญ์ทฎ์ทฏ์ทฑ์ทฒ์ทณ์ทด์ทต์ทถ์ทท์ทบ์ทผ์ทพ์ทฟ์ธ€์ธ์ธ‚๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ธƒ์ธ…์ธ†์ธ‡์ธ‰์ธŠ์ธ‹์ธ์ธŽ์ธ์ธ์ธ‘์ธ’์ธ“์ธ•์ธ–์ธ—์ธ˜์ธš์ธ›์ธœ์ธ์ธž์ธŸ์ธข์ธฃ์ธฅ์ธฆ์ธง์ธฉ์ธช์ธซ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[174].length;++j)if(D[174][j].charCodeAt(0)!==65533){e[D[174][j]]=44544+j;d[44544+j]=D[174][j]}D[175]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ธฌ์ธญ์ธฎ์ธฏ์ธฒ์ธด์ธถ์ธท์ธธ์ธน์ธบ์ธป์ธผ์ธฝ์ธพ์ธฟ์น€์น์น‚์นƒ์น„์น…์น†์น‡์นˆ์น‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์นŠ์น‹์นŒ์น์นŽ์น์น์น‘์น’์น“์น”์น•์น–์น—์นš์น›์น์นž์นข์นฃ์นค์นฅ์นฆ์นง์นช์นฌ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์นฎ์นฏ์นฐ์นฑ์นฒ์นณ์นถ์นท์นน์นบ์นป์นฝ์นพ์นฟ์บ€์บ์บ‚์บƒ์บ†์บˆ์บŠ์บ‹์บŒ์บ์บŽ์บ์บ’์บ“์บ•์บ–์บ—์บ™๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[175].length;++j)if(D[175][j].charCodeAt(0)!==65533){e[D[175][j]]=44800+j;d[44800+j]=D[175][j]}D[176]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์บš์บ›์บœ์บ์บž์บŸ์บข์บฆ์บง์บจ์บฉ์บช์บซ์บฎ์บฏ์บฐ์บฑ์บฒ์บณ์บด์บต์บถ์บท์บธ์บน์บบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์บป์บผ์บฝ์บพ์บฟ์ป€์ป‚์ปƒ์ป„์ป…์ป†์ป‡์ปˆ์ป‰์ปŠ์ป‹์ปŒ์ป์ปŽ์ป์ป์ป‘์ป’์ป“์ป”์ป•๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ป–์ป—์ป˜์ป™์ปš์ป›์ปœ์ป์ปž์ปŸ์ป ์ปก์ปข์ปฃ์ปฆ์ปง์ปฉ์ปช์ปญ์ปฎ์ปฏ์ปฐ์ปฑ์ปฒ์ปณ์ปถ์ปบ์ปป์ปผ์ปฝ์ปพ์ปฟ๊ฐ€๊ฐ๊ฐ„๊ฐ‡๊ฐˆ๊ฐ‰๊ฐŠ๊ฐ๊ฐ‘๊ฐ’๊ฐ“๊ฐ”๊ฐ•๊ฐ–๊ฐ—๊ฐ™๊ฐš๊ฐ›๊ฐœ๊ฐ๊ฐ ๊ฐค๊ฐฌ๊ฐญ๊ฐฏ๊ฐฐ๊ฐฑ๊ฐธ๊ฐน๊ฐผ๊ฑ€๊ฑ‹๊ฑ๊ฑ”๊ฑ˜๊ฑœ๊ฑฐ๊ฑฑ๊ฑด๊ฑท๊ฑธ๊ฑบ๊ฒ€๊ฒ๊ฒƒ๊ฒ„๊ฒ…๊ฒ†๊ฒ‰๊ฒŠ๊ฒ‹๊ฒŒ๊ฒ๊ฒ”๊ฒœ๊ฒ๊ฒŸ๊ฒ ๊ฒก๊ฒจ๊ฒฉ๊ฒช๊ฒฌ๊ฒฏ๊ฒฐ๊ฒธ๊ฒน๊ฒป๊ฒผ๊ฒฝ๊ณ๊ณ„๊ณˆ๊ณŒ๊ณ•๊ณ—๊ณ ๊ณก๊ณค๊ณง๊ณจ๊ณช๊ณฌ๊ณฏ๊ณฐ๊ณฑ๊ณณ๊ณต๊ณถ๊ณผ๊ณฝ๊ด€๊ด„๊ด†๏ฟฝ".split("");for(j=0;j!=D[176].length;++j)if(D[176][j].charCodeAt(0)!==65533){e[D[176][j]]=45056+j;d[45056+j]=D[176][j]}D[177]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ผ‚์ผƒ์ผ…์ผ†์ผ‡์ผ‰์ผŠ์ผ‹์ผŒ์ผ์ผŽ์ผ์ผ’์ผ”์ผ–์ผ—์ผ˜์ผ™์ผš์ผ›์ผ์ผž์ผŸ์ผก์ผข์ผฃ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ผฅ์ผฆ์ผง์ผจ์ผฉ์ผช์ผซ์ผฎ์ผฒ์ผณ์ผด์ผต์ผถ์ผท์ผน์ผบ์ผป์ผผ์ผฝ์ผพ์ผฟ์ฝ€์ฝ์ฝ‚์ฝƒ์ฝ„๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฝ…์ฝ†์ฝ‡์ฝˆ์ฝ‰์ฝŠ์ฝ‹์ฝŒ์ฝ์ฝŽ์ฝ์ฝ์ฝ‘์ฝ’์ฝ“์ฝ–์ฝ—์ฝ™์ฝš์ฝ›์ฝ์ฝž์ฝŸ์ฝ ์ฝก์ฝข์ฝฃ์ฝฆ์ฝจ์ฝช์ฝซ์ฝฌ๊ดŒ๊ด๊ด๊ด‘๊ด˜๊ดœ๊ด ๊ดฉ๊ดฌ๊ดญ๊ดด๊ดต๊ดธ๊ดผ๊ต„๊ต…๊ต‡๊ต‰๊ต๊ต”๊ต˜๊ตก๊ตฃ๊ตฌ๊ตญ๊ตฐ๊ตณ๊ตด๊ตต๊ตถ๊ตป๊ตผ๊ตฝ๊ตฟ๊ถ๊ถ‚๊ถˆ๊ถ‰๊ถŒ๊ถ๊ถœ๊ถ๊ถค๊ถท๊ท€๊ท๊ท„๊ทˆ๊ท๊ท‘๊ท“๊ทœ๊ท ๊ทค๊ทธ๊ทน๊ทผ๊ทฟ๊ธ€๊ธ๊ธˆ๊ธ‰๊ธ‹๊ธ๊ธ”๊ธฐ๊ธฑ๊ธด๊ธท๊ธธ๊ธบ๊น€๊น๊นƒ๊น…๊น†๊นŠ๊นŒ๊น๊นŽ๊น๊น”๊น–๊นœ๊น๊นŸ๊น ๊นก๊นฅ๊นจ๊นฉ๊นฌ๊นฐ๊นธ๏ฟฝ".split("");for(j=0;j!=D[177].length;++j)if(D[177][j].charCodeAt(0)!==65533){e[D[177][j]]=45312+j;d[45312+j]=D[177][j]}D[178]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฝญ์ฝฎ์ฝฏ์ฝฒ์ฝณ์ฝต์ฝถ์ฝท์ฝน์ฝบ์ฝป์ฝผ์ฝฝ์ฝพ์ฝฟ์พ์พ‚์พƒ์พ„์พ†์พ‡์พˆ์พ‰์พŠ์พ‹์พ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์พŽ์พ์พ์พ‘์พ’์พ“์พ”์พ•์พ–์พ—์พ˜์พ™์พš์พ›์พœ์พ์พž์พŸ์พ ์พข์พฃ์พค์พฅ์พฆ์พง์พฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์พช์พซ์พฌ์พญ์พฎ์พฏ์พฑ์พฒ์พณ์พด์พต์พถ์พท์พธ์พน์พบ์พป์พผ์พฝ์พพ์พฟ์ฟ€์ฟ์ฟ‚์ฟƒ์ฟ…์ฟ†์ฟ‡์ฟˆ์ฟ‰์ฟŠ์ฟ‹๊นน๊นป๊นผ๊นฝ๊บ„๊บ…๊บŒ๊บผ๊บฝ๊บพ๊ป€๊ป„๊ปŒ๊ป๊ป๊ป๊ป‘๊ป˜๊ป™๊ปœ๊ปจ๊ปซ๊ปญ๊ปด๊ปธ๊ปผ๊ผ‡๊ผˆ๊ผ๊ผ๊ผฌ๊ผญ๊ผฐ๊ผฒ๊ผด๊ผผ๊ผฝ๊ผฟ๊ฝ๊ฝ‚๊ฝƒ๊ฝˆ๊ฝ‰๊ฝ๊ฝœ๊ฝ๊ฝค๊ฝฅ๊ฝน๊พ€๊พ„๊พˆ๊พ๊พ‘๊พ•๊พœ๊พธ๊พน๊พผ๊ฟ€๊ฟ‡๊ฟˆ๊ฟ‰๊ฟ‹๊ฟ๊ฟŽ๊ฟ”๊ฟœ๊ฟจ๊ฟฉ๊ฟฐ๊ฟฑ๊ฟด๊ฟธ๋€€๋€๋€„๋€Œ๋€๋€”๋€œ๋€๋€จ๋„๋…๋ˆ๋Š๋Œ๋Ž๋“๋”๋•๋—๋™๏ฟฝ".split("");for(j=0;j!=D[178].length;++j)if(D[178][j].charCodeAt(0)!==65533){e[D[178][j]]=45568+j;d[45568+j]=D[178][j]}D[179]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฟŒ์ฟ์ฟŽ์ฟ์ฟ์ฟ‘์ฟ’์ฟ“์ฟ”์ฟ•์ฟ–์ฟ—์ฟ˜์ฟ™์ฟš์ฟ›์ฟœ์ฟ์ฟž์ฟŸ์ฟข์ฟฃ์ฟฅ์ฟฆ์ฟง์ฟฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ์ฟช์ฟซ์ฟฌ์ฟญ์ฟฎ์ฟฏ์ฟฒ์ฟด์ฟถ์ฟท์ฟธ์ฟน์ฟบ์ฟป์ฟฝ์ฟพ์ฟฟํ€ํ€‚ํ€ƒํ€…ํ€†ํ€‡ํ€ˆํ€‰ํ€Š๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ€‹ํ€Œํ€ํ€Žํ€ํ€ํ€’ํ€“ํ€”ํ€•ํ€–ํ€—ํ€™ํ€šํ€›ํ€œํ€ํ€žํ€Ÿํ€ ํ€กํ€ขํ€ฃํ€คํ€ฅํ€ฆํ€งํ€จํ€ฉํ€ชํ€ซํ€ฌ๋๋ผ๋ฝ๋‚€๋‚„๋‚Œ๋‚๋‚๋‚‘๋‚˜๋‚™๋‚š๋‚œ๋‚Ÿ๋‚ ๋‚ก๋‚ข๋‚จ๋‚ฉ๋‚ซ๋‚ฌ๋‚ญ๋‚ฎ๋‚ฏ๋‚ฑ๋‚ณ๋‚ด๋‚ต๋‚ธ๋‚ผ๋ƒ„๋ƒ…๋ƒ‡๋ƒˆ๋ƒ‰๋ƒ๋ƒ‘๋ƒ”๋ƒ˜๋ƒ ๋ƒฅ๋„ˆ๋„‰๋„‹๋„Œ๋„๋„’๋„“๋„˜๋„™๋„›๋„œ๋„๋„ฃ๋„ค๋„ฅ๋„จ๋„ฌ๋„ด๋„ต๋„ท๋„ธ๋„น๋…€๋…๋…„๋…ˆ๋…๋…‘๋…”๋…•๋…˜๋…œ๋… ๋…ธ๋…น๋…ผ๋†€๋†‚๋†ˆ๋†‰๋†‹๋†๋†’๋†“๋†”๋†˜๋†œ๋†จ๋‡Œ๋‡๋‡”๋‡œ๋‡๏ฟฝ".split("");for(j=0;j!=D[179].length;++j)if(D[179][j].charCodeAt(0)!==65533){e[D[179][j]]=45824+j;d[45824+j]=D[179][j]}D[180]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ€ฎํ€ฏํ€ฐํ€ฑํ€ฒํ€ณํ€ถํ€ทํ€นํ€บํ€ปํ€ฝํ€พํ€ฟํ€ํํ‚ํƒํ†ํˆํŠํ‹ํŒํํŽํ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‘ํ’ํ“ํ•ํ–ํ—ํ™ํšํ›ํœํํžํŸํกํขํฃํคํฅํฆํงํจํฉํชํซํฎํฏ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํฑํฒํณํตํถํทํธํนํบํปํพํฟํ‚€ํ‚‚ํ‚ƒํ‚„ํ‚…ํ‚†ํ‚‡ํ‚ˆํ‚‰ํ‚Šํ‚‹ํ‚Œํ‚ํ‚Žํ‚ํ‚ํ‚‘ํ‚’ํ‚“ํ‚”๋‡Ÿ๋‡จ๋‡ฉ๋‡ฌ๋‡ฐ๋‡น๋‡ป๋‡ฝ๋ˆ„๋ˆ…๋ˆˆ๋ˆ‹๋ˆŒ๋ˆ”๋ˆ•๋ˆ—๋ˆ™๋ˆ ๋ˆด๋ˆผ๋‰˜๋‰œ๋‰ ๋‰จ๋‰ฉ๋‰ด๋‰ต๋‰ผ๋Š„๋Š…๋Š‰๋Š๋Š‘๋Š”๋Š˜๋Š™๋Šš๋Š ๋Šก๋Šฃ๋Šฅ๋Šฆ๋Šช๋Šฌ๋Šฐ๋Šด๋‹ˆ๋‹‰๋‹Œ๋‹๋‹’๋‹˜๋‹™๋‹›๋‹๋‹ข๋‹ค๋‹ฅ๋‹ฆ๋‹จ๋‹ซ๋‹ฌ๋‹ญ๋‹ฎ๋‹ฏ๋‹ณ๋‹ด๋‹ต๋‹ท๋‹ธ๋‹น๋‹บ๋‹ป๋‹ฟ๋Œ€๋Œ๋Œ„๋Œˆ๋Œ๋Œ‘๋Œ“๋Œ”๋Œ•๋Œœ๋”๋•๋–๋˜๋›๋œ๋ž๋Ÿ๋ค๋ฅ๏ฟฝ".split("");for(j=0;j!=D[180].length;++j)if(D[180][j].charCodeAt(0)!==65533){e[D[180][j]]=46080+j;d[46080+j]=D[180][j]}D[181]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‚•ํ‚–ํ‚—ํ‚˜ํ‚™ํ‚šํ‚›ํ‚œํ‚ํ‚žํ‚Ÿํ‚ ํ‚กํ‚ขํ‚ฃํ‚ฆํ‚งํ‚ฉํ‚ชํ‚ซํ‚ญํ‚ฎํ‚ฏํ‚ฐํ‚ฑํ‚ฒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‚ณํ‚ถํ‚ธํ‚บํ‚ปํ‚ผํ‚ฝํ‚พํ‚ฟํƒ‚ํƒƒํƒ…ํƒ†ํƒ‡ํƒŠํƒ‹ํƒŒํƒํƒŽํƒํƒ’ํƒ–ํƒ—ํƒ˜ํƒ™ํƒš๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํƒ›ํƒžํƒŸํƒกํƒขํƒฃํƒฅํƒฆํƒงํƒจํƒฉํƒชํƒซํƒฎํƒฒํƒณํƒดํƒตํƒถํƒทํƒนํƒบํƒปํƒผํƒฝํƒพํƒฟํ„€ํ„ํ„‚ํ„ƒํ„„๋ง๋ฉ๋ซ๋ฎ๋ฐ๋ฑ๋ด๋ธ๋Ž€๋Ž๋Žƒ๋Ž„๋Ž…๋ŽŒ๋Ž๋Ž”๋Ž ๋Žก๋Žจ๋Žฌ๋„๋…๋ˆ๋‹๋Œ๋Ž๋๋”๋•๋—๋™๋›๋๋ ๋ค๋จ๋ผ๋๋˜๋œ๋ ๋จ๋ฉ๋ซ๋ด๋‘๋‘‘๋‘”๋‘˜๋‘ ๋‘ก๋‘ฃ๋‘ฅ๋‘ฌ๋’€๋’ˆ๋’๋’ค๋’จ๋’ฌ๋’ต๋’ท๋’น๋“€๋“„๋“ˆ๋“๋“•๋“œ๋“๋“ ๋“ฃ๋“ค๋“ฆ๋“ฌ๋“ญ๋“ฏ๋“ฑ๋“ธ๋””๋”•๋”˜๋”›๋”œ๋”ค๋”ฅ๋”ง๋”จ๋”ฉ๋”ช๋”ฐ๋”ฑ๋”ด๋”ธ๏ฟฝ".split("");for(j=0;j!=D[181].length;++j)if(D[181][j].charCodeAt(0)!==65533){e[D[181][j]]=46336+j;d[46336+j]=D[181][j]}D[182]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ„…ํ„†ํ„‡ํ„ˆํ„‰ํ„Šํ„‹ํ„Œํ„Žํ„ํ„ํ„‘ํ„’ํ„“ํ„”ํ„•ํ„–ํ„—ํ„˜ํ„™ํ„šํ„›ํ„œํ„ํ„žํ„Ÿ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ„ ํ„กํ„ขํ„ฃํ„คํ„ฅํ„ฆํ„งํ„จํ„ฉํ„ชํ„ซํ„ฌํ„ญํ„ฎํ„ฏํ„ฒํ„ณํ„ตํ„ถํ„ทํ„นํ„ปํ„ผํ„ฝํ„พ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ„ฟํ…‚ํ…†ํ…‡ํ…ˆํ…‰ํ…Šํ…‹ํ…Žํ…ํ…‘ํ…’ํ…“ํ…•ํ…–ํ…—ํ…˜ํ…™ํ…šํ…›ํ…žํ… ํ…ขํ…ฃํ…คํ…ฅํ…ฆํ…งํ…ฉํ…ชํ…ซํ…ญ๋•€๋•๋•ƒ๋•„๋•…๋•‹๋•Œ๋•๋•๋•”๋•œ๋•๋•Ÿ๋• ๋•ก๋– ๋–ก๋–ค๋–จ๋–ช๋–ซ๋–ฐ๋–ฑ๋–ณ๋–ด๋–ต๋–ป๋–ผ๋–ฝ๋—€๋—„๋—Œ๋—๋—๋—๋—‘๋—˜๋—ฌ๋˜๋˜‘๋˜”๋˜˜๋˜ฅ๋˜ฌ๋˜ด๋™ˆ๋™ค๋™จ๋šœ๋š๋š ๋šค๋šซ๋šฌ๋šฑ๋›”๋›ฐ๋›ด๋›ธ๋œ€๋œ๋œ…๋œจ๋œฉ๋œฌ๋œฏ๋œฐ๋œธ๋œน๋œป๋„๋ˆ๋Œ๋”๋•๋ ๋ค๋จ๋ฐ๋ฑ๋ณ๋ต๋ผ๋ฝ๋ž€๋ž„๋žŒ๋ž๋ž๋ž๋ž‘๋ž’๋ž–๋ž—๏ฟฝ".split("");for(j=0;j!=D[182].length;++j)if(D[182][j].charCodeAt(0)!==65533){e[D[182][j]]=46592+j;d[46592+j]=D[182][j]}D[183]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ…ฎํ…ฏํ…ฐํ…ฑํ…ฒํ…ณํ…ดํ…ตํ…ถํ…ทํ…ธํ…นํ…บํ…ปํ…ฝํ…พํ…ฟํ†€ํ†ํ†‚ํ†ƒํ†…ํ††ํ†‡ํ†‰ํ†Š๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ†‹ํ†Œํ†ํ†Žํ†ํ†ํ†‘ํ†’ํ†“ํ†”ํ†•ํ†–ํ†—ํ†˜ํ†™ํ†šํ†›ํ†œํ†ํ†žํ†Ÿํ†ขํ†ฃํ†ฅํ†ฆํ†ง๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ†ฉํ†ชํ†ซํ†ฌํ†ญํ†ฎํ†ฏํ†ฒํ†ดํ†ถํ†ทํ†ธํ†นํ†ปํ†ฝํ†พํ†ฟํ‡ํ‡‚ํ‡ƒํ‡„ํ‡…ํ‡†ํ‡‡ํ‡ˆํ‡‰ํ‡Šํ‡‹ํ‡Œํ‡ํ‡Žํ‡๋ž˜๋ž™๋žœ๋ž ๋žจ๋žฉ๋žซ๋žฌ๋žญ๋žด๋žต๋žธ๋Ÿ‡๋Ÿ‰๋Ÿฌ๋Ÿญ๋Ÿฐ๋Ÿด๋Ÿผ๋Ÿฝ๋Ÿฟ๋ €๋ ๋ ‡๋ ˆ๋ ‰๋ Œ๋ ๋ ˜๋ ™๋ ›๋ ๋ ค๋ ฅ๋ จ๋ ฌ๋ ด๋ ต๋ ท๋ ธ๋ น๋ก€๋ก„๋ก‘๋ก“๋กœ๋ก๋ก ๋กค๋กฌ๋กญ๋กฏ๋กฑ๋กธ๋กผ๋ข๋ขจ๋ขฐ๋ขด๋ขธ๋ฃ€๋ฃ๋ฃƒ๋ฃ…๋ฃŒ๋ฃ๋ฃ”๋ฃ๋ฃŸ๋ฃก๋ฃจ๋ฃฉ๋ฃฌ๋ฃฐ๋ฃธ๋ฃน๋ฃป๋ฃฝ๋ค„๋ค˜๋ค ๋คผ๋คฝ๋ฅ€๋ฅ„๋ฅŒ๋ฅ๋ฅ‘๋ฅ˜๋ฅ™๋ฅœ๋ฅ ๋ฅจ๋ฅฉ๏ฟฝ".split("");for(j=0;j!=D[183].length;++j)if(D[183][j].charCodeAt(0)!==65533){e[D[183][j]]=46848+j;d[46848+j]=D[183][j]}D[184]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‡ํ‡‘ํ‡’ํ‡“ํ‡”ํ‡•ํ‡–ํ‡—ํ‡™ํ‡šํ‡›ํ‡œํ‡ํ‡žํ‡Ÿํ‡ ํ‡กํ‡ขํ‡ฃํ‡คํ‡ฅํ‡ฆํ‡งํ‡จํ‡ฉํ‡ช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‡ซํ‡ฌํ‡ญํ‡ฎํ‡ฏํ‡ฐํ‡ฑํ‡ฒํ‡ณํ‡ตํ‡ถํ‡ทํ‡นํ‡บํ‡ปํ‡ผํ‡ฝํ‡พํ‡ฟํˆ€ํˆํˆ‚ํˆƒํˆ„ํˆ…ํˆ†๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํˆˆํˆŠํˆ‹ํˆŒํˆํˆŽํˆํˆ‘ํˆ’ํˆ“ํˆ”ํˆ•ํˆ–ํˆ—ํˆ˜ํˆ™ํˆšํˆ›ํˆœํˆํˆžํˆŸํˆ ํˆกํˆขํˆฃํˆคํˆฅํˆฆํˆงํˆจํˆฉ๋ฅซ๋ฅญ๋ฅด๋ฅต๋ฅธ๋ฅผ๋ฆ„๋ฆ…๋ฆ‡๋ฆ‰๋ฆŠ๋ฆ๋ฆŽ๋ฆฌ๋ฆญ๋ฆฐ๋ฆด๋ฆผ๋ฆฝ๋ฆฟ๋ง๋งˆ๋ง‰๋งŒ๋งŽ๋ง๋ง๋ง‘๋ง’๋ง˜๋ง™๋ง›๋ง๋งž๋งก๋งฃ๋งค๋งฅ๋งจ๋งฌ๋งด๋งต๋งท๋งธ๋งน๋งบ๋จ€๋จ๋จˆ๋จ•๋จธ๋จน๋จผ๋ฉ€๋ฉ‚๋ฉˆ๋ฉ‰๋ฉ‹๋ฉ๋ฉŽ๋ฉ“๋ฉ”๋ฉ•๋ฉ˜๋ฉœ๋ฉค๋ฉฅ๋ฉง๋ฉจ๋ฉฉ๋ฉฐ๋ฉฑ๋ฉด๋ฉธ๋ชƒ๋ช„๋ช…๋ช‡๋ชŒ๋ชจ๋ชฉ๋ชซ๋ชฌ๋ชฐ๋ชฒ๋ชธ๋ชน๋ชป๋ชฝ๋ซ„๋ซˆ๋ซ˜๋ซ™๋ซผ๏ฟฝ".split("");for(j=0;j!=D[184].length;++j)if(D[184][j].charCodeAt(0)!==65533){e[D[184][j]]=47104+j;d[47104+j]=D[184][j]}D[185]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํˆชํˆซํˆฎํˆฏํˆฑํˆฒํˆณํˆตํˆถํˆทํˆธํˆนํˆบํˆปํˆพํ‰€ํ‰‚ํ‰ƒํ‰„ํ‰…ํ‰†ํ‰‡ํ‰‰ํ‰Šํ‰‹ํ‰Œ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‰ํ‰Žํ‰ํ‰ํ‰‘ํ‰’ํ‰“ํ‰”ํ‰•ํ‰–ํ‰—ํ‰˜ํ‰™ํ‰šํ‰›ํ‰ํ‰žํ‰Ÿํ‰ ํ‰กํ‰ขํ‰ฃํ‰ฅํ‰ฆํ‰งํ‰จ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‰ฉํ‰ชํ‰ซํ‰ฌํ‰ญํ‰ฎํ‰ฏํ‰ฐํ‰ฑํ‰ฒํ‰ณํ‰ดํ‰ตํ‰ถํ‰ทํ‰ธํ‰นํ‰บํ‰ปํ‰ผํ‰ฝํ‰พํ‰ฟํŠ‚ํŠƒํŠ…ํŠ†ํŠ‡ํŠ‰ํŠŠํŠ‹ํŠŒ๋ฌ€๋ฌ„๋ฌ๋ฌ๋ฌ‘๋ฌ˜๋ฌœ๋ฌ ๋ฌฉ๋ฌซ๋ฌด๋ฌต๋ฌถ๋ฌธ๋ฌป๋ฌผ๋ฌฝ๋ฌพ๋ญ„๋ญ…๋ญ‡๋ญ‰๋ญ๋ญ๋ญ๋ญ”๋ญ˜๋ญก๋ญฃ๋ญฌ๋ฎˆ๋ฎŒ๋ฎ๋ฎค๋ฎจ๋ฎฌ๋ฎด๋ฎท๋ฏ€๋ฏ„๋ฏˆ๋ฏ๋ฏ“๋ฏธ๋ฏน๋ฏผ๋ฏฟ๋ฐ€๋ฐ‚๋ฐˆ๋ฐ‰๋ฐ‹๋ฐŒ๋ฐ๋ฐ๋ฐ‘๋ฐ”๋ฐ•๋ฐ–๋ฐ—๋ฐ˜๋ฐ›๋ฐœ๋ฐ๋ฐž๋ฐŸ๋ฐค๋ฐฅ๋ฐง๋ฐฉ๋ฐญ๋ฐฐ๋ฐฑ๋ฐด๋ฐธ๋ฑ€๋ฑ๋ฑƒ๋ฑ„๋ฑ…๋ฑ‰๋ฑŒ๋ฑ๋ฑ๋ฑ๋ฒ„๋ฒ…๋ฒˆ๋ฒ‹๋ฒŒ๋ฒŽ๋ฒ”๋ฒ•๋ฒ—๏ฟฝ".split("");for(j=0;j!=D[185].length;++j)if(D[185][j].charCodeAt(0)!==65533){e[D[185][j]]=47360+j;d[47360+j]=D[185][j]}D[186]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํŠํŠŽํŠํŠ’ํŠ“ํŠ”ํŠ–ํŠ—ํŠ˜ํŠ™ํŠšํŠ›ํŠํŠžํŠŸํŠกํŠขํŠฃํŠฅํŠฆํŠงํŠจํŠฉํŠชํŠซํŠญ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํŠฎํŠฏํŠฐํŠฒํŠณํŠดํŠตํŠถํŠทํŠบํŠปํŠฝํŠพํ‹ํ‹ƒํ‹„ํ‹…ํ‹†ํ‹‡ํ‹Šํ‹Œํ‹ํ‹Žํ‹ํ‹ํ‹‘๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‹’ํ‹“ํ‹•ํ‹–ํ‹—ํ‹™ํ‹šํ‹›ํ‹ํ‹žํ‹Ÿํ‹ ํ‹กํ‹ขํ‹ฃํ‹ฆํ‹งํ‹จํ‹ฉํ‹ชํ‹ซํ‹ฌํ‹ญํ‹ฎํ‹ฏํ‹ฒํ‹ณํ‹ตํ‹ถํ‹ทํ‹นํ‹บ๋ฒ™๋ฒš๋ฒ ๋ฒก๋ฒค๋ฒง๋ฒจ๋ฒฐ๋ฒฑ๋ฒณ๋ฒด๋ฒต๋ฒผ๋ฒฝ๋ณ€๋ณ„๋ณ๋ณ๋ณ๋ณ‘๋ณ•๋ณ˜๋ณœ๋ณด๋ณต๋ณถ๋ณธ๋ณผ๋ด„๋ด…๋ด‡๋ด‰๋ด๋ด”๋ดค๋ดฌ๋ต€๋ตˆ๋ต‰๋ตŒ๋ต๋ต˜๋ต™๋ตค๋ตจ๋ถ€๋ถ๋ถ„๋ถ‡๋ถˆ๋ถ‰๋ถŠ๋ถ๋ถ‘๋ถ“๋ถ•๋ถ™๋ถš๋ถœ๋ถค๋ถฐ๋ถธ๋ท”๋ท•๋ท˜๋ทœ๋ทฉ๋ทฐ๋ทด๋ทธ๋ธ€๋ธƒ๋ธ…๋ธŒ๋ธ๋ธ๋ธ”๋ธœ๋ธ๋ธŸ๋น„๋น…๋นˆ๋นŒ๋นŽ๋น”๋น•๋น—๋น™๋นš๋น›๋น ๋นก๋นค๏ฟฝ".split("");for(j=0;j!=D[186].length;++j)if(D[186][j].charCodeAt(0)!==65533){e[D[186][j]]=47616+j;d[47616+j]=D[186][j]}D[187]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‹ปํ‹ผํ‹ฝํ‹พํ‹ฟํŒ‚ํŒ„ํŒ†ํŒ‡ํŒˆํŒ‰ํŒŠํŒ‹ํŒํŒ‘ํŒ’ํŒ“ํŒ•ํŒ—ํŒ˜ํŒ™ํŒšํŒ›ํŒžํŒขํŒฃ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํŒคํŒฆํŒงํŒชํŒซํŒญํŒฎํŒฏํŒฑํŒฒํŒณํŒดํŒตํŒถํŒทํŒบํŒพํŒฟํ€ํํ‚ํƒํ†ํ‡ํˆํ‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํŠํ‹ํŒํํŽํํํ‘ํ’ํ“ํ”ํ•ํ–ํ—ํ˜ํ™ํšํ›ํœํํžํŸํ ํกํขํฃํคํฅํฆํงํจํฉ๋นจ๋นช๋นฐ๋นฑ๋นณ๋นด๋นต๋นป๋นผ๋นฝ๋บ€๋บ„๋บŒ๋บ๋บ๋บ๋บ‘๋บ˜๋บ™๋บจ๋ป๋ป‘๋ป”๋ป—๋ป˜๋ป ๋ปฃ๋ปค๋ปฅ๋ปฌ๋ผ๋ผˆ๋ผ‰๋ผ˜๋ผ™๋ผ›๋ผœ๋ผ๋ฝ€๋ฝ๋ฝ„๋ฝˆ๋ฝ๋ฝ‘๋ฝ•๋พ”๋พฐ๋ฟ…๋ฟŒ๋ฟ๋ฟ๋ฟ”๋ฟœ๋ฟŸ๋ฟก์€ผ์‘์˜์œ์ ์จ์ฉ์‚์‚‘์‚”์‚˜์‚ ์‚ก์‚ฃ์‚ฅ์‚ฌ์‚ญ์‚ฏ์‚ฐ์‚ณ์‚ด์‚ต์‚ถ์‚ผ์‚ฝ์‚ฟ์ƒ€์ƒ์ƒ…์ƒˆ์ƒ‰์ƒŒ์ƒ์ƒ˜์ƒ™์ƒ›์ƒœ์ƒ์ƒค๏ฟฝ".split("");for(j=0;j!=D[187].length;++j)if(D[187][j].charCodeAt(0)!==65533){e[D[187][j]]=47872+j;d[47872+j]=D[187][j]}D[188]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํชํซํฌํญํฎํฏํฐํฑํฒํณํดํตํถํทํธํนํบํปํพํฟํŽํŽ‚ํŽƒํŽ…ํŽ†ํŽ‡๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํŽˆํŽ‰ํŽŠํŽ‹ํŽŽํŽ’ํŽ“ํŽ”ํŽ•ํŽ–ํŽ—ํŽšํŽ›ํŽํŽžํŽŸํŽกํŽขํŽฃํŽคํŽฅํŽฆํŽงํŽชํŽฌํŽฎ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํŽฏํŽฐํŽฑํŽฒํŽณํŽตํŽถํŽทํŽนํŽบํŽปํŽฝํŽพํŽฟํ€ํํ‚ํƒํ†ํ‡ํŠํ‹ํŒํํŽํํ‘ํ’ํ“ํ”ํ•ํ–์ƒฅ์ƒจ์ƒฌ์ƒด์ƒต์ƒท์ƒน์„€์„„์„ˆ์„์„•์„œ์„์„ž์„Ÿ์„ ์„ฃ์„ค์„ฆ์„ง์„ฌ์„ญ์„ฏ์„ฐ์„ฑ์„ถ์„ธ์„น์„ผ์…€์…ˆ์…‰์…‹์…Œ์…์…”์…•์…˜์…œ์…ค์…ฅ์…ง์…จ์…ฉ์…ฐ์…ด์…ธ์†…์†Œ์†์†Ž์†์†”์†–์†œ์†์†Ÿ์†ก์†ฅ์†จ์†ฉ์†ฌ์†ฐ์†ฝ์‡„์‡ˆ์‡Œ์‡”์‡—์‡˜์‡ ์‡ค์‡จ์‡ฐ์‡ฑ์‡ณ์‡ผ์‡ฝ์ˆ€์ˆ„์ˆŒ์ˆ์ˆ์ˆ‘์ˆ˜์ˆ™์ˆœ์ˆŸ์ˆ ์ˆจ์ˆฉ์ˆซ์ˆญ๏ฟฝ".split("");for(j=0;j!=D[188].length;++j)if(D[188][j].charCodeAt(0)!==65533){e[D[188][j]]=48128+j;d[48128+j]=D[188][j]}D[189]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ—ํ™ํšํ›ํœํํžํŸํ ํขํคํฅํฆํงํจํฉํชํซํฎํฏํฑํฒํณํตํถํท๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํธํนํบํปํพํ€ํ‚ํƒํ„ํ…ํ†ํ‡ํ‰ํŠํ‹ํŒํํŽํํํ‘ํ’ํ“ํ”ํ•ํ–๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ—ํ˜ํ™ํšํ›ํœํžํŸํ ํกํขํฃํคํฅํฆํงํจํฉํชํซํฌํญํฎํฏํฐํฑํฒํณํดํตํถํท์ˆฏ์ˆฑ์ˆฒ์ˆด์‰ˆ์‰์‰‘์‰”์‰˜์‰ ์‰ฅ์‰ฌ์‰ญ์‰ฐ์‰ด์‰ผ์‰ฝ์‰ฟ์Š์Šˆ์Š‰์Š์Š˜์Š›์Š์Šค์Šฅ์Šจ์Šฌ์Šญ์Šด์Šต์Šท์Šน์‹œ์‹์‹ ์‹ฃ์‹ค์‹ซ์‹ฌ์‹ญ์‹ฏ์‹ฑ์‹ถ์‹ธ์‹น์‹ป์‹ผ์Œ€์Œˆ์Œ‰์ŒŒ์Œ์Œ“์Œ”์Œ•์Œ˜์Œœ์Œค์Œฅ์Œจ์Œฉ์…์จ์ฉ์ฌ์ฐ์ฒ์ธ์น์ผ์ฝ์Ž„์Žˆ์ŽŒ์€์˜์™์œ์Ÿ์ ์ข์จ์ฉ์ญ์ด์ต์ธ์ˆ์์ค์ฌ์ฐ๏ฟฝ".split("");for(j=0;j!=D[189].length;++j)if(D[189][j].charCodeAt(0)!==65533){e[D[189][j]]=48384+j;d[48384+j]=D[189][j]}D[190]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํธํนํบํปํผํฝํพํฟํ‘ํ‘‚ํ‘ƒํ‘…ํ‘†ํ‘‡ํ‘ˆํ‘‰ํ‘Šํ‘‹ํ‘Œํ‘ํ‘Žํ‘ํ‘ํ‘‘ํ‘’ํ‘“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‘”ํ‘•ํ‘–ํ‘—ํ‘˜ํ‘™ํ‘šํ‘›ํ‘ํ‘žํ‘Ÿํ‘กํ‘ขํ‘ฃํ‘ฅํ‘ฆํ‘งํ‘จํ‘ฉํ‘ชํ‘ซํ‘ฌํ‘ฎํ‘ฐํ‘ฑํ‘ฒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‘ณํ‘ดํ‘ตํ‘ถํ‘ทํ‘บํ‘ปํ‘ฝํ‘พํ’ํ’ƒํ’„ํ’…ํ’†ํ’‡ํ’Šํ’Œํ’Žํ’ํ’ํ’‘ํ’’ํ’“ํ’•ํ’–ํ’—ํ’˜ํ’™ํ’šํ’›ํ’œํ’์ด์ผ์ฝ์‘ˆ์‘ค์‘ฅ์‘จ์‘ฌ์‘ด์‘ต์‘น์’€์’”์’œ์’ธ์’ผ์“ฉ์“ฐ์“ฑ์“ด์“ธ์“บ์“ฟ์”€์”์”Œ์”์””์”œ์”จ์”ฉ์”ฌ์”ฐ์”ธ์”น์”ป์”ฝ์•„์•…์•ˆ์•‰์•Š์•Œ์•์•Ž์•“์•”์••์•—์•˜์•™์•์•ž์• ์•ก์•ค์•จ์•ฐ์•ฑ์•ณ์•ด์•ต์•ผ์•ฝ์–€์–„์–‡์–Œ์–์–์–‘์–•์–—์–˜์–œ์– ์–ฉ์–ด์–ต์–ธ์–น์–ป์–ผ์–ฝ์–พ์—„์—…์—†์—‡์—ˆ์—‰์—Š์—Œ์—Ž๏ฟฝ".split("");for(j=0;j!=D[190].length;++j)if(D[190][j].charCodeAt(0)!==65533){e[D[190][j]]=48640+j;d[48640+j]=D[190][j]}D[191]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ’žํ’Ÿํ’ ํ’กํ’ขํ’ฃํ’คํ’ฅํ’ฆํ’งํ’จํ’ชํ’ซํ’ฌํ’ญํ’ฎํ’ฏํ’ฐํ’ฑํ’ฒํ’ณํ’ดํ’ตํ’ถํ’ทํ’ธ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ’นํ’บํ’ปํ’ผํ’ฝํ’พํ’ฟํ“€ํ“ํ“‚ํ“ƒํ“„ํ“…ํ“†ํ“‡ํ“ˆํ“‰ํ“Šํ“‹ํ“ํ“Žํ“ํ“‘ํ“’ํ““ํ“•๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ“–ํ“—ํ“˜ํ“™ํ“šํ“›ํ“ํ“žํ“ ํ“กํ“ขํ“ฃํ“คํ“ฅํ“ฆํ“งํ“ฉํ“ชํ“ซํ“ญํ“ฎํ“ฏํ“ฑํ“ฒํ“ณํ“ดํ“ตํ“ถํ“ทํ“นํ“บํ“ผ์—์—‘์—”์—˜์— ์—ก์—ฃ์—ฅ์—ฌ์—ญ์—ฎ์—ฐ์—ด์—ถ์—ท์—ผ์—ฝ์—พ์—ฟ์˜€์˜์˜…์˜†์˜‡์˜ˆ์˜Œ์˜์˜˜์˜™์˜›์˜œ์˜ค์˜ฅ์˜จ์˜ฌ์˜ญ์˜ฎ์˜ฐ์˜ณ์˜ด์˜ต์˜ท์˜น์˜ป์™€์™์™„์™ˆ์™์™‘์™“์™”์™•์™œ์™์™ ์™ฌ์™ฏ์™ฑ์™ธ์™น์™ผ์š€์šˆ์š‰์š‹์š์š”์š•์š˜์šœ์šค์šฅ์šง์šฉ์šฐ์šฑ์šด์šธ์šน์šบ์›€์›์›ƒ์›…์›Œ์›์›์›”์›œ์›์› ์›ก์›จ๏ฟฝ".split("");for(j=0;j!=D[191].length;++j)if(D[191][j].charCodeAt(0)!==65533){e[D[191][j]]=48896+j;d[48896+j]=D[191][j]}D[192]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ“พํ“ฟํ”€ํ”ํ”‚ํ”ƒํ”…ํ”†ํ”‡ํ”‰ํ”Šํ”‹ํ”ํ”Žํ”ํ”ํ”‘ํ”’ํ”“ํ”–ํ”˜ํ”™ํ”šํ”›ํ”œํ”๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ”žํ”Ÿํ” ํ”กํ”ขํ”ฃํ”คํ”ฅํ”ฆํ”งํ”จํ”ฉํ”ชํ”ซํ”ฌํ”ญํ”ฎํ”ฏํ”ฐํ”ฑํ”ฒํ”ณํ”ดํ”ตํ”ถํ”ท๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ”ธํ”นํ”บํ”ปํ”พํ”ฟํ•ํ•‚ํ•ƒํ•…ํ•†ํ•‡ํ•ˆํ•‰ํ•Šํ•‹ํ•Žํ•ํ•’ํ•“ํ•”ํ••ํ•–ํ•—ํ•šํ•›ํ•ํ•žํ•Ÿํ•กํ•ขํ•ฃ์›ฉ์›ฌ์›ฐ์›ธ์›น์›ฝ์œ„์œ…์œˆ์œŒ์œ”์œ•์œ—์œ™์œ ์œก์œค์œจ์œฐ์œฑ์œณ์œต์œท์œผ์œฝ์€์„์Š์Œ์์์‘์’์“์”์•์–์—์˜์œ์ ์จ์ซ์ด์ต์ธ์ผ์ฝ์พ์žƒ์ž„์ž…์ž‡์žˆ์ž‰์žŠ์žŽ์ž์ž‘์ž”์ž–์ž—์ž˜์žš์ž ์žก์žฃ์žค์žฅ์žฆ์žฌ์žญ์žฐ์žด์žผ์žฝ์žฟ์Ÿ€์Ÿ์Ÿˆ์Ÿ‰์ŸŒ์ŸŽ์Ÿ์Ÿ˜์Ÿ์Ÿค์Ÿจ์Ÿฌ์ €์ ์ „์ ˆ์ Š๏ฟฝ".split("");for(j=0;j!=D[192].length;++j)if(D[192][j].charCodeAt(0)!==65533){e[D[192][j]]=49152+j;d[49152+j]=D[192][j]}D[193]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ•คํ•ฆํ•งํ•ชํ•ฌํ•ฎํ•ฏํ•ฐํ•ฑํ•ฒํ•ณํ•ถํ•ทํ•นํ•บํ•ปํ•ฝํ•พํ•ฟํ–€ํ–ํ–‚ํ–ƒํ–†ํ–Šํ–‹๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ–Œํ–ํ–Žํ–ํ–‘ํ–’ํ–“ํ–”ํ–•ํ––ํ–—ํ–˜ํ–™ํ–šํ–›ํ–œํ–ํ–žํ–Ÿํ– ํ–กํ–ขํ–ฃํ–คํ–ฆํ–ง๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ–จํ–ฉํ–ชํ–ซํ–ฌํ–ญํ–ฎํ–ฏํ–ฐํ–ฑํ–ฒํ–ณํ–ดํ–ตํ–ถํ–ทํ–ธํ–นํ–บํ–ปํ–ผํ–ฝํ–พํ–ฟํ—€ํ—ํ—‚ํ—ƒํ—„ํ—…ํ—†ํ—‡์ ์ ‘์ “์ •์ –์ œ์ ์  ์ ค์ ฌ์ ญ์ ฏ์ ฑ์ ธ์ ผ์ก€์กˆ์ก‰์กŒ์ก์ก”์กฐ์กฑ์กด์กธ์กบ์ข€์ข์ขƒ์ข…์ข†์ข‡์ข‹์ขŒ์ข์ข”์ข์ขŸ์ขก์ขจ์ขผ์ขฝ์ฃ„์ฃˆ์ฃŒ์ฃ”์ฃ•์ฃ—์ฃ™์ฃ ์ฃก์ฃค์ฃต์ฃผ์ฃฝ์ค€์ค„์ค…์ค†์คŒ์ค์ค์ค‘์ค˜์คฌ์คด์ฅ์ฅ‘์ฅ”์ฅ˜์ฅ ์ฅก์ฅฃ์ฅฌ์ฅฐ์ฅด์ฅผ์ฆˆ์ฆ‰์ฆŒ์ฆ์ฆ˜์ฆ™์ฆ›์ฆ์ง€์ง์ง„์ง‡์งˆ์งŠ์ง์ง‘์ง“๏ฟฝ".split("");for(j=0;j!=D[193].length;++j)if(D[193][j].charCodeAt(0)!==65533){e[D[193][j]]=49408+j;d[49408+j]=D[193][j]}D[194]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ—Šํ—‹ํ—ํ—Žํ—ํ—‘ํ—“ํ—”ํ—•ํ—–ํ——ํ—šํ—œํ—žํ—Ÿํ— ํ—กํ—ขํ—ฃํ—ฆํ—งํ—ฉํ—ชํ—ซํ—ญํ—ฎ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ—ฏํ—ฐํ—ฑํ—ฒํ—ณํ—ถํ—ธํ—บํ—ปํ—ผํ—ฝํ—พํ—ฟํ˜‚ํ˜ƒํ˜…ํ˜†ํ˜‡ํ˜‰ํ˜Šํ˜‹ํ˜Œํ˜ํ˜Žํ˜ํ˜’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ˜–ํ˜—ํ˜˜ํ˜™ํ˜šํ˜›ํ˜ํ˜žํ˜Ÿํ˜กํ˜ขํ˜ฃํ˜ฅํ˜ฆํ˜งํ˜จํ˜ฉํ˜ชํ˜ซํ˜ฌํ˜ฎํ˜ฏํ˜ฐํ˜ฑํ˜ฒํ˜ณํ˜ดํ˜ตํ˜ถํ˜ทํ˜บํ˜ป์ง•์ง–์ง™์งš์งœ์ง์ง ์งข์งค์งง์งฌ์งญ์งฏ์งฐ์งฑ์งธ์งน์งผ์จ€์จˆ์จ‰์จ‹์จŒ์จ์จ”์จ˜์จฉ์ฉŒ์ฉ์ฉ์ฉ”์ฉœ์ฉ์ฉŸ์ฉ ์ฉก์ฉจ์ฉฝ์ช„์ช˜์ชผ์ชฝ์ซ€์ซ„์ซŒ์ซ์ซ์ซ‘์ซ“์ซ˜์ซ™์ซ ์ซฌ์ซด์ฌˆ์ฌ์ฌ”์ฌ˜์ฌ ์ฌก์ญ์ญˆ์ญ‰์ญŒ์ญ์ญ˜์ญ™์ญ์ญค์ญธ์ญน์ฎœ์ฎธ์ฏ”์ฏค์ฏง์ฏฉ์ฐŒ์ฐ์ฐ์ฐ”์ฐœ์ฐ์ฐก์ฐข์ฐง์ฐจ์ฐฉ์ฐฌ์ฐฎ์ฐฐ์ฐธ์ฐน์ฐป๏ฟฝ".split("");for(j=0;j!=D[194].length;++j)if(D[194][j].charCodeAt(0)!==65533){e[D[194][j]]=49664+j;d[49664+j]=D[194][j]}D[195]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ˜ฝํ˜พํ˜ฟํ™ํ™‚ํ™ƒํ™„ํ™†ํ™‡ํ™Šํ™Œํ™Žํ™ํ™ํ™’ํ™“ํ™–ํ™—ํ™™ํ™šํ™›ํ™ํ™žํ™Ÿํ™ ํ™ก๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ™ขํ™ฃํ™คํ™ฅํ™ฆํ™จํ™ชํ™ซํ™ฌํ™ญํ™ฎํ™ฏํ™ฒํ™ณํ™ตํ™ถํ™ทํ™ธํ™นํ™บํ™ปํ™ผํ™ฝํ™พํ™ฟํš€๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํšํš‚ํš„ํš†ํš‡ํšˆํš‰ํšŠํš‹ํšŽํšํš‘ํš’ํš“ํš•ํš–ํš—ํš˜ํš™ํššํš›ํšœํšžํš ํšขํšฃํšคํšฅํšฆํšงํšฉํšช์ฐผ์ฐฝ์ฐพ์ฑ„์ฑ…์ฑˆ์ฑŒ์ฑ”์ฑ•์ฑ—์ฑ˜์ฑ™์ฑ ์ฑค์ฑฆ์ฑจ์ฑฐ์ฑต์ฒ˜์ฒ™์ฒœ์ฒ ์ฒจ์ฒฉ์ฒซ์ฒฌ์ฒญ์ฒด์ฒต์ฒธ์ฒผ์ณ„์ณ…์ณ‡์ณ‰์ณ์ณ”์ณค์ณฌ์ณฐ์ด์ดˆ์ด‰์ดŒ์ด์ด˜์ด™์ด›์ด์ดค์ดจ์ดฌ์ดน์ตœ์ต ์ตค์ตฌ์ตญ์ตฏ์ตฑ์ตธ์ถˆ์ถ”์ถ•์ถ˜์ถœ์ถค์ถฅ์ถง์ถฉ์ถฐ์ท„์ทŒ์ท์ทจ์ทฌ์ทฐ์ทธ์ทน์ทป์ทฝ์ธ„์ธˆ์ธŒ์ธ”์ธ™์ธ ์ธก์ธค์ธจ์ธฐ์ธฑ์ธณ์ธต๏ฟฝ".split("");for(j=0;j!=D[195].length;++j)if(D[195][j].charCodeAt(0)!==65533){e[D[195][j]]=49920+j;d[49920+j]=D[195][j]}D[196]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํšซํšญํšฎํšฏํšฑํšฒํšณํšดํšตํšถํšทํšธํšบํšผํšฝํšพํšฟํ›€ํ›ํ›‚ํ›ƒํ›†ํ›‡ํ›‰ํ›Šํ›‹๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ›ํ›Žํ›ํ›ํ›’ํ›“ํ›•ํ›–ํ›˜ํ›šํ››ํ›œํ›ํ›žํ›Ÿํ›กํ›ขํ›ฃํ›ฅํ›ฆํ›งํ›ฉํ›ชํ›ซํ›ฌํ›ญ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ›ฎํ›ฏํ›ฑํ›ฒํ›ณํ›ดํ›ถํ›ทํ›ธํ›นํ›บํ›ปํ›พํ›ฟํœํœ‚ํœƒํœ…ํœ†ํœ‡ํœˆํœ‰ํœŠํœ‹ํœŒํœํœŽํœํœํœ’ํœ“ํœ”์น˜์น™์นœ์นŸ์น ์นก์นจ์นฉ์นซ์นญ์นด์นต์นธ์นผ์บ„์บ…์บ‡์บ‰์บ์บ‘์บ”์บ˜์บ ์บก์บฃ์บค์บฅ์บฌ์บญ์ป์ปค์ปฅ์ปจ์ปซ์ปฌ์ปด์ปต์ปท์ปธ์ปน์ผ€์ผ์ผ„์ผˆ์ผ์ผ‘์ผ“์ผ•์ผœ์ผ ์ผค์ผฌ์ผญ์ผฏ์ผฐ์ผฑ์ผธ์ฝ”์ฝ•์ฝ˜์ฝœ์ฝค์ฝฅ์ฝง์ฝฉ์ฝฐ์ฝฑ์ฝด์ฝธ์พ€์พ…์พŒ์พก์พจ์พฐ์ฟ„์ฟ ์ฟก์ฟค์ฟจ์ฟฐ์ฟฑ์ฟณ์ฟต์ฟผํ€€ํ€„ํ€‘ํ€˜ํ€ญํ€ดํ€ตํ€ธํ€ผ๏ฟฝ".split("");for(j=0;j!=D[196].length;++j)if(D[196][j].charCodeAt(0)!==65533){e[D[196][j]]=50176+j;d[50176+j]=D[196][j]}D[197]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํœ•ํœ–ํœ—ํœšํœ›ํœํœžํœŸํœกํœขํœฃํœคํœฅํœฆํœงํœชํœฌํœฎํœฏํœฐํœฑํœฒํœณํœถํœทํœน๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํœบํœปํœฝํœพํœฟํ€ํํ‚ํƒํ…ํ†ํˆํŠํ‹ํŒํํŽํํ’ํ“ํ•ํšํ›ํœํํž๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํŸํขํคํฆํงํจํชํซํญํฎํฏํฑํฒํณํตํถํทํธํนํบํปํพํฟํž€ํž‚ํžƒํž„ํž…ํž†ํž‡ํžŠํž‹ํ„ํ…ํ‡ํ‰ํํ”ํ˜ํ ํฌํญํฐํดํผํฝํ‚ํ‚คํ‚ฅํ‚จํ‚ฌํ‚ดํ‚ตํ‚ทํ‚นํƒ€ํƒํƒ„ํƒˆํƒ‰ํƒํƒ‘ํƒ“ํƒ”ํƒ•ํƒœํƒํƒ ํƒคํƒฌํƒญํƒฏํƒฐํƒฑํƒธํ„ํ„ฐํ„ฑํ„ดํ„ธํ„บํ…€ํ…ํ…ƒํ…„ํ……ํ…Œํ…ํ…ํ…”ํ…œํ…ํ…Ÿํ…กํ…จํ…ฌํ…ผํ†„ํ†ˆํ† ํ†กํ†คํ†จํ†ฐํ†ฑํ†ณํ†ตํ†บํ†ผํ‡€ํ‡˜ํ‡ดํ‡ธํˆ‡ํˆ‰ํˆํˆฌํˆญํˆฐํˆดํˆผํˆฝํˆฟํ‰ํ‰ˆํ‰œ๏ฟฝ".split("");for(j=0;j!=D[197].length;++j)if(D[197][j].charCodeAt(0)!==65533){e[D[197][j]]=50432+j;d[50432+j]=D[197][j]}D[198]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํžํžŽํžํž‘ํž’ํž“ํž”ํž•ํž–ํž—ํžšํžœํžžํžŸํž ํžกํžขํžฃ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ‰คํŠ€ํŠํŠ„ํŠˆํŠํŠ‘ํŠ•ํŠœํŠ ํŠคํŠฌํŠฑํŠธํŠนํŠผํŠฟํ‹€ํ‹‚ํ‹ˆํ‹‰ํ‹‹ํ‹”ํ‹˜ํ‹œํ‹คํ‹ฅํ‹ฐํ‹ฑํ‹ดํ‹ธํŒ€ํŒํŒƒํŒ…ํŒŒํŒํŒŽํŒํŒ”ํŒ–ํŒœํŒํŒŸํŒ ํŒกํŒฅํŒจํŒฉํŒฌํŒฐํŒธํŒนํŒปํŒผํŒฝํ„ํ…ํผํฝํŽ€ํŽ„ํŽŒํŽํŽํŽํŽ‘ํŽ˜ํŽ™ํŽœํŽ ํŽจํŽฉํŽซํŽญํŽดํŽธํŽผํ„ํ…ํˆํ‰ํํ˜ํกํฃํฌํญํฐํดํผํฝํฟํ๏ฟฝ".split("");for(j=0;j!=D[198].length;++j)if(D[198][j].charCodeAt(0)!==65533){e[D[198][j]]=50688+j;d[50688+j]=D[198][j]}D[199]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํˆํํ‘€ํ‘„ํ‘œํ‘ ํ‘คํ‘ญํ‘ฏํ‘ธํ‘นํ‘ผํ‘ฟํ’€ํ’‚ํ’ˆํ’‰ํ’‹ํ’ํ’”ํ’ฉํ“Œํ“ํ“”ํ“œํ“Ÿํ“จํ“ฌํ“ฐํ“ธํ“ปํ“ฝํ”„ํ”ˆํ”Œํ””ํ”•ํ”—ํ”ผํ”ฝํ•€ํ•„ํ•Œํ•ํ•ํ•‘ํ•˜ํ•™ํ•œํ• ํ•ฅํ•จํ•ฉํ•ซํ•ญํ•ดํ•ตํ•ธํ•ผํ–„ํ–…ํ–‡ํ–ˆํ–‰ํ–ํ–ฅํ—ˆํ—‰ํ—Œํ—ํ—’ํ—˜ํ—™ํ—›ํ—ํ—คํ—ฅํ—จํ—ฌํ—ดํ—ตํ—ทํ—นํ˜€ํ˜ํ˜„ํ˜ˆํ˜ํ˜‘ํ˜“ํ˜”ํ˜•ํ˜œํ˜ ๏ฟฝ".split("");for(j=0;j!=D[199].length;++j)if(D[199][j].charCodeAt(0)!==65533){e[D[199][j]]=50944+j;d[50944+j]=D[199][j]}D[200]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝํ˜คํ˜ญํ˜ธํ˜นํ˜ผํ™€ํ™…ํ™ˆํ™‰ํ™‹ํ™ํ™‘ํ™”ํ™•ํ™˜ํ™œํ™งํ™ฉํ™ฐํ™ฑํ™ดํšƒํš…ํšŒํšํšํš”ํšํšŸํšกํšจํšฌํšฐํšนํšปํ›„ํ›…ํ›ˆํ›Œํ›‘ํ›”ํ›—ํ›™ํ› ํ›คํ›จํ›ฐํ›ตํ›ผํ›ฝํœ€ํœ„ํœ‘ํœ˜ํœ™ํœœํœ ํœจํœฉํœซํœญํœดํœตํœธํœผํ„ํ‡ํ‰ํํ‘ํ”ํ–ํ—ํ˜ํ™ํ ํกํฃํฅํฉํฌํฐํดํผํฝํžํžˆํž‰ํžŒํžํž˜ํž™ํž›ํž๏ฟฝ".split("");for(j=0;j!=D[200].length;++j)if(D[200][j].charCodeAt(0)!==65533){e[D[200][j]]=51200+j;d[51200+j]=D[200][j]}D[202]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไผฝไฝณๅ‡ๅƒนๅŠ ๅฏๅ‘ตๅ“ฅๅ˜‰ๅซๅฎถๆš‡ๆžถๆžทๆŸฏๆญŒ็‚็—‚็จผ่‹›่Œ„่ก—่ขˆ่จถ่ณˆ่ท่ปป่ฟฆ้ง•ๅˆปๅดๅ„ๆชๆ…คๆฎผ็่„š่ฆบ่ง’้–ฃไพƒๅˆŠๅขพๅฅธๅงฆๅนฒๅนนๆ‡‡ๆ€ๆ†ๆŸฌๆกฟๆพ—็™Ž็œ‹็ฃต็จˆ็ซฟ็ฐก่‚่‰ฎ่‰ฑ่ซซ้–“ไนซๅ–ๆ›ทๆธด็ขฃ็ซญ่‘›่ค่Ž้žจๅ‹˜ๅŽๅ ชๅตŒๆ„Ÿๆ†พๆˆกๆ•ขๆŸ‘ๆฉ„ๆธ›็”˜็–ณ็›ฃ็žฐ็ดบ้‚ฏ้‘‘้‘’้พ•๏ฟฝ".split("");for(j=0;j!=D[202].length;++j)if(D[202][j].charCodeAt(0)!==65533){e[D[202][j]]=51712+j;d[51712+j]=D[202][j]}D[203]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅŒฃๅฒฌ็”ฒ่ƒ›้‰€้–˜ๅ‰›ๅ ˆๅงœๅฒกๅด—ๅบทๅผบๅฝŠๆ…ทๆฑŸ็•บ็–†็ณ ็ตณ็ถฑ็พŒ่…”่ˆก่–‘่ฅ่ฌ›้‹ผ้™้ฑ‡ไป‹ไปทๅ€‹ๅ‡ฑๅกๆ„ทๆ„พๆ…จๆ”นๆงชๆผ‘็–ฅ็š†็›–็ฎ‡่Šฅ่“‹๏ค€้Žง้–‹ๅ–€ๅฎขๅ‘๏ค็ฒณ็พน้†ตๅ€จๅŽปๅฑ…ๅทจๆ‹’ๆฎๆ“šๆ“งๆธ ็‚ฌ็ฅ›่ท่ธž๏ค‚้ฝ้‰…้‹ธไนพไปถๅฅๅทพๅปบๆ„†ๆฅ—่…ฑ่™”่น‡้ต้จซไนžๅ‚‘ๆฐๆก€ๅ„‰ๅŠๅŠ’ๆชข๏ฟฝ".split("");for(j=0;j!=D[203].length;++j)if(D[203][j].charCodeAt(0)!==65533){e[D[203][j]]=51968+j;d[51968+j]=D[203][j]}D[204]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็žผ้ˆ้ป”ๅŠซๆ€ฏ่ฟฒๅˆๆ†ฉๆญๆ“Šๆ ผๆช„ๆฟ€่†ˆ่ฆก้š”ๅ …็‰ฝ็Šฌ็”„็ตน็นญ่‚ฉ่ฆ‹่ญด้ฃ้ต‘ๆŠ‰ๆฑบๆฝ”็ต็ผบ่จฃๅ…ผๆ…Š็ฎ่ฌ™้‰—้ŽŒไบฌไฟ“ๅ€žๅ‚พๅ„†ๅ‹ๅ‹ๅฟๅฐๅขƒๅบšๅพ‘ๆ…ถๆ†ฌๆ“Žๆ•ฌๆ™ฏๆšปๆ›ดๆข—ๆถ‡็‚…็ƒฑ็’Ÿ็’ฅ็“Š็—™็กฌ็ฃฌ็ซŸ็ซถ็ต…็ถ“่€•่€ฟ่„›่Ž–่ญฆ่ผ•้€•้ก้ ƒ้ ธ้ฉš้ฏจไฟ‚ๅ•“ๅ บๅฅ‘ๅญฃๅฑ†ๆ‚ธๆˆ’ๆก‚ๆขฐ๏ฟฝ".split("");for(j=0;j!=D[204].length;++j)if(D[204][j].charCodeAt(0)!==65533){e[D[204][j]]=52224+j;d[52224+j]=D[204][j]}D[205]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฃจๆบช็•Œ็™ธ็ฃŽ็จฝ็ณป็นซ็นผ่จˆ่ชก่ฐฟ้šŽ้ท„ๅคๅฉๅ‘Šๅ‘ฑๅ›บๅง‘ๅญคๅฐปๅบซๆ‹ทๆ”ทๆ•…ๆ•ฒๆš ๆžฏๆงๆฒฝ็—ผ็š็พ็จฟ็พ”่€ƒ่‚ก่†่‹ฆ่‹ฝ่ฐ่—่ ฑ่ขด่ชฅ๏คƒ่พœ้Œฎ้›‡้กง้ซ˜้ผ“ๅ“ญๆ–›ๆ›ฒๆข็ฉ€่ฐท้ต ๅ›ฐๅคๅด‘ๆ˜†ๆขฑๆฃๆปพ็จ่ขž้ฏคๆฑจ๏ค„้ชจไพ›ๅ…ฌๅ…ฑๅŠŸๅญ”ๅทฅๆๆญๆ‹ฑๆŽงๆ”ป็™็ฉบ่šฃ่ฒข้žไธฒๅฏกๆˆˆๆžœ็“œ๏ฟฝ".split("");for(j=0;j!=D[205].length;++j)if(D[205][j].charCodeAt(0)!==65533){e[D[205][j]]=52480+j;d[52480+j]=D[205][j]}D[206]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ง‘่“่ช‡่ชฒ่ทจ้Ž้‹้ก†ๅป“ๆงจ่—ฟ้ƒญ๏ค…ๅ† ๅฎ˜ๅฏฌๆ…ฃๆฃบๆฌพ็Œ็ฏ็“˜็ฎก็ฝ่…่ง€่ฒซ้—œ้คจๅˆฎๆๆ‹ฌ้€‚ไพŠๅ…‰ๅŒกๅฃ™ๅปฃๆ› ๆดธ็‚š็‹‚็–็ญ่ƒฑ้‘›ๅฆๆŽ›็ฝซไน–ๅ‚€ๅกŠๅฃžๆ€ชๆ„งๆ‹ๆง้ญๅฎ็ด˜่‚ฑ่ฝŸไบคๅƒ‘ๅ’ฌๅ–ฌๅฌŒๅถ ๅทงๆ”ชๆ•Žๆ กๆฉ‹็‹ก็šŽ็Ÿฏ็ตž็ฟน่† ่•Ž่›Ÿ่ผƒ่ฝŽ้ƒŠ้คƒ้ฉ•้ฎซไธ˜ไน…ไนไป‡ไฟฑๅ…ทๅ‹พ๏ฟฝ".split("");for(j=0;j!=D[206].length;++j)if(D[206][j].charCodeAt(0)!==65533){e[D[206][j]]=52736+j;d[52736+j]=D[206][j]}D[207]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ€ๅฃๅฅๅ’Žๅ˜”ๅตๅžขๅฏ‡ๅถ‡ๅปๆ‡ผๆ‹˜ๆ•‘ๆžธๆŸฉๆง‹ๆญๆฏ†ๆฏฌๆฑ‚ๆบ็ธ็‹—็Ž–็ƒ็žฟ็Ÿฉ็ฉถ็ตฟ่€‰่‡ผ่ˆ…่ˆŠ่‹Ÿ่กข่ฌณ่ณผ่ป€้€‘้‚ฑ้‰ค้Šถ้ง’้ฉ…้ณฉ้ท—้พœๅœ‹ๅฑ€่Š้ž ้žซ้บดๅ›็ช˜็พค่ฃ™่ป้ƒกๅ €ๅฑˆๆŽ˜็ชŸๅฎฎๅผ“็ฉน็ชฎ่ŠŽ่บฌๅ€ฆๅˆธๅ‹ธๅทๅœˆๆ‹ณๆฒๆฌŠๆทƒ็œทๅŽฅ็—่•จ่นถ้—•ๆœบๆซƒๆฝฐ่ฉญ่ปŒ้ฅ‹๏ค†ๆ™ทๆญธ่ฒด๏ฟฝ".split("");for(j=0;j!=D[207].length;++j)if(D[207][j].charCodeAt(0)!==65533){e[D[207][j]]=52992+j;d[52992+j]=D[207][j]}D[208]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฌผ๏ค‡ๅซๅœญๅฅŽๆ†ๆงป็ช็ก…็ชบ็ซ…็ณพ่‘ต่ฆ่ตณ้€ต้–จๅ‹ปๅ‡็•‡็ญ ่Œ้ˆž๏คˆๆฉ˜ๅ…‹ๅ‰‹ๅŠ‡ๆˆŸๆฃ˜ๆฅต้š™ๅƒ…ๅŠคๅ‹คๆ‡ƒๆ–คๆ นๆงฟ็‘พ็ญ‹่Šน่ซ่ฆฒ่ฌน่ฟ‘้ฅ‰๏ค‰ไปŠๅฆ—ๆ“’ๆ˜‘ๆชŽ็ด็ฆ็ฆฝ่Šฉ่กพ่กฟ่ฅŸ๏คŠ้Œฆไผ‹ๅŠๆ€ฅๆ‰ฑๆฑฒ็ดš็ตฆไบ˜ๅ…ข็Ÿœ่‚ฏไผไผŽๅ…ถๅ†€ๅ—œๅ™จๅœปๅŸบๅŸผๅค”ๅฅ‡ๅฆ“ๅฏ„ๅฒๅดŽๅทฑๅนพๅฟŒๆŠ€ๆ——ๆ—ฃ๏ฟฝ".split("");for(j=0;j!=D[208].length;++j)if(D[208][j].charCodeAt(0)!==65533){e[D[208][j]]=53248+j;d[53248+j]=D[208][j]}D[209]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆœžๆœŸๆžๆฃ‹ๆฃ„ๆฉŸๆฌบๆฐฃๆฑฝๆฒ‚ๆท‡็Ž˜็ฆ็ช็’‚็’ฃ็•ธ็•ฟ็ข็ฃฏ็ฅ็ฅ‡็ฅˆ็ฅบ็ฎ•็ด€็ถบ็พˆ่€†่€ญ่‚Œ่จ˜่ญ่ฑˆ่ตท้Œก้Œค้ฃข้ฅ‘้จŽ้จ้ฉฅ้บ’็ทŠไฝถๅ‰ๆ‹ฎๆก”้‡‘ๅ–ซๅ„บ๏ค‹๏คŒๅจœๆ‡ฆ๏คๆ‹ๆ‹ฟ๏คŽ๏ค๏ค๏ค‘๏ค’๏ค“้‚ฃ๏ค”๏ค•๏ค–๏ค—๏ค˜่ซพ๏ค™๏คš๏ค›๏คœๆš–๏ค็…–๏คž๏คŸ้›ฃ๏ค ๆๆบๅ—๏คกๆžๆฅ ๆนณ๏คข็”ท๏คฃ๏คค๏คฅ๏ฟฝ".split("");for(j=0;j!=D[209].length;++j)if(D[209][j].charCodeAt(0)!==65533){e[D[209][j]]=53504+j;d[53504+j]=D[209][j]}D[210]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ด๏คฆ๏คง่กฒๅ›Šๅจ˜๏คจ๏คฉ๏คช๏คซ๏คฌไนƒ๏คญๅ…งๅฅˆๆŸฐ่€๏คฎๅฅณๅนดๆ’š็งŠๅฟตๆฌๆ‹ˆๆปๅฏงๅฏ—ๅŠช๏คฏๅฅดๅผฉๆ€’๏คฐ๏คฑ๏คฒ็‘™๏คณ๏คด๏คต๏คถ๏คท๏คธ้ง‘๏คน๏คบ๏คป๏คผ๏คฝ๏คพ๏คฟ๏ฅ€๏ฅ๏ฅ‚๏ฅƒๆฟƒ๏ฅ„๏ฅ…่†ฟ่พฒๆƒฑ๏ฅ†๏ฅ‡่…ฆ๏ฅˆ๏ฅ‰ๅฐฟ๏ฅŠ๏ฅ‹๏ฅŒ๏ฅ๏ฅŽ๏ฅ๏ฅ๏ฅ‘ๅซฉ่จฅๆป็ด๏ฅ’๏ฅ“๏ฅ”๏ฅ•๏ฅ–๏ฅ—่ƒฝ๏ฅ˜๏ฅ™ๅฐผๆณฅๅŒฟๆบบๅคš่Œถ๏ฟฝ".split("");for(j=0;j!=D[210].length;++j)if(D[210][j].charCodeAt(0)!==65533){e[D[210][j]]=53760+j;d[53760+j]=D[210][j]}D[211]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไธนไบถไฝ†ๅ–ฎๅœ˜ๅฃ‡ๅฝ–ๆ–ทๆ—ฆๆช€ๆฎตๆน็Ÿญ็ซฏ็ฐž็ทž่›‹่ข’้„ฒ้›ๆ’ปๆพพ็บ็–ธ้”ๅ•–ๅๆ†บๆ“”ๆ›‡ๆทกๆน›ๆฝญๆพน็—ฐ่ƒ่†ฝ่•่ฆƒ่ซ‡่ญš้ŒŸๆฒ“็•“็ญ”่ธ้ๅ”ๅ ‚ๅก˜ๅนขๆˆ‡ๆ’žๆฃ ็•ถ็ณ–่žณ้ปจไปฃๅžˆๅฎๅคงๅฐๅฒฑๅธถๅพ…ๆˆดๆ“ก็Žณ่‡บ่ข‹่ฒธ้šŠ้ป›ๅฎ…ๅพทๆ‚ณๅ€’ๅˆ€ๅˆฐๅœ–ๅ ตๅก—ๅฐŽๅฑ ๅณถๅถ‹ๅบฆๅพ’ๆ‚ผๆŒ‘ๆŽ‰ๆ—ๆกƒ๏ฟฝ".split("");for(j=0;j!=D[211].length;++j)if(D[211][j].charCodeAt(0)!==65533){e[D[211][j]]=54016+j;d[54016+j]=D[211][j]}D[212]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฃนๆซ‚ๆท˜ๆธกๆป”ๆฟค็‡พ็›œ็น็ฆฑ็จป่„่ฆฉ่ณญ่ทณ่นˆ้€ƒ้€”้“้ƒฝ้้™ถ้Ÿœๆฏ’็€†็‰˜็Šข็จ็ฃ็ฆฟ็ฏค็บ›่ฎ€ๅขฉๆƒ‡ๆ•ฆๆ—ฝๆšพๆฒŒ็„ž็‡‰่ฑš้ “ไนญ็ชไปๅ†ฌๅ‡ๅ‹•ๅŒๆ†งๆฑๆกๆฃŸๆดžๆฝผ็–ผ็žณ็ซฅ่ƒด่‘ฃ้Š…ๅ…œๆ–—ๆœๆž“็—˜็ซ‡่ณ๏ฅš่ฑ†้€—้ ญๅฑฏ่‡€่Šš้้ฏ้ˆๅพ—ๅถๆฉ™็‡ˆ็™ป็ญ‰่—ค่ฌ„้„ง้จฐๅ–‡ๆ‡ถ๏ฅ›็™ฉ็พ…๏ฟฝ".split("");for(j=0;j!=D[212].length;++j)if(D[212][j].charCodeAt(0)!==65533){e[D[212][j]]=54272+j;d[54272+j]=D[212][j]}D[213]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่˜ฟ่žบ่ฃธ้‚๏ฅœๆด›็ƒ™็ž็ตก่ฝ๏ฅ้…ช้งฑ๏ฅžไบ‚ๅตๆฌ„ๆฌ’็€พ็ˆ›่˜ญ้ธžๅ‰Œ่พฃๅตๆ“ฅๆ”ฌๆฌ–ๆฟซ็ฑƒ็บœ่—่ฅค่ฆฝๆ‹‰่‡˜่ ŸๅปŠๆœ—ๆตช็‹ผ็…็‘ฏ่ž‚้ƒžไพ†ๅดๅพ ่Šๅ†ทๆŽ ็•ฅไบฎๅ€†ๅ…ฉๅ‡‰ๆขๆจ‘็ฒฎ็ฒฑ็ณง่‰ฏ่ซ’่ผ›้‡ไพถๅ„ทๅ‹ตๅ‘‚ๅปฌๆ…ฎๆˆพๆ—…ๆซšๆฟพ็คช่—œ่ ฃ้–ญ้ฉข้ฉช้บ—้ปŽๅŠ›ๆ›†ๆญท็€็คซ่ฝข้‚ๆ†ๆˆ€ๆ”ฃๆผฃ๏ฟฝ".split("");for(j=0;j!=D[213].length;++j)if(D[213][j].charCodeAt(0)!==65533){e[D[213][j]]=54528+j;d[54528+j]=D[213][j]}D[214]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็…‰็’‰็ทด่ฏ่“ฎ่ผฆ้€ฃ้Šๅ†ฝๅˆ—ๅŠฃๆดŒ็ƒˆ่ฃ‚ๅป‰ๆ–‚ๆฎฎๆฟ‚็ฐพ็ตไปคไผถๅ›น๏ฅŸๅฒบๅถบๆ€œ็Žฒ็ฌญ็พš็ฟŽ่†้€ž้ˆด้›ถ้ˆ้ ˜้ฝกไพ‹ๆพง็ฆฎ้†ด้šทๅ‹ž๏ฅ ๆ’ˆๆ“„ๆซ“ๆฝž็€˜็ˆ็›ง่€่˜†่™œ่ทฏ่ผ…้œฒ้ญฏ้ทบ้นต็ขŒ็ฅฟ็ถ ่‰้Œ„้นฟ้บ“่ซ–ๅฃŸๅผ„ๆœง็€ง็“็ฑ ่พๅ„ก็€จ็‰ข็ฃŠ่ณ‚่ณš่ณด้›ทไบ†ๅƒšๅฏฎๅป–ๆ–™็‡Ž็™‚็žญ่Š่“ผ๏ฟฝ".split("");for(j=0;j!=D[214].length;++j)if(D[214][j].charCodeAt(0)!==65533){e[D[214][j]]=54784+j;d[54784+j]=D[214][j]}D[215]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ผ้ฌง้พๅฃ˜ๅฉๅฑขๆจ“ๆทšๆผ็˜ป็ดฏ็ธท่”ž่คธ้ค้™‹ๅŠ‰ๆ—’ๆŸณๆฆดๆตๆบœ็€็‰็‘ ็•™็˜ค็กซ่ฌฌ้กžๅ…ญๆˆฎ้™ธไพ–ๅ€ซๅด™ๆทช็ถธ่ผชๅพ‹ๆ…„ๆ —๏ฅก้š†ๅ‹’่‚‹ๅ‡œๅ‡Œๆฅž็จœ็ถพ่ฑ้™ตไฟšๅˆฉๅŽ˜ๅๅ”Žๅฑฅๆ‚งๆŽๆขจๆตฌ็Š็‹ธ็†็’ƒ๏ฅข็—ข็ฑฌ็ฝน็พธ่Ž‰่ฃ่ฃก้‡Œ้‡้›ข้ฏ‰ๅๆฝพ็‡็’˜่—บ่บช้šฃ้ฑ—้บŸๆž—ๆท‹็ณ่‡จ้œ–็ ฌ๏ฟฝ".split("");for(j=0;j!=D[215].length;++j)if(D[215][j].charCodeAt(0)!==65533){e[D[215][j]]=55040+j;d[55040+j]=D[215][j]}D[216]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ซ‹็ฌ ็ฒ’ๆ‘ฉ็‘ช็—ฒ็ขผ็ฃจ้ฆฌ้ญ”้บปๅฏžๅน•ๆผ ่†œ่Žซ้‚ˆไธ‡ๅๅจฉๅท’ๅฝŽๆ…ขๆŒฝๆ™ฉๆ›ผๆปฟๆผซ็ฃ็žž่ฌ่”“่ ป่ผ“้ฅ…้ฐปๅ”œๆŠนๆœซๆฒซ่Œ‰่ฅช้บไบกๅฆ„ๅฟ˜ๅฟ™ๆœ›็ถฒ็ฝ”่Š’่Œซ่Žฝ่ผž้‚™ๅŸ‹ๅฆนๅช’ๅฏๆ˜งๆžšๆข…ๆฏ็…ค็ฝต่ฒท่ณฃ้‚้ญ…่„ˆ่ฒŠ้™Œ้ฉ€้บฅๅญŸๆฐ“็Œ›็›ฒ็›Ÿ่Œๅ†ช่ฆ“ๅ…ๅ†•ๅ‹‰ๆฃ‰ๆฒ”็œ„็œ ็ถฟ็ทฌ้ข้บตๆป…๏ฟฝ".split("");for(j=0;j!=D[216].length;++j)if(D[216][j].charCodeAt(0)!==65533){e[D[216][j]]=55296+j;d[55296+j]=D[216][j]}D[217]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่”‘ๅ†ฅๅๅ‘ฝๆ˜ŽๆšๆคงๆบŸ็šฟ็ž‘่Œ—่“‚่žŸ้…ฉ้Š˜้ณด่ข‚ไพฎๅ†’ๅ‹Ÿๅง†ๅธฝๆ…•ๆ‘ธๆ‘นๆšฎๆŸๆจกๆฏๆฏ›็‰Ÿ็‰ก็‘็œธ็Ÿ›่€—่Šผ่Œ…่ฌ€่ฌจ่ฒŒๆœจๆฒ็‰ง็›ฎ็ฆ็ฉ†้ถฉๆญฟๆฒ’ๅคขๆœฆ่’™ๅฏๅข“ๅฆ™ๅปŸๆๆ˜ดๆณๆธบ็Œซ็ซ—่‹—้Œจๅ‹™ๅทซๆ†ฎๆ‡‹ๆˆŠๆ‹‡ๆ’ซๆ— ๆฅ™ๆญฆๆฏ‹็„ก็ท็•็น†่ˆž่Œ‚่•ช่ชฃ่ฒฟ้œง้ตกๅขจ้ป˜ๅ€‘ๅˆŽๅปๅ•ๆ–‡๏ฟฝ".split("");for(j=0;j!=D[217].length;++j)if(D[217][j].charCodeAt(0)!==65533){e[D[217][j]]=55552+j;d[55552+j]=D[217][j]}D[218]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฑถ็ดŠ็ด‹่ž่šŠ้–€้›ฏๅ‹ฟๆฒ•็‰ฉๅ‘ณๅชšๅฐพๅต‹ๅฝŒๅพฎๆœชๆขถๆฅฃๆธผๆน„็œ‰็ฑณ็พŽ่–‡่ฌŽ่ฟท้ก้ปดๅฒทๆ‚ถๆ„ๆ†ซๆ•ๆ—ปๆ—ผๆฐ‘ๆณฏ็ŽŸ็‰็ทก้–”ๅฏ†่œœ่ฌๅ‰ๅšๆ‹ๆๆ’ฒๆœดๆจธๆณŠ็€็’ž็ฎ”็ฒ•็ธ›่†Š่ˆถ่–„่ฟซ้›น้งไผดๅŠๅๅ›ๆ‹Œๆฌๆ”€ๆ–‘ๆงƒๆณฎๆฝ˜็ญ็•”็˜ข็›ค็›ผ็ฃ็ฃป็คฌ็ต†่ˆฌ่Ÿ ่ฟ”้ ’้ฃฏๅ‹ƒๆ‹”ๆ’ฅๆธคๆฝ‘๏ฟฝ".split("");for(j=0;j!=D[218].length;++j)if(D[218][j].charCodeAt(0)!==65533){e[D[218][j]]=55808+j;d[55808+j]=D[218][j]}D[219]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็™ผ่ท‹้†ฑ้‰ข้ซฎ้ญƒๅ€ฃๅ‚ๅŠๅฆจๅฐจๅน‡ๅฝทๆˆฟๆ”พๆ–นๆ—ๆ˜‰ๆž‹ๆฆœๆป‚็ฃ…็ดก่‚ช่†€่ˆซ่Šณ่’ก่šŒ่จช่ฌ—้‚ฆ้˜ฒ้พๅ€ไฟณ๏ฅฃๅŸนๅพ˜ๆ‹œๆŽ’ๆฏๆนƒ็„™็›ƒ่ƒŒ่ƒš่ฃด่ฃต่ค™่ณ ่ผฉ้…้™ชไผฏไฝฐๅธ›ๆŸๆ ข็™ฝ็™พ้ญ„ๅนกๆจŠ็…ฉ็‡”็•ช๏ฅค็น่•ƒ่—ฉ้ฃœไผ็ญ็ฝฐ้–ฅๅ‡กๅธ†ๆขตๆฐพๆฑŽๆณ›็Šฏ็ฏ„่Œƒๆณ•็บๅƒปๅŠˆๅฃๆ“˜ๆช—็’ง็™–๏ฟฝ".split("");for(j=0;j!=D[219].length;++j)if(D[219][j].charCodeAt(0)!==65533){e[D[219][j]]=56064+j;d[56064+j]=D[219][j]}D[220]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ขง่˜—้—ข้œน๏ฅฅๅžๅผ่ฎŠ่พจ่พฏ้‚Šๅˆฅ็žฅ้ฑ‰้ผˆไธ™ๅ€‚ๅ…ตๅฑ›ๅนทๆ˜žๆ˜บๆŸ„ๆฃ…็‚ณ็”็—…็ง‰็ซ่ผง้ค ้จˆไฟๅ กๅ ฑๅฏถๆ™ฎๆญฅๆด‘ๆนบๆฝฝ็ค็”ซ่ฉ่ฃœ่ค“่ญœ่ผ”ไผๅƒ•ๅŒๅœๅฎ“ๅพฉๆœ็ฆ่…น่Œฏ่””่ค‡่ฆ†่ผน่ผป้ฆฅ้ฐ’ๆœฌไนถไฟธๅฅ‰ๅฐๅณฏๅณฐๆงๆฃ’็ƒฝ็†ข็ซ็ธซ่“ฌ่œ‚้€ข้‹’้ณณไธไป˜ไฟฏๅ‚…ๅ‰–ๅ‰ฏๅฆๅ’ๅŸ ๅคซๅฉฆ๏ฟฝ".split("");for(j=0;j!=D[220].length;++j)if(D[220][j].charCodeAt(0)!==65533){e[D[220][j]]=56320+j;d[56320+j]=D[220][j]}D[221]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅญšๅญตๅฏŒๅบœ๏ฅฆๆ‰ถๆ•ทๆ–งๆตฎๆบฅ็ˆถ็ฌฆ็ฐฟ็ผถ่…่…‘่†š่‰€่Š™่Žฉ่จƒ่ฒ ่ณฆ่ณป่ตด่ถบ้ƒจ้‡œ้˜œ้™„้ง™้ณงๅŒ—ๅˆ†ๅฉๅ™ดๅขณๅฅ”ๅฅฎๅฟฟๆ†คๆ‰ฎๆ˜ๆฑพ็„š็›†็ฒ‰็ณž็ด›่Šฌ่ณ้›ฐ๏ฅงไฝ›ๅผ—ๅฝฟๆ‹‚ๅดฉๆœ‹ๆฃš็กผ็นƒ้ตฌไธ•ๅ‚™ๅŒ•ๅŒชๅ‘ๅฆƒๅฉขๅบ‡ๆ‚ฒๆ†Šๆ‰‰ๆ‰นๆ–ๆž‡ๆฆงๆฏ”ๆฏ–ๆฏ—ๆฏ˜ๆฒธ๏ฅจ็ต็—บ็ ’็ข‘็ง•็ง˜็ฒƒ็ท‹็ฟก่‚ฅ๏ฟฝ".split("");for(j=0;j!=D[221].length;++j)if(D[221][j].charCodeAt(0)!==65533){e[D[221][j]]=56576+j;d[56576+j]=D[221][j]}D[222]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่„พ่‡‚่ฒ่œš่ฃจ่ชน่ญฌ่ฒป้„™้ž้ฃ›้ผปๅšฌๅฌชๅฝฌๆ–Œๆชณๆฎฏๆตœๆฟฑ็€•็‰็Žญ่ฒง่ณ“้ ปๆ†‘ๆฐท่˜้จไนไบ‹ไบ›ไป•ไผบไผผไฝฟไฟŸๅƒฟๅฒๅธๅ”†ๅ—ฃๅ››ๅฃซๅฅขๅจ‘ๅฏซๅฏบๅฐ„ๅทณๅธซๅพ™ๆ€ๆจๆ–œๆ–ฏๆŸถๆŸปๆขญๆญปๆฒ™ๆณ—ๆธฃ็€‰็…็ ‚็คพ็ฅ€็ฅ ็ง็ฏฉ็ด—็ตฒ่‚†่ˆ่ŽŽ่“‘่›‡่ฃŸ่ฉ่ฉž่ฌ่ณœ่ตฆ่พญ้‚ช้ฃผ้งŸ้บๅ‰Š๏ฅฉๆœ”๏ฅช๏ฟฝ".split("");for(j=0;j!=D[222].length;++j)if(D[222][j].charCodeAt(0)!==65533){e[D[222][j]]=56832+j;d[56832+j]=D[222][j]}D[223]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ‚˜ๅˆชๅฑฑๆ•ฃๆฑ•็Š็”ฃ็–็ฎ—่’œ้…ธ้œฐไนทๆ’’ๆฎบ็…ž่–ฉไธ‰๏ฅซๆ‰ๆฃฎๆธ—่ŠŸ่”˜่กซๆทๆพ้ˆ’้ขฏไธŠๅ‚ทๅƒๅ„Ÿๅ•†ๅ–ชๅ˜—ๅญ€ๅฐ™ๅณ ๅธธๅบŠๅบ ๅป‚ๆƒณๆก‘ๆฉกๆน˜็ˆฝ็‰€็‹€็›ธ็ฅฅ็ฎฑ็ฟ”่ฃณ่งด่ฉณ่ฑก่ณž้œœๅกž็’ฝ่ณฝๅ—‡๏ฅฌ็ฉก็ดข่‰ฒ็‰ฒ็”Ÿ็”ฅ๏ฅญ็ฌ™ๅข…ๅฃปๅถผๅบๅบถๅพๆ•ๆŠ’ๆฟๆ•ๆš‘ๆ›™ๆ›ธๆ –ๆฃฒ็Š€็‘ž็ญฎ็ตฎ็ท–็ฝฒ๏ฟฝ".split("");for(j=0;j!=D[223].length;++j)if(D[223][j].charCodeAt(0)!==65533){e[D[223][j]]=57088+j;d[57088+j]=D[223][j]}D[224]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ƒฅ่ˆ’่–ฏ่ฅฟ่ช“้€้‹ค้ป้ผ ๅค•ๅฅญๅธญๆƒœๆ˜”ๆ™ณๆžๆฑๆท…ๆฝŸ็Ÿณ็ขฉ่“†้‡‹้Œซไป™ๅƒŠๅ…ˆๅ–„ๅฌ‹ๅฎฃๆ‰‡ๆ•พๆ—‹ๆธฒ็…ฝ็็‘„็’‡็’ฟ็™ฌ็ฆช็ทš็น•็พจ่…บ่†ณ่ˆน่˜š่Ÿฌ่ฉต่ทฃ้ธ้Š‘้ฅ้ฅ้ฎฎๅจๅฑ‘ๆฅ”ๆณ„ๆดฉๆธซ่ˆŒ่–›่คป่จญ่ชช้›ช้ฝงๅ‰กๆšนๆฎฒ็บ–่Ÿพ่ด้–ƒ้™ๆ”ๆถ‰็‡ฎ๏ฅฎๅŸŽๅง“ๅฎฌๆ€งๆƒบๆˆๆ˜Ÿๆ™Ÿ็Œฉ็น็››็œ็ญฌ๏ฟฝ".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่–่ฒ่…ฅ่ช ้†’ไธ–ๅ‹ขๆญฒๆด—็จ…็ฌน็ดฐ๏ฅฏ่ฒฐๅฌๅ˜ฏๅก‘ๅฎตๅฐๅฐ‘ๅทขๆ‰€ๆŽƒๆ”ๆ˜ญๆขณๆฒผๆถˆๆบฏ็€Ÿ็‚ค็‡’็”ฆ็–็–Ž็˜™็ฌ‘็ฏ ็ฐซ็ด ็ดน่”ฌ่•ญ่˜‡่จด้€้ก้‚ต้Šท้Ÿถ้จทไฟ—ๅฑฌๆŸๆถ‘็ฒŸ็บŒ่ฌ–่ด–้€Ÿๅญซๅทฝๆ่“€้œ้ฃก็Ž‡ๅฎ‹ๆ‚šๆพๆทž่จŸ่ชฆ้€้ Œๅˆท๏ฅฐ็‘็ขŽ้Ž–่กฐ้‡—ไฟฎๅ—ๅ—ฝๅ›šๅž‚ๅฃฝๅซ‚ๅฎˆๅฒซๅณ€ๅธฅๆ„๏ฟฝ".split("");for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆˆๆ‰‹ๆŽˆๆœๆ”ถๆ•ธๆจนๆฎŠๆฐดๆด™ๆผฑ็‡ง็‹ฉ็ธ็‡็’ฒ็˜ฆ็ก็ง€็ฉ—็ซช็ฒน็ถ็ถฌ็นก็พž่„ฉ่Œฑ่’่“š่—ช่ข–่ชฐ่ฎ่ผธ้‚้‚ƒ้…ฌ้Š–้Šน้š‹้šง้šจ้›–้œ€้ ˆ้ฆ–้ซ“้ฌšๅ”ๅกพๅค™ๅญฐๅฎฟๆท‘ๆฝš็†Ÿ็ก็’น่‚…่ฝๅทกๅพ‡ๅพชๆ‚ๆ—ฌๆ ’ๆฅฏๆฉ“ๆฎ‰ๆดตๆทณ็ฃ็›พ็žฌ็ญ็ด”่„ฃ่ˆœ่€่“ด่•ฃ่ฉข่ซ„้†‡้Œž้ †้ฆดๆˆŒ่ก“่ฟฐ้‰ฅๅด‡ๅดง๏ฟฝ".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅตฉ็‘Ÿ่†่จๆฟ•ๆ‹พ็ฟ’่คถ่ฅฒไธžไน˜ๅƒงๅ‹ๅ‡ๆ‰ฟๆ˜‡็นฉ่ …้™žไพๅŒ™ๅ˜ถๅง‹ๅชคๅฐธๅฑŽๅฑๅธ‚ๅผ‘ๆƒๆ–ฝๆ˜ฏๆ™‚ๆžพๆŸด็Œœ็Ÿข็คบ็ฟ…่’”่“่ฆ–่ฉฆ่ฉฉ่ซก่ฑ•่ฑบๅŸดๅฏ”ๅผๆฏๆ‹ญๆคๆฎ–ๆนœ็†„็ฏ’่•่ญ˜่ปพ้ฃŸ้ฃพไผธไพไฟกๅ‘ปๅจ ๅฎธๆ„ผๆ–ฐๆ™จ็‡ผ็”ณ็ฅž็ดณ่…Ž่‡ฃ่Ž˜่–ช่—Ž่œƒ่จŠ่บซ่พ›๏ฅฑ่ฟ…ๅคฑๅฎคๅฏฆๆ‚‰ๅฏฉๅฐ‹ๅฟƒๆฒ๏ฟฝ".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฅฒๆทฑ็€‹็”š่Šฏ่ซถไป€ๅ๏ฅณ้›™ๆฐไบžไฟ„ๅ…’ๅ•žๅจฅๅณจๆˆ‘็‰™่Šฝ่Žช่›พ่ก™่จ้˜ฟ้›…้ค“้ด‰้ตๅ Šๅฒณๅถฝๅน„ๆƒกๆ„•ๆกๆจ‚ๆธฅ้„‚้”้กŽ้ฐ้ฝทๅฎ‰ๅฒธๆŒ‰ๆ™ๆกˆ็œผ้›้ž้ก”้ฎŸๆ–ก่ฌ่ป‹้–ผๅ”ตๅฒฉๅท–ๅบตๆš—็™Œ่ด้—‡ๅฃ“ๆŠผ็‹Ž้ดจไปฐๅคฎๆ€ๆ˜ปๆฎƒ็งง้ดฆๅŽ“ๅ“€ๅŸƒๅด–ๆ„›ๆ›–ๆถฏ็ข่‰พ้š˜้„ๅŽ„ๆ‰ผๆŽ–ๆถฒ็ธŠ่…‹้ก๏ฟฝ".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆซป็ฝŒ้ถฏ้ธšไนŸๅ€ปๅ†ถๅคœๆƒนๆถๆคฐ็ˆบ่€ถ๏ฅด้‡Žๅผฑ๏ฅต๏ฅถ็ด„่‹ฅ่‘ฏ่’ป่—ฅ่บ๏ฅทไฝฏ๏ฅธ๏ฅนๅฃคๅญƒๆ™ๆšๆ”˜ๆ•ญๆš˜๏ฅบๆฅŠๆจฃๆด‹็€็…ฌ็—’็˜็ฆณ็ฉฐ๏ฅป็พŠ๏ฅผ่ฅ„๏ฅฝ่ฎ“้‡€้™ฝ๏ฅพ้คŠๅœ„ๅพกๆ–ผๆผ็˜€็ฆฆ่ชž้ฆญ้ญš้ฝฌๅ„„ๆ†ถๆŠ‘ๆช่‡†ๅƒๅ ฐๅฝฆ็„‰่จ€่ซบๅญผ่˜–ไฟบๅ„ผๅšดๅฅ„ๆŽฉๆทนๅถชๆฅญๅ††ไบˆไฝ™๏ฅฟ๏ฆ€๏ฆๅฆ‚๏ฆ‚๏ฟฝ".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฆƒๆญŸๆฑ๏ฆ„็’ต็ค–๏ฆ…่ˆ‡่‰…่Œน่ผฟ่ฝ๏ฆ†้ค˜๏ฆ‡๏ฆˆ๏ฆ‰ไบฆ๏ฆŠๅŸŸๅฝนๆ˜“๏ฆ‹๏ฆŒ็–ซ็นน่ญฏ๏ฆ้€†้ฉ›ๅšฅๅ งๅงธๅจŸๅฎด๏ฆŽๅปถ๏ฆ๏ฆๆๆŒป๏ฆ‘ๆคฝๆฒ‡ๆฒฟๆถŽๆถ“ๆทตๆผ”๏ฆ’็ƒŸ็„ถ็…™๏ฆ“็‡ƒ็‡•๏ฆ”็ก็กฏ๏ฆ•็ญต็ทฃ๏ฆ–็ธฏ๏ฆ—่ก่ปŸ๏ฆ˜๏ฆ™๏ฆš้‰›๏ฆ›้ณถ๏ฆœ๏ฆ๏ฆžๆ‚…ๆถ…๏ฆŸ็†ฑ๏ฆ ๏ฆก้–ฑๅŽญ๏ฆข๏ฆฃ๏ฆคๆŸ“๏ฆฅ็‚Ž็„ฐ็ฐ่‰ถ่‹’๏ฟฝ".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฆฆ้–ป้ซฅ้นฝๆ›„๏ฆง็‡่‘‰๏ฆจ๏ฆฉๅก‹๏ฆช๏ฆซๅถธๅฝฑ๏ฆฌๆ˜ ๆšŽๆฅนๆฆฎๆฐธๆณณๆธถๆฝๆฟš็€›็€ฏ็…็‡Ÿ็ฐ๏ฆญ็‘›๏ฆฎ็“”็›ˆ็ฉŽ็บ“๏ฆฏ๏ฆฐ่‹ฑ่ฉ ่ฟŽ๏ฆฑ้ˆ๏ฆฒ้œ™๏ฆณ๏ฆดไน‚ๅ€ช๏ฆตๅˆˆๅกๆ›ณๆฑญๆฟŠ็ŒŠ็ฟ็ฉข่Šฎ่—่˜‚๏ฆถ่ฃ”่ฉฃ่ญฝ่ฑซ๏ฆท้Šณ๏ฆธ้œ“้ ไบ”ไผไฟ‰ๅ‚ฒๅˆๅพๅณๅ—šๅกขๅขบๅฅงๅจ›ๅฏคๆ‚Ÿ๏ฆนๆ‡Šๆ•–ๆ—ฟๆ™คๆขงๆฑšๆพณ๏ฟฝ".split("");for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ƒ็†ฌ็’็ญฝ่œˆ่ชค้ฐฒ้ผ‡ๅฑ‹ๆฒƒ็„็Ž‰้ˆบๆบซ็‘ฅ็˜Ÿ็ฉฉ็ธ•่˜Šๅ…€ๅฃ…ๆ“็“ฎ็”•็™ฐ็ฟ้‚•้›้ฅ”ๆธฆ็“ฆ็ชฉ็ชช่‡ฅ่›™่ธ่จ›ๅฉ‰ๅฎŒๅฎ›ๆขกๆค€ๆตฃ็Žฉ็“็ฌ็ข—็ทฉ็ฟซ่„˜่…•่Žž่ฑŒ้˜ฎ้ ‘ๆ›ฐๅพ€ๆ—บๆž‰ๆฑช็Ž‹ๅ€ญๅจƒๆญช็Ÿฎๅค–ๅตฌๅท็Œฅ็•๏ฆบ๏ฆปๅƒฅๅ‡นๅ ฏๅคญๅฆ–ๅงšๅฏฅ๏ฆผ๏ฆฝๅถขๆ‹—ๆ–ๆ’“ๆ“พ๏ฆพๆ›œ๏ฆฟๆฉˆ๏ง€็‡ฟ็‘ค๏ง๏ฟฝ".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ชˆ็ชฏ็น‡็นž่€€่…ฐ๏ง‚่Ÿฏ่ฆ่ฌ ้™๏งƒ้‚€้ฅ’ๆ…พๆฌฒๆตด็ธŸ่คฅ่พฑไฟ‘ๅ‚ญๅ†—ๅ‹‡ๅŸ‡ๅข‰ๅฎนๅบธๆ…‚ๆฆ•ๆถŒๆนงๆบถ็†”็‘ข็”จ็”ฌ่ณ่Œธ่“‰่ธŠ้Ž”้ž๏ง„ไบŽไฝ‘ๅถๅ„ชๅˆๅ‹ๅณๅฎ‡ๅฏ“ๅฐคๆ„šๆ†‚ๆ—ด็‰›็Ž—็‘€็›‚็ฅ็ฆ‘็ฆน็ด†็พฝ่Š‹่—•่™ž่ฟ‚้‡้ƒต้‡ช้š…้›จ้›ฉๅ‹–ๅฝงๆ—ญๆ˜ฑๆ ฏ็…œ็จถ้ƒ้ Šไบ‘๏ง…ๆฉ’ๆฎžๆพ็†‰่€˜่Šธ่•“๏ฟฝ".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้‹้š•้›ฒ้Ÿป่”š้ฌฑไบ็†Š้›„ๅ…ƒๅŽŸๅ“กๅœ“ๅœ’ๅžฃๅช›ๅซ„ๅฏƒๆ€จๆ„ฟๆดๆฒ…ๆดนๆนฒๆบ็ˆฐ็Œฟ็‘—่‹‘่ข่ฝ…้ ๏ง†้™ข้ก˜้ด›ๆœˆ่ถŠ้‰žไฝๅ‰ๅƒžๅฑๅœๅง”ๅจๅฐ‰ๆ…ฐๆšๆธญ็ˆฒ็‘‹็ทฏ่ƒƒ่Ž่‘ฆ่”ฟ่Ÿ่ก›่ค˜่ฌ‚้•้Ÿ‹้ญไนณไพ‘ๅ„’ๅ…ช๏ง‡ๅ”ฏๅ–ฉๅญบๅฎฅๅนผๅนฝๅบพๆ‚ ๆƒŸๆ„ˆๆ„‰ๆ„ๆ”ธๆœ‰๏งˆๆŸ”ๆŸš๏ง‰ๆฅกๆฅขๆฒนๆดง๏งŠๆธธ๏ง‹๏ฟฝ".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[235]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฟก็Œถ็Œท๏งŒ็‘œ็”ฑ๏ง็™’๏งŽ๏ง็ถญ่‡พ่ธ่ฃ•่ช˜่ซ›่ซญ่ธฐ่น‚้Š้€พ้บ้…‰้‡‰้ฎ๏ง๏ง‘ๅ ‰๏ง’ๆฏ“่‚‰่‚ฒ๏ง“๏ง”ๅ…ๅฅซๅฐน๏ง•๏ง–ๆฝค็Žง่ƒค่ด‡๏ง—้ˆ—้–๏ง˜๏ง™๏งš๏ง›่ฟๆˆŽ็€œ็ตจ่ž๏งœๅž ๆฉๆ…‡ๆฎท่ชพ้Š€้šฑไน™ๅŸๆทซ่”ญ้™ฐ้Ÿณ้ฃฎๆ–ๆณฃ้‚‘ๅ‡ๆ‡‰่†บ้ทนไพๅ€šๅ„€ๅฎœๆ„ๆ‡ฟๆ“ฌๆค…ๆฏ…็–‘็Ÿฃ็พฉ่‰ค่–่Ÿป่กฃ่ชผ๏ฟฝ".split("");for(j=0;j!=D[235].length;++j)if(D[235][j].charCodeAt(0)!==65533){e[D[235][j]]=60160+j;d[60160+j]=D[235][j]}D[236]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ญฐ้†ซไบŒไปฅไผŠ๏ง๏งžๅคทๅงจ๏งŸๅทฒๅผ›ๅฝ›ๆ€ก๏ง ๏งก๏งข๏งฃ็ˆพ็ฅ๏งค็•ฐ็—๏งฅ็งป๏งฆ่€Œ่€ณ่‚„่‹ก่‘๏งง๏งจ่ฒฝ่ฒณ้‚‡๏งฉ๏งช้ฃด้คŒ๏งซ๏งฌ็€ท็›Š็ฟŠ็ฟŒ็ฟผ่ฌšไบบไปๅˆƒๅฐ๏งญๅ’ฝๅ› ๅงปๅฏ…ๅผ•ๅฟๆนฎ๏งฎ๏งฏ็ตช่Œต๏งฐ่š“่ช๏งฑ้ญ้ท๏งฒ๏งณไธ€ไฝšไฝพๅฃนๆ—ฅๆบข้€ธ้Žฐ้ฆนไปปๅฃฌๅฆŠๅง™ๆ๏งด๏งต็จ”๏งถ่่ณƒๅ…ฅๅ„๏ฟฝ".split("");for(j=0;j!=D[236].length;++j)if(D[236][j].charCodeAt(0)!==65533){e[D[236][j]]=60416+j;d[60416+j]=D[236][j]}D[237]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏งท๏งธ๏งนไปๅ‰ฉๅญ•่Šฟไป”ๅˆบๅ’จๅง‰ๅงฟๅญๅญ—ๅญœๆฃๆ…ˆๆป‹็‚™็…ฎ็Ž†็“ท็–ต็ฃ็ดซ่€…่‡ช่Œจ่”—่—‰่ซฎ่ณ‡้›Œไฝœๅ‹บๅšผๆ–ซๆ˜จ็ผ็‚ธ็ˆต็ถฝ่Š้…Œ้›€้ตฒๅญฑๆฃงๆฎ˜ๆฝบ็›žๅฒ‘ๆšซๆฝ›็ฎด็ฐช่ ถ้›œไธˆไป—ๅŒ ๅ ดๅขปๅฃฏๅฅฌๅฐ‡ๅธณๅบ„ๅผตๆŽŒๆšฒๆ–ๆจŸๆชฃๆฌŒๆผฟ็‰†๏งบ็็’‹็ซ ็ฒง่…ธ่‡Ÿ่‡ง่ŽŠ่‘ฌ่”ฃ่–”่—่ฃ่ด“้†ฌ้•ท๏ฟฝ".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้šœๅ†ๅ“‰ๅœจๅฎฐๆ‰ๆๆ ฝๆข“ๆธฝๆป“็ฝ็ธก่ฃ่ฒก่ผ‰้ฝ‹้ฝŽ็ˆญ็ฎ่ซ้Œšไฝ‡ไฝŽๅ„ฒๅ’€ๅงๅบ•ๆŠตๆตๆฅฎๆจ—ๆฒฎๆธš็‹™็Œช็–ฝ็ฎธ็ดต่‹ง่น่‘—่—ท่ฉ›่ฒฏ่บ‡้€™้‚ธ้›Ž้ฝŸๅ‹ฃๅŠๅซกๅฏ‚ๆ‘˜ๆ•ตๆปด็‹„๏งป็š„็ฉ็ฌ›็ฑ็ธพ็ฟŸ่ป่ฌซ่ณŠ่ตค่ทก่นŸ่ฟช่ฟน้ฉ้‘ไฝƒไฝบๅ‚ณๅ…จๅ…ธๅ‰ๅ‰ชๅกกๅกผๅฅ ๅฐˆๅฑ•ๅป›ๆ‚›ๆˆฐๆ “ๆฎฟๆฐˆๆพฑ๏ฟฝ".split("");for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[239]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็…Ž็ ็”ฐ็”ธ็•‘็™ฒ็ญŒ็ฎ‹็ฎญ็ฏ†็บ่ฉฎ่ผพ่ฝ‰้ˆฟ้Š“้Œข้ซ้›ป้กš้กซ้คžๅˆ‡ๆˆชๆŠ˜ๆต™็™ค็ซŠ็ฏ€็ตถๅ ๅฒพๅบ—ๆผธ็‚น็ฒ˜้œ‘้ฎŽ้ปžๆŽฅๆ‘บ่ถไธไบ•ไบญๅœๅตๅ‘ˆๅงƒๅฎšๅน€ๅบญๅปทๅพๆƒ…ๆŒบๆ”ฟๆ•ดๆ—Œๆ™ถๆ™ธๆŸพๆฅจๆช‰ๆญฃๆฑ€ๆท€ๆทจๆธŸๆนž็€ž็‚ก็ŽŽ็ฝ็”บ็›็ข‡็ฆŽ็จ‹็ฉฝ็ฒพ็ถŽ่‰‡่จ‚่ซช่ฒž้„ญ้…Š้‡˜้‰ฆ้‹Œ้Œ ้œ†้–๏ฟฝ".split(""); +for(j=0;j!=D[239].length;++j)if(D[239][j].charCodeAt(0)!==65533){e[D[239][j]]=61184+j;d[61184+j]=D[239][j]}D[240]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้œ้ ‚้ผŽๅˆถๅŠ‘ๅ•ผๅ คๅธๅผŸๆ‚ŒๆๆขฏๆฟŸ็ฅญ็ฌฌ่‡่–บ่ฃฝ่ซธ่น„้†้™ค้š›้œฝ้กŒ้ฝŠไฟŽๅ…†ๅ‡‹ๅŠฉๅ˜ฒๅผ”ๅฝซๆŽชๆ“ๆ—ฉๆ™ๆ›บๆ›นๆœๆขๆฃ—ๆงฝๆผ•ๆฝฎ็…ง็‡ฅ็ˆช็’ช็œบ็ฅ–็ฅš็งŸ็จ ็ช•็ฒ—็ณŸ็ต„็นฐ่‚‡่—ป่šค่ฉ”่ชฟ่ถ™่บ้€ ้ญ้‡ฃ้˜ป้›•้ณฅๆ—็ฐ‡่ถณ้ƒๅญ˜ๅฐŠๅ’ๆ‹™็Œๅ€งๅฎ—ๅพžๆ‚ฐๆ…ซๆฃ•ๆท™็ฎ็จฎ็ต‚็ถœ็ธฑ่…ซ๏ฟฝ".split("");for(j=0;j!=D[240].length;++j)if(D[240][j].charCodeAt(0)!==65533){e[D[240][j]]=61440+j;d[61440+j]=D[240][j]}D[241]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ธช่ธต้พ้˜ไฝๅๅทฆๅบงๆŒซ็ฝชไธปไฝไพๅšๅง่ƒ„ๅ‘ชๅ‘จๅ—พๅฅๅฎ™ๅทžๅปšๆ™ๆœฑๆŸฑๆ ชๆณจๆดฒๆนŠๆพ็‚ท็ ็–‡็ฑŒ็ด‚็ดฌ็ถข่ˆŸ่››่จป่ช…่ตฐ่บŠ่ผณ้€ฑ้…Ž้…’้‘„้ง็ซน็ฒฅไฟŠๅ„ๅ‡†ๅŸˆๅฏฏๅณปๆ™™ๆจฝๆตšๆบ–ๆฟฌ็„Œ็•ฏ็ซฃ่ ข้€ก้ต้›‹้งฟ่Œไธญไปฒ่ก†้‡ๅฝๆซ›ๆฅซๆฑ่‘บๅขžๆ†Žๆ›พๆ‹ฏ็ƒ็”‘็—‡็น’่’ธ่ญ‰่ดˆไน‹ๅช๏ฟฝ".split("");for(j=0;j!=D[241].length;++j)if(D[241][j].charCodeAt(0)!==65533){e[D[241][j]]=61696+j;d[61696+j]=D[241][j]}D[242]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ’ซๅœฐๅ€ๅฟ—ๆŒๆŒ‡ๆ‘ฏๆ”ฏๆ—จๆ™บๆžๆžณๆญขๆฑ ๆฒšๆผฌ็Ÿฅ็ ฅ็ฅ‰็ฅ—็ด™่‚ข่„‚่‡ณ่Š่Šท่œ˜่ชŒ๏งผ่ด„่ถพ้ฒ็›ด็จ™็จท็น”่ทๅ”‡ๅ—”ๅกตๆŒฏๆขๆ™‰ๆ™‹ๆกญๆฆ›ๆฎ„ๆดฅๆบฑ็็‘จ็’ก็•›็–น็›ก็œž็ž‹็งฆ็ธ‰็ธ่‡ป่”ฏ่ข—่จบ่ณ‘่ปซ่พฐ้€ฒ้Žญ้™ฃ้™ณ้œ‡ไพ„ๅฑๅงชๅซ‰ๅธ™ๆกŽ็“†็–พ็งฉ็ช’่†ฃ่›ญ่ณช่ทŒ่ฟญๆ–Ÿๆœ•๏งฝๅŸทๆฝ—็ท่ผฏ๏ฟฝ".split("");for(j=0;j!=D[242].length;++j)if(D[242][j].charCodeAt(0)!==65533){e[D[242][j]]=61952+j;d[61952+j]=D[242][j]}D[243]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ถ้›†ๅพตๆ‡ฒๆพ„ไธ”ไพ˜ๅ€Ÿๅ‰ๅ—Ÿๅตฏๅทฎๆฌกๆญค็ฃ‹็ฎš๏งพ่น‰่ปŠ้ฎๆ‰ๆพ็€็ช„้Œฏ้‘ฟ้ฝชๆ’ฐๆพฏ็‡ฆ็’จ็“š็ซ„็ฐ’็บ‚็ฒฒ็บ˜่ฎš่ดŠ้‘ฝ้ค้ฅŒๅˆนๅฏŸๆ“ฆๆœญ็ดฎๅƒญๅƒๅกนๆ…˜ๆ…™ๆ‡บๆ–ฌ็ซ™่ฎ’่ฎ–ๅ€‰ๅ€กๅ‰ตๅ”ฑๅจผๅป ๅฝฐๆ„ดๆ•žๆ˜Œๆ˜ถๆšขๆงๆป„ๆผฒ็Œ–็˜ก็ช“่„น่‰™่–่’ผๅ‚ตๅŸฐๅฏ€ๅฏจๅฝฉๆŽก็ ฆ็ถต่œ่”ก้‡‡้‡ตๅ†ŠๆŸต็ญ–๏ฟฝ".split("");for(j=0;j!=D[243].length;++j)if(D[243][j].charCodeAt(0)!==65533){e[D[243][j]]=62208+j;d[62208+j]=D[243][j]}D[244]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฒฌๅ‡„ๅฆปๆ‚ฝ่™•ๅ€œ๏งฟๅ‰”ๅฐบๆ…ฝๆˆšๆ‹“ๆ“ฒๆ–ฅๆปŒ็˜ ่„Š่น ้™Ÿ้šปไปŸๅƒๅ–˜ๅคฉๅทๆ“…ๆณ‰ๆทบ็Ž”็ฉฟ่ˆ›่–ฆ่ณค่ธ้ท้‡ง้—ก้˜ก้Ÿ†ๅ‡ธๅ“ฒๅ–†ๅพนๆ’คๆพˆ็ถด่ผŸ่ฝ้ตๅƒ‰ๅฐ–ๆฒพๆทป็”›็žป็ฐฝ็ฑค่ฉน่ซ‚ๅ žๅฆพๅธ–ๆท็‰’็–Š็ซ่ซœ่ฒผ่ผ’ๅปณๆ™ดๆทธ่ฝ่่ซ‹้‘้ฏ–๏จ€ๅ‰ƒๆ›ฟๆถ•ๆปฏ็ท ่ซฆ้€ฎ้ž้ซ”ๅˆๅ‰ฟๅ“จๆ†”ๆŠ„ๆ‹›ๆขข๏ฟฝ".split("");for(j=0;j!=D[244].length;++j)if(D[244][j].charCodeAt(0)!==65533){e[D[244][j]]=62464+j;d[62464+j]=D[244][j]}D[245]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆค’ๆฅšๆจต็‚’็„ฆ็ก็ค็คŽ็ง’็จ่‚–่‰ธ่‹•่‰่•‰่ฒ‚่ถ…้…ข้†‹้†ฎไฟƒๅ›‘็‡ญ็Ÿ—่œ€่งธๅฏธๅฟ–ๆ‘้‚จๅขๅกšๅฏตๆ‚คๆ†ๆ‘ ็ธฝ่ฐ่”ฅ้Šƒๆ’ฎๅ‚ฌๅด”ๆœ€ๅขœๆŠฝๆŽจๆคŽๆฅธๆจžๆนซ็šบ็ง‹่Šป่ฉ่ซ่ถจ่ฟฝ้„’้…‹้†œ้Œ้Œ˜้Žš้››้จถ้ฐไธ‘็•œ็ฅ็ซบ็ญ‘็ฏ‰็ธฎ่“„่น™่นด่ปธ้€ๆ˜ฅๆคฟ็‘ƒๅ‡บๆœฎ้ปœๅ……ๅฟ ๆฒ–่Ÿฒ่ก่กทๆ‚ด่†ต่ƒ๏ฟฝ".split("");for(j=0;j!=D[245].length;++j)if(D[245][j].charCodeAt(0)!==65533){e[D[245][j]]=62720+j;d[62720+j]=D[245][j]}D[246]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ด…ๅ–ๅนๅ˜ดๅจถๅฐฑ็‚Š็ฟ ่š่„†่‡ญ่ถฃ้†‰้ฉŸ้ทฒๅดไป„ๅŽ ๆƒปๆธฌๅฑคไพˆๅ€คๅ—คๅณ™ๅนŸๆฅๆข”ๆฒปๆท„็†พ็—”็—ด็™ก็จš็ฉ‰็ท‡็ทป็ฝฎ่‡ด่šฉ่ผœ้›‰้ฆณ้ฝ’ๅ‰‡ๅ‹…้ฃญ่ฆชไธƒๆŸ’ๆผ†ไพตๅฏขๆž•ๆฒˆๆตธ็›็ ง้‡้ผ่Ÿ„็งค็จฑๅฟซไป–ๅ’คๅ”พๅขฎๅฆฅๆƒฐๆ‰“ๆ‹–ๆœถๆฅ•่ˆต้™€้ฆฑ้งๅ€ฌๅ“ๅ•„ๅผ๏จๆ‰˜๏จ‚ๆ“ขๆ™ซๆŸๆฟๆฟฏ็ข็ธ่จ—๏ฟฝ".split("");for(j=0;j!=D[246].length;++j)if(D[246][j].charCodeAt(0)!==65533){e[D[246][j]]=62976+j;d[62976+j]=D[246][j]}D[247]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ธๅ‘‘ๅ˜†ๅฆๅฝˆๆ†šๆญŽ็˜็‚ญ็ถป่ช•ๅฅช่„ซๆŽข็œˆ่€ฝ่ฒชๅก”ๆญๆฆปๅฎ•ๅธ‘ๆนฏ๏จƒ่•ฉๅ…Œๅฐๅคชๆ€ ๆ…‹ๆฎ†ๆฑฐๆณฐ็ฌž่ƒŽ่‹”่ท†้‚ฐ้ขฑ๏จ„ๆ“‡ๆพคๆ’‘ๆ”„ๅ…ŽๅๅœŸ่จŽๆ…Ÿๆกถ๏จ…็—›็ญ’็ตฑ้€šๅ †ๆงŒ่…ฟ่คช้€€้ นๅธๅฅ—ๅฆฌๆŠ•้€้ฌชๆ…็‰น้—–ๅกๅฉ†ๅทดๆŠŠๆ’ญๆ“บๆทๆณขๆดพ็ˆฌ็ถ็ ด็ฝท่Šญ่ท›้ —ๅˆคๅ‚ๆฟ็‰ˆ็“ฃ่ฒฉ่พฆ้ˆ‘๏ฟฝ".split("");for(j=0;j!=D[247].length;++j)if(D[247][j].charCodeAt(0)!==65533){e[D[247][j]]=63232+j;d[63232+j]=D[247][j]}D[248]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้˜ชๅ…ซๅญๆŒไฝฉๅ”„ๆ‚–ๆ•—ๆฒ›ๆตฟ็‰Œ็‹ฝ็จ—่ฆ‡่ฒๅฝญๆพŽ็ƒน่†จๆ„Žไพฟๅๆ‰็‰‡็ฏ‡็ทจ็ฟฉ้้žญ้จ™่ฒถๅชๅนณๆžฐ่่ฉ•ๅ ๅฌ–ๅนฃๅปขๅผŠๆ–ƒ่‚บ่”ฝ้–‰้™›ไฝˆๅŒ…ๅŒๅŒๅ’†ๅ“บๅœƒๅธƒๆ€–ๆŠ›ๆŠฑๆ•๏จ†ๆณกๆตฆ็–ฑ็ ฒ่ƒž่„ฏ่‹ž่‘ก่’ฒ่ข่ค’้€‹้‹ช้ฃฝ้ฎ‘ๅน…ๆšดๆ›็€‘็ˆ†๏จ‡ไฟตๅ‰ฝๅฝชๆ…“ๆ“ๆจ™ๆผ‚็“ข็ฅจ่กจ่ฑน้ฃ‡้ฃ„้ฉƒ๏ฟฝ".split("");for(j=0;j!=D[248].length;++j)if(D[248][j].charCodeAt(0)!==65533){e[D[248][j]]=63488+j;d[63488+j]=D[248][j]}D[249]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ“็จŸๆฅ“่ซท่ฑŠ้ขจ้ฆฎๅฝผๆŠซ็–ฒ็šฎ่ขซ้ฟ้™‚ๅŒนๅผผๅฟ…ๆณŒ็Œ็•ข็–‹็ญ†่‹พ้ฆไน้€ผไธ‹ไฝ•ๅŽฆๅคๅปˆๆ˜ฐๆฒณ็‘•่ท่ฆ่ณ€้้œž้ฐ•ๅฃ‘ๅญธ่™่ฌ”้ถดๅฏ’ๆจๆ‚ๆ—ฑๆฑ—ๆผขๆพฃ็€š็ฝ•็ฟฐ้–‘้–’้™้Ÿ“ๅ‰ฒ่ฝ„ๅ‡ฝๅซๅ’ธๅ•ฃๅ–Šๆชปๆถต็ท˜่‰ฆ้Šœ้™ท้นนๅˆๅ“ˆ็›’่›ค้–ค้—”้™œไบขไผ‰ๅงฎๅซฆๅททๆ’ๆŠ—ๆญๆกๆฒ†ๆธฏ็ผธ่‚›่ˆช๏ฟฝ".split("");for(j=0;j!=D[249].length;++j)if(D[249][j].charCodeAt(0)!==65533){e[D[249][j]]=63744+j;d[63744+j]=D[249][j]}D[250]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏จˆ๏จ‰้ …ไบฅๅ•ๅ’ณๅž“ๅฅšๅญฉๅฎณๆ‡ˆๆฅทๆตท็€ฃ่Ÿน่งฃ่ฉฒ่ซง้‚‚้งญ้ชธๅŠพๆ ธๅ€–ๅนธๆ่‡่กŒไบซๅ‘ๅšฎ็ฆ้„•้Ÿฟ้ค‰้ฅ—้ฆ™ๅ™“ๅขŸ่™›่จฑๆ†ฒๆซถ็ป่ป’ๆญ‡้šช้ฉ—ๅฅ•็ˆ€่ตซ้ฉไฟ”ๅณดๅผฆๆ‡ธๆ™›ๆณซ็‚ซ็Ž„็Žน็พ็œฉ็็ตƒ็ตข็ธฃ่ˆท่ก’๏จŠ่ณข้‰‰้กฏๅญ‘็ฉด่ก€้ ๅซŒไฟ ๅ”ๅคพๅณฝๆŒพๆตน็‹น่„…่„‡่Žข้‹้ ฐไบจๅ…„ๅˆ‘ๅž‹๏ฟฝ".split("");for(j=0;j!=D[250].length;++j)if(D[250][j].charCodeAt(0)!==65533){e[D[250][j]]=64e3+j;d[64e3+j]=D[250][j]}D[251]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฝขๆณ‚ๆปŽ็€…็็‚ฏ็†’็ฉ็‘ฉ่Š่žข่กก้€ˆ้‚ข้Žฃ้ฆจๅ…ฎๅฝ—ๆƒ ๆ…งๆšณ่•™่นŠ้†ฏ้ž‹ไนŽไบ’ๅ‘ผๅฃ•ๅฃบๅฅฝๅฒตๅผงๆˆถๆ‰ˆๆ˜Šๆ™งๆฏซๆตฉๆทๆน–ๆปธๆพ”ๆฟ ๆฟฉ็็‹็ฅ็‘š็“ ็š“็ฅœ็ณŠ็ธž่ƒก่Šฆ่‘ซ่’ฟ่™Ž่™Ÿ่ด่ญท่ฑช้Žฌ้ €้กฅๆƒ‘ๆˆ–้…ทๅฉšๆ˜ๆททๆธพ็ฟ้ญ‚ๅฟฝๆƒš็ฌๅ“„ๅผ˜ๆฑžๆณ“ๆดช็ƒ˜็ด…่™น่จŒ้ดปๅŒ–ๅ’Œๅฌ…ๆจบ็ซ็•ต๏ฟฝ".split("");for(j=0;j!=D[251].length;++j)if(D[251][j].charCodeAt(0)!==65533){e[D[251][j]]=64256+j;d[64256+j]=D[251][j]}D[252]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฆ็ฆพ่Šฑ่ฏ่ฉฑ่ญ่ฒจ้ด๏จ‹ๆ“ดๆ”ซ็ขบ็ขป็ฉซไธธๅ–šๅฅๅฎฆๅนปๆ‚ฃๆ›ๆญกๆ™ฅๆก“ๆธ™็…ฅ็’ฐ็ดˆ้‚„้ฉฉ้ฐฅๆดปๆป‘็Œพ่ฑ้—Šๅ‡ฐๅนŒๅพจๆๆƒถๆ„ฐๆ…Œๆ™ƒๆ™„ๆฆฅๆณๆนŸๆป‰ๆฝข็…Œ็’œ็š‡็ฏ็ฐง่’่—้‘้š้ปƒๅŒฏๅ›žๅปปๅพŠๆขๆ‚”ๆ‡ทๆ™ฆๆœƒๆชœๆทฎๆพฎ็ฐ็ช็นช่†พ่Œด่›”่ชจ่ณ„ๅŠƒ็ฒๅฎ–ๆฉซ้„ๅ“ฎๅš†ๅญๆ•ˆๆ–…ๆ›‰ๆขŸๆถๆท†๏ฟฝ".split("");for(j=0;j!=D[252].length;++j)if(D[252][j].charCodeAt(0)!==65533){e[D[252][j]]=64512+j;d[64512+j]=D[252][j]}D[253]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ˆป่‚ด้…ต้ฉไพฏๅ€™ๅŽšๅŽๅผๅ–‰ๅ—…ๅธฟๅพŒๆœฝ็…ฆ็้€…ๅ‹›ๅ‹ณๅกคๅฃŽ็„„็†็‡ป่–ฐ่จ“ๆšˆ่–จๅ–งๆš„็…Š่ฑๅ‰ๅ–™ๆฏๅฝ™ๅพฝๆฎๆš‰็…‡่ซฑ่ผ้บพไผ‘ๆบ็ƒ‹็•ฆ่™งๆค่ญŽ้ทธๅ…‡ๅ‡ถๅŒˆๆดถ่ƒธ้ป‘ๆ˜•ๆฌฃ็‚˜็—•ๅƒๅฑน็ด‡่จ–ๆฌ ๆฌฝๆญ†ๅธๆฐๆดฝ็ฟ•่ˆˆๅƒ–ๅ‡žๅ–œๅ™ซๅ›ๅงฌๅฌ‰ๅธŒๆ†™ๆ†˜ๆˆฑๆ™žๆ›ฆ็†™็†น็†บ็Šง็ฆง็จ€็พฒ่ฉฐ๏ฟฝ".split("");for(j=0;j!=D[253].length;++j)if(D[253][j].charCodeAt(0)!==65533){e[D[253][j]]=64768+j;d[64768+j]=D[253][j]}return{enc:e,dec:d}}();cptable[950]=function(){var d=[],e={},D=[],j;D[0]="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[0].length;++j)if(D[0][j].charCodeAt(0)!==65533){e[D[0][j]]=0+j;d[0+j]=D[0][j]}D[161]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ€€๏ผŒใ€ใ€‚๏ผŽโ€ง๏ผ›๏ผš๏ผŸ๏ผ๏ธฐโ€ฆโ€ฅ๏น๏น‘๏น’ยท๏น”๏น•๏น–๏น—๏ฝœโ€“๏ธฑโ€”๏ธณโ•ด๏ธด๏น๏ผˆ๏ผ‰๏ธต๏ธถ๏ฝ›๏ฝ๏ธท๏ธธใ€”ใ€•๏ธน๏ธบใ€ใ€‘๏ธป๏ธผใ€Šใ€‹๏ธฝ๏ธพใ€ˆใ€‰๏ธฟ๏น€ใ€Œใ€๏น๏น‚ใ€Žใ€๏นƒ๏น„๏น™๏นš๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏น›๏นœ๏น๏นžโ€˜โ€™โ€œโ€ใ€ใ€žโ€ตโ€ฒ๏ผƒ๏ผ†๏ผŠโ€ปยงใ€ƒโ—‹โ—โ–ณโ–ฒโ—Žโ˜†โ˜…โ—‡โ—†โ–กโ– โ–ฝโ–ผใŠฃโ„…ยฏ๏ฟฃ๏ผฟห๏น‰๏นŠ๏น๏นŽ๏น‹๏นŒ๏นŸ๏น ๏นก๏ผ‹๏ผร—รทยฑโˆš๏ผœ๏ผž๏ผโ‰ฆโ‰งโ‰ โˆžโ‰’โ‰ก๏นข๏นฃ๏นค๏นฅ๏นฆ๏ฝžโˆฉโˆชโŠฅโˆ โˆŸโŠฟใ’ใ‘โˆซโˆฎโˆตโˆดโ™€โ™‚โŠ•โŠ™โ†‘โ†“โ†โ†’โ†–โ†—โ†™โ†˜โˆฅโˆฃ๏ผ๏ฟฝ".split("");for(j=0;j!=D[161].length;++j)if(D[161][j].charCodeAt(0)!==65533){e[D[161][j]]=41216+j;d[41216+j]=D[161][j]}D[162]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ผผโˆ•๏นจ๏ผ„๏ฟฅใ€’๏ฟ ๏ฟก๏ผ…๏ผ โ„ƒโ„‰๏นฉ๏นช๏นซใ•ใŽœใŽใŽžใŽใŽกใŽŽใŽใ„ยฐๅ…™ๅ…›ๅ…žๅ…ๅ…กๅ…ฃๅ—ง็“ฉ็ณŽโ–โ–‚โ–ƒโ–„โ–…โ–†โ–‡โ–ˆโ–โ–Žโ–โ–Œโ–‹โ–Šโ–‰โ”ผโ”ดโ”ฌโ”คโ”œโ–”โ”€โ”‚โ–•โ”Œโ”โ””โ”˜โ•ญ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ•ฎโ•ฐโ•ฏโ•โ•žโ•ชโ•กโ—ขโ—ฃโ—ฅโ—คโ•ฑโ•ฒโ•ณ๏ผ๏ผ‘๏ผ’๏ผ“๏ผ”๏ผ•๏ผ–๏ผ—๏ผ˜๏ผ™โ… โ…กโ…ขโ…ฃโ…คโ…ฅโ…ฆโ…งโ…จโ…ฉใ€กใ€ขใ€ฃใ€คใ€ฅใ€ฆใ€งใ€จใ€ฉๅๅ„ๅ…๏ผก๏ผข๏ผฃ๏ผค๏ผฅ๏ผฆ๏ผง๏ผจ๏ผฉ๏ผช๏ผซ๏ผฌ๏ผญ๏ผฎ๏ผฏ๏ผฐ๏ผฑ๏ผฒ๏ผณ๏ผด๏ผต๏ผถ๏ผท๏ผธ๏ผน๏ผบ๏ฝ๏ฝ‚๏ฝƒ๏ฝ„๏ฝ…๏ฝ†๏ฝ‡๏ฝˆ๏ฝ‰๏ฝŠ๏ฝ‹๏ฝŒ๏ฝ๏ฝŽ๏ฝ๏ฝ๏ฝ‘๏ฝ’๏ฝ“๏ฝ”๏ฝ•๏ฝ–๏ฟฝ".split("");for(j=0;j!=D[162].length;++j)if(D[162][j].charCodeAt(0)!==65533){e[D[162][j]]=41472+j;d[41472+j]=D[162][j]}D[163]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฝ—๏ฝ˜๏ฝ™๏ฝšฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮกฮฃฮคฮฅฮฆฮงฮจฮฉฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯƒฯ„ฯ…ฯ†ฯ‡ฯˆฯ‰ใ„…ใ„†ใ„‡ใ„ˆใ„‰ใ„Šใ„‹ใ„Œใ„ใ„Žใ„๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝใ„ใ„‘ใ„’ใ„“ใ„”ใ„•ใ„–ใ„—ใ„˜ใ„™ใ„šใ„›ใ„œใ„ใ„žใ„Ÿใ„ ใ„กใ„ขใ„ฃใ„คใ„ฅใ„ฆใ„งใ„จใ„ฉห™ห‰หŠห‡ห‹๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ‚ฌ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[163].length;++j)if(D[163][j].charCodeAt(0)!==65533){e[D[163][j]]=41728+j;d[41728+j]=D[163][j]}D[164]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไธ€ไน™ไธไธƒไนƒไนไบ†ไบŒไบบๅ„ฟๅ…ฅๅ…ซๅ‡ ๅˆ€ๅˆๅŠ›ๅŒ•ๅๅœๅˆไธ‰ไธ‹ไธˆไธŠไธซไธธๅ‡กไน…ไนˆไนŸไนžไบŽไบกๅ…€ๅˆƒๅ‹บๅƒๅ‰ๅฃๅœŸๅฃซๅค•ๅคงๅฅณๅญๅญ‘ๅญ“ๅฏธๅฐๅฐขๅฐธๅฑฑๅทๅทฅๅทฑๅทฒๅทณๅทพๅนฒๅปพๅผ‹ๅผ“ๆ‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไธ‘ไธไธไธญไธฐไธนไน‹ๅฐนไบˆไบ‘ไบ•ไบ’ไบ”ไบขไปไป€ไปƒไป†ไป‡ไปไปŠไป‹ไป„ๅ…ƒๅ…ๅ…งๅ…ญๅ…ฎๅ…ฌๅ†—ๅ‡ถๅˆ†ๅˆ‡ๅˆˆๅ‹ปๅ‹พๅ‹ฟๅŒ–ๅŒนๅˆๅ‡ๅ…ๅžๅŽ„ๅ‹ๅŠๅๅฃฌๅคฉๅคซๅคชๅคญๅญ”ๅฐ‘ๅฐคๅฐบๅฑฏๅทดๅนปๅปฟๅผ”ๅผ•ๅฟƒๆˆˆๆˆถๆ‰‹ๆ‰Žๆ”ฏๆ–‡ๆ–—ๆ–คๆ–นๆ—ฅๆ›ฐๆœˆๆœจๆฌ ๆญขๆญนๆฏ‹ๆฏ”ๆฏ›ๆฐๆฐด็ซ็ˆช็ˆถ็ˆป็‰‡็‰™็‰›็Šฌ็Ž‹ไธ™๏ฟฝ".split("");for(j=0;j!=D[164].length;++j)if(D[164][j].charCodeAt(0)!==65533){e[D[164][j]]=41984+j;d[41984+j]=D[164][j]}D[165]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไธ–ไธ•ไธ”ไธ˜ไธปไนไนไนŽไปฅไป˜ไป”ไป•ไป–ไป—ไปฃไปคไป™ไปžๅ……ๅ…„ๅ†‰ๅ†Šๅ†ฌๅ‡นๅ‡บๅ‡ธๅˆŠๅŠ ๅŠŸๅŒ…ๅŒ†ๅŒ—ๅŒไปŸๅŠๅ‰ๅกๅ ๅฏๅฎๅŽปๅฏๅคๅณๅฌๅฎๅฉๅจๅผๅธๅตๅซๅฆๅชๅฒๅฑๅฐๅฅๅญๅปๅ››ๅ›šๅค–๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅคฎๅคฑๅฅดๅฅถๅญ•ๅฎƒๅฐผๅทจๅทงๅทฆๅธ‚ๅธƒๅนณๅนผๅผๅผ˜ๅผ—ๅฟ…ๆˆŠๆ‰“ๆ‰”ๆ‰’ๆ‰‘ๆ–ฅๆ—ฆๆœฎๆœฌๆœชๆœซๆœญๆญฃๆฏๆฐ‘ๆฐๆฐธๆฑๆฑ€ๆฐพ็Šฏ็Ž„็Ž‰็“œ็“ฆ็”˜็”Ÿ็”จ็”ฉ็”ฐ็”ฑ็”ฒ็”ณ็–‹็™ฝ็šฎ็šฟ็›ฎ็Ÿ›็Ÿข็Ÿณ็คบ็ฆพ็ฉด็ซ‹ไธžไธŸไน’ไน“ไนฉไบ™ไบคไบฆไบฅไปฟไผ‰ไผ™ไผŠไผ•ไผไผไผ‘ไผไปฒไปถไปปไปฐไปณไปฝไผไผ‹ๅ…‰ๅ…‡ๅ…†ๅ…ˆๅ…จ๏ฟฝ".split("");for(j=0;j!=D[165].length;++j)if(D[165][j].charCodeAt(0)!==65533){e[D[165][j]]=42240+j;d[42240+j]=D[165][j]}D[166]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ…ฑๅ†ๅ†ฐๅˆ—ๅˆ‘ๅˆ’ๅˆŽๅˆ–ๅŠฃๅŒˆๅŒกๅŒ ๅฐๅฑๅ‰ๅๅŒๅŠๅๅๅ‹ๅ„ๅ‘ๅๅˆๅƒๅŽๅ†ๅ’ๅ› ๅ›žๅ›ๅœณๅœฐๅœจๅœญๅœฌๅœฏๅœฉๅค™ๅคšๅคทๅคธๅฆ„ๅฅธๅฆƒๅฅฝๅฅนๅฆ‚ๅฆๅญ—ๅญ˜ๅฎ‡ๅฎˆๅฎ…ๅฎ‰ๅฏบๅฐ–ๅฑนๅทžๅธ†ๅนถๅนด๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅผๅผ›ๅฟ™ๅฟ–ๆˆŽๆˆŒๆˆๆˆๆ‰ฃๆ‰›ๆ‰˜ๆ”ถๆ—ฉๆ—จๆ—ฌๆ—ญๆ›ฒๆ›ณๆœ‰ๆœฝๆœดๆœฑๆœตๆฌกๆญคๆญปๆฐ–ๆฑๆฑ—ๆฑ™ๆฑŸๆฑ ๆฑๆฑ•ๆฑกๆฑ›ๆฑๆฑŽ็ฐ็‰Ÿ็‰็™พ็ซน็ฑณ็ณธ็ผถ็พŠ็พฝ่€่€ƒ่€Œ่€’่€ณ่ฟ่‚‰่‚‹่‚Œ่‡ฃ่‡ช่‡ณ่‡ผ่ˆŒ่ˆ›่ˆŸ่‰ฎ่‰ฒ่‰พ่™ซ่ก€่กŒ่กฃ่ฅฟ้˜กไธฒไบจไฝไฝไฝ‡ไฝ—ไฝžไผดไฝ›ไฝ•ไผฐไฝไฝ‘ไผฝไผบไผธไฝƒไฝ”ไผผไฝ†ไฝฃ๏ฟฝ".split("");for(j=0;j!=D[166].length;++j)if(D[166][j].charCodeAt(0)!==65533){e[D[166][j]]=42496+j;d[42496+j]=D[166][j]}D[167]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไฝœไฝ ไผฏไฝŽไผถไฝ™ไฝไฝˆไฝšๅ…Œๅ…‹ๅ…ๅ…ตๅ†ถๅ†ทๅˆฅๅˆคๅˆฉๅˆชๅˆจๅŠซๅŠฉๅŠชๅŠฌๅŒฃๅณๅตๅๅญๅžๅพๅฆๅ‘Žๅงๅ‘†ๅ‘ƒๅณๅ‘ˆๅ‘‚ๅ›ๅฉๅ‘Šๅนๅปๅธๅฎๅตๅถๅ ๅผๅ‘€ๅฑๅซๅŸๅฌๅ›ชๅ›ฐๅ›คๅ›ซๅŠๅ‘ๅ€ๅ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ‡ๅŽๅœพๅๅๅœปๅฃฏๅคพๅฆๅฆ’ๅฆจๅฆžๅฆฃๅฆ™ๅฆ–ๅฆๅฆคๅฆ“ๅฆŠๅฆฅๅญๅญœๅญšๅญ›ๅฎŒๅฎ‹ๅฎๅฐฌๅฑ€ๅฑๅฐฟๅฐพๅฒๅฒ‘ๅฒ”ๅฒŒๅทซๅธŒๅบๅบ‡ๅบŠๅปทๅผ„ๅผŸๅฝคๅฝขๅฝทๅฝนๅฟ˜ๅฟŒๅฟ—ๅฟๅฟฑๅฟซๅฟธๅฟชๆˆ’ๆˆ‘ๆŠ„ๆŠ—ๆŠ–ๆŠ€ๆ‰ถๆŠ‰ๆ‰ญๆŠŠๆ‰ผๆ‰พๆ‰นๆ‰ณๆŠ’ๆ‰ฏๆŠ˜ๆ‰ฎๆŠ•ๆŠ“ๆŠ‘ๆŠ†ๆ”นๆ”ปๆ”ธๆ—ฑๆ›ดๆŸๆŽๆๆๆ‘ๆœๆ–ๆžๆ‰ๆ†ๆ ๏ฟฝ".split("");for(j=0;j!=D[167].length;++j)if(D[167][j].charCodeAt(0)!==65533){e[D[167][j]]=42752+j;d[42752+j]=D[167][j]}D[168]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ“ๆ—ๆญฅๆฏๆฑ‚ๆฑžๆฒ™ๆฒๆฒˆๆฒ‰ๆฒ…ๆฒ›ๆฑชๆฑบๆฒๆฑฐๆฒŒๆฑจๆฒ–ๆฒ’ๆฑฝๆฒƒๆฑฒๆฑพๆฑดๆฒ†ๆฑถๆฒๆฒ”ๆฒ˜ๆฒ‚็ถ็ผ็ฝ็ธ็‰ข็‰ก็‰ ็‹„็‹‚็Ž–็”ฌ็”ซ็”ท็”ธ็š‚็›ฏ็Ÿฃ็ง็ง€็ฆฟ็ฉถ็ณป็ฝ•่‚–่‚“่‚่‚˜่‚›่‚š่‚ฒ่‰ฏ่Š’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่Š‹่Š่ฆ‹่ง’่จ€่ฐท่ฑ†่ฑ•่ฒ่ตค่ตฐ่ถณ่บซ่ปŠ่พ›่พฐ่ฟ‚่ฟ†่ฟ…่ฟ„ๅทก้‚‘้‚ข้‚ช้‚ฆ้‚ฃ้…‰้‡†้‡Œ้˜ฒ้˜ฎ้˜ฑ้˜ช้˜ฌไธฆไน–ไนณไบ‹ไบ›ไบžไบซไบฌไฝฏไพไพไฝณไฝฟไฝฌไพ›ไพ‹ไพ†ไพƒไฝฐไฝตไพˆไฝฉไฝปไพ–ไฝพไพไพ‘ไฝบๅ…”ๅ…’ๅ…•ๅ…ฉๅ…ทๅ…ถๅ…ธๅ†ฝๅ‡ฝๅˆปๅˆธๅˆทๅˆบๅˆฐๅˆฎๅˆถๅ‰ๅŠพๅŠปๅ’ๅ”ๅ“ๅ‘ๅฆๅทๅธๅนๅ–ๅ”ๅ—ๅ‘ณๅ‘ต๏ฟฝ".split("");for(j=0;j!=D[168].length;++j)if(D[168][j].charCodeAt(0)!==65533){e[D[168][j]]=43008+j;d[43008+j]=D[168][j]}D[169]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ’–ๅ‘ธๅ’•ๅ’€ๅ‘ปๅ‘ทๅ’„ๅ’’ๅ’†ๅ‘ผๅ’ๅ‘ฑๅ‘ถๅ’Œๅ’šๅ‘ขๅ‘จๅ’‹ๅ‘ฝๅ’Žๅ›บๅžƒๅทๅชๅฉๅกๅฆๅคๅผๅคœๅฅ‰ๅฅ‡ๅฅˆๅฅ„ๅฅ”ๅฆพๅฆปๅง”ๅฆนๅฆฎๅง‘ๅง†ๅงๅงๅง‹ๅง“ๅงŠๅฆฏๅฆณๅง’ๅง…ๅญŸๅญคๅญฃๅฎ—ๅฎšๅฎ˜ๅฎœๅฎ™ๅฎ›ๅฐšๅฑˆๅฑ…๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฑ†ๅฒทๅฒกๅฒธๅฒฉๅฒซๅฒฑๅฒณๅธ˜ๅธšๅธ–ๅธ•ๅธ›ๅธ‘ๅนธๅบšๅบ—ๅบœๅบ•ๅบ–ๅปถๅผฆๅผงๅผฉๅพ€ๅพๅฝฟๅฝผๅฟๅฟ ๅฟฝๅฟตๅฟฟๆ€ๆ€”ๆ€ฏๆ€ตๆ€–ๆ€ชๆ€•ๆ€กๆ€งๆ€ฉๆ€ซๆ€›ๆˆ–ๆˆ•ๆˆฟๆˆพๆ‰€ๆ‰ฟๆ‹‰ๆ‹Œๆ‹„ๆŠฟๆ‹‚ๆŠนๆ‹’ๆ‹›ๆŠซๆ‹“ๆ‹”ๆ‹‹ๆ‹ˆๆŠจๆŠฝๆŠผๆ‹ๆ‹™ๆ‹‡ๆ‹ๆŠตๆ‹šๆŠฑๆ‹˜ๆ‹–ๆ‹—ๆ‹†ๆŠฌๆ‹Žๆ”พๆ–งๆ–ผๆ—บๆ˜”ๆ˜“ๆ˜Œๆ˜†ๆ˜‚ๆ˜Žๆ˜€ๆ˜ๆ˜•ๆ˜Š๏ฟฝ".split("");for(j=0;j!=D[169].length;++j)if(D[169][j].charCodeAt(0)!==65533){e[D[169][j]]=43264+j;d[43264+j]=D[169][j]}D[170]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ˜‡ๆœๆœ‹ๆญๆž‹ๆž•ๆฑๆžœๆณๆทๆž‡ๆžๆž—ๆฏๆฐๆฟๆž‰ๆพๆžๆตๆžšๆž“ๆผๆชๆฒๆฌฃๆญฆๆญงๆญฟๆฐ“ๆฐ›ๆณฃๆณจๆณณๆฒฑๆณŒๆณฅๆฒณๆฒฝๆฒพๆฒผๆณขๆฒซๆณ•ๆณ“ๆฒธๆณ„ๆฒนๆณๆฒฎๆณ—ๆณ…ๆณฑๆฒฟๆฒปๆณกๆณ›ๆณŠๆฒฌๆณฏๆณœๆณ–ๆณ ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็‚•็‚Ž็‚’็‚Š็‚™็ˆฌ็ˆญ็ˆธ็‰ˆ็‰ง็‰ฉ็‹€็‹Ž็‹™็‹—็‹็Žฉ็Žจ็ŽŸ็Žซ็Žฅ็”ฝ็–็–™็–š็š„็›‚็›ฒ็›ด็Ÿฅ็Ÿฝ็คพ็ฅ€็ฅ็ง‰็งˆ็ฉบ็ฉน็ซบ็ณพ็ฝ”็พŒ็พ‹่€…่‚บ่‚ฅ่‚ข่‚ฑ่‚ก่‚ซ่‚ฉ่‚ด่‚ช่‚ฏ่‡ฅ่‡พ่ˆ่Šณ่Š่Š™่Šญ่Šฝ่ŠŸ่Šน่Šฑ่Šฌ่Šฅ่Šฏ่Šธ่Šฃ่Šฐ่Šพ่Šท่™Ž่™ฑๅˆ่กจ่ป‹่ฟŽ่ฟ”่ฟ‘้‚ต้‚ธ้‚ฑ้‚ถ้‡‡้‡‘้•ท้–€้˜œ้™€้˜ฟ้˜ป้™„๏ฟฝ".split("");for(j=0;j!=D[170].length;++j)if(D[170][j].charCodeAt(0)!==65533){e[D[170][j]]=43520+j;d[43520+j]=D[170][j]}D[171]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้™‚้šน้›จ้’้žไบŸไบญไบฎไฟกไพตไพฏไพฟไฟ ไฟ‘ไฟไฟไฟƒไพถไฟ˜ไฟŸไฟŠไฟ—ไพฎไฟไฟ„ไฟ‚ไฟšไฟŽไฟžไพทๅ…—ๅ†’ๅ†‘ๅ† ๅ‰Žๅ‰ƒๅ‰Šๅ‰ๅ‰Œๅ‰‹ๅ‰‡ๅ‹‡ๅ‹‰ๅ‹ƒๅ‹ๅŒๅ—ๅปๅŽšๅ›ๅ’ฌๅ“€ๅ’จๅ“Žๅ“‰ๅ’ธๅ’ฆๅ’ณๅ“‡ๅ“‚ๅ’ฝๅ’ชๅ“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ“„ๅ“ˆๅ’ฏๅ’ซๅ’ฑๅ’ปๅ’ฉๅ’งๅ’ฟๅ›ฟๅž‚ๅž‹ๅž ๅžฃๅžขๅŸŽๅžฎๅž“ๅฅ•ๅฅ‘ๅฅๅฅŽๅฅๅงœๅง˜ๅงฟๅงฃๅงจๅจƒๅงฅๅงชๅงšๅงฆๅจๅงปๅญฉๅฎฃๅฎฆๅฎคๅฎขๅฎฅๅฐๅฑŽๅฑๅฑๅฑ‹ๅณ™ๅณ’ๅททๅธๅธฅๅธŸๅนฝๅบ ๅบฆๅปบๅผˆๅผญๅฝฅๅพˆๅพ…ๅพŠๅพ‹ๅพ‡ๅพŒๅพ‰ๆ€’ๆ€ๆ€ ๆ€ฅๆ€Žๆ€จๆๆฐๆจๆขๆ†ๆƒๆฌๆซๆชๆคๆ‰ๆ‹œๆŒ–ๆŒ‰ๆ‹ผๆ‹ญๆŒๆ‹ฎๆ‹ฝๆŒ‡ๆ‹ฑๆ‹ท๏ฟฝ".split("");for(j=0;j!=D[171].length;++j)if(D[171][j].charCodeAt(0)!==65533){e[D[171][j]]=43776+j;d[43776+j]=D[171][j]}D[172]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ‹ฏๆ‹ฌๆ‹พๆ‹ดๆŒ‘ๆŒ‚ๆ”ฟๆ•…ๆ–ซๆ–ฝๆ—ขๆ˜ฅๆ˜ญๆ˜ ๆ˜งๆ˜ฏๆ˜Ÿๆ˜จๆ˜ฑๆ˜คๆ›ทๆŸฟๆŸ“ๆŸฑๆŸ”ๆŸๆŸฌๆžถๆžฏๆŸตๆŸฉๆŸฏๆŸ„ๆŸ‘ๆžดๆŸšๆŸฅๆžธๆŸๆŸžๆŸณๆžฐๆŸ™ๆŸขๆŸๆŸ’ๆญชๆฎƒๆฎ†ๆฎตๆฏ’ๆฏ—ๆฐŸๆณ‰ๆด‹ๆดฒๆดชๆตๆดฅๆดŒๆดฑๆดžๆด—๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆดปๆดฝๆดพๆดถๆด›ๆณตๆดนๆดงๆดธๆดฉๆดฎๆดตๆดŽๆดซ็‚ซ็‚บ็‚ณ็‚ฌ็‚ฏ็‚ญ็‚ธ็‚ฎ็‚ค็ˆฐ็‰ฒ็‰ฏ็‰ด็‹ฉ็‹ ็‹ก็Žท็Š็Žป็Žฒ็็€็Žณ็”š็”ญ็•็•Œ็•Ž็•‹็–ซ็–ค็–ฅ็–ข็–ฃ็™ธ็š†็š‡็šˆ็›ˆ็›†็›ƒ็›…็œ็›น็›ธ็œ‰็œ‹็›พ็›ผ็œ‡็Ÿœ็ ‚็ ”็ Œ็ ็ฅ†็ฅ‰็ฅˆ็ฅ‡็ฆน็ฆบ็ง‘็ง’็ง‹็ฉฟ็ช็ซฟ็ซฝ็ฑฝ็ด‚็ด…็ด€็ด‰็ด‡็ด„็ด†็ผธ็พŽ็พฟ่€„๏ฟฝ".split("");for(j=0;j!=D[172].length;++j)if(D[172][j].charCodeAt(0)!==65533){e[D[172][j]]=44032+j;d[44032+j]=D[172][j]}D[173]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่€่€่€‘่€ถ่ƒ–่ƒฅ่ƒš่ƒƒ่ƒ„่ƒŒ่ƒก่ƒ›่ƒŽ่ƒž่ƒค่ƒ่‡ด่ˆข่‹ง่Œƒ่Œ…่‹ฃ่‹›่‹ฆ่Œ„่‹ฅ่Œ‚่Œ‰่‹’่‹—่‹ฑ่Œ่‹œ่‹”่‹‘่‹ž่‹“่‹Ÿ่‹ฏ่Œ†่™่™น่™ป่™บ่ก่กซ่ฆ่ง”่จˆ่จ‚่จƒ่ฒž่ฒ ่ตด่ตณ่ถด่ป่ปŒ่ฟฐ่ฟฆ่ฟข่ฟช่ฟฅ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฟญ่ฟซ่ฟค่ฟจ้ƒŠ้ƒŽ้ƒ้ƒƒ้…‹้…Š้‡้–‚้™้™‹้™Œ้™้ข้ฉ้Ÿ‹้Ÿญ้Ÿณ้ ้ขจ้ฃ›้ฃŸ้ฆ–้ฆ™ไน˜ไบณๅ€Œๅ€ๅ€ฃไฟฏๅ€ฆๅ€ฅไฟธๅ€ฉๅ€–ๅ€†ๅ€ผๅ€Ÿๅ€šๅ€’ๅ€‘ไฟบๅ€€ๅ€”ๅ€จไฟฑๅ€กๅ€‹ๅ€™ๅ€˜ไฟณไฟฎๅ€ญๅ€ชไฟพๅ€ซๅ€‰ๅ…ผๅ†คๅ†ฅๅ†ขๅ‡ๅ‡Œๅ‡†ๅ‡‹ๅ‰–ๅ‰œๅ‰”ๅ‰›ๅ‰ๅŒชๅฟๅŽŸๅŽๅŸๅ“จๅ”ๅ”ๅ”ทๅ“ผๅ“ฅๅ“ฒๅ”†ๅ“บๅ””ๅ“ฉๅ“ญๅ“กๅ”‰ๅ“ฎๅ“ช๏ฟฝ".split("");for(j=0;j!=D[173].length;++j)if(D[173][j].charCodeAt(0)!==65533){e[D[173][j]]=44288+j;d[44288+j]=D[173][j]}D[174]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ“ฆๅ”งๅ”‡ๅ“ฝๅ”ๅœƒๅœ„ๅŸ‚ๅŸ”ๅŸ‹ๅŸƒๅ ‰ๅคๅฅ—ๅฅ˜ๅฅšๅจ‘ๅจ˜ๅจœๅจŸๅจ›ๅจ“ๅงฌๅจ ๅจฃๅจฉๅจฅๅจŒๅจ‰ๅญซๅฑ˜ๅฎฐๅฎณๅฎถๅฎดๅฎฎๅฎตๅฎนๅฎธๅฐ„ๅฑ‘ๅฑ•ๅฑๅณญๅณฝๅณปๅณชๅณจๅณฐๅณถๅดๅณดๅทฎๅธญๅธซๅบซๅบญๅบงๅผฑๅพ’ๅพ‘ๅพๆ™๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฃๆฅๆๆ•ๆญๆฉๆฏๆ‚„ๆ‚Ÿๆ‚šๆ‚ๆ‚”ๆ‚Œๆ‚…ๆ‚–ๆ‰‡ๆ‹ณๆŒˆๆ‹ฟๆŽๆŒพๆŒฏๆ•ๆ‚ๆ†ๆๆ‰ๆŒบๆๆŒฝๆŒชๆŒซๆŒจๆๆŒๆ•ˆๆ•‰ๆ–™ๆ—ๆ—…ๆ™‚ๆ™‰ๆ™ๆ™ƒๆ™’ๆ™Œๆ™…ๆ™ๆ›ธๆœ”ๆœ•ๆœ—ๆ กๆ ธๆกˆๆก†ๆก“ๆ นๆก‚ๆก”ๆ ฉๆขณๆ —ๆกŒๆก‘ๆ ฝๆŸดๆกๆก€ๆ ผๆกƒๆ ชๆก…ๆ “ๆ ˜ๆกๆฎŠๆฎ‰ๆฎทๆฐฃๆฐงๆฐจๆฐฆๆฐคๆณฐๆตชๆถ•ๆถˆๆถ‡ๆตฆๆตธๆตทๆต™ๆถ“๏ฟฝ".split("");for(j=0;j!=D[174].length;++j)if(D[174][j].charCodeAt(0)!==65533){e[D[174][j]]=44544+j;d[44544+j]=D[174][j]}D[175]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆตฌๆถ‰ๆตฎๆตšๆตดๆตฉๆถŒๆถŠๆตนๆถ…ๆตฅๆถ”็ƒŠ็ƒ˜็ƒค็ƒ™็ƒˆ็ƒ็ˆน็‰น็‹ผ็‹น็‹ฝ็‹ธ็‹ท็Ž†็ญ็‰็ฎ็ ็ช็ž็•”็•็•œ็•š็•™็–พ็—…็—‡็–ฒ็–ณ็–ฝ็–ผ็–น็—‚็–ธ็š‹็šฐ็›Š็›็›Ž็œฉ็œŸ็œ ็œจ็Ÿฉ็ ฐ็ ง็ ธ็ ็ ด็ ท๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ ฅ็ ญ็  ็ Ÿ็ ฒ็ฅ•็ฅ็ฅ ็ฅŸ็ฅ–็ฅž็ฅ็ฅ—็ฅš็งค็งฃ็งง็งŸ็งฆ็งฉ็ง˜็ช„็ชˆ็ซ™็ฌ†็ฌ‘็ฒ‰็ดก็ด—็ด‹็ดŠ็ด ็ดข็ด”็ด็ด•็ดš็ดœ็ด็ด™็ด›็ผบ็ฝŸ็พ”็ฟ…็ฟ่€†่€˜่€•่€™่€—่€ฝ่€ฟ่ƒฑ่„‚่ƒฐ่„…่ƒญ่ƒด่„†่ƒธ่ƒณ่„ˆ่ƒฝ่„Š่ƒผ่ƒฏ่‡ญ่‡ฌ่ˆ€่ˆ่ˆช่ˆซ่ˆจ่ˆฌ่Šป่Œซ่’่”่Š่Œธ่่‰่Œต่Œด่่Œฒ่Œน่Œถ่Œ—่€่Œฑ่Œจ่ƒ๏ฟฝ".split("");for(j=0;j!=D[175].length;++j)if(D[175][j].charCodeAt(0)!==65533){e[D[175][j]]=44800+j;d[44800+j]=D[175][j]}D[176]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่™”่šŠ่šช่š“่šค่šฉ่šŒ่šฃ่šœ่กฐ่กท่ข่ข‚่กฝ่กน่จ˜่จ่จŽ่จŒ่จ•่จŠ่จ—่จ“่จ–่จ่จ‘่ฑˆ่ฑบ่ฑน่ฒก่ฒข่ตท่บฌ่ป’่ป”่ป่พฑ้€้€†่ฟท้€€่ฟบ่ฟด้€ƒ่ฟฝ้€…่ฟธ้‚•้ƒก้ƒ้ƒข้…’้…้…Œ้‡˜้‡้‡—้‡œ้‡™้–ƒ้™ข้™ฃ้™ก๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้™›้™้™ค้™˜้™ž้šป้ฃข้ฆฌ้ชจ้ซ˜้ฌฅ้ฌฒ้ฌผไนพๅบๅฝๅœๅ‡ๅƒๅŒๅšๅ‰ๅฅๅถๅŽๅ•ๅตๅดๅทๅๅ€ๅฏๅญๅ…œๅ†•ๅ‡ฐๅ‰ชๅ‰ฏๅ‹’ๅ‹™ๅ‹˜ๅ‹•ๅŒๅŒๅŒ™ๅŒฟๅ€ๅŒพๅƒๆ›ผๅ•†ๅ•ชๅ•ฆๅ•„ๅ•žๅ•กๅ•ƒๅ•Šๅ”ฑๅ•–ๅ•ๅ••ๅ”ฏๅ•คๅ”ธๅ”ฎๅ•œๅ”ฌๅ•ฃๅ”ณๅ•ๅ•—ๅœˆๅœ‹ๅœ‰ๅŸŸๅ …ๅ Šๅ †ๅŸ ๅŸคๅŸบๅ ‚ๅ ตๅŸทๅŸนๅค ๅฅขๅจถๅฉๅฉ‰ๅฉฆๅฉชๅฉ€๏ฟฝ".split("");for(j=0;j!=D[176].length;++j)if(D[176][j].charCodeAt(0)!==65533){e[D[176][j]]=45056+j;d[45056+j]=D[176][j]}D[177]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅจผๅฉขๅฉšๅฉ†ๅฉŠๅญฐๅฏ‡ๅฏ…ๅฏ„ๅฏ‚ๅฎฟๅฏ†ๅฐ‰ๅฐˆๅฐ‡ๅฑ ๅฑœๅฑๅด‡ๅด†ๅดŽๅด›ๅด–ๅดขๅด‘ๅดฉๅด”ๅด™ๅดคๅดงๅด—ๅทขๅธธๅธถๅธณๅธทๅบทๅบธๅบถๅบตๅบพๅผตๅผทๅฝ—ๅฝฌๅฝฉๅฝซๅพ—ๅพ™ๅพžๅพ˜ๅพกๅพ ๅพœๆฟๆ‚ฃๆ‚‰ๆ‚ ๆ‚จๆƒ‹ๆ‚ดๆƒฆๆ‚ฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆƒ…ๆ‚ปๆ‚ตๆƒœๆ‚ผๆƒ˜ๆƒ•ๆƒ†ๆƒŸๆ‚ธๆƒšๆƒ‡ๆˆšๆˆ›ๆ‰ˆๆŽ ๆŽงๆฒๆŽ–ๆŽขๆŽฅๆทๆงๆŽ˜ๆŽชๆฑๆŽฉๆŽ‰ๆŽƒๆŽ›ๆซๆŽจๆŽ„ๆŽˆๆŽ™ๆŽกๆŽฌๆŽ’ๆŽๆŽ€ๆปๆฉๆจๆบๆ•ๆ•–ๆ•‘ๆ•™ๆ•—ๅ•Ÿๆ•ๆ•˜ๆ••ๆ•”ๆ–œๆ–›ๆ–ฌๆ—ๆ—‹ๆ—Œๆ—Žๆ™ๆ™šๆ™คๆ™จๆ™ฆๆ™žๆ›นๅ‹—ๆœ›ๆขๆขฏๆขขๆข“ๆขตๆกฟๆกถๆขฑๆขงๆข—ๆขฐๆขƒๆฃ„ๆขญๆข†ๆข…ๆข”ๆขๆขจๆขŸๆขกๆข‚ๆฌฒๆฎบ๏ฟฝ".split("");for(j=0;j!=D[177].length;++j)if(D[177][j].charCodeAt(0)!==65533){e[D[177][j]]=45312+j;d[45312+j]=D[177][j]}D[178]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฏซๆฏฌๆฐซๆถŽๆถผๆทณๆท™ๆถฒๆทกๆทŒๆทคๆทปๆทบๆธ…ๆท‡ๆท‹ๆถฏๆท‘ๆถฎๆทžๆทนๆถธๆททๆทตๆท…ๆท’ๆธšๆถตๆทšๆทซๆท˜ๆทชๆทฑๆทฎๆทจๆท†ๆท„ๆถชๆทฌๆถฟๆทฆ็ƒน็„‰็„Š็ƒฝ็ƒฏ็ˆฝ็‰ฝ็Š็Œœ็Œ›็Œ–็Œ“็Œ™็Ž‡็…็Š็ƒ็†็พ็็“ ็“ถ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็“ท็”œ็”ข็•ฅ็•ฆ็•ข็•ฐ็–็—”็—•็–ต็—Š็—็šŽ็›”็›’็››็œท็œพ็œผ็œถ็œธ็œบ็กซ็กƒ็กŽ็ฅฅ็ฅจ็ฅญ็งป็ช’็ช•็ฌ ็ฌจ็ฌ›็ฌฌ็ฌฆ็ฌ™็ฌž็ฌฎ็ฒ’็ฒ—็ฒ•็ต†็ตƒ็ตฑ็ดฎ็ดน็ดผ็ต€็ดฐ็ดณ็ต„็ดฏ็ต‚็ดฒ็ดฑ็ผฝ็พž็พš็ฟŒ็ฟŽ็ฟ’่€œ่Š่†่„ฏ่„–่„ฃ่„ซ่„ฉ่„ฐ่„ค่ˆ‚่ˆต่ˆท่ˆถ่ˆน่ŽŽ่Žž่Ž˜่ธ่Žข่Ž–่Žฝ่Žซ่Ž’่ŽŠ่Ž“่Ž‰่Ž ่ท่ป่ผ๏ฟฝ".split("");for(j=0;j!=D[178].length;++j)if(D[178][j].charCodeAt(0)!==65533){e[D[178][j]]=45568+j;d[45568+j]=D[178][j]}D[179]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่Ž†่Žง่™•ๅฝช่›‡่›€่šถ่›„่šต่›†่›‹่šฑ่šฏ่›‰่ก“่ขž่ขˆ่ขซ่ข’่ข–่ข่ข‹่ฆ“่ฆ่จช่จ่จฃ่จฅ่จฑ่จญ่จŸ่จ›่จข่ฑ‰่ฑš่ฒฉ่ฒฌ่ฒซ่ฒจ่ฒช่ฒง่ตง่ตฆ่ถพ่ถบ่ป›่ปŸ้€™้€้€š้€—้€ฃ้€Ÿ้€้€้€•้€ž้€ ้€้€ข้€–้€›้€”๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ƒจ้ƒญ้ƒฝ้…—้‡Ž้‡ต้‡ฆ้‡ฃ้‡ง้‡ญ้‡ฉ้–‰้™ช้™ต้™ณ้™ธ้™ฐ้™ด้™ถ้™ท้™ฌ้›€้›ช้›ฉ็ซ ็ซŸ้ ‚้ ƒ้ญš้ณฅ้นต้นฟ้บฅ้บปๅ‚ขๅ‚ๅ‚…ๅ‚™ๅ‚‘ๅ‚€ๅ‚–ๅ‚˜ๅ‚šๆœ€ๅ‡ฑๅ‰ฒๅ‰ดๅ‰ตๅ‰ฉๅ‹žๅ‹ๅ‹›ๅšๅŽฅๅ•ปๅ–€ๅ–งๅ•ผๅ–Šๅ–ๅ–˜ๅ–‚ๅ–œๅ–ชๅ–”ๅ–‡ๅ–‹ๅ–ƒๅ–ณๅ–ฎๅ–Ÿๅ”พๅ–ฒๅ–šๅ–ปๅ–ฌๅ–ฑๅ•พๅ–‰ๅ–ซๅ–™ๅœๅ ฏๅ ชๅ ดๅ คๅ ฐๅ ฑๅ กๅ ๅ  ๅฃนๅฃบๅฅ ๏ฟฝ".split("");for(j=0;j!=D[179].length;++j)if(D[179][j].charCodeAt(0)!==65533){e[D[179][j]]=45824+j;d[45824+j]=D[179][j]}D[180]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฉทๅชšๅฉฟๅช’ๅช›ๅชงๅญณๅญฑๅฏ’ๅฏŒๅฏ“ๅฏๅฐŠๅฐ‹ๅฐฑๅตŒๅตๅดดๅต‡ๅทฝๅน…ๅธฝๅน€ๅนƒๅนพๅปŠๅปๅป‚ๅป„ๅผผๅฝญๅพฉๅพชๅพจๆƒ‘ๆƒกๆ‚ฒๆ‚ถๆƒ ๆ„œๆ„ฃๆƒบๆ„•ๆƒฐๆƒปๆƒดๆ…จๆƒฑๆ„Žๆƒถๆ„‰ๆ„€ๆ„’ๆˆŸๆ‰‰ๆŽฃๆŽŒๆๆ€ๆฉๆ‰ๆ†ๆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ’ๆฃๆๆกๆ–ๆญๆฎๆถๆดๆชๆ›ๆ‘’ๆšๆนๆ•žๆ•ฆๆ•ขๆ•ฃๆ–‘ๆ–ๆ–ฏๆ™ฎๆ™ฐๆ™ดๆ™ถๆ™ฏๆš‘ๆ™บๆ™พๆ™ทๆ›พๆ›ฟๆœŸๆœๆฃบๆฃ•ๆฃ ๆฃ˜ๆฃ—ๆค…ๆฃŸๆฃตๆฃฎๆฃงๆฃนๆฃ’ๆฃฒๆฃฃๆฃ‹ๆฃๆคๆค’ๆคŽๆฃ‰ๆฃšๆฅฎๆฃปๆฌพๆฌบๆฌฝๆฎ˜ๆฎ–ๆฎผๆฏฏๆฐฎๆฐฏๆฐฌๆธฏๆธธๆน”ๆธกๆธฒๆนงๆนŠๆธ ๆธฅๆธฃๆธ›ๆน›ๆน˜ๆธคๆน–ๆนฎๆธญๆธฆๆนฏๆธดๆนๆธบๆธฌๆนƒๆธๆธพๆป‹๏ฟฝ".split("");for(j=0;j!=D[180].length;++j)if(D[180][j].charCodeAt(0)!==65533){e[D[180][j]]=46080+j;d[46080+j]=D[180][j]}D[181]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆบ‰ๆธ™ๆนŽๆนฃๆน„ๆนฒๆนฉๆนŸ็„™็„š็„ฆ็„ฐ็„ก็„ถ็…ฎ็„œ็‰Œ็Š„็Š€็Œถ็Œฅ็Œด็Œฉ็บ็ช็ณ็ข็ฅ็ต็ถ็ด็ฏ็›็ฆ็จ็”ฅ็”ฆ็•ซ็•ช็—ข็—›็—ฃ็—™็—˜็—ž็— ็™ป็™ผ็š–็š“็šด็›œ็็Ÿญ็ก็กฌ็กฏ็จ็จˆ็จ‹็จ…็จ€็ช˜๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ช—็ช–็ซฅ็ซฃ็ญ‰็ญ–็ญ†็ญ็ญ’็ญ”็ญ็ญ‹็ญ็ญ‘็ฒŸ็ฒฅ็ตž็ต็ตจ็ต•็ดซ็ตฎ็ตฒ็ตก็ตฆ็ตข็ตฐ็ตณๅ–„็ฟ”็ฟ•่€‹่’่‚…่…•่…”่…‹่…‘่…Ž่„น่…†่„พ่…Œ่…“่…ด่ˆ’่ˆœ่ฉ่ƒ่ธ่่ ่…่‹่่ฏ่ฑ่ด่‘—่Š่ฐ่Œ่Œ่ฝ่ฒ่Š่ธ่Ž่„่œ่‡่”่Ÿ่™›่›Ÿ่›™่›ญ่›”่››่›ค่›่›ž่ก—่ฃ่ฃ‚่ขฑ่ฆƒ่ฆ–่จป่ฉ ่ฉ•่ฉž่จผ่ฉ๏ฟฝ".split("");for(j=0;j!=D[181].length;++j)if(D[181][j].charCodeAt(0)!==65533){e[D[181][j]]=46336+j;d[46336+j]=D[181][j]}D[182]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฉ”่ฉ›่ฉ่ฉ†่จด่จบ่จถ่ฉ–่ฑก่ฒ‚่ฒฏ่ฒผ่ฒณ่ฒฝ่ณ่ฒป่ณ€่ฒด่ฒท่ฒถ่ฒฟ่ฒธ่ถŠ่ถ…่ถ่ทŽ่ท่ท‹่ทš่ท‘่ทŒ่ท›่ท†่ปป่ปธ่ปผ่พœ้€ฎ้€ต้€ฑ้€ธ้€ฒ้€ถ้„‚้ƒต้„‰้ƒพ้…ฃ้…ฅ้‡้ˆ”้ˆ•้ˆฃ้ˆ‰้ˆž้ˆ้ˆ้ˆ‡้ˆ‘้–”้–้–‹้–‘๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้–“้–’้–Ž้šŠ้šŽ้š‹้™ฝ้š…้š†้š้™ฒ้š„้›้›…้›„้›†้›‡้›ฏ้›ฒ้ŸŒ้ …้ †้ ˆ้ฃง้ฃช้ฃฏ้ฃฉ้ฃฒ้ฃญ้ฆฎ้ฆญ้ปƒ้ป้ป‘ไบ‚ๅ‚ญๅ‚ตๅ‚ฒๅ‚ณๅƒ…ๅ‚พๅ‚ฌๅ‚ทๅ‚ปๅ‚ฏๅƒ‡ๅ‰ฟๅ‰ทๅ‰ฝๅ‹Ÿๅ‹ฆๅ‹คๅ‹ขๅ‹ฃๅŒฏๅ—Ÿๅ—จๅ—“ๅ—ฆๅ—Žๅ—œๅ—‡ๅ—‘ๅ—ฃๅ—คๅ—ฏๅ—šๅ—กๅ—…ๅ—†ๅ—ฅๅ—‰ๅœ’ๅœ“ๅกžๅก‘ๅก˜ๅก—ๅกšๅก”ๅกซๅกŒๅกญๅกŠๅกขๅก’ๅก‹ๅฅงๅซๅซ‰ๅซŒๅชพๅชฝๅชผ๏ฟฝ".split("");for(j=0;j!=D[182].length;++j)if(D[182][j].charCodeAt(0)!==65533){e[D[182][j]]=46592+j;d[46592+j]=D[182][j]}D[183]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅชณๅซ‚ๅชฒๅตฉๅตฏๅนŒๅนนๅป‰ๅปˆๅผ’ๅฝ™ๅพฌๅพฎๆ„šๆ„ๆ…ˆๆ„Ÿๆƒณๆ„›ๆƒนๆ„ๆ„ˆๆ…Žๆ…Œๆ…„ๆ…ๆ„พๆ„ดๆ„งๆ„ๆ„†ๆ„ทๆˆกๆˆขๆ“ๆพๆžๆชๆญๆฝๆฌๆๆœๆ”ๆๆถๆ–ๆ—ๆ†ๆ•ฌๆ–Ÿๆ–ฐๆš—ๆš‰ๆš‡ๆšˆๆš–ๆš„ๆš˜ๆšๆœƒๆฆ”ๆฅญ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฅšๆฅทๆฅ ๆฅ”ๆฅตๆคฐๆฆ‚ๆฅŠๆฅจๆฅซๆฅžๆฅ“ๆฅนๆฆ†ๆฅๆฅฃๆฅ›ๆญ‡ๆญฒๆฏ€ๆฎฟๆฏ“ๆฏฝๆบขๆบฏๆป“ๆบถๆป‚ๆบๆบๆป‡ๆป…ๆบฅๆบ˜ๆบผๆบบๆบซๆป‘ๆบ–ๆบœๆป„ๆป”ๆบชๆบงๆบด็…Ž็…™็…ฉ็…ค็…‰็…ง็…œ็…ฌ็…ฆ็…Œ็…ฅ็…ž็…†็…จ็…–็ˆบ็‰’็Œท็…็Œฟ็Œพ็‘ฏ็‘š็‘•็‘Ÿ็‘ž็‘็ฟ็‘™็‘›็‘œ็•ถ็•ธ็˜€็—ฐ็˜็—ฒ็—ฑ็—บ็—ฟ็—ด็—ณ็›ž็›Ÿ็›็ซ็ฆ็ž็ฃ๏ฟฝ".split("");for(j=0;j!=D[183].length;++j)if(D[183][j].charCodeAt(0)!==65533){e[D[183][j]]=46848+j;d[46848+j]=D[183][j]}D[184]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็น็ช็ฌ็œ็ฅ็จ็ข็Ÿฎ็ขŽ็ขฐ็ข—็ข˜็ขŒ็ข‰็กผ็ข‘็ข“็กฟ็ฅบ็ฅฟ็ฆ่ฌ็ฆฝ็จœ็จš็จ ็จ”็จŸ็จž็ชŸ็ช ็ญท็ฏ€็ญ ็ญฎ็ญง็ฒฑ็ฒณ็ฒต็ถ“็ตน็ถ‘็ถ็ถ็ต›็ฝฎ็ฝฉ็ฝช็ฝฒ็พฉ็พจ็พค่–่˜่‚†่‚„่…ฑ่…ฐ่…ธ่…ฅ่…ฎ่…ณ่…ซ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่…น่…บ่…ฆ่ˆ…่‰‡่’‚่‘ท่ฝ่ฑ่‘ต่‘ฆ่‘ซ่‘‰่‘ฌ่‘›่ผ่ต่‘ก่‘ฃ่‘ฉ่‘ญ่‘†่™ž่™œ่™Ÿ่›น่œ“่œˆ่œ‡่œ€่›พ่›ป่œ‚่œƒ่œ†่œŠ่ก™่ฃŸ่ฃ”่ฃ™่ฃœ่ฃ˜่ฃ่ฃก่ฃŠ่ฃ•่ฃ’่ฆœ่งฃ่ฉซ่ฉฒ่ฉณ่ฉฆ่ฉฉ่ฉฐ่ช‡่ฉผ่ฉฃ่ช ่ฉฑ่ช…่ฉญ่ฉข่ฉฎ่ฉฌ่ฉน่ฉป่จพ่ฉจ่ฑข่ฒŠ่ฒ‰่ณŠ่ณ‡่ณˆ่ณ„่ฒฒ่ณƒ่ณ‚่ณ…่ทก่ทŸ่ทจ่ทฏ่ทณ่ทบ่ทช่ทค่ทฆ่บฒ่ผƒ่ผ‰่ปพ่ผŠ๏ฟฝ".split("");for(j=0;j!=D[184].length;++j)if(D[184][j].charCodeAt(0)!==65533){e[D[184][j]]=47104+j;d[47104+j]=D[184][j]}D[185]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่พŸ่พฒ้‹้Š้“้‚้”้€ผ้•้้‡้้Ž้้‘้€พ้้„’้„—้…ฌ้…ช้…ฉ้‡‰้ˆท้‰—้ˆธ้ˆฝ้‰€้ˆพ้‰›้‰‹้‰ค้‰‘้ˆด้‰‰้‰้‰…้ˆน้ˆฟ้‰š้–˜้š˜้š”้š•้›้›‹้›‰้›Š้›ท้›ป้›น้›ถ้–้ด้ถ้ ้ ‘้ “้ Š้ ’้ Œ้ฃผ้ฃด๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฃฝ้ฃพ้ฆณ้ฆฑ้ฆด้ซก้ณฉ้บ‚้ผŽ้ผ“้ผ ๅƒงๅƒฎๅƒฅๅƒ–ๅƒญๅƒšๅƒ•ๅƒๅƒ‘ๅƒฑๅƒŽๅƒฉๅ…ขๅ‡ณๅŠƒๅŠ‚ๅŒฑๅŽญๅ—พๅ˜€ๅ˜›ๅ˜—ๅ—ฝๅ˜”ๅ˜†ๅ˜‰ๅ˜ๅ˜Žๅ—ทๅ˜–ๅ˜Ÿๅ˜ˆๅ˜ๅ—ถๅœ˜ๅœ–ๅกตๅกพๅขƒๅข“ๅขŠๅกนๅข…ๅกฝๅฃฝๅคฅๅคขๅคคๅฅชๅฅฉๅซกๅซฆๅซฉๅซ—ๅซ–ๅซ˜ๅซฃๅญตๅฏžๅฏงๅฏกๅฏฅๅฏฆๅฏจๅฏขๅฏคๅฏŸๅฐๅฑขๅถ„ๅถ‡ๅน›ๅนฃๅน•ๅน—ๅน”ๅป“ๅป–ๅผŠๅฝ†ๅฝฐๅพนๆ…‡๏ฟฝ".split("");for(j=0;j!=D[185].length;++j)if(D[185][j].charCodeAt(0)!==65533){e[D[185][j]]=47360+j;d[47360+j]=D[185][j]}D[186]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ„ฟๆ…‹ๆ…ทๆ…ขๆ…ฃๆ…Ÿๆ…šๆ…˜ๆ…ตๆˆชๆ’‡ๆ‘˜ๆ‘”ๆ’คๆ‘ธๆ‘Ÿๆ‘บๆ‘‘ๆ‘งๆดๆ‘ญๆ‘ปๆ•ฒๆ–กๆ——ๆ—–ๆšขๆšจๆšๆฆœๆฆจๆฆ•ๆงๆฆฎๆง“ๆง‹ๆฆ›ๆฆทๆฆปๆฆซๆฆดๆงๆงๆฆญๆงŒๆฆฆๆงƒๆฆฃๆญ‰ๆญŒๆฐณๆผณๆผ”ๆปพๆผ“ๆปดๆผฉๆผพๆผ ๆผฌๆผๆผ‚ๆผข๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆปฟๆปฏๆผ†ๆผฑๆผธๆผฒๆผฃๆผ•ๆผซๆผฏๆพˆๆผชๆปฌๆผๆปฒๆปŒๆปท็†”็†™็…ฝ็†Š็†„็†’็ˆพ็Š’็Š–็„็็‘ค็‘ฃ็‘ช็‘ฐ็‘ญ็”„็–‘็˜ง็˜็˜‹็˜‰็˜“็›ก็›ฃ็ž„็ฝ็ฟ็ก็ฃ็ขŸ็ขง็ขณ็ขฉ็ขฃ็ฆŽ็ฆ็ฆ็จฎ็จฑ็ชช็ชฉ็ซญ็ซฏ็ฎก็ฎ•็ฎ‹็ญต็ฎ—็ฎ็ฎ”็ฎ็ฎธ็ฎ‡็ฎ„็ฒน็ฒฝ็ฒพ็ถป็ถฐ็ถœ็ถฝ็ถพ็ถ ็ทŠ็ถด็ถฒ็ถฑ็ถบ็ถข็ถฟ็ถต็ถธ็ถญ็ท’็ท‡็ถฌ๏ฟฝ".split("");for(j=0;j!=D[186].length;++j)if(D[186][j].charCodeAt(0)!==65533){e[D[186][j]]=47616+j;d[47616+j]=D[186][j]}D[187]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฝฐ็ฟ ็ฟก็ฟŸ่ž่š่‚‡่…่†€่†่†ˆ่†Š่…ฟ่†‚่‡ง่‡บ่ˆ‡่ˆ”่ˆž่‰‹่“‰่’ฟ่“†่“„่’™่’ž่’ฒ่’œ่“‹่’ธ่“€่““่’่’ผ่“‘่“Š่œฟ่œœ่œป่œข่œฅ่œด่œ˜่•่œท่œฉ่ฃณ่ค‚่ฃด่ฃน่ฃธ่ฃฝ่ฃจ่คš่ฃฏ่ชฆ่ชŒ่ชž่ชฃ่ช่ชก่ช“่ชค๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ชช่ชฅ่ชจ่ช˜่ช‘่ชš่ชง่ฑช่ฒ่ฒŒ่ณ“่ณ‘่ณ’่ตซ่ถ™่ถ•่ทผ่ผ”่ผ’่ผ•่ผ“่พฃ้ ้˜้œ้ฃ้™้ž้ข้้›้„™้„˜้„ž้…ต้…ธ้…ท้…ด้‰ธ้Š€้Š…้Š˜้Š–้‰ป้Š“้Šœ้Šจ้‰ผ้Š‘้–ก้–จ้–ฉ้–ฃ้–ฅ้–ค้š™้šœ้š›้›Œ้›’้œ€้ผ้ž…้Ÿถ้ —้ ˜้ขฏ้ขฑ้คƒ้ค…้คŒ้ค‰้ง้ชฏ้ชฐ้ซฆ้ญ้ญ‚้ณด้ณถ้ณณ้บผ้ผป้ฝŠๅ„„ๅ„€ๅƒปๅƒตๅƒนๅ„‚ๅ„ˆๅ„‰ๅ„…ๅ‡œ๏ฟฝ".split("");for(j=0;j!=D[187].length;++j)if(D[187][j].charCodeAt(0)!==65533){e[D[187][j]]=47872+j;d[47872+j]=D[187][j]}D[188]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅŠ‡ๅŠˆๅŠ‰ๅŠๅŠŠๅ‹ฐๅŽฒๅ˜ฎๅ˜ปๅ˜นๅ˜ฒๅ˜ฟๅ˜ดๅ˜ฉๅ™“ๅ™Žๅ™—ๅ™ดๅ˜ถๅ˜ฏๅ˜ฐๅข€ๅขŸๅขžๅขณๅขœๅขฎๅขฉๅขฆๅฅญๅฌ‰ๅซปๅฌ‹ๅซตๅฌŒๅฌˆๅฏฎๅฏฌๅฏฉๅฏซๅฑคๅฑฅๅถๅถ”ๅนขๅนŸๅนกๅปขๅปšๅปŸๅปๅปฃๅป ๅฝˆๅฝฑๅพทๅพตๆ…ถๆ…งๆ…ฎๆ…ๆ…•ๆ†‚๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ…ผๆ…ฐๆ…ซๆ…พๆ†งๆ†ๆ†ซๆ†Žๆ†ฌๆ†šๆ†คๆ†”ๆ†ฎๆˆฎๆ‘ฉๆ‘ฏๆ‘นๆ’žๆ’ฒๆ’ˆๆ’ๆ’ฐๆ’ฅๆ’“ๆ’•ๆ’ฉๆ’’ๆ’ฎๆ’ญๆ’ซๆ’šๆ’ฌๆ’™ๆ’ขๆ’ณๆ•ตๆ•ทๆ•ธๆšฎๆšซๆšดๆšฑๆจฃๆจŸๆงจๆจๆจžๆจ™ๆงฝๆจกๆจ“ๆจŠๆงณๆจ‚ๆจ…ๆงญๆจ‘ๆญๆญŽๆฎคๆฏ…ๆฏ†ๆผฟๆฝผๆพ„ๆฝ‘ๆฝฆๆฝ”ๆพ†ๆฝญๆฝ›ๆฝธๆฝฎๆพŽๆฝบๆฝฐๆฝคๆพ—ๆฝ˜ๆป•ๆฝฏๆฝ ๆฝŸ็†Ÿ็†ฌ็†ฑ็†จ็‰–็Š›็Ž็—็‘ฉ็’‹็’ƒ๏ฟฝ".split("");for(j=0;j!=D[188].length;++j)if(D[188][j].charCodeAt(0)!==65533){e[D[188][j]]=48128+j;d[48128+j]=D[188][j]}D[189]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็‘พ็’€็•ฟ็˜ ็˜ฉ็˜Ÿ็˜ค็˜ฆ็˜ก็˜ข็šš็šบ็›ค็žŽ็ž‡็žŒ็ž‘็ž‹็ฃ‹็ฃ…็ขบ็ฃŠ็ขพ็ฃ•็ขผ็ฃ็จฟ็จผ็ฉ€็จฝ็จท็จป็ชฏ็ชฎ็ฎญ็ฎฑ็ฏ„็ฎด็ฏ†็ฏ‡็ฏ็ฎ ็ฏŒ็ณŠ็ท ็ทด็ทฏ็ทป็ท˜็ทฌ็ท็ทจ็ทฃ็ทš็ทž็ทฉ็ถž็ท™็ทฒ็ทน็ฝต็ฝท็พฏ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฟฉ่€ฆ่†›่†œ่†่† ่†š่†˜่”—่”ฝ่”š่“ฎ่”ฌ่”ญ่”“่”‘่”ฃ่”ก่””่“ฌ่”ฅ่“ฟ่”†่ž‚่ด่ถ่ ่ฆ่ธ่จ่™่—่Œ่“่ก›่ก่ค่ค‡่ค’่ค“่ค•่คŠ่ชผ่ซ’่ซ‡่ซ„่ช•่ซ‹่ซธ่ชฒ่ซ‰่ซ‚่ชฟ่ชฐ่ซ–่ซ่ชถ่ชน่ซ›่ฑŒ่ฑŽ่ฑฌ่ณ ่ณž่ณฆ่ณค่ณฌ่ณญ่ณข่ณฃ่ณœ่ณช่ณก่ตญ่ถŸ่ถฃ่ธซ่ธ่ธ่ธข่ธ่ธฉ่ธŸ่ธก่ธž่บบ่ผ่ผ›่ผŸ่ผฉ่ผฆ่ผช่ผœ่ผž๏ฟฝ".split("");for(j=0;j!=D[189].length;++j)if(D[189][j].charCodeAt(0)!==65533){e[D[189][j]]=48384+j;d[48384+j]=D[189][j]}D[190]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ผฅ้ฉ้ฎ้จ้ญ้ท้„ฐ้„ญ้„ง้„ฑ้†‡้†‰้†‹้†ƒ้‹…้Šป้Šท้‹ช้Šฌ้‹ค้‹้Šณ้Šผ้‹’้‹‡้‹ฐ้Šฒ้–ญ้–ฑ้œ„้œ†้œ‡้œ‰้ ้ž้ž‹้ž้ ก้ ซ้ œ้ขณ้คŠ้ค“้ค’้ค˜้ง้ง้งŸ้ง›้ง‘้ง•้ง’้ง™้ชท้ซฎ้ซฏ้ฌง้ญ…้ญ„้ญท้ญฏ้ด†้ด‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ดƒ้บฉ้บพ้ปŽๅขจ้ฝ’ๅ„’ๅ„˜ๅ„”ๅ„ๅ„•ๅ†€ๅ†ชๅ‡ๅŠ‘ๅŠ“ๅ‹ณๅ™™ๅ™ซๅ™นๅ™ฉๅ™คๅ™ธๅ™ชๅ™จๅ™ฅๅ™ฑๅ™ฏๅ™ฌๅ™ขๅ™ถๅฃๅขพๅฃ‡ๅฃ…ๅฅฎๅฌๅฌดๅญธๅฏฐๅฐŽๅฝŠๆ†ฒๆ†‘ๆ†ฉๆ†Šๆ‡ๆ†ถๆ†พๆ‡Šๆ‡ˆๆˆฐๆ“…ๆ“ๆ“‹ๆ’ปๆ’ผๆ“šๆ“„ๆ“‡ๆ“‚ๆ“ๆ’ฟๆ“’ๆ“”ๆ’พๆ•ดๆ›†ๆ›‰ๆšนๆ›„ๆ›‡ๆšธๆจฝๆจธๆจบๆฉ™ๆฉซๆฉ˜ๆจนๆฉ„ๆฉขๆฉกๆฉ‹ๆฉ‡ๆจตๆฉŸๆฉˆๆญ™ๆญทๆฐ…ๆฟ‚ๆพฑๆพก๏ฟฝ".split("");for(j=0;j!=D[190].length;++j)if(D[190][j].charCodeAt(0)!==65533){e[D[190][j]]=48640+j;d[48640+j]=D[190][j]}D[191]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฟƒๆพคๆฟๆพงๆพณๆฟ€ๆพนๆพถๆพฆๆพ ๆพด็†พ็‡‰็‡็‡’็‡ˆ็‡•็†น็‡Ž็‡™็‡œ็‡ƒ็‡„็จ็’œ็’ฃ็’˜็’Ÿ็’ž็“ข็”Œ็”็˜ด็˜ธ็˜บ็›ง็›ฅ็ž ็žž็žŸ็žฅ็ฃจ็ฃš็ฃฌ็ฃง็ฆฆ็ฉ็ฉŽ็ฉ†็ฉŒ็ฉ‹็ชบ็ฏ™็ฐ‘็ฏ‰็ฏค็ฏ›็ฏก็ฏฉ็ฏฆ็ณ•็ณ–็ธŠ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ธ‘็ธˆ็ธ›็ธฃ็ธž็ธ็ธ‰็ธ็ฝน็พฒ็ฟฐ็ฟฑ็ฟฎ่€จ่†ณ่†ฉ่†จ่‡ป่ˆˆ่‰˜่‰™่•Š่•™่•ˆ่•จ่•ฉ่•ƒ่•‰่•ญ่•ช่•ž่žƒ่žŸ่žž่žข่ž่กก่คช่คฒ่คฅ่คซ่คก่ฆช่ฆฆ่ซฆ่ซบ่ซซ่ซฑ่ฌ€่ซœ่ซง่ซฎ่ซพ่ฌ่ฌ‚่ซท่ซญ่ซณ่ซถ่ซผ่ฑซ่ฑญ่ฒ“่ณด่น„่ธฑ่ธด่น‚่ธน่ธต่ผป่ผฏ่ผธ่ผณ่พจ่พฆ้ต้ด้ธ้ฒ้ผ้บ้„ด้†’้Œ ้Œถ้‹ธ้Œณ้Œฏ้Œข้‹ผ้Œซ้Œ„้Œš๏ฟฝ".split("");for(j=0;j!=D[191].length;++j)if(D[191][j].charCodeAt(0)!==65533){e[D[191][j]]=48896+j;d[48896+j]=D[191][j]}D[192]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้Œ้Œฆ้Œก้Œ•้Œฎ้Œ™้–ป้šง้šจ้šช้›•้œŽ้œ‘้œ–้œ้œ“้œ้›้œ้ฆ้ž˜้ ฐ้ ธ้ ป้ ท้ ญ้ น้ ค้ค้คจ้คž้ค›้คก้คš้งญ้งข้งฑ้ชธ้ชผ้ซป้ซญ้ฌจ้ฎ‘้ด•้ดฃ้ดฆ้ดจ้ด’้ด›้ป˜้ป”้พ้พœๅ„ชๅ„Ÿๅ„กๅ„ฒๅ‹ตๅšŽๅš€ๅšๅš…ๅš‡๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅšๅฃ•ๅฃ“ๅฃ‘ๅฃŽๅฌฐๅฌชๅฌคๅญบๅฐทๅฑจๅถผๅถบๅถฝๅถธๅนซๅฝŒๅพฝๆ‡‰ๆ‡‚ๆ‡‡ๆ‡ฆๆ‡‹ๆˆฒๆˆดๆ“Žๆ“Šๆ“˜ๆ“ ๆ“ฐๆ“ฆๆ“ฌๆ“ฑๆ“ขๆ“ญๆ–‚ๆ–ƒๆ›™ๆ›–ๆช€ๆช”ๆช„ๆชขๆชœๆซ›ๆชฃๆฉพๆช—ๆชๆช ๆญœๆฎฎๆฏšๆฐˆๆฟ˜ๆฟฑๆฟŸๆฟ ๆฟ›ๆฟคๆฟซๆฟฏๆพ€ๆฟฌๆฟกๆฟฉๆฟ•ๆฟฎๆฟฐ็‡ง็‡Ÿ็‡ฎ็‡ฆ็‡ฅ็‡ญ็‡ฌ็‡ด็‡ ็ˆต็‰†็ฐ็ฒ็’ฉ็’ฐ็’ฆ็’จ็™†็™‚็™Œ็›ช็žณ็žช็žฐ็žฌ๏ฟฝ".split("");for(j=0;j!=D[192].length;++j)if(D[192][j].charCodeAt(0)!==65533){e[D[192][j]]=49152+j;d[49152+j]=D[192][j]}D[193]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็žง็žญ็Ÿฏ็ฃท็ฃบ็ฃด็ฃฏ็ค็ฆง็ฆช็ฉ—็ชฟ็ฐ‡็ฐ็ฏพ็ฏท็ฐŒ็ฏ ็ณ ็ณœ็ณž็ณข็ณŸ็ณ™็ณ็ธฎ็ธพ็น†็ธท็ธฒ็นƒ็ธซ็ธฝ็ธฑ็น…็น็ธด็ธน็นˆ็ธต็ธฟ็ธฏ็ฝ„็ฟณ็ฟผ่ฑ่ฒ่ฐ่ฏ่ณ่‡†่‡ƒ่†บ่‡‚่‡€่†ฟ่†ฝ่‡‰่†พ่‡จ่ˆ‰่‰ฑ่–ช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่–„่•พ่–œ่–‘่–”่–ฏ่–›่–‡่–จ่–Š่™ง่Ÿ€่Ÿ‘่žณ่Ÿ’่Ÿ†่žซ่žป่žบ่Ÿˆ่Ÿ‹่คป่คถ่ฅ„่คธ่คฝ่ฆฌ่ฌŽ่ฌ—่ฌ™่ฌ›่ฌŠ่ฌ ่ฌ่ฌ„่ฌ่ฑ่ฐฟ่ฑณ่ณบ่ณฝ่ณผ่ณธ่ณป่ถจ่น‰่น‹่นˆ่นŠ่ฝ„่ผพ่ฝ‚่ฝ…่ผฟ้ฟ้ฝ้‚„้‚้‚‚้‚€้„น้†ฃ้†ž้†œ้้Ž‚้Œจ้ต้Š้ฅ้‹้Œ˜้พ้ฌ้›้ฐ้š้”้—Š้—‹้—Œ้—ˆ้—†้šฑ้šธ้›–้œœ้œž้ž ้Ÿ“้ก†้ขถ้คต้จ๏ฟฝ".split("");for(j=0;j!=D[193].length;++j)if(D[193][j].charCodeAt(0)!==65533){e[D[193][j]]=49408+j;d[49408+j]=D[193][j]}D[194]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้งฟ้ฎฎ้ฎซ้ฎช้ฎญ้ดป้ดฟ้บ‹้ป้ปž้ปœ้ป้ป›้ผพ้ฝ‹ๅขๅš•ๅšฎๅฃ™ๅฃ˜ๅฌธๅฝๆ‡ฃๆˆณๆ“ดๆ“ฒๆ“พๆ”†ๆ“บๆ“ปๆ“ทๆ–ทๆ›œๆœฆๆชณๆชฌๆซƒๆชปๆชธๆซ‚ๆชฎๆชฏๆญŸๆญธๆฎฏ็€‰็€‹ๆฟพ็€†ๆฟบ็€‘็€็‡ป็‡ผ็‡พ็‡ธ็ท็ต็’ง็’ฟ็”•็™–็™˜๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็™’็žฝ็žฟ็žป็žผ็คŽ็ฆฎ็ฉก็ฉข็ฉ ็ซ„็ซ…็ฐซ็ฐง็ฐช็ฐž็ฐฃ็ฐก็ณง็น”็น•็นž็นš็นก็น’็น™็ฝˆ็ฟน็ฟป่ท่ถ่‡่‡่ˆŠ่—่–ฉ่—่—่—‰่–ฐ่–บ่–น่–ฆ่Ÿฏ่Ÿฌ่Ÿฒ่Ÿ ่ฆ†่ฆฒ่งด่ฌจ่ฌน่ฌฌ่ฌซ่ฑ่ด…่น™่นฃ่นฆ่นค่นŸ่น•่ป€่ฝ‰่ฝ้‚‡้‚ƒ้‚ˆ้†ซ้†ฌ้‡้Ž”้ŽŠ้Ž–้Žข้Žณ้Žฎ้Žฌ้Žฐ้Ž˜้Žš้Ž—้—”้—–้—้—•้›ข้›œ้›™้››้›ž้œค้žฃ้žฆ๏ฟฝ".split("");for(j=0;j!=D[194].length;++j)if(D[194][j].charCodeAt(0)!==65533){e[D[194][j]]=49664+j;d[49664+j]=D[194][j]}D[195]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้žญ้Ÿน้ก้ก้กŒ้กŽ้ก“้ขบ้คพ้คฟ้คฝ้คฎ้ฆฅ้จŽ้ซ้ฌƒ้ฌ†้ญ้ญŽ้ญ้ฏŠ้ฏ‰้ฏฝ้ฏˆ้ฏ€้ต‘้ต้ต ้ป ้ผ•้ผฌๅ„ณๅšฅๅฃžๅฃŸๅฃขๅฏต้พๅปฌๆ‡ฒๆ‡ทๆ‡ถๆ‡ตๆ”€ๆ”ๆ› ๆ›ๆซฅๆซๆซšๆซ“็€›็€Ÿ็€จ็€š็€็€•็€˜็ˆ†็ˆ็‰˜็Šข็ธ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็บ็’ฝ็“Š็“ฃ็–‡็–†็™Ÿ็™ก็Ÿ‡็ค™็ฆฑ็ฉซ็ฉฉ็ฐพ็ฐฟ็ฐธ็ฐฝ็ฐท็ฑ€็นซ็นญ็นน็นฉ็นช็พ…็นณ็พถ็พน็พธ่‡˜่—ฉ่—่—ช่—•่—ค่—ฅ่—ท่Ÿป่ …่ ่Ÿน่Ÿพ่ฅ ่ฅŸ่ฅ–่ฅž่ญ่ญœ่ญ˜่ญ‰่ญš่ญŽ่ญ่ญ†่ญ™่ดˆ่ดŠ่นผ่นฒ่บ‡่นถ่นฌ่นบ่นด่ฝ”่ฝŽ่พญ้‚Š้‚‹้†ฑ้†ฎ้ก้‘้Ÿ้ƒ้ˆ้œ้้–้ข้้˜้ค้—้จ้—œ้šด้›ฃ้œช้œง้ก้Ÿœ้Ÿป้กž๏ฟฝ".split("");for(j=0;j!=D[195].length;++j)if(D[195][j].charCodeAt(0)!==65533){e[D[195][j]]=49920+j;d[49920+j]=D[195][j]}D[196]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ก˜้ก›้ขผ้ฅ…้ฅ‰้จ–้จ™้ฌ้ฏจ้ฏง้ฏ–้ฏ›้ถ‰้ตก้ตฒ้ตช้ตฌ้บ’้บ—้บ“้บดๅ‹ธๅšจๅšทๅšถๅšดๅšผๅฃคๅญ€ๅญƒๅญฝๅฏถๅท‰ๆ‡ธๆ‡บๆ”˜ๆ””ๆ”™ๆ›ฆๆœงๆซฌ็€พ็€ฐ็€ฒ็ˆ็ป็“็™ข็™ฅ็คฆ็คช็คฌ็คซ็ซ‡็ซถ็ฑŒ็ฑƒ็ฑ็ณฏ็ณฐ่พฎ็นฝ็นผ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็บ‚็ฝŒ่€€่‡š่‰ฆ่—ป่—น่˜‘่—บ่˜†่˜‹่˜‡่˜Š่ ”่ •่ฅค่ฆบ่งธ่ญฐ่ญฌ่ญฆ่ญฏ่ญŸ่ญซ่ด่ด่บ‰่บ่บ…่บ‚้†ด้‡‹้˜้ƒ้ฝ้—ก้œฐ้ฃ„้ฅ’้ฅ‘้ฆจ้จซ้จฐ้จท้จต้ฐ“้ฐ้นน้บต้ปจ้ผฏ้ฝŸ้ฝฃ้ฝกๅ„ทๅ„ธๅ›ๅ›€ๅ›‚ๅค”ๅฑฌๅทๆ‡ผๆ‡พๆ”ๆ”œๆ–•ๆ›ฉๆซปๆฌ„ๆซบๆฎฒ็Œ็ˆ›็Šง็“–็“”็™ฉ็Ÿ“็ฑ็บ็บŒ็พผ่˜—่˜ญ่˜š่ ฃ่ ข่ ก่ Ÿ่ฅช่ฅฌ่ฆฝ่ญด๏ฟฝ".split("");for(j=0;j!=D[196].length;++j)if(D[196][j].charCodeAt(0)!==65533){e[D[196][j]]=50176+j;d[50176+j]=D[196][j]}D[197]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ญท่ญฝ่ด“่บŠ่บ่บ‹่ฝŸ่พฏ้†บ้ฎ้ณ้ต้บ้ธ้ฒ้ซ้—ข้œธ้œน้œฒ้Ÿฟ้กง้กฅ้ฅ—้ฉ…้ฉƒ้ฉ€้จพ้ซ้ญ”้ญ‘้ฐญ้ฐฅ้ถฏ้ถด้ท‚้ถธ้บ้ปฏ้ผ™้ฝœ้ฝฆ้ฝงๅ„ผๅ„ปๅ›ˆๅ›Šๅ›‰ๅญฟๅท”ๅท’ๅฝŽๆ‡ฟๆ”คๆฌŠๆญก็‘็˜็Ž€็“ค็–Š็™ฎ็™ฌ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฆณ็ฑ ็ฑŸ่พ่ฝ่‡Ÿ่ฅฒ่ฅฏ่งผ่ฎ€่ด–่ด—่บ‘่บ“่ฝก้…ˆ้‘„้‘‘้‘’้œฝ้œพ้Ÿƒ้Ÿ้กซ้ฅ•้ฉ•้ฉ้ซ’้ฌš้ฑ‰้ฐฑ้ฐพ้ฐป้ท“้ท—้ผด้ฝฌ้ฝช้พ”ๅ›Œๅท–ๆˆ€ๆ”ฃๆ”ซๆ”ชๆ›ฌๆฌ็“š็ซŠ็ฑค็ฑฃ็ฑฅ็บ“็บ–็บ”่‡ข่˜ธ่˜ฟ่ ฑ่ฎŠ้‚้‚้‘ฃ้‘ ้‘ค้จ้กฏ้ฅœ้ฉš้ฉ›้ฉ—้ซ“้ซ”้ซ‘้ฑ”้ฑ—้ฑ–้ทฅ้บŸ้ปดๅ›‘ๅฃฉๆ”ฌ็ž็™ฑ็™ฒ็Ÿ—็ฝ็พˆ่ ถ่ น่กข่ฎ“่ฎ’๏ฟฝ".split("");for(j=0;j!=D[197].length;++j)if(D[197][j].charCodeAt(0)!==65533){e[D[197][j]]=50432+j;d[50432+j]=D[197][j]}D[198]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฎ–่‰ท่ด›้‡€้‘ช้‚้ˆ้„้Ÿ†้กฐ้ฉŸ้ฌข้ญ˜้ฑŸ้ทน้ทบ้นผ้นฝ้ผ‡้ฝท้ฝฒๅปณๆฌ–็ฃ็ฑฌ็ฑฎ่ ป่ง€่บก้‡้‘ฒ้‘ฐ้กฑ้ฅž้ซ–้ฌฃ้ปŒ็ค็Ÿš่ฎš้‘ท้Ÿ‰้ฉข้ฉฅ็บœ่ฎœ่บช้‡…้‘ฝ้‘พ้‘ผ้ฑท้ฑธ้ปท่ฑ”้‘ฟ้ธš็ˆจ้ฉช้ฌฑ้ธ›้ธž็ฑฒ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ".split("");for(j=0;j!=D[198].length;++j)if(D[198][j].charCodeAt(0)!==65533){e[D[198][j]]=50688+j;d[50688+j]=D[198][j]}D[201]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝไน‚ไนœๅ‡ตๅŒšๅŽ‚ไธ‡ไธŒไน‡ไบๅ›—๏จŒๅฑฎๅฝณไธๅ†‡ไธŽไธฎไบ“ไป‚ไป‰ไปˆๅ†˜ๅ‹ผๅฌๅŽนๅœ ๅคƒๅคฌๅฐๅทฟๆ—กๆฎณๆฏŒๆฐ”็ˆฟไธฑไธผไปจไปœไปฉไปกไปไปšๅˆŒๅŒœๅŒๅœขๅœฃๅค—ๅคฏๅฎๅฎ„ๅฐ’ๅฐปๅฑดๅฑณๅธ„ๅบ€ๅบ‚ๅฟ‰ๆˆ‰ๆ‰ๆฐ•๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฐถๆฑƒๆฐฟๆฐป็Šฎ็Šฐ็ŽŠ็ฆธ่‚Š้˜žไผŽไผ˜ไผฌไปตไผ”ไปฑไผ€ไปทไผˆไผไผ‚ไผ…ไผขไผ“ไผ„ไปดไผ’ๅ†ฑๅˆ“ๅˆ‰ๅˆๅŠฆๅŒขๅŒŸๅๅŽŠๅ‡ๅ›กๅ›Ÿๅœฎๅœชๅœดๅคผๅฆ€ๅฅผๅฆ…ๅฅปๅฅพๅฅทๅฅฟๅญ–ๅฐ•ๅฐฅๅฑผๅฑบๅฑปๅฑพๅทŸๅนตๅบ„ๅผ‚ๅผšๅฝดๅฟ•ๅฟ”ๅฟๆ‰œๆ‰žๆ‰คๆ‰กๆ‰ฆๆ‰ขๆ‰™ๆ‰ ๆ‰šๆ‰ฅๆ—ฏๆ—ฎๆœพๆœนๆœธๆœปๆœบๆœฟๆœผๆœณๆฐ˜ๆฑ†ๆฑ’ๆฑœๆฑๆฑŠๆฑ”ๆฑ‹๏ฟฝ".split("");for(j=0;j!=D[201].length;++j)if(D[201][j].charCodeAt(0)!==65533){e[D[201][j]]=51456+j;d[51456+j]=D[201][j]}D[202]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฑŒ็ฑ็‰ž็Šด็Šต็ŽŽ็”ช็™ฟ็ฉต็ฝ‘่‰ธ่‰ผ่Š€่‰ฝ่‰ฟ่™่ฅพ้‚™้‚—้‚˜้‚›้‚”้˜ข้˜ค้˜ ้˜ฃไฝ–ไผปไฝขไฝ‰ไฝ“ไฝคไผพไฝงไฝ’ไฝŸไฝไฝ˜ไผญไผณไผฟไฝกๅ†ๅ†นๅˆœๅˆžๅˆกๅŠญๅŠฎๅŒ‰ๅฃๅฒๅŽŽๅŽๅฐๅทๅชๅ‘”ๅ‘…ๅ™ๅœๅฅๅ˜๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฝๅ‘ๅ‘ๅจๅคๅ‘‡ๅ›ฎๅ›งๅ›ฅๅๅ…ๅŒๅ‰ๅ‹ๅ’ๅค†ๅฅ€ๅฆฆๅฆ˜ๅฆ ๅฆ—ๅฆŽๅฆขๅฆๅฆๅฆงๅฆกๅฎŽๅฎ’ๅฐจๅฐชๅฒๅฒๅฒˆๅฒ‹ๅฒ‰ๅฒ’ๅฒŠๅฒ†ๅฒ“ๅฒ•ๅท ๅธŠๅธŽๅบ‹ๅบ‰ๅบŒๅบˆๅบๅผ…ๅผๅฝธๅฝถๅฟ’ๅฟ‘ๅฟๅฟญๅฟจๅฟฎๅฟณๅฟกๅฟคๅฟฃๅฟบๅฟฏๅฟทๅฟปๆ€€ๅฟดๆˆบๆŠƒๆŠŒๆŠŽๆŠๆŠ”ๆŠ‡ๆ‰ฑๆ‰ปๆ‰บๆ‰ฐๆŠๆŠˆๆ‰ทๆ‰ฝๆ‰ฒๆ‰ดๆ”ทๆ—ฐๆ—ดๆ—ณๆ—ฒๆ—ตๆ…ๆ‡๏ฟฝ".split("");for(j=0;j!=D[202].length;++j)if(D[202][j].charCodeAt(0)!==65533){e[D[202][j]]=51712+j;d[51712+j]=D[202][j]}D[203]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ™ๆ•ๆŒๆˆๆๆๆšๆ‹ๆฏๆฐ™ๆฐšๆฑธๆฑงๆฑซๆฒ„ๆฒ‹ๆฒๆฑฑๆฑฏๆฑฉๆฒšๆฑญๆฒ‡ๆฒ•ๆฒœๆฑฆๆฑณๆฑฅๆฑปๆฒŽ็ด็บ็‰ฃ็Šฟ็Šฝ็‹ƒ็‹†็‹็Šบ็‹…็Ž•็Ž—็Ž“็Ž”็Ž’็”บ็”น็–”็–•็š็คฝ่€ด่‚•่‚™่‚่‚’่‚œ่Š่Š่Š…่ŠŽ่Š‘่Š“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ŠŠ่Šƒ่Š„่ฑธ่ฟ‰่พฟ้‚Ÿ้‚ก้‚ฅ้‚ž้‚ง้‚ ้˜ฐ้˜จ้˜ฏ้˜ญไธณไพ˜ไฝผไพ…ไฝฝไพ€ไพ‡ไฝถไฝดไพ‰ไพ„ไฝทไฝŒไพ—ไฝชไพšไฝนไพไฝธไพไพœไพ”ไพžไพ’ไพ‚ไพ•ไฝซไฝฎๅ†žๅ†ผๅ†พๅˆตๅˆฒๅˆณๅ‰†ๅˆฑๅŠผๅŒŠๅŒ‹ๅŒผๅŽ’ๅŽ”ๅ’‡ๅ‘ฟๅ’ๅ’‘ๅ’‚ๅ’ˆๅ‘ซๅ‘บๅ‘พๅ‘ฅๅ‘ฌๅ‘ดๅ‘ฆๅ’ๅ‘ฏๅ‘กๅ‘ ๅ’˜ๅ‘ฃๅ‘งๅ‘คๅ›ทๅ›นๅฏๅฒๅญๅซๅฑๅฐๅถๅž€ๅตๅปๅณๅดๅข๏ฟฝ".split("");for(j=0;j!=D[203].length;++j)if(D[203][j].charCodeAt(0)!==65533){e[D[203][j]]=51968+j;d[51968+j]=D[203][j]}D[204]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅจๅฝๅคŒๅฅ…ๅฆตๅฆบๅงๅงŽๅฆฒๅงŒๅงๅฆถๅฆผๅงƒๅง–ๅฆฑๅฆฝๅง€ๅงˆๅฆดๅง‡ๅญขๅญฅๅฎ“ๅฎ•ๅฑ„ๅฑ‡ๅฒฎๅฒคๅฒ ๅฒตๅฒฏๅฒจๅฒฌๅฒŸๅฒฃๅฒญๅฒขๅฒชๅฒงๅฒๅฒฅๅฒถๅฒฐๅฒฆๅธ—ๅธ”ๅธ™ๅผจๅผขๅผฃๅผคๅฝ”ๅพ‚ๅฝพๅฝฝๅฟžๅฟฅๆ€ญๆ€ฆๆ€™ๆ€ฒๆ€‹๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ€ดๆ€Šๆ€—ๆ€ณๆ€šๆ€žๆ€ฌๆ€ขๆ€ๆ€ๆ€ฎๆ€“ๆ€‘ๆ€Œๆ€‰ๆ€œๆˆ”ๆˆฝๆŠญๆŠดๆ‹‘ๆŠพๆŠชๆŠถๆ‹ŠๆŠฎๆŠณๆŠฏๆŠปๆŠฉๆŠฐๆŠธๆ”ฝๆ–จๆ–ปๆ˜‰ๆ—ผๆ˜„ๆ˜’ๆ˜ˆๆ—ปๆ˜ƒๆ˜‹ๆ˜ๆ˜…ๆ—ฝๆ˜‘ๆ˜ๆ›ถๆœŠๆž…ๆฌๆžŽๆž’ๆถๆปๆž˜ๆž†ๆž„ๆดๆžๆžŒๆบๆžŸๆž‘ๆž™ๆžƒๆฝๆžๆธๆนๆž”ๆฌฅๆฎ€ๆญพๆฏžๆฐๆฒ“ๆณฌๆณซๆณฎๆณ™ๆฒถๆณ”ๆฒญๆณงๆฒทๆณๆณ‚ๆฒบๆณƒๆณ†ๆณญๆณฒ๏ฟฝ".split("");for(j=0;j!=D[204].length;++j)if(D[204][j].charCodeAt(0)!==65533){e[D[204][j]]=52224+j;d[52224+j]=D[204][j]}D[205]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆณ’ๆณๆฒดๆฒŠๆฒๆฒ€ๆณžๆณ€ๆดฐๆณๆณ‡ๆฒฐๆณนๆณๆณฉๆณ‘็‚”็‚˜็‚…็‚“็‚†็‚„็‚‘็‚–็‚‚็‚š็‚ƒ็‰ช็‹–็‹‹็‹˜็‹‰็‹œ็‹’็‹”็‹š็‹Œ็‹‘็Žค็Žก็Žญ็Žฆ็Žข็Ž ็Žฌ็Ž็“็“จ็”ฟ็•€็”พ็–Œ็–˜็šฏ็›ณ็›ฑ็›ฐ็›ต็Ÿธ็Ÿผ็Ÿน็Ÿป็Ÿบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็Ÿท็ฅ‚็คฟ็ง…็ฉธ็ฉป็ซป็ฑต็ณฝ่€ต่‚่‚ฎ่‚ฃ่‚ธ่‚ต่‚ญ่ˆ ่Š ่‹€่Šซ่Šš่Š˜่Š›่Šต่Šง่Šฎ่Šผ่Šž่Šบ่Šด่Šจ่Šก่Šฉ่‹‚่Šค่‹ƒ่Šถ่Šข่™ฐ่™ฏ่™ญ่™ฎ่ฑ–่ฟ’่ฟ‹่ฟ“่ฟ่ฟ–่ฟ•่ฟ—้‚ฒ้‚ด้‚ฏ้‚ณ้‚ฐ้˜น้˜ฝ้˜ผ้˜บ้™ƒไฟไฟ…ไฟ“ไพฒไฟ‰ไฟ‹ไฟไฟ”ไฟœไฟ™ไพปไพณไฟ›ไฟ‡ไฟ–ไพบไฟ€ไพนไฟฌๅ‰„ๅ‰‰ๅ‹€ๅ‹‚ๅŒฝๅผๅŽ—ๅŽ–ๅŽ™ๅŽ˜ๅ’บๅ’กๅ’ญๅ’ฅๅ“๏ฟฝ".split("");for(j=0;j!=D[205].length;++j)if(D[205][j].charCodeAt(0)!==65533){e[D[205][j]]=52480+j;d[52480+j]=D[205][j]}D[206]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ“ƒ่Œๅ’ทๅ’ฎๅ“–ๅ’ถๅ“…ๅ“†ๅ’ ๅ‘ฐๅ’ผๅ’ขๅ’พๅ‘ฒๅ“žๅ’ฐๅžตๅžžๅžŸๅžคๅžŒๅž—ๅžๅž›ๅž”ๅž˜ๅžๅž™ๅžฅๅžšๅž•ๅฃดๅคๅฅ“ๅงกๅงžๅงฎๅจ€ๅงฑๅงๅงบๅงฝๅงผๅงถๅงคๅงฒๅงทๅง›ๅงฉๅงณๅงตๅง ๅงพๅงดๅงญๅฎจๅฑŒๅณๅณ˜ๅณŒๅณ—ๅณ‹ๅณ›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅณžๅณšๅณ‰ๅณ‡ๅณŠๅณ–ๅณ“ๅณ”ๅณๅณˆๅณ†ๅณŽๅณŸๅณธๅทนๅธกๅธขๅธฃๅธ ๅธคๅบฐๅบคๅบขๅบ›ๅบฃๅบฅๅผ‡ๅผฎๅฝ–ๅพ†ๆ€ทๆ€นๆ”ๆฒๆžๆ…ๆ“ๆ‡ๆ‰ๆ›ๆŒๆ€ๆ‚ๆŸๆ€คๆ„ๆ˜ๆฆๆฎๆ‰‚ๆ‰ƒๆ‹ๆŒๆŒ‹ๆ‹ตๆŒŽๆŒƒๆ‹ซๆ‹นๆŒๆŒŒๆ‹ธๆ‹ถๆŒ€ๆŒ“ๆŒ”ๆ‹บๆŒ•ๆ‹ปๆ‹ฐๆ•ๆ•ƒๆ–ชๆ–ฟๆ˜ถๆ˜กๆ˜ฒๆ˜ตๆ˜œๆ˜ฆๆ˜ขๆ˜ณๆ˜ซๆ˜บๆ˜ๆ˜ดๆ˜นๆ˜ฎๆœๆœๆŸๆŸฒๆŸˆๆžบ๏ฟฝ".split("");for(j=0;j!=D[206].length;++j)if(D[206][j].charCodeAt(0)!==65533){e[D[206][j]]=52736+j;d[52736+j]=D[206][j]}D[207]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆŸœๆžปๆŸธๆŸ˜ๆŸ€ๆžทๆŸ…ๆŸซๆŸคๆŸŸๆžตๆŸๆžณๆŸทๆŸถๆŸฎๆŸฃๆŸ‚ๆžนๆŸŽๆŸงๆŸฐๆžฒๆŸผๆŸ†ๆŸญๆŸŒๆžฎๆŸฆๆŸ›ๆŸบๆŸ‰ๆŸŠๆŸƒๆŸชๆŸ‹ๆฌจๆฎ‚ๆฎ„ๆฎถๆฏ–ๆฏ˜ๆฏ ๆฐ ๆฐกๆดจๆดดๆดญๆดŸๆดผๆดฟๆด’ๆดŠๆณšๆดณๆด„ๆด™ๆดบๆดšๆด‘ๆด€ๆดๆต‚๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆดๆด˜ๆดทๆดƒๆดๆต€ๆด‡ๆด ๆดฌๆดˆๆดขๆด‰ๆด็‚ท็‚Ÿ็‚พ็‚ฑ็‚ฐ็‚ก็‚ด็‚ต็‚ฉ็‰็‰‰็‰Š็‰ฌ็‰ฐ็‰ณ็‰ฎ็‹Š็‹ค็‹จ็‹ซ็‹Ÿ็‹ช็‹ฆ็‹ฃ็Ž…็Œ็‚็ˆ็…็Žน็Žถ็Žต็Žด็ซ็Žฟ็‡็Žพ็ƒ็†็Žธ็‹็“ฌ็“ฎ็”ฎ็•‡็•ˆ็–ง็–ช็™น็›„็œˆ็œƒ็œ„็œ…็œŠ็›ท็›ป็›บ็Ÿง็Ÿจ็ †็ ‘็ ’็ …็ ็ ็ Ž็ ‰็ ƒ็ “็ฅŠ็ฅŒ็ฅ‹็ฅ…็ฅ„็ง•็ง็ง็ง–็งŽ็ช€๏ฟฝ".split("");for(j=0;j!=D[207].length;++j)if(D[207][j].charCodeAt(0)!==65533){e[D[207][j]]=52992+j;d[52992+j]=D[207][j]}D[208]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฉพ็ซ‘็ฌ€็ฌ็ฑบ็ฑธ็ฑน็ฑฟ็ฒ€็ฒ็ดƒ็ดˆ็ด็ฝ˜็พ‘็พ็พพ่€‡่€Ž่€่€”่€ท่ƒ˜่ƒ‡่ƒ ่ƒ‘่ƒˆ่ƒ‚่ƒ่ƒ…่ƒฃ่ƒ™่ƒœ่ƒŠ่ƒ•่ƒ‰่ƒ่ƒ—่ƒฆ่ƒ่‡ฟ่ˆก่Š”่‹™่‹พ่‹น่Œ‡่‹จ่Œ€่‹•่Œบ่‹ซ่‹–่‹ด่‹ฌ่‹ก่‹ฒ่‹ต่ŒŒ่‹ป่‹ถ่‹ฐ่‹ช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่‹ค่‹ ่‹บ่‹ณ่‹ญ่™ท่™ด่™ผ่™ณ่ก่กŽ่กง่กช่กฉ่ง“่จ„่จ‡่ตฒ่ฟฃ่ฟก่ฟฎ่ฟ ้ƒฑ้‚ฝ้‚ฟ้ƒ•้ƒ…้‚พ้ƒ‡้ƒ‹้ƒˆ้‡”้‡“้™”้™้™‘้™“้™Š้™Žๅ€žๅ€…ๅ€‡ๅ€“ๅ€ขๅ€ฐๅ€›ไฟตไฟดๅ€ณๅ€ทๅ€ฌไฟถไฟทๅ€—ๅ€œๅ€ ๅ€งๅ€ตๅ€ฏๅ€ฑๅ€Žๅ…šๅ†”ๅ†“ๅ‡Šๅ‡„ๅ‡…ๅ‡ˆๅ‡Žๅ‰กๅ‰šๅ‰’ๅ‰žๅ‰Ÿๅ‰•ๅ‰ขๅ‹ๅŒŽๅŽžๅ”ฆๅ“ขๅ”—ๅ”’ๅ“งๅ“ณๅ“คๅ”šๅ“ฟๅ”„ๅ”ˆๅ“ซๅ”‘ๅ”…ๅ“ฑ๏ฟฝ".split("");for(j=0;j!=D[208].length;++j)if(D[208][j].charCodeAt(0)!==65533){e[D[208][j]]=53248+j;d[53248+j]=D[208][j]}D[209]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ”Šๅ“ปๅ“ทๅ“ธๅ“ ๅ”Žๅ”ƒๅ”‹ๅœๅœ‚ๅŸŒๅ ฒๅŸ•ๅŸ’ๅžบๅŸ†ๅžฝๅžผๅžธๅžถๅžฟๅŸ‡ๅŸๅžนๅŸๅคŽๅฅŠๅจ™ๅจ–ๅจญๅจฎๅจ•ๅจๅจ—ๅจŠๅจžๅจณๅญฌๅฎงๅฎญๅฎฌๅฐƒๅฑ–ๅฑ”ๅณฌๅณฟๅณฎๅณฑๅณทๅด€ๅณนๅธฉๅธจๅบจๅบฎๅบชๅบฌๅผณๅผฐๅฝงๆๆšๆง๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆๆ‚ขๆ‚ˆๆ‚€ๆ‚’ๆ‚ๆ‚ๆ‚ƒๆ‚•ๆ‚›ๆ‚—ๆ‚‡ๆ‚œๆ‚Žๆˆ™ๆ‰†ๆ‹ฒๆŒๆ–ๆŒฌๆ„ๆ…ๆŒถๆƒๆคๆŒนๆ‹ๆŠๆŒผๆŒฉๆๆŒดๆ˜ๆ”ๆ™ๆŒญๆ‡ๆŒณๆšๆ‘ๆŒธๆ—ๆ€ๆˆๆ•Šๆ•†ๆ—†ๆ—ƒๆ—„ๆ—‚ๆ™Šๆ™Ÿๆ™‡ๆ™‘ๆœ’ๆœ“ๆ Ÿๆ šๆก‰ๆ ฒๆ ณๆ ปๆก‹ๆกๆ –ๆ ฑๆ œๆ ตๆ ซๆ ญๆ ฏๆกŽๆก„ๆ ดๆ ๆ ’ๆ ”ๆ ฆๆ จๆ ฎๆกๆ บๆ ฅๆ  ๆฌฌๆฌฏๆฌญๆฌฑๆฌดๆญญ่‚‚ๆฎˆๆฏฆๆฏค๏ฟฝ".split("");for(j=0;j!=D[209].length;++j)if(D[209][j].charCodeAt(0)!==65533){e[D[209][j]]=53504+j;d[53504+j]=D[209][j]}D[210]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฏจๆฏฃๆฏขๆฏงๆฐฅๆตบๆตฃๆตคๆตถๆดๆตกๆถ’ๆต˜ๆตขๆตญๆตฏๆถ‘ๆถๆทฏๆตฟๆถ†ๆตžๆตงๆต ๆถ—ๆตฐๆตผๆตŸๆถ‚ๆถ˜ๆดฏๆตจๆถ‹ๆตพๆถ€ๆถ„ๆด–ๆถƒๆตปๆตฝๆตตๆถ็ƒœ็ƒ“็ƒ‘็ƒ็ƒ‹็ผน็ƒข็ƒ—็ƒ’็ƒž็ƒ ็ƒ”็ƒ็ƒ…็ƒ†็ƒ‡็ƒš็ƒŽ็ƒก็‰‚็‰ธ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็‰ท็‰ถ็Œ€็‹บ็‹ด็‹พ็‹ถ็‹ณ็‹ป็Œ็“็™็ฅ็–็Žผ็ง็ฃ็ฉ็œ็’็›็”็็š็—็˜็จ็“ž็“Ÿ็“ด็“ต็”ก็•›็•Ÿ็–ฐ็—็–ป็—„็—€็–ฟ็–ถ็–บ็šŠ็›‰็œ็œ›็œ็œ“็œ’็œฃ็œ‘็œ•็œ™็œš็œข็œง็ ฃ็ ฌ็ ข็ ต็ ฏ็ จ็ ฎ็ ซ็ ก็ ฉ็ ณ็ ช็ ฑ็ฅ”็ฅ›็ฅ็ฅœ็ฅ“็ฅ’็ฅ‘็งซ็งฌ็ง ็งฎ็งญ็งช็งœ็งž็ง็ช†็ช‰็ช…็ช‹็ชŒ็ชŠ็ช‡็ซ˜็ฌ๏ฟฝ".split("");for(j=0;j!=D[210].length;++j)if(D[210][j].charCodeAt(0)!==65533){e[D[210][j]]=53760+j;d[53760+j]=D[210][j]}D[211]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฌ„็ฌ“็ฌ…็ฌ็ฌˆ็ฌŠ็ฌŽ็ฌ‰็ฌ’็ฒ„็ฒ‘็ฒŠ็ฒŒ็ฒˆ็ฒ็ฒ…็ดž็ด็ด‘็ดŽ็ด˜็ด–็ด“็ดŸ็ด’็ด็ดŒ็ฝœ็ฝก็ฝž็ฝ ็ฝ็ฝ›็พ–็พ’็ฟƒ็ฟ‚็ฟ€่€–่€พ่€น่ƒบ่ƒฒ่ƒน่ƒต่„่ƒป่„€่ˆ่ˆฏ่ˆฅ่Œณ่Œญ่„่Œ™่‘่Œฅ่–่Œฟ่่Œฆ่Œœ่Œข๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่‚่Ž่Œ›่Œช่Œˆ่Œผ่่Œ–่Œค่Œ ่Œท่Œฏ่Œฉ่‡่…่Œ่“่Œž่Œฌ่‹่Œง่ˆ่™“่™’่šข่šจ่š–่š่š‘่šž่š‡่š—่š†่š‹่šš่š…่šฅ่š™่šก่šง่š•่š˜่šŽ่š่š่š”่กƒ่ก„่กญ่กต่กถ่กฒ่ข€่กฑ่กฟ่กฏ่ขƒ่กพ่กด่กผ่จ’่ฑ‡่ฑ—่ฑป่ฒค่ฒฃ่ตถ่ตธ่ถต่ถท่ถถ่ป‘่ป“่ฟพ่ฟต้€‚่ฟฟ่ฟป้€„่ฟผ่ฟถ้ƒ–้ƒ ้ƒ™้ƒš้ƒฃ้ƒŸ้ƒฅ้ƒ˜้ƒ›้ƒ—้ƒœ้ƒค้…๏ฟฝ".split("");for(j=0;j!=D[211].length;++j)if(D[211][j].charCodeAt(0)!==65533){e[D[211][j]]=54016+j;d[54016+j]=D[211][j]}D[212]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้…Ž้…้‡•้‡ข้‡š้™œ้™Ÿ้šผ้ฃฃ้ซŸ้ฌฏไนฟๅฐๅชๅกๅžๅ ๅ“ๅ‹ๅๅฒๅˆๅๅๅ›ๅŠๅขๅ€•ๅ…ๅŸๅฉๅซๅฃๅคๅ†ๅ€ๅฎๅณๅ—ๅ‘ๅ‡ๅ‰ซๅ‰ญๅ‰ฌๅ‰ฎๅ‹–ๅ‹“ๅŒญๅŽœๅ•ตๅ•ถๅ”ผๅ•ๅ•ๅ”ดๅ”ชๅ•‘ๅ•ขๅ”ถๅ”ตๅ”ฐๅ•’ๅ•…๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ”Œๅ”ฒๅ•ฅๅ•Žๅ”นๅ•ˆๅ”ญๅ”ปๅ•€ๅ•‹ๅœŠๅœ‡ๅŸปๅ ”ๅŸขๅŸถๅŸœๅŸดๅ €ๅŸญๅŸฝๅ ˆๅŸธๅ ‹ๅŸณๅŸๅ ‡ๅŸฎๅŸฃๅŸฒๅŸฅๅŸฌๅŸกๅ ŽๅŸผๅ ๅŸงๅ ๅ ŒๅŸฑๅŸฉๅŸฐๅ ๅ „ๅฅœๅฉ ๅฉ˜ๅฉ•ๅฉงๅฉžๅจธๅจตๅฉญๅฉๅฉŸๅฉฅๅฉฌๅฉ“ๅฉคๅฉ—ๅฉƒๅฉๅฉ’ๅฉ„ๅฉ›ๅฉˆๅชŽๅจพๅฉๅจนๅฉŒๅฉฐๅฉฉๅฉ‡ๅฉ‘ๅฉ–ๅฉ‚ๅฉœๅญฒๅญฎๅฏๅฏ€ๅฑ™ๅดžๅด‹ๅดๅดšๅด ๅดŒๅดจๅดๅดฆๅดฅๅด๏ฟฝ".split("");for(j=0;j!=D[212].length;++j)if(D[212][j].charCodeAt(0)!==65533){e[D[212][j]]=54272+j;d[54272+j]=D[212][j]}D[213]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅดฐๅด’ๅดฃๅดŸๅดฎๅธพๅธดๅบฑๅบดๅบนๅบฒๅบณๅผถๅผธๅพ›ๅพ–ๅพŸๆ‚Šๆ‚ๆ‚†ๆ‚พๆ‚ฐๆ‚บๆƒ“ๆƒ”ๆƒๆƒคๆƒ™ๆƒๆƒˆๆ‚ฑๆƒ›ๆ‚ทๆƒŠๆ‚ฟๆƒƒๆƒๆƒ€ๆŒฒๆฅๆŽŠๆŽ‚ๆฝๆŽฝๆŽžๆŽญๆŽๆŽ—ๆŽซๆŽŽๆฏๆŽ‡ๆŽๆฎๆŽฏๆตๆŽœๆญๆŽฎๆผๆŽคๆŒปๆŽŸ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆธๆŽ…ๆŽๆŽ‘ๆŽๆฐๆ•“ๆ—ๆ™ฅๆ™กๆ™›ๆ™™ๆ™œๆ™ขๆœ˜ๆกนๆข‡ๆขๆขœๆกญๆกฎๆขฎๆขซๆฅ–ๆกฏๆขฃๆขฌๆขฉๆกตๆกดๆขฒๆขๆกทๆข’ๆกผๆกซๆกฒๆขชๆข€ๆกฑๆกพๆข›ๆข–ๆข‹ๆข ๆข‰ๆขคๆกธๆกปๆข‘ๆขŒๆขŠๆกฝๆฌถๆฌณๆฌทๆฌธๆฎ‘ๆฎๆฎๆฎŽๆฎŒๆฐชๆท€ๆถซๆถดๆถณๆนดๆถฌๆทฉๆทขๆถทๆทถๆท”ๆธ€ๆทˆๆท ๆทŸๆท–ๆถพๆทฅๆทœๆทๆท›ๆทดๆทŠๆถฝๆทญๆทฐๆถบๆท•ๆท‚ๆทๆท‰๏ฟฝ".split("");for(j=0;j!=D[213].length;++j)if(D[213][j].charCodeAt(0)!==65533){e[D[213][j]]=54528+j;d[54528+j]=D[213][j]}D[214]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆทๆทฒๆท“ๆทฝๆท—ๆทๆทฃๆถป็ƒบ็„็ƒท็„—็ƒด็„Œ็ƒฐ็„„็ƒณ็„็ƒผ็ƒฟ็„†็„“็„€็ƒธ็ƒถ็„‹็„‚็„Ž็‰พ็‰ป็‰ผ็‰ฟ็Œ็Œ—็Œ‡็Œ‘็Œ˜็ŒŠ็Œˆ็‹ฟ็Œ็Œž็Žˆ็ถ็ธ็ต็„็็ฝ็‡็€็บ็ผ็ฟ็Œ็‹็ด็ˆ็•ค็•ฃ็—Ž็—’็—๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็—‹็—Œ็—‘็—็š็š‰็›“็œน็œฏ็œญ็œฑ็œฒ็œด็œณ็œฝ็œฅ็œป็œต็กˆ็ก’็ก‰็ก็กŠ็กŒ็ ฆ็ก…็ก็ฅค็ฅง็ฅฉ็ฅช็ฅฃ็ฅซ็ฅก็ฆป็งบ็งธ็งถ็งท็ช็ช”็ช็ฌต็ญ‡็ฌด็ฌฅ็ฌฐ็ฌข็ฌค็ฌณ็ฌ˜็ฌช็ฌ็ฌฑ็ฌซ็ฌญ็ฌฏ็ฌฒ็ฌธ็ฌš็ฌฃ็ฒ”็ฒ˜็ฒ–็ฒฃ็ดต็ดฝ็ดธ็ดถ็ดบ็ต…็ดฌ็ดฉ็ต็ต‡็ดพ็ดฟ็ตŠ็ดป็ดจ็ฝฃ็พ•็พœ็พ็พ›็ฟŠ็ฟ‹็ฟ็ฟ็ฟ‘็ฟ‡็ฟ็ฟ‰่€Ÿ๏ฟฝ".split("");for(j=0;j!=D[214].length;++j)if(D[214][j].charCodeAt(0)!==65533){e[D[214][j]]=54784+j;d[54784+j]=D[214][j]}D[215]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่€ž่€›่‡่ƒ่ˆ่„˜่„ฅ่„™่„›่„ญ่„Ÿ่„ฌ่„ž่„ก่„•่„ง่„่„ข่ˆ‘่ˆธ่ˆณ่ˆบ่ˆด่ˆฒ่‰ด่Ž่Žฃ่Žจ่Ž่บ่ณ่Žค่ด่Ž่Ž่Ž•่Ž™่ต่Ž”่Žฉ่ฝ่Žƒ่ŽŒ่Ž่Ž›่Žช่Ž‹่พ่Žฅ่Žฏ่Žˆ่Ž—่Žฐ่ฟ่Žฆ่Ž‡่Žฎ่ถ่Žš่™™่™–่šฟ่šท๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่›‚่›่›…่šบ่šฐ่›ˆ่šน่šณ่šธ่›Œ่šด่šป่šผ่›ƒ่šฝ่šพ่ก’่ข‰่ข•่ขจ่ขข่ขช่ขš่ข‘่ขก่ขŸ่ข˜่ขง่ข™่ข›่ข—่ขค่ขฌ่ขŒ่ข“่ขŽ่ฆ‚่ง–่ง™่ง•่จฐ่จง่จฌ่จž่ฐน่ฐป่ฑœ่ฑ่ฑฝ่ฒฅ่ตฝ่ตป่ตน่ถผ่ท‚่ถน่ถฟ่ท่ป˜่ปž่ป่ปœ่ป—่ป ่ปก้€ค้€‹้€‘้€œ้€Œ้€ก้ƒฏ้ƒช้ƒฐ้ƒด้ƒฒ้ƒณ้ƒ”้ƒซ้ƒฌ้ƒฉ้…–้…˜้…š้…“้…•้‡ฌ้‡ด้‡ฑ้‡ณ้‡ธ้‡ค้‡น้‡ช๏ฟฝ".split("");for(j=0;j!=D[215].length;++j)if(D[215][j].charCodeAt(0)!==65533){e[D[215][j]]=55040+j;d[55040+j]=D[215][j]}D[216]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้‡ซ้‡ท้‡จ้‡ฎ้•บ้–†้–ˆ้™ผ้™ญ้™ซ้™ฑ้™ฏ้šฟ้ช้ „้ฃฅ้ฆ—ๅ‚›ๅ‚•ๅ‚”ๅ‚žๅ‚‹ๅ‚ฃๅ‚ƒๅ‚Œๅ‚Žๅ‚ๅจๅ‚œๅ‚’ๅ‚‚ๅ‚‡ๅ…Ÿๅ‡”ๅŒ’ๅŒ‘ๅŽคๅŽงๅ–‘ๅ–จๅ–ฅๅ–ญๅ•ทๅ™…ๅ–ขๅ–“ๅ–ˆๅ–ๅ–ตๅ–ๅ–ฃๅ–’ๅ–คๅ•ฝๅ–Œๅ–ฆๅ•ฟๅ–•ๅ–กๅ–ŽๅœŒๅ ฉๅ ท๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ ™ๅ žๅ งๅ ฃๅ จๅŸตๅกˆๅ ฅๅ œๅ ›ๅ ณๅ ฟๅ ถๅ ฎๅ นๅ ธๅ ญๅ ฌๅ ปๅฅกๅชฏๅช”ๅชŸๅฉบๅชขๅชžๅฉธๅชฆๅฉผๅชฅๅชฌๅช•ๅชฎๅจทๅช„ๅชŠๅช—ๅชƒๅช‹ๅชฉๅฉปๅฉฝๅชŒๅชœๅชๅช“ๅชๅฏชๅฏๅฏ‹ๅฏ”ๅฏ‘ๅฏŠๅฏŽๅฐŒๅฐฐๅดทๅตƒๅตซๅตๅต‹ๅดฟๅดตๅต‘ๅตŽๅต•ๅดณๅดบๅต’ๅดฝๅดฑๅต™ๅต‚ๅดนๅต‰ๅดธๅดผๅดฒๅดถๅต€ๅต…ๅน„ๅนๅฝ˜ๅพฆๅพฅๅพซๆƒ‰ๆ‚นๆƒŒๆƒขๆƒŽๆƒ„ๆ„”๏ฟฝ".split("");for(j=0;j!=D[216].length;++j)if(D[216][j].charCodeAt(0)!==65533){e[D[216][j]]=55296+j;d[55296+j]=D[216][j]}D[217]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆƒฒๆ„Šๆ„–ๆ„…ๆƒตๆ„“ๆƒธๆƒผๆƒพๆƒๆ„ƒๆ„˜ๆ„ๆ„ๆƒฟๆ„„ๆ„‹ๆ‰ŠๆŽ”ๆŽฑๆŽฐๆŽๆฅๆจๆฏๆƒๆ’ๆณๆŠๆ ๆถๆ•ๆฒๆตๆ‘กๆŸๆŽพๆๆœๆ„ๆ˜ๆ“ๆ‚ๆ‡ๆŒๆ‹ๆˆๆฐๆ—ๆ™ๆ”ฒๆ•งๆ•ชๆ•คๆ•œๆ•จๆ•ฅๆ–Œๆ–ๆ–žๆ–ฎๆ—ๆ—’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ™ผๆ™ฌๆ™ปๆš€ๆ™ฑๆ™นๆ™ชๆ™ฒๆœๆคŒๆฃ“ๆค„ๆฃœๆคชๆฃฌๆฃชๆฃฑๆคๆฃ–ๆฃทๆฃซๆฃคๆฃถๆค“ๆคๆฃณๆฃกๆค‡ๆฃŒๆคˆๆฅฐๆขดๆค‘ๆฃฏๆฃ†ๆค”ๆฃธๆฃๆฃฝๆฃผๆฃจๆค‹ๆคŠๆค—ๆฃŽๆฃˆๆฃๆฃžๆฃฆๆฃดๆฃ‘ๆค†ๆฃ”ๆฃฉๆค•ๆคฅๆฃ‡ๆฌนๆฌปๆฌฟๆฌผๆฎ”ๆฎ—ๆฎ™ๆฎ•ๆฎฝๆฏฐๆฏฒๆฏณๆฐฐๆทผๆน†ๆน‡ๆธŸๆน‰ๆบˆๆธผๆธฝๆน…ๆนขๆธซๆธฟๆนๆนๆนณๆธœๆธณๆน‹ๆน€ๆน‘ๆธปๆธƒๆธฎๆนž๏ฟฝ".split("");for(j=0;j!=D[217].length;++j)if(D[217][j].charCodeAt(0)!==65533){e[D[217][j]]=55552+j;d[55552+j]=D[217][j]}D[218]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆนจๆนœๆนกๆธฑๆธจๆน ๆนฑๆนซๆธนๆธขๆธฐๆน“ๆนฅๆธงๆนธๆนคๆนทๆน•ๆนนๆน’ๆนฆๆธตๆธถๆนš็„ ็„ž็„ฏ็ƒป็„ฎ็„ฑ็„ฃ็„ฅ็„ข็„ฒ็„Ÿ็„จ็„บ็„›็‰‹็‰š็Šˆ็Š‰็Š†็Š…็Š‹็Œ’็Œ‹็Œฐ็Œข็Œฑ็Œณ็Œง็Œฒ็Œญ็Œฆ็Œฃ็Œต็ŒŒ็ฎ็ฌ็ฐ็ซ็–๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็š็ก็ญ็ฑ็ค็ฃ็็ฉ็ ็ฒ็“ป็”ฏ็•ฏ็•ฌ็—ง็—š็—ก็—ฆ็—็—Ÿ็—ค็——็š•็š’็›š็†็‡็„็็…็Š็Ž็‹็Œ็Ÿž็Ÿฌ็ก ็กค็กฅ็กœ็กญ็กฑ็กช็กฎ็กฐ็กฉ็กจ็กž็กข็ฅด็ฅณ็ฅฒ็ฅฐ็จ‚็จŠ็จƒ็จŒ็จ„็ช™็ซฆ็ซค็ญŠ็ฌป็ญ„็ญˆ็ญŒ็ญŽ็ญ€็ญ˜็ญ…็ฒข็ฒž็ฒจ็ฒก็ต˜็ตฏ็ตฃ็ต“็ต–็ตง็ตช็ต็ตญ็ตœ็ตซ็ต’็ต”็ตฉ็ต‘็ตŸ็ตŽ็ผพ็ผฟ็ฝฅ๏ฟฝ".split("");for(j=0;j!=D[218].length;++j)if(D[218][j].charCodeAt(0)!==65533){e[D[218][j]]=55808+j;d[55808+j]=D[218][j]}D[219]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฝฆ็พข็พ ็พก็ฟ—่‘่่่ƒพ่ƒ”่…ƒ่…Š่…’่…่…‡่„ฝ่…่„บ่‡ฆ่‡ฎ่‡ท่‡ธ่‡น่ˆ„่ˆผ่ˆฝ่ˆฟ่‰ต่Œป่่น่ฃ่€่จ่’่ง่ค่ผ่ถ่่†่ˆ่ซ่ฃ่Žฟ่่่ฅ่˜่ฟ่ก่‹่Ž่–่ต่‰่‰่่ž่‘่†่‚่ณ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่•่บ่‡่‘่ช่“่ƒ่ฌ่ฎ่„่ป่—่ข่›่›่พ่›˜่›ข่›ฆ่›“่›ฃ่›š่›ช่›่›ซ่›œ่›ฌ่›ฉ่›—่›จ่›‘่กˆ่ก–่ก•่ขบ่ฃ—่ขน่ขธ่ฃ€่ขพ่ขถ่ขผ่ขท่ขฝ่ขฒ่ค่ฃ‰่ฆ•่ฆ˜่ฆ—่ง่งš่ง›่ฉŽ่ฉ่จน่ฉ™่ฉ€่ฉ—่ฉ˜่ฉ„่ฉ…่ฉ’่ฉˆ่ฉ‘่ฉŠ่ฉŒ่ฉ่ฑŸ่ฒ่ฒ€่ฒบ่ฒพ่ฒฐ่ฒน่ฒต่ถ„่ถ€่ถ‰่ท˜่ท“่ท่ท‡่ท–่ทœ่ท่ท•่ท™่ทˆ่ท—่ท…่ปฏ่ปท่ปบ๏ฟฝ".split("");for(j=0;j!=D[219].length;++j)if(D[219][j].charCodeAt(0)!==65533){e[D[219][j]]=56064+j;d[56064+j]=D[219][j]}D[220]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ปน่ปฆ่ปฎ่ปฅ่ปต่ปง่ปจ่ปถ่ปซ่ปฑ่ปฌ่ปด่ปฉ้€ญ้€ด้€ฏ้„†้„ฌ้„„้ƒฟ้ƒผ้„ˆ้ƒน้ƒป้„้„€้„‡้„…้„ƒ้…ก้…ค้…Ÿ้…ข้… ้ˆ้ˆŠ้ˆฅ้ˆƒ้ˆš้ˆฆ้ˆ้ˆŒ้ˆ€้ˆ’้‡ฟ้‡ฝ้ˆ†้ˆ„้ˆง้ˆ‚้ˆœ้ˆค้ˆ™้ˆ—้ˆ…้ˆ–้•ป้–้–Œ้–้š‡้™พ้šˆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้š‰้šƒ้š€้›‚้›ˆ้›ƒ้›ฑ้›ฐ้ฌ้ฐ้ฎ้ ‡้ขฉ้ฃซ้ณฆ้ปนไบƒไบ„ไบถๅ‚ฝๅ‚ฟๅƒ†ๅ‚ฎๅƒ„ๅƒŠๅ‚ดๅƒˆๅƒ‚ๅ‚ฐๅƒๅ‚บๅ‚ฑๅƒ‹ๅƒ‰ๅ‚ถๅ‚ธๅ‡—ๅ‰บๅ‰ธๅ‰ปๅ‰ผๅ—ƒๅ—›ๅ—Œๅ—ๅ—‹ๅ—Šๅ—ๅ—€ๅ—”ๅ—„ๅ—ฉๅ–ฟๅ—’ๅ–ๅ—ๅ—•ๅ—ขๅ—–ๅ—ˆๅ—ฒๅ—ๅ—™ๅ—‚ๅœ”ๅก“ๅกจๅกคๅกๅกๅก‰ๅกฏๅก•ๅกŽๅกๅก™ๅกฅๅก›ๅ ฝๅกฃๅกฑๅฃผๅซ‡ๅซ„ๅซ‹ๅชบๅชธๅชฑๅชตๅชฐๅชฟๅซˆๅชปๅซ†๏ฟฝ".split("");for(j=0;j!=D[220].length;++j)if(D[220][j].charCodeAt(0)!==65533){e[D[220][j]]=56320+j;d[56320+j]=D[220][j]}D[221]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅชทๅซ€ๅซŠๅชดๅชถๅซๅชนๅชๅฏ–ๅฏ˜ๅฏ™ๅฐŸๅฐณๅตฑๅตฃๅตŠๅตฅๅตฒๅตฌๅตžๅตจๅตงๅตขๅทฐๅนๅนŽๅนŠๅนๅน‹ๅป…ๅปŒๅป†ๅป‹ๅป‡ๅฝ€ๅพฏๅพญๆƒทๆ…‰ๆ…Šๆ„ซๆ……ๆ„ถๆ„ฒๆ„ฎๆ…†ๆ„ฏๆ…ๆ„ฉๆ…€ๆˆ ้…จๆˆฃๆˆฅๆˆคๆ…ๆฑๆซๆๆ’ๆ‰ๆ ๆค๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆณๆ‘ƒๆŸๆ•ๆ˜ๆนๆทๆขๆฃๆŒๆฆๆฐๆจๆ‘ๆตๆฏๆŠๆšๆ‘€ๆฅๆงๆ‹ๆงๆ›ๆฎๆกๆŽๆ•ฏๆ–’ๆ—“ๆš†ๆšŒๆš•ๆšๆš‹ๆšŠๆš™ๆš”ๆ™ธๆœ ๆฅฆๆฅŸๆคธๆฅŽๆฅขๆฅฑๆคฟๆฅ…ๆฅชๆคนๆฅ‚ๆฅ—ๆฅ™ๆฅบๆฅˆๆฅ‰ๆคตๆฅฌๆคณๆคฝๆฅฅๆฃฐๆฅธๆคดๆฅฉๆฅ€ๆฅฏๆฅ„ๆฅถๆฅ˜ๆฅๆฅดๆฅŒๆคปๆฅ‹ๆคทๆฅœๆฅๆฅ‘ๆคฒๆฅ’ๆคฏๆฅปๆคผๆญ†ๆญ…ๆญƒๆญ‚ๆญˆๆญๆฎ›๏จๆฏปๆฏผ๏ฟฝ".split("");for(j=0;j!=D[221].length;++j)if(D[221][j].charCodeAt(0)!==65533){e[D[221][j]]=56576+j;d[56576+j]=D[221][j]}D[222]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฏนๆฏทๆฏธๆบ›ๆป–ๆปˆๆบๆป€ๆบŸๆบ“ๆบ”ๆบ ๆบฑๆบนๆป†ๆป’ๆบฝๆปๆบžๆป‰ๆบทๆบฐๆปๆบฆๆปๆบฒๆบพๆปƒๆปœๆป˜ๆบ™ๆบ’ๆบŽๆบๆบคๆบกๆบฟๆบณๆปๆปŠๆบ—ๆบฎๆบฃ็…‡็…”็…’็…ฃ็… ็…็…็…ข็…ฒ็…ธ็…ช็…ก็…‚็…˜็…ƒ็…‹็…ฐ็…Ÿ็…็…“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็…„็…็…š็‰็Š็ŠŒ็Š‘็Š็ŠŽ็Œผ็‚็Œป็Œบ็€็Š็‰็‘„็‘Š็‘‹็‘’็‘‘็‘—็‘€็‘็‘็‘Ž็‘‚็‘†็‘็‘”็“ก็“ฟ็“พ็“ฝ็”็•น็•ทๆฆƒ็—ฏ็˜็˜ƒ็—ท็—พ็—ผ็—น็—ธ็˜็—ป็—ถ็—ญ็—ต็—ฝ็š™็šต็›็•็Ÿ็ ็’็–็š็ฉ็ง็”็™็ญ็Ÿ ็ข‡็ขš็ข”็ข็ข„็ข•็ข…็ข†็ขก็ขƒ็กน็ข™็ข€็ข–็กป็ฅผ็ฆ‚็ฅฝ็ฅน็จ‘็จ˜็จ™็จ’็จ—็จ•็จข็จ“๏ฟฝ".split("");for(j=0;j!=D[222].length;++j)if(D[222][j].charCodeAt(0)!==65533){e[D[222][j]]=56832+j;d[56832+j]=D[222][j]}D[223]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็จ›็จ็ชฃ็ชข็ชž็ซซ็ญฆ็ญค็ญญ็ญด็ญฉ็ญฒ็ญฅ็ญณ็ญฑ็ญฐ็ญก็ญธ็ญถ็ญฃ็ฒฒ็ฒด็ฒฏ็ถˆ็ถ†็ถ€็ถ็ตฟ็ถ…็ตบ็ถŽ็ตป็ถƒ็ตผ็ถŒ็ถ”็ถ„็ตฝ็ถ’็ฝญ็ฝซ็ฝง็ฝจ็ฝฌ็พฆ็พฅ็พง็ฟ›็ฟœ่€ก่…ค่… ่…ท่…œ่…ฉ่…›่…ข่…ฒๆœก่…ž่…ถ่…ง่…ฏ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่…„่…ก่ˆ่‰‰่‰„่‰€่‰‚่‰…่“ฑ่ฟ่‘–่‘ถ่‘น่’่’่‘ฅ่‘‘่‘€่’†่‘ง่ฐ่‘่‘ฝ่‘š่‘™่‘ด่‘ณ่‘่”‡่‘ž่ท่บ่ด่‘บ่‘ƒ่‘ธ่ฒ่‘…่ฉ่™่‘‹่ฏ่‘‚่ญ่‘Ÿ่‘ฐ่น่‘Ž่‘Œ่‘’่‘ฏ่“…่’Ž่ป่‘‡่ถ่ณ่‘จ่‘พ่‘„่ซ่‘ ่‘”่‘ฎ่‘่œ‹่œ„่›ท่œŒ่›บ่›–่›ต่่›ธ่œŽ่œ‰่œ่›ถ่œ่œ…่ฃ–่ฃ‹่ฃ่ฃŽ่ฃž่ฃ›่ฃš่ฃŒ่ฃ่ฆ…่ฆ›่งŸ่งฅ่งค๏ฟฝ".split("");for(j=0;j!=D[223].length;++j)if(D[223][j].charCodeAt(0)!==65533){e[D[223][j]]=57088+j;d[57088+j]=D[223][j]}D[224]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่งก่ง ่งข่งœ่งฆ่ฉถ่ช†่ฉฟ่ฉก่จฟ่ฉท่ช‚่ช„่ฉต่ชƒ่ช่ฉด่ฉบ่ฐผ่ฑ‹่ฑŠ่ฑฅ่ฑค่ฑฆ่ฒ†่ฒ„่ฒ…่ณŒ่ตจ่ตฉ่ถ‘่ถŒ่ถŽ่ถ่ถ่ถ“่ถ”่ถ่ถ’่ทฐ่ท ่ทฌ่ทฑ่ทฎ่ท่ทฉ่ทฃ่ทข่ทง่ทฒ่ทซ่ทด่ผ†่ปฟ่ผ่ผ€่ผ…่ผ‡่ผˆ่ผ‚่ผ‹้’้€ฟ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้„้‰้€ฝ้„้„้„้„‘้„–้„”้„‹้„Ž้…ฎ้…ฏ้‰ˆ้‰’้ˆฐ้ˆบ้‰ฆ้ˆณ้‰ฅ้‰ž้Šƒ้ˆฎ้‰Š้‰†้‰ญ้‰ฌ้‰้‰ ้‰ง้‰ฏ้ˆถ้‰ก้‰ฐ้ˆฑ้‰”้‰ฃ้‰้‰ฒ้‰Ž้‰“้‰Œ้‰–้ˆฒ้–Ÿ้–œ้–ž้–›้š’้š“้š‘้š—้›Ž้›บ้›ฝ้›ธ้›ต้ณ้ท้ธ้ฒ้ ้ ้ Ž้ขฌ้ฃถ้ฃน้ฆฏ้ฆฒ้ฆฐ้ฆต้ชญ้ชซ้ญ›้ณช้ณญ้ณง้บ€้ปฝๅƒฆๅƒ”ๅƒ—ๅƒจๅƒณๅƒ›ๅƒชๅƒๅƒคๅƒ“ๅƒฌๅƒฐๅƒฏๅƒฃๅƒ ๏ฟฝ".split("");for(j=0;j!=D[224].length;++j)if(D[224][j].charCodeAt(0)!==65533){e[D[224][j]]=57344+j;d[57344+j]=D[224][j]}D[225]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ‡˜ๅŠ€ๅŠๅ‹ฉๅ‹ซๅŒฐๅŽฌๅ˜งๅ˜•ๅ˜Œๅ˜’ๅ—ผๅ˜ๅ˜œๅ˜ๅ˜“ๅ˜‚ๅ—บๅ˜ๅ˜„ๅ—ฟๅ—นๅข‰ๅกผๅขๅข˜ๅข†ๅขๅกฟๅกดๅข‹ๅกบๅข‡ๅข‘ๅขŽๅกถๅข‚ๅขˆๅกปๅข”ๅขๅฃพๅฅซๅซœๅซฎๅซฅๅซ•ๅซชๅซšๅซญๅซซๅซณๅซขๅซ ๅซ›ๅซฌๅซžๅซๅซ™ๅซจๅซŸๅญทๅฏ ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅฏฃๅฑฃๅถ‚ๅถ€ๅตฝๅถ†ๅตบๅถๅตทๅถŠๅถ‰ๅถˆๅตพๅตผๅถๅตนๅตฟๅน˜ๅน™ๅน“ๅป˜ๅป‘ๅป—ๅปŽๅปœๅป•ๅป™ๅป’ๅป”ๅฝ„ๅฝƒๅฝฏๅพถๆ„ฌๆ„จๆ…ๆ…žๆ…ฑๆ…ณๆ…’ๆ…“ๆ…ฒๆ…ฌๆ†€ๆ…ดๆ…”ๆ…บๆ…›ๆ…ฅๆ„ปๆ…ชๆ…กๆ…–ๆˆฉๆˆงๆˆซๆซๆ‘ๆ‘›ๆ‘ๆ‘ดๆ‘ถๆ‘ฒๆ‘ณๆ‘ฝๆ‘ตๆ‘ฆๆ’ฆๆ‘Žๆ’‚ๆ‘žๆ‘œๆ‘‹ๆ‘“ๆ‘ ๆ‘ๆ‘ฟๆฟๆ‘ฌๆ‘ซๆ‘™ๆ‘ฅๆ‘ทๆ•ณๆ– ๆšกๆš ๆšŸๆœ…ๆœ„ๆœขๆฆฑๆฆถๆง‰๏ฟฝ".split("");for(j=0;j!=D[225].length;++j)if(D[225][j].charCodeAt(0)!==65533){e[D[225][j]]=57600+j;d[57600+j]=D[225][j]}D[226]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆฆ ๆงŽๆฆ–ๆฆฐๆฆฌๆฆผๆฆ‘ๆฆ™ๆฆŽๆฆงๆฆๆฆฉๆฆพๆฆฏๆฆฟๆง„ๆฆฝๆฆคๆง”ๆฆนๆงŠๆฆšๆงๆฆณๆฆ“ๆฆชๆฆกๆฆžๆง™ๆฆ—ๆฆๆง‚ๆฆตๆฆฅๆง†ๆญŠๆญๆญ‹ๆฎžๆฎŸๆฎ ๆฏƒๆฏ„ๆฏพๆปŽๆปตๆปฑๆผƒๆผฅๆปธๆผทๆปปๆผฎๆผ‰ๆฝŽๆผ™ๆผšๆผงๆผ˜ๆผปๆผ’ๆปญๆผŠ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆผถๆฝณๆปนๆปฎๆผญๆฝ€ๆผฐๆผผๆผตๆปซๆผ‡ๆผŽๆฝƒๆผ…ๆปฝๆปถๆผนๆผœๆปผๆผบๆผŸๆผๆผžๆผˆๆผก็†‡็†็†‰็†€็†…็†‚็†็…ป็††็†็†—็‰„็‰“็Š—็Š•็Š“็ƒ็็‘็Œ็‘ข็‘ณ็‘ฑ็‘ต็‘ฒ็‘ง็‘ฎ็”€็”‚็”ƒ็•ฝ็–็˜–็˜ˆ็˜Œ็˜•็˜‘็˜Š็˜”็šธ็ž็ผ็ž…็ž‚็ฎ็ž€็ฏ็พ็žƒ็ขฒ็ขช็ขด็ขญ็ขจ็กพ็ขซ็ขž็ขฅ็ข ็ขฌ็ขข็ขค็ฆ˜็ฆŠ็ฆ‹็ฆ–็ฆ•็ฆ”็ฆ“๏ฟฝ".split("");for(j=0;j!=D[226].length;++j)if(D[226][j].charCodeAt(0)!==65533){e[D[226][j]]=57856+j;d[57856+j]=D[226][j]}D[227]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฆ—็ฆˆ็ฆ’็ฆ็จซ็ฉŠ็จฐ็จฏ็จจ็จฆ็ชจ็ชซ็ชฌ็ซฎ็ฎˆ็ฎœ็ฎŠ็ฎ‘็ฎ็ฎ–็ฎ็ฎŒ็ฎ›็ฎŽ็ฎ…็ฎ˜ๅŠ„็ฎ™็ฎค็ฎ‚็ฒป็ฒฟ็ฒผ็ฒบ็ถง็ถท็ท‚็ถฃ็ถช็ท็ท€็ท…็ถ็ทŽ็ท„็ท†็ท‹็ทŒ็ถฏ็ถน็ถ–็ถผ็ถŸ็ถฆ็ถฎ็ถฉ็ถก็ท‰็ฝณ็ฟข็ฟฃ็ฟฅ็ฟž๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่€ค่่œ่†‰่††่†ƒ่†‡่†่†Œ่†‹่ˆ•่’—่’ค่’ก่’Ÿ่’บ่“Ž่“‚่’ฌ่’ฎ่’ซ่’น่’ด่“่“่’ช่’š่’ฑ่“่’่’ง่’ป่’ข่’”่“‡่“Œ่’›่’ฉ่’ฏ่’จ่“–่’˜่’ถ่“่’ ่“—่“”่“’่“›่’ฐ่’‘่™ก่œณ่œฃ่œจ่ซ่€่œฎ่œž่œก่œ™่œ›่ƒ่œฌ่่œพ่†่œ ่œฒ่œช่œญ่œผ่œ’่œบ่œฑ่œต่‚่œฆ่œง่œธ่œค่œš่œฐ่œ‘่ฃท่ฃง่ฃฑ่ฃฒ่ฃบ่ฃพ่ฃฎ่ฃผ่ฃถ่ฃป๏ฟฝ".split("");for(j=0;j!=D[227].length;++j)if(D[227][j].charCodeAt(0)!==65533){e[D[227][j]]=58112+j;d[58112+j]=D[227][j]}D[228]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฃฐ่ฃฌ่ฃซ่ฆ่ฆก่ฆŸ่ฆž่งฉ่งซ่งจ่ชซ่ช™่ช‹่ช’่ช่ช–่ฐฝ่ฑจ่ฑฉ่ณ•่ณ่ณ—่ถ–่ธ‰่ธ‚่ทฟ่ธ่ทฝ่ธŠ่ธƒ่ธ‡่ธ†่ธ…่ทพ่ธ€่ธ„่ผ่ผ‘่ผŽ่ผ้„ฃ้„œ้„ ้„ข้„Ÿ้„้„š้„ค้„ก้„›้…บ้…ฒ้…น้…ณ้Šฅ้Šค้‰ถ้Š›้‰บ้Š ้Š”้Šช้Š๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้Šฆ้Šš้Šซ้‰น้Š—้‰ฟ้Šฃ้‹ฎ้ŠŽ้Š‚้Š•้Šข้‰ฝ้Šˆ้Šก้ŠŠ้Š†้ŠŒ้Š™้Šง้‰พ้Š‡้Šฉ้Š้Š‹้ˆญ้šž้šก้›ฟ้˜้ฝ้บ้พ้žƒ้ž€้ž‚้ป้ž„้ž้ฟ้ŸŽ้Ÿ้ –้ขญ้ขฎ้ค‚้ค€้ค‡้ฆ้ฆœ้งƒ้ฆน้ฆป้ฆบ้ง‚้ฆฝ้ง‡้ชฑ้ซฃ้ซง้ฌพ้ฌฟ้ญ ้ญก้ญŸ้ณฑ้ณฒ้ณต้บงๅƒฟๅ„ƒๅ„ฐๅƒธๅ„†ๅ„‡ๅƒถๅƒพๅ„‹ๅ„Œๅƒฝๅ„ŠๅŠ‹ๅŠŒๅ‹ฑๅ‹ฏๅ™ˆๅ™‚ๅ™Œๅ˜ตๅ™ๅ™Šๅ™‰ๅ™†ๅ™˜๏ฟฝ".split("");for(j=0;j!=D[228].length;++j)if(D[228][j].charCodeAt(0)!==65533){e[D[228][j]]=58368+j;d[58368+j]=D[228][j]}D[229]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ™šๅ™€ๅ˜ณๅ˜ฝๅ˜ฌๅ˜พๅ˜ธๅ˜ชๅ˜บๅœšๅขซๅขๅขฑๅข ๅขฃๅขฏๅขฌๅขฅๅขกๅฃฟๅซฟๅซดๅซฝๅซทๅซถๅฌƒๅซธๅฌ‚ๅซนๅฌๅฌ‡ๅฌ…ๅฌๅฑงๅถ™ๅถ—ๅถŸๅถ’ๅถขๅถ“ๅถ•ๅถ ๅถœๅถกๅถšๅถžๅนฉๅนๅน ๅนœ็ทณๅป›ๅปžๅปกๅฝ‰ๅพฒๆ†‹ๆ†ƒๆ…นๆ†ฑๆ†ฐๆ†ขๆ†‰๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ†›ๆ†“ๆ†ฏๆ†ญๆ†Ÿๆ†’ๆ†ชๆ†กๆ†ๆ…ฆๆ†ณๆˆญๆ‘ฎๆ‘ฐๆ’–ๆ’ ๆ’…ๆ’—ๆ’œๆ’ๆ’‹ๆ’Šๆ’Œๆ’ฃๆ’Ÿๆ‘จๆ’ฑๆ’˜ๆ•ถๆ•บๆ•นๆ•ปๆ–ฒๆ–ณๆšตๆšฐๆšฉๆšฒๆšทๆšชๆšฏๆจ€ๆจ†ๆจ—ๆงฅๆงธๆจ•ๆงฑๆงคๆจ ๆงฟๆงฌๆงขๆจ›ๆจๆงพๆจงๆงฒๆงฎๆจ”ๆงทๆงงๆฉ€ๆจˆๆงฆๆงปๆจๆงผๆงซๆจ‰ๆจ„ๆจ˜ๆจฅๆจๆงถๆจฆๆจ‡ๆงดๆจ–ๆญ‘ๆฎฅๆฎฃๆฎขๆฎฆๆฐๆฐ€ๆฏฟๆฐ‚ๆฝๆผฆๆฝพๆพ‡ๆฟ†ๆพ’๏ฟฝ".split("");for(j=0;j!=D[229].length;++j)if(D[229][j].charCodeAt(0)!==65533){e[D[229][j]]=58624+j;d[58624+j]=D[229][j]}D[230]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆพๆพ‰ๆพŒๆฝขๆฝๆพ…ๆฝšๆพ–ๆฝถๆฝฌๆพ‚ๆฝ•ๆฝฒๆฝ’ๆฝๆฝ—ๆพ”ๆพ“ๆฝๆผ€ๆฝกๆฝซๆฝฝๆฝงๆพๆฝ“ๆพ‹ๆฝฉๆฝฟๆพ•ๆฝฃๆฝทๆฝชๆฝป็†ฒ็†ฏ็†›็†ฐ็† ็†š็†ฉ็†ต็†็†ฅ็†ž็†ค็†ก็†ช็†œ็†ง็†ณ็Š˜็Šš็˜็’็ž็Ÿ็ ็็›็ก็š็™๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ข็’‡็’‰็’Š็’†็’็‘ฝ็’…็’ˆ็‘ผ็‘น็”ˆ็”‡็•พ็˜ฅ็˜ž็˜™็˜็˜œ็˜ฃ็˜š็˜จ็˜›็šœ็š็šž็š›็ž็ž็ž‰็žˆ็ฃ็ขป็ฃ็ฃŒ็ฃ‘็ฃŽ็ฃ”็ฃˆ็ฃƒ็ฃ„็ฃ‰็ฆš็ฆก็ฆ ็ฆœ็ฆข็ฆ›ๆญถ็จน็ชฒ็ชด็ชณ็ฎท็ฏ‹็ฎพ็ฎฌ็ฏŽ็ฎฏ็ฎน็ฏŠ็ฎต็ณ…็ณˆ็ณŒ็ณ‹็ทท็ท›็ทช็ทง็ท—็ทก็ธƒ็ทบ็ทฆ็ทถ็ทฑ็ทฐ็ทฎ็ทŸ็ฝถ็พฌ็พฐ็พญ็ฟญ็ฟซ็ฟช็ฟฌ็ฟฆ็ฟจ่ค่ง่†ฃ่†Ÿ๏ฟฝ".split("");for(j=0;j!=D[230].length;++j)if(D[230][j].charCodeAt(0)!==65533){e[D[230][j]]=58880+j;d[58880+j]=D[230][j]}D[231]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่†ž่†•่†ข่†™่†—่ˆ–่‰่‰“่‰’่‰่‰Ž่‰‘่”ค่”ป่”่”€่”ฉ่”Ž่”‰่”่”Ÿ่”Š่”ง่”œ่“ป่”ซ่“บ่”ˆ่”Œ่“ด่”ช่“ฒ่”•่“ท่“ซ่“ณ่“ผ่”’่“ช่“ฉ่”–่“พ่”จ่”่”ฎ่”‚่“ฝ่”ž่“ถ่”ฑ่”ฆ่“ง่“จ่“ฐ่“ฏ่“น่”˜่” ่”ฐ่”‹่”™่”ฏ่™ข๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่–่ฃ่ค่ท่Ÿก่ณ่˜่”่›่’่ก่š่‘่ž่ญ่ช่่Ž่Ÿ่่ฏ่ฌ่บ่ฎ่œ่ฅ่่ป่ต่ข่ง่ฉ่กš่ค…่คŒ่ค”่ค‹่ค—่ค˜่ค™่ค†่ค–่ค‘่คŽ่ค‰่ฆข่ฆค่ฆฃ่งญ่งฐ่งฌ่ซ่ซ†่ชธ่ซ“่ซ‘่ซ”่ซ•่ชป่ซ—่ชพ่ซ€่ซ…่ซ˜่ซƒ่ชบ่ชฝ่ซ™่ฐพ่ฑ่ฒ่ณฅ่ณŸ่ณ™่ณจ่ณš่ณ่ณง่ถ ่ถœ่ถก่ถ›่ธ ่ธฃ่ธฅ่ธค่ธฎ่ธ•่ธ›่ธ–่ธ‘่ธ™่ธฆ่ธง๏ฟฝ".split(""); +for(j=0;j!=D[231].length;++j)if(D[231][j].charCodeAt(0)!==65533){e[D[231][j]]=59136+j;d[59136+j]=D[231][j]}D[232]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ธ”่ธ’่ธ˜่ธ“่ธœ่ธ—่ธš่ผฌ่ผค่ผ˜่ผš่ผ ่ผฃ่ผ–่ผ—้ณ้ฐ้ฏ้ง้ซ้„ฏ้„ซ้„ฉ้„ช้„ฒ้„ฆ้„ฎ้†…้††้†Š้†้†‚้†„้†€้‹้‹ƒ้‹„้‹€้‹™้Šถ้‹้‹ฑ้‹Ÿ้‹˜้‹ฉ้‹—้‹้‹Œ้‹ฏ้‹‚้‹จ้‹Š้‹ˆ้‹Ž้‹ฆ้‹้‹•้‹‰้‹ ้‹ž้‹ง้‹‘้‹“๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้Šต้‹ก้‹†้Šด้•ผ้–ฌ้–ซ้–ฎ้–ฐ้šค้šข้›“้œ…้œˆ้œ‚้š้žŠ้žŽ้žˆ้Ÿ้Ÿ้ ž้ ้ ฆ้ ฉ้ จ้  ้ ›้ ง้ขฒ้คˆ้ฃบ้ค‘้ค”้ค–้ค—้ค•้งœ้ง้ง้ง“้ง”้งŽ้ง‰้ง–้ง˜้ง‹้ง—้งŒ้ชณ้ซฌ้ซซ้ซณ้ซฒ้ซฑ้ญ†้ญƒ้ญง้ญด้ญฑ้ญฆ้ญถ้ญต้ญฐ้ญจ้ญค้ญฌ้ณผ้ณบ้ณฝ้ณฟ้ณท้ด‡้ด€้ณน้ณป้ดˆ้ด…้ด„้บƒ้ป“้ผ้ผๅ„œๅ„“ๅ„—ๅ„šๅ„‘ๅ‡žๅŒดๅกๅ™ฐๅ™ ๅ™ฎ๏ฟฝ".split("");for(j=0;j!=D[232].length;++j)if(D[232][j].charCodeAt(0)!==65533){e[D[232][j]]=59392+j;d[59392+j]=D[232][j]}D[233]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅ™ณๅ™ฆๅ™ฃๅ™ญๅ™ฒๅ™žๅ™ทๅœœๅœ›ๅฃˆๅขฝๅฃ‰ๅขฟๅขบๅฃ‚ๅขผๅฃ†ๅฌ—ๅฌ™ๅฌ›ๅฌกๅฌ”ๅฌ“ๅฌๅฌ–ๅฌจๅฌšๅฌ ๅฌžๅฏฏๅถฌๅถฑๅถฉๅถงๅถตๅถฐๅถฎๅถชๅถจๅถฒๅถญๅถฏๅถดๅนงๅนจๅนฆๅนฏๅปฉๅปงๅปฆๅปจๅปฅๅฝ‹ๅพผๆ†ๆ†จๆ†–ๆ‡…ๆ†ดๆ‡†ๆ‡ๆ‡Œๆ†บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆ†ฟๆ†ธๆ†Œๆ“—ๆ“–ๆ“ๆ“ๆ“‰ๆ’ฝๆ’‰ๆ“ƒๆ“›ๆ“ณๆ“™ๆ”ณๆ•ฟๆ•ผๆ–ขๆ›ˆๆšพๆ›€ๆ›Šๆ›‹ๆ›ๆšฝๆšปๆšบๆ›Œๆœฃๆจดๆฉฆๆฉ‰ๆฉงๆจฒๆฉจๆจพๆฉๆฉญๆฉถๆฉ›ๆฉ‘ๆจจๆฉšๆจปๆจฟๆฉๆฉชๆฉคๆฉๆฉๆฉ”ๆฉฏๆฉฉๆฉ ๆจผๆฉžๆฉ–ๆฉ•ๆฉๆฉŽๆฉ†ๆญ•ๆญ”ๆญ–ๆฎงๆฎชๆฎซๆฏˆๆฏ‡ๆฐ„ๆฐƒๆฐ†ๆพญๆฟ‹ๆพฃๆฟ‡ๆพผๆฟŽๆฟˆๆฝžๆฟ„ๆพฝๆพžๆฟŠๆพจ็€„ๆพฅๆพฎๆพบๆพฌๆพชๆฟๆพฟๆพธ๏ฟฝ".split("");for(j=0;j!=D[233].length;++j)if(D[233][j].charCodeAt(0)!==65533){e[D[233][j]]=59648+j;d[59648+j]=D[233][j]}D[234]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆพขๆฟ‰ๆพซๆฟๆพฏๆพฒๆพฐ็‡…็‡‚็†ฟ็†ธ็‡–็‡€็‡็‡‹็‡”็‡Š็‡‡็‡็†ฝ็‡˜็†ผ็‡†็‡š็‡›็Š็Šž็ฉ็ฆ็ง็ฌ็ฅ็ซ็ช็‘ฟ็’š็’ ็’”็’’็’•็’ก็”‹็–€็˜ฏ็˜ญ็˜ฑ็˜ฝ็˜ณ็˜ผ็˜ต็˜ฒ็˜ฐ็šป็›ฆ็žš็ž็žก็žœ็ž›็žข็žฃ็ž•็ž™๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ž—็ฃ็ฃฉ็ฃฅ็ฃช็ฃž็ฃฃ็ฃ›็ฃก็ฃข็ฃญ็ฃŸ็ฃ ็ฆค็ฉ„็ฉˆ็ฉ‡็ชถ็ชธ็ชต็ชฑ็ชท็ฏž็ฏฃ็ฏง็ฏ็ฏ•็ฏฅ็ฏš็ฏจ็ฏน็ฏ”็ฏช็ฏข็ฏœ็ฏซ็ฏ˜็ฏŸ็ณ’็ณ”็ณ—็ณ็ณ‘็ธ’็ธก็ธ—็ธŒ็ธŸ็ธ ็ธ“็ธŽ็ธœ็ธ•็ธš็ธข็ธ‹็ธ็ธ–็ธ็ธ”็ธฅ็ธค็ฝƒ็ฝป็ฝผ็ฝบ็พฑ็ฟฏ่€ช่€ฉ่ฌ่†ฑ่†ฆ่†ฎ่†น่†ต่†ซ่†ฐ่†ฌ่†ด่†ฒ่†ท่†ง่‡ฒ่‰•่‰–่‰—่•–่•…่•ซ่•่•“่•ก่•˜๏ฟฝ".split("");for(j=0;j!=D[234].length;++j)if(D[234][j].charCodeAt(0)!==65533){e[D[234][j]]=59904+j;d[59904+j]=D[234][j]}D[235]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่•€่•†่•ค่•่•ข่•„่•‘่•‡่•ฃ่”พ่•›่•ฑ่•Ž่•ฎ่•ต่••่•ง่• ่–Œ่•ฆ่•่•”่•ฅ่•ฌ่™ฃ่™ฅ่™ค่ž›่ž่ž—่ž“่ž’่žˆ่ž่ž–่ž˜่น่ž‡่žฃ่ž…่ž่ž‘่ž่ž„่ž”่žœ่žš่ž‰่คž่คฆ่คฐ่คญ่คฎ่คง่คฑ่คข่คฉ่คฃ่คฏ่คฌ่คŸ่งฑ่ซ ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ซข่ซฒ่ซด่ซต่ซ่ฌ”่ซค่ซŸ่ซฐ่ซˆ่ซž่ซก่ซจ่ซฟ่ซฏ่ซป่ฒ‘่ฒ’่ฒ่ณต่ณฎ่ณฑ่ณฐ่ณณ่ตฌ่ตฎ่ถฅ่ถง่ธณ่ธพ่ธธ่น€่น…่ธถ่ธผ่ธฝ่น่ธฐ่ธฟ่บฝ่ผถ่ผฎ่ผต่ผฒ่ผน่ผท่ผด้ถ้น้ป้‚†้ƒบ้„ณ้„ต้„ถ้†“้†้†‘้†้†้Œง้Œž้Œˆ้ŒŸ้Œ†้Œ้บ้Œธ้Œผ้Œ›้Œฃ้Œ’้Œ้†้Œญ้ŒŽ้Œ้‹‹้Œ้‹บ้Œฅ้Œ“้‹น้‹ท้Œด้Œ‚้Œค้‹ฟ้Œฉ้Œน้Œต้Œช้Œ”้ŒŒ๏ฟฝ".split("");for(j=0;j!=D[235].length;++j)if(D[235][j].charCodeAt(0)!==65533){e[D[235][j]]=60160+j;d[60160+j]=D[235][j]}D[236]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้Œ‹้‹พ้Œ‰้Œ€้‹ป้Œ–้–ผ้—้–พ้–น้–บ้–ถ้–ฟ้–ต้–ฝ้šฉ้›”้œ‹้œ’้œ้ž™้ž—้ž”้Ÿฐ้Ÿธ้ ต้ ฏ้ ฒ้คค้คŸ้คง้คฉ้ฆž้งฎ้งฌ้งฅ้งค้งฐ้งฃ้งช้งฉ้งง้ชน้ชฟ้ชด้ชป้ซถ้ซบ้ซน้ซท้ฌณ้ฎ€้ฎ…้ฎ‡้ญผ้ญพ้ญป้ฎ‚้ฎ“้ฎ’้ฎ้ญบ้ฎ•๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ญฝ้ฎˆ้ดฅ้ด—้ด ้ดž้ด”้ดฉ้ด้ด˜้ดข้ด้ด™้ดŸ้บˆ้บ†้บ‡้บฎ้บญ้ป•้ป–้ปบ้ผ’้ผฝๅ„ฆๅ„ฅๅ„ขๅ„คๅ„ ๅ„ฉๅ‹ดๅš“ๅšŒๅšๅš†ๅš„ๅšƒๅ™พๅš‚ๅ™ฟๅšๅฃ–ๅฃ”ๅฃๅฃ’ๅฌญๅฌฅๅฌฒๅฌฃๅฌฌๅฌงๅฌฆๅฌฏๅฌฎๅญปๅฏฑๅฏฒๅถทๅนฌๅนชๅพพๅพปๆ‡ƒๆ†ตๆ†ผๆ‡งๆ‡ ๆ‡ฅๆ‡คๆ‡จๆ‡žๆ“ฏๆ“ฉๆ“ฃๆ“ซๆ“คๆ“จๆ–ๆ–€ๆ–ถๆ—šๆ›’ๆชๆช–ๆชๆชฅๆช‰ๆชŸๆช›ๆชกๆชžๆช‡ๆช“ๆชŽ๏ฟฝ".split("");for(j=0;j!=D[236].length;++j)if(D[236][j].charCodeAt(0)!==65533){e[D[236][j]]=60416+j;d[60416+j]=D[236][j]}D[237]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๆช•ๆชƒๆชจๆชคๆช‘ๆฉฟๆชฆๆชšๆช…ๆชŒๆช’ๆญ›ๆฎญๆฐ‰ๆฟŒๆพฉๆฟดๆฟ”ๆฟฃๆฟœๆฟญๆฟงๆฟฆๆฟžๆฟฒๆฟๆฟขๆฟจ็‡ก็‡ฑ็‡จ็‡ฒ็‡ค็‡ฐ็‡ข็ณ็ฎ็ฏ็’—็’ฒ็’ซ็’็’ช็’ญ็’ฑ็’ฅ็’ฏ็”็”‘็”’็”็–„็™ƒ็™ˆ็™‰็™‡็šค็›ฉ็žต็žซ็žฒ็žท็žถ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็žด็žฑ็žจ็Ÿฐ็ฃณ็ฃฝ็ค‚็ฃป็ฃผ็ฃฒ็ค…็ฃน็ฃพ็ค„็ฆซ็ฆจ็ฉœ็ฉ›็ฉ–็ฉ˜็ฉ”็ฉš็ชพ็ซ€็ซ็ฐ…็ฐ็ฏฒ็ฐ€็ฏฟ็ฏป็ฐŽ็ฏด็ฐ‹็ฏณ็ฐ‚็ฐ‰็ฐƒ็ฐ็ฏธ็ฏฝ็ฐ†็ฏฐ็ฏฑ็ฐ็ฐŠ็ณจ็ธญ็ธผ็น‚็ธณ้กˆ็ธธ็ธช็น‰็น€็น‡็ธฉ็นŒ็ธฐ็ธป็ธถ็น„็ธบ็ฝ…็ฝฟ็ฝพ็ฝฝ็ฟด็ฟฒ่€ฌ่†ป่‡„่‡Œ่‡Š่‡…่‡‡่†ผ่‡ฉ่‰›่‰š่‰œ่–ƒ่–€่–่–ง่–•่– ่–‹่–ฃ่•ป่–ค่–š่–ž๏ฟฝ".split("");for(j=0;j!=D[237].length;++j)if(D[237][j].charCodeAt(0)!==65533){e[D[237][j]]=60672+j;d[60672+j]=D[237][j]}D[238]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่•ท่•ผ่–‰่–ก่•บ่•ธ่•—่–Ž่––่–†่–่–™่–่–่–ข่–‚่–ˆ่–…่•น่•ถ่–˜่–่–Ÿ่™จ่žพ่žช่žญ่Ÿ…่žฐ่žฌ่žน่žต่žผ่žฎ่Ÿ‰่Ÿƒ่Ÿ‚่ŸŒ่žท่žฏ่Ÿ„่ŸŠ่žด่žถ่žฟ่žธ่žฝ่Ÿž่žฒ่คต่คณ่คผ่คพ่ฅ่ฅ’่คท่ฅ‚่ฆญ่ฆฏ่ฆฎ่งฒ่งณ่ฌž๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฌ˜่ฌ–่ฌ‘่ฌ…่ฌ‹่ฌข่ฌ่ฌ’่ฌ•่ฌ‡่ฌ่ฌˆ่ฌ†่ฌœ่ฌ“่ฌš่ฑ่ฑฐ่ฑฒ่ฑฑ่ฑฏ่ฒ•่ฒ”่ณน่ตฏ่นŽ่น่น“่น่นŒ่น‡่ฝƒ่ฝ€้‚…้พ้„ธ้†š้†ข้†›้†™้†Ÿ้†ก้†้† ้Žก้Žƒ้Žฏ้ค้–้‡้ผ้˜้œ้ถ้‰้้‘้ ้ญ้Ž้Œ้ช้น้—้•้’้้ฑ้ท้ป้ก้ž้ฃ้ง้Ž€้Ž้™้—‡้—€้—‰้—ƒ้—…้–ท้šฎ้šฐ้šฌ้œ ้œŸ้œ˜้œ้œ™้žš้žก้žœ๏ฟฝ".split("");for(j=0;j!=D[238].length;++j)if(D[238][j].charCodeAt(0)!==65533){e[D[238][j]]=60928+j;d[60928+j]=D[238][j]}D[239]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้žž้ž้Ÿ•้Ÿ”้Ÿฑ้ก้ก„้กŠ้ก‰้ก…้กƒ้คฅ้คซ้คฌ้คช้คณ้คฒ้คฏ้คญ้คฑ้คฐ้ฆ˜้ฆฃ้ฆก้จ‚้งบ้งด้งท้งน้งธ้งถ้งป้งฝ้งพ้งผ้จƒ้ชพ้ซพ้ซฝ้ฌ้ซผ้ญˆ้ฎš้ฎจ้ฎž้ฎ›้ฎฆ้ฎก้ฎฅ้ฎค้ฎ†้ฎข้ฎ ้ฎฏ้ดณ้ต้ตง้ดถ้ดฎ้ดฏ้ดฑ้ดธ้ดฐ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ต…้ต‚้ตƒ้ดพ้ดท้ต€้ดฝ็ฟต้ดญ้บŠ้บ‰้บ้บฐ้ปˆ้ปš้ปป้ปฟ้ผค้ผฃ้ผข้ฝ”้พ ๅ„ฑๅ„ญๅ„ฎๅš˜ๅšœๅš—ๅššๅšๅš™ๅฅฐๅฌผๅฑฉๅฑชๅท€ๅนญๅนฎๆ‡˜ๆ‡Ÿๆ‡ญๆ‡ฎๆ‡ฑๆ‡ชๆ‡ฐๆ‡ซๆ‡–ๆ‡ฉๆ“ฟๆ”„ๆ“ฝๆ“ธๆ”ๆ”ƒๆ“ผๆ–”ๆ—›ๆ›šๆ››ๆ›˜ๆซ…ๆชนๆชฝๆซกๆซ†ๆชบๆชถๆชทๆซ‡ๆชดๆชญๆญžๆฏ‰ๆฐ‹็€‡็€Œ็€็€็€…็€”็€Žๆฟฟ็€€ๆฟป็€ฆๆฟผๆฟท็€Š็ˆ็‡ฟ็‡น็ˆƒ็‡ฝ็ถ๏ฟฝ".split("");for(j=0;j!=D[239].length;++j)if(D[239][j].charCodeAt(0)!==65533){e[D[239][j]]=61184+j;d[61184+j]=D[239][j]}D[240]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็’ธ็“€็’ต็“็’พ็’ถ็’ป็“‚็””็”“็™œ็™ค็™™็™็™“็™—็™š็šฆ็šฝ็›ฌ็Ÿ‚็žบ็ฃฟ็คŒ็ค“็ค”็ค‰็ค็ค’็ค‘็ฆญ็ฆฌ็ฉŸ็ฐœ็ฐฉ็ฐ™็ฐ ็ฐŸ็ฐญ็ฐ็ฐฆ็ฐจ็ฐข็ฐฅ็ฐฐ็นœ็น็น–็นฃ็น˜็นข็นŸ็น‘็น ็น—็น“็พต็พณ็ฟท็ฟธ่ต่‡‘่‡’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่‡่‰Ÿ่‰ž่–ด่—†่—€่—ƒ่—‚่–ณ่–ต่–ฝ่—‡่—„่–ฟ่—‹่—Ž่—ˆ่—…่–ฑ่–ถ่—’่˜ค่–ธ่–ท่–พ่™ฉ่Ÿง่Ÿฆ่Ÿข่Ÿ›่Ÿซ่Ÿช่Ÿฅ่ŸŸ่Ÿณ่Ÿค่Ÿ”่Ÿœ่Ÿ“่Ÿญ่Ÿ˜่Ÿฃ่žค่Ÿ—่Ÿ™่ ่Ÿด่Ÿจ่Ÿ่ฅ“่ฅ‹่ฅ่ฅŒ่ฅ†่ฅ่ฅ‘่ฅ‰่ฌช่ฌง่ฌฃ่ฌณ่ฌฐ่ฌต่ญ‡่ฌฏ่ฌผ่ฌพ่ฌฑ่ฌฅ่ฌท่ฌฆ่ฌถ่ฌฎ่ฌค่ฌป่ฌฝ่ฌบ่ฑ‚่ฑต่ฒ™่ฒ˜่ฒ—่ณพ่ด„่ด‚่ด€่นœ่นข่น ่น—่น–่นž่นฅ่นง๏ฟฝ".split("");for(j=0;j!=D[240].length;++j)if(D[240][j].charCodeAt(0)!==65533){e[D[240][j]]=61440+j;d[61440+j]=D[240][j]}D[241]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่น›่นš่นก่น่นฉ่น”่ฝ†่ฝ‡่ฝˆ่ฝ‹้„จ้„บ้„ป้„พ้†จ้†ฅ้†ง้†ฏ้†ช้Žต้ŽŒ้Ž’้Žท้Ž›้Ž้Ž‰้Žง้ŽŽ้Žช้Žž้Žฆ้Ž•้Žˆ้Ž™้ŽŸ้Ž้Žฑ้Ž‘้Žฒ้Žค้Žจ้Žด้Žฃ้Žฅ้—’้—“้—‘้šณ้›—้›šๅท‚้›Ÿ้›˜้›้œฃ้œข้œฅ้žฌ้žฎ้žจ้žซ้žค้žช๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้žข้žฅ้Ÿ—้Ÿ™้Ÿ–้Ÿ˜้Ÿบ้ก้ก‘้ก’้ขธ้ฅ้คผ้คบ้จ้จ‹้จ‰้จ้จ„้จ‘้จŠ้จ…้จ‡้จ†้ซ€้ซœ้ฌˆ้ฌ„้ฌ…้ฌฉ้ฌต้ญŠ้ญŒ้ญ‹้ฏ‡้ฏ†้ฏƒ้ฎฟ้ฏ้ฎต้ฎธ้ฏ“้ฎถ้ฏ„้ฎน้ฎฝ้ตœ้ต“้ต้ตŠ้ต›้ต‹้ต™้ต–้ตŒ้ต—้ต’้ต”้ตŸ้ต˜้ตš้บŽ้บŒ้ปŸ้ผ้ผ€้ผ–้ผฅ้ผซ้ผช้ผฉ้ผจ้ฝŒ้ฝ•ๅ„ดๅ„ตๅŠ–ๅ‹ทๅŽดๅšซๅšญๅšฆๅšงๅšชๅšฌๅฃšๅฃๅฃ›ๅค’ๅฌฝๅฌพๅฌฟๅทƒๅนฐ๏ฟฝ".split("");for(j=0;j!=D[241].length;++j)if(D[241][j].charCodeAt(0)!==65533){e[D[241][j]]=61696+j;d[61696+j]=D[241][j]}D[242]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅพฟๆ‡ปๆ”‡ๆ”ๆ”ๆ”‰ๆ”Œๆ”Žๆ–„ๆ—žๆ—ๆ›žๆซงๆซ ๆซŒๆซ‘ๆซ™ๆซ‹ๆซŸๆซœๆซๆซซๆซๆซๆซžๆญ ๆฎฐๆฐŒ็€™็€ง็€ ็€–็€ซ็€ก็€ข็€ฃ็€ฉ็€—็€ค็€œ็€ช็ˆŒ็ˆŠ็ˆ‡็ˆ‚็ˆ…็Šฅ็Šฆ็Šค็Šฃ็Šก็“‹็“…็’ท็“ƒ็”–็™ ็Ÿ‰็ŸŠ็Ÿ„็Ÿฑ็ค็ค›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็คก็คœ็ค—็คž็ฆฐ็ฉง็ฉจ็ฐณ็ฐผ็ฐน็ฐฌ็ฐป็ณฌ็ณช็นถ็นต็นธ็นฐ็นท็นฏ็นบ็นฒ็นด็นจ็ฝ‹็ฝŠ็พƒ็พ†็พท็ฟฝ็ฟพ่ธ่‡—่‡•่‰ค่‰ก่‰ฃ่—ซ่—ฑ่—ญ่—™่—ก่—จ่—š่——่—ฌ่—ฒ่—ธ่—˜่—Ÿ่—ฃ่—œ่—‘่—ฐ่—ฆ่—ฏ่—ž่—ข่ €่Ÿบ่ ƒ่Ÿถ่Ÿท่ ‰่ Œ่ ‹่ †่Ÿผ่ ˆ่Ÿฟ่ Š่ ‚่ฅข่ฅš่ฅ›่ฅ—่ฅก่ฅœ่ฅ˜่ฅ่ฅ™่ฆˆ่ฆท่ฆถ่งถ่ญ่ญˆ่ญŠ่ญ€่ญ“่ญ–่ญ”่ญ‹่ญ•๏ฟฝ".split("");for(j=0;j!=D[242].length;++j)if(D[242][j].charCodeAt(0)!==65533){e[D[242][j]]=61952+j;d[61952+j]=D[242][j]}D[243]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ญ‘่ญ‚่ญ’่ญ—่ฑƒ่ฑท่ฑถ่ฒš่ด†่ด‡่ด‰่ถฌ่ถช่ถญ่ถซ่นญ่นธ่นณ่นช่นฏ่นป่ป‚่ฝ’่ฝ‘่ฝ่ฝ่ฝ“่พด้…€้„ฟ้†ฐ้†ญ้ž้‡้้‚้š้้น้ฌ้Œ้™้Žฉ้ฆ้Š้”้ฎ้ฃ้•้„้Ž้€้’้ง้•ฝ้—š้—›้›ก้œฉ้œซ้œฌ้œจ้œฆ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้žณ้žท้žถ้Ÿ้Ÿž้ŸŸ้กœ้ก™้ก้ก—้ขฟ้ขฝ้ขป้ขพ้ฅˆ้ฅ‡้ฅƒ้ฆฆ้ฆง้จš้จ•้จฅ้จ้จค้จ›้จข้จ ้จง้จฃ้จž้จœ้จ”้ซ‚้ฌ‹้ฌŠ้ฌŽ้ฌŒ้ฌท้ฏช้ฏซ้ฏ ้ฏž้ฏค้ฏฆ้ฏข้ฏฐ้ฏ”้ฏ—้ฏฌ้ฏœ้ฏ™้ฏฅ้ฏ•้ฏก้ฏš้ตท้ถ้ถŠ้ถ„้ถˆ้ตฑ้ถ€้ตธ้ถ†้ถ‹้ถŒ้ตฝ้ตซ้ตด้ตต้ตฐ้ตฉ้ถ…้ตณ้ตป้ถ‚้ตฏ้ตน้ตฟ้ถ‡้ตจ้บ”้บ‘้ป€้ปผ้ผญ้ฝ€้ฝ้ฝ้ฝ–้ฝ—้ฝ˜ๅŒทๅšฒ๏ฟฝ".split("");for(j=0;j!=D[243].length;++j)if(D[243][j].charCodeAt(0)!==65533){e[D[243][j]]=62208+j;d[62208+j]=D[243][j]}D[244]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝๅšตๅšณๅฃฃๅญ…ๅท†ๅท‡ๅปฎๅปฏๅฟ€ๅฟๆ‡นๆ”—ๆ”–ๆ”•ๆ”“ๆ—Ÿๆ›จๆ›ฃๆ›คๆซณๆซฐๆซชๆซจๆซนๆซฑๆซฎๆซฏ็€ผ็€ต็€ฏ็€ท็€ด็€ฑ็‚็€ธ็€ฟ็€บ็€น็€็€ป็€ณ็็ˆ“็ˆ”็Šจ็ฝ็ผ็’บ็šซ็šช็šพ็›ญ็ŸŒ็ŸŽ็Ÿ็Ÿ็Ÿฒ็คฅ็คฃ็คง็คจ็คค็คฉ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ฆฒ็ฉฎ็ฉฌ็ฉญ็ซท็ฑ‰็ฑˆ็ฑŠ็ฑ‡็ฑ…็ณฎ็นป็นพ็บ็บ€็พบ็ฟฟ่น่‡›่‡™่ˆ‹่‰จ่‰ฉ่˜ข่—ฟ่˜่—พ่˜›่˜€่—ถ่˜„่˜‰่˜…่˜Œ่—ฝ่ ™่ ่ ‘่ —่ “่ –่ฅฃ่ฅฆ่ฆน่งท่ญ ่ญช่ญ่ญจ่ญฃ่ญฅ่ญง่ญญ่ถฎ่บ†่บˆ่บ„่ฝ™่ฝ–่ฝ—่ฝ•่ฝ˜่ฝš้‚้…ƒ้…้†ท้†ต้†ฒ้†ณ้‹้“้ป้ ้้”้พ้•้้จ้™้้ต้€้ท้‡้Ž้–้’้บ้‰้ธ้Š้ฟ๏ฟฝ".split("");for(j=0;j!=D[244].length;++j)if(D[244][j].charCodeAt(0)!==65533){e[D[244][j]]=62464+j;d[62464+j]=D[244][j]}D[245]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ผ้Œ้ถ้‘้†้—ž้— ้—Ÿ้œฎ้œฏ้žน้žป้Ÿฝ้Ÿพ้ก ้กข้กฃ้กŸ้ฃ้ฃ‚้ฅ้ฅŽ้ฅ™้ฅŒ้ฅ‹้ฅ“้จฒ้จด้จฑ้จฌ้จช้จถ้จฉ้จฎ้จธ้จญ้ซ‡้ซŠ้ซ†้ฌ้ฌ’้ฌ‘้ฐ‹้ฐˆ้ฏท้ฐ…้ฐ’้ฏธ้ฑ€้ฐ‡้ฐŽ้ฐ†้ฐ—้ฐ”้ฐ‰้ถŸ้ถ™้ถค้ถ้ถ’้ถ˜้ถ้ถ›๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ถ ้ถ”้ถœ้ถช้ถ—้ถก้ถš้ถข้ถจ้ถž้ถฃ้ถฟ้ถฉ้ถ–้ถฆ้ถง้บ™้บ›้บš้ปฅ้ปค้ปง้ปฆ้ผฐ้ผฎ้ฝ›้ฝ ้ฝž้ฝ้ฝ™้พ‘ๅ„บๅ„นๅŠ˜ๅŠ—ๅ›ƒๅšฝๅšพๅญˆๅญ‡ๅท‹ๅทๅปฑๆ‡ฝๆ”›ๆฌ‚ๆซผๆฌƒๆซธๆฌ€็ƒ็„็Š็ˆ็‰็…็†็ˆ็ˆš็ˆ™็พ็”—็™ช็Ÿ็คญ็คฑ็คฏ็ฑ”็ฑ“็ณฒ็บŠ็บ‡็บˆ็บ‹็บ†็บ็ฝ็พป่€ฐ่‡่˜˜่˜ช่˜ฆ่˜Ÿ่˜ฃ่˜œ่˜™่˜ง่˜ฎ่˜ก่˜ ่˜ฉ่˜ž่˜ฅ๏ฟฝ".split("");for(j=0;j!=D[245].length;++j)if(D[245][j].charCodeAt(0)!==65533){e[D[245][j]]=62720+j;d[62720+j]=D[245][j]}D[246]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ ฉ่ ่ ›่  ่ ค่ œ่ ซ่กŠ่ฅญ่ฅฉ่ฅฎ่ฅซ่งบ่ญน่ญธ่ญ…่ญบ่ญป่ด่ด”่ถฏ่บŽ่บŒ่ฝž่ฝ›่ฝ้…†้…„้……้†น้ฟ้ป้ถ้ฉ้ฝ้ผ้ฐ้น้ช้ท้ฌ้‘€้ฑ้—ฅ้—ค้—ฃ้œต้œบ้žฟ้Ÿก้กค้ฃ‰้ฃ†้ฃ€้ฅ˜้ฅ–้จน้จฝ้ฉ†้ฉ„้ฉ‚้ฉ้จบ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้จฟ้ซ้ฌ•้ฌ—้ฌ˜้ฌ–้ฌบ้ญ’้ฐซ้ฐ้ฐœ้ฐฌ้ฐฃ้ฐจ้ฐฉ้ฐค้ฐก้ถท้ถถ้ถผ้ท้ท‡้ทŠ้ท้ถพ้ท…้ทƒ้ถป้ถต้ทŽ้ถน้ถบ้ถฌ้ทˆ้ถฑ้ถญ้ทŒ้ถณ้ท้ถฒ้นบ้บœ้ปซ้ปฎ้ปญ้ผ›้ผ˜้ผš้ผฑ้ฝŽ้ฝฅ้ฝค้พ’ไบนๅ›†ๅ›…ๅ›‹ๅฅฑๅญ‹ๅญŒๅท•ๅท‘ๅปฒๆ”กๆ” ๆ”ฆๆ”ขๆฌ‹ๆฌˆๆฌ‰ๆฐ็•็–็—็’็ˆž็ˆŸ็Šฉ็ฟ็“˜็“•็“™็“—็™ญ็šญ็คต็ฆด็ฉฐ็ฉฑ็ฑ—็ฑœ็ฑ™็ฑ›็ฑš๏ฟฝ".split("");for(j=0;j!=D[246].length;++j)if(D[246][j].charCodeAt(0)!==65533){e[D[246][j]]=62976+j;d[62976+j]=D[246][j]}D[247]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็ณด็ณฑ็บ‘็ฝ็พ‡่‡ž่‰ซ่˜ด่˜ต่˜ณ่˜ฌ่˜ฒ่˜ถ่ ฌ่ จ่ ฆ่ ช่ ฅ่ฅฑ่ฆฟ่ฆพ่งป่ญพ่ฎ„่ฎ‚่ฎ†่ฎ…่ญฟ่ด•่บ•่บ”่บš่บ’่บ่บ–่บ—่ฝ ่ฝข้…‡้‘Œ้‘้‘Š้‘‹้‘้‘‡้‘…้‘ˆ้‘‰้‘†้œฟ้Ÿฃ้กช้กฉ้ฃ‹้ฅ”้ฅ›้ฉŽ้ฉ“้ฉ”้ฉŒ้ฉ้ฉˆ้ฉŠ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฉ‰้ฉ’้ฉ้ซ้ฌ™้ฌซ้ฌป้ญ–้ญ•้ฑ†้ฑˆ้ฐฟ้ฑ„้ฐน้ฐณ้ฑ้ฐผ้ฐท้ฐด้ฐฒ้ฐฝ้ฐถ้ท›้ท’้ทž้ทš้ท‹้ท้ทœ้ท‘้ทŸ้ทฉ้ท™้ท˜้ท–้ทต้ท•้ท้บถ้ปฐ้ผต้ผณ้ผฒ้ฝ‚้ฝซ้พ•้พขๅ„ฝๅŠ™ๅฃจๅฃงๅฅฒๅญๅท˜่ ฏๅฝๆˆๆˆƒๆˆ„ๆ”ฉๆ”ฅๆ––ๆ›ซๆฌ‘ๆฌ’ๆฌๆฏŠ็›็š็ˆข็Ž‚็Ž็Žƒ็™ฐ็Ÿ”็ฑง็ฑฆ็บ•่‰ฌ่˜บ่™€่˜น่˜ผ่˜ฑ่˜ป่˜พ่ ฐ่ ฒ่ ฎ่ ณ่ฅถ่ฅด่ฅณ่งพ๏ฟฝ".split("");for(j=0;j!=D[247].length;++j)if(D[247][j].charCodeAt(0)!==65533){e[D[247][j]]=63232+j;d[63232+j]=D[247][j]}D[248]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ่ฎŒ่ฎŽ่ฎ‹่ฎˆ่ฑ…่ด™่บ˜่ฝค่ฝฃ้†ผ้‘ข้‘•้‘้‘—้‘ž้Ÿ„้Ÿ…้ €้ฉ–้ฉ™้ฌž้ฌŸ้ฌ ้ฑ’้ฑ˜้ฑ้ฑŠ้ฑ้ฑ‹้ฑ•้ฑ™้ฑŒ้ฑŽ้ทป้ทท้ทฏ้ทฃ้ทซ้ทธ้ทค้ทถ้ทก้ทฎ้ทฆ้ทฒ้ทฐ้ทข้ทฌ้ทด้ทณ้ทจ้ทญ้ป‚้ป้ปฒ้ปณ้ผ†้ผœ้ผธ้ผท้ผถ้ฝƒ้ฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้ฝฑ้ฝฐ้ฝฎ้ฝฏๅ›“ๅ›ๅญŽๅฑญๆ”ญๆ›ญๆ›ฎๆฌ“็Ÿ็ก็็ ็ˆฃ็“›็“ฅ็Ÿ•็คธ็ฆท็ฆถ็ฑช็บ—็พ‰่‰ญ่™ƒ่ ธ่ ท่ ต่ก‹่ฎ”่ฎ•่บž่บŸ่บ ่บ้†พ้†ฝ้‡‚้‘ซ้‘จ้‘ฉ้›ฅ้†้ƒ้‡้Ÿ‡้Ÿฅ้ฉž้ซ•้ญ™้ฑฃ้ฑง้ฑฆ้ฑข้ฑž้ฑ ้ธ‚้ทพ้ธ‡้ธƒ้ธ†้ธ…้ธ€้ธ้ธ‰้ทฟ้ทฝ้ธ„้บ ้ผž้ฝ†้ฝด้ฝต้ฝถๅ›”ๆ”ฎๆ–ธๆฌ˜ๆฌ™ๆฌ—ๆฌš็ข็ˆฆ็Šช็Ÿ˜็Ÿ™็คน็ฑฉ็ฑซ็ณถ็บš๏ฟฝ".split("");for(j=0;j!=D[248].length;++j)if(D[248][j].charCodeAt(0)!==65533){e[D[248][j]]=63488+j;d[63488+j]=D[248][j]}D[249]="๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ็บ˜็บ›็บ™่‡ ่‡ก่™†่™‡่™ˆ่ฅน่ฅบ่ฅผ่ฅป่งฟ่ฎ˜่ฎ™่บฅ่บค่บฃ้‘ฎ้‘ญ้‘ฏ้‘ฑ้‘ณ้‰้กฒ้ฅŸ้ฑจ้ฑฎ้ฑญ้ธ‹้ธ้ธ้ธ้ธ’้ธ‘้บก้ปต้ผ‰้ฝ‡้ฝธ้ฝป้ฝบ้ฝนๅœž็ฆ็ฑฏ่ ผ่ถฒ่บฆ้‡ƒ้‘ด้‘ธ้‘ถ้‘ต้ฉ ้ฑด้ฑณ้ฑฑ้ฑต้ธ”้ธ“้ปถ้ผŠ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ้พค็จ็ฅ็ณท่™ช่ พ่ ฝ่ ฟ่ฎž่ฒœ่บฉ่ป‰้‹้กณ้กด้ฃŒ้ฅก้ฆซ้ฉค้ฉฆ้ฉง้ฌค้ธ•้ธ—้ฝˆๆˆ‡ๆฌž็ˆง่™Œ่บจ้’‚้’€้’้ฉฉ้ฉจ้ฌฎ้ธ™็ˆฉ่™‹่ฎŸ้’ƒ้ฑน้บท็™ต้ฉซ้ฑบ้ธ็ฉ็ช้บค้ฝพ้ฝ‰้พ˜็ข้Šน่ฃๅขปๆ’็ฒงๅซบโ•”โ•ฆโ•—โ• โ•ฌโ•ฃโ•šโ•ฉโ•โ•’โ•คโ••โ•žโ•ชโ•กโ•˜โ•งโ•›โ•“โ•ฅโ•–โ•Ÿโ•ซโ•ขโ•™โ•จโ•œโ•‘โ•โ•ญโ•ฎโ•ฐโ•ฏโ–“๏ฟฝ".split("");for(j=0;j!=D[249].length;++j)if(D[249][j].charCodeAt(0)!==65533){e[D[249][j]]=63744+j;d[63744+j]=D[249][j]}return{enc:e,dec:d}}();cptable[1250]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝโ€š๏ฟฝโ€žโ€ฆโ€ โ€ก๏ฟฝโ€ฐล โ€นลšลคลฝลน๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ขลกโ€บล›ลฅลพลบย ห‡ห˜ลยคฤ„ยฆยงยจยฉลžยซยฌยญยฎลปยฐยฑห›ล‚ยดยตยถยทยธฤ…ลŸยปฤฝหฤพลผล”รร‚ฤ‚ร„ฤนฤ†ร‡ฤŒร‰ฤ˜ร‹ฤšรรŽฤŽฤลƒล‡ร“ร”ลร–ร—ล˜ลฎรšลฐรœรลขรŸล•รกรขฤƒรคฤบฤ‡รงฤรฉฤ™รซฤ›รญรฎฤฤ‘ล„ลˆรณรดล‘รถรทล™ลฏรบลฑรผรฝลฃห™",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1251]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ะ‚ะƒโ€šั“โ€žโ€ฆโ€ โ€กโ‚ฌโ€ฐะ‰โ€นะŠะŒะ‹ะั’โ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ขั™โ€บัšัœั›ัŸย ะŽัžะˆยคายฆยงะยฉะ„ยซยฌยญยฎะ‡ยฐยฑะ†ั–า‘ยตยถยทั‘โ„–ั”ยปั˜ะ…ั•ั—ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽั",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1252]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐล โ€นล’๏ฟฝลฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ขลกโ€บล“๏ฟฝลพลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรรร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœรรžรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏรฐรฑรฒรณรดรตรถรทรธรนรบรปรผรฝรพรฟ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1253]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€ก๏ฟฝโ€ฐ๏ฟฝโ€น๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ข๏ฟฝโ€บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝย ฮ…ฮ†ยฃยคยฅยฆยงยจยฉ๏ฟฝยซยฌยญยฎโ€•ยฐยฑยฒยณฮ„ยตยถยทฮˆฮ‰ฮŠยปฮŒยฝฮŽฮฮฮ‘ฮ’ฮ“ฮ”ฮ•ฮ–ฮ—ฮ˜ฮ™ฮšฮ›ฮœฮฮžฮŸฮ ฮก๏ฟฝฮฃฮคฮฅฮฆฮงฮจฮฉฮชฮซฮฌฮญฮฎฮฏฮฐฮฑฮฒฮณฮดฮตฮถฮทฮธฮนฮบฮปฮผฮฝฮพฮฟฯ€ฯฯ‚ฯƒฯ„ฯ…ฯ†ฯ‡ฯˆฯ‰ฯŠฯ‹ฯŒฯฯŽ๏ฟฝ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1254]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐล โ€นล’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ขลกโ€บล“๏ฟฝ๏ฟฝลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚รƒร„ร…ร†ร‡รˆร‰รŠร‹รŒรรŽรฤžร‘ร’ร“ร”ร•ร–ร—ร˜ร™รšร›รœฤฐลžรŸร รกรขรฃรครฅรฆรงรจรฉรชรซรฌรญรฎรฏฤŸรฑรฒรณรดรตรถรทรธรนรบรปรผฤฑลŸรฟ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1255]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐ๏ฟฝโ€น๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ข๏ฟฝโ€บ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝย ยกยขยฃโ‚ชยฅยฆยงยจยฉร—ยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนรทยปยผยฝยพยฟึฐึฑึฒึณึดึตึถึทึธึน๏ฟฝึปึผึฝึพึฟื€ืื‚ืƒืฐืฑืฒืณืด๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝืื‘ื’ื“ื”ื•ื–ื—ื˜ื™ืšื›ืœืืžืŸื ืกืขืฃืคืฅืฆืงืจืฉืช๏ฟฝ๏ฟฝโ€Žโ€๏ฟฝ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1256]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌูพโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐูนโ€นล’ฺ†ฺ˜ฺˆฺฏโ€˜โ€™โ€œโ€โ€ขโ€“โ€”ฺฉโ„ขฺ‘โ€บล“โ€Œโ€ฺบย ุŒยขยฃยคยฅยฆยงยจยฉฺพยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนุ›ยปยผยฝยพุŸุกุขุฃุคุฅุฆุงุจุฉุชุซุฌุญุฎุฏุฐุฑุฒุณุดุตุถร—ุทุธุนุบู€ูู‚ูƒร ู„รขู…ู†ู‡ูˆรงรจรฉรชรซู‰ูŠรฎรฏู‹ูŒููŽรดููรทู‘รนู’รปรผโ€Žโ€’",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1257]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝโ€š๏ฟฝโ€žโ€ฆโ€ โ€ก๏ฟฝโ€ฐ๏ฟฝโ€น๏ฟฝยจห‡ยธ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”๏ฟฝโ„ข๏ฟฝโ€บ๏ฟฝยฏห›๏ฟฝย ๏ฟฝยขยฃยค๏ฟฝยฆยงร˜ยฉล–ยซยฌยญยฎร†ยฐยฑยฒยณยดยตยถยทรธยนล—ยปยผยฝยพรฆฤ„ฤฎฤ€ฤ†ร„ร…ฤ˜ฤ’ฤŒร‰ลนฤ–ฤขฤถฤชฤปล ลƒล…ร“ลŒร•ร–ร—ลฒลลšลชรœลปลฝรŸฤ…ฤฏฤฤ‡รครฅฤ™ฤ“ฤรฉลบฤ—ฤฃฤทฤซฤผลกล„ล†รณลรตรถรทลณล‚ล›ลซรผลผลพห™",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1258]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~โ‚ฌ๏ฟฝโ€šฦ’โ€žโ€ฆโ€ โ€กห†โ€ฐ๏ฟฝโ€นล’๏ฟฝ๏ฟฝ๏ฟฝ๏ฟฝโ€˜โ€™โ€œโ€โ€ขโ€“โ€”หœโ„ข๏ฟฝโ€บล“๏ฟฝ๏ฟฝลธย ยกยขยฃยคยฅยฆยงยจยฉยชยซยฌยญยฎยฏยฐยฑยฒยณยดยตยถยทยธยนยบยปยผยฝยพยฟร€รร‚ฤ‚ร„ร…ร†ร‡รˆร‰รŠร‹ฬ€รรŽรฤร‘ฬ‰ร“ร”ฦ ร–ร—ร˜ร™รšร›รœฦฏฬƒรŸร รกรขฤƒรครฅรฆรงรจรฉรชรซฬรญรฎรฏฤ‘รฑฬฃรณรดฦกรถรทรธรนรบรปรผฦฐโ‚ซรฟ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[1e4]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„ยคโ€นโ€บ๏ฌ๏ฌ‚โ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10006]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร„ยนยฒร‰ยณร–รœฮ…ร รขรคฮ„ยจรงรฉรจรชรซยฃโ„ขรฎรฏโ€ขยฝโ€ฐรดรถยฆยญรนรปรผโ€ ฮ“ฮ”ฮ˜ฮ›ฮžฮ รŸยฎยฉฮฃฮชยงโ‰ ยฐฮ‡ฮ‘ยฑโ‰คโ‰ฅยฅฮ’ฮ•ฮ–ฮ—ฮ™ฮšฮœฮฆฮซฮจฮฉฮฌฮยฌฮŸฮกโ‰ˆฮคยซยปโ€ฆย ฮฅฮงฮ†ฮˆล“โ€“โ€•โ€œโ€โ€˜โ€™รทฮ‰ฮŠฮŒฮŽฮญฮฎฮฏฯŒฮฯฮฑฮฒฯˆฮดฮตฯ†ฮณฮทฮนฮพฮบฮปฮผฮฝฮฟฯ€ฯŽฯฯƒฯ„ฮธฯ‰ฯ‚ฯ‡ฯ…ฮถฯŠฯ‹ฮฮฐ๏ฟฝ",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10007]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ะะ‘ะ’ะ“ะ”ะ•ะ–ะ—ะ˜ะ™ะšะ›ะœะะžะŸะ ะกะขะฃะคะฅะฆะงะจะฉะชะซะฌะญะฎะฏโ€ ยฐยขยฃยงโ€ขยถะ†ยฎยฉโ„ขะ‚ั’โ‰ ะƒั“โˆžยฑโ‰คโ‰ฅั–ยตโˆ‚ะˆะ„ั”ะ‡ั—ะ‰ั™ะŠัšั˜ะ…ยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ะ‹ั›ะŒัœั•โ€“โ€”โ€œโ€โ€˜โ€™รทโ€žะŽัžะัŸโ„–ะั‘ัะฐะฑะฒะณะดะตะถะทะธะนะบะปะผะฝะพะฟั€ัั‚ัƒั„ั…ั†ั‡ัˆั‰ัŠั‹ัŒััŽยค",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10029]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร„ฤ€ฤร‰ฤ„ร–รœรกฤ…ฤŒรคฤฤ†ฤ‡รฉลนลบฤŽรญฤฤ’ฤ“ฤ–รณฤ—รดรถรตรบฤšฤ›รผโ€ ยฐฤ˜ยฃยงโ€ขยถรŸยฎยฉโ„ขฤ™ยจโ‰ ฤฃฤฎฤฏฤชโ‰คโ‰ฅฤซฤถโˆ‚โˆ‘ล‚ฤปฤผฤฝฤพฤนฤบล…ล†ลƒยฌโˆšล„ล‡โˆ†ยซยปโ€ฆย ลˆลร•ล‘ลŒโ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šลล”ล•ล˜โ€นโ€บล™ล–ล—ล โ€šโ€žลกลšล›รลคลฅรลฝลพลชร“ร”ลซลฎรšลฏลฐลฑลฒลณรรฝฤทลปลลผฤขห‡",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10079]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผรยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—Šรฟลธโ„ยครรฐรžรพรฝยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™ฤฑห†หœยฏห˜ห™หšยธหห›ห‡",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();cptable[10081]=function(){var d="\0\b\t\n\x0B\f\r !\"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_`abcdefghijklmnopqrstuvwxyz{|}~ร„ร…ร‡ร‰ร‘ร–รœรกร รขรครฃรฅรงรฉรจรชรซรญรฌรฎรฏรฑรณรฒรดรถรตรบรนรปรผโ€ ยฐยขยฃยงโ€ขยถรŸยฎยฉโ„ขยดยจโ‰ ร†ร˜โˆžยฑโ‰คโ‰ฅยฅยตโˆ‚โˆ‘โˆฯ€โˆซยชยบโ„ฆรฆรธยฟยกยฌโˆšฦ’โ‰ˆโˆ†ยซยปโ€ฆย ร€รƒร•ล’ล“โ€“โ€”โ€œโ€โ€˜โ€™รทโ—ŠรฟลธฤžฤŸฤฐฤฑลžลŸโ€กยทโ€šโ€žโ€ฐร‚รŠรร‹รˆรรŽรรŒร“ร”๏ฟฝร’รšร›ร™๏ฟฝห†หœยฏห˜ห™หšยธหห›ห‡",D=[],e={};for(var i=0;i!=d.length;++i){if(d.charCodeAt(i)!==65533)e[d.charAt(i)]=i;D[i]=d.charAt(i)}return{enc:e,dec:D}}();if(typeof module!=="undefined"&&module.exports)module.exports=cptable;(function(root,factory){"use strict";if(typeof cptable==="undefined"){if(typeof require!=="undefined"){var cpt=cptable;if(typeof module!=="undefined"&&module.exports)module.exports=factory(cpt);else root.cptable=factory(cpt)}else throw new Error("cptable not found")}else cptable=factory(cptable)})(this,function(cpt){"use strict";var magic={1200:"utf16le",1201:"utf16be",12000:"utf32le",12001:"utf32be",16969:"utf64le",20127:"ascii",65000:"utf7",65001:"utf8"};var sbcs_cache=[874,1250,1251,1252,1253,1254,1255,1256,1e4];var dbcs_cache=[932,936,949,950];var magic_cache=[65001];var magic_decode={};var magic_encode={};var cpdcache={};var cpecache={};var sfcc=function sfcc(x){return String.fromCharCode(x)};var cca=function cca(x){return x.charCodeAt(0)};var has_buf=typeof Buffer!=="undefined";if(has_buf){var mdl=1024,mdb=new Buffer(mdl);var make_EE=function make_EE(E){var EE=new Buffer(65536);for(var i=0;i<65536;++i)EE[i]=0;var keys=Object.keys(E),len=keys.length;for(var ee=0,e=keys[ee];ee>10&1023)];out[j++]=EE[56320+(w&1023)]}}}out=out.slice(0,j)}else{out=new Buffer(len);for(i=0;i>8}return function sbcs_d(data){var len=data.length,i=0,j=0;if(2*len>mdl){mdl=2*len;mdb=new Buffer(mdl)}if(Buffer.isBuffer(data)){for(i=0;i>8}return function dbcs_e(data,ofmt){var len=data.length,out=new Buffer(2*len),i=0,j=0,jj=0,k=0,D=0;if(typeof data==="string"){for(i=k=0;i0)out[k++]=EE[j]}out=out.slice(0,k)}else if(Buffer.isBuffer(data)){for(i=k=0;i0)out[k++]=EE[j]}else{jj=j-65536;j=2*(55296+(jj>>10&1023));out[k++]=EE[j+1]||EE[j];if(EE[j+1]>0)out[k++]=EE[j];j=2*(56320+(jj&1023));out[k++]=EE[j+1]||EE[j];if(EE[j+1]>0)out[k++]=EE[j]}}out=out.slice(0,k)}else{for(i=k=0;i0)out[k++]=EE[j]}}if(!ofmt||ofmt==="buf")return out;if(ofmt!=="arr")return out.toString("binary");return[].slice.call(out)}};var dbcs_decode=function make_dbcs_decode(cp){var D=cpt[cp].dec;var DD=new Buffer(131072),d=0,c,w=0,j=0,i=0;for(i=0;i<65536;++i){DD[2*i]=255;DD[2*i+1]=253}for(d=0;d>8}return function dbcs_d(data){var len=data.length,out=new Buffer(2*len),i=0,j=0,k=0;if(Buffer.isBuffer(data)){for(i=0;imdl){mdl=4*len;mdb=new Buffer(mdl)}var i=0;if(len>=3&&data[0]==239)if(data[1]==187&&data[2]==191)i=3;for(var j=1,k=0,D=0;i>8}else{w-=65536;ww=55296+(w>>10&1023);w=56320+(w&1023);mdb[k++]=ww&255;mdb[k++]=ww>>>8;mdb[k++]=w&255;mdb[k++]=w>>>8&255}}return mdb.slice(0,k).toString("ucs2")};magic_encode[65001]=function utf8_e(data,ofmt){if(has_buf&&Buffer.isBuffer(data)){if(!ofmt||ofmt==="buf")return data;if(ofmt!=="arr")return data.toString("binary");return[].slice.call(data)}var len=data.length,w=0,ww=0,j=0;var direct=typeof data==="string";if(4*len>mdl){mdl=4*len;mdb=new Buffer(mdl)}for(var i=0;i>6);mdb[j++]=128+(w&63)}else if(w>=55296&&w<=57343){w-=55296;++i;ww=(direct?data.charCodeAt(i):data[i].charCodeAt(0))-56320+(w<<10);mdb[j++]=240+(ww>>>18&7);mdb[j++]=144+(ww>>>12&63);mdb[j++]=128+(ww>>>6&63);mdb[j++]=128+(ww&63)}else{mdb[j++]=224+(w>>12);mdb[j++]=128+(w>>6&63);mdb[j++]=128+(w&63)}}if(!ofmt||ofmt==="buf")return mdb.slice(0,j);if(ofmt!=="arr")return mdb.slice(0,j).toString("binary");return[].slice.call(mdb,0,j)}}var encache=function encache(){if(has_buf){if(cpdcache[sbcs_cache[0]])return;var i=0,s=0;for(i=0;i255){out[j]=w>>8;out[++j]=w&255}else out[j]=w&255}else if(M=magic[cp])switch(M){case"utf8":if(has_buf&&isstr){out=new Buffer(data,M);j=out.length;break}for(i=0;i>6);out[++j]=128+(w&63)}else if(w>=55296&&w<=57343){w-=55296;ww=(isstr?data.charCodeAt(++i):data[++i].charCodeAt(0))-56320+(w<<10);out[j]=240+(ww>>>18&7);out[++j]=144+(ww>>>12&63);out[++j]=128+(ww>>>6&63);out[++j]=128+(ww&63)}else{out[j]=224+(w>>12);out[++j]=128+(w>>6&63);out[++j]=128+(w&63)}}break;case"ascii":if(has_buf&&typeof data==="string"){out=new Buffer(data,M);j=out.length;break}for(i=0;i>8}break;case"utf16be":for(i=0;i>8;out[j++]=w&255}break;case"utf32le":for(i=0;i=55296&&w<=57343)w=65536+(w-55296<<10)+(data[++i].charCodeAt(0)-56320);out[j++]=w&255;w>>=8;out[j++]=w&255;w>>=8;out[j++]=w&255;w>>=8;out[j++]=w&255}break;case"utf32be":for(i=0;i=55296&&w<=57343)w=65536+(w-55296<<10)+(data[++i].charCodeAt(0)-56320);out[j+3]=w&255;w>>=8;out[j+2]=w&255;w>>=8;out[j+1]=w&255;w>>=8;out[j]=w&255;j+=4}break;case"utf7":for(i=0;i-1){out[j++]=c.charCodeAt(0);continue}var tt=encode(1201,c);out[j++]=43;out[j++]=BM.charCodeAt(tt[0]>>2);out[j++]=BM.charCodeAt(((tt[0]&3)<<4)+((tt[1]||0)>>4));out[j++]=BM.charCodeAt(((tt[1]&15)<<2)+((tt[2]||0)>>6));out[j++]=45}break;default:throw new Error("Unsupported magic: "+cp+" "+magic[cp]);}else throw new Error("Unrecognized CP: "+cp);out=out.slice(0,j);if(!has_buf)return ofmt=="str"?out.map(sfcc).join(""):out;if(!ofmt||ofmt==="buf")return out;if(ofmt!=="arr")return out.toString("binary");return[].slice.call(out)};var decode=function decode(cp,data){var F;if(F=cpdcache[cp])return F(data);if(typeof data==="string")return decode(cp,data.split("").map(cca));var len=data.length,out=new Array(len),s="",w=0,i=0,j=1,k=0,ww=0;var C=cpt[cp],D,M="";if(C&&(D=C.dec)){for(i=0;i=3&&data[0]==239)if(data[1]==187&&data[2]==191)i=3;for(;i>10&1023);w=56320+(w&1023);out[k++]=String.fromCharCode(ww);out[k++]=String.fromCharCode(w)}}break;case"ascii":if(has_buf&&Buffer.isBuffer(data))return data.toString(M);for(i=0;i=2&&data[0]==255)if(data[1]==254)i=2;if(has_buf&&Buffer.isBuffer(data))return data.toString(M);j=2;for(;i+1=2&&data[0]==254)if(data[1]==255)i=2;j=2;for(;i+1=4&&data[0]==255)if(data[1]==254&&data[2]===0&&data[3]===0)i=4;j=4;for(;i65535){w-=65536;out[k++]=String.fromCharCode(55296+(w>>10&1023));out[k++]=String.fromCharCode(56320+(w&1023))}else out[k++]=String.fromCharCode(w)}break;case"utf32be":if(len>=4&&data[3]==255)if(data[2]==254&&data[1]===0&&data[0]===0)i=4;j=4;for(;i65535){w-=65536;out[k++]=String.fromCharCode(55296+(w>>10&1023));out[k++]=String.fromCharCode(56320+(w&1023))}else out[k++]=String.fromCharCode(w)}break;case"utf7":if(len>=4&&data[0]==43&&data[1]==47&&data[2]==118){if(len>=5&&data[3]==56&&data[4]==45)i=5;else if(data[3]==56||data[3]==57||data[3]==43||data[3]==47)i=4}for(;i>4;tt.push(c1);e3=BM.indexOf(String.fromCharCode(data[i+l++]));if(e3===-1)break;c2=(e2&15)<<4|e3>>2;tt.push(c2);e4=BM.indexOf(String.fromCharCode(data[i+l++]));if(e4===-1)break;c3=(e3&3)<<6|e4;if(e4<64)tt.push(c3)}o64=decode(1201,tt);for(l=0;l>8])[0]}}var DENSE=null;var DIF_XL=true;var Base64=function make_b64(){var map="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";return{encode:function(input){var o="";var c1,c2,c3,e1,e2,e3,e4;for(var i=0;i>2;e2=(c1&3)<<4|c2>>4;e3=(c2&15)<<2|c3>>6;e4=c3&63;if(isNaN(c2)){e3=e4=64}else if(isNaN(c3)){e4=64}o+=map.charAt(e1)+map.charAt(e2)+map.charAt(e3)+map.charAt(e4)}return o},decode:function b64_decode(input){var o="";var c1,c2,c3;var e1,e2,e3,e4;input=input.replace(/[^A-Za-z0-9\+\/\=]/g,"");for(var i=0;i>4;c2=(e2&15)<<4|e3>>2;c3=(e3&3)<<6|e4;o+=String.fromCharCode(c1);if(e3!=64){o+=String.fromCharCode(c2)}if(e4!=64){o+=String.fromCharCode(c3)}}return o}}}();var has_buf=typeof Buffer!=="undefined"&&typeof process!=="undefined"&&typeof process.versions!=="undefined"&&process.versions.node;function new_raw_buf(len){return new(has_buf?Buffer:Array)(len)}function s2a(s){if(has_buf)return new Buffer(s,"binary");return s.split("").map(function(x){return x.charCodeAt(0)&255})}var bconcat=function(bufs){return[].concat.apply([],bufs)};var chr0=/\u0000/g,chr1=/[\u0001-\u0006]/;var SSF={};var make_ssf=function make_ssf(SSF){SSF.version="0.9.2";function _strrev(x){var o="",i=x.length-1;while(i>=0)o+=x.charAt(i--);return o}function fill(c,l){var o="";while(o.length=d?t:fill("0",d-t.length)+t}function pad_(v,d){var t=""+v;return t.length>=d?t:fill(" ",d-t.length)+t}function rpad_(v,d){var t=""+v;return t.length>=d?t:t+fill(" ",d-t.length)}function pad0r1(v,d){var t=""+Math.round(v);return t.length>=d?t:fill("0",d-t.length)+t}function pad0r2(v,d){var t=""+v;return t.length>=d?t:fill("0",d-t.length)+t}var p2_32=Math.pow(2,32);function pad0r(v,d){if(v>p2_32||v<-p2_32)return pad0r1(v,d);var i=Math.round(v);return pad0r2(i,d)}function isgeneral(s,i){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}var opts_fmt=[["date1904",0],["output",""],["WTF",false]];function fixopts(o){for(var y=0;y!=opts_fmt.length;++y)if(o[opts_fmt[y][0]]===undefined)o[opts_fmt[y][0]]=opts_fmt[y][1]}SSF.opts=opts_fmt;var days=[["Sun","Sunday"],["Mon","Monday"],["Tue","Tuesday"],["Wed","Wednesday"],["Thu","Thursday"],["Fri","Friday"],["Sat","Saturday"]];var months=[["J","Jan","January"],["F","Feb","February"],["M","Mar","March"],["A","Apr","April"],["M","May","May"],["J","Jun","June"],["J","Jul","July"],["A","Aug","August"],["S","Sep","September"],["O","Oct","October"],["N","Nov","November"],["D","Dec","December"]];function init_table(t){t[0]="General";t[1]="0";t[2]="0.00";t[3]="#,##0";t[4]="#,##0.00";t[9]="0%";t[10]="0.00%";t[11]="0.00E+00";t[12]="# ?/?";t[13]="# ??/??";t[14]="m/d/yy";t[15]="d-mmm-yy";t[16]="d-mmm";t[17]="mmm-yy";t[18]="h:mm AM/PM";t[19]="h:mm:ss AM/PM";t[20]="h:mm";t[21]="h:mm:ss";t[22]="m/d/yy h:mm";t[37]="#,##0 ;(#,##0)";t[38]="#,##0 ;[Red](#,##0)";t[39]="#,##0.00;(#,##0.00)";t[40]="#,##0.00;[Red](#,##0.00)";t[45]="mm:ss";t[46]="[h]:mm:ss";t[47]="mmss.0";t[48]="##0.0E+0";t[49]="@";t[56]='"ไธŠๅˆ/ไธ‹ๅˆ "hh"ๆ™‚"mm"ๅˆ†"ss"็ง’ "';t[65535]="General"}var table_fmt={};init_table(table_fmt);function frac(x,D,mixed){var sgn=x<0?-1:1;var B=x*sgn;var P_2=0,P_1=1,P=0;var Q_2=1,Q_1=0,Q=0;var A=Math.floor(B);while(Q_1D){if(Q_1>D){Q=Q_2;P=P_2}else{Q=Q_1;P=P_1}}if(!mixed)return[0,sgn*P,Q];var q=Math.floor(sgn*P/Q);return[q,sgn*P-q*Q,Q]}function general_fmt_int(v){return""+v}SSF._general_int=general_fmt_int;var general_fmt_num=function make_general_fmt_num(){var gnr1=/\.(\d*[1-9])0+$/,gnr2=/\.0*$/,gnr4=/\.(\d*[1-9])0+/,gnr5=/\.0*[Ee]/,gnr6=/(E[+-])(\d)$/;function gfn2(v){var w=v<0?12:11;var o=gfn5(v.toFixed(12));if(o.length<=w)return o;o=v.toPrecision(10);if(o.length<=w)return o;return v.toExponential(5)}function gfn3(v){ +var o=v.toFixed(11).replace(gnr1,".$1");if(o.length>(v<0?12:11))o=v.toPrecision(6);return o}function gfn4(o){for(var i=0;i!=o.length;++i)if((o.charCodeAt(i)|32)===101)return o.replace(gnr4,".$1").replace(gnr5,"E").replace("e","E").replace(gnr6,"$10$2");return o}function gfn5(o){return o.indexOf(".")>-1?o.replace(gnr2,"").replace(gnr1,".$1"):o}return function general_fmt_num(v){var V=Math.floor(Math.log(Math.abs(v))*Math.LOG10E),o;if(V>=-4&&V<=-1)o=v.toPrecision(10+V);else if(Math.abs(V)<=9)o=gfn2(v);else if(V===10)o=v.toFixed(10).substr(0,12);else o=gfn3(v);return gfn5(gfn4(o))}}();SSF._general_num=general_fmt_num;function general_fmt(v){switch(typeof v){case"string":return v;case"boolean":return v?"TRUE":"FALSE";case"number":return(v|0)===v?general_fmt_int(v):general_fmt_num(v);case"undefined":return"";case"object":if(v==null)return"";}throw new Error("unsupported value in General format: "+v)}SSF._general=general_fmt;function fix_hijri(){return 0}function parse_date_code(v,opts,b2){if(v>2958465||v<0)return null;var date=v|0,time=Math.floor(86400*(v-date)),dow=0;var dout=[];var out={D:date,T:time,u:86400*(v-date)-time,y:0,m:0,d:0,H:0,M:0,S:0,q:0};if(Math.abs(out.u)<1e-6)out.u=0;fixopts(opts!=null?opts:opts=[]);if(opts.date1904)date+=1462;if(out.u>.999){out.u=0;if(++time==86400){time=0;++date}}if(date===60){dout=b2?[1317,10,29]:[1900,2,29];dow=3}else if(date===0){dout=b2?[1317,8,29]:[1900,1,0];dow=6}else{if(date>60)--date;var d=new Date(1900,0,1);d.setDate(d.getDate()+date-1);dout=[d.getFullYear(),d.getMonth()+1,d.getDate()];dow=d.getDay();if(date<60)dow=(dow+6)%7;if(b2)dow=fix_hijri(d,dout)}out.y=dout[0];out.m=dout[1];out.d=dout[2];out.S=time%60;time=Math.floor(time/60);out.M=time%60;time=Math.floor(time/60);out.H=time;out.q=dow;return out}SSF.parse_date_code=parse_date_code;function write_date(type,fmt,val,ss0){var o="",ss=0,tt=0,y=val.y,out,outl=0;switch(type){case 98:y=val.y+543;case 121:switch(fmt.length){case 1:;case 2:out=y%100;outl=2;break;default:out=y%1e4;outl=4;break;}break;case 109:switch(fmt.length){case 1:;case 2:out=val.m;outl=fmt.length;break;case 3:return months[val.m-1][1];case 5:return months[val.m-1][0];default:return months[val.m-1][2];}break;case 100:switch(fmt.length){case 1:;case 2:out=val.d;outl=fmt.length;break;case 3:return days[val.q][0];default:return days[val.q][1];}break;case 104:switch(fmt.length){case 1:;case 2:out=1+(val.H+11)%12;outl=fmt.length;break;default:throw"bad hour format: "+fmt;}break;case 72:switch(fmt.length){case 1:;case 2:out=val.H;outl=fmt.length;break;default:throw"bad hour format: "+fmt;}break;case 77:switch(fmt.length){case 1:;case 2:out=val.M;outl=fmt.length;break;default:throw"bad minute format: "+fmt;}break;case 115:if(val.u===0)switch(fmt){case"s":;case"ss":return pad0(val.S,fmt.length);case".0":;case".00":;case".000":;}switch(fmt){case"s":;case"ss":;case".0":;case".00":;case".000":if(ss0>=2)tt=ss0===3?1e3:100;else tt=ss0===1?10:1;ss=Math.round(tt*(val.S+val.u));if(ss>=60*tt)ss=0;if(fmt==="s")return ss===0?"0":""+ss/tt;o=pad0(ss,2+ss0);if(fmt==="ss")return o.substr(0,2);return"."+o.substr(2,fmt.length-1);default:throw"bad second format: "+fmt;};case 90:switch(fmt){case"[h]":;case"[hh]":out=val.D*24+val.H;break;case"[m]":;case"[mm]":out=(val.D*24+val.H)*60+val.M;break;case"[s]":;case"[ss]":out=((val.D*24+val.H)*60+val.M)*60+Math.round(val.S+val.u);break;default:throw"bad abstime format: "+fmt;}outl=fmt.length===3?1:2;break;case 101:out=y;outl=1;}if(outl>0)return pad0(out,outl);else return""}function commaify(s){if(s.length<=3)return s;var j=s.length%3,o=s.substr(0,j);for(;j!=s.length;j+=3)o+=(o.length>0?",":"")+s.substr(j,3);return o}var write_num=function make_write_num(){var pct1=/%/g;function write_num_pct(type,fmt,val){var sfmt=fmt.replace(pct1,""),mul=fmt.length-sfmt.length;return write_num(type,sfmt,val*Math.pow(10,2*mul))+fill("%",mul)}function write_num_cm(type,fmt,val){var idx=fmt.length-1;while(fmt.charCodeAt(idx-1)===44)--idx;return write_num(type,fmt.substr(0,idx),val/Math.pow(10,3*(fmt.length-idx)))}function write_num_exp(fmt,val){var o;var idx=fmt.indexOf("E")-fmt.indexOf(".")-1;if(fmt.match(/^#+0.0E\+0$/)){if(val==0)return"0.0E+0";else if(val<0)return"-"+write_num_exp(fmt,-val);var period=fmt.indexOf(".");if(period===-1)period=fmt.indexOf("E");var ee=Math.floor(Math.log(val)*Math.LOG10E)%period;if(ee<0)ee+=period;o=(val/Math.pow(10,ee)).toPrecision(idx+1+(period+ee)%period);if(o.indexOf("e")===-1){var fakee=Math.floor(Math.log(val)*Math.LOG10E);if(o.indexOf(".")===-1)o=o.charAt(0)+"."+o.substr(1)+"E+"+(fakee-o.length+ee);else o+="E+"+(fakee-ee);while(o.substr(0,2)==="0."){o=o.charAt(0)+o.substr(2,period)+"."+o.substr(2+period);o=o.replace(/^0+([1-9])/,"$1").replace(/^0+\./,"0.")}o=o.replace(/\+-/,"-")}o=o.replace(/^([+-]?)(\d*)\.(\d*)[Ee]/,function($$,$1,$2,$3){return $1+$2+$3.substr(0,(period+ee)%period)+"."+$3.substr(ee)+"E"})}else o=val.toExponential(idx);if(fmt.match(/E\+00$/)&&o.match(/e[+-]\d$/))o=o.substr(0,o.length-1)+"0"+o.charAt(o.length-1);if(fmt.match(/E\-/)&&o.match(/e\+/))o=o.replace(/e\+/,"e");return o.replace("e","E")}var frac1=/# (\?+)( ?)\/( ?)(\d+)/;function write_num_f1(r,aval,sign){var den=parseInt(r[4],10),rr=Math.round(aval*den),base=Math.floor(rr/den);var myn=rr-base*den,myd=den;return 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))}function write_num_f2(r,aval,sign){return sign+(aval===0?"":""+aval)+fill(" ",r[1].length+2+r[4].length)}var dec1=/^#*0*\.(0+)/;var closeparen=/\).*[0#]/;var phone=/\(###\) ###\\?-####/;function hashq(str){var o="",cc;for(var i=0;i!=str.length;++i)switch(cc=str.charCodeAt(i)){case 35:break;case 63:o+=" ";break;case 48:o+="0";break;default:o+=String.fromCharCode(cc);}return o}function rnd(val,d){var dd=Math.pow(10,d);return""+Math.round(val*dd)/dd}function dec(val,d){if(d<(""+Math.round((val-Math.floor(val))*Math.pow(10,d))).length){return 0}return Math.round((val-Math.floor(val))*Math.pow(10,d))}function carry(val,d){if(d<(""+Math.round((val-Math.floor(val))*Math.pow(10,d))).length){return 1}return 0}function flr(val){if(val<2147483647&&val>-2147483648)return""+(val>=0?val|0:val-1|0);return""+Math.floor(val)}function write_num_flt(type,fmt,val){if(type.charCodeAt(0)===40&&!fmt.match(closeparen)){var ffmt=fmt.replace(/\( */,"").replace(/ \)/,"").replace(/\)/,"");if(val>=0)return write_num_flt("n",ffmt,val);return"("+write_num_flt("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_flt(type,fmt.substr(fmt.charAt(1)==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0r(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=pad0r(val,0);if(o==="0")o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if(r=fmt.match(frac1))return write_num_f1(r,aval,sign);if(fmt.match(/^#+0+$/))return sign+pad0r(aval,fmt.length-fmt.indexOf("0"));if(r=fmt.match(dec1)){o=rnd(val,r[1].length).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]).replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if(r=fmt.match(/^(0*)\.(#*)$/)){return sign+rnd(aval,r[2].length).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if(r=fmt.match(/^#{1,3},##0(\.?)$/))return sign+commaify(pad0r(aval,0));if(r=fmt.match(/^#,##0\.([#0]*0)$/)){return 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)}if(r=fmt.match(/^#,#*,#0/))return write_num_flt(type,fmt.replace(/^#,#*,/,""),val);if(r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/)){o=_strrev(write_num_flt(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri=0)return write_num_int("n",ffmt,val);return"("+write_num_int("n",ffmt,-val)+")"}if(fmt.charCodeAt(fmt.length-1)===44)return write_num_cm2(type,fmt,val);if(fmt.indexOf("%")!==-1)return write_num_pct2(type,fmt,val);if(fmt.indexOf("E")!==-1)return write_num_exp2(fmt,val);if(fmt.charCodeAt(0)===36)return"$"+write_num_int(type,fmt.substr(fmt.charAt(1)==" "?2:1),val);var o;var r,ri,ff,aval=Math.abs(val),sign=val<0?"-":"";if(fmt.match(/^00+$/))return sign+pad0(aval,fmt.length);if(fmt.match(/^[#?]+$/)){o=""+val;if(val===0)o="";return o.length>fmt.length?o:hashq(fmt.substr(0,fmt.length-o.length))+o}if(r=fmt.match(frac1))return write_num_f2(r,aval,sign);if(fmt.match(/^#+0+$/))return sign+pad0(aval,fmt.length-fmt.indexOf("0"));if(r=fmt.match(dec1)){o=(""+val).replace(/^([^\.]+)$/,"$1."+r[1]).replace(/\.$/,"."+r[1]);o=o.replace(/\.(\d*)$/,function($$,$1){return"."+$1+fill("0",r[1].length-$1.length)});return fmt.indexOf("0.")!==-1?o:o.replace(/^0\./,".")}fmt=fmt.replace(/^#+([0.])/,"$1");if(r=fmt.match(/^(0*)\.(#*)$/)){return sign+(""+aval).replace(/\.(\d*[1-9])0*$/,".$1").replace(/^(-?\d*)$/,"$1.").replace(/^0\./,r[1].length?"0.":".")}if(r=fmt.match(/^#{1,3},##0(\.?)$/))return sign+commaify(""+aval);if(r=fmt.match(/^#,##0\.([#0]*0)$/)){return val<0?"-"+write_num_int(type,fmt,-val):commaify(""+val)+"."+fill("0",r[1].length)}if(r=fmt.match(/^#,#*,#0/))return write_num_int(type,fmt.replace(/^#,#*,/,""),val);if(r=fmt.match(/^([0#]+)(\\?-([0#]+))+$/)){o=_strrev(write_num_int(type,fmt.replace(/[\\-]/g,""),val));ri=0;return _strrev(_strrev(fmt.replace(/\\/g,"")).replace(/[0#]/g,function(x){return ri-1||c=="\\"&&fmt.charAt(i+1)=="-"&&"0#".indexOf(fmt.charAt(i+2))>-1)){}break;case"?":while(fmt.charAt(++i)===c){}break;case"*":++i;if(fmt.charAt(i)==" "||fmt.charAt(i)=="*")++i;break;case"(":;case")":++i;break;case"1":;case"2":;case"3":;case"4":;case"5":;case"6":;case"7":;case"8":;case"9":while(i-1){}break;case" ":++i;break;default:++i;break;}}return false}SSF.is_date=fmt_is_date;function eval_fmt(fmt,v,opts,flen){var out=[],o="",i=0,c="",lst="t",q,dt,j,cc;var hr="H";while(i=12?"P":"A";q.t="T";hr="h";i+=3}else if(fmt.substr(i,5)==="AM/PM"){if(dt!=null)q.v=dt.H>=12?"PM":"AM";q.t="T";i+=5;hr="h"}else{q.t="t";++i}if(dt==null&&q.t==="T")return"";out[out.length]=q;lst=c;break;case"[":o=c;while(fmt.charAt(i++)!=="]"&&i-1){o=(o.match(/\$([^-\[\]]*)/)||[])[1]||"$";if(!fmt_is_date(fmt))out[out.length]={t:"t",v:o}}break;case".":if(dt!=null){o=c;while((c=fmt.charAt(++i))==="0")o+=c;out[out.length]={t:"s",v:o};break};case"0":;case"#":o=c;while(++i-1||c=="\\"&&fmt.charAt(i+1)=="-"&&i-1)o+=c;out[out.length]={t:"n",v:o};break;case"?":o=c;while(fmt.charAt(++i)===c)o+=c;q={t:c,v:o};out[out.length]=q;lst=c;break;case"*":++i;if(fmt.charAt(i)==" "||fmt.charAt(i)=="*")++i;break;case"(":;case")":out[out.length]={t:flen===1?"t":c,v:c};++i;break;case"1":;case"2":;case"3":;case"4":;case"5":;case"6":;case"7":;case"8":;case"9":o=c;while(i-1)o+=fmt.charAt(i);out[out.length]={t:"D",v:o};break;case" ":out[out.length]={t:c,v:c};++i;break;default:if(",$-+/():!^&'~{}<>=โ‚ฌacfijklopqrtuvwxz".indexOf(c)===-1)throw new Error("unrecognized character "+c+" in "+fmt);out[out.length]={t:"t",v:c};++i;break;}}var bt=0,ss0=0,ssm;for(i=out.length-1,lst="t";i>=0;--i){switch(out[i].t){case"h":;case"H":out[i].t=hr;lst="h";if(bt<1)bt=1;break;case"s":if(ssm=out[i].v.match(/\.0+$/))ss0=Math.max(ss0,ssm[0].length-1);if(bt<3)bt=3;case"d":;case"y":;case"M":;case"e":lst=out[i].t;break;case"m":if(lst==="s"){out[i].t="M";if(bt<2)bt=2}break;case"X":break;case"Z":if(bt<1&&out[i].v.match(/[Hh]/))bt=1;if(bt<2&&out[i].v.match(/[Mm]/))bt=2;if(bt<3&&out[i].v.match(/[Ss]/))bt=3;}}switch(bt){case 0:break;case 1:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}if(dt.M>=60){dt.M=0;++dt.H}break;case 2:if(dt.u>=.5){dt.u=0;++dt.S}if(dt.S>=60){dt.S=0;++dt.M}break;}var nstr="",jj;for(i=0;i0){if(nstr.charCodeAt(0)==40){myv=v<0&&nstr.charCodeAt(0)===45?-v:v;ostr=write_num("(",nstr,myv)}else{myv=v<0&&flen>1?-v:v;ostr=write_num("n",nstr,myv);if(myv<0&&out[0]&&out[0].t=="t"){ostr=ostr.substr(1);out[0].v="-"+out[0].v}}jj=ostr.length-1;var decpt=out.length;for(i=0;i-1){decpt=i;break}var lasti=out.length;if(decpt===out.length&&ostr.indexOf("E")===-1){for(i=out.length-1;i>=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;if(jj>=out[i].v.length-1){jj-=out[i].v.length;out[i].v=ostr.substr(jj+1,out[i].v.length)}else if(jj<0)out[i].v="";else{out[i].v=ostr.substr(0,jj+1);jj=-1}out[i].t="t";lasti=i}if(jj>=0&&lasti=0;--i){if(out[i]==null||"n?(".indexOf(out[i].t)===-1)continue;j=out[i].v.indexOf(".")>-1&&i===decpt?out[i].v.indexOf(".")-1:out[i].v.length-1;vv=out[i].v.substr(j+1);for(;j>=0;--j){if(jj>=0&&(out[i].v.charAt(j)==="0"||out[i].v.charAt(j)==="#"))vv=ostr.charAt(jj--)+vv}out[i].v=vv;out[i].t="t";lasti=i}if(jj>=0&&lasti-1&&i===decpt?out[i].v.indexOf(".")+1:0;vv=out[i].v.substr(0,j);for(;j-1){myv=flen>1&&v<0&&i>0&&out[i-1].v==="-"?-v:v;out[i].v=write_num(out[i].t,out[i].v,myv);out[i].t="t"}var retval="";for(i=0;i!==out.length;++i)if(out[i]!=null)retval+=out[i].v;return retval}SSF._eval=eval_fmt;var cfregex=/\[[=<>]/;var cfregex2=/\[([=<>]*)(-?\d+\.?\d*)\]/;function chkcond(v,rr){if(rr==null)return false;var thresh=parseFloat(rr[2]);switch(rr[1]){case"=":if(v==thresh)return true;break;case">":if(v>thresh)return true;break;case"<":if(v":if(v!=thresh)return true;break;case">=":if(v>=thresh)return true;break;case"<=":if(v<=thresh)return true;break;}return false}function choose_fmt(f,v){var fmt=split_fmt(f);var l=fmt.length,lat=fmt[l-1].indexOf("@");if(l<4&&lat>-1)--l;if(fmt.length>4)throw new Error("cannot find right format for |"+fmt.join("|")+"|");if(typeof v!=="number")return[4,fmt.length===4||lat>-1?fmt[fmt.length-1]:"@"];switch(fmt.length){case 1:fmt=lat>-1?["General","General","General",fmt[0]]:[fmt[0],fmt[0],fmt[0],"@"];break;case 2:fmt=lat>-1?[fmt[0],fmt[0],fmt[0],fmt[1]]:[fmt[0],fmt[1],fmt[0],"@"];break;case 3:fmt=lat>-1?[fmt[0],fmt[1],fmt[0],fmt[2]]:[fmt[0],fmt[1],fmt[2],"@"];break;case 4:break;}var ff=v>0?fmt[0]:v<0?fmt[1]:fmt[2];if(fmt[0].indexOf("[")===-1&&fmt[1].indexOf("[")===-1)return[l,ff];if(fmt[0].match(cfregex)!=null||fmt[1].match(cfregex)!=null){var m1=fmt[0].match(cfregex2);var m2=fmt[1].match(cfregex2);return chkcond(v,m1)?[l,fmt[0]]:chkcond(v,m2)?[l,fmt[1]]:[l,fmt[m1!=null&&m2!=null?2:1]]}return[l,ff]}function format(fmt,v,o){if(o==null)o={};var sfmt="";switch(typeof fmt){case"string":if(fmt=="m/d/yy"&&o.dateNF)sfmt=o.dateNF;else sfmt=fmt;break;case"number":if(fmt==14&&o.dateNF)sfmt=o.dateNF;else sfmt=(o.table!=null?o.table:table_fmt)[fmt];break;}if(isgeneral(sfmt,0))return general_fmt(v,o);var f=choose_fmt(sfmt,v);if(isgeneral(f[1]))return general_fmt(v,o);if(v===true)v="TRUE";else if(v===false)v="FALSE";else if(v===""||v==null)return"";return eval_fmt(f[1],v,o,f[0])}SSF._table=table_fmt;SSF.load=function load_entry(fmt,idx){table_fmt[idx]=fmt};SSF.format=format;SSF.get_table=function get_table(){return table_fmt};SSF.load_table=function load_table(tbl){for(var i=0;i!=392;++i)if(tbl[i]!==undefined)SSF.load(tbl[i],i)};SSF.init_table=init_table};make_ssf(SSF);var XLMLFormatMap={"General Number":"General","General Date":SSF._table[22],"Long Date":"dddd, mmmm dd, yyyy","Medium Date":SSF._table[15],"Short Date":SSF._table[14],"Long Time":SSF._table[19],"Medium Time":SSF._table[18],"Short Time":SSF._table[20],Currency:'"$"#,##0.00_);[Red]\\("$"#,##0.00\\)',Fixed:SSF._table[2],Standard:SSF._table[4],Percent:SSF._table[10],Scientific:SSF._table[11],"Yes/No":'"Yes";"Yes";"No";@',"True/False":'"True";"True";"False";@',"On/Off":'"Yes";"Yes";"No";@'};var DO_NOT_EXPORT_CFB=true;var CFB=function _CFB(){var exports={};exports.version="0.11.1";function parse(file){var mver=3;var ssz=512;var nmfs=0;var ndfs=0;var dir_start=0;var minifat_start=0;var difat_start=0;var fat_addrs=[];var blob=file.slice(0,512);prep_blob(blob,0);var mv=check_get_mver(blob);mver=mv[0];switch(mver){case 3:ssz=512;break;case 4:ssz=4096;break;default:throw new Error("Major Version: Expected 3 or 4 saw "+mver);}if(ssz!==512){blob=file.slice(0,ssz);prep_blob(blob,28)}var header=file.slice(0,ssz);check_shifts(blob,mver);var nds=blob.read_shift(4,"i");if(mver===3&&nds!==0)throw new Error("# Directory Sectors: Expected 0 saw "+nds);blob.l+=4;dir_start=blob.read_shift(4,"i");blob.l+=4;blob.chk("00100000","Mini Stream Cutoff Size: ");minifat_start=blob.read_shift(4,"i");nmfs=blob.read_shift(4,"i");difat_start=blob.read_shift(4,"i");ndfs=blob.read_shift(4,"i");for(var q,j=0;j<109;++j){q=blob.read_shift(4,"i");if(q<0)break;fat_addrs[j]=q}var sectors=sectorify(file,ssz);sleuth_fat(difat_start,ndfs,sectors,ssz,fat_addrs);var sector_list=make_sector_list(sectors,dir_start,fat_addrs,ssz);sector_list[dir_start].name="!Directory";if(nmfs>0&&minifat_start!==ENDOFCHAIN)sector_list[minifat_start].name="!MiniFAT";sector_list[fat_addrs[0]].name="!FAT";sector_list.fat_addrs=fat_addrs;sector_list.ssz=ssz;var files={},Paths=[],FileIndex=[],FullPaths=[],FullPathDir={};read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex);build_full_paths(FileIndex,FullPathDir,FullPaths,Paths);var root_name=Paths.shift();Paths.root=root_name;var find_path=make_find_path(FullPaths,Paths,FileIndex,files,root_name);return{raw:{header:header,sectors:sectors},FileIndex:FileIndex,FullPaths:FullPaths,FullPathDir:FullPathDir,find:find_path}}function check_get_mver(blob){blob.chk(HEADER_SIGNATURE,"Header Signature: ");blob.chk(HEADER_CLSID,"CLSID: ");var mver=blob.read_shift(2,"u");return[blob.read_shift(2,"u"),mver]}function check_shifts(blob,mver){var shift=9;blob.l+=2;switch(shift=blob.read_shift(2)){case 9:if(mver!=3)throw new Error("Sector Shift: Expected 9 saw "+shift);break;case 12:if(mver!=4)throw new Error("Sector Shift: Expected 12 saw "+shift);break;default:throw new Error("Sector Shift: Expected 9 or 12 saw "+shift);}blob.chk("0600","Mini Sector Shift: ");blob.chk("000000000000","Reserved: ")}function sectorify(file,ssz){var nsectors=Math.ceil(file.length/ssz)-1;var sectors=new Array(nsectors);for(var i=1;i>>2)-1;if(!sector)return;for(var i=0;i=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw new Error("FAT boundary crossed: "+j+" 4 "+ssz);if(!sectors[addr])break;j=__readInt32LE(sectors[addr],jj)}return{nodes:buf,data:__toBuffer([buf_chain])}}function make_sector_list(sectors,dir_start,fat_addrs,ssz){var sl=sectors.length,sector_list=new Array(sl);var chkd=new Array(sl),buf,buf_chain;var modulus=ssz-1,i,j,k,jj;for(i=0;i=sl)k-=sl;if(chkd[k]===true)continue;buf_chain=[];for(j=k;j>=0;){chkd[j]=true;buf[buf.length]=j;buf_chain.push(sectors[j]);var addr=fat_addrs[Math.floor(j*4/ssz)];jj=j*4&modulus;if(ssz<4+jj)throw new Error("FAT boundary crossed: "+j+" 4 "+ssz);if(!sectors[addr])break;j=__readInt32LE(sectors[addr],jj)}sector_list[k]={nodes:buf,data:__toBuffer([buf_chain])}}return sector_list}function read_directory(dir_start,sector_list,sectors,Paths,nmfs,files,FileIndex){var blob;var minifat_store=0,pl=Paths.length?2:0;var sector=sector_list[dir_start].data;var i=0,namelen=0,name,o,ctime,mtime;for(;i0&&minifat_store!==ENDOFCHAIN)sector_list[minifat_store].name="!StreamData"}else if(o.size>=4096){o.storage="fat";if(sector_list[o.start]===undefined)sector_list[o.start]=get_sector_list(sectors,o.start,sector_list.fat_addrs,sector_list.ssz);sector_list[o.start].name=o.name;o.content=sector_list[o.start].data.slice(0,o.size);prep_blob(o.content,0)}else{o.storage="minifat";if(minifat_store!==ENDOFCHAIN&&o.start!==ENDOFCHAIN){o.content=sector_list[minifat_store].data.slice(o.start*MSSZ,o.start*MSSZ+o.size);prep_blob(o.content,0)}}files[name]=o;FileIndex.push(o)}}function read_date(blob,offset){return new Date((__readUInt32LE(blob,offset+4)/1e7*Math.pow(2,32)+__readUInt32LE(blob,offset)/1e7-11644473600)*1e3)}var fs;function readFileSync(filename,options){if(fs===undefined)fs=require("fs"); +return parse(fs.readFileSync(filename),options)}function readSync(blob,options){switch(options!==undefined&&options.type!==undefined?options.type:"base64"){case"file":return readFileSync(blob,options);case"base64":return parse(s2a(Base64.decode(blob)),options);case"binary":return parse(s2a(blob),options);}return parse(blob)}var MSSZ=64;var ENDOFCHAIN=-2;var HEADER_SIGNATURE="d0cf11e0a1b11ae1";var HEADER_CLSID="00000000000000000000000000000000";var consts={MAXREGSECT:-6,DIFSECT:-4,FATSECT:-3,ENDOFCHAIN:ENDOFCHAIN,FREESECT:-1,HEADER_SIGNATURE:HEADER_SIGNATURE,HEADER_MINOR_VERSION:"3e00",MAXREGSID:-6,NOSTREAM:-1,HEADER_CLSID:HEADER_CLSID,EntryTypes:["unknown","storage","stream","lockbytes","property","root"]};exports.read=readSync;exports.parse=parse;exports.utils={ReadShift:ReadShift,CheckField:CheckField,prep_blob:prep_blob,bconcat:bconcat,consts:consts};return exports}();if(typeof require!=="undefined"&&typeof module!=="undefined"&&typeof DO_NOT_EXPORT_CFB==="undefined"){module.exports=CFB}function isval(x){return x!==undefined&&x!==null}function keys(o){return Object.keys(o)}function evert_key(obj,key){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]][key]]=K[i];return o}function evert(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=K[i];return o}function evert_num(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i)o[obj[K[i]]]=parseInt(K[i],10);return o}function evert_arr(obj){var o=[],K=keys(obj);for(var i=0;i!==K.length;++i){if(o[obj[K[i]]]==null)o[obj[K[i]]]=[];o[obj[K[i]]].push(K[i])}return o}function datenum(v,date1904){var epoch=v.getTime();if(date1904)epoch+=1462*24*60*60*1e3;return(epoch+22091616e5)/(24*60*60*1e3)}function numdate(v){var date=SSF.parse_date_code(v);var val=new Date;if(date==null)throw new Error("Bad Date Code: "+v);val.setUTCDate(date.d);val.setUTCMonth(date.m-1);val.setUTCFullYear(date.y);val.setUTCHours(date.H);val.setUTCMinutes(date.M);val.setUTCSeconds(date.S);return val}function parse_isodur(s){var sec=0,mt=0,time=false;var m=s.match(/P([0-9\.]+Y)?([0-9\.]+M)?([0-9\.]+D)?T([0-9\.]+H)?([0-9\.]+M)?([0-9\.]+S)?/);if(!m)throw new Error("|"+s+"| is not an ISO8601 Duration");for(var i=1;i!=m.length;++i){if(!m[i])continue;mt=1;if(i>3)time=true;switch(m[i].substr(m[i].length-1)){case"Y":throw new Error("Unsupported ISO Duration Field: "+m[i].substr(m[i].length-1));case"D":mt*=24;case"H":mt*=60;case"M":if(!time)throw new Error("Unsupported ISO Duration Field: M");else mt*=60;case"S":break;}sec+=mt*parseInt(m[i],10)}return sec}var good_pd_date=new Date("2017-02-19T19:06:09.000Z");if(isNaN(good_pd_date.getFullYear()))good_pd_date=new Date("2/19/17");var good_pd=good_pd_date.getFullYear()==2017;function parseDate(str){var d=new Date(str);if(good_pd)return d;if(str instanceof Date)return str;if(good_pd_date.getFullYear()==1917&&!isNaN(d.getFullYear())){var s=d.getFullYear();if(str.indexOf(""+s)>-1)return d;d.setFullYear(d.getFullYear()+100);return d}var n=str.match(/\d+/g)||["2017","2","19","0","0","0"];return new Date(Date.UTC(+n[0],+n[1]-1,+n[2],+n[3]||0,+n[4]||0,+n[5]||0))}function cc2str(arr){var o="";for(var i=0;i!=arr.length;++i)o+=String.fromCharCode(arr[i]);return o}function str2cc(str){var o=[];for(var i=0;i!=str.length;++i)o.push(str.charCodeAt(i));return o}function dup(o){if(typeof JSON!="undefined"&&!Array.isArray(o))return JSON.parse(JSON.stringify(o));if(typeof o!="object"||o==null)return o;var out={};for(var k in o)if(o.hasOwnProperty(k))out[k]=dup(o[k]);return out}function fill(c,l){var o="";while(o.length8099)return n;if((m>0||d>1)&&y!=101)return o;if(s.toLowerCase().match(/jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec/))return o;if(!s.match(/[a-zA-Z]/))return o;return n}function getdatastr(data){if(!data)return null;if(data.data)return debom(data.data);if(data.asNodeBuffer&&has_buf)return debom(data.asNodeBuffer().toString("binary"));if(data.asBinary)return debom(data.asBinary());if(data._data&&data._data.getContent)return debom(cc2str(Array.prototype.slice.call(data._data.getContent(),0)));return null}function getdatabin(data){if(!data)return null;if(data.data)return char_codes(data.data);if(data.asNodeBuffer&&has_buf)return data.asNodeBuffer();if(data._data&&data._data.getContent){var o=data._data.getContent();if(typeof o=="string")return str2cc(o);return Array.prototype.slice.call(o)}return null}function getdata(data){return data&&data.name.slice(-4)===".bin"?getdatabin(data):getdatastr(data)}function safegetzipfile(zip,file){var k=keys(zip.files);var f=file.toLowerCase(),g=f.replace(/\//g,"\\");for(var i=0;i\/]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:')|([^'">\s]+))/g;var tagregex=/<[^>]*>/g;var nsregex=/<\w*:/,nsregex2=/<(\/?)\w+:/;function parsexmltag(tag,skip_root){var z={};var eq=0,c=0;for(;eq!==tag.length;++eq)if((c=tag.charCodeAt(eq))===32||c===10||c===13)break;if(!skip_root)z[0]=tag.substr(0,eq);if(eq===tag.length)return z;var m=tag.match(attregexg),j=0,v="",i=0,q="",cc="",quot=1;if(m)for(i=0;i!=m.length;++i){cc=m[i];for(c=0;c!=cc.length;++c)if(cc.charCodeAt(c)===61)break;q=cc.substr(0,c);quot=(eq=cc.charCodeAt(c+1))==34||eq==39?1:0;v=cc.substring(c+1+quot,cc.length-quot);for(j=0;j!=q.length;++j)if(q.charCodeAt(j)===58)break;if(j===q.length){if(q.indexOf("_")>0)q=q.substr(0,q.indexOf("_"));z[q]=v}else{var k=(j===5&&q.substr(0,5)==="xmlns"?"xmlns":"")+q.substr(j+1);if(z[k]&&q.substr(j-3,3)=="ext")continue;z[k]=v}}return z}function strip_ns(x){return x.replace(nsregex2,"<$1")}var encodings={""":'"',"'":"'",">":">","<":"<","&":"&"};var rencoding=evert(encodings);var unescapexml=function(){var encregex=/&(?:quot|apos|gt|lt|amp|#x?([\da-fA-F]+));/g,coderegex=/_x([\da-fA-F]{4})_/g;return function unescapexml(text){var s=text+"";return s.replace(encregex,function($$,$1){return encodings[$$]||String.fromCharCode(parseInt($1,$$.indexOf("x")>-1?16:10))||$$}).replace(coderegex,function(m,c){return String.fromCharCode(parseInt(c,16))})}}();var decregex=/[&<>'"]/g,charegex=/[\u0000-\u0008\u000b-\u001f]/g;function escapexml(text,xml){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(charegex,function(s){return"_x"+("000"+s.charCodeAt(0).toString(16)).slice(-4)+"_"})}function escapexmltag(text){return escapexml(text).replace(/ /g,"_x0020_")}var htmlcharegex=/[\u0000-\u001f]/g;function escapehtml(text){var s=text+"";return s.replace(decregex,function(y){return rencoding[y]}).replace(htmlcharegex,function(s){return"&#x"+("000"+s.charCodeAt(0).toString(16)).slice(-4)+";"})}var xlml_fixstr=function(){var entregex=/&#(\d+);/g;function entrepl($$,$1){return String.fromCharCode(parseInt($1,10))}return function xlml_fixstr(str){return str.replace(entregex,entrepl)}}();var xlml_unfixstr=function(){return function xlml_unfixstr(str){return str.replace(/(\r\n|[\r\n])/g," ")}}();function parsexmlbool(value,tag){switch(value){case"1":;case"true":;case"TRUE":return true;default:return false;}}var utf8read=function utf8reada(orig){var out="",i=0,c=0,d=0,e=0,f=0,w=0;while(i191&&c<224){out+=String.fromCharCode((c&31)<<6|d&63);continue}e=orig.charCodeAt(i++);if(c<240){out+=String.fromCharCode((c&15)<<12|(d&63)<<6|e&63);continue}f=orig.charCodeAt(i++);w=((c&7)<<18|(d&63)<<12|(e&63)<<6|f&63)-65536;out+=String.fromCharCode(55296+(w>>>10&1023));out+=String.fromCharCode(56320+(w&1023))}return out};if(has_buf){var utf8readb=function utf8readb(data){var out=new Buffer(2*data.length),w,i,j=1,k=0,ww=0,c;for(i=0;i>>10&1023);w=56320+(w&1023)}if(ww!==0){out[k++]=ww&255;out[k++]=ww>>>8;ww=0}out[k++]=w%256;out[k++]=w>>>8}return out.slice(0,k).toString("ucs2")};var corpus="foo bar bazรขย˜ยƒรฐยŸยยฃ";if(utf8read(corpus)==utf8readb(corpus))utf8read=utf8readb;var utf8readc=function utf8readc(data){return Buffer(data,"binary").toString("utf8")};if(utf8read(corpus)==utf8readc(corpus))utf8read=utf8readc}var matchtag=function(){var mtcache={};return function matchtag(f,g){var t=f+"|"+(g||"");if(mtcache[t])return mtcache[t];return mtcache[t]=new RegExp("<(?:\\w+:)?"+f+'(?: xml:space="preserve")?(?:[^>]*)>([^โ˜ƒ]*)",g||"")}}();var vtregex=function(){var vt_cache={};return function vt_regex(bt){if(vt_cache[bt]!==undefined)return vt_cache[bt];return vt_cache[bt]=new RegExp("<(?:vt:)?"+bt+">(.*?)","g")}}();var vtvregex=/<\/?(?:vt:)?variant>/g,vtmregex=/<(?:vt:)([^>]*)>(.*)"+g+""}function wxt_helper(h){return keys(h).map(function(k){return" "+k+'="'+h[k]+'"'}).join("")}function writextag(f,g,h){return"<"+f+(isval(h)?wxt_helper(h):"")+(isval(g)?(g.match(wtregex)?' xml:space="preserve"':"")+">"+g+""}function write_w3cdtf(d,t){try{return d.toISOString().replace(/\.\d*/,"")}catch(e){if(t)throw e}return""}function write_vt(s){switch(typeof s){case"string":return writextag("vt:lpwstr",s);case"number":return writextag((s|0)==s?"vt:i4":"vt:r8",String(s));case"boolean":return writextag("vt:bool",s?"true":"false");}if(s instanceof Date)return writextag("vt:filetime",write_w3cdtf(s));throw new Error("Unable to serialize "+s)}var XML_HEADER='\r\n';var XMLNS={dc:"http://purl.org/dc/elements/1.1/",dcterms:"http://purl.org/dc/terms/",dcmitype:"http://purl.org/dc/dcmitype/",mx:"http://schemas.microsoft.com/office/mac/excel/2008/main",r:"http://schemas.openxmlformats.org/officeDocument/2006/relationships",sjs:"http://schemas.openxmlformats.org/package/2006/sheetjs/core-properties",vt:"http://schemas.openxmlformats.org/officeDocument/2006/docPropsVTypes",xsi:"http://www.w3.org/2001/XMLSchema-instance",xsd:"http://www.w3.org/2001/XMLSchema"};XMLNS.main=["http://schemas.openxmlformats.org/spreadsheetml/2006/main","http://purl.oclc.org/ooxml/spreadsheetml/main","http://schemas.microsoft.com/office/excel/2006/main","http://schemas.microsoft.com/office/excel/2006/2"];var XLMLNS={o:"urn:schemas-microsoft-com:office:office",x:"urn:schemas-microsoft-com:office:excel",ss:"urn:schemas-microsoft-com:office:spreadsheet",dt:"uuid:C2F41010-65B3-11d1-A29F-00AA00C14882",mv:"http://macVmlSchemaUri",v:"urn:schemas-microsoft-com:vml",html:"http://www.w3.org/TR/REC-html40"};function read_double_le(b,idx){var s=1-2*(b[idx+7]>>>7);var e=((b[idx+7]&127)<<4)+(b[idx+6]>>>4&15);var m=b[idx+6]&15;for(var i=5;i>=0;--i)m=m*256+b[idx+i];if(e==2047)return m==0?s*Infinity:NaN;if(e==0)e=-1022;else{e-=1023;m+=Math.pow(2,52)}return s*Math.pow(2,e-52)*m}function write_double_le(b,v,idx){var bs=(v<0||1/v==-Infinity?1:0)<<7,e=0,m=0;var av=bs?-v:v;if(!isFinite(av)){e=2047;m=isNaN(v)?26985:0}else{e=Math.floor(Math.log(av)*Math.LOG2E);m=v*Math.pow(2,52-e);if(e<=-1023&&(!isFinite(m)||m>4|bs}var __toBuffer,___toBuffer;__toBuffer=___toBuffer=function toBuffer_(bufs){var x=[];for(var i=0;i0?__utf8(b,i+4,i+4+len-1):""};var __lpwstr,___lpwstr;__lpwstr=___lpwstr=function lpwstr_(b,i){var len=2*__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len-1):""};var __lpp4,___lpp4;__lpp4=___lpp4=function lpp4_(b,i){var len=__readUInt32LE(b,i);return len>0?__utf16le(b,i+4,i+4+len):""};var __8lpp4,___8lpp4;__8lpp4=___8lpp4=function lpp4_8(b,i){var len=__readUInt32LE(b,i);return len>0?__utf8(b,i+4,i+4+len):""};var __double,___double;__double=___double=function(b,idx){return read_double_le(b,idx)};var is_buf=function is_buf_a(a){return Array.isArray(a)};if(has_buf){__utf16le=function utf16le_b(b,s,e){if(!Buffer.isBuffer(b))return ___utf16le(b,s,e);return b.toString("utf16le",s,e)};__hexlify=function(b,s,l){return Buffer.isBuffer(b)?b.toString("hex",s,s+l):___hexlify(b,s,l)};__lpstr=function lpstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpstr(b,i);var len=b.readUInt32LE(i);return len>0?b.toString("utf8",i+4,i+4+len-1):""};__lpwstr=function lpwstr_b(b,i){if(!Buffer.isBuffer(b))return ___lpwstr(b,i);var len=2*b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len-1)};__lpp4=function lpp4_b(b,i){if(!Buffer.isBuffer(b))return ___lpp4(b,i);var len=b.readUInt32LE(i);return b.toString("utf16le",i+4,i+4+len)};__8lpp4=function lpp4_8b(b,i){if(!Buffer.isBuffer(b))return ___8lpp4(b,i);var len=b.readUInt32LE(i);return b.toString("utf8",i+4,i+4+len)};__utf8=function utf8_b(b,s,e){return b.toString("utf8",s,e)};__toBuffer=function(bufs){return bufs[0].length>0&&Buffer.isBuffer(bufs[0][0])?Buffer.concat(bufs[0]):___toBuffer(bufs)};bconcat=function(bufs){return Buffer.isBuffer(bufs[0])?Buffer.concat(bufs):[].concat.apply([],bufs)};__double=function double_(b,i){if(Buffer.isBuffer(b))return b.readDoubleLE(i);return ___double(b,i)};is_buf=function is_buf_b(a){return Buffer.isBuffer(a)||Array.isArray(a)}}if(typeof cptable!=="undefined"){__utf16le=function(b,s,e){return cptable.utils.decode(1200,b.slice(s,e))};__utf8=function(b,s,e){return cptable.utils.decode(65001,b.slice(s,e))};__lpstr=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(current_codepage,b.slice(i+4,i+4+len-1)):""};__lpwstr=function(b,i){var len=2*__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len-1)):""};__lpp4=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(1200,b.slice(i+4,i+4+len)):""};__8lpp4=function(b,i){var len=__readUInt32LE(b,i);return len>0?cptable.utils.decode(65001,b.slice(i+4,i+4+len)):""}}var __readUInt8=function(b,idx){return b[idx]};var __readUInt16LE=function(b,idx){return b[idx+1]*(1<<8)+b[idx]};var __readInt16LE=function(b,idx){var u=b[idx+1]*(1<<8)+b[idx];return u<32768?u:(65535-u+1)*-1};var __readUInt32LE=function(b,idx){return b[idx+3]*(1<<24)+(b[idx+2]<<16)+(b[idx+1]<<8)+b[idx]};var __readInt32LE=function(b,idx){return b[idx+3]<<24|b[idx+2]<<16|b[idx+1]<<8|b[idx]};var ___unhexlify=function(s){return s.match(/../g).map(function(x){return parseInt(x,16)})};var __unhexlify=typeof Buffer!=="undefined"?function(s){return Buffer.isBuffer(s)?new Buffer(s,"hex"):___unhexlify(s)}:___unhexlify;function ReadShift(size,t){var o="",oI,oR,oo=[],w,vv,i,loc;switch(t){case"dbcs":loc=this.l;if(has_buf&&Buffer.isBuffer(this))o=this.slice(this.l,this.l+2*size).toString("utf16le");else for(i=0;i!=size;++i){o+=String.fromCharCode(__readUInt16LE(this,loc));loc+=2}size*=2;break;case"utf8":o=__utf8(this,this.l,this.l+size);break;case"utf16le":size*=2;o=__utf16le(this,this.l,this.l+size);break;case"wstr":if(typeof cptable!=="undefined")o=cptable.utils.decode(current_codepage,this.slice(this.l,this.l+2*size));else return ReadShift.call(this,size,"dbcs");size=2*size;break;case"lpstr":o=__lpstr(this,this.l);size=5+o.length;break;case"lpwstr":o=__lpwstr(this,this.l);size=5+o.length;if(o[o.length-1]=="\0")size+=2;break;case"lpp4":size=4+__readUInt32LE(this,this.l);o=__lpp4(this,this.l);if(size&2)size+=2;break;case"8lpp4":size=4+__readUInt32LE(this,this.l);o=__8lpp4(this,this.l);if(size&3)size+=4-(size&3);break;case"cstr":size=0;o="";while((w=__readUInt8(this,this.l+size++))!==0)oo.push(_getchar(w));o=oo.join("");break;case"_wstr":size=0;o="";while((w=__readUInt16LE(this,this.l+size))!==0){oo.push(_getchar(w));size+=2}size+=2;o=oo.join("");break;case"dbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt16LE(this,loc)));loc+=2}o=oo.join("");size*=2;break;case"sbcs-cont":o="";loc=this.l;for(i=0;i!=size;++i){if(this.lens&&this.lens.indexOf(loc)!==-1){w=__readUInt8(this,loc);this.l=loc+1;vv=ReadShift.call(this,size-i,w?"dbcs-cont":"sbcs-cont");return oo.join("")+vv}oo.push(_getchar(__readUInt8(this,loc)));loc+=1}o=oo.join("");break;default:switch(size){case 1:oI=__readUInt8(this,this.l);this.l++;return oI;case 2:oI=(t==="i"?__readInt16LE:__readUInt16LE)(this,this.l);this.l+=2;return oI;case 4:if(t==="i"||(this[this.l+3]&128)===0){oI=__readInt32LE(this,this.l);this.l+=4;return oI}else{oR=__readUInt32LE(this,this.l);this.l+=4}return oR;case 8:if(t==="f"){oR=__double(this,this.l);this.l+=8;return oR};case 16:o=__hexlify(this,this.l,size);break;};}this.l+=size;return o}var __writeUInt16LE=function(b,val,idx){b[idx]=val&255;b[idx+1]=val>>>8&255};var __writeUInt32LE=function(b,val,idx){b[idx]=val&255;b[idx+1]=val>>>8&255;b[idx+2]=val>>>16&255;b[idx+3]=val>>>24&255};var __writeInt32LE=function(b,val,idx){b[idx]=val&255;b[idx+1]=val>>8&255;b[idx+2]=val>>16&255;b[idx+3]=val>>24&255};function WriteShift(t,val,f){var size=0,i=0;if(f==="dbcs"){for(i=0;i!=val.length;++i)__writeUInt16LE(this,val.charCodeAt(i),this.l+2*i);size=2*val.length}else if(f==="sbcs"){for(i=0;i!=val.length;++i)this[this.l+i]=val.charCodeAt(i)&255;size=val.length}else switch(t){case 1:size=1;this[this.l]=val&255;break;case 2:size=2;this[this.l]=val&255;val>>>=8;this[this.l+1]=val&255;break;case 3:size=3;this[this.l]=val&255;val>>>=8;this[this.l+1]=val&255;val>>>=8;this[this.l+2]=val&255;break;case 4:size=4;__writeUInt32LE(this,val,this.l);break;case 8:size=8;if(f==="f"){write_double_le(this,val,this.l);break};case 16:break;case-4:size=4;__writeInt32LE(this,val,this.l);break;}this.l+=size;return this}function CheckField(hexstr,fld){var m=__hexlify(this,this.l,hexstr.length>>1);if(m!==hexstr)throw fld+"Expected "+hexstr+" saw "+m;this.l+=hexstr.length>>1}function prep_blob(blob,pos){blob.l=pos;blob.read_shift=ReadShift;blob.chk=CheckField;blob.write_shift=WriteShift}function parsenoop(blob,length){blob.l+=length}function parsenooplog(blob,length){if(typeof console!="undefined")console.log(blob.slice(blob.l,blob.l+length));blob.l+=length}function writenoop(blob,length){blob.l+=length}function new_buf(sz){var o=new_raw_buf(sz);prep_blob(o,0);return o}function recordhopper(data,cb,opts){if(!data)return;var tmpbyte,cntbyte,length;prep_blob(data,data.l||0);var L=data.length,RT=0,tgt=0;while(data.lcurbuf.l)curbuf=curbuf.slice(0,curbuf.l);if(curbuf.length>0)bufs.push(curbuf);curbuf=null};var next=function ba_next(sz){if(curbuf&&sz=128?1:0)+1+length;if(length>=128)++l;if(length>=16384)++l;if(length>=2097152)++l;var o=ba.next(l);if(t<=127)o.write_shift(1,t);else{o.write_shift(1,(t&127)+128);o.write_shift(1,t>>7)}for(var i=0;i!=4;++i){if(length>=128){o.write_shift(1,(length&127)+128);length>>=7}else{o.write_shift(1,length);break}}if(length>0&&is_buf(payload))ba.push(payload)}function shift_cell_xls(cell,tgt,opts){var out=dup(cell);if(tgt.s){if(out.cRel)out.c+=tgt.s.c;if(out.rRel)out.r+=tgt.s.r}else{out.c+=tgt.c;out.r+=tgt.r}if(!opts||opts.biff<12){while(out.c>=256)out.c-=256;while(out.r>=65536)out.r-=65536}return out}function shift_range_xls(cell,range,opts){var out=dup(cell);out.s=shift_cell_xls(out.s,range.s,opts);out.e=shift_cell_xls(out.e,range.s,opts);return out}function encode_cell_xls(c){var s=encode_cell(c);if(c.cRel===0)s=fix_col(s);if(c.rRel===0)s=fix_row(s);return s}function encode_range_xls(r,opts){if(r.s.r==0&&!r.s.rRel){if(r.e.r==opts.biff>=12?1048575:65535&&!r.e.rRel){return(r.s.cRel?"":"$")+encode_col(r.s.c)+":"+(r.e.cRel?"":"$")+encode_col(r.e.c)}}if(r.s.c==0&&!r.s.cRel){if(r.e.c==opts.biff>=12?65535:255&&!r.e.cRel){return(r.s.rRel?"":"$")+encode_row(r.s.r)+":"+(r.e.rRel?"":"$")+encode_row(r.e.r)}}return encode_cell_xls(r.s)+":"+encode_cell_xls(r.e)}var OFFCRYPTO={};var make_offcrypto=function(O,_crypto){var crypto;if(typeof _crypto!=="undefined")crypto=_crypto;else if(typeof require!=="undefined"){try{crypto=require("crypto")}catch(e){crypto=null}}O.rc4=function(key,data){var S=new Array(256);var c=0,i=0,j=0,t=0;for(i=0;i!=256;++i)S[i]=i;for(i=0;i!=256;++i){j=j+S[i]+key[i%key.length].charCodeAt(0)&255;t=S[i];S[i]=S[j];S[j]=t}i=j=0;var out=Buffer(data.length);for(c=0;c!=data.length;++c){i=i+1&255;j=(j+S[i])%256;t=S[i];S[i]=S[j];S[j]=t;out[c]=data[c]^S[S[i]+S[j]&255]}return out};O.md5=function(hex){if(!crypto)throw new Error("Unsupported crypto");return crypto.createHash("md5").update(hex).digest("hex")}};make_offcrypto(OFFCRYPTO,typeof crypto!=="undefined"?crypto:undefined);function decode_row(rowstr){return parseInt(unfix_row(rowstr),10)-1}function encode_row(row){return""+(row+1)}function fix_row(cstr){return cstr.replace(/([A-Z]|^)(\d+)$/,"$1$$$2")}function unfix_row(cstr){return cstr.replace(/\$(\d+)$/,"$1")}function decode_col(colstr){var c=unfix_col(colstr),d=0,i=0;for(;i!==c.length;++i)d=26*d+c.charCodeAt(i)-64;return d-1}function encode_col(col){var s="";for(++col;col;col=Math.floor((col-1)/26))s=String.fromCharCode((col-1)%26+65)+s;return s}function fix_col(cstr){return cstr.replace(/^([A-Z])/,"$$$1")}function unfix_col(cstr){return cstr.replace(/^\$([A-Z])/,"$1")}function split_cell(cstr){return cstr.replace(/(\$?[A-Z]*)(\$?\d*)/,"$1,$2").split(",")}function decode_cell(cstr){var splt=split_cell(cstr);return{c:decode_col(splt[0]),r:decode_row(splt[1])}}function encode_cell(cell){return encode_col(cell.c)+encode_row(cell.r)}function fix_cell(cstr){return fix_col(fix_row(cstr))}function unfix_cell(cstr){return unfix_col(unfix_row(cstr))}function decode_range(range){var x=range.split(":").map(decode_cell);return{s:x[0],e:x[x.length-1]}}function encode_range(cs,ce){if(typeof ce==="undefined"||typeof ce==="number"){return encode_range(cs.s,cs.e)}if(typeof cs!=="string")cs=encode_cell(cs);if(typeof ce!=="string")ce=encode_cell(ce);return cs==ce?cs:cs+":"+ce}function safe_decode_range(range){var o={s:{c:0,r:0},e:{c:0,r:0}};var idx=0,i=0,cc=0;var len=range.length;for(idx=0;i26)break;idx=26*idx+cc}o.s.c=--idx;for(idx=0;i9)break;idx=10*idx+cc}o.s.r=--idx;if(i===len||range.charCodeAt(++i)===58){o.e.c=o.s.c;o.e.r=o.s.r;return o}for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}o.e.c=--idx;for(idx=0;i!=len;++i){if((cc=range.charCodeAt(i)-48)<0||cc>9)break;idx=10*idx+cc}o.e.r=--idx;return o}function safe_format_cell(cell,v){var q=cell.t=="d"&&v instanceof Date;if(cell.z!=null)try{return cell.w=SSF.format(cell.z,q?datenum(v):v)}catch(e){}try{return cell.w=SSF.format((cell.XF||{}).ifmt||(q?14:0),q?datenum(v):v)}catch(e){return""+v}}function format_cell(cell,v,o){if(cell==null||cell.t==null||cell.t=="z")return"";if(cell.w!==undefined)return cell.w;if(cell.t=="d"&&!cell.z&&o&&o.dateNF)cell.z=o.dateNF;if(v==undefined)return safe_format_cell(cell,cell.v,o);return safe_format_cell(cell,v,o)}function sheet_to_workbook(sheet,opts){var n=opts&&opts.sheet?opts.sheet:"Sheet1";var sheets={};sheets[n]=sheet;return{SheetNames:[n],Sheets:sheets}}function aoa_to_sheet(data,opts){var o=opts||{};if(DENSE!=null&&o.dense==null)o.dense=DENSE;var ws=o.dense?[]:{};var range={s:{c:1e7,r:1e7},e:{c:0,r:0}};for(var R=0;R!=data.length;++R){for(var C=0;C!=data[R].length;++C){if(typeof data[R][C]==="undefined")continue;var cell={v:data[R][C]};if(Array.isArray(cell.v)){cell.f=data[R][C][1];cell.v=cell.v[0]}if(range.s.r>R)range.s.r=R;if(range.s.c>C)range.s.c=C;if(range.e.r0)o.write_shift(0,data,"dbcs");return _null?o.slice(0,o.l):o}function parse_StrRun(data,length){return{ich:data.read_shift(2),ifnt:data.read_shift(2)}}function write_StrRun(run,o){if(!o)o=new_buf(4);o.write_shift(2,run.ich||0);o.write_shift(2,run.ifnt||0);return o}function parse_RichStr(data,length){var start=data.l;var flags=data.read_shift(1);var str=parse_XLWideString(data);var rgsStrRun=[];var z={t:str,h:str};if((flags&1)!==0){var dwSizeStrRun=data.read_shift(4);for(var i=0;i!=dwSizeStrRun;++i)rgsStrRun.push(parse_StrRun(data));z.r=rgsStrRun}else z.r=[{ich:0,ifnt:0}];data.l=start+length;return z}function write_RichStr(str,o){var _null=false;if(o==null){_null=true;o=new_buf(15+4*str.t.length)}o.write_shift(1,0);write_XLWideString(str.t,o);return _null?o.slice(0,o.l):o}var parse_BrtCommentText=parse_RichStr;function write_BrtCommentText(str,o){var _null=false;if(o==null){_null=true;o=new_buf(23+4*str.t.length)}o.write_shift(1,1);write_XLWideString(str.t,o);o.write_shift(4,1);write_StrRun({ich:0,ifnt:0},o);return _null?o.slice(0,o.l):o}function parse_XLSBCell(data){var col=data.read_shift(4);var iStyleRef=data.read_shift(2);iStyleRef+=data.read_shift(1)<<16;var fPhShow=data.read_shift(1);return{c:col,iStyleRef:iStyleRef}}function write_XLSBCell(cell,o){if(o==null)o=new_buf(8);o.write_shift(-4,cell.c);o.write_shift(3,cell.iStyleRef||cell.s);o.write_shift(1,0);return o}var parse_XLSBCodeName=parse_XLWideString;var write_XLSBCodeName=write_XLWideString;function parse_XLNullableWideString(data){var cchCharacters=data.read_shift(4);return cchCharacters===0||cchCharacters===4294967295?"":data.read_shift(cchCharacters,"dbcs")}function write_XLNullableWideString(data,o){var _null=false;if(o==null){_null=true;o=new_buf(127)}o.write_shift(4,data.length>0?data.length:4294967295);if(data.length>0)o.write_shift(0,data,"dbcs");return _null?o.slice(0,o.l):o}var parse_XLNameWideString=parse_XLWideString;var write_XLNameWideString=write_XLWideString;var parse_RelID=parse_XLNullableWideString;var write_RelID=write_XLNullableWideString;function parse_RkNumber(data){var b=data.slice(data.l,data.l+4);var fX100=b[0]&1,fInt=b[0]&2;data.l+=4;b[0]&=252;var RK=fInt===0?__double([0,0,0,0,b[0],b[1],b[2],b[3]],0):__readInt32LE(b,0)>>2;return fX100?RK/100:RK}function write_RkNumber(data,o){if(o==null)o=new_buf(4);var fX100=0,fInt=0,d100=data*100;if(data==(data|0)&&data>=-(1<<29)&&data<1<<29){fInt=1}else if(d100==(d100|0)&&d100>=-(1<<29)&&d100<1<<29){fInt=1;fX100=1}if(fInt)o.write_shift(-4,((fX100?d100:data)<<2)+(fX100+2));else throw new Error("unsupported RkNumber "+data)}function parse_RfX(data){var cell={s:{},e:{}};cell.s.r=data.read_shift(4);cell.e.r=data.read_shift(4);cell.s.c=data.read_shift(4);cell.e.c=data.read_shift(4);return cell}function write_RfX(r,o){if(!o)o=new_buf(16);o.write_shift(4,r.s.r);o.write_shift(4,r.e.r);o.write_shift(4,r.s.c);o.write_shift(4,r.e.c);return o}var parse_UncheckedRfX=parse_RfX;var write_UncheckedRfX=write_RfX;function parse_Xnum(data,length){return data.read_shift(8,"f")}function write_Xnum(data,o){return(o||new_buf(8)).write_shift(8,data,"f")}var BErr={0:"#NULL!",7:"#DIV/0!",15:"#VALUE!",23:"#REF!",29:"#NAME?",36:"#NUM!",42:"#N/A",43:"#GETTING_DATA",255:"#WTF?"};var RBErr=evert_num(BErr);function parse_BrtColor(data,length){var out={};var d=data.read_shift(1);var fValidRGB=d&1;var xColorType=d>>>1;var index=data.read_shift(1);var nTS=data.read_shift(2,"i");var bR=data.read_shift(1);var bG=data.read_shift(1);var bB=data.read_shift(1);var bAlpha=data.read_shift(1);switch(xColorType){case 0:out.auto=1;break;case 1:out.index=index;var icv=XLSIcv[index];if(icv)out.rgb=icv[0].toString(16)+icv[1].toString(16)+icv[2].toString(16);break;case 2:out.rgb=bR.toString(16)+bG.toString(16)+bB.toString(16);break;case 3:out.theme=index;break;}if(nTS!=0)out.tint=nTS>0?nTS/32767:nTS/32768;return out}function write_BrtColor(color,o){if(!o)o=new_buf(8);if(!color||color.auto){o.write_shift(4,0);o.write_shift(4,0);return o}if(color.index){o.write_shift(1,2);o.write_shift(1,color.index)}else if(color.theme){o.write_shift(1,6);o.write_shift(1,color.theme)}else{o.write_shift(1,5);o.write_shift(1,0)}var nTS=color.tint||0;if(nTS>0)nTS*=32767;else if(nTS<0)nTS*=32768;o.write_shift(2,nTS);if(!color.rgb){o.write_shift(2,0);o.write_shift(1,0);o.write_shift(1,0)}else{var rgb=color.rgb||"FFFFFF";o.write_shift(1,parseInt(rgb.substr(0,2),16));o.write_shift(1,parseInt(rgb.substr(2,2),16));o.write_shift(1,parseInt(rgb.substr(4,2),16)); +o.write_shift(1,255)}return o}function parse_FontFlags(data,length,opts){var d=data.read_shift(1);data.l++;var out={fItalic:d&2,fStrikeout:d&8,fOutline:d&16,fShadow:d&32,fCondense:d&64,fExtend:d&128};return out}function write_FontFlags(font,o){if(!o)o=new_buf(2);var grbit=(font.italic?2:0)|(font.strike?8:0)|(font.outline?16:0)|(font.shadow?32:0)|(font.condense?64:0)|(font.extend?128:0);o.write_shift(1,grbit);o.write_shift(1,0);return o}{var VT_I2=2;var VT_I4=3;var VT_BOOL=11;var VT_VARIANT=12;var VT_UI4=19;var VT_UI8=21;var VT_LPSTR=30;var VT_FILETIME=64;var VT_CF=71;var VT_VECTOR=4096;var VT_STRING=80;var VT_USTR=81;var VT_CUSTOM=[VT_STRING,VT_USTR]}var DocSummaryPIDDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Category",t:VT_STRING},3:{n:"PresentationFormat",t:VT_STRING},4:{n:"ByteCount",t:VT_I4},5:{n:"LineCount",t:VT_I4},6:{n:"ParagraphCount",t:VT_I4},7:{n:"SlideCount",t:VT_I4},8:{n:"NoteCount",t:VT_I4},9:{n:"HiddenCount",t:VT_I4},10:{n:"MultimediaClipCount",t:VT_I4},11:{n:"Scale",t:VT_BOOL},12:{n:"HeadingPair",t:VT_VECTOR|VT_VARIANT},13:{n:"DocParts",t:VT_VECTOR|VT_LPSTR},14:{n:"Manager",t:VT_STRING},15:{n:"Company",t:VT_STRING},16:{n:"LinksDirty",t:VT_BOOL},17:{n:"CharacterCount",t:VT_I4},19:{n:"SharedDoc",t:VT_BOOL},22:{n:"HLinksChanged",t:VT_BOOL},23:{n:"AppVersion",t:VT_I4,p:"version"},26:{n:"ContentType",t:VT_STRING},27:{n:"ContentStatus",t:VT_STRING},28:{n:"Language",t:VT_STRING},29:{n:"Version",t:VT_STRING},255:{}};var SummaryPIDSI={1:{n:"CodePage",t:VT_I2},2:{n:"Title",t:VT_STRING},3:{n:"Subject",t:VT_STRING},4:{n:"Author",t:VT_STRING},5:{n:"Keywords",t:VT_STRING},6:{n:"Comments",t:VT_STRING},7:{n:"Template",t:VT_STRING},8:{n:"LastAuthor",t:VT_STRING},9:{n:"RevNumber",t:VT_STRING},10:{n:"EditTime",t:VT_FILETIME},11:{n:"LastPrinted",t:VT_FILETIME},12:{n:"CreatedDate",t:VT_FILETIME},13:{n:"ModifiedDate",t:VT_FILETIME},14:{n:"PageCount",t:VT_I4},15:{n:"WordCount",t:VT_I4},16:{n:"CharCount",t:VT_I4},17:{n:"Thumbnail",t:VT_CF},18:{n:"ApplicationName",t:VT_LPSTR},19:{n:"DocumentSecurity",t:VT_I4},255:{}};var SpecialProperties={2147483648:{n:"Locale",t:VT_UI4},2147483651:{n:"Behavior",t:VT_UI4},1919054434:{}};(function(){for(var y in SpecialProperties)if(SpecialProperties.hasOwnProperty(y))DocSummaryPIDDSI[y]=SummaryPIDSI[y]=SpecialProperties[y]})();var CountryEnum={1:"US",2:"CA",3:"",7:"RU",20:"EG",30:"GR",31:"NL",32:"BE",33:"FR",34:"ES",36:"HU",39:"IT",41:"CH",43:"AT",44:"GB",45:"DK",46:"SE",47:"NO",48:"PL",49:"DE",52:"MX",55:"BR",61:"AU",64:"NZ",66:"TH",81:"JP",82:"KR",84:"VN",86:"CN",90:"TR",105:"JS",213:"DZ",216:"MA",218:"LY",351:"PT",354:"IS",358:"FI",420:"CZ",886:"TW",961:"LB",962:"JO",963:"SY",964:"IQ",965:"KW",966:"SA",971:"AE",972:"IL",974:"QA",981:"IR",65535:"US"};var XLSFillPattern=[null,"solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];function rgbify(arr){return arr.map(function(x){return[x>>16&255,x>>8&255,x&255]})}var XLSIcv=rgbify([0,16777215,16711680,65280,255,16776960,16711935,65535,0,16777215,16711680,65280,255,16776960,16711935,65535,8388608,32768,128,8421376,8388736,32896,12632256,8421504,10066431,10040166,16777164,13434879,6684774,16744576,26316,13421823,128,16711935,16776960,65535,8388736,8388608,32896,255,52479,13434879,13434828,16777113,10079487,16751052,13408767,16764057,3368703,3394764,10079232,16763904,16750848,16737792,6710937,9868950,13158,3381606,13056,3355392,10040064,10040166,3355545,3355443,16777215,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]);var ct2type={"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml":"workbooks","application/vnd.ms-excel.binIndexWs":"TODO","application/vnd.ms-excel.intlmacrosheet":"TODO","application/vnd.ms-excel.binIndexMs":"TODO","application/vnd.openxmlformats-package.core-properties+xml":"coreprops","application/vnd.openxmlformats-officedocument.custom-properties+xml":"custprops","application/vnd.openxmlformats-officedocument.extended-properties+xml":"extprops","application/vnd.openxmlformats-officedocument.customXmlProperties+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.customProperty":"TODO","application/vnd.ms-excel.pivotTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotTable+xml":"TODO","application/vnd.ms-office.chartcolorstyle+xml":"TODO","application/vnd.ms-office.chartstyle+xml":"TODO","application/vnd.ms-excel.calcChain":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.calcChain+xml":"calcchains","application/vnd.openxmlformats-officedocument.spreadsheetml.printerSettings":"TODO","application/vnd.ms-office.activeX":"TODO","application/vnd.ms-office.activeX+xml":"TODO","application/vnd.ms-excel.attachedToolbars":"TODO","application/vnd.ms-excel.connections":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml":"TODO","application/vnd.ms-excel.externalLink":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.externalLink+xml":"TODO","application/vnd.ms-excel.sheetMetadata":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.sheetMetadata+xml":"TODO","application/vnd.ms-excel.pivotCacheDefinition":"TODO","application/vnd.ms-excel.pivotCacheRecords":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheDefinition+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.pivotCacheRecords+xml":"TODO","application/vnd.ms-excel.queryTable":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.queryTable+xml":"TODO","application/vnd.ms-excel.userNames":"TODO","application/vnd.ms-excel.revisionHeaders":"TODO","application/vnd.ms-excel.revisionLog":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionHeaders+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.revisionLog+xml":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.userNames+xml":"TODO","application/vnd.ms-excel.tableSingleCells":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.tableSingleCells+xml":"TODO","application/vnd.ms-excel.slicer":"TODO","application/vnd.ms-excel.slicerCache":"TODO","application/vnd.ms-excel.slicer+xml":"TODO","application/vnd.ms-excel.slicerCache+xml":"TODO","application/vnd.ms-excel.wsSortMap":"TODO","application/vnd.ms-excel.table":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml":"TODO","application/vnd.openxmlformats-officedocument.theme+xml":"themes","application/vnd.openxmlformats-officedocument.themeOverride+xml":"TODO","application/vnd.ms-excel.Timeline+xml":"TODO","application/vnd.ms-excel.TimelineCache+xml":"TODO","application/vnd.ms-office.vbaProject":"vba","application/vnd.ms-office.vbaProjectSignature":"vba","application/vnd.ms-office.volatileDependencies":"TODO","application/vnd.openxmlformats-officedocument.spreadsheetml.volatileDependencies+xml":"TODO","application/vnd.ms-excel.controlproperties+xml":"TODO","application/vnd.openxmlformats-officedocument.model+data":"TODO","application/vnd.ms-excel.Survey+xml":"TODO","application/vnd.openxmlformats-officedocument.drawing+xml":"drawings","application/vnd.openxmlformats-officedocument.drawingml.chart+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramColors+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramData+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramLayout+xml":"TODO","application/vnd.openxmlformats-officedocument.drawingml.diagramStyle+xml":"TODO","application/vnd.openxmlformats-officedocument.vmlDrawing":"TODO","application/vnd.openxmlformats-package.relationships+xml":"rels","application/vnd.openxmlformats-officedocument.oleObject":"TODO","image/png":"TODO",sheet:"js"};var CT_LIST=function(){var o={workbooks:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml",xlsm:"application/vnd.ms-excel.sheet.macroEnabled.main+xml",xlsb:"application/vnd.ms-excel.sheet.binary.macroEnabled.main",xltx:"application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml"},strs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml",xlsb:"application/vnd.ms-excel.sharedStrings"},comments:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml",xlsb:"application/vnd.ms-excel.comments"},sheets:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml",xlsb:"application/vnd.ms-excel.worksheet"},charts:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml",xlsb:"application/vnd.ms-excel.chartsheet"},dialogs:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml",xlsb:"application/vnd.ms-excel.dialogsheet"},macros:{xlsx:"application/vnd.ms-excel.macrosheet+xml",xlsb:"application/vnd.ms-excel.macrosheet"},styles:{xlsx:"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml",xlsb:"application/vnd.ms-excel.styles"}};keys(o).forEach(function(k){if(!o[k].xlsm)o[k].xlsm=o[k].xlsx});keys(o).forEach(function(k){keys(o[k]).forEach(function(v){ct2type[o[k][v]]=k})});return o}();var type2ct=evert_arr(ct2type);XMLNS.CT="http://schemas.openxmlformats.org/package/2006/content-types";function parse_ct(data,opts){var ct={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:""};if(!data||!data.match)return ct;var ctext={};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0].replace(nsregex,"<")){case"0?ct.calcchains[0]:"";ct.sst=ct.strs.length>0?ct.strs[0]:"";ct.style=ct.styles.length>0?ct.styles[0]:"";ct.defaults=ctext;delete ct.calcchains;return ct}var CTYPE_XML_ROOT=writextag("Types",null,{xmlns:XMLNS.CT,"xmlns:xsd":XMLNS.xsd,"xmlns:xsi":XMLNS.xsi});var CTYPE_DEFAULTS=[["xml","application/xml"],["bin","application/vnd.ms-excel.sheet.binary.macroEnabled.main"],["vml","application/vnd.openxmlformats-officedocument.vmlDrawing"],["bmp","image/bmp"],["png","image/png"],["gif","image/gif"],["emf","image/x-emf"],["wmf","image/x-wmf"],["jpg","image/jpeg"],["jpeg","image/jpeg"],["tif","image/tiff"],["tiff","image/tiff"],["pdf","application/pdf"],["rels",type2ct.rels[0]]].map(function(x){return writextag("Default",null,{Extension:x[0],ContentType:x[1]})});function write_ct(ct,opts){var o=[],v;o[o.length]=XML_HEADER;o[o.length]=CTYPE_XML_ROOT;o=o.concat(CTYPE_DEFAULTS);var f1=function(w){if(ct[w]&&ct[w].length>0){v=ct[w][0];o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})}};var f2=function(w){(ct[w]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:CT_LIST[w][opts.bookType||"xlsx"]})})};var f3=function(t){(ct[t]||[]).forEach(function(v){o[o.length]=writextag("Override",null,{PartName:(v[0]=="/"?"":"/")+v,ContentType:type2ct[t][0]})})};f1("workbooks");f2("sheets");f2("charts");f3("themes");["strs","styles"].forEach(f1);["coreprops","extprops","custprops"].forEach(f3);f3("vba");f3("comments");f3("drawings");if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var RELS={WB:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument",SHEET:"http://sheetjs.openxmlformats.org/officeDocument/2006/relationships/officeDocument",HLINK:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink",VML:"http://schemas.openxmlformats.org/officeDocument/2006/relationships/vmlDrawing",VBA:"http://schemas.microsoft.com/office/2006/relationships/vbaProject"};function get_rels_path(file){var n=file.lastIndexOf("/");return file.substr(0,n+1)+"_rels/"+file.substr(n+1)+".rels"}function parse_rels(data,currentFilePath){if(!data)return data;if(currentFilePath.charAt(0)!=="/"){currentFilePath="/"+currentFilePath}var rels={};var hash={};(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);if(y[0]==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function add_rels(rels,rId,f,type,relobj){if(!relobj)relobj={};if(!rels["!id"])rels["!id"]={};if(rId<0)for(rId=1;rels["!id"]["rId"+rId];++rId){}relobj.Id="rId"+rId;relobj.Type=type;relobj.Target=f;if(relobj.Type==RELS.HLINK)relobj.TargetMode="External";if(rels["!id"][relobj.Id])throw new Error("Cannot rewrite rId "+rId);rels["!id"][relobj.Id]=relobj;rels[("/"+relobj.Target).replace("//","/")]=relobj;return rId}var CT_ODS="application/vnd.oasis.opendocument.spreadsheet";function parse_manifest(d,opts){var str=xlml_normalize(d);var Rn;var FEtag;while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"manifest":break;case"file-entry":FEtag=parsexmltag(Rn[0],false);if(FEtag.path=="/"&&FEtag.type!==CT_ODS)throw new Error("This OpenDocument is not a spreadsheet");break;case"encryption-data":;case"algorithm":;case"start-key-generation":;case"key-derivation":throw new Error("Unsupported ODS Encryption");default:if(opts&&opts.WTF)throw Rn;}}function write_manifest(manifest,opts){var o=[XML_HEADER];o.push('\n');o.push(' \n');for(var i=0;i\n');o.push("");return o.join("")}function write_rdf_type(file,res,tag){return[' \n',' \n'," \n"].join("")}function write_rdf_has(base,file){return[' \n',' \n'," \n"].join("")}function write_rdf(rdf,opts){var o=[XML_HEADER];o.push('\n');for(var i=0;i!=rdf.length;++i){o.push(write_rdf_type(rdf[i][0],rdf[i][1]));o.push(write_rdf_has("",rdf[i][0]))}o.push(write_rdf_type("","Document","pkg"));o.push("");return o.join("")}var write_meta_ods=function(){var payload='Sheet'+"JS "+XLSX.version+"";return function wmo(wb,opts){return payload}}();var CORE_PROPS=[["cp:category","Category"],["cp:contentStatus","ContentStatus"],["cp:keywords","Keywords"],["cp:lastModifiedBy","LastAuthor"],["cp:lastPrinted","LastPrinted"],["cp:revision","RevNumber"],["cp:version","Version"],["dc:creator","Author"],["dc:description","Comments"],["dc:identifier","Identifier"],["dc:language","Language"],["dc:subject","Subject"],["dc:title","Title"],["dcterms:created","CreatedDate","date"],["dcterms:modified","ModifiedDate","date"]];XMLNS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/metadata/core-properties";RELS.CORE_PROPS="http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties";var CORE_PROPS_REGEX=function(){var r=new Array(CORE_PROPS.length);for(var i=0;i]*>(.*)")}return r}();function parse_core_props(data){var p={};for(var i=0;i0)p[f[1]]=cur[1];if(f[2]==="date"&&p[f[1]])p[f[1]]=parseDate(p[f[1]])}return p}var CORE_PROPS_XML_ROOT=writextag("cp:coreProperties",null,{"xmlns:cp":XMLNS.CORE_PROPS,"xmlns:dc":XMLNS.dc,"xmlns:dcterms":XMLNS.dcterms,"xmlns:dcmitype":XMLNS.dcmitype,"xmlns:xsi":XMLNS.xsi});function cp_doit(f,g,h,o,p){if(p[f]!=null||g==null||g==="")return;p[f]=g;o[o.length]=h?writextag(f,g,h):writetag(f,g)}function write_core_props(cp,_opts){var opts=_opts||{};var o=[XML_HEADER,CORE_PROPS_XML_ROOT],p={};if(!cp&&!opts.Props)return o.join("");if(cp){if(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);if(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)}for(var i=0;i!=CORE_PROPS.length;++i){var f=CORE_PROPS[i];var v=opts.Props&&opts.Props[f[1]]!=null?opts.Props[f[1]]:cp?cp[f[1]]:null;if(v===true)v="1";else if(v===false)v="0";else if(typeof v=="number")v=String(v);if(v!=null)cp_doit(f[0],v,null,o,p)}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var EXT_PROPS=[["Application","Application","string"],["AppVersion","AppVersion","string"],["Company","Company","string"],["DocSecurity","DocSecurity","string"],["Manager","Manager","string"],["HyperlinksChanged","HyperlinksChanged","bool"],["SharedDoc","SharedDoc","bool"],["LinksUpToDate","LinksUpToDate","bool"],["ScaleCrop","ScaleCrop","bool"],["HeadingPairs","HeadingPairs","raw"],["TitlesOfParts","TitlesOfParts","raw"]];XMLNS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/extended-properties";RELS.EXT_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties";function parse_ext_props(data,p){var q={};if(!p)p={};EXT_PROPS.forEach(function(f){switch(f[2]){case"string":p[f[1]]=(data.match(matchtag(f[0]))||[])[1];break;case"bool":p[f[1]]=(data.match(matchtag(f[0]))||[])[1]==="true";break;case"raw":var cur=data.match(new RegExp("<"+f[0]+"[^>]*>(.*)"));if(cur&&cur.length>0)q[f[1]]=cur[1];break;}});if(q.HeadingPairs&&q.TitlesOfParts){var v=parseVector(q.HeadingPairs);var parts=parseVector(q.TitlesOfParts).map(function(x){return x.v});var idx=0,len=0;for(var i=0;i!==v.length;i+=2){len=+v[i+1].v;switch(v[i].v){case"Worksheets":;case"ๅทฅไฝœ่กจ":;case"ะ›ะธัั‚ั‹":;case"ใƒฏใƒผใ‚ฏใ‚ทใƒผใƒˆ":;case"ื’ืœื™ื•ื ื•ืช ืขื‘ื•ื“ื”":;case"Arbeitsblรคtter":;case"ร‡alฤฑลŸma Sayfalarฤฑ":;case"Feuilles de calcul":;case"Fogli di lavoro":;case"Folhas de cรกlculo":;case"Planilhas":;case"Werkbladen":p.Worksheets=len;p.SheetNames=parts.slice(idx,idx+len);break;case"Named Ranges":;case"Benannte Bereiche":p.NamedRanges=len;p.DefinedNames=parts.slice(idx,idx+len);break;case"Charts":;case"Diagramme":p.Chartsheets=len;p.ChartNames=parts.slice(idx,idx+len);break;}idx+=len}}return p}var EXT_PROPS_XML_ROOT=writextag("Properties",null,{xmlns:XMLNS.EXT_PROPS,"xmlns:vt":XMLNS.vt});function write_ext_props(cp,opts){var o=[],p={},W=writextag;if(!cp)cp={};cp.Application="SheetJS";o[o.length]=XML_HEADER;o[o.length]=EXT_PROPS_XML_ROOT;EXT_PROPS.forEach(function(f){if(cp[f[1]]===undefined)return;var v;switch(f[2]){case"string":v=String(cp[f[1]]);break;case"bool":v=cp[f[1]]?"true":"false";break;}if(v!==undefined)o[o.length]=W(f[0],v)});o[o.length]=W("HeadingPairs",W("vt:vector",W("vt:variant","Worksheets")+W("vt:variant",W("vt:i4",String(cp.Worksheets))),{size:2,baseType:"variant"}));o[o.length]=W("TitlesOfParts",W("vt:vector",cp.SheetNames.map(function(s){return""+escapexml(s)+""}).join(""),{size:cp.Worksheets,baseType:"lpstr"}));if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}XMLNS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/custom-properties";RELS.CUST_PROPS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/custom-properties";var custregex=/<[^>]+>[^<]*/g;function parse_cust_props(data,opts){var p={},name="";var m=data.match(custregex);if(m)for(var i=0;i!=m.length;++i){var x=m[i],y=parsexmltag(x);switch(y[0]){case"":name=null;break;default:if(x.indexOf("");var type=toks[0].substring(4),text=toks[1];switch(type){case"lpstr":;case"bstr":;case"lpwstr":p[name]=unescapexml(text);break;case"bool":p[name]=parsexmlbool(text,"");break;case"i1":;case"i2":;case"i4":;case"i8":;case"int":;case"uint":p[name]=parseInt(text,10);break;case"r4":;case"r8":;case"decimal":p[name]=parseFloat(text);break;case"filetime":;case"date":p[name]=parseDate(text);break;case"cy":;case"error":p[name]=unescapexml(text);break;default:if(opts.WTF&&typeof console!=="undefined")console.warn("Unexpected",x,type,toks);}}else if(x.substr(0,2)==="2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}var XLMLDocPropsMap={Title:"Title",Subject:"Subject",Author:"Author",Keywords:"Keywords",Comments:"Description",LastAuthor:"LastAuthor",RevNumber:"Revision",Application:"AppName",LastPrinted:"LastPrinted",CreatedDate:"Created",ModifiedDate:"LastSaved",Category:"Category",Manager:"Manager",Company:"Company",AppVersion:"Version",ContentStatus:"ContentStatus",Identifier:"Identifier",Language:"Language"};var evert_XLMLDPM=evert(XLMLDocPropsMap);function xlml_set_prop(Props,tag,val){tag=evert_XLMLDPM[tag]||tag;Props[tag]=val}function xlml_write_docprops(Props,opts){var o=[];keys(XLMLDocPropsMap).map(function(m){for(var i=0;i'+o.join("")+""}function parse_FILETIME(blob){var dwLowDateTime=blob.read_shift(4),dwHighDateTime=blob.read_shift(4);return new Date((dwHighDateTime/1e7*Math.pow(2,32)+dwLowDateTime/1e7-11644473600)*1e3).toISOString().replace(/\.000/,"")}function parse_lpstr(blob,type,pad){var str=blob.read_shift(0,"lpstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_lpwstr(blob,type,pad){var str=blob.read_shift(0,"lpwstr");if(pad)blob.l+=4-(str.length+1&3)&3;return str}function parse_VtStringBase(blob,stringType,pad){if(stringType===31)return parse_lpwstr(blob);return parse_lpstr(blob,stringType,pad)}function parse_VtString(blob,t,pad){return parse_VtStringBase(blob,t,pad===false?0:4)}function parse_VtUnalignedString(blob,t){if(!t)throw new Error("dafuq?");return parse_VtStringBase(blob,t,0)}function parse_VtVecUnalignedLpstrValue(blob){var length=blob.read_shift(4);var ret=[];for(var i=0;i!=length;++i)ret[i]=blob.read_shift(0,"lpstr");return ret}function parse_VtVecUnalignedLpstr(blob){return parse_VtVecUnalignedLpstrValue(blob)}function parse_VtHeadingPair(blob){var headingString=parse_TypedPropertyValue(blob,VT_USTR);var headerParts=parse_TypedPropertyValue(blob,VT_I4);return[headingString,headerParts]}function parse_VtVecHeadingPairValue(blob){var cElements=blob.read_shift(4);var out=[];for(var i=0;i!=cElements/2;++i)out.push(parse_VtHeadingPair(blob));return out}function parse_VtVecHeadingPair(blob){return parse_VtVecHeadingPairValue(blob)}function parse_dictionary(blob,CodePage){var cnt=blob.read_shift(4);var dict={};for(var j=0;j!=cnt;++j){var pid=blob.read_shift(4);var len=blob.read_shift(4);dict[pid]=blob.read_shift(len,CodePage===1200?"utf16le":"utf8").replace(chr0,"").replace(chr1,"!")}if(blob.l&3)blob.l=blob.l>>2+1<<2;return dict}function parse_BLOB(blob){var size=blob.read_shift(4);var bytes=blob.slice(blob.l,blob.l+size);if((size&3)>0)blob.l+=4-(size&3)&3;return bytes}function parse_ClipboardData(blob){var o={};o.Size=blob.read_shift(4);blob.l+=o.Size;return o}function parse_VtVector(blob,cb){}function parse_TypedPropertyValue(blob,type,_opts){var t=blob.read_shift(2),ret,opts=_opts||{};blob.l+=2;if(type!==VT_VARIANT)if(t!==type&&VT_CUSTOM.indexOf(type)===-1)throw new Error("Expected type "+type+" saw "+t);switch(type===VT_VARIANT?t:type){case 2:ret=blob.read_shift(2,"i");if(!opts.raw)blob.l+=2;return ret;case 3:ret=blob.read_shift(4,"i");return ret;case 11:return blob.read_shift(4)!==0;case 19:ret=blob.read_shift(4);return ret;case 30:return parse_lpstr(blob,t,4).replace(chr0,"");case 31:return parse_lpwstr(blob);case 64:return parse_FILETIME(blob);case 65:return parse_BLOB(blob);case 71:return parse_ClipboardData(blob);case 80:return parse_VtString(blob,t,!opts.raw&&4).replace(chr0,"");case 81:return parse_VtUnalignedString(blob,t,4).replace(chr0,"");case 4108:return parse_VtVecHeadingPair(blob);case 4126:return parse_VtVecUnalignedLpstr(blob);default:throw new Error("TypedPropertyValue unrecognized type "+type+" "+t);}}function parse_PropertySet(blob,PIDSI){var start_addr=blob.l;var size=blob.read_shift(4);var NumProps=blob.read_shift(4);var Props=[],i=0;var CodePage=0;var Dictionary=-1,DictObj={};for(i=0;i!=NumProps;++i){var PropID=blob.read_shift(4);var Offset=blob.read_shift(4);Props[i]=[PropID,Offset+start_addr]}var PropH={};for(i=0;i!=NumProps;++i){if(blob.l!==Props[i][1]){var fail=true;if(i>0&&PIDSI)switch(PIDSI[Props[i-1][0]].t){case 2:if(blob.l+2===Props[i][1]){blob.l+=2;fail=false}break;case 80:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;case 4108:if(blob.l<=Props[i][1]){blob.l=Props[i][1];fail=false}break;}if(!PIDSI&&blob.l<=Props[i][1]){fail=false;blob.l=Props[i][1]}if(fail)throw new Error("Read Error: Expected address "+Props[i][1]+" at "+blob.l+" :"+i)}if(PIDSI){var piddsi=PIDSI[Props[i][0]];PropH[piddsi.n]=parse_TypedPropertyValue(blob,piddsi.t,{raw:true});if(piddsi.p==="version")PropH[piddsi.n]=String(PropH[piddsi.n]>>16)+"."+String(PropH[piddsi.n]&65535);if(piddsi.n=="CodePage")switch(PropH[piddsi.n]){case 0:PropH[piddsi.n]=1252;case 874:;case 932:;case 936:;case 949:;case 950:;case 1250:;case 1251:;case 1253:;case 1254:;case 1255:;case 1256:;case 1257:;case 1258:;case 1e4:;case 1200:;case 1201:;case 1252:;case 65e3:;case-536:;case 65001:;case-535:set_cp(CodePage=PropH[piddsi.n]);break;default:throw new Error("Unsupported CodePage: "+PropH[piddsi.n]);}}else{if(Props[i][0]===1){CodePage=PropH.CodePage=parse_TypedPropertyValue(blob,VT_I2);set_cp(CodePage);if(Dictionary!==-1){var oldpos=blob.l;blob.l=Props[Dictionary][1];DictObj=parse_dictionary(blob,CodePage);blob.l=oldpos}}else if(Props[i][0]===0){if(CodePage===0){Dictionary=i;blob.l=Props[i+1][1];continue}DictObj=parse_dictionary(blob,CodePage)}else{var name=DictObj[Props[i][0]];var val;switch(blob[blob.l]){case 65:blob.l+=4;val=parse_BLOB(blob);break;case 30:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 31:blob.l+=4;val=parse_VtString(blob,blob[blob.l-4]);break;case 3:blob.l+=4;val=blob.read_shift(4,"i");break;case 19:blob.l+=4;val=blob.read_shift(4);break;case 5:blob.l+=4;val=blob.read_shift(8,"f");break;case 11:blob.l+=4;val=parsebool(blob,4);break;case 64:blob.l+=4;val=parseDate(parse_FILETIME(blob));break;default:throw new Error("unparsed value: "+blob[blob.l]);}PropH[name]=val}}}blob.l=start_addr+size;return PropH}function parse_PropertySetStream(file,PIDSI){var blob=file.content;prep_blob(blob,0);var NumSets,FMTID0,FMTID1,Offset0,Offset1=0;blob.chk("feff","Byte Order: ");var vers=blob.read_shift(2);var SystemIdentifier=blob.read_shift(4);blob.chk(CFB.utils.consts.HEADER_CLSID,"CLSID: ");NumSets=blob.read_shift(4);if(NumSets!==1&&NumSets!==2)throw new Error("Unrecognized #Sets: "+NumSets);FMTID0=blob.read_shift(16);Offset0=blob.read_shift(4);if(NumSets===1&&Offset0!==blob.l)throw new Error("Length mismatch: "+Offset0+" !== "+blob.l);else if(NumSets===2){FMTID1=blob.read_shift(16);Offset1=blob.read_shift(4)}var PSet0=parse_PropertySet(blob,PIDSI);var rval={SystemIdentifier:SystemIdentifier};for(var y in PSet0)rval[y]=PSet0[y];rval.FMTID=FMTID0;if(NumSets===1)return rval;if(blob.l!==Offset1)throw new Error("Length mismatch 2: "+blob.l+" !== "+Offset1);var PSet1;try{PSet1=parse_PropertySet(blob,null)}catch(e){}for(y in PSet1)rval[y]=PSet1[y];rval.FMTID=[FMTID0,FMTID1];return rval}function parsenoop2(blob,length){blob.read_shift(length);return null}function parslurp(blob,length,cb){var arr=[],target=blob.l+length;while(blob.l=12?2:1);var width=1,encoding="sbcs-cont";var cp=current_codepage;if(opts&&opts.biff>=8)current_codepage=1200;if(!opts||opts.biff==8){var fHighByte=blob.read_shift(1);if(fHighByte){width=2;encoding="dbcs-cont"; +}}else if(opts.biff==12){width=2;encoding="wstr"}var o=cch?blob.read_shift(cch,encoding):"";current_codepage=cp;return o}function parse_XLUnicodeRichExtendedString(blob){var cp=current_codepage;current_codepage=1200;var cch=blob.read_shift(2),flags=blob.read_shift(1);var fHighByte=flags&1,fExtSt=flags&4,fRichSt=flags&8;var width=1+(flags&1);var cRun=0,cbExtRst;var z={};if(fRichSt)cRun=blob.read_shift(2);if(fExtSt)cbExtRst=blob.read_shift(4);var encoding=flags&1?"dbcs-cont":"sbcs-cont";var msg=cch===0?"":blob.read_shift(cch,encoding);if(fRichSt)blob.l+=4*cRun;if(fExtSt)blob.l+=cbExtRst;z.t=msg;if(!fRichSt){z.raw=""+z.t+"";z.r=z.t}current_codepage=cp;return z}function parse_XLUnicodeStringNoCch(blob,cch,opts){var retval;if(opts){if(opts.biff>=2&&opts.biff<=5)return blob.read_shift(cch,"sbcs-cont");if(opts.biff>=12)return blob.read_shift(cch,"dbcs-cont")}var fHighByte=blob.read_shift(1);if(fHighByte===0){retval=blob.read_shift(cch,"sbcs-cont")}else{retval=blob.read_shift(cch,"dbcs-cont")}return retval}function parse_XLUnicodeString(blob,length,opts){var cch=blob.read_shift(opts&&opts.biff==2?1:2);if(cch===0){blob.l++;return""}return parse_XLUnicodeStringNoCch(blob,cch,opts)}function parse_XLUnicodeString2(blob,length,opts){if(opts.biff>5)return parse_XLUnicodeString(blob,length,opts);var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}var parse_ControlInfo=parsenoop;var parse_URLMoniker=function(blob){var len=blob.read_shift(4),start=blob.l;var extra=false;if(len>24){blob.l+=len-24;if(blob.read_shift(16)==="795881f43b1d7f48af2c825dc4852763")extra=true;blob.l=start}var url=blob.read_shift((extra?len-24:len)>>1,"utf16le").replace(chr0,"");if(extra)blob.l+=24;return url};var parse_FileMoniker=function(blob,length){var cAnti=blob.read_shift(2);var ansiLength=blob.read_shift(4);var ansiPath=blob.read_shift(ansiLength,"cstr");var endServer=blob.read_shift(2);var versionNumber=blob.read_shift(2);var cbUnicodePathSize=blob.read_shift(4);if(cbUnicodePathSize===0)return ansiPath.replace(/\\/g,"/");var cbUnicodePathBytes=blob.read_shift(4);var usKeyValue=blob.read_shift(2);var unicodePath=blob.read_shift(cbUnicodePathBytes>>1,"utf16le").replace(chr0,"");return unicodePath};var parse_HyperlinkMoniker=function(blob,length){var clsid=blob.read_shift(16);length-=16;switch(clsid){case"e0c9ea79f9bace118c8200aa004ba90b":return parse_URLMoniker(blob,length);case"0303000000000000c000000000000046":return parse_FileMoniker(blob,length);default:throw new Error("Unsupported Moniker "+clsid);}};var parse_HyperlinkString=function(blob,length){var len=blob.read_shift(4);var o=blob.read_shift(len,"utf16le").replace(chr0,"");return o};var parse_Hyperlink=function(blob,length){var end=blob.l+length;var sVer=blob.read_shift(4);if(sVer!==2)throw new Error("Unrecognized streamVersion: "+sVer);var flags=blob.read_shift(2);blob.l+=2;var displayName,targetFrameName,moniker,oleMoniker,location,guid,fileTime;if(flags&16)displayName=parse_HyperlinkString(blob,end-blob.l);if(flags&128)targetFrameName=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===257)moniker=parse_HyperlinkString(blob,end-blob.l);if((flags&257)===1)oleMoniker=parse_HyperlinkMoniker(blob,end-blob.l);if(flags&8)location=parse_HyperlinkString(blob,end-blob.l);if(flags&32)guid=blob.read_shift(16);if(flags&64)fileTime=parse_FILETIME(blob,8);blob.l=end;var target=targetFrameName||moniker||oleMoniker;if(location)target+="#"+location;return{Target:target}};function 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]}function parse_LongRGB(blob,length){var x=parse_LongRGBA(blob,length);x[3]=0;return x}function parse_XLSCell(blob,length){var rw=blob.read_shift(2);var col=blob.read_shift(2);var ixfe=blob.read_shift(2);return{r:rw,c:col,ixfe:ixfe}}function parse_frtHeader(blob){var rt=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=8;return{type:rt,flags:flags}}function parse_OptXLUnicodeString(blob,length,opts){return length===0?"":parse_XLUnicodeString2(blob,length,opts)}var parse_HideObjEnum=parseuint16;function parse_XTI(blob,length){var iSupBook=blob.read_shift(2),itabFirst=blob.read_shift(2,"i"),itabLast=blob.read_shift(2,"i");return[iSupBook,itabFirst,itabLast]}function parse_RkRec(blob,length){var ixfe=blob.read_shift(2);var RK=parse_RkNumber(blob);return[ixfe,RK]}function parse_AddinUdf(blob,length,opts){blob.l+=4;length-=4;var l=blob.l+length;var udfName=parse_ShortXLUnicodeString(blob,length,opts);var cb=blob.read_shift(2);l-=blob.l;if(cb!==l)throw new Error("Malformed AddinUdf: padding = "+l+" != "+cb);blob.l+=cb;return udfName}function parse_Ref8U(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(2);var colLast=blob.read_shift(2);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}function parse_RefU(blob,length){var rwFirst=blob.read_shift(2);var rwLast=blob.read_shift(2);var colFirst=blob.read_shift(1);var colLast=blob.read_shift(1);return{s:{c:colFirst,r:rwFirst},e:{c:colLast,r:rwLast}}}var parse_Ref=parse_RefU;function parse_FtCmo(blob,length){blob.l+=4;var ot=blob.read_shift(2);var id=blob.read_shift(2);var flags=blob.read_shift(2);blob.l+=12;return[id,ot,flags]}function parse_FtNts(blob,length){var out={};blob.l+=4;blob.l+=16;out.fSharedNote=blob.read_shift(2);blob.l+=4;return out}function parse_FtCf(blob,length){var out={};blob.l+=4;blob.cf=blob.read_shift(2);return out}function parse_FtSkip(blob,length){blob.l+=2;blob.l+=blob.read_shift(2)}var FtTab={0:parse_FtSkip,4:parse_FtSkip,5:parse_FtSkip,6:parse_FtSkip,7:parse_FtCf,8:parse_FtSkip,9:parse_FtSkip,10:parse_FtSkip,11:parse_FtSkip,12:parse_FtSkip,13:parse_FtNts,14:parse_FtSkip,15:parse_FtSkip,16:parse_FtSkip,17:parse_FtSkip,18:parse_FtSkip,19:parse_FtSkip,20:parse_FtSkip,21:parse_FtCmo};function parse_FtArray(blob,length,ot){var tgt=blob.l+length;var fts=[];while(blob.l=2){o.dt=blob.read_shift(2);blob.l-=2}switch(o.BIFFVer){case 1536:;case 1280:;case 2:;case 7:break;default:if(length>6)throw new Error("Unexpected BIFF Ver "+o.BIFFVer);}blob.read_shift(length);return o}function parse_InterfaceHdr(blob,length){if(length===0)return 1200;var q;if((q=blob.read_shift(2))!==1200){}return 1200}function parse_WriteAccess(blob,length,opts){if(opts.enc){blob.l+=length;return""}var l=blob.l;var UserName=parse_XLUnicodeString(blob,0,opts);blob.read_shift(length+l-blob.l);return UserName}function parse_BoundSheet8(blob,length,opts){var pos=blob.read_shift(4);var hidden=blob.read_shift(1)&3;var dt=blob.read_shift(1);switch(dt){case 0:dt="Worksheet";break;case 1:dt="Macrosheet";break;case 2:dt="Chartsheet";break;case 6:dt="VBAModule";break;}var name=parse_ShortXLUnicodeString(blob,0,opts);if(name.length===0)name="Sheet1";return{pos:pos,hs:hidden,dt:dt,name:name}}function parse_SST(blob,length){var cnt=blob.read_shift(4);var ucnt=blob.read_shift(4);var strs=[];for(var i=0;i!=ucnt;++i){strs.push(parse_XLUnicodeRichExtendedString(blob))}strs.Count=cnt;strs.Unique=ucnt;return strs}function parse_ExtSST(blob,length){var extsst={};extsst.dsst=blob.read_shift(2);blob.l+=length-2;return extsst}function parse_Row(blob,length){var z={};z.r=blob.read_shift(2);z.c=blob.read_shift(2);z.cnt=blob.read_shift(2)-z.c;var miyRw=blob.read_shift(2);blob.l+=4;var flags=blob.read_shift(1);blob.l+=3;if(flags&32)z.hidden=true;if(flags&64)z.hpt=miyRw/20;return z}function parse_ForceFullCalculation(blob,length){var header=parse_frtHeader(blob);if(header.type!=2211)throw new Error("Invalid Future Record "+header.type);var fullcalc=blob.read_shift(4);return fullcalc!==0}var parse_CompressPictures=parsenoop2;function parse_RecalcId(blob,length){blob.read_shift(2);return blob.read_shift(4)}function parse_DefaultRowHeight(blob,length,opts){var f=0;if(!(opts&&opts.biff==2)){f=blob.read_shift(2)}var miyRw=blob.read_shift(2);if(opts&&opts.biff==2){f=1-(miyRw>>15);miyRw&=32767}var fl={Unsynced:f&1,DyZero:(f&2)>>1,ExAsc:(f&4)>>2,ExDsc:(f&8)>>3};return[fl,miyRw]}function parse_Window1(blob,length){var xWn=blob.read_shift(2),yWn=blob.read_shift(2),dxWn=blob.read_shift(2),dyWn=blob.read_shift(2);var flags=blob.read_shift(2),iTabCur=blob.read_shift(2),iTabFirst=blob.read_shift(2);var ctabSel=blob.read_shift(2),wTabRatio=blob.read_shift(2);return{Pos:[xWn,yWn],Dim:[dxWn,dyWn],Flags:flags,CurTab:iTabCur,FirstTab:iTabFirst,Selected:ctabSel,TabRatio:wTabRatio}}function parse_Font(blob,length,opts){var o={dyHeight:blob.read_shift(2),fl:blob.read_shift(2)};switch(opts&&opts.biff||8){case 2:break;case 3:;case 4:blob.l+=2;break;default:blob.l+=10;break;}o.name=parse_ShortXLUnicodeString(blob,0,opts);return o}function parse_LabelSst(blob,length){var cell=parse_XLSCell(blob);cell.isst=blob.read_shift(4);return cell}function parse_Label(blob,length,opts){var target=blob.l+length;var cell=parse_XLSCell(blob,6);if(opts.biff==2)blob.l++;var str=parse_XLUnicodeString(blob,target-blob.l,opts);cell.val=str;return cell}function parse_Format(blob,length,opts){var ifmt=blob.read_shift(2);var fmtstr=parse_XLUnicodeString2(blob,0,opts);return[ifmt,fmtstr]}var parse_BIFF2Format=parse_XLUnicodeString2;function parse_Dimensions(blob,length,opts){var end=blob.l+length;var w=opts.biff==8||!opts.biff?4:2;var r=blob.read_shift(w),R=blob.read_shift(w);var c=blob.read_shift(2),C=blob.read_shift(2);blob.l=end;return{s:{r:r,c:c},e:{r:R,c:C}}}function parse_RK(blob,length){var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrec=parse_RkRec(blob);return{r:rw,c:col,ixfe:rkrec[0],rknum:rkrec[1]}}function parse_MulRk(blob,length){var target=blob.l+length-2;var rw=blob.read_shift(2),col=blob.read_shift(2);var rkrecs=[];while(blob.l>26];if(!opts.cellStyles)return o;o.alc=a&7;o.fWrap=a>>3&1;o.alcV=a>>4&7;o.fJustLast=a>>7&1;o.trot=a>>8&255;o.cIndent=a>>16&15;o.fShrinkToFit=a>>20&1;o.iReadOrder=a>>22&2;o.fAtrNum=a>>26&1;o.fAtrFnt=a>>27&1;o.fAtrAlc=a>>28&1;o.fAtrBdr=a>>29&1;o.fAtrPat=a>>30&1;o.fAtrProt=a>>31&1;o.dgLeft=b&15;o.dgRight=b>>4&15;o.dgTop=b>>8&15;o.dgBottom=b>>12&15;o.icvLeft=b>>16&127;o.icvRight=b>>23&127;o.grbitDiag=b>>30&3;o.icvTop=c&127;o.icvBottom=c>>7&127;o.icvDiag=c>>14&127;o.dgDiag=c>>21&15;o.icvFore=d&127;o.icvBack=d>>7&127;o.fsxButton=d>>14&1;return o}function parse_CellXF(blob,length,opts){return parse_CellStyleXF(blob,length,0,opts)}function parse_StyleXF(blob,length,opts){return parse_CellStyleXF(blob,length,1,opts)}function parse_XF(blob,length,opts){var o={};o.ifnt=blob.read_shift(2);o.ifmt=blob.read_shift(2);o.flags=blob.read_shift(2);o.fStyle=o.flags>>2&1;length-=6;o.data=parse_CellStyleXF(blob,length,o.fStyle,opts);return o}function parse_Guts(blob,length){blob.l+=4;var out=[blob.read_shift(2),blob.read_shift(2)];if(out[0]!==0)out[0]--;if(out[1]!==0)out[1]--;if(out[0]>7||out[1]>7)throw new Error("Bad Gutters: "+out.join("|"));return out}function parse_BoolErr(blob,length,opts){var cell=parse_XLSCell(blob,6);if(opts.biff==2)++blob.l;var val=parse_Bes(blob,2);cell.val=val;cell.t=val===true||val===false?"b":"e";return cell}function parse_Number(blob,length){var cell=parse_XLSCell(blob,6);var xnum=parse_Xnum(blob,8);cell.val=xnum;return cell}var parse_XLHeaderFooter=parse_OptXLUnicodeString;function parse_SupBook(blob,length,opts){var end=blob.l+length;var ctab=blob.read_shift(2);var cch=blob.read_shift(2);var virtPath;if(cch>=1&&cch<=255)virtPath=parse_XLUnicodeStringNoCch(blob,cch);var rgst=blob.read_shift(end-blob.l);opts.sbcch=cch;return[cch,ctab,virtPath,rgst]}function parse_ExternName(blob,length,opts){var flags=blob.read_shift(2);var body;var o={fBuiltIn:flags&1,fWantAdvise:flags>>>1&1,fWantPict:flags>>>2&1,fOle:flags>>>3&1,fOleLink:flags>>>4&1,cf:flags>>>5&1023,fIcon:flags>>>15&1};if(opts.sbcch===14849)body=parse_AddinUdf(blob,length-2,opts);o.body=body||blob.read_shift(length-2);if(typeof body==="string")o.Name=body;return o}function parse_Lbl(blob,length,opts){var target=blob.l+length;var flags=blob.read_shift(2);var chKey=blob.read_shift(1);var cch=blob.read_shift(1);var cce=blob.read_shift(opts&&opts.biff==2?1:2);var itab=0;if(!opts||opts.biff>=5){blob.l+=2;itab=blob.read_shift(2);blob.l+=4}var name=parse_XLUnicodeStringNoCch(blob,cch,opts);var npflen=target-blob.l;if(opts&&opts.biff==2)--npflen;var rgce=target==blob.l||cce==0?[]:parse_NameParsedFormula(blob,npflen,opts,cce);return{chKey:chKey,Name:name,itab:itab,rgce:rgce}}function parse_ExternSheet(blob,length,opts){if(opts.biff<8)return parse_ShortXLUnicodeString(blob,length,opts);var o=[],target=blob.l+length,len=blob.read_shift(2);while(len--!==0)o.push(parse_XTI(blob,6));var oo=[];return o}function parse_NameCmt(blob,length,opts){if(opts.biff<8){blob.l+=length;return}var cchName=blob.read_shift(2);var cchComment=blob.read_shift(2);var name=parse_XLUnicodeStringNoCch(blob,cchName,opts);var comment=parse_XLUnicodeStringNoCch(blob,cchComment,opts);return[name,comment]}function parse_ShrFmla(blob,length,opts){var ref=parse_RefU(blob,6);blob.l++;var cUse=blob.read_shift(1);length-=8;return[parse_SharedParsedFormula(blob,length,opts),cUse]}function parse_Array(blob,length,opts){var ref=parse_Ref(blob,6);switch(opts.biff){case 2:blob.l++;length-=7;break;case 3:;case 4:blob.l+=2;length-=8;break;default:blob.l+=6;length-=12;}return[ref,parse_ArrayParsedFormula(blob,length,opts,ref)]}function parse_MTRSettings(blob,length){var fMTREnabled=blob.read_shift(4)!==0;var fUserSetThreadCount=blob.read_shift(4)!==0;var cUserThreadCount=blob.read_shift(4);return[fMTREnabled,fUserSetThreadCount,cUserThreadCount]}function parse_NoteSh(blob,length,opts){if(opts.biff<8)return;var row=blob.read_shift(2),col=blob.read_shift(2);var flags=blob.read_shift(2),idObj=blob.read_shift(2);var stAuthor=parse_XLUnicodeString2(blob,0,opts);if(opts.biff<8)blob.read_shift(1);return[{r:row,c:col},stAuthor,idObj,flags]}function parse_Note(blob,length,opts){return parse_NoteSh(blob,length,opts)}function parse_MergeCells(blob,length){var merges=[];var cmcs=blob.read_shift(2);while(cmcs--)merges.push(parse_Ref8U(blob,length));return merges}function parse_Obj(blob,length,opts){if(opts&&opts.biff<8)return parse_BIFF5Obj(blob,length,opts);var cmo=parse_FtCmo(blob,22);var fts=parse_FtArray(blob,length-22,cmo[1]);return{cmo:cmo,ft:fts}}var parse_BIFF5OT=[];parse_BIFF5OT[8]=function(blob,length,opts){var tgt=blob.l+length;blob.l+=10;var cf=blob.read_shift(2);blob.l+=4;var cbPictFmla=blob.read_shift(2);blob.l+=2;var grbit=blob.read_shift(2);blob.l+=4;var cchName=blob.read_shift(1);blob.l+=cchName;blob.l=tgt;return{fmt:cf}};function parse_BIFF5Obj(blob,length,opts){var cnt=blob.read_shift(4);var ot=blob.read_shift(2);var id=blob.read_shift(2);var grbit=blob.read_shift(2);var colL=blob.read_shift(2);var dxL=blob.read_shift(2);var rwT=blob.read_shift(2);var dyT=blob.read_shift(2);var colR=blob.read_shift(2);var dxR=blob.read_shift(2);var rwB=blob.read_shift(2);var dyB=blob.read_shift(2);var cbMacro=blob.read_shift(2);blob.l+=6;length-=36;var fts=[];fts.push((parse_BIFF5OT[ot]||parsenoop)(blob,length,opts));return{cmo:[id,ot,grbit],ft:fts}}function parse_TxO(blob,length,opts){var s=blob.l;var texts="";try{blob.l+=4;var ot=(opts.lastobj||{cmo:[0,0]}).cmo[1];var controlInfo;if([0,5,7,11,12,14].indexOf(ot)==-1)blob.l+=6;else controlInfo=parse_ControlInfo(blob,6,opts);var cchText=blob.read_shift(2);var cbRuns=blob.read_shift(2);var ifntEmpty=parse_FontIndex(blob,2);var len=blob.read_shift(2);blob.l+=len;for(var i=1;i=(hdr?cchText:2*cchText))break}if(texts.length!==cchText&&texts.length!==cchText*2){throw new Error("cchText: "+cchText+" != "+texts.length)}blob.l=s+length;return{t:texts}}catch(e){blob.l=s+length;return{t:texts}}}var parse_HLink=function(blob,length){var ref=parse_Ref8U(blob,8);blob.l+=16;var hlink=parse_Hyperlink(blob,length-24);return[ref,hlink]};var parse_HLinkTooltip=function(blob,length){var end=blob.l+length;blob.read_shift(2);var ref=parse_Ref8U(blob,8);var wzTooltip=blob.read_shift((length-10)/2,"dbcs-cont");wzTooltip=wzTooltip.replace(chr0,"");return[ref,wzTooltip]};function parse_Country(blob,length){var o=[],d;d=blob.read_shift(2);o[0]=CountryEnum[d]||d;d=blob.read_shift(2);o[1]=CountryEnum[d]||d;return o}function parse_ClrtClient(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_Palette(blob,length){var ccv=blob.read_shift(2);var o=[];while(ccv-- >0)o.push(parse_LongRGB(blob,8));return o}function parse_XFCRC(blob,length){blob.l+=2;var o={cxfs:0,crc:0};o.cxfs=blob.read_shift(2);o.crc=blob.read_shift(4);return o}function parse_ColInfo(blob,length,opts){if(!opts.cellStyles)return parsenoop(blob,length);var w=opts&&opts.biff>=12?4:2;var colFirst=blob.read_shift(w);var colLast=blob.read_shift(w);var coldx=blob.read_shift(w);var ixfe=blob.read_shift(w);var flags=blob.read_shift(2);if(w==2)blob.l+=2;return{s:colFirst,e:colLast,w:coldx,ixfe:ixfe,flags:flags}}function parse_Setup(blob,length,opts){var o={};blob.l+=16;o.header=parse_Xnum(blob,8);o.footer=parse_Xnum(blob,8);blob.l+=2;return o}function parse_ShtProps(blob,length,opts){var def={area:false};if(opts.biff!=5){blob.l+=length;return def}var d=blob.read_shift(1);blob.l+=3;if(d&16)def.area=true;return def}var parse_Style=parsenoop;var parse_StyleExt=parsenoop;var parse_Window2=parsenoop;var parse_Backup=parsebool;var parse_Blank=parse_XLSCell;var parse_BottomMargin=parse_Xnum;var parse_BuiltInFnGroupCount=parseuint16;var parse_CalcCount=parseuint16;var parse_CalcDelta=parse_Xnum;var parse_CalcIter=parsebool;var parse_CalcMode=parseuint16;var parse_CalcPrecision=parsebool;var parse_CalcRefMode=parsenoop2;var parse_CalcSaveRecalc=parsebool;var parse_CodePage=parseuint16;var parse_Compat12=parsebool;var parse_Date1904=parsebool;var parse_DefColWidth=parseuint16;var parse_DSF=parsenoop2;var parse_EntExU2=parsenoop2;var parse_EOF=parsenoop2;var parse_Excel9File=parsenoop2;var parse_FeatHdr=parsenoop2;var parse_FontX=parseuint16;var parse_Footer=parse_XLHeaderFooter;var parse_GridSet=parseuint16;var parse_HCenter=parsebool;var parse_Header=parse_XLHeaderFooter;var parse_HideObj=parse_HideObjEnum;var parse_InterfaceEnd=parsenoop2;var parse_LeftMargin=parse_Xnum;var parse_Mms=parsenoop2;var parse_ObjProtect=parsebool;var parse_Password=parseuint16;var parse_PrintGrid=parsebool;var parse_PrintRowCol=parsebool;var parse_PrintSize=parseuint16;var parse_Prot4Rev=parsebool;var parse_Prot4RevPass=parseuint16;var parse_Protect=parsebool;var parse_RefreshAll=parsebool;var parse_RightMargin=parse_Xnum;var parse_RRTabId=parseuint16a;var parse_ScenarioProtect=parsebool;var parse_Scl=parseuint16a;var parse_String=parse_XLUnicodeString;var parse_SxBool=parsebool;var parse_TopMargin=parse_Xnum;var parse_UsesELFs=parsebool;var parse_VCenter=parsebool;var parse_WinProtect=parsebool;var parse_WriteProtect=parsenoop;var parse_VerticalPageBreaks=parsenoop;var parse_HorizontalPageBreaks=parsenoop;var parse_Selection=parsenoop;var parse_Continue=parsenoop;var parse_Pane=parsenoop;var parse_Pls=parsenoop;var parse_DCon=parsenoop;var parse_DConRef=parsenoop;var parse_DConName=parsenoop;var parse_XCT=parsenoop;var parse_CRN=parsenoop;var parse_FileSharing=parsenoop;var parse_Uncalced=parsenoop;var parse_Template=parsenoop;var parse_Intl=parsenoop;var parse_WsBool=parsenoop;var parse_Sort=parsenoop;var parse_Sync=parsenoop;var parse_LPr=parsenoop;var parse_DxGCol=parsenoop;var parse_FnGroupName=parsenoop;var parse_FilterMode=parsenoop;var parse_AutoFilterInfo=parsenoop;var parse_AutoFilter=parsenoop;var parse_ScenMan=parsenoop;var parse_SCENARIO=parsenoop;var parse_SxView=parsenoop;var parse_Sxvd=parsenoop;var parse_SXVI=parsenoop;var parse_SxIvd=parsenoop;var parse_SXLI=parsenoop;var parse_SXPI=parsenoop;var parse_DocRoute=parsenoop;var parse_RecipName=parsenoop;var parse_SXDI=parsenoop;var parse_SXDB=parsenoop;var parse_SXFDB=parsenoop;var parse_SXDBB=parsenoop;var parse_SXNum=parsenoop;var parse_SxErr=parsenoop;var parse_SXInt=parsenoop;var parse_SXString=parsenoop;var parse_SXDtr=parsenoop;var parse_SxNil=parsenoop;var parse_SXTbl=parsenoop;var parse_SXTBRGIITM=parsenoop;var parse_SxTbpg=parsenoop;var parse_ObProj=parsenoop;var parse_SXStreamID=parsenoop;var parse_DBCell=parsenoop;var parse_SXRng=parsenoop;var parse_SxIsxoper=parsenoop;var parse_BookBool=parsenoop;var parse_DbOrParamQry=parsenoop;var parse_OleObjectSize=parsenoop;var parse_SXVS=parsenoop;var parse_BkHim=parsenoop;var parse_MsoDrawingGroup=parsenoop;var parse_MsoDrawing=parsenoop;var parse_MsoDrawingSelection=parsenoop;var parse_PhoneticInfo=parsenoop;var parse_SxRule=parsenoop;var parse_SXEx=parsenoop;var parse_SxFilt=parsenoop;var parse_SxDXF=parsenoop;var parse_SxItm=parsenoop;var parse_SxName=parsenoop;var parse_SxSelect=parsenoop;var parse_SXPair=parsenoop;var parse_SxFmla=parsenoop;var parse_SxFormat=parsenoop;var parse_SXVDEx=parsenoop;var parse_SXFormula=parsenoop;var parse_SXDBEx=parsenoop;var parse_RRDInsDel=parsenoop;var parse_RRDHead=parsenoop;var parse_RRDChgCell=parsenoop;var parse_RRDRenSheet=parsenoop;var parse_RRSort=parsenoop;var parse_RRDMove=parsenoop;var parse_RRFormat=parsenoop;var parse_RRAutoFmt=parsenoop;var parse_RRInsertSh=parsenoop;var parse_RRDMoveBegin=parsenoop;var parse_RRDMoveEnd=parsenoop;var parse_RRDInsDelBegin=parsenoop;var parse_RRDInsDelEnd=parsenoop;var parse_RRDConflict=parsenoop;var parse_RRDDefName=parsenoop;var parse_RRDRstEtxp=parsenoop;var parse_LRng=parsenoop;var parse_CUsr=parsenoop;var parse_CbUsr=parsenoop;var parse_UsrInfo=parsenoop;var parse_UsrExcl=parsenoop;var parse_FileLock=parsenoop;var parse_RRDInfo=parsenoop;var parse_BCUsrs=parsenoop;var parse_UsrChk=parsenoop;var parse_UserBView=parsenoop;var parse_UserSViewBegin=parsenoop;var parse_UserSViewEnd=parsenoop;var parse_RRDUserView=parsenoop;var parse_Qsi=parsenoop;var parse_CondFmt=parsenoop;var parse_CF=parsenoop;var parse_DVal=parsenoop;var parse_DConBin=parsenoop;var parse_Lel=parsenoop;var parse_XLSCodeName=parse_XLUnicodeString;var parse_SXFDBType=parsenoop;var parse_ObNoMacros=parsenoop;var parse_Dv=parsenoop;var parse_Index=parsenoop;var parse_Table=parsenoop;var parse_BigName=parsenoop;var parse_ContinueBigName=parsenoop;var parse_WebPub=parsenoop;var parse_QsiSXTag=parsenoop;var parse_DBQueryExt=parsenoop;var parse_ExtString=parsenoop;var parse_TxtQry=parsenoop;var parse_Qsir=parsenoop;var parse_Qsif=parsenoop;var parse_RRDTQSIF=parsenoop;var parse_OleDbConn=parsenoop;var parse_WOpt=parsenoop;var parse_SXViewEx=parsenoop;var parse_SXTH=parsenoop;var parse_SXPIEx=parsenoop;var parse_SXVDTEx=parsenoop;var parse_SXViewEx9=parsenoop;var parse_ContinueFrt=parsenoop;var parse_RealTimeData=parsenoop;var parse_ChartFrtInfo=parsenoop;var parse_FrtWrapper=parsenoop;var parse_StartBlock=parsenoop;var parse_EndBlock=parsenoop;var parse_StartObject=parsenoop;var parse_EndObject=parsenoop;var parse_CatLab=parsenoop;var parse_YMult=parsenoop;var parse_SXViewLink=parsenoop;var parse_PivotChartBits=parsenoop;var parse_FrtFontList=parsenoop;var parse_SheetExt=parsenoop;var parse_BookExt=parsenoop;var parse_SXAddl=parsenoop;var parse_CrErr=parsenoop;var parse_HFPicture=parsenoop;var parse_Feat=parsenoop;var parse_DataLabExt=parsenoop;var parse_DataLabExtContents=parsenoop;var parse_CellWatch=parsenoop;var parse_FeatHdr11=parsenoop;var parse_Feature11=parsenoop;var parse_DropDownObjIds=parsenoop;var parse_ContinueFrt11=parsenoop;var parse_DConn=parsenoop;var parse_List12=parsenoop;var parse_Feature12=parsenoop;var parse_CondFmt12=parsenoop;var parse_CF12=parsenoop;var parse_CFEx=parsenoop;var parse_AutoFilter12=parsenoop;var parse_ContinueFrt12=parsenoop;var parse_MDTInfo=parsenoop;var parse_MDXStr=parsenoop;var parse_MDXTuple=parsenoop;var parse_MDXSet=parsenoop;var parse_MDXProp=parsenoop;var parse_MDXKPI=parsenoop;var parse_MDB=parsenoop;var parse_PLV=parsenoop;var parse_DXF=parsenoop;var parse_TableStyles=parsenoop;var parse_TableStyle=parsenoop;var parse_TableStyleElement=parsenoop;var parse_NamePublish=parsenoop;var parse_SortData=parsenoop;var parse_GUIDTypeLib=parsenoop;var parse_FnGrp12=parsenoop;var parse_NameFnGrp12=parsenoop;var parse_HeaderFooter=parsenoop;var parse_CrtLayout12=parsenoop;var parse_CrtMlFrt=parsenoop;var parse_CrtMlFrtContinue=parsenoop;var parse_ShapePropsStream=parsenoop;var parse_TextPropsStream=parsenoop;var parse_RichTextStream=parsenoop;var parse_CrtLayout12A=parsenoop;var parse_Units=parsenoop;var parse_Chart=parsenoop;var parse_Series=parsenoop;var parse_DataFormat=parsenoop;var parse_LineFormat=parsenoop;var parse_MarkerFormat=parsenoop;var parse_AreaFormat=parsenoop;var parse_PieFormat=parsenoop;var parse_AttachedLabel=parsenoop;var parse_SeriesText=parsenoop;var parse_ChartFormat=parsenoop;var parse_Legend=parsenoop;var parse_SeriesList=parsenoop;var parse_Bar=parsenoop;var parse_Line=parsenoop;var parse_Pie=parsenoop;var parse_Area=parsenoop;var parse_Scatter=parsenoop;var parse_CrtLine=parsenoop;var parse_Axis=parsenoop;var parse_Tick=parsenoop;var parse_ValueRange=parsenoop;var parse_CatSerRange=parsenoop;var parse_AxisLine=parsenoop;var parse_CrtLink=parsenoop;var parse_DefaultText=parsenoop;var parse_Text=parsenoop;var parse_ObjectLink=parsenoop;var parse_Frame=parsenoop;var parse_Begin=parsenoop;var parse_End=parsenoop;var parse_PlotArea=parsenoop;var parse_Chart3d=parsenoop;var parse_PicF=parsenoop;var parse_DropBar=parsenoop;var parse_Radar=parsenoop;var parse_Surf=parsenoop;var parse_RadarArea=parsenoop;var parse_AxisParent=parsenoop;var parse_LegendException=parsenoop;var parse_SerToCrt=parsenoop;var parse_AxesUsed=parsenoop;var parse_SBaseRef=parsenoop;var parse_SerParent=parsenoop;var parse_SerAuxTrend=parsenoop;var parse_IFmtRecord=parsenoop;var parse_Pos=parsenoop;var parse_AlRuns=parsenoop;var parse_BRAI=parsenoop;var parse_SerAuxErrBar=parsenoop;var parse_SerFmt=parsenoop;var parse_Chart3DBarShape=parsenoop;var parse_Fbi=parsenoop;var parse_BopPop=parsenoop;var parse_AxcExt=parsenoop;var parse_Dat=parsenoop;var parse_PlotGrowth=parsenoop;var parse_SIIndex=parsenoop;var parse_GelFrame=parsenoop;var parse_BopPopCustom=parsenoop;var parse_Fbi2=parsenoop;function parse_ImData(blob,length,opts){var tgt=blob.l+length;var cf=blob.read_shift(2);var env=blob.read_shift(2);var lcb=blob.read_shift(4);var o={fmt:cf,env:env,len:lcb,data:blob.slice(blob.l,blob.l+lcb)};blob.l+=lcb;return o}function parse_BIFF5String(blob){var len=blob.read_shift(1);return blob.read_shift(len,"sbcs-cont")}function parse_BIFF2STR(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var str=parse_XLUnicodeString2(blob,length-7,opts);cell.t="str";cell.val=str;return cell}function parse_BIFF2NUM(blob,length,opts){var cell=parse_XLSCell(blob,6);++blob.l;var num=parse_Xnum(blob,8);cell.t="n";cell.val=num;return cell}function parse_BIFF2INT(blob,length){var cell=parse_XLSCell(blob,6);++blob.l;var num=blob.read_shift(2);cell.t="n";cell.val=num;return cell}function parse_BIFF2STRING(blob,length){var cch=blob.read_shift(1);if(cch===0){blob.l++;return""}return blob.read_shift(cch,"sbcs-cont")}function parse_BIFF2FONTXTRA(blob,length){blob.l+=6;blob.l+=2;blob.l+=1;blob.l+=3;blob.l+=1;blob.l+=length-13}function parse_RString(blob,length,opts){var end=blob.l+length;var cell=parse_XLSCell(blob,6);var cch=blob.read_shift(2);var str=parse_XLUnicodeStringNoCch(blob,cch,opts);blob.l=end;cell.t="str";cell.val=str;return cell}var DBF=function(){var dbf_codepage_map={1:437,2:850,3:1252,4:1e4,100:852,101:866,102:865,103:861,104:895,105:620,106:737,107:857,120:950,121:949,122:936,123:932,124:874,125:1255,126:1256,150:10007,151:10029,152:10006,200:1250,201:1251,202:1254,203:1253,0:20127,8:865,9:437,10:850,11:437,13:437,14:850,15:437,16:850,17:437,18:850,19:932,20:850,21:437,22:850,23:865,24:437,25:437,26:850,27:437,28:863,29:850,31:852,34:852,35:852,36:860,37:850,38:866,55:850,64:852,77:936,78:949,79:950,80:874,87:1252,88:1252,89:1252,255:16969};function dbf_to_aoa(buf,opts){var out=[];var d=new_raw_buf(1);switch(opts.type){case"base64":d=s2a(Base64.decode(buf));break;case"binary":d=s2a(buf);break;case"buffer":;case"array":d=buf;break;}prep_blob(d,0);var ft=d.read_shift(1);var memo=false;var vfp=false;switch(ft){case 2:;case 3:break;case 48:vfp=true;memo=true;break;case 49:vfp=true;break;case 131:memo=true;break;case 139:memo=true;break;case 245:memo=true;break;default:throw new Error("DBF Unsupported Version: "+ft.toString(16));}var filedate=new Date,nrow=0,fpos=0;if(ft==2)nrow=d.read_shift(2);filedate=new Date(d.read_shift(1)+1900,d.read_shift(1)-1,d.read_shift(1));if(ft!=2)nrow=d.read_shift(4);if(ft!=2)fpos=d.read_shift(2);var rlen=d.read_shift(2);var flags=0,current_cp=1252;if(ft!=2){d.l+=16;flags=d.read_shift(1);if(d[d.l]!==0)current_cp=dbf_codepage_map[d[d.l]];d.l+=1;d.l+=2}var fields=[],field={};var hend=fpos-10-(vfp?264:0);while(ft==2?d.l0){if(d[d.l]===42){d.l+=rlen;continue}++d.l;out[++R]=[];C=0;for(C=0;C!=fields.length;++C){var dd=d.slice(d.l,d.l+fields[C].len);d.l+=fields[C].len;prep_blob(dd,0);var s=cptable.utils.decode(current_cp,dd);switch(fields[C].type){case"C":out[R][C]=cptable.utils.decode(current_cp,dd);out[R][C]=out[R][C].trim();break;case"D":if(s.length===8)out[R][C]=new Date(+s.substr(0,4),+s.substr(4,2)-1,+s.substr(6,2));else out[R][C]=s;break;case"F":out[R][C]=parseFloat(s.trim());break;case"I":out[R][C]=dd.read_shift(4,"i");break;case"L":switch(s.toUpperCase()){case"Y":;case"T":out[R][C]=true;break;case"N":;case"F":out[R][C]=false;break;case" ":;case"?":out[R][C]=false;break;default:throw new Error("DBF Unrecognized L:|"+s+"|");}break;case"M":if(!memo)throw new Error("DBF Unexpected MEMO for type "+ft.toString(16));out[R][C]="##MEMO##"+dd.read_shift(4);break;case"N":out[R][C]=+s.replace(/\u0000/g,"").trim();break;case"T":var day=dd.read_shift(4),ms=dd.read_shift(4);throw new Error(day+" | "+ms);case"Y":out[R][C]=dd.read(4,"i")/1e4; +break;case"0":if(fields[C].name==="_NullFlags")break;default:throw new Error("DBF Unsupported data type "+fields[C].type);}}}if(ft!=2)if(d.l0)switch(RT){case"ID":break;case"E":break;case"B":break;case"O":break;case"P":if(record[1].charAt(0)=="P")formats.push(rstr.substr(3).replace(/;;/g,";"));break;case"C":for(rj=1;rj0){rowinfo[R].hpt=Mval;rowinfo[R].hpx=pt2px(Mval)}else if(Mval==0)rowinfo[R].hidden=true;break;default:if(opts&&opts.WTF)throw new Error("SYLK bad record "+rstr);}if(F_seen<1)next_cell_format=null;break;default:if(opts&&opts.WTF)throw new Error("SYLK bad record "+rstr);}}if(rowinfo.length>0)sht["!rows"]=rowinfo;if(colinfo.length>0)sht["!cols"]=colinfo;return[arr,sht]}function sylk_to_sheet(str,opts){var aoasht=sylk_to_aoa(str,opts);var aoa=aoasht[0],ws=aoasht[1];var o=aoa_to_sheet(aoa,opts);keys(ws).forEach(function(k){o[k]=ws[k]});return o}function sylk_to_workbook(str,opts){return sheet_to_workbook(sylk_to_sheet(str,opts),opts)}function write_ws_cell_sylk(cell,ws,R,C,opts){var o="C;Y"+(R+1)+";X"+(C+1)+";K";switch(cell.t){case"n":o+=cell.v||0;if(cell.f&&!cell.F)o+=";E"+a1_to_rc(cell.f,{r:R,c:C});break;case"b":o+=cell.v?"TRUE":"FALSE";break;case"e":o+=cell.w||cell.v;break;case"d":o+='"'+(cell.w||cell.v)+'"';break;case"s":o+='"'+cell.v.replace(/"/g,"")+'"';break;}return o}function write_ws_cols_sylk(out,cols){cols.forEach(function(col,i){var rec="F;W"+(i+1)+" "+(i+1)+" ";if(col.hidden)rec+="0";else{if(typeof col.width=="number")col.wpx=width2px(col.width);if(typeof col.wpx=="number")col.wch=px2char(col.wpx);if(typeof col.wch=="number")rec+=Math.round(col.wch)}if(rec.charAt(rec.length-1)!=" ")out.push(rec)})}function write_ws_rows_sylk(out,rows){rows.forEach(function(row,i){var rec="F;";if(row.hidden)rec+="M0;";else if(row.hpt)rec+="M"+20*row.hpt+";";else if(row.hpx)rec+="M"+20*px2pt(row.hpx)+";";if(rec.length>2)out.push(rec+"R"+(i+1))})}function sheet_to_sylk(ws,opts){var preamble=["ID;PWXL;N;E"],o=[];var r=decode_range(ws["!ref"]),cell;var dense=Array.isArray(ws);var RS="\r\n";preamble.push("P;PGeneral");preamble.push("F;P0;DG0G8;M255");if(ws["!cols"])write_ws_cols_sylk(preamble,ws["!cols"]);if(ws["!rows"])write_ws_rows_sylk(preamble,ws["!rows"]);preamble.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(" "));for(var R=r.s.r;R<=r.e.r;++R){for(var C=r.s.c;C<=r.e.c;++C){var coord=encode_cell({r:R,c:C});cell=dense?(ws[R]||[])[C]:ws[coord];if(!cell||cell.v==null&&(!cell.f||cell.F))continue;o.push(write_ws_cell_sylk(cell,ws,R,C,opts))}}return preamble.join(RS)+RS+o.join(RS)+RS+"E"+RS}return{to_workbook:sylk_to_workbook,to_sheet:sylk_to_sheet,from_sheet:sheet_to_sylk}}();var DIF=function(){function dif_to_aoa(d,opts){switch(opts.type){case"base64":return dif_to_aoa_str(Base64.decode(d),opts);case"binary":return dif_to_aoa_str(d,opts);case"buffer":return dif_to_aoa_str(d.toString("binary"),opts);case"array":return dif_to_aoa_str(cc2str(d),opts);}throw new Error("Unrecognized type "+opts.type)}function dif_to_aoa_str(str,opts){var records=str.split("\n"),R=-1,C=-1,ri=0,arr=[];for(;ri!==records.length;++ri){if(records[ri].trim()==="BOT"){arr[++R]=[];C=0;continue}if(R<0)continue;var metadata=records[ri].trim().split(",");var type=metadata[0],value=metadata[1];++ri;var data=records[ri].trim();switch(+type){case-1:if(data==="BOT"){arr[++R]=[];C=0;continue}else if(data!=="EOD")throw new Error("Unrecognized DIF special command "+data);break;case 0:if(data==="TRUE")arr[R][C]=true;else if(data==="FALSE")arr[R][C]=false;else if(+value==+value)arr[R][C]=+value;else if(!isNaN(fuzzydate(value).getDate()))arr[R][C]=parseDate(value);else arr[R][C]=value;++C;break;case 1:data=data.substr(1,data.length-2);arr[R][C++]=data!==""?data:null;break;}if(data==="EOD")break}return arr}function dif_to_sheet(str,opts){return aoa_to_sheet(dif_to_aoa(str,opts),opts)}function dif_to_workbook(str,opts){return sheet_to_workbook(dif_to_sheet(str,opts),opts)}var sheet_to_dif=function(){var push_field=function pf(o,topic,v,n,s){o.push(topic);o.push(v+","+n);o.push('"'+s.replace(/"/g,'""')+'"')};var push_value=function po(o,type,v,s){o.push(type+","+v);o.push(type==1?'"'+s.replace(/"/g,'""')+'"':s)};return function sheet_to_dif(ws,opts){var o=[];var r=decode_range(ws["!ref"]),cell;var dense=Array.isArray(ws);push_field(o,"TABLE",0,1,"sheetjs");push_field(o,"VECTORS",0,r.e.r-r.s.r+1,"");push_field(o,"TUPLES",0,r.e.c-r.s.c+1,"");push_field(o,"DATA",0,0,"");for(var R=r.s.r;R<=r.e.r;++R){push_value(o,-1,0,"BOT");for(var C=r.s.c;C<=r.e.c;++C){var coord=encode_cell({r:R,c:C});cell=dense?(ws[R]||[])[C]:ws[coord];if(!cell){push_value(o,1,0,"");continue}switch(cell.t){case"n":var val=DIF_XL?cell.w:cell.v;if(!val&&cell.v!=null)val=cell.v;if(val==null){if(DIF_XL&&cell.f&&!cell.F)push_value(o,1,0,"="+cell.f);else push_value(o,1,0,"")}else push_value(o,0,val,"V");break;case"b":push_value(o,0,cell.v?1:0,cell.v?"TRUE":"FALSE");break;case"s":push_value(o,1,0,!DIF_XL||isNaN(cell.v)?cell.v:'="'+cell.v+'"');break;case"d":if(!cell.w)cell.w=SSF.format(cell.z||SSF._table[14],datenum(parseDate(cell.v)));if(DIF_XL)push_value(o,0,cell.w,"V");else push_value(o,1,0,cell.w);break;default:push_value(o,1,0,"");}}}push_value(o,-1,0,"EOD");var RS="\r\n";var oo=o.join(RS);return oo}}();return{to_workbook:dif_to_workbook,to_sheet:dif_to_sheet,from_sheet:sheet_to_dif}}();var PRN=function(){function set_text_arr(data,arr,R,C){if(data==="TRUE")arr[R][C]=true;else if(data==="FALSE")arr[R][C]=false;else if(data===""){}else if(+data==+data)arr[R][C]=+data;else if(!isNaN(fuzzydate(data).getDate()))arr[R][C]=parseDate(data);else arr[R][C]=data}function prn_to_aoa_str(f,opts){var arr=[];if(!f||f.length===0)return arr;var lines=f.split(/[\r\n]/);var L=lines.length-1;while(L>=0&&lines[L].length===0)--L;var start=10,idx=0;var R=0;for(;R<=L;++R){idx=lines[R].indexOf(" ");if(idx==-1)idx=lines[R].length;else idx++;start=Math.max(start,idx)}for(R=0;R<=L;++R){arr[R]=[];var C=0;set_text_arr(lines[R].slice(0,start).trim(),arr,R,C);for(C=1;C<=(lines[R].length-start)/10+1;++C)set_text_arr(lines[R].slice(start+(C-1)*10,start+C*10).trim(),arr,R,C)}return arr}function dsv_to_sheet_str(str,opts){var o=opts||{};var sep="";if(DENSE!=null&&o.dense==null)o.dense=DENSE;var ws=o.dense?[]:{};var range={s:{c:0,r:0},e:{c:0,r:0}};if(str.substr(0,4)=="sep="&&str.charCodeAt(5)==10){sep=str.charAt(4);str=str.substr(6)}else if(str.substr(0,1024).indexOf("\t")==-1)sep=",";else sep="\t";var R=0,C=0,v=0;var start=0,end=0,sepcc=sep.charCodeAt(0),instr=false,cc=0;str=str.replace(/\r\n/gm,"\n");function finish_cell(){var s=str.slice(start,end);var cell={};if(s.charCodeAt(0)==61){cell.t="n";cell.f=s.substr(1)}else if(s=="TRUE"){cell.t="b";cell.v=true}else if(s=="FALSE"){cell.t="b";cell.v=false}else if(!isNaN(v=+s)){cell.t="n";cell.w=s;cell.v=v}else if(!isNaN(fuzzydate(s).getDate())){cell.z=o.dateNF||SSF._table[14];if(o.cellDates){cell.t="d";cell.v=parseDate(s)}else{cell.t="n";cell.v=datenum(parseDate(s))}cell.w=SSF.format(cell.z,cell.v instanceof Date?datenum(cell.v):cell.v)}else{cell.t="s";if(s.charAt(0)=='"'&&s.charAt(s.length-1)=='"')s=s.slice(1,-1).replace(/""/g,'"');cell.v=s}if(o.dense){if(!ws[R])ws[R]=[];ws[R][C]=cell}else ws[encode_cell({c:C,r:R})]=cell;start=end+1;if(range.e.c0)finish_cell();ws["!ref"]=encode_range(range);return ws}function prn_to_sheet_str(str,opts){if(str.substr(0,4)=="sep=")return dsv_to_sheet_str(str,opts);if(str.indexOf("\t")>=0||str.indexOf(",")>=0)return dsv_to_sheet_str(str,opts);return aoa_to_sheet(prn_to_aoa_str(str,opts),opts)}function prn_to_sheet(d,opts){var str="",bytes=firstbyte(d,opts);switch(opts.type){case"base64":str=Base64.decode(d);break;case"binary":str=d;break;case"buffer":str=d.toString("binary");break;case"array":str=cc2str(d);break;default:throw new Error("Unrecognized type "+opts.type);}if(bytes[0]==239&&bytes[1]==187&&bytes[2]==191)str=utf8read(str);return prn_to_sheet_str(str,opts)}function prn_to_workbook(str,opts){return sheet_to_workbook(prn_to_sheet(str,opts),opts)}function sheet_to_prn(ws,opts){var o=[];var r=decode_range(ws["!ref"]),cell;var dense=Array.isArray(ws);for(var R=r.s.r;R<=r.e.r;++R){var oo=[];for(var C=r.s.c;C<=r.e.c;++C){var coord=encode_cell({r:R,c:C});cell=dense?(ws[R]||[])[C]:ws[coord];if(!cell||cell.v==null){oo.push(" ");continue}var w=(cell.w||(format_cell(cell),cell.w)||"").substr(0,10);while(w.length<10)w+=" ";oo.push(w+(C==0?" ":""))}o.push(oo.join(""))}return o.join("\n")}return{to_workbook:prn_to_workbook,to_sheet:prn_to_sheet,from_sheet:sheet_to_prn}}();function read_wb_ID(d,opts){var o=opts||{},OLD_WTF=!!o.WTF;o.WTF=true;try{var out=SYLK.to_workbook(d,o);o.WTF=OLD_WTF;return out}catch(e){o.WTF=OLD_WTF;if(!e.message.match(/SYLK bad record ID/)&&OLD_WTF)throw e;return PRN.to_workbook(d,opts)}}var WK_=function(){function lotushopper(data,cb,opts){if(!data)return;prep_blob(data,data.l||0);var Enum=opts.Enum||WK1Enum;while(data.l=4096)o.qpro=true;break;case 6:refguess=val;break;case 15:if(!o.qpro)val[1].v=val[1].v.substr(1);case 13:;case 14:;case 16:;case 51:if(RT==14&&(val[2]&112)==112&&(val[2]&15)>1&&(val[2]&15)<15){val[1].z=o.dateNF||SSF._table[14];if(o.cellDates){val[1].t="d";val[1].v=numdate(val[1].v)}}if(o.dense){if(!s[val[0].r])s[val[0].r]=[];s[val[0].r][val[0].c]=val[1]}else s[encode_cell(val[0])]=val[1];break;}else switch(RT){case 22:val[1].v=val[1].v.substr(1);case 23:;case 24:;case 25:;case 37:;case 39:;case 40:if(val[3]>sidx){s["!ref"]=encode_range(refguess);sheets[n]=s;s=o.dense?[]:{};refguess={s:{r:0,c:0},e:{r:0,c:0}};sidx=val[3];n="Sheet"+(sidx+1);snames.push(n)}s[encode_cell(val[0])]=val[1];if(refguess.e.c>1;if(o[1].v&1){switch(v&7){case 1:v=(v>>3)*500;break;case 2:v=(v>>3)/20;break;case 4:v=(v>>3)/2e3;break;case 6:v=(v>>3)/16;break;case 7:v=(v>>3)/64;break;default:throw"unknown NUMBER_18 encoding "+(v&7);}}o[1].v=v;return o}function parse_NUMBER_17(blob,length){var o=parse_cell_3(blob,length);var v1=blob.read_shift(4);var v2=blob.read_shift(4);var e=blob.read_shift(2);if(e==65535){o[1].v=0;return o}var s=e&32768;e=(e&32767)-16446;o[1].v=(e>0?v2<>>-e)+(e>-32?v1<>>-(e+32));return o}function parse_FORMULA_19(blob,length){var o=parse_NUMBER_17(blob,14);blob.l+=length-14;return o}function parse_NUMBER_25(blob,length){var o=parse_cell_3(blob,length);var v1=blob.read_shift(4);o[1].v=v1>>6;return o}function parse_NUMBER_27(blob,length){var o=parse_cell_3(blob,length);var v1=blob.read_shift(8,"f");o[1].v=v1;return o}function parse_FORMULA_28(blob,length){var o=parse_NUMBER_27(blob,14);blob.l+=length-10;return o}var WK1Enum={0:{n:"BOF",f:parseuint16},1:{n:"EOF",f:parsenoop},2:{n:"CALCMODE",f:parsenoop},3:{n:"CALCORDER",f:parsenoop},4:{n:"SPLIT",f:parsenoop},5:{n:"SYNC",f:parsenoop},6:{n:"RANGE",f:parse_RANGE},7:{n:"WINDOW1",f:parsenoop},8:{n:"COLW1",f:parsenoop},9:{n:"WINTWO",f:parsenoop},10:{n:"COLW2",f:parsenoop},11:{n:"NAME",f:parsenoop},12:{n:"BLANK",f:parsenoop},13:{n:"INTEGER",f:parse_INTEGER},14:{n:"NUMBER",f:parse_NUMBER},15:{n:"LABEL",f:parse_LABEL},16:{n:"FORMULA",f:parse_FORMULA},24:{n:"TABLE",f:parsenoop},25:{n:"ORANGE",f:parsenoop},26:{n:"PRANGE",f:parsenoop},27:{n:"SRANGE",f:parsenoop},28:{n:"FRANGE",f:parsenoop},29:{n:"KRANGE1",f:parsenoop},32:{n:"HRANGE",f:parsenoop},35:{n:"KRANGE2",f:parsenoop},36:{n:"PROTEC",f:parsenoop},37:{n:"FOOTER",f:parsenoop},38:{n:"HEADER",f:parsenoop},39:{n:"SETUP",f:parsenoop},40:{n:"MARGINS",f:parsenoop},41:{n:"LABELFMT",f:parsenoop},42:{n:"TITLES",f:parsenoop},43:{n:"SHEETJS",f:parsenoop},45:{n:"GRAPH",f:parsenoop},46:{n:"NGRAPH",f:parsenoop},47:{n:"CALCCOUNT",f:parsenoop},48:{n:"UNFORMATTED",f:parsenoop},49:{n:"CURSORW12",f:parsenoop},50:{n:"WINDOW",f:parsenoop},51:{n:"STRING",f:parse_LABEL},55:{n:"PASSWORD",f:parsenoop},56:{n:"LOCKED",f:parsenoop},60:{n:"QUERY",f:parsenoop},61:{n:"QUERYNAME",f:parsenoop},62:{n:"PRINT",f:parsenoop},63:{n:"PRINTNAME",f:parsenoop},64:{n:"GRAPH2",f:parsenoop},65:{n:"GRAPHNAME",f:parsenoop},66:{n:"ZOOM",f:parsenoop},67:{n:"SYMSPLIT",f:parsenoop},68:{n:"NSROWS",f:parsenoop},69:{n:"NSCOLS",f:parsenoop},70:{n:"RULER",f:parsenoop},71:{n:"NNAME",f:parsenoop},72:{n:"ACOMM",f:parsenoop},73:{n:"AMACRO",f:parsenoop},74:{n:"PARSE",f:parsenoop},255:{n:"",f:parsenoop}};var WK3Enum={0:{n:"BOF",f:parsenoop},1:{n:"EOF",f:parsenoop},3:{n:"??",f:parsenoop},4:{n:"??",f:parsenoop},5:{n:"??",f:parsenoop},6:{n:"??",f:parsenoop},7:{n:"??",f:parsenoop},9:{n:"??",f:parsenoop},10:{n:"??",f:parsenoop},11:{n:"??",f:parsenoop},12:{n:"??",f:parsenoop},14:{n:"??",f:parsenoop},15:{n:"??",f:parsenoop},16:{n:"??",f:parsenoop},17:{n:"??",f:parsenoop},18:{n:"??",f:parsenoop},19:{n:"??",f:parsenoop},21:{n:"??",f:parsenoop},22:{n:"LABEL16",f:parse_LABEL_16},23:{n:"NUMBER17",f:parse_NUMBER_17},24:{n:"NUMBER18",f:parse_NUMBER_18},25:{n:"FORMULA19",f:parse_FORMULA_19},26:{n:"??",f:parsenoop},27:{n:"??",f:parsenoop},28:{n:"??",f:parsenoop},29:{n:"??",f:parsenoop},30:{n:"??",f:parsenoop},31:{n:"??",f:parsenoop},33:{n:"??",f:parsenoop},37:{n:"NUMBER25",f:parse_NUMBER_25},39:{n:"NUMBER27",f:parse_NUMBER_27},40:{n:"FORMULA28",f:parse_FORMULA_28},255:{n:"",f:parsenoop}};return{to_workbook:lotus_to_workbook}}();var CS2CP={0:1252,1:65001,2:65001,77:1e4,128:932,129:949,130:1361,134:936,136:950,161:1253,162:1254,163:1258,177:1255,178:1256,186:1257,204:1251,222:874,238:1250,255:1252,69:6969};var parse_rs=function parse_rs_factory(){var tregex=matchtag("t"),rpregex=matchtag("rPr"),rregex=/<(?:\w+:)?r>/g,rend=/<\/(?:\w+:)?r>/,nlregex=/\r\n/g;var parse_rpr=function parse_rpr(rpr,intro,outro){var font={},cp=65001,align="";var m=rpr.match(tagregex),i=0;if(m)for(;i!=m.length;++i){var y=parsexmltag(m[i]);switch(y[0].replace(/\w*:/g,"")){case"":;case"":font.shadow=1;break;case"":break;case"":;case"":font.outline=1;break;case"":break;case"":;case"":font.strike=1;break;case"":break;case"":;case"":font.u=1;break;case"":break;case"":;case"":font.b=1;break;case"":break;case"":;case"":font.i=1;break;case"":break;case"');if(font.b){intro.push("");outro.push("")}if(font.i){intro.push("");outro.push("")}if(font.strike){intro.push("");outro.push("")}if(align=="superscript")align="sup";else if(align=="subscript")align="sub";if(align!=""){intro.push("<"+align+">");outro.push("")}outro.push("");return cp};function parse_r(r){var terms=[[],"",[]];var t=r.match(tregex),cp=65001;if(!isval(t))return"";terms[1]=t[1];var rpr=r.match(rpregex);if(isval(rpr))cp=parse_rpr(rpr[1],terms[0],terms[2]);return terms[0].join("")+terms[1].replace(nlregex,"
")+terms[2].join("")}return function parse_rs(rs){return rs.replace(rregex,"").split(rend).map(parse_r).join("")}}();var sitregex=/<(?:\w+:)?t[^>]*>([^<]*)<\/(?:\w+:)?t>/g,sirregex=/<(?:\w+:)?r>/;var sirphregex=/<(?:\w+:)?rPh.*?>(.*?)<\/(?:\w+:)?rPh>/g;function parse_si(x,opts){var html=opts?opts.cellHTML:true;var z={};if(!x)return null;var y;if(x.match(/^\s*<(?:\w+:)?t[^>]*>/)){z.t=utf8read(unescapexml(x.substr(x.indexOf(">")+1).split(/<\/(?:\w+:)?t>/)[0]));z.r=utf8read(x);if(html)z.h=escapehtml(z.t)}else if(y=x.match(sirregex)){z.r=utf8read(x);z.t=utf8read(unescapexml((x.replace(sirphregex,"").match(sitregex)||[]).join("").replace(tagregex,"")));if(html)z.h=parse_rs(z.r)}return z}var sstr0=/<(?:\w+:)?sst([^>]*)>([\s\S]*)<\/(?:\w+:)?sst>/;var sstr1=/<(?:\w+:)?(?:si|sstItem)>/g;var sstr2=/<\/(?:\w+:)?(?:si|sstItem)>/;function parse_sst_xml(data,opts){var s=[],ss="";if(!data)return s;var sst=data.match(sstr0);if(isval(sst)){ss=sst[2].replace(sstr1,"").split(sstr2);for(var i=0;i!=ss.length;++i){var o=parse_si(ss[i].trim(),opts);if(o!=null)s[s.length]=o}sst=parsexmltag(sst[1]);s.Count=sst.count;s.Unique=sst.uniqueCount}return s}RELS.SST="http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings";var straywsregex=/^\s|\s$|[\t\n\r]/;function write_sst_xml(sst,opts){if(!opts.bookSST)return"";var o=[XML_HEADER];o[o.length]=writextag("sst",null,{xmlns:XMLNS.main[0],count:sst.Count,uniqueCount:sst.Unique});for(var i=0;i!=sst.length;++i){if(sst[i]==null)continue;var s=sst[i];var sitag="";if(s.r)sitag+=s.r;else{sitag+=""}sitag+="";o[o.length]=sitag}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginSst(data,length){return[data.read_shift(4),data.read_shift(4)]}function parse_sst_bin(data,opts){var s=[];var pass=false;recordhopper(data,function hopper_sst(val,R_n,RT){switch(RT){case 159:s.Count=val[0];s.Unique=val[1];break;case 19:s.push(val);break;case 160:return true;case 35:pass=true;break;case 36:pass=false;break;default:if(R_n.indexOf("Begin")>0){}else if(R_n.indexOf("End")>0){}if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return s}function write_BrtBeginSst(sst,o){if(!o)o=new_buf(8);o.write_shift(4,sst.Count);o.write_shift(4,sst.Unique);return o}var write_BrtSSTItem=write_RichStr;function write_sst_bin(sst,opts){var ba=buf_array();write_record(ba,"BrtBeginSst",write_BrtBeginSst(sst));for(var i=0;i=4)blob.l+=length-4;return o}function parse_DataSpaceVersionInfo(blob,length){var o={};o.id=blob.read_shift(0,"lpp4");o.R=parse_CRYPTOVersion(blob,4);o.U=parse_CRYPTOVersion(blob,4);o.W=parse_CRYPTOVersion(blob,4);return o}function parse_DataSpaceMapEntry(blob){var len=blob.read_shift(4);var end=blob.l+len-4;var o={};var cnt=blob.read_shift(4);var comps=[];while(cnt-- >0){var rc={};rc.t=blob.read_shift(4);rc.v=blob.read_shift(0,"lpp4");comps.push(rc)}o.name=blob.read_shift(0,"lpp4");o.comps=comps;return o}function parse_DataSpaceMap(blob,length){var o=[];blob.l+=4;var cnt=blob.read_shift(4);while(cnt-- >0)o.push(parse_DataSpaceMapEntry(blob));return o}function parse_DataSpaceDefinition(blob,length){var o=[];blob.l+=4;var cnt=blob.read_shift(4);while(cnt-- >0)o.push(blob.read_shift(0,"lpp4"));return o}function parse_TransformInfoHeader(blob,length){var o={};var len=blob.read_shift(4);var tgt=blob.l+len-4;blob.l+=4;o.id=blob.read_shift(0,"lpp4");o.name=blob.read_shift(0,"lpp4");o.R=parse_CRYPTOVersion(blob,4);o.U=parse_CRYPTOVersion(blob,4);o.W=parse_CRYPTOVersion(blob,4);return o}function parse_Primary(blob,length){var hdr=parse_TransformInfoHeader(blob);hdr.ename=blob.read_shift(0,"8lpp4");hdr.blksz=blob.read_shift(4);hdr.cmode=blob.read_shift(4);if(blob.read_shift(4)!=4)throw new Error("Bad !Primary record");return hdr}function parse_EncryptionHeader(blob,length){var tgt=blob.l+length;var o={};o.Flags=blob.read_shift(4)&63;blob.l+=4;o.AlgID=blob.read_shift(4);var valid=false;switch(o.AlgID){case 26126:;case 26127:;case 26128:valid=o.Flags==36;break;case 26625:valid=o.Flags==4;break;case 0:valid=o.Flags==16||o.Flags==4||o.Flags==36;break;default:throw"Unrecognized encryption algorithm: "+o.AlgID;}if(!valid)throw new Error("Encryption Flags/AlgID mismatch");o.AlgIDHash=blob.read_shift(4);o.KeySize=blob.read_shift(4);o.ProviderType=blob.read_shift(4);blob.l+=8;o.CSPName=blob.read_shift(tgt-blob.l>>1,"utf16le").slice(0,-1);blob.l=tgt;return o}function parse_EncryptionVerifier(blob,length){var o={};blob.l+=4;o.Salt=blob.slice(blob.l,blob.l+16);blob.l+=16;o.Verifier=blob.slice(blob.l,blob.l+16);blob.l+=16;var sz=blob.read_shift(4);o.VerifierHash=blob.slice(blob.l,blob.l+sz);blob.l+=sz;return o}function parse_EncryptionInfo(blob,length){var vers=parse_CRYPTOVersion(blob);switch(vers.Minor){case 2:return parse_EncInfoStd(blob,vers);case 3:return parse_EncInfoExt(blob,vers);case 4:return parse_EncInfoAgl(blob,vers);}throw new Error("ECMA-376 Encryped file unrecognized Version: "+vers.Minor)}function parse_EncInfoStd(blob,vers){var flags=blob.read_shift(4);if((flags&63)!=36)throw new Error("EncryptionInfo mismatch");var sz=blob.read_shift(4);var tgt=blob.l+sz;var hdr=parse_EncryptionHeader(blob,sz);var verifier=parse_EncryptionVerifier(blob,blob.length-blob.l);return{t:"Std",h:hdr,v:verifier}}function parse_EncInfoExt(blob,vers){throw new Error("File is password-protected: ECMA-376 Extensible")}function parse_EncInfoAgl(blob,vers){throw new Error("File is password-protected: ECMA-376 Agile")}function parse_RC4CryptoHeader(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_CRYPTOVersion(blob,4);length-=4;if(vers.Minor!=2)throw"unrecognized minor version code: "+vers.Minor;if(vers.Major>4||vers.Major<2)throw"unrecognized major version code: "+vers.Major;o.Flags=blob.read_shift(4);length-=4;var sz=blob.read_shift(4);length-=4;o.EncryptionHeader=parse_EncryptionHeader(blob,sz);length-=sz;o.EncryptionVerifier=parse_EncryptionVerifier(blob,length);return o}function parse_RC4Header(blob,length){var o={};var vers=o.EncryptionVersionInfo=parse_CRYPTOVersion(blob,4);length-=4;if(vers.Major!=1||vers.Minor!=1)throw"unrecognized version code "+vers.Major+" : "+vers.Minor;o.Salt=blob.read_shift(16);o.EncryptedVerifier=blob.read_shift(16);o.EncryptedVerifierHash=blob.read_shift(16);return o}function crypto_CreatePasswordVerifier_Method1(Password){var Verifier=0,PasswordArray;var PasswordDecoded=_JS2ANSI(Password);var len=PasswordDecoded.length+1,i,PasswordByte;var Intermediate1,Intermediate2,Intermediate3;PasswordArray=new_raw_buf(len);PasswordArray[0]=PasswordDecoded.length;for(i=1;i!=len;++i)PasswordArray[i]=PasswordDecoded[i-1];for(i=len-1;i>=0;--i){PasswordByte=PasswordArray[i];Intermediate1=(Verifier&16384)===0?0:1;Intermediate2=Verifier<<1&32767;Intermediate3=Intermediate1|Intermediate2;Verifier=Intermediate3^PasswordByte}return Verifier^52811}var crypto_CreateXorArray_Method1=function(){var PadArray=[187,255,255,186,255,255,185,128,0,190,15,0,191,15,0];var InitialCode=[57840,7439,52380,33984,4364,3600,61902,12606,6258,57657,54287,34041,10252,43370,20163];var XorMatrix=[44796,19929,39858,10053,20106,40212,10761,31585,63170,64933,60267,50935,40399,11199,17763,35526,1453,2906,5812,11624,23248,885,1770,3540,7080,14160,28320,56640,55369,41139,20807,41614,21821,43642,17621,28485,56970,44341,19019,38038,14605,29210,60195,50791,40175,10751,21502,43004,24537,18387,36774,3949,7898,15796,31592,63184,47201,24803,49606,37805,14203,28406,56812,17824,35648,1697,3394,6788,13576,27152,43601,17539,35078,557,1114,2228,4456,30388,60776,51953,34243,7079,14158,28316,14128,28256,56512,43425,17251,34502,7597,13105,26210,52420,35241,883,1766,3532,4129,8258,16516,33032,4657,9314,18628];var Ror=function(Byte){return(Byte/2|Byte*128)&255};var XorRor=function(byte1,byte2){return Ror(byte1^byte2)};var CreateXorKey_Method1=function(Password){var XorKey=InitialCode[Password.length-1];var CurrentElement=104;for(var i=Password.length-1;i>=0;--i){var Char=Password[i];for(var j=0;j!=7;++j){if(Char&64)XorKey^=XorMatrix[CurrentElement];Char*=2;--CurrentElement}}return XorKey};return function(password){var Password=_JS2ANSI(password);var XorKey=CreateXorKey_Method1(Password);var Index=Password.length;var ObfuscationArray=new_raw_buf(16);for(var i=0;i!=16;++i)ObfuscationArray[i]=0;var Temp,PasswordLastChar,PadIndex;if((Index&1)===1){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[0],Temp);--Index;Temp=XorKey&255;PasswordLastChar=Password[Password.length-1];ObfuscationArray[Index]=XorRor(PasswordLastChar,Temp)}while(Index>0){--Index;Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp)}Index=15;PadIndex=15-Password.length;while(PadIndex>0){Temp=XorKey>>8;ObfuscationArray[Index]=XorRor(PadArray[PadIndex],Temp);--Index;--PadIndex;Temp=XorKey&255;ObfuscationArray[Index]=XorRor(Password[Index],Temp);--Index;--PadIndex}return ObfuscationArray}}();var crypto_DecryptData_Method1=function(password,Data,XorArrayIndex,XorArray,O){if(!O)O=Data;if(!XorArray)XorArray=crypto_CreateXorArray_Method1(password);var Index,Value;for(Index=0;Index!=Data.length;++Index){Value=Data[Index];Value^=XorArray[XorArrayIndex];Value=(Value>>5|Value<<3)&255;O[Index]=Value;++XorArrayIndex}return[O,XorArrayIndex,XorArray]};var crypto_MakeXorDecryptor=function(password){var XorArrayIndex=0,XorArray=crypto_CreateXorArray_Method1(password);return function(Data){var O=crypto_DecryptData_Method1("",Data,XorArrayIndex,XorArray);XorArrayIndex=O[1];return O[0]}};function parse_XORObfuscation(blob,length,opts,out){var o={key:parseuint16(blob),verificationBytes:parseuint16(blob)};if(opts.password)o.verifier=crypto_CreatePasswordVerifier_Method1(opts.password);out.valid=o.verificationBytes===o.verifier;if(out.valid)out.insitu_decrypt=crypto_MakeXorDecryptor(opts.password);return o}function parse_FilePassHeader(blob,length,oo){var o=oo||{};o.Info=blob.read_shift(2);blob.l-=2;if(o.Info===1)o.Data=parse_RC4Header(blob,length);else o.Data=parse_RC4CryptoHeader(blob,length);return o}function parse_FilePass(blob,length,opts){var o={Type:blob.read_shift(2)};if(o.Type)parse_FilePassHeader(blob,length-2,o);else parse_XORObfuscation(blob,length-2,opts,o); +return o}function hex2RGB(h){var o=h.substr(h[0]==="#"?1:0,6);return[parseInt(o.substr(0,2),16),parseInt(o.substr(2,2),16),parseInt(o.substr(4,2),16)]}function rgb2Hex(rgb){for(var i=0,o=1;i!=3;++i)o=o*256+(rgb[i]>255?255:rgb[i]<0?0:rgb[i]);return o.toString(16).toUpperCase().substr(1)}function rgb2HSL(rgb){var R=rgb[0]/255,G=rgb[1]/255,B=rgb[2]/255;var M=Math.max(R,G,B),m=Math.min(R,G,B),C=M-m;if(C===0)return[0,0,R];var H6=0,S=0,L2=M+m;S=C/(L2>1?2-L2:L2);switch(M){case R:H6=((G-B)/C+6)%6;break;case G:H6=(B-R)/C+2;break;case B:H6=(R-G)/C+4;break;}return[H6/6,S,L2/2]}function hsl2RGB(hsl){var H=hsl[0],S=hsl[1],L=hsl[2];var C=S*2*(L<.5?L:1-L),m=L-C/2;var rgb=[m,m,m],h6=6*H;var X;if(S!==0)switch(h6|0){case 0:;case 6:X=C*h6;rgb[0]+=C;rgb[1]+=X;break;case 1:X=C*(2-h6);rgb[0]+=X;rgb[1]+=C;break;case 2:X=C*(h6-2);rgb[1]+=C;rgb[2]+=X;break;case 3:X=C*(4-h6);rgb[1]+=X;rgb[2]+=C;break;case 4:X=C*(h6-4);rgb[2]+=C;rgb[0]+=X;break;case 5:X=C*(6-h6);rgb[2]+=X;rgb[0]+=C;break;}for(var i=0;i!=3;++i)rgb[i]=Math.round(rgb[i]*255);return rgb}function rgb_tint(hex,tint){if(tint===0)return hex;var hsl=rgb2HSL(hex2RGB(hex));if(tint<0)hsl[2]=hsl[2]*(1+tint);else hsl[2]=1-(1-hsl[2])*(1-tint);return rgb2Hex(hsl2RGB(hsl))}var DEF_MDW=6,MAX_MDW=15,MIN_MDW=1,MDW=DEF_MDW;function width2px(width){return Math.floor((width+Math.round(128/MDW)/256)*MDW)}function px2char(px){return Math.floor((px-5)/MDW*100+.5)/100}function char2width(chr){return Math.round((chr*MDW+5)/MDW*256)/256}function px2char_(px){return((px-5)/MDW*100+.5)/100}function char2width_(chr){return(chr*MDW+5)/MDW*256/256}function cycle_width(collw){return char2width(px2char(width2px(collw)))}function find_mdw_colw(collw){var delta=Infinity,_MDW=MIN_MDW;for(MDW=MIN_MDW;MDW.5)guess--;if(Math.abs(guess)":;case"":break;case"":border={};if(y.diagonalUp){border.diagonalUp=y.diagonalUp}if(y.diagonalDown){border.diagonalDown=y.diagonalDown}styles.Borders.push(border);break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;case"":break;default:if(opts&&opts.WTF)throw new Error("unrecognized "+y[0]+" in borders");}})}function parse_fills(t,styles,themes,opts){styles.Fills=[];var fill={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":;case"":break;case"":break;case"":styles.Fills.push(fill);fill={};break;case"":break;case"":styles.Fills.push(fill);fill={};break;case"":if(y.patternType)fill.patternType=y.patternType;break;case"":;case"":break;case"":;case"":break;case"":;case"":break;case"":break;case"":break;case"":break;case"":break;default:if(opts&&opts.WTF)throw new Error("unrecognized "+y[0]+" in fills");}})}function parse_fonts(t,styles,themes,opts){styles.Fonts=[];var font={};t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":;case"":break;case"":break;case"":;case"":styles.Fonts.push(font);font={};break;case"":;case"":break;case"":font.bold=1;break;case"":font.italic=1;break;case"":font.underline=1;break;case"":font.strike=1;break;case"":font.outline=1;break;case"":font.shadow=1;break;case"":font.condense=1;break;case"":font.extend=1;break;case"":;case"":break;case"":;case"":break;case"":;case"":break;case"":;case"":break;case"":;case"":break;default:if(opts&&opts.WTF)throw new Error("unrecognized "+y[0]+" in fonts");}})}function parse_numFmts(t,styles,opts){styles.NumberFmt=[];var k=keys(SSF._table);for(var i=0;i":;case"":;case"":break;case"0)SSF.load(f,j)}break;case"":break;default:if(opts.WTF)throw new Error("unrecognized "+y[0]+" in numFmts");}}}function write_numFmts(NF,opts){var o=[""];[[5,8],[23,26],[41,44],[50,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!=null)o[o.length]=writextag("numFmt",null,{numFmtId:i,formatCode:escapexml(NF[i])})});if(o.length===1)return"";o[o.length]="";o[0]=writextag("numFmts",null,{count:o.length-2}).replace("/>",">");return o.join("")}function parse_cellXfs(t,styles,opts){styles.CellXf=[];var xf;t[0].match(tagregex).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":;case"":;case"":break;case"":break;case"":var alignment={};if(y.vertical)alignment.vertical=y.vertical;if(y.horizontal)alignment.horizontal=y.horizontal;if(y.textRotation!=null)alignment.textRotation=y.textRotation;if(y.indent)alignment.indent=y.indent;if(y.wrapText)alignment.wrapText=y.wrapText;xf.alignment=alignment;break;case"":break;case"":;case"":break;case"":break;case"";if(o.length===2)return"";o[0]=writextag("cellXfs",null,{count:o.length-2}).replace("/>",">");return o.join("")}var parse_sty_xml=function make_pstyx(){var numFmtRegex=/]*)>.*<\/numFmts>/;var cellXfRegex=/]*)>.*<\/cellXfs>/;var fillsRegex=/]*)>.*<\/fills>/;var fontsRegex=/]*)>.*<\/fonts>/;var bordersRegex=/]*)>.*<\/borders>/;return function parse_sty_xml(data,themes,opts){var styles={};if(!data)return styles;var t;if(t=data.match(numFmtRegex))parse_numFmts(t,styles,opts);if(t=data.match(fontsRegex))parse_fonts(t,styles,themes,opts);if(t=data.match(fillsRegex))parse_fills(t,styles,themes,opts);if(t=data.match(bordersRegex))parse_borders(t,styles,themes,opts);if(t=data.match(cellXfRegex))parse_cellXfs(t,styles,opts);return styles}}();var STYLES_XML_ROOT=writextag("styleSheet",null,{xmlns:XMLNS.main[0],"xmlns:vt":XMLNS.vt});RELS.STY="http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles";function write_sty_xml(wb,opts){var o=[XML_HEADER,STYLES_XML_ROOT],w;if(wb.SSF&&(w=write_numFmts(wb.SSF))!=null)o[o.length]=w;o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';if(w=write_cellXfs(opts.cellXfs))o[o.length]=w;o[o.length]='';o[o.length]='';o[o.length]='';if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtFmt(data,length){var ifmt=data.read_shift(2);var stFmtCode=parse_XLWideString(data,length-2);return[ifmt,stFmtCode]}function write_BrtFmt(i,f,o){if(!o)o=new_buf(6+4*f.length);o.write_shift(2,i);write_XLWideString(f,o);return o.length>o.l?o.slice(0,o.l):o}function parse_BrtFont(data,length,opts){var out={};out.sz=data.read_shift(2)/20;var grbit=parse_FontFlags(data,2,opts);if(grbit.fCondense)out.condense=1;if(grbit.fExtend)out.extend=1;if(grbit.fShadow)out.shadow=1;if(grbit.fOutline)out.outline=1;if(grbit.fStrikeout)out.strike=1;if(grbit.fItalic)out.italic=1;var bls=data.read_shift(2);if(bls===700)out.bold=1;switch(data.read_shift(2)){case 1:out.vertAlign="superscript";break;case 2:out.vertAlign="subscript";break;}var underline=data.read_shift(1);if(underline!=0)out.underline=underline;var family=data.read_shift(1);if(family>0)out.family=family;var bCharSet=data.read_shift(1);if(bCharSet>0)out.charset=bCharSet;data.l++;out.color=parse_BrtColor(data,8);switch(data.read_shift(1)){case 1:out.scheme="major";break;case 2:out.scheme="minor";break;}out.name=parse_XLWideString(data,length-21);return out}function write_BrtFont(font,o){if(!o)o=new_buf(25+4*32);o.write_shift(2,font.sz*20);write_FontFlags(font,o);o.write_shift(2,font.bold?700:400);var sss=0;if(font.vertAlign=="superscript")sss=1;else if(font.vertAlign=="subscript")sss=2;o.write_shift(2,sss);o.write_shift(1,font.underline||0);o.write_shift(1,font.family||0);o.write_shift(1,font.charset||0);o.write_shift(1,0);write_BrtColor(font.color,o);var scheme=0;if(font.scheme=="major")scheme=1;if(font.scheme=="minor")scheme=2;o.write_shift(1,scheme);write_XLWideString(font.name,o);return o.length>o.l?o.slice(0,o.l):o}var XLSBFillPTNames=["none","solid","mediumGray","darkGray","lightGray","darkHorizontal","darkVertical","darkDown","darkUp","darkGrid","darkTrellis","lightHorizontal","lightVertical","lightDown","lightUp","lightGrid","lightTrellis","gray125","gray0625"];var rev_XLSBFillPTNames=evert(XLSBFillPTNames);function write_BrtFill(fill,o){if(!o)o=new_buf(4*3+8*7+16*1);var fls=rev_XLSBFillPTNames[fill.patternType];if(fls==null)fls=40;o.write_shift(4,fls);var j=0;if(fls!=40){write_BrtColor({auto:1},o);write_BrtColor({auto:1},o);for(;j<12;++j)o.write_shift(4,0)}else{for(;j<4;++j)o.write_shift(4,0);for(;j<12;++j)o.write_shift(4,0)}return o.length>o.l?o.slice(0,o.l):o}function parse_BrtXF(data,length){var ixfeParent=data.read_shift(2);var ifmt=data.read_shift(2);parsenoop(data,length-4);return{ixfe:ixfeParent,ifmt:ifmt}}function write_BrtXF(data,ixfeP,o){if(!o)o=new_buf(16);o.write_shift(2,ixfeP||0);o.write_shift(2,data.numFmtId||0);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(1,0);return o}function write_Blxf(data,o){if(!o)o=new_buf(10);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(4,0);o.write_shift(4,0);return o}function write_BrtBorder(border,o){if(!o)o=new_buf(51);o.write_shift(1,0);write_Blxf(null,o);write_Blxf(null,o);write_Blxf(null,o);write_Blxf(null,o);write_Blxf(null,o);return o.length>o.l?o.slice(0,o.l):o}function write_BrtStyle(style,o){if(!o)o=new_buf(12+4*10);o.write_shift(4,style.xfId);o.write_shift(2,1);o.write_shift(1,+style.builtinId);o.write_shift(1,0);write_XLNullableWideString(style.name||"",o);return o.length>o.l?o.slice(0,o.l):o}function write_BrtBeginTableStyles(cnt,defTableStyle,defPivotStyle){var o=new_buf(4+256*2*4);o.write_shift(4,cnt);write_XLNullableWideString(defTableStyle,o);write_XLNullableWideString(defPivotStyle,o);return o.length>o.l?o.slice(0,o.l):o}function parse_sty_bin(data,themes,opts){var styles={};styles.NumberFmt=[];for(var y in SSF._table)styles.NumberFmt[y]=SSF._table[y];styles.CellXf=[];styles.Fonts=[];var state=[];var pass=false;recordhopper(data,function hopper_sty(val,R_n,RT){switch(RT){case 44:styles.NumberFmt[val[0]]=val[1];SSF.load(val[1],val[0]);break;case 43:styles.Fonts.push(val);if(val.color.theme!=null&&themes&&themes.themeElements&&themes.themeElements.clrScheme){val.color.rgb=rgb_tint(themes.themeElements.clrScheme[val.color.theme].rgb,val.color.tint||0)}break;case 1025:break;case 45:break;case 46:break;case 47:if(state[state.length-1]=="BrtBeginCellXFs"){styles.CellXf.push(val)}break;case 48:;case 507:;case 572:;case 475:break;case 1171:;case 2102:;case 1130:;case 512:;case 2095:break;case 35:pass=true;break;case 36:pass=false;break;case 37:state.push(R_n);break;case 38:state.pop();break;default:if((R_n||"").indexOf("Begin")>0)state.push(R_n);else if((R_n||"").indexOf("End")>0)state.pop();else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return styles}function write_FMTS_bin(ba,NF){if(!NF)return;var cnt=0;[[5,8],[23,26],[41,44],[57,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!=null)++cnt});if(cnt==0)return;write_record(ba,"BrtBeginFmts",write_UInt32LE(cnt));[[5,8],[23,26],[41,44],[57,392]].forEach(function(r){for(var i=r[0];i<=r[1];++i)if(NF[i]!=null)write_record(ba,"BrtFmt",write_BrtFmt(i,NF[i]))});write_record(ba,"BrtEndFmts")}function write_FONTS_bin(ba,data){var cnt=1;if(cnt==0)return;write_record(ba,"BrtBeginFonts",write_UInt32LE(cnt));write_record(ba,"BrtFont",write_BrtFont({sz:12,color:{theme:1},name:"Calibri",family:2,scheme:"minor"}));write_record(ba,"BrtEndFonts")}function write_FILLS_bin(ba,data){var cnt=2;if(cnt==0)return;write_record(ba,"BrtBeginFills",write_UInt32LE(cnt));write_record(ba,"BrtFill",write_BrtFill({patternType:"none"}));write_record(ba,"BrtFill",write_BrtFill({patternType:"gray125"}));write_record(ba,"BrtEndFills")}function write_BORDERS_bin(ba,data){var cnt=1;if(cnt==0)return;write_record(ba,"BrtBeginBorders",write_UInt32LE(cnt));write_record(ba,"BrtBorder",write_BrtBorder({}));write_record(ba,"BrtEndBorders")}function write_CELLSTYLEXFS_bin(ba,data){var cnt=1;write_record(ba,"BrtBeginCellStyleXFs",write_UInt32LE(cnt));write_record(ba,"BrtXF",write_BrtXF({numFmtId:0,fontId:0,fillId:0,borderId:0},65535));write_record(ba,"BrtEndCellStyleXFs")}function write_CELLXFS_bin(ba,data){write_record(ba,"BrtBeginCellXFs",write_UInt32LE(data.length));data.forEach(function(c){write_record(ba,"BrtXF",write_BrtXF(c,0))});write_record(ba,"BrtEndCellXFs")}function write_STYLES_bin(ba,data){var cnt=1;write_record(ba,"BrtBeginStyles",write_UInt32LE(1));write_record(ba,"BrtStyle",write_BrtStyle({xfId:0,builtinId:0,name:"Normal"}));write_record(ba,"BrtEndStyles")}function write_DXFS_bin(ba,data){var cnt=0;write_record(ba,"BrtBeginDXFs",write_UInt32LE(cnt));write_record(ba,"BrtEndDXFs")}function write_TABLESTYLES_bin(ba,data){var cnt=0;write_record(ba,"BrtBeginTableStyles",write_BrtBeginTableStyles(cnt,"TableStyleMedium9","PivotStyleMedium4"));write_record(ba,"BrtEndTableStyles")}function write_COLORPALETTE_bin(ba,data){return}function write_sty_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginStyleSheet");write_FMTS_bin(ba,wb.SSF);write_FONTS_bin(ba,wb);write_FILLS_bin(ba,wb);write_BORDERS_bin(ba,wb);write_CELLSTYLEXFS_bin(ba,wb);write_CELLXFS_bin(ba,opts.cellXfs);write_STYLES_bin(ba,wb);write_DXFS_bin(ba,wb);write_TABLESTYLES_bin(ba,wb);write_COLORPALETTE_bin(ba,wb);write_record(ba,"BrtEndStyleSheet");return ba.end()}RELS.THEME="http://schemas.openxmlformats.org/officeDocument/2006/relationships/theme";function parse_clrScheme(t,themes,opts){themes.themeElements.clrScheme=[];var color={};(t[0].match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":break;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":;case"":if(y[0][1]==="/"){themes.themeElements.clrScheme.push(color);color={}}else{color.name=y[0].substring(3,y[0].length-1)}break;default:if(opts&&opts.WTF)throw new Error("Unrecognized "+y[0]+" in clrScheme");}})}function parse_fontScheme(t,themes,opts){}function parse_fmtScheme(t,themes,opts){}var clrsregex=/]*)>[^\u2603]*<\/a:clrScheme>/;var fntsregex=/]*)>[^\u2603]*<\/a:fontScheme>/;var fmtsregex=/]*)>[^\u2603]*<\/a:fmtScheme>/;function parse_themeElements(data,themes,opts){themes.themeElements={};var t;[["clrScheme",clrsregex,parse_clrScheme],["fontScheme",fntsregex,parse_fontScheme],["fmtScheme",fmtsregex,parse_fmtScheme]].forEach(function(m){if(!(t=data.match(m[1])))throw new Error(m[0]+" not found in themeElements");m[2](t,themes,opts)})}var themeltregex=/]*)>[^\u2603]*<\/a:themeElements>/;function parse_theme_xml(data,opts){if(!data||data.length===0)return parse_theme_xml(write_theme());var t;var themes={};if(!(t=data.match(themeltregex)))throw new Error("themeElements not found in theme");parse_themeElements(t[0],themes,opts);return themes}function write_theme(Themes,opts){if(opts&&opts.themeXLSX)return opts.themeXLSX;var o=[XML_HEADER];o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]='';o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]='';o[o.length]="";o[o.length]="";o[o.length]="";o[o.length]="";return o.join("")}function parse_Theme(blob,length,opts){var dwThemeVersion=blob.read_shift(4);if(dwThemeVersion===124226)return;blob.l+=length-4}function parse_ColorTheme(blob,length){return blob.read_shift(4)}function parse_FullColorExt(blob,length){var o={};o.xclrType=blob.read_shift(2);o.nTintShade=blob.read_shift(2);switch(o.xclrType){case 0:blob.l+=4;break;case 1:o.xclrValue=parse_IcvXF(blob,4);break;case 2:o.xclrValue=parse_LongRGBA(blob,4);break;case 3:o.xclrValue=parse_ColorTheme(blob,4);break;case 4:blob.l+=4;break;}blob.l+=8;return o}function parse_IcvXF(blob,length){return parsenoop(blob,length)}function parse_XFExtGradient(blob,length){return parsenoop(blob,length)}function parse_ExtProp(blob,length){var extType=blob.read_shift(2);var cb=blob.read_shift(2);var o=[extType];switch(extType){case 4:;case 5:;case 7:;case 8:;case 9:;case 10:;case 11:;case 13:o[1]=parse_FullColorExt(blob,cb);break;case 6:o[1]=parse_XFExtGradient(blob,cb);break;case 14:;case 15:o[1]=blob.read_shift(cb===5?1:2);break;default:throw new Error("Unrecognized ExtProp type: "+extType+" "+cb); +;}return o}function parse_XFExt(blob,length){var end=blob.l+length;blob.l+=2;var ixfe=blob.read_shift(2);blob.l+=2;var cexts=blob.read_shift(2);var ext=[];while(cexts-- >0)ext.push(parse_ExtProp(blob,end-blob.l));return{ixfe:ixfe,ext:ext}}function update_xfext(xf,xfext){xfext.forEach(function(xfe){switch(xfe[0]){case 4:break;case 5:break;case 6:break;case 7:break;case 8:break;case 9:break;case 10:break;case 11:break;case 13:break;case 14:break;case 15:break;}})}function parse_cc_xml(data,opts){var d=[];if(!data)return d;var l=0,i=1;(data.match(tagregex)||[]).forEach(function(x){var y=parsexmltag(x);switch(y[0]){case"":;case"":break;case"0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return out}function write_cc_bin(data,opts){}RELS.IMG="http://schemas.openxmlformats.org/officeDocument/2006/relationships/image";RELS.DRAW="http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing";function parse_drawing(data,rels){if(!data)return"??";var id=(data.match(/]*r:id="([^"]*)"/)||["",""])[1];return rels["!id"][id].Target}var _shapeid=1024;function write_comments_vml(rId,comments){var csize=[21600,21600];var bbox=["m0,0l0",csize[1],csize[0],csize[1],csize[0],"0xe"].join(",");var o=[writextag("xml",null,{"xmlns:v":XLMLNS.v,"xmlns:o":XLMLNS.o,"xmlns:x":XLMLNS.x,"xmlns:mv":XLMLNS.mv}).replace(/\/>/,">"),writextag("o:shapelayout",writextag("o:idmap",null,{"v:ext":"edit",data:rId}),{"v:ext":"edit"}),writextag("v:shapetype",[writextag("v:stroke",null,{joinstyle:"miter"}),writextag("v:path",null,{gradientshapeok:"t","o:connecttype":"rect"})].join(""),{id:"_x0000_t202","o:spt":202,coordsize:csize.join(","),path:bbox})];while(_shapeid",writextag("v:fill",writextag("o:fill",null,{type:"gradientUnscaled","v:ext":"view"}),{color2:"#BEFF82",angle:"-180",type:"gradient"}),writextag("v:shadow",null,{on:"t",obscured:"t"}),writextag("v:path",null,{"o:connecttype":"none"}),'
','',"","",writetag("x:Anchor",[c.c,0,c.r,0,c.c+3,100,c.r+5,100].join(",")),writetag("x:AutoFill","False"),writetag("x:Row",String(c.r)),writetag("x:Column",String(c.c)),"","",""])});o.push("");return o.join("")}RELS.CMNT="http://schemas.openxmlformats.org/officeDocument/2006/relationships/comments";function parse_comments(zip,dirComments,sheets,sheetRels,opts){for(var i=0;i!=dirComments.length;++i){var canonicalpath=dirComments[i];var comments=parse_cmnt(getzipdata(zip,canonicalpath.replace(/^\//,""),true),canonicalpath,opts);if(!comments||!comments.length)continue;var sheetNames=keys(sheets);for(var j=0;j!=sheetNames.length;++j){var sheetName=sheetNames[j];var rels=sheetRels[sheetName];if(rels){var rel=rels[canonicalpath];if(rel)insertCommentsIntoSheet(sheetName,sheets[sheetName],comments)}}}}function insertCommentsIntoSheet(sheetName,sheet,comments){var dense=Array.isArray(sheet);var cell,r;comments.forEach(function(comment){if(dense){r=decode_cell(comment.ref);if(!sheet[r.r])sheet[r.r]=[];cell=sheet[r.r][r.c]}else cell=sheet[comment.ref];if(!cell){cell={};if(dense)sheet[r.r][r.c]=cell;else sheet[comment.ref]=cell;var range=safe_decode_range(sheet["!ref"]||"BDWGO1000001:A1");var thisCell=decode_cell(comment.ref);if(range.s.r>thisCell.r)range.s.r=thisCell.r;if(range.e.rthisCell.c)range.s.c=thisCell.c;if(range.e.c/))return[];var authors=[];var commentList=[];var authtag=data.match(/<(?:\w+:)?authors>([^\u2603]*)<\/(?:\w+:)?authors>/);if(authtag&&authtag[1])authtag[1].split(/<\/\w*:?author>/).forEach(function(x){if(x===""||x.trim()==="")return;var a=x.match(/<(?:\w+:)?author[^>]*>(.*)/);if(a)authors.push(a[1])});var cmnttag=data.match(/<(?:\w+:)?commentList>([^\u2603]*)<\/(?:\w+:)?commentList>/);if(cmnttag&&cmnttag[1])cmnttag[1].split(/<\/\w*:?comment>/).forEach(function(x,index){if(x===""||x.trim()==="")return;var cm=x.match(/<(?:\w+:)?comment[^>]*>/);if(!cm)return;var y=parsexmltag(cm[0]);var comment={author:y.authorId&&authors[y.authorId]?authors[y.authorId]:"sheetjsghost",ref:y.ref,guid:y.guid};var cell=decode_cell(y.ref);if(opts.sheetRows&&opts.sheetRows<=cell.r)return;var textMatch=x.match(/<(?:\w+:)?text>([^\u2603]*)<\/(?:\w+:)?text>/);var rt=!!textMatch&&!!textMatch[1]&&parse_si(textMatch[1])||{r:"",t:"",h:""};comment.r=rt.r;if(rt.r=="")rt.t=rt.h="";comment.t=rt.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");if(opts.cellHTML)comment.h=rt.h;commentList.push(comment)});return commentList}var CMNT_XML_ROOT=writextag("comments",null,{xmlns:XMLNS.main[0]});function write_comments_xml(data,opts){var o=[XML_HEADER,CMNT_XML_ROOT];var iauthor=[];o.push("");data.map(function(x){return x[1]}).forEach(function(comment){comment.map(function(x){return escapexml(x.a)}).forEach(function(a){if(iauthor.indexOf(a)>-1)return;iauthor.push(a);o.push(""+a+"")})});o.push("");o.push("");data.forEach(function(d){d[1].forEach(function(c){o.push('');o.push(writetag("t",c.t==null?"":c.t));o.push("")})});o.push("");if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBeginComment(data,length){var out={};out.iauthor=data.read_shift(4);var rfx=parse_UncheckedRfX(data,16);out.rfx=rfx.s;out.ref=encode_cell(rfx.s);data.l+=16;return out}function write_BrtBeginComment(data,o){if(o==null)o=new_buf(36);o.write_shift(4,data[1].iauthor);write_UncheckedRfX(data[0],o);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(4,0);return o}var parse_BrtCommentAuthor=parse_XLWideString;function parse_comments_bin(data,opts){var out=[];var authors=[];var c={};var pass=false;recordhopper(data,function hopper_cmnt(val,R_n,RT){switch(RT){case 632:authors.push(val);break;case 635:c=val;break;case 637:c.t=val.t;c.h=val.h;c.r=val.r;break;case 636:c.author=authors[c.iauthor];delete c.iauthor;if(opts.sheetRows&&opts.sheetRows<=c.rfx.r)break;if(!c.t)c.t="";delete c.rfx;out.push(c);break;case 35:pass=true;break;case 36:pass=false;break;case 37:break;case 38:break;default:if((R_n||"").indexOf("Begin")>0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}});return out}function write_comments_bin(data,opts){var ba=buf_array();var iauthor=[];write_record(ba,"BrtBeginComments");{write_record(ba,"BrtBeginCommentAuthors");data.forEach(function(comment){comment[1].forEach(function(c){if(iauthor.indexOf(c.a)>-1)return;iauthor.push(c.a.substr(0,54));write_record(ba,"BrtCommentAuthor",write_XLWideString(c.a.substr(0,54)))})});write_record(ba,"BrtEndCommentAuthors")}{write_record(ba,"BrtBeginCommentList");data.forEach(function(comment){comment[1].forEach(function(c){c.iauthor=iauthor.indexOf(c.a);var range={s:decode_cell(comment[0]),e:decode_cell(comment[0])};write_record(ba,"BrtBeginComment",write_BrtBeginComment([range,c]));if(c.t&&c.t.length>0)write_record(ba,"BrtCommentText",write_BrtCommentText(c));write_record(ba,"BrtEndComment");delete c.iauthor})});write_record(ba,"BrtEndCommentList")}write_record(ba,"BrtEndComments");return ba.end()}RELS.DS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/dialogsheet";RELS.MS="http://schemas.microsoft.com/office/2006/relationships/xlMacrosheet";function parse_ds_bin(){return{"!type":"dialog"}}function parse_ds_xml(){return{"!type":"dialog"}}function parse_ms_bin(){return{"!type":"macro"}}function parse_ms_xml(){return{"!type":"macro"}}var rc_to_a1=function(){var rcregex=/(^|[^A-Za-z])R(\[?)(-?\d+|)\]?C(\[?)(-?\d+|)\]?/g;var rcbase={r:0,c:0};function rcfunc($$,$1,$2,$3,$4,$5){var R=$3.length>0?parseInt($3,10)|0:0,C=$5.length>0?parseInt($5,10)|0:0;if(C<0&&$4.length===0)C=0;var cRel=false,rRel=false;if($4.length>0||$5.length==0)cRel=true;if(cRel)C+=rcbase.c;else--C;if($2.length>0||$3.length==0)rRel=true;if(rRel)R+=rcbase.r;else--R;return $1+(cRel?"":"$")+encode_col(C)+(rRel?"":"$")+encode_row(R)}return function rc_to_a1(fstr,base){rcbase=base;return fstr.replace(rcregex,rcfunc)}}();var crefregex=/(^|[^._A-Z0-9])([$]?)([A-Z]{1,2}|[A-W][A-Z]{2}|X[A-E][A-Z]|XF[A-D])([$]?)([1-9]\d{0,5}|10[0-3]\d{4}|104[0-7]\d{3}|1048[0-4]\d{2}|10485[0-6]\d|104857[0-6])(?![_.\(A-Za-z0-9])/g;var a1_to_rc=function(){return function a1_to_rc(fstr,base){return fstr.replace(crefregex,function($0,$1,$2,$3,$4,$5,off,str){var c=decode_col($3)-base.c;var r=decode_row($5)-base.r;return $1+"R"+(r==0?"":"["+r+"]")+"C"+(c==0?"":"["+c+"]")})}}();function shift_formula_str(f,delta){return f.replace(crefregex,function($0,$1,$2,$3,$4,$5,off,str){return $1+($2=="$"?$2+$3:encode_col(decode_col($3)+delta.c))+($4=="$"?$4+$5:encode_row(decode_row($5)+delta.r))})}function shift_formula_xlsx(f,range,cell){var r=decode_range(range),s=r.s,c=decode_cell(cell);var delta={r:c.r-s.r,c:c.c-s.c};return shift_formula_str(f,delta)}function parseread(l){return function(blob,length){blob.l+=l;return}}function parseread1(blob){blob.l+=1;return}function parse_ColRelU(blob,length){var c=blob.read_shift(length==1?1:2);return[c&16383,c>>14&1,c>>15&1]}function parse_RgceArea(blob,length,opts){var w=2;if(opts){if(opts.biff>=2&&opts.biff<=5)return parse_RgceArea_BIFF2(blob,length,opts);else if(opts.biff==12)w=4}var r=blob.read_shift(w),R=blob.read_shift(w);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceArea_BIFF2(blob){var r=parse_ColRelU(blob,2),R=parse_ColRelU(blob,2);var c=blob.read_shift(1);var C=blob.read_shift(1);return{s:{r:r[0],c:c,cRel:r[1],rRel:r[2]},e:{r:R[0],c:C,cRel:R[1],rRel:R[2]}}}function parse_RgceAreaRel(blob,length){var r=blob.read_shift(length==12?4:2),R=blob.read_shift(length==12?4:2);var c=parse_ColRelU(blob,2);var C=parse_ColRelU(blob,2);return{s:{r:r,c:c[0],cRel:c[1],rRel:c[2]},e:{r:R,c:C[0],cRel:C[1],rRel:C[2]}}}function parse_RgceLoc(blob,length,opts){if(opts&&opts.biff>=2&&opts.biff<=5)return parse_RgceLoc_BIFF2(blob,length,opts);var r=blob.read_shift(opts&&opts.biff==12?4:2);var c=parse_ColRelU(blob,2);return{r:r,c:c[0],cRel:c[1],rRel:c[2]}}function parse_RgceLoc_BIFF2(blob,length,opts){var r=parse_ColRelU(blob,2);var c=blob.read_shift(1);return{r:r[0],c:c,cRel:r[1],rRel:r[2]}}function parse_RgceLocRel(blob,length,opts){var biff=opts&&opts.biff?opts.biff:8;if(biff>=2&&biff<=5)return parse_RgceLocRel_BIFF2(blob,length,opts);var r=blob.read_shift(biff>=12?4:2);var cl=blob.read_shift(2);var cRel=(cl&32768)>>15,rRel=(cl&16384)>>14;cl&=16383;if(rRel==1)while(r>524287)r-=1048576;if(cRel==1)while(cl>8191)cl=cl-16384;return{r:r,c:cl,cRel:cRel,rRel:rRel}}function parse_RgceLocRel_BIFF2(blob,length){var rl=blob.read_shift(2);var c=blob.read_shift(1);var rRel=(rl&32768)>>15,cRel=(rl&16384)>>14;rl&=16383;if(rRel==1&&rl>=8192)rl=rl-16384;if(cRel==1&&c>=128)c=c-256;return{r:rl,c:c,cRel:cRel,rRel:rRel}}function parse_PtgArea(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceArea(blob,opts.biff>=2&&opts.biff<=5?6:8,opts);return[type,area]}function parse_PtgArea3d(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2,"i");var w=8;if(opts)switch(opts.biff){case 5:blob.l+=12;w=6;break;case 12:w=12;break;}var area=parse_RgceArea(blob,w,opts);return[type,ixti,area]}function parse_PtgAreaErr(blob,length,opts){var type=(blob[blob.l++]&96)>>5;blob.l+=opts&&opts.biff>8?12:8;return[type]}function parse_PtgAreaErr3d(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);var w=8;if(opts)switch(opts.biff){case 5:blob.l+=12;w=6;break;case 12:w=12;break;}blob.l+=w;return[type,ixti]}function parse_PtgAreaN(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var area=parse_RgceAreaRel(blob,opts&&opts.biff>8?12:8,opts);return[type,area]}function parse_PtgArray(blob,length,opts){var type=(blob[blob.l++]&96)>>5;blob.l+=opts.biff==2?6:opts.biff==12?14:7;return[type]}function parse_PtgAttrBaxcel(blob,length){var bitSemi=blob[blob.l+1]&1;var bitBaxcel=1;blob.l+=4;return[bitSemi,bitBaxcel]}function parse_PtgAttrChoose(blob,length,opts){blob.l+=2;var offset=blob.read_shift(opts&&opts.biff==2?1:2);var o=[];for(var i=0;i<=offset;++i)o.push(blob.read_shift(opts&&opts.biff==2?1:2));return o}function parse_PtgAttrGoto(blob,length,opts){var bitGoto=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitGoto,blob.read_shift(opts&&opts.biff==2?1:2)]}function parse_PtgAttrIf(blob,length,opts){var bitIf=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitIf,blob.read_shift(opts&&opts.biff==2?1:2)]}function parse_PtgAttrIfError(blob,length){var bitIf=blob[blob.l+1]&255?1:0;blob.l+=2;return[bitIf,blob.read_shift(2)]}function parse_PtgAttrSemi(blob,length,opts){var bitSemi=blob[blob.l+1]&255?1:0;blob.l+=opts&&opts.biff==2?3:4;return[bitSemi]}function parse_PtgAttrSpaceType(blob,length){var type=blob.read_shift(1),cch=blob.read_shift(1);return[type,cch]}function parse_PtgAttrSpace(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgAttrSpaceSemi(blob,length){blob.read_shift(2);return parse_PtgAttrSpaceType(blob,2)}function parse_PtgRef(blob,length,opts){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLoc(blob,0,opts);return[type,loc]}function parse_PtgRefN(blob,length,opts){var type=(blob[blob.l]&96)>>5;blob.l+=1;var loc=parse_RgceLocRel(blob,0,opts);return[type,loc]}function parse_PtgRef3d(blob,length,opts){var type=(blob[blob.l]&96)>>5;blob.l+=1;var ixti=blob.read_shift(2);var loc=parse_RgceLoc(blob,0,opts);return[type,ixti,loc]}function parse_PtgFunc(blob,length,opts){var ptg=blob[blob.l]&31;var type=(blob[blob.l]&96)>>5;blob.l+=1;var iftab=blob.read_shift(opts&&opts.biff<=3?1:2);return[FtabArgc[iftab],Ftab[iftab],type]}function parse_PtgFuncVar(blob,length,opts){blob.l++;var cparams=blob.read_shift(1),tab=opts&&opts.biff<=3?[0,blob.read_shift(1)]:parsetab(blob);return[cparams,(tab[0]===0?Ftab:Cetab)[tab[1]]]}function parsetab(blob,length){return[blob[blob.l+1]>>7,blob.read_shift(2)&32767]}function parse_PtgAttrSum(blob,length,opts){blob.l+=opts&&opts.biff==2?3:4;return}var parse_PtgConcat=parseread1;function parse_PtgExp(blob,length,opts){blob.l++;if(opts&&opts.biff==12)return[blob.read_shift(4,"i"),0];var row=blob.read_shift(2);var col=blob.read_shift(opts&&opts.biff==2?1:2);return[row,col]}function parse_PtgErr(blob,length){blob.l++;return BErr[blob.read_shift(1)]}function parse_PtgInt(blob,length){blob.l++;return blob.read_shift(2)}function parse_PtgBool(blob,length){blob.l++;return blob.read_shift(1)!==0}function parse_PtgNum(blob,length){blob.l++;return parse_Xnum(blob,8)}function parse_PtgStr(blob,length,opts){blob.l++;return parse_ShortXLUnicodeString(blob,length-1,opts)}function parse_SerAr(blob,biff){var val=[blob.read_shift(1)];if(biff==12)switch(val[0]){case 2:val[0]=4;break;case 4:val[0]=16;break;case 0:val[0]=1;break;case 1:val[0]=2;break;}switch(val[0]){case 4:val[1]=parsebool(blob,1)?"TRUE":"FALSE";blob.l+=7;break;case 16:val[1]=BErr[blob[blob.l]];blob.l+=8;break;case 0:blob.l+=8;break;case 1:val[1]=parse_Xnum(blob,8);break;case 2:val[1]=parse_XLUnicodeString2(blob,0,{biff:biff>0&&biff<8?2:biff});break;}return val}function parse_PtgExtraMem(blob,cce){var count=blob.read_shift(2);var out=[];for(var i=0;i!=count;++i)out.push(parse_Ref8U(blob,8));return out}function parse_PtgExtraArray(blob,length,opts){var rows=0,cols=0;if(opts.biff==12){rows=blob.read_shift(4);cols=blob.read_shift(4)}else{cols=1+blob.read_shift(1);rows=1+blob.read_shift(2)}if(opts.biff>=2&&opts.biff<8){--rows;if(--cols==0)cols=256}for(var i=0,o=[];i!=rows&&(o[i]=[]);++i)for(var j=0;j!=cols;++j)o[i][j]=parse_SerAr(blob,opts.biff);return o}function parse_PtgName(blob,length,opts){var type=blob.read_shift(1)>>>5&3;var w=!opts||opts.biff>=8?4:2;var nameindex=blob.read_shift(w);switch(opts.biff){case 2:blob.l+=5;break;case 3:;case 4:blob.l+=8;break;case 5:blob.l+=12;break;}return[type,0,nameindex]}function parse_PtgNameX(blob,length,opts){if(opts.biff==5)return parse_PtgNameX_BIFF5(blob,length,opts);var type=blob.read_shift(1)>>>5&3;var ixti=blob.read_shift(2);var nameindex=blob.read_shift(4);return[type,ixti,nameindex]}function parse_PtgNameX_BIFF5(blob,length,opts){var type=blob.read_shift(1)>>>5&3;var ixti=blob.read_shift(2,"i");blob.l+=8;var nameindex=blob.read_shift(2);blob.l+=12;return[type,ixti,nameindex]}function parse_PtgMemArea(blob,length,opts){var type=blob.read_shift(1)>>>5&3;blob.l+=opts&&opts.biff==2?3:4;var cce=blob.read_shift(opts&&opts.biff==2?1:2);return[type,cce]}function parse_PtgMemFunc(blob,length,opts){var type=blob.read_shift(1)>>>5&3;var cce=blob.read_shift(opts&&opts.biff==2?1:2);return[type,cce]}function parse_PtgRefErr(blob,length,opts){var type=blob.read_shift(1)>>>5&3;blob.l+=4;if(opts.biff==12)blob.l+=2;return[type]}function parse_PtgRefErr3d(blob,length,opts){var type=(blob[blob.l++]&96)>>5;var ixti=blob.read_shift(2);var w=4;if(opts)switch(opts.biff){case 5:throw new Error("PtgRefErr3d -- 5");case 12:w=6;break;}blob.l+=w;return[type,ixti]}var parse_PtgAdd=parseread1;var parse_PtgDiv=parseread1;var parse_PtgEq=parseread1;var parse_PtgGe=parseread1;var parse_PtgGt=parseread1;var parse_PtgIsect=parseread1;var parse_PtgLe=parseread1;var parse_PtgLt=parseread1;var parse_PtgMissArg=parseread1;var parse_PtgMul=parseread1;var parse_PtgNe=parseread1;var parse_PtgParen=parseread1;var parse_PtgPercent=parseread1;var parse_PtgPower=parseread1;var parse_PtgRange=parseread1;var parse_PtgSub=parseread1;var parse_PtgUminus=parseread1;var parse_PtgUnion=parseread1;var parse_PtgUplus=parseread1;var parse_PtgMemErr=parsenoop;var parse_PtgMemNoMem=parsenoop;var parse_PtgTbl=parsenoop;var PtgTypes={1:{n:"PtgExp",f:parse_PtgExp},2:{n:"PtgTbl",f:parse_PtgTbl},3:{n:"PtgAdd",f:parse_PtgAdd},4:{n:"PtgSub",f:parse_PtgSub},5:{n:"PtgMul",f:parse_PtgMul},6:{n:"PtgDiv",f:parse_PtgDiv},7:{n:"PtgPower",f:parse_PtgPower},8:{n:"PtgConcat",f:parse_PtgConcat},9:{n:"PtgLt",f:parse_PtgLt},10:{n:"PtgLe",f:parse_PtgLe},11:{n:"PtgEq",f:parse_PtgEq},12:{n:"PtgGe",f:parse_PtgGe},13:{n:"PtgGt",f:parse_PtgGt},14:{n:"PtgNe",f:parse_PtgNe},15:{n:"PtgIsect",f:parse_PtgIsect},16:{n:"PtgUnion",f:parse_PtgUnion},17:{n:"PtgRange",f:parse_PtgRange},18:{n:"PtgUplus",f:parse_PtgUplus},19:{n:"PtgUminus",f:parse_PtgUminus},20:{n:"PtgPercent",f:parse_PtgPercent},21:{n:"PtgParen",f:parse_PtgParen},22:{n:"PtgMissArg",f:parse_PtgMissArg},23:{n:"PtgStr",f:parse_PtgStr},28:{n:"PtgErr",f:parse_PtgErr},29:{n:"PtgBool",f:parse_PtgBool},30:{n:"PtgInt",f:parse_PtgInt},31:{n:"PtgNum",f:parse_PtgNum},32:{n:"PtgArray",f:parse_PtgArray},33:{n:"PtgFunc",f:parse_PtgFunc},34:{n:"PtgFuncVar",f:parse_PtgFuncVar},35:{n:"PtgName",f:parse_PtgName},36:{n:"PtgRef",f:parse_PtgRef},37:{n:"PtgArea",f:parse_PtgArea},38:{n:"PtgMemArea",f:parse_PtgMemArea},39:{n:"PtgMemErr",f:parse_PtgMemErr},40:{n:"PtgMemNoMem",f:parse_PtgMemNoMem},41:{n:"PtgMemFunc",f:parse_PtgMemFunc},42:{n:"PtgRefErr",f:parse_PtgRefErr},43:{n:"PtgAreaErr",f:parse_PtgAreaErr},44:{n:"PtgRefN",f:parse_PtgRefN},45:{n:"PtgAreaN",f:parse_PtgAreaN},57:{n:"PtgNameX",f:parse_PtgNameX},58:{n:"PtgRef3d",f:parse_PtgRef3d},59:{n:"PtgArea3d",f:parse_PtgArea3d},60:{n:"PtgRefErr3d",f:parse_PtgRefErr3d},61:{n:"PtgAreaErr3d",f:parse_PtgAreaErr3d},255:{}};var PtgDupes={64:32,96:32,65:33,97:33,66:34,98:34,67:35,99:35,68:36,100:36,69:37,101:37,70:38,102:38,71:39,103:39,72:40,104:40,73:41,105:41,74:42,106:42,75:43,107:43,76:44,108:44,77:45,109:45,89:57,121:57,90:58,122:58,91:59,123:59,92:60,124:60,93:61,125:61};(function(){for(var y in PtgDupes)PtgTypes[y]=PtgTypes[PtgDupes[y]]})();var Ptg18={};var Ptg19={1:{n:"PtgAttrSemi",f:parse_PtgAttrSemi},2:{n:"PtgAttrIf",f:parse_PtgAttrIf},4:{n:"PtgAttrChoose",f:parse_PtgAttrChoose},8:{n:"PtgAttrGoto",f:parse_PtgAttrGoto},16:{n:"PtgAttrSum",f:parse_PtgAttrSum},32:{n:"PtgAttrBaxcel",f:parse_PtgAttrBaxcel},64:{n:"PtgAttrSpace",f:parse_PtgAttrSpace},65:{n:"PtgAttrSpaceSemi",f:parse_PtgAttrSpaceSemi},128:{n:"PtgAttrIfError",f:parse_PtgAttrIfError},255:{}};function parse_Formula(blob,length,opts){var end=blob.l+length;var cell=parse_XLSCell(blob,6);if(opts.biff==2)++blob.l;var val=parse_FormulaValue(blob,8);var flags=blob.read_shift(1);if(opts.biff!=2){blob.read_shift(1);if(opts.biff>=5){var chn=blob.read_shift(4)}}var cbf=parse_XLSCellParsedFormula(blob,end-blob.l,opts);return{cell:cell,val:val[0],formula:cbf,shared:flags>>3&1,tt:val[1]}}function parse_FormulaValue(blob){var b;if(__readUInt16LE(blob,blob.l+6)!==65535)return[parse_Xnum(blob),"n"];switch(blob[blob.l]){case 0:blob.l+=8;return["String","s"];case 1:b=blob[blob.l+2]===1;blob.l+=8;return[b,"b"];case 2:b=blob[blob.l+2];blob.l+=8;return[b,"e"];case 3:blob.l+=8;return["","s"];}return[]}function parse_RgbExtra(blob,length,rgce,opts){if(opts.biff<8)return parsenoop(blob,length);var target=blob.l+length;var o=[];for(var i=0;i!==rgce.length;++i){switch(rgce[i][0]){case"PtgArray":rgce[i][1]=parse_PtgExtraArray(blob,0,opts);o.push(rgce[i][1]);break;case"PtgMemArea":rgce[i][2]=parse_PtgExtraMem(blob,rgce[i][1]);o.push(rgce[i][2]);break;case"PtgExp":if(opts&&opts.biff==12){rgce[i][1][1]=blob.read_shift(4);o.push(rgce[i][1])}break;default:break;}}length=target-blob.l;if(length!==0)o.push(parsenoop(blob,length));return o}function parse_NameParsedFormula(blob,length,opts,cce){var target=blob.l+length;var rgce=parse_Rgce(blob,cce,opts);var rgcb;if(target!==blob.l)rgcb=parse_RgbExtra(blob,target-blob.l,rgce,opts);return[rgce,rgcb]}function parse_XLSCellParsedFormula(blob,length,opts){var target=blob.l+length,len=opts.biff==2?1:2;var rgcb,cce=blob.read_shift(len);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce,opts);if(length!==cce+len)rgcb=parse_RgbExtra(blob,length-cce-len,rgce,opts);return[rgce,rgcb]}function parse_SharedParsedFormula(blob,length,opts){var target=blob.l+length;var rgcb,cce=blob.read_shift(2);var rgce=parse_Rgce(blob,cce,opts);if(cce==65535)return[[],parsenoop(blob,length-2)];if(length!==cce+2)rgcb=parse_RgbExtra(blob,target-cce-2,rgce,opts);return[rgce,rgcb]}function parse_ArrayParsedFormula(blob,length,opts,ref){var target=blob.l+length,len=opts.biff==2?1:2;var rgcb,cce=blob.read_shift(len);if(cce==65535)return[[],parsenoop(blob,length-2)];var rgce=parse_Rgce(blob,cce,opts);if(length!==cce+len)rgcb=parse_RgbExtra(blob,length-cce-len,rgce,opts);return[rgce,rgcb]}function parse_Rgce(blob,length,opts){var target=blob.l+length;var R,id,ptgs=[];while(target!=blob.l){length=target-blob.l;id=blob[blob.l];R=PtgTypes[id];if(id===24||id===25){id=blob[blob.l+1];R=(id===24?Ptg18:Ptg19)[id]}if(!R||!R.f){parsenoop(blob,length)}else{ptgs.push([R.n,R.f(blob,length,opts)])}}return ptgs}function stringify_array(f){var o=[];for(var i=0;i=",PtgGt:">",PtgLe:"<=",PtgLt:"<",PtgMul:"*",PtgNe:"<>",PtgPower:"^",PtgSub:"-"};function stringify_formula(formula,range,cell,supbooks,opts){var _range={s:{c:0,r:0},e:{c:0,r:0}};var stack=[],e1,e2,type,c,ixti=0,nameidx=0,r,sname="";if(!formula[0]||!formula[0][0])return"";var last_sp=-1,sp="";for(var ff=0,fflen=formula[0].length;ff=0){switch(formula[0][last_sp][1][0]){case 0:sp=fill(" ",formula[0][last_sp][1][1]);break;case 1:sp=fill("\r",formula[0][last_sp][1][1]);break;default:sp="";if(opts.WTF)throw new Error("Unexpected PtgAttrSpaceType "+formula[0][last_sp][1][0]);}e2=e2+sp;last_sp=-1}stack.push(e2+PtgBinOp[f[0]]+e1);break;case"PtgIsect":e1=stack.pop();e2=stack.pop();stack.push(e2+" "+e1);break;case"PtgUnion":e1=stack.pop();e2=stack.pop();stack.push(e2+","+e1);break;case"PtgRange":e1=stack.pop();e2=stack.pop();stack.push(e2+":"+e1);break;case"PtgAttrChoose":break;case"PtgAttrGoto":break;case"PtgAttrIf":break;case"PtgAttrIfError":break;case"PtgRef":type=f[1][0];c=shift_cell_xls(f[1][1],_range,opts);stack.push(encode_cell_xls(c));break;case"PtgRefN":type=f[1][0];c=cell?shift_cell_xls(f[1][1],cell,opts):f[1][1];stack.push(encode_cell_xls(c));break;case"PtgRef3d":type=f[1][0];ixti=f[1][1];c=shift_cell_xls(f[1][2],_range,opts);sname=supbooks.SheetNames[ixti];var w=sname;stack.push(sname+"!"+encode_cell_xls(c));break;case"PtgFunc":;case"PtgFuncVar":var argc=f[1][0],func=f[1][1];if(!argc)argc=0;var args=argc==0?[]:stack.slice(-argc);stack.length-=argc;if(func==="User")func=args.shift();stack.push(func+"("+args.join(",")+")");break;case"PtgBool":stack.push(f[1]?"TRUE":"FALSE");break;case"PtgInt":stack.push(f[1]);break;case"PtgNum":stack.push(String(f[1]));break;case"PtgStr":stack.push('"'+f[1]+'"');break;case"PtgErr":stack.push(f[1]);break;case"PtgAreaN":type=f[1][0];r=shift_range_xls(f[1][1],_range,opts);stack.push(encode_range_xls(r,opts));break;case"PtgArea":type=f[1][0];r=shift_range_xls(f[1][1],_range,opts);stack.push(encode_range_xls(r,opts));break;case"PtgArea3d":type=f[1][0];ixti=f[1][1];r=f[1][2];sname=supbooks&&supbooks[1]?supbooks[1][ixti+1]:"**MISSING**";stack.push(sname+"!"+encode_range(r));break;case"PtgAttrSum":stack.push("SUM("+stack.pop()+")");break;case"PtgAttrSemi":break;case"PtgName":nameidx=f[1][2];var lbl=(supbooks.names||[])[nameidx-1]||(supbooks[0]||[])[nameidx];var name=lbl?lbl.Name:"**MISSING**"+String(nameidx);if(name in XLSXFutureFunctions)name=XLSXFutureFunctions[name];stack.push(name);break;case"PtgNameX":var bookidx=f[1][1];nameidx=f[1][2];var externbook;if(opts.biff<=5){if(bookidx<0)bookidx=-bookidx;if(supbooks[bookidx])externbook=supbooks[bookidx][nameidx]}else{var pnxname=supbooks.SheetNames[bookidx];var o="";if(((supbooks[bookidx]||[])[0]||[])[0]==14849){}else if(((supbooks[bookidx]||[])[0]||[])[0]==1025){if(supbooks[bookidx][nameidx]&&supbooks[bookidx][nameidx].itab>0){o=supbooks.SheetNames[supbooks[bookidx][nameidx].itab-1]+"!"}}else o=supbooks.SheetNames[nameidx-1]+"!";if(supbooks[bookidx]&&supbooks[bookidx][nameidx])o+=supbooks[bookidx][nameidx].Name;else if(supbooks[0]&&supbooks[0][nameidx])o+=supbooks[0][nameidx].Name;else o+="??NAMEX??";stack.push(o);break}if(!externbook)externbook={Name:"??NAMEX??"};stack.push(externbook.Name);break;case"PtgParen":var lp="(",rp=")";if(last_sp>=0){sp="";switch(formula[0][last_sp][1][0]){case 2:lp=fill(" ",formula[0][last_sp][1][1])+lp;break;case 3:lp=fill("\r",formula[0][last_sp][1][1])+lp;break;case 4:rp=fill(" ",formula[0][last_sp][1][1])+rp;break;case 5:rp=fill("\r",formula[0][last_sp][1][1])+rp;break;default:if(opts.WTF)throw new Error("Unexpected PtgAttrSpaceType "+formula[0][last_sp][1][0]);}last_sp=-1}stack.push(lp+stack.pop()+rp);break;case"PtgRefErr":stack.push("#REF!");break;case"PtgRefErr3d":stack.push("#REF!");break;case"PtgExp":c={c:f[1][1],r:f[1][0]};var q={c:cell.c,r:cell.r};if(supbooks.sharedf[encode_cell(c)]){var parsedf=supbooks.sharedf[encode_cell(c)];stack.push(stringify_formula(parsedf,_range,q,supbooks,opts))}else{var fnd=false;for(e1=0;e1!=supbooks.arrayf.length;++e1){e2=supbooks.arrayf[e1];if(c.ce2[0].e.c)continue;if(c.re2[0].e.r)continue;stack.push(stringify_formula(e2[1],_range,q,supbooks,opts));fnd=true;break}if(!fnd)stack.push(f[1])}break;case"PtgArray":stack.push("{"+stringify_array(f[1])+"}");break;case"PtgMemArea":break;case"PtgAttrSpace":;case"PtgAttrSpaceSemi":last_sp=ff;break;case"PtgTbl":break;case"PtgMemErr":break;case"PtgMissArg":stack.push("");break;case"PtgAreaErr":stack.push("#REF!");break;case"PtgAreaErr3d":stack.push("#REF!");break;case"PtgMemFunc":break;default:throw new Error("Unrecognized Formula Token: "+String(f));}var PtgNonDisp=["PtgAttrSpace","PtgAttrSpaceSemi","PtgAttrGoto"];if(last_sp>=0&&PtgNonDisp.indexOf(formula[0][ff][0])==-1){f=formula[0][last_sp];var _left=true;switch(f[1][0]){case 4:_left=false;case 0:sp=fill(" ",f[1][1]);break;case 5:_left=false;case 1:sp=fill("\r",f[1][1]);break;default:sp="";if(opts.WTF)throw new Error("Unexpected PtgAttrSpaceType "+f[1][0]);}stack.push((_left?sp:"")+stack.pop()+(_left?"":sp));last_sp=-1}}if(stack.length>1&&opts.WTF)throw new Error("bad formula stack");return stack[0]}function parse_XLSBParsedFormula(data,length,opts){var end=data.l+length;var cce=data.read_shift(4);var rgce=parse_Rgce(data,cce,opts);var cb=data.read_shift(4);var rgcb=cb>0?parse_RgbExtra(data,cb,rgce,opts):null;return[rgce,rgcb]}var parse_XLSBArrayParsedFormula=parse_XLSBParsedFormula;var parse_XLSBCellParsedFormula=parse_XLSBParsedFormula;var parse_XLSBNameParsedFormula=parse_XLSBParsedFormula;var parse_XLSBSharedParsedFormula=parse_XLSBParsedFormula;var PtgDataType={1:"REFERENCE",2:"VALUE",3:"ARRAY"};var Cetab={0:"BEEP",1:"OPEN",2:"OPEN.LINKS",3:"CLOSE.ALL",4:"SAVE",5:"SAVE.AS",6:"FILE.DELETE",7:"PAGE.SETUP",8:"PRINT",9:"PRINTER.SETUP",10:"QUIT",11:"NEW.WINDOW",12:"ARRANGE.ALL",13:"WINDOW.SIZE",14:"WINDOW.MOVE",15:"FULL",16:"CLOSE",17:"RUN",22:"SET.PRINT.AREA",23:"SET.PRINT.TITLES",24:"SET.PAGE.BREAK",25:"REMOVE.PAGE.BREAK",26:"FONT",27:"DISPLAY",28:"PROTECT.DOCUMENT",29:"PRECISION",30:"A1.R1C1",31:"CALCULATE.NOW",32:"CALCULATION",34:"DATA.FIND",35:"EXTRACT",36:"DATA.DELETE",37:"SET.DATABASE",38:"SET.CRITERIA",39:"SORT",40:"DATA.SERIES",41:"TABLE",42:"FORMAT.NUMBER",43:"ALIGNMENT",44:"STYLE",45:"BORDER",46:"CELL.PROTECTION",47:"COLUMN.WIDTH",48:"UNDO",49:"CUT",50:"COPY",51:"PASTE",52:"CLEAR",53:"PASTE.SPECIAL",54:"EDIT.DELETE",55:"INSERT",56:"FILL.RIGHT",57:"FILL.DOWN",61:"DEFINE.NAME",62:"CREATE.NAMES",63:"FORMULA.GOTO",64:"FORMULA.FIND",65:"SELECT.LAST.CELL",66:"SHOW.ACTIVE.CELL",67:"GALLERY.AREA",68:"GALLERY.BAR",69:"GALLERY.COLUMN",70:"GALLERY.LINE",71:"GALLERY.PIE",72:"GALLERY.SCATTER",73:"COMBINATION",74:"PREFERRED",75:"ADD.OVERLAY",76:"GRIDLINES",77:"SET.PREFERRED",78:"AXES",79:"LEGEND",80:"ATTACH.TEXT",81:"ADD.ARROW",82:"SELECT.CHART",83:"SELECT.PLOT.AREA",84:"PATTERNS",85:"MAIN.CHART",86:"OVERLAY",87:"SCALE",88:"FORMAT.LEGEND",89:"FORMAT.TEXT",90:"EDIT.REPEAT",91:"PARSE",92:"JUSTIFY",93:"HIDE",94:"UNHIDE",95:"WORKSPACE",96:"FORMULA",97:"FORMULA.FILL",98:"FORMULA.ARRAY",99:"DATA.FIND.NEXT",100:"DATA.FIND.PREV",101:"FORMULA.FIND.NEXT",102:"FORMULA.FIND.PREV", +103:"ACTIVATE",104:"ACTIVATE.NEXT",105:"ACTIVATE.PREV",106:"UNLOCKED.NEXT",107:"UNLOCKED.PREV",108:"COPY.PICTURE",109:"SELECT",110:"DELETE.NAME",111:"DELETE.FORMAT",112:"VLINE",113:"HLINE",114:"VPAGE",115:"HPAGE",116:"VSCROLL",117:"HSCROLL",118:"ALERT",119:"NEW",120:"CANCEL.COPY",121:"SHOW.CLIPBOARD",122:"MESSAGE",124:"PASTE.LINK",125:"APP.ACTIVATE",126:"DELETE.ARROW",127:"ROW.HEIGHT",128:"FORMAT.MOVE",129:"FORMAT.SIZE",130:"FORMULA.REPLACE",131:"SEND.KEYS",132:"SELECT.SPECIAL",133:"APPLY.NAMES",134:"REPLACE.FONT",135:"FREEZE.PANES",136:"SHOW.INFO",137:"SPLIT",138:"ON.WINDOW",139:"ON.DATA",140:"DISABLE.INPUT",142:"OUTLINE",143:"LIST.NAMES",144:"FILE.CLOSE",145:"SAVE.WORKBOOK",146:"DATA.FORM",147:"COPY.CHART",148:"ON.TIME",149:"WAIT",150:"FORMAT.FONT",151:"FILL.UP",152:"FILL.LEFT",153:"DELETE.OVERLAY",155:"SHORT.MENUS",159:"SET.UPDATE.STATUS",161:"COLOR.PALETTE",162:"DELETE.STYLE",163:"WINDOW.RESTORE",164:"WINDOW.MAXIMIZE",166:"CHANGE.LINK",167:"CALCULATE.DOCUMENT",168:"ON.KEY",169:"APP.RESTORE",170:"APP.MOVE",171:"APP.SIZE",172:"APP.MINIMIZE",173:"APP.MAXIMIZE",174:"BRING.TO.FRONT",175:"SEND.TO.BACK",185:"MAIN.CHART.TYPE",186:"OVERLAY.CHART.TYPE",187:"SELECT.END",188:"OPEN.MAIL",189:"SEND.MAIL",190:"STANDARD.FONT",191:"CONSOLIDATE",192:"SORT.SPECIAL",193:"GALLERY.3D.AREA",194:"GALLERY.3D.COLUMN",195:"GALLERY.3D.LINE",196:"GALLERY.3D.PIE",197:"VIEW.3D",198:"GOAL.SEEK",199:"WORKGROUP",200:"FILL.GROUP",201:"UPDATE.LINK",202:"PROMOTE",203:"DEMOTE",204:"SHOW.DETAIL",206:"UNGROUP",207:"OBJECT.PROPERTIES",208:"SAVE.NEW.OBJECT",209:"SHARE",210:"SHARE.NAME",211:"DUPLICATE",212:"APPLY.STYLE",213:"ASSIGN.TO.OBJECT",214:"OBJECT.PROTECTION",215:"HIDE.OBJECT",216:"SET.EXTRACT",217:"CREATE.PUBLISHER",218:"SUBSCRIBE.TO",219:"ATTRIBUTES",220:"SHOW.TOOLBAR",222:"PRINT.PREVIEW",223:"EDIT.COLOR",224:"SHOW.LEVELS",225:"FORMAT.MAIN",226:"FORMAT.OVERLAY",227:"ON.RECALC",228:"EDIT.SERIES",229:"DEFINE.STYLE",240:"LINE.PRINT",243:"ENTER.DATA",249:"GALLERY.RADAR",250:"MERGE.STYLES",251:"EDITION.OPTIONS",252:"PASTE.PICTURE",253:"PASTE.PICTURE.LINK",254:"SPELLING",256:"ZOOM",259:"INSERT.OBJECT",260:"WINDOW.MINIMIZE",265:"SOUND.NOTE",266:"SOUND.PLAY",267:"FORMAT.SHAPE",268:"EXTEND.POLYGON",269:"FORMAT.AUTO",272:"GALLERY.3D.BAR",273:"GALLERY.3D.SURFACE",274:"FILL.AUTO",276:"CUSTOMIZE.TOOLBAR",277:"ADD.TOOL",278:"EDIT.OBJECT",279:"ON.DOUBLECLICK",280:"ON.ENTRY",281:"WORKBOOK.ADD",282:"WORKBOOK.MOVE",283:"WORKBOOK.COPY",284:"WORKBOOK.OPTIONS",285:"SAVE.WORKSPACE",288:"CHART.WIZARD",289:"DELETE.TOOL",290:"MOVE.TOOL",291:"WORKBOOK.SELECT",292:"WORKBOOK.ACTIVATE",293:"ASSIGN.TO.TOOL",295:"COPY.TOOL",296:"RESET.TOOL",297:"CONSTRAIN.NUMERIC",298:"PASTE.TOOL",302:"WORKBOOK.NEW",305:"SCENARIO.CELLS",306:"SCENARIO.DELETE",307:"SCENARIO.ADD",308:"SCENARIO.EDIT",309:"SCENARIO.SHOW",310:"SCENARIO.SHOW.NEXT",311:"SCENARIO.SUMMARY",312:"PIVOT.TABLE.WIZARD",313:"PIVOT.FIELD.PROPERTIES",314:"PIVOT.FIELD",315:"PIVOT.ITEM",316:"PIVOT.ADD.FIELDS",318:"OPTIONS.CALCULATION",319:"OPTIONS.EDIT",320:"OPTIONS.VIEW",321:"ADDIN.MANAGER",322:"MENU.EDITOR",323:"ATTACH.TOOLBARS",324:"VBAActivate",325:"OPTIONS.CHART",328:"VBA.INSERT.FILE",330:"VBA.PROCEDURE.DEFINITION",336:"ROUTING.SLIP",338:"ROUTE.DOCUMENT",339:"MAIL.LOGON",342:"INSERT.PICTURE",343:"EDIT.TOOL",344:"GALLERY.DOUGHNUT",350:"CHART.TREND",352:"PIVOT.ITEM.PROPERTIES",354:"WORKBOOK.INSERT",355:"OPTIONS.TRANSITION",356:"OPTIONS.GENERAL",370:"FILTER.ADVANCED",373:"MAIL.ADD.MAILER",374:"MAIL.DELETE.MAILER",375:"MAIL.REPLY",376:"MAIL.REPLY.ALL",377:"MAIL.FORWARD",378:"MAIL.NEXT.LETTER",379:"DATA.LABEL",380:"INSERT.TITLE",381:"FONT.PROPERTIES",382:"MACRO.OPTIONS",383:"WORKBOOK.HIDE",384:"WORKBOOK.UNHIDE",385:"WORKBOOK.DELETE",386:"WORKBOOK.NAME",388:"GALLERY.CUSTOM",390:"ADD.CHART.AUTOFORMAT",391:"DELETE.CHART.AUTOFORMAT",392:"CHART.ADD.DATA",393:"AUTO.OUTLINE",394:"TAB.ORDER",395:"SHOW.DIALOG",396:"SELECT.ALL",397:"UNGROUP.SHEETS",398:"SUBTOTAL.CREATE",399:"SUBTOTAL.REMOVE",400:"RENAME.OBJECT",412:"WORKBOOK.SCROLL",413:"WORKBOOK.NEXT",414:"WORKBOOK.PREV",415:"WORKBOOK.TAB.SPLIT",416:"FULL.SCREEN",417:"WORKBOOK.PROTECT",420:"SCROLLBAR.PROPERTIES",421:"PIVOT.SHOW.PAGES",422:"TEXT.TO.COLUMNS",423:"FORMAT.CHARTTYPE",424:"LINK.FORMAT",425:"TRACER.DISPLAY",430:"TRACER.NAVIGATE",431:"TRACER.CLEAR",432:"TRACER.ERROR",433:"PIVOT.FIELD.GROUP",434:"PIVOT.FIELD.UNGROUP",435:"CHECKBOX.PROPERTIES",436:"LABEL.PROPERTIES",437:"LISTBOX.PROPERTIES",438:"EDITBOX.PROPERTIES",439:"PIVOT.REFRESH",440:"LINK.COMBO",441:"OPEN.TEXT",442:"HIDE.DIALOG",443:"SET.DIALOG.FOCUS",444:"ENABLE.OBJECT",445:"PUSHBUTTON.PROPERTIES",446:"SET.DIALOG.DEFAULT",447:"FILTER",448:"FILTER.SHOW.ALL",449:"CLEAR.OUTLINE",450:"FUNCTION.WIZARD",451:"ADD.LIST.ITEM",452:"SET.LIST.ITEM",453:"REMOVE.LIST.ITEM",454:"SELECT.LIST.ITEM",455:"SET.CONTROL.VALUE",456:"SAVE.COPY.AS",458:"OPTIONS.LISTS.ADD",459:"OPTIONS.LISTS.DELETE",460:"SERIES.AXES",461:"SERIES.X",462:"SERIES.Y",463:"ERRORBAR.X",464:"ERRORBAR.Y",465:"FORMAT.CHART",466:"SERIES.ORDER",467:"MAIL.LOGOFF",468:"CLEAR.ROUTING.SLIP",469:"APP.ACTIVATE.MICROSOFT",470:"MAIL.EDIT.MAILER",471:"ON.SHEET",472:"STANDARD.WIDTH",473:"SCENARIO.MERGE",474:"SUMMARY.INFO",475:"FIND.FILE",476:"ACTIVE.CELL.FONT",477:"ENABLE.TIPWIZARD",478:"VBA.MAKE.ADDIN",480:"INSERTDATATABLE",481:"WORKGROUP.OPTIONS",482:"MAIL.SEND.MAILER",485:"AUTOCORRECT",489:"POST.DOCUMENT",491:"PICKLIST",493:"VIEW.SHOW",494:"VIEW.DEFINE",495:"VIEW.DELETE",509:"SHEET.BACKGROUND",510:"INSERT.MAP.OBJECT",511:"OPTIONS.MENONO",517:"MSOCHECKS",518:"NORMAL",519:"LAYOUT",520:"RM.PRINT.AREA",521:"CLEAR.PRINT.AREA",522:"ADD.PRINT.AREA",523:"MOVE.BRK",545:"HIDECURR.NOTE",546:"HIDEALL.NOTES",547:"DELETE.NOTE",548:"TRAVERSE.NOTES",549:"ACTIVATE.NOTES",620:"PROTECT.REVISIONS",621:"UNPROTECT.REVISIONS",647:"OPTIONS.ME",653:"WEB.PUBLISH",667:"NEWWEBQUERY",673:"PIVOT.TABLE.CHART",753:"OPTIONS.SAVE",755:"OPTIONS.SPELL",808:"HIDEALL.INKANNOTS"};var Ftab={0:"COUNT",1:"IF",2:"ISNA",3:"ISERROR",4:"SUM",5:"AVERAGE",6:"MIN",7:"MAX",8:"ROW",9:"COLUMN",10:"NA",11:"NPV",12:"STDEV",13:"DOLLAR",14:"FIXED",15:"SIN",16:"COS",17:"TAN",18:"ATAN",19:"PI",20:"SQRT",21:"EXP",22:"LN",23:"LOG10",24:"ABS",25:"INT",26:"SIGN",27:"ROUND",28:"LOOKUP",29:"INDEX",30:"REPT",31:"MID",32:"LEN",33:"VALUE",34:"TRUE",35:"FALSE",36:"AND",37:"OR",38:"NOT",39:"MOD",40:"DCOUNT",41:"DSUM",42:"DAVERAGE",43:"DMIN",44:"DMAX",45:"DSTDEV",46:"VAR",47:"DVAR",48:"TEXT",49:"LINEST",50:"TREND",51:"LOGEST",52:"GROWTH",53:"GOTO",54:"HALT",55:"RETURN",56:"PV",57:"FV",58:"NPER",59:"PMT",60:"RATE",61:"MIRR",62:"IRR",63:"RAND",64:"MATCH",65:"DATE",66:"TIME",67:"DAY",68:"MONTH",69:"YEAR",70:"WEEKDAY",71:"HOUR",72:"MINUTE",73:"SECOND",74:"NOW",75:"AREAS",76:"ROWS",77:"COLUMNS",78:"OFFSET",79:"ABSREF",80:"RELREF",81:"ARGUMENT",82:"SEARCH",83:"TRANSPOSE",84:"ERROR",85:"STEP",86:"TYPE",87:"ECHO",88:"SET.NAME",89:"CALLER",90:"DEREF",91:"WINDOWS",92:"SERIES",93:"DOCUMENTS",94:"ACTIVE.CELL",95:"SELECTION",96:"RESULT",97:"ATAN2",98:"ASIN",99:"ACOS",100:"CHOOSE",101:"HLOOKUP",102:"VLOOKUP",103:"LINKS",104:"INPUT",105:"ISREF",106:"GET.FORMULA",107:"GET.NAME",108:"SET.VALUE",109:"LOG",110:"EXEC",111:"CHAR",112:"LOWER",113:"UPPER",114:"PROPER",115:"LEFT",116:"RIGHT",117:"EXACT",118:"TRIM",119:"REPLACE",120:"SUBSTITUTE",121:"CODE",122:"NAMES",123:"DIRECTORY",124:"FIND",125:"CELL",126:"ISERR",127:"ISTEXT",128:"ISNUMBER",129:"ISBLANK",130:"T",131:"N",132:"FOPEN",133:"FCLOSE",134:"FSIZE",135:"FREADLN",136:"FREAD",137:"FWRITELN",138:"FWRITE",139:"FPOS",140:"DATEVALUE",141:"TIMEVALUE",142:"SLN",143:"SYD",144:"DDB",145:"GET.DEF",146:"REFTEXT",147:"TEXTREF",148:"INDIRECT",149:"REGISTER",150:"CALL",151:"ADD.BAR",152:"ADD.MENU",153:"ADD.COMMAND",154:"ENABLE.COMMAND",155:"CHECK.COMMAND",156:"RENAME.COMMAND",157:"SHOW.BAR",158:"DELETE.MENU",159:"DELETE.COMMAND",160:"GET.CHART.ITEM",161:"DIALOG.BOX",162:"CLEAN",163:"MDETERM",164:"MINVERSE",165:"MMULT",166:"FILES",167:"IPMT",168:"PPMT",169:"COUNTA",170:"CANCEL.KEY",171:"FOR",172:"WHILE",173:"BREAK",174:"NEXT",175:"INITIATE",176:"REQUEST",177:"POKE",178:"EXECUTE",179:"TERMINATE",180:"RESTART",181:"HELP",182:"GET.BAR",183:"PRODUCT",184:"FACT",185:"GET.CELL",186:"GET.WORKSPACE",187:"GET.WINDOW",188:"GET.DOCUMENT",189:"DPRODUCT",190:"ISNONTEXT",191:"GET.NOTE",192:"NOTE",193:"STDEVP",194:"VARP",195:"DSTDEVP",196:"DVARP",197:"TRUNC",198:"ISLOGICAL",199:"DCOUNTA",200:"DELETE.BAR",201:"UNREGISTER",204:"USDOLLAR",205:"FINDB",206:"SEARCHB",207:"REPLACEB",208:"LEFTB",209:"RIGHTB",210:"MIDB",211:"LENB",212:"ROUNDUP",213:"ROUNDDOWN",214:"ASC",215:"DBCS",216:"RANK",219:"ADDRESS",220:"DAYS360",221:"TODAY",222:"VDB",223:"ELSE",224:"ELSE.IF",225:"END.IF",226:"FOR.CELL",227:"MEDIAN",228:"SUMPRODUCT",229:"SINH",230:"COSH",231:"TANH",232:"ASINH",233:"ACOSH",234:"ATANH",235:"DGET",236:"CREATE.OBJECT",237:"VOLATILE",238:"LAST.ERROR",239:"CUSTOM.UNDO",240:"CUSTOM.REPEAT",241:"FORMULA.CONVERT",242:"GET.LINK.INFO",243:"TEXT.BOX",244:"INFO",245:"GROUP",246:"GET.OBJECT",247:"DB",248:"PAUSE",251:"RESUME",252:"FREQUENCY",253:"ADD.TOOLBAR",254:"DELETE.TOOLBAR",255:"User",256:"RESET.TOOLBAR",257:"EVALUATE",258:"GET.TOOLBAR",259:"GET.TOOL",260:"SPELLING.CHECK",261:"ERROR.TYPE",262:"APP.TITLE",263:"WINDOW.TITLE",264:"SAVE.TOOLBAR",265:"ENABLE.TOOL",266:"PRESS.TOOL",267:"REGISTER.ID",268:"GET.WORKBOOK",269:"AVEDEV",270:"BETADIST",271:"GAMMALN",272:"BETAINV",273:"BINOMDIST",274:"CHIDIST",275:"CHIINV",276:"COMBIN",277:"CONFIDENCE",278:"CRITBINOM",279:"EVEN",280:"EXPONDIST",281:"FDIST",282:"FINV",283:"FISHER",284:"FISHERINV",285:"FLOOR",286:"GAMMADIST",287:"GAMMAINV",288:"CEILING",289:"HYPGEOMDIST",290:"LOGNORMDIST",291:"LOGINV",292:"NEGBINOMDIST",293:"NORMDIST",294:"NORMSDIST",295:"NORMINV",296:"NORMSINV",297:"STANDARDIZE",298:"ODD",299:"PERMUT",300:"POISSON",301:"TDIST",302:"WEIBULL",303:"SUMXMY2",304:"SUMX2MY2",305:"SUMX2PY2",306:"CHITEST",307:"CORREL",308:"COVAR",309:"FORECAST",310:"FTEST",311:"INTERCEPT",312:"PEARSON",313:"RSQ",314:"STEYX",315:"SLOPE",316:"TTEST",317:"PROB",318:"DEVSQ",319:"GEOMEAN",320:"HARMEAN",321:"SUMSQ",322:"KURT",323:"SKEW",324:"ZTEST",325:"LARGE",326:"SMALL",327:"QUARTILE",328:"PERCENTILE",329:"PERCENTRANK",330:"MODE",331:"TRIMMEAN",332:"TINV",334:"MOVIE.COMMAND",335:"GET.MOVIE",336:"CONCATENATE",337:"POWER",338:"PIVOT.ADD.DATA",339:"GET.PIVOT.TABLE",340:"GET.PIVOT.FIELD",341:"GET.PIVOT.ITEM",342:"RADIANS",343:"DEGREES",344:"SUBTOTAL",345:"SUMIF",346:"COUNTIF",347:"COUNTBLANK",348:"SCENARIO.GET",349:"OPTIONS.LISTS.GET",350:"ISPMT",351:"DATEDIF",352:"DATESTRING",353:"NUMBERSTRING",354:"ROMAN",355:"OPEN.DIALOG",356:"SAVE.DIALOG",357:"VIEW.GET",358:"GETPIVOTDATA",359:"HYPERLINK",360:"PHONETIC",361:"AVERAGEA",362:"MAXA",363:"MINA",364:"STDEVPA",365:"VARPA",366:"STDEVA",367:"VARA",368:"BAHTTEXT",369:"THAIDAYOFWEEK",370:"THAIDIGIT",371:"THAIMONTHOFYEAR",372:"THAINUMSOUND",373:"THAINUMSTRING",374:"THAISTRINGLENGTH",375:"ISTHAIDIGIT",376:"ROUNDBAHTDOWN",377:"ROUNDBAHTUP",378:"THAIYEAR",379:"RTD",380:"CUBEVALUE",381:"CUBEMEMBER",382:"CUBEMEMBERPROPERTY",383:"CUBERANKEDMEMBER",384:"HEX2BIN",385:"HEX2DEC",386:"HEX2OCT",387:"DEC2BIN",388:"DEC2HEX",389:"DEC2OCT",390:"OCT2BIN",391:"OCT2HEX",392:"OCT2DEC",393:"BIN2DEC",394:"BIN2OCT",395:"BIN2HEX",396:"IMSUB",397:"IMDIV",398:"IMPOWER",399:"IMABS",400:"IMSQRT",401:"IMLN",402:"IMLOG2",403:"IMLOG10",404:"IMSIN",405:"IMCOS",406:"IMEXP",407:"IMARGUMENT",408:"IMCONJUGATE",409:"IMAGINARY",410:"IMREAL",411:"COMPLEX",412:"IMSUM",413:"IMPRODUCT",414:"SERIESSUM",415:"FACTDOUBLE",416:"SQRTPI",417:"QUOTIENT",418:"DELTA",419:"GESTEP",420:"ISEVEN",421:"ISODD",422:"MROUND",423:"ERF",424:"ERFC",425:"BESSELJ",426:"BESSELK",427:"BESSELY",428:"BESSELI",429:"XIRR",430:"XNPV",431:"PRICEMAT",432:"YIELDMAT",433:"INTRATE",434:"RECEIVED",435:"DISC",436:"PRICEDISC",437:"YIELDDISC",438:"TBILLEQ",439:"TBILLPRICE",440:"TBILLYIELD",441:"PRICE",442:"YIELD",443:"DOLLARDE",444:"DOLLARFR",445:"NOMINAL",446:"EFFECT",447:"CUMPRINC",448:"CUMIPMT",449:"EDATE",450:"EOMONTH",451:"YEARFRAC",452:"COUPDAYBS",453:"COUPDAYS",454:"COUPDAYSNC",455:"COUPNCD",456:"COUPNUM",457:"COUPPCD",458:"DURATION",459:"MDURATION",460:"ODDLPRICE",461:"ODDLYIELD",462:"ODDFPRICE",463:"ODDFYIELD",464:"RANDBETWEEN",465:"WEEKNUM",466:"AMORDEGRC",467:"AMORLINC",468:"CONVERT",724:"SHEETJS",469:"ACCRINT",470:"ACCRINTM",471:"WORKDAY",472:"NETWORKDAYS",473:"GCD",474:"MULTINOMIAL",475:"LCM",476:"FVSCHEDULE",477:"CUBEKPIMEMBER",478:"CUBESET",479:"CUBESETCOUNT",480:"IFERROR",481:"COUNTIFS",482:"SUMIFS",483:"AVERAGEIF",484:"AVERAGEIFS"};var FtabArgc={2:1,3:1,15:1,16:1,17:1,18:1,19:0,20:1,21:1,22:1,23:1,24:1,25:1,26:1,27:2,30:2,31:3,32:1,33:1,38:1,39:2,40:3,41:3,42:3,43:3,44:3,45:3,47:3,48:2,53:1,61:3,65:3,66:3,67:1,68:1,69:1,70:1,71:1,72:1,73:1,75:1,76:1,77:1,79:2,80:2,83:1,85:0,86:1,90:1,97:2,98:1,99:1,101:3,102:3,105:1,111:1,112:1,113:1,114:1,117:2,118:1,119:4,121:1,126:1,127:1,128:1,129:1,130:1,131:1,133:1,134:1,135:1,136:2,137:2,138:2,140:1,141:1,142:3,143:4,144:4,162:1,163:1,164:1,165:2,172:1,175:2,176:2,177:3,178:2,179:1,184:1,189:3,190:1,195:3,196:3,197:1,198:1,199:3,201:1,207:4,210:3,211:1,212:2,213:2,214:1,215:1,229:1,230:1,231:1,232:1,233:1,234:1,235:3,244:1,247:4,252:2,257:1,261:1,271:1,273:4,274:2,275:2,276:2,277:3,278:3,279:1,280:3,281:3,282:3,283:1,284:1,285:2,286:4,287:3,288:2,289:4,290:3,291:3,292:3,293:4,294:1,295:3,296:1,297:3,298:1,299:2,300:3,301:3,302:4,303:2,304:2,305:2,306:2,307:2,308:2,309:3,310:2,311:2,312:2,313:2,314:2,315:2,316:4,325:2,326:2,327:2,328:2,331:2,332:2,337:2,342:1,343:1,346:2,347:1,350:4,351:3,352:1,353:2,360:1,368:1,369:1,370:1,371:1,372:1,373:1,374:1,375:1,376:1,377:1,378:1,382:3,385:1,392:1,393:1,396:2,397:2,398:2,399:1,400:1,401:1,402:1,403:1,404:1,405:1,406:1,407:1,408:1,409:1,410:1,414:4,415:1,416:1,417:2,420:1,421:1,422:2,424:1,425:2,426:2,427:2,428:2,430:3,438:3,439:3,440:3,443:2,444:2,445:2,446:2,447:6,448:6,449:2,450:2,464:2,468:3,476:2,479:1,480:2,65535:0};var XLSXFutureFunctions={"_xlfn.ACOT":"ACOT","_xlfn.ACOTH":"ACOTH","_xlfn.AGGREGATE":"AGGREGATE","_xlfn.ARABIC":"ARABIC","_xlfn.AVERAGEIF":"AVERAGEIF","_xlfn.AVERAGEIFS":"AVERAGEIFS","_xlfn.BASE":"BASE","_xlfn.BETA.DIST":"BETA.DIST","_xlfn.BETA.INV":"BETA.INV","_xlfn.BINOM.DIST":"BINOM.DIST","_xlfn.BINOM.DIST.RANGE":"BINOM.DIST.RANGE","_xlfn.BINOM.INV":"BINOM.INV","_xlfn.BITAND":"BITAND","_xlfn.BITLSHIFT":"BITLSHIFT","_xlfn.BITOR":"BITOR","_xlfn.BITRSHIFT":"BITRSHIFT","_xlfn.BITXOR":"BITXOR","_xlfn.CEILING.MATH":"CEILING.MATH","_xlfn.CEILING.PRECISE":"CEILING.PRECISE","_xlfn.CHISQ.DIST":"CHISQ.DIST","_xlfn.CHISQ.DIST.RT":"CHISQ.DIST.RT","_xlfn.CHISQ.INV":"CHISQ.INV","_xlfn.CHISQ.INV.RT":"CHISQ.INV.RT","_xlfn.CHISQ.TEST":"CHISQ.TEST","_xlfn.COMBINA":"COMBINA","_xlfn.CONFIDENCE.NORM":"CONFIDENCE.NORM","_xlfn.CONFIDENCE.T":"CONFIDENCE.T","_xlfn.COT":"COT","_xlfn.COTH":"COTH","_xlfn.COUNTIFS":"COUNTIFS","_xlfn.COVARIANCE.P":"COVARIANCE.P","_xlfn.COVARIANCE.S":"COVARIANCE.S","_xlfn.CSC":"CSC","_xlfn.CSCH":"CSCH","_xlfn.DAYS":"DAYS","_xlfn.DECIMAL":"DECIMAL","_xlfn.ECMA.CEILING":"ECMA.CEILING","_xlfn.ERF.PRECISE":"ERF.PRECISE","_xlfn.ERFC.PRECISE":"ERFC.PRECISE","_xlfn.EXPON.DIST":"EXPON.DIST","_xlfn.F.DIST":"F.DIST","_xlfn.F.DIST.RT":"F.DIST.RT","_xlfn.F.INV":"F.INV","_xlfn.F.INV.RT":"F.INV.RT","_xlfn.F.TEST":"F.TEST","_xlfn.FILTERXML":"FILTERXML","_xlfn.FLOOR.MATH":"FLOOR.MATH","_xlfn.FLOOR.PRECISE":"FLOOR.PRECISE","_xlfn.FORMULATEXT":"FORMULATEXT","_xlfn.GAMMA":"GAMMA","_xlfn.GAMMA.DIST":"GAMMA.DIST","_xlfn.GAMMA.INV":"GAMMA.INV","_xlfn.GAMMALN.PRECISE":"GAMMALN.PRECISE","_xlfn.GAUSS":"GAUSS","_xlfn.HYPGEOM.DIST":"HYPGEOM.DIST","_xlfn.IFNA":"IFNA","_xlfn.IFERROR":"IFERROR","_xlfn.IMCOSH":"IMCOSH","_xlfn.IMCOT":"IMCOT","_xlfn.IMCSC":"IMCSC","_xlfn.IMCSCH":"IMCSCH","_xlfn.IMSEC":"IMSEC","_xlfn.IMSECH":"IMSECH","_xlfn.IMSINH":"IMSINH","_xlfn.IMTAN":"IMTAN","_xlfn.ISFORMULA":"ISFORMULA","_xlfn.ISO.CEILING":"ISO.CEILING","_xlfn.ISOWEEKNUM":"ISOWEEKNUM","_xlfn.LOGNORM.DIST":"LOGNORM.DIST","_xlfn.LOGNORM.INV":"LOGNORM.INV","_xlfn.MODE.MULT":"MODE.MULT","_xlfn.MODE.SNGL":"MODE.SNGL","_xlfn.MUNIT":"MUNIT","_xlfn.NEGBINOM.DIST":"NEGBINOM.DIST","_xlfn.NETWORKDAYS.INTL":"NETWORKDAYS.INTL","_xlfn.NIGBINOM":"NIGBINOM","_xlfn.NORM.DIST":"NORM.DIST","_xlfn.NORM.INV":"NORM.INV","_xlfn.NORM.S.DIST":"NORM.S.DIST","_xlfn.NORM.S.INV":"NORM.S.INV","_xlfn.NUMBERVALUE":"NUMBERVALUE","_xlfn.PDURATION":"PDURATION","_xlfn.PERCENTILE.EXC":"PERCENTILE.EXC","_xlfn.PERCENTILE.INC":"PERCENTILE.INC","_xlfn.PERCENTRANK.EXC":"PERCENTRANK.EXC","_xlfn.PERCENTRANK.INC":"PERCENTRANK.INC","_xlfn.PERMUTATIONA":"PERMUTATIONA","_xlfn.PHI":"PHI","_xlfn.POISSON.DIST":"POISSON.DIST","_xlfn.QUARTILE.EXC":"QUARTILE.EXC","_xlfn.QUARTILE.INC":"QUARTILE.INC","_xlfn.QUERYSTRING":"QUERYSTRING","_xlfn.RANK.AVG":"RANK.AVG","_xlfn.RANK.EQ":"RANK.EQ","_xlfn.RRI":"RRI","_xlfn.SEC":"SEC","_xlfn.SECH":"SECH","_xlfn.SHEET":"SHEET","_xlfn.SHEETS":"SHEETS","_xlfn.SKEW.P":"SKEW.P","_xlfn.STDEV.P":"STDEV.P","_xlfn.STDEV.S":"STDEV.S","_xlfn.SUMIFS":"SUMIFS","_xlfn.T.DIST":"T.DIST","_xlfn.T.DIST.2T":"T.DIST.2T","_xlfn.T.DIST.RT":"T.DIST.RT","_xlfn.T.INV":"T.INV","_xlfn.T.INV.2T":"T.INV.2T","_xlfn.T.TEST":"T.TEST","_xlfn.UNICHAR":"UNICHAR","_xlfn.UNICODE":"UNICODE","_xlfn.VAR.P":"VAR.P","_xlfn.VAR.S":"VAR.S","_xlfn.WEBSERVICE":"WEBSERVICE","_xlfn.WEIBULL.DIST":"WEIBULL.DIST","_xlfn.WORKDAY.INTL":"WORKDAY.INTL","_xlfn.XOR":"XOR","_xlfn.Z.TEST":"Z.TEST"};function ods_to_csf_formula(f){if(f.substr(0,3)=="of:")f=f.substr(3);if(f.charCodeAt(0)==61){f=f.substr(1);if(f.charCodeAt(0)==61)f=f.substr(1)}f=f.replace(/COM\.MICROSOFT\./g,"");f=f.replace(/\[((?:\.[A-Z]+[0-9]+)(?::\.[A-Z]+[0-9]+)?)\]/g,function($$,$1){return $1.replace(/\./g,"")});f=f.replace(/\[.(#[A-Z]*[?!])\]/g,"$1");return f.replace(/[;~]/g,",").replace(/\|/g,";")}function csf_to_ods_formula(f){var o="of:="+f.replace(crefregex,"$1[.$2$3$4$5]").replace(/\]:\[/g,":");return o.replace(/;/g,"|").replace(/,/g,";")}function ods_to_csf_range_3D(r){var a=r.split(":");var s=a[0].split(".")[0];return[s,a[0].split(".")[1]+":"+a[1].split(".")[1]]}var strs={};var _ssfopts={};RELS.WS=["http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet","http://purl.oclc.org/ooxml/officeDocument/relationships/worksheet"];function get_sst_id(sst,str){for(var i=0,len=sst.length;i-1){p.width=char2width(wch);p.customWidth=1}else if(col.width!=null)p.width=col.width;if(col.hidden)p.hidden=true;return p}function default_margins(margins,mode){if(!margins)return;var defs=[.7,.7,.75,.75,.3,.3];if(mode=="xlml")defs=[1,1,1,1,.5,.5];if(margins.left==null)margins.left=defs[0];if(margins.right==null)margins.right=defs[1];if(margins.top==null)margins.top=defs[2];if(margins.bottom==null)margins.bottom=defs[3];if(margins.header==null)margins.header=defs[4];if(margins.footer==null)margins.footer=defs[5]}function get_cell_style(styles,cell,opts){var z=opts.revssf[cell.z!=null?cell.z:"General"];var i=60,len=styles.length;if(z==null&&opts.ssf){for(;i<392;++i)if(opts.ssf[i]==null){SSF.load(cell.z,i);opts.ssf[i]=cell.z;opts.revssf[cell.z]=z=i;break}}for(i=0;i!=len;++i)if(styles[i].numFmtId===z)return i;styles[len]={numFmtId:z,fontId:0,fillId:0,borderId:0,xfId:0,applyNumberFormat:1};return len}function safe_format(p,fmtid,fillid,opts,themes,styles){if(p.t==="z")return;if(p.t==="d"&&typeof p.v==="string")p.v=parseDate(p.v);try{if(opts.cellNF)p.z=SSF._table[fmtid]}catch(e){if(opts.WTF)throw e}if(!opts||opts.cellText!==false)try{if(p.t==="e")p.w=p.w||BErr[p.v];else if(fmtid===0){if(p.t==="n"){if((p.v|0)===p.v)p.w=SSF._general_int(p.v,_ssfopts);else p.w=SSF._general_num(p.v,_ssfopts)}else if(p.t==="d"){var dd=datenum(p.v);if((dd|0)===dd)p.w=SSF._general_int(dd,_ssfopts);else p.w=SSF._general_num(dd,_ssfopts)}else if(p.v===undefined)return"";else p.w=SSF._general(p.v,_ssfopts)}else if(p.t==="d")p.w=SSF.format(fmtid,datenum(p.v),_ssfopts);else p.w=SSF.format(fmtid,p.v,_ssfopts)}catch(e){if(opts.WTF)throw e}if(fillid)try{p.s=styles.Fills[fillid];if(p.s.fgColor&&p.s.fgColor.theme&&!p.s.fgColor.rgb){p.s.fgColor.rgb=rgb_tint(themes.themeElements.clrScheme[p.s.fgColor.theme].rgb,p.s.fgColor.tint||0);if(opts.WTF)p.s.fgColor.raw_rgb=themes.themeElements.clrScheme[p.s.fgColor.theme].rgb}if(p.s.bgColor&&p.s.bgColor.theme){p.s.bgColor.rgb=rgb_tint(themes.themeElements.clrScheme[p.s.bgColor.theme].rgb,p.s.bgColor.tint||0);if(opts.WTF)p.s.bgColor.raw_rgb=themes.themeElements.clrScheme[p.s.bgColor.theme].rgb}}catch(e){if(opts.WTF)throw e}}function parse_ws_xml_dim(ws,s){var d=safe_decode_range(s);if(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)}var mergecregex=/<(?:\w:)?mergeCell ref="[A-Z0-9:]+"\s*[\/]?>/g;var sheetdataregex=/<(?:\w+:)?sheetData>([^\u2603]*)<\/(?:\w+:)?sheetData>/;var hlinkregex=/<(?:\w:)?hyperlink [^>]*>/gm;var dimregex=/"(\w*:\w*)"/;var colregex=/<(?:\w:)?col[^>]*[\/]?>/g;var afregex=/<(?:\w:)?autoFilter[^>]*([\/]|>([^\u2603]*)<\/(?:\w:)?autoFilter)>/g;var marginregex=/<(?:\w:)?pageMargins[^>]*\/>/g;function parse_ws_xml(data,opts,rels,wb,themes,styles){if(!data)return data;if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var s=opts.dense?[]:{};var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};var data1="",data2="";var mtch=data.match(sheetdataregex);if(mtch){data1=data.substr(0,mtch.index);data2=data.substr(mtch.index+mtch[0].length)}else data1=data2=data;var ridx=(data1.match(/<(?:\w*:)?dimension/)||{index:-1}).index;if(ridx>0){var ref=data1.substr(ridx,50).match(dimregex);if(ref)parse_ws_xml_dim(s,ref[1])}var columns=[];if(opts.cellStyles){var cols=data1.match(colregex);if(cols)parse_ws_xml_cols(columns,cols)}if(mtch)parse_ws_xml_data(mtch[1],s,opts,refguess,themes,styles);var afilter=data2.match(afregex);if(afilter)s["!autofilter"]=parse_ws_xml_autofilter(afilter[0]);var mergecells=[];var merges=data2.match(mergecregex);if(merges)for(ridx=0;ridx!=merges.length;++ridx)mergecells[ridx]=safe_decode_range(merges[ridx].substr(merges[ridx].indexOf('"')+1));var hlink=data2.match(hlinkregex);if(hlink)parse_ws_xml_hlinks(s,hlink,rels);var margins=data2.match(marginregex);if(margins)s["!margins"]=parse_ws_xml_margins(parsexmltag(margins[0]));if(!s["!ref"]&&refguess.e.c>=refguess.s.c&&refguess.e.r>=refguess.s.r)s["!ref"]=encode_range(refguess);if(opts.sheetRows>0&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.rrefguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c0)s["!merges"]=mergecells;if(columns.length>0)s["!cols"]=columns;return s}function write_ws_xml_merges(merges){if(merges.length==0)return"";var o='';for(var i=0;i!=merges.length;++i)o+='';return o+""}function write_ws_xml_protection(sp){var o={sheet:1};var deffalse=["objects","scenarios","selectLockedCells","selectUnlockedCells"];var deftrue=["formatColumns","formatRows","formatCells","insertColumns","insertRows","insertHyperlinks","deleteColumns","deleteRows","sort","autoFilter","pivotTables"];deffalse.forEach(function(n){if(sp[n]!=null&&sp[n])o[n]="1"});deftrue.forEach(function(n){if(sp[n]!=null&&!sp[n])o[n]="0"});if(sp.password)o.password=crypto_CreatePasswordVerifier_Method1(sp.password).toString(16).toUpperCase();return writextag("sheetProtection",null,o)}function parse_ws_xml_hlinks(s,data,rels){var dense=Array.isArray(s);for(var i=0;i!=data.length;++i){var val=parsexmltag(data[i],true);if(!val.ref)return;var rel=rels?rels["!id"][val.id]:null;if(rel){val.Target=rel.Target;if(val.location)val.Target+="#"+val.location;val.Rel=rel}else{val.Target=val.location;rel={Target:val.location,TargetMode:"Internal"};val.Rel=rel}if(val.tooltip){val.Tooltip=val.tooltip;delete val.tooltip}var rng=safe_decode_range(val.ref);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var addr=encode_cell({c:C,r:R});if(dense){if(!s[R])s[R]=[];if(!s[R][C])s[R][C]={t:"z",v:undefined};s[R][C].l=val}else{if(!s[addr])s[addr]={t:"z",v:undefined};s[addr].l=val}}}}function parse_ws_xml_margins(margin){var o={};["left","right","top","bottom","header","footer"].forEach(function(k){if(margin[k])o[k]=parseFloat(margin[k])});return o}function write_ws_xml_margins(margin){default_margins(margin);return writextag("pageMargins",null,margin)}function parse_ws_xml_cols(columns,cols){var seencol=false;for(var coli=0;coli!=cols.length;++coli){var coll=parsexmltag(cols[coli],true);if(coll.hidden)coll.hidden=parsexmlbool(coll.hidden);var colm=parseInt(coll.min,10)-1,colM=parseInt(coll.max,10)-1;delete coll.min;delete coll.max;coll.width=+coll.width;if(!seencol&&coll.width){seencol=true;find_mdw_colw(coll.width)}process_col(coll);while(colm<=colM)columns[colm++]=dup(coll)}}function write_ws_xml_cols(ws,cols){var o=[""],col,width;for(var i=0;i!=cols.length;++i){if(!(col=cols[i]))continue;o[o.length]=writextag("col",null,col_obj_w(i,col))}o[o.length]="";return o.join("")}function parse_ws_xml_autofilter(data){var o={ref:(data.match(/ref="([^"]*)"/)||[])[1]};return o}function write_ws_xml_autofilter(data){return writextag("autoFilter",null,{ref:data.ref})}function write_ws_xml_sheetviews(ws,opts,idx,wb){return writextag("sheetViews",writextag("sheetView",null,{workbookViewId:"0"}),{})}function write_ws_xml_cell(cell,ref,ws,opts,idx,wb){if(cell.v===undefined&&cell.f===undefined||cell.t==="z")return"";var vv="";var oldt=cell.t,oldv=cell.v;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"n":vv=""+cell.v;break;case"e":vv=BErr[cell.v];break;case"d":if(opts.cellDates)vv=parseDate(cell.v).toISOString();else{cell.t="n";vv=""+(cell.v=datenum(parseDate(cell.v)))}if(typeof cell.z==="undefined")cell.z=SSF._table[14];break;default:vv=cell.v;break;}var v=writetag("v",escapexml(vv)),o={r:ref};var os=get_cell_style(opts.cellXfs,cell,opts);if(os!==0)o.s=os;switch(cell.t){case"n":break;case"d":o.t="d";break;case"b":o.t="b";break;case"e":o.t="e";break;default:if(cell.v==null){delete cell.t;break}if(opts.bookSST){v=writetag("v",""+get_sst_id(opts.Strings,cell.v));o.t="s";break}o.t="str";break;}if(cell.t!=oldt){cell.t=oldt;cell.v=oldv}if(cell.f){var ff=cell.F&&cell.F.substr(0,ref.length)==ref?{t:"array",ref:cell.F}:null;v=writextag("f",escapexml(cell.f),ff)+(cell.v!=null?v:"")}if(cell.l)ws["!links"].push([ref,cell.l]);if(cell.c)ws["!comments"].push([ref,cell.c]);return writextag("c",v,o)}var parse_ws_xml_data=function parse_ws_xml_data_factory(){var cellregex=/<(?:\w+:)?c[ >]/,rowregex=/<\/(?:\w+:)?row>/;var rregex=/r=["']([^"']*)["']/,isregex=/<(?:\w+:)?is>([\S\s]*?)<\/(?:\w+:)?is>/;var refregex=/ref=["']([^"']*)["']/;var match_v=matchtag("v"),match_f=matchtag("f");return function parse_ws_xml_data(sdata,s,opts,guess,themes,styles){var ri=0,x="",cells=[],cref=[],idx=0,i=0,cc=0,d="",p;var tag,tagr=0,tagc=0;var sstr,ftag;var fmtid=0,fillid=0,do_format=Array.isArray(styles.CellXf),cf;var arrayf=[];var sharedf=[];var dense=Array.isArray(s);var rows=[],rowobj={},rowrite=false;for(var marr=sdata.split(rowregex),mt=0,marrlen=marr.length;mt!=marrlen;++mt){x=marr[mt].trim();var xlen=x.length;if(xlen===0)continue;for(ri=0;ritagr-1)guess.s.r=tagr-1;if(guess.e.r":"")+x;if(cref!=null&&cref.length===2){idx=0;d=cref[1];for(i=0;i!=d.length;++i){if((cc=d.charCodeAt(i)-64)<1||cc>26)break;idx=26*idx+cc}--idx;tagc=idx}else++tagc;for(i=0;i!=x.length;++i)if(x.charCodeAt(i)===62)break;++i;tag=parsexmltag(x.substr(0,i),true);if(!tag.r)tag.r=encode_cell({r:tagr-1,c:tagc});d=x.substr(i);p={t:""};if((cref=d.match(match_v))!=null&&cref[1]!=="")p.v=unescapexml(cref[1]);if(opts.cellFormula){if((cref=d.match(match_f))!=null&&cref[1]!==""){p.f=unescapexml(utf8read(cref[1])).replace(/_xlfn\./,"");if(cref[0].indexOf('t="array"')>-1){p.F=(d.match(refregex)||[])[1];if(p.F.indexOf(":")>-1)arrayf.push([safe_decode_range(p.F),p.F])}else if(cref[0].indexOf('t="shared"')>-1){ftag=parsexmltag(cref[0]);sharedf[parseInt(ftag.si,10)]=[ftag,unescapexml(utf8read(cref[1]))]}}else if(cref=d.match(/]*\/>/)){ftag=parsexmltag(cref[0]);if(sharedf[ftag.si])p.f=shift_formula_xlsx(sharedf[ftag.si][1],sharedf[ftag.si][0].ref,tag.r)}var _tag=decode_cell(tag.r);for(i=0;i=arrayf[i][0].s.r&&_tag.r<=arrayf[i][0].e.r)if(_tag.c>=arrayf[i][0].s.c&&_tag.c<=arrayf[i][0].e.c)p.F=arrayf[i][1]}if(tag.t==null&&p.v===undefined){if(p.f||p.F){p.v=0;p.t="n"}else if(!opts.sheetStubs)continue;else p.t="z"}else p.t=tag.t||"n";if(guess.s.c>idx)guess.s.c=idx;if(guess.e.c0)s["!rows"]=rows}}();function write_ws_xml_data(ws,opts,idx,wb,rels){var o=[],r=[],range=safe_decode_range(ws["!ref"]),cell,ref,rr="",cols=[],R=0,C=0,rows=ws["!rows"];var dense=Array.isArray(ws);for(C=range.s.c;C<=range.e.c;++C)cols[C]=encode_col(C);for(R=range.s.r;R<=range.e.r;++R){r=[];rr=encode_row(R);for(C=range.s.c;C<=range.e.c;++C){ref=cols[C]+rr;var _cell=dense?(ws[R]||[])[C]:ws[ref];if(_cell===undefined)continue;if((cell=write_ws_xml_cell(_cell,ref,ws,opts,idx,wb))!=null)r.push(cell)}if(r.length>0){var params={r:rr};if(rows&&rows[R]){var row=rows[R];if(row.hidden)params.hidden=1;var height=-1;if(row.hpx)height=px2pt(row.hpx);else if(row.hpt)height=row.hpt;if(height>-1){params.ht=height;params.customHeight=1}}o[o.length]=writextag("row",r.join(""),params)}}return o.join("")}var WS_XML_ROOT=writextag("worksheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function write_ws_xml(idx,opts,wb,rels){var o=[XML_HEADER,WS_XML_ROOT];var s=wb.SheetNames[idx],sidx=0,rdata="";var ws=wb.Sheets[s];if(ws==null)ws={};var ref=ws["!ref"];if(ref==null)ref="A1";if(!rels)rels={};ws["!comments"]=[];ws["!drawing"]=[];o[o.length]=writextag("sheetPr",null,{codeName:escapexml(wb.SheetNames[idx])});o[o.length]=writextag("dimension",null,{ref:ref});o[o.length]=write_ws_xml_sheetviews(ws,opts,idx,wb);if(opts.sheetFormat)o[o.length]=writextag("sheetFormatPr",null,{defaultRowHeight:opts.sheetFormat.defaultRowHeight||"16",baseColWidth:opts.sheetFormat.baseColWidth||"10" +});if(ws["!cols"]!=null&&ws["!cols"].length>0)o[o.length]=write_ws_xml_cols(ws,ws["!cols"]);o[sidx=o.length]="";ws["!links"]=[];if(ws["!ref"]!=null){rdata=write_ws_xml_data(ws,opts,idx,wb,rels);if(rdata.length>0)o[o.length]=rdata}if(o.length>sidx+1){o[o.length]="";o[sidx]=o[sidx].replace("/>",">")}if(ws["!protect"]!=null)o[o.length]=write_ws_xml_protection(ws["!protect"]);if(ws["!autofilter"]!=null)o[o.length]=write_ws_xml_autofilter(ws["!autofilter"]);if(ws["!merges"]!=null&&ws["!merges"].length>0)o[o.length]=write_ws_xml_merges(ws["!merges"]);var relc=-1,rel,rId=-1;if(ws["!links"].length>0){o[o.length]="";ws["!links"].forEach(function(l){if(!l[1].Target)return;rId=add_rels(rels,-1,escapexml(l[1].Target).replace(/#.*$/,""),RELS.HLINK);rel={ref:l[0],"r:id":"rId"+rId};if((relc=l[1].Target.indexOf("#"))>-1)rel.location=escapexml(l[1].Target.substr(relc+1));if(l[1].Tooltip)rel.tooltip=escapexml(l[1].Tooltip);o[o.length]=writextag("hyperlink",null,rel)});o[o.length]=""}delete ws["!links"];if(ws["!margins"]!=null)o[o.length]=write_ws_xml_margins(ws["!margins"]);var hfidx=o.length;o[o.length]="";if(ws["!drawing"].length>0){rId=add_rels(rels,-1,"../drawings/drawing"+(idx+1)+".xml",RELS.DRAW);o[o.length]=writextag("drawing",null,{"r:id":"rId"+rId})}else delete ws["!drawing"];if(ws["!comments"].length>0){rId=add_rels(rels,-1,"../drawings/vmlDrawing"+(idx+1)+".vml",RELS.VML);o[o.length]=writextag("legacyDrawing",null,{"r:id":"rId"+rId});ws["!legacy"]=rId}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtRowHdr(data,length){var z={};var tgt=data.l+length;z.r=data.read_shift(4);data.l+=4;var miyRw=data.read_shift(2);data.l+=1;var flags=data.read_shift(1);data.l=tgt;if(flags&16)z.hidden=true;if(flags&32)z.hpt=miyRw/20;return z}function write_BrtRowHdr(R,range,ws){var o=new_buf(17+8*16);var row=(ws["!rows"]||[])[R]||{};o.write_shift(4,R);o.write_shift(4,0);var miyRw=320;if(row.hpx)miyRw=px2pt(row.hpx)*20;else if(row.hpt)miyRw=row.hpt*20;o.write_shift(2,miyRw);o.write_shift(1,0);var flags=0;if(row.hidden)flags|=16;if(row.hpx||row.hpt)flags|=32;o.write_shift(1,flags);o.write_shift(1,0);var ncolspan=0,lcs=o.l;o.l+=4;var caddr={r:R,c:0};for(var i=0;i<16;++i){if(range.s.c>i+1<<10||range.e.co.l?o.slice(0,o.l):o}function write_row_header(ba,ws,range,R){var o=write_BrtRowHdr(R,range,ws);if(o.length>17)write_record(ba,"BrtRowHdr",o)}var parse_BrtWsDim=parse_UncheckedRfX;var write_BrtWsDim=write_UncheckedRfX;function parse_BrtWsProp(data,length){var z={};data.l+=19;z.name=parse_XLSBCodeName(data,length-19);return z}function write_BrtWsProp(str,o){if(o==null)o=new_buf(84+4*str.length);for(var i=0;i<3;++i)o.write_shift(1,0);write_BrtColor({auto:1},o);o.write_shift(-4,-1);o.write_shift(-4,-1);write_XLSBCodeName(str,o);return o.slice(0,o.l)}function parse_BrtCellBlank(data,length){var cell=parse_XLSBCell(data);return[cell]}function write_BrtCellBlank(cell,ncell,o){if(o==null)o=new_buf(8);return write_XLSBCell(ncell,o)}function parse_BrtCellBool(data,length){var cell=parse_XLSBCell(data);var fBool=data.read_shift(1);return[cell,fBool,"b"]}function write_BrtCellBool(cell,ncell,o){if(o==null)o=new_buf(9);write_XLSBCell(ncell,o);o.write_shift(1,cell.v?1:0);return o}function parse_BrtCellError(data,length){var cell=parse_XLSBCell(data);var bError=data.read_shift(1);return[cell,bError,"e"]}function parse_BrtCellIsst(data,length){var cell=parse_XLSBCell(data);var isst=data.read_shift(4);return[cell,isst,"s"]}function write_BrtCellIsst(cell,ncell,o){if(o==null)o=new_buf(12);write_XLSBCell(ncell,o);o.write_shift(4,ncell.v);return o}function parse_BrtCellReal(data,length){var cell=parse_XLSBCell(data);var value=parse_Xnum(data);return[cell,value,"n"]}function write_BrtCellReal(cell,ncell,o){if(o==null)o=new_buf(16);write_XLSBCell(ncell,o);write_Xnum(cell.v,o);return o}function parse_BrtCellRk(data,length){var cell=parse_XLSBCell(data);var value=parse_RkNumber(data);return[cell,value,"n"]}function write_BrtCellRk(cell,ncell,o){if(o==null)o=new_buf(12);write_XLSBCell(ncell,o);write_RkNumber(cell.v,o);return o}function parse_BrtCellSt(data,length){var cell=parse_XLSBCell(data);var value=parse_XLWideString(data);return[cell,value,"str"]}function write_BrtCellSt(cell,ncell,o){if(o==null)o=new_buf(12+4*cell.v.length);write_XLSBCell(ncell,o);write_XLWideString(cell.v,o);return o.length>o.l?o.slice(0,o.l):o}function parse_BrtFmlaBool(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=data.read_shift(1);var o=[cell,value,"b"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}function parse_BrtFmlaError(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=data.read_shift(1);var o=[cell,value,"e"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}function parse_BrtFmlaNum(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=parse_Xnum(data);var o=[cell,value,"n"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}function parse_BrtFmlaString(data,length,opts){var end=data.l+length;var cell=parse_XLSBCell(data);cell.r=opts["!row"];var value=parse_XLWideString(data);var o=[cell,value,"str"];if(opts.cellFormula){data.l+=2;var formula=parse_XLSBCellParsedFormula(data,end-data.l,opts);o[3]=stringify_formula(formula,null,cell,opts.supbooks,opts)}else data.l=end;return o}var parse_BrtMergeCell=parse_UncheckedRfX;var write_BrtMergeCell=write_UncheckedRfX;function write_BrtBeginMergeCells(cnt,o){if(o==null)o=new_buf(4);o.write_shift(4,cnt);return o}function parse_BrtHLink(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var relId=parse_XLNullableWideString(data);var loc=parse_XLWideString(data);var tooltip=parse_XLWideString(data);var display=parse_XLWideString(data);data.l=end;return{rfx:rfx,relId:relId,loc:loc,Tooltip:tooltip,display:display}}function write_BrtHLink(l,rId,o){if(o==null)o=new_buf(50+4*l[1].Target.length);write_UncheckedRfX({s:decode_cell(l[0]),e:decode_cell(l[0])},o);write_RelID("rId"+rId,o);var locidx=l[1].Target.indexOf("#");var loc=locidx==-1?"":l[1].Target.substr(locidx+1);write_XLWideString(loc||"",o);write_XLWideString(l[1].Tooltip||"",o);write_XLWideString("",o);return o.slice(0,o.l)}function parse_BrtArrFmla(data,length,opts){var end=data.l+length;var rfx=parse_RfX(data,16);var fAlwaysCalc=data.read_shift(1);var o=[rfx];o[2]=fAlwaysCalc;if(opts.cellFormula){var formula=parse_XLSBArrayParsedFormula(data,end-data.l,opts);o[1]=formula}else data.l=end;return o}function parse_BrtShrFmla(data,length,opts){var end=data.l+length;var rfx=parse_UncheckedRfX(data,16);var o=[rfx];if(opts.cellFormula){var formula=parse_XLSBSharedParsedFormula(data,end-data.l,opts);o[1]=formula;data.l=end}else data.l=end;return o}function write_BrtColInfo(C,col,o){if(o==null)o=new_buf(18);var p=col_obj_w(C,col);o.write_shift(-4,C);o.write_shift(-4,C);o.write_shift(4,(p.width||10)*256);o.write_shift(4,0);var flags=0;if(col.hidden)flags|=1;if(typeof p.width=="number")flags|=2;o.write_shift(1,flags);o.write_shift(1,0);return o}function parse_BrtMargins(data,length,opts){return{left:parse_Xnum(data,8),right:parse_Xnum(data,8),top:parse_Xnum(data,8),bottom:parse_Xnum(data,8),header:parse_Xnum(data,8),footer:parse_Xnum(data,8)}}function write_BrtMargins(margins,o){if(o==null)o=new_buf(6*8);default_margins(margins);write_Xnum(margins.left,o);write_Xnum(margins.right,o);write_Xnum(margins.top,o);write_Xnum(margins.bottom,o);write_Xnum(margins.header,o);write_Xnum(margins.footer,o);return o}function write_BrtBeginWsView(ws,o){if(o==null)o=new_buf(30);o.write_shift(2,924);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(4,0);o.write_shift(1,0);o.write_shift(1,0);o.write_shift(2,0);o.write_shift(2,100);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(2,0);o.write_shift(4,0);return o}function write_BrtSheetProtection(sp,o){if(o==null)o=new_buf(16*4+2);o.write_shift(2,sp.password?crypto_CreatePasswordVerifier_Method1(sp.password):0);o.write_shift(4,1);[["objects",false],["scenarios",false],["formatCells",true],["formatColumns",true],["formatRows",true],["insertColumns",true],["insertRows",true],["insertHyperlinks",true],["deleteColumns",true],["deleteRows",true],["selectLockedCells",false],["sort",true],["autoFilter",true],["pivotTables",true],["selectUnlockedCells",false]].forEach(function(n){if(n[1])o.write_shift(4,sp[n[0]]!=null&&!sp[n[0]]?1:0);else o.write_shift(4,sp[n[0]]!=null&&sp[n[0]]?0:1)});return o}function parse_ws_bin(data,_opts,rels,wb,themes,styles){if(!data)return data;var opts=_opts||{};if(!rels)rels={"!id":{}};if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var s=opts.dense?[]:{};var ref;var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};var pass=false,end=false;var row,p,cf,R,C,addr,sstr,rr,cell;var mergecells=[];opts.biff=12;opts["!row"]=0;var ai=0,af=false;var array_formulae=[];var shared_formulae={};var supbooks=[[]];supbooks.sharedf=shared_formulae;supbooks.arrayf=array_formulae;supbooks.SheetNames=wb.SheetNames||wb.Sheets.map(function(x){return x.name});opts.supbooks=supbooks;for(var i=0;i=aii[0].s.r&&row.r<=aii[0].e.r)if(C>=aii[0].s.c&&C<=aii[0].e.c){p.F=encode_range(aii[0]);af=true}}if(!af&&val.length>3)p.f=val[3]}if(refguess.s.r>row.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.rrow.r)refguess.s.r=row.r;if(refguess.s.c>C)refguess.s.c=C;if(refguess.e.r=val.s){colinfo[val.e--]={width:val.w/256,hidden:!!(val.flags&1)};if(!seencol){seencol=true;find_mdw_colw(val.w/256)}process_col(colinfo[val.e+1])}break;case 161:s["!autofilter"]={ref:encode_range(val)};break;case 476:s["!margins"]=val;break;case 175:;case 644:;case 625:;case 562:;case 396:;case 1112:;case 1146:;case 471:;case 1050:;case 649:;case 1105:;case 49:;case 589:;case 607:;case 564:;case 1055:;case 168:;case 174:;case 1180:;case 499:;case 64:;case 1053:;case 550:;case 171:;case 167:;case 1177:;case 169:;case 1181:;case 551:;case 552:;case 661:;case 639:;case 478:;case 151:;case 537:;case 477:;case 536:;case 1103:;case 680:;case 1104:;case 1024:;case 152:;case 663:;case 535:;case 678:;case 504:;case 1043:;case 428:;case 170:;case 50:;case 2070:;case 485:;case 1045:;case 147:break;case 35:pass=true;break;case 36:pass=false;break;case 37:break;case 38:break;default:if((R_n||"").indexOf("Begin")>0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}},opts);delete opts.supbooks;delete opts["!row"];if(!s["!ref"]&&(refguess.s.r<2e6||ref&&(ref.e.r>0||ref.e.c>0||ref.s.r>0||ref.s.c>0)))s["!ref"]=encode_range(ref||refguess);if(opts.sheetRows&&s["!ref"]){var tmpref=safe_decode_range(s["!ref"]);if(opts.sheetRows<+tmpref.e.r){tmpref.e.r=opts.sheetRows-1;if(tmpref.e.r>refguess.e.r)tmpref.e.r=refguess.e.r;if(tmpref.e.rrefguess.e.c)tmpref.e.c=refguess.e.c;if(tmpref.e.c0)s["!merges"]=mergecells;if(colinfo.length>0)s["!cols"]=colinfo;if(rowinfo.length>0)s["!rows"]=rowinfo;return s}function write_ws_bin_cell(ba,cell,R,C,opts,ws){if(cell.v===undefined)return"";var vv="";var olddate=null;switch(cell.t){case"b":vv=cell.v?"1":"0";break;case"d":cell.z=cell.z||SSF._table[14];olddate=cell.v;cell.v=datenum(cell.v);cell.t="n";break;case"n":;case"e":vv=""+cell.v;break;default:vv=cell.v;break;}var o={r:R,c:C};o.s=get_cell_style(opts.cellXfs,cell,opts);if(cell.l)ws["!links"].push([encode_cell(o),cell.l]);if(cell.c)ws["!comments"].push([encode_cell(o),cell.c]);switch(cell.t){case"s":;case"str":if(opts.bookSST){vv=get_sst_id(opts.Strings,cell.v);o.t="s";o.v=vv;write_record(ba,"BrtCellIsst",write_BrtCellIsst(cell,o))}else{o.t="str";write_record(ba,"BrtCellSt",write_BrtCellSt(cell,o))}return;case"n":if(cell.v==(cell.v|0)&&cell.v>-1e3&&cell.v<1e3)write_record(ba,"BrtCellRk",write_BrtCellRk(cell,o));else write_record(ba,"BrtCellReal",write_BrtCellReal(cell,o));if(olddate){cell.t="d";cell.v=olddate}return;case"b":o.t="b";write_record(ba,"BrtCellBool",write_BrtCellBool(cell,o));return;case"e":o.t="e";break;}write_record(ba,"BrtCellBlank",write_BrtCellBlank(cell,o))}function write_CELLTABLE(ba,ws,idx,opts,wb){var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];write_record(ba,"BrtBeginSheetData");var dense=Array.isArray(ws);for(var R=range.s.r;R<=range.e.r;++R){rr=encode_row(R);write_row_header(ba,ws,range,R);for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;var cell=dense?(ws[R]||[])[C]:ws[ref];if(!cell)continue;write_ws_bin_cell(ba,cell,R,C,opts,ws)}}write_record(ba,"BrtEndSheetData")}function write_MERGECELLS(ba,ws){if(!ws||!ws["!merges"])return;write_record(ba,"BrtBeginMergeCells",write_BrtBeginMergeCells(ws["!merges"].length));ws["!merges"].forEach(function(m){write_record(ba,"BrtMergeCell",write_BrtMergeCell(m))});write_record(ba,"BrtEndMergeCells")}function write_COLINFOS(ba,ws,idx,opts,wb){if(!ws||!ws["!cols"])return;write_record(ba,"BrtBeginColInfos");ws["!cols"].forEach(function(m,i){if(m)write_record(ba,"BrtColInfo",write_BrtColInfo(i,m))});write_record(ba,"BrtEndColInfos")}function write_HLINKS(ba,ws,rels){ws["!links"].forEach(function(l){if(!l[1].Target)return;var rId=add_rels(rels,-1,l[1].Target.replace(/#.*$/,""),RELS.HLINK);write_record(ba,"BrtHLink",write_BrtHLink(l,rId))});delete ws["!links"]}function write_LEGACYDRAWING(ba,ws,idx,rels){if(ws["!comments"].length>0){var rId=add_rels(rels,-1,"../drawings/vmlDrawing"+(idx+1)+".vml",RELS.VML);write_record(ba,"BrtLegacyDrawing",write_RelID("rId"+rId));ws["!legacy"]=rId}}function write_AUTOFILTER(ba,ws){if(!ws["!autofilter"])return;write_record(ba,"BrtBeginAFilter",write_UncheckedRfX(decode_range(ws["!autofilter"].ref)));write_record(ba,"BrtEndAFilter")}function write_WSVIEWS2(ba,ws){write_record(ba,"BrtBeginWsViews");{write_record(ba,"BrtBeginWsView",write_BrtBeginWsView(ws));write_record(ba,"BrtEndWsView")}write_record(ba,"BrtEndWsViews")}function write_WSFMTINFO(ba,ws){}function write_SHEETPROTECT(ba,ws){if(!ws["!protect"])return;write_record(ba,"BrtSheetProtection",write_BrtSheetProtection(ws["!protect"]))}function write_ws_bin(idx,opts,wb,rels){var ba=buf_array();var s=wb.SheetNames[idx],ws=wb.Sheets[s]||{};var r=safe_decode_range(ws["!ref"]||"A1");ws["!links"]=[];ws["!comments"]=[];write_record(ba,"BrtBeginSheet");write_record(ba,"BrtWsProp",write_BrtWsProp(s));write_record(ba,"BrtWsDim",write_BrtWsDim(r));write_WSVIEWS2(ba,ws);write_WSFMTINFO(ba,ws);write_COLINFOS(ba,ws,idx,opts,wb);write_CELLTABLE(ba,ws,idx,opts,wb);write_SHEETPROTECT(ba,ws);write_AUTOFILTER(ba,ws);write_MERGECELLS(ba,ws);write_HLINKS(ba,ws,rels);if(ws["!margins"])write_record(ba,"BrtMargins",write_BrtMargins(ws["!margins"]));write_LEGACYDRAWING(ba,ws,idx,rels);write_record(ba,"BrtEndSheet");return ba.end()}function parse_numCache(data){var col=[];(data.match(/(.*?)<\/c:pt>/gm)||[]).forEach(function(pt){var q=pt.match(/(.*)<\/c:v><\/c:pt>/);if(!q)return;col[+q[1]]=+q[2]});var nf=unescapexml((data.match(/(.*?)<\/c:formatCode>/)||["","General"])[1]);return[col,nf]}function parse_chart(data,name,opts,rels,wb,csheet){var cs=csheet||{"!type":"chart"};if(!data)return csheet;var C=0,R=0,col="A";var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};(data.match(/.*?<\/c:numCache>/gm)||[]).forEach(function(nc){var cache=parse_numCache(nc);refguess.s.r=refguess.s.c=0;refguess.e.c=C;col=encode_col(C);cache[0].forEach(function(n,i){cs[col+encode_row(i)]={t:"n",v:n,z:cache[1]};R=i});if(refguess.e.r0)cs["!ref"]=encode_range(refguess);return cs}RELS.CS="http://schemas.openxmlformats.org/officeDocument/2006/relationships/chartsheet";var CS_XML_ROOT=writextag("chartsheet",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function parse_cs_xml(data,opts,rels,wb,themes,styles){if(!data)return data;if(!rels)rels={"!id":{}};var s={"!type":"chart","!chart":null,"!rel":""};var m;if(m=data.match(/drawing r:id="(.*?)"/))s["!rel"]=m[1];if(rels["!id"][s["!rel"]])s["!chart"]=rels["!id"][s["!rel"]];return s}function write_cs_xml(idx,opts,wb,rels){var o=[XML_HEADER,CS_XML_ROOT];o[o.length]=writextag("drawing",null,{"r:id":"rId1"});add_rels(rels,-1,"../drawings/drawing"+(idx+1)+".xml",RELS.DRAW);if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_cs_bin(data,opts,rels,wb,themes,styles){if(!data)return data;if(!rels)rels={"!id":{}};var s={"!type":"chart","!chart":null,"!rel":""};var state=[];var pass=false;recordhopper(data,function cs_parse(val,R_n,RT){switch(RT){case 550:s["!rel"]=val;break;case 562:;case 652:;case 651:;case 669:;case 679:;case 551:;case 552:;case 476:break;case 35:pass=true;break;case 36:pass=false;break;case 37:state.push(R_n);break;case 38:state.pop();break;default:if((R_n||"").indexOf("Begin")>0)state.push(R_n);else if((R_n||"").indexOf("End")>0)state.pop();else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}},opts);if(rels["!id"][s["!rel"]])s["!chart"]=rels["!id"][s["!rel"]];return s}function write_cs_bin(idx,opts,wb,rels){var ba=buf_array();write_record(ba,"BrtBeginSheet");write_record(ba,"BrtEndSheet");return ba.end()}var WBPropsDef=[["allowRefreshQuery","0"],["autoCompressPictures","1"],["backupFile","0"],["checkCompatibility","0"],["codeName",""],["date1904","0"],["dateCompatibility","1"],["filterPrivacy","0"],["hidePivotFieldList","0"],["promptedSolutions","0"],["publishItems","0"],["refreshAllConnections",false],["saveExternalLinkValues","1"],["showBorderUnselectedTables","1"],["showInkAnnotation","1"],["showObjects","all"],["showPivotChartFilter","0"]];var WBViewDef=[["activeTab","0"],["autoFilterDateGrouping","1"],["firstSheet","0"],["minimized","0"],["showHorizontalScroll","1"],["showSheetTabs","1"],["showVerticalScroll","1"],["tabRatio","600"],["visibility","visible"]];var SheetDef=[];var CalcPrDef=[["calcCompleted","true"],["calcMode","auto"],["calcOnSave","true"],["concurrentCalc","true"],["fullCalcOnLoad","false"],["fullPrecision","true"],["iterate","false"],["iterateCount","100"],["iterateDelta","0.001"],["refMode","A1"]];var CustomWBViewDef=[["autoUpdate","false"],["changesSavedWin","false"],["includeHiddenRowCol","true"],["includePrintSettings","true"],["maximized","false"],["minimized","false"],["onlySync","false"],["personalView","false"],["showComments","commIndicator"],["showFormulaBar","true"],["showHorizontalScroll","true"],["showObjects","all"],["showSheetTabs","true"],["showStatusbar","true"],["showVerticalScroll","true"],["tabRatio","600"],["xWindow","0"],["yWindow","0"]];function push_defaults_array(target,defaults){for(var j=0;j!=target.length;++j){var w=target[j];for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(w[z[0]]==null)w[z[0]]=z[1]}}}function push_defaults(target,defaults){for(var i=0;i!=defaults.length;++i){var z=defaults[i];if(target[z[0]]==null)target[z[0]]=z[1]}}function parse_wb_defaults(wb){push_defaults(wb.WBProps,WBPropsDef);push_defaults(wb.CalcPr,CalcPrDef);push_defaults_array(wb.WBView,WBViewDef);push_defaults_array(wb.Sheets,SheetDef);_ssfopts.date1904=parsexmlbool(wb.WBProps.date1904,"date1904")}var badchars="][*?/\\".split("");function check_ws_name(n,safe){if(n.length>31){if(safe)return false;throw new Error("Sheet names cannot exceed 31 chars")}var _good=true;badchars.forEach(function(c){if(n.indexOf(c)==-1)return;if(!safe)throw new Error("Sheet name cannot contain : \\ / ? * [ ]");_good=false});return _good}function check_wb_names(N){N.forEach(function(n,i){check_ws_name(n);for(var j=0;j":break;case"":;case"":break;case"":break;case"":delete y[0];wb.WBProps=y;break;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":break;case"":break;case"":break;case"":;case"":break;case"":break;case"":;case"":pass=false;break;case"":{dname.Ref=data.slice(dnstart,idx);wb.Names.push(dname)}break;case"":break;case"":delete y[0];wb.CalcPr=y;break;case"":break;case"":;case"":;case"":break;case"":;case"":;case"":break;case"":;case"":break;case"":break;case"":break;case"":;case"":break;case"":;case"":;case"":break;case"":pass=false;break;case"":pass=false;break;default:if(!pass&&opts.WTF)throw new Error("unrecognized "+y[0]+" in workbook");}return x});if(XMLNS.main.indexOf(wb.xmlns)===-1)throw new Error("Unknown Namespace: "+wb.xmlns);parse_wb_defaults(wb);return wb}var WB_XML_ROOT=writextag("workbook",null,{xmlns:XMLNS.main[0],"xmlns:r":XMLNS.r});function safe1904(wb){if(!wb.Workbook)return"false";if(!wb.Workbook.WBProps)return"false";return parsexmlbool(wb.Workbook.WBProps.date1904)?"true":"false"}function write_wb_xml(wb,opts){var o=[XML_HEADER];o[o.length]=WB_XML_ROOT;var write_names=wb.Workbook&&(wb.Workbook.Names||[]).length>0;o[o.length]=writextag("workbookPr",null,{date1904:safe1904(wb),codeName:"ThisWorkbook"});o[o.length]="";var sheets=wb.Workbook&&wb.Workbook.Sheets||[];for(var i=0;i!=wb.SheetNames.length;++i){var sht={name:escapexml(wb.SheetNames[i].substr(0,31))};sht.sheetId=""+(i+1);sht["r:id"]="rId"+(i+1);if(sheets[i])switch(sheets[i].Hidden){case 1:sht.state="hidden";break;case 2:sht.state="veryHidden";break;}o[o.length]=writextag("sheet",null,sht)}o[o.length]="";if(write_names){o[o.length]="";if(wb.Workbook&&wb.Workbook.Names)wb.Workbook.Names.forEach(function(n){var d={name:n.Name};if(n.Comment)d.comment=n.Comment;if(n.Sheet!=null)d.localSheetId=""+n.Sheet;if(!n.Ref)return;o[o.length]=writextag("definedName",String(n.Ref),d)});o[o.length]=""}if(o.length>2){o[o.length]="";o[1]=o[1].replace("/>",">")}return o.join("")}function parse_BrtBundleSh(data,length){var z={};z.Hidden=data.read_shift(4);z.iTabID=data.read_shift(4);z.strRelID=parse_RelID(data,length-8);z.name=parse_XLWideString(data);return z}function write_BrtBundleSh(data,o){if(!o)o=new_buf(127);o.write_shift(4,data.Hidden);o.write_shift(4,data.iTabID);write_RelID(data.strRelID,o);write_XLWideString(data.name.substr(0,31),o);return o.length>o.l?o.slice(0,o.l):o}function parse_BrtWbProp(data,length){data.read_shift(4);var dwThemeVersion=data.read_shift(4);var strName=length>8?parse_XLWideString(data):"";return[dwThemeVersion,strName]}function write_BrtWbProp(data,o){if(!o)o=new_buf(72);o.write_shift(4,0);o.write_shift(4,0);write_XLSBCodeName("ThisWorkbook",o);return o.slice(0,o.l)}function parse_BrtFRTArchID$(data,length){var o={};data.read_shift(4);o.ArchID=data.read_shift(4);data.l+=length-8;return o}function parse_BrtName(data,length,opts){var end=data.l+length;var flags=data.read_shift(4);var chKey=data.read_shift(1);var itab=data.read_shift(4);var name=parse_XLNameWideString(data);var formula=parse_XLSBNameParsedFormula(data,0,opts);var comment=parse_XLNullableWideString(data);data.l=end;var out={Name:name,Ptg:formula,Comment:comment};if(itab<268435455)out.Sheet=itab;return out}function parse_wb_bin(data,opts){var wb={AppVersion:{},WBProps:{},WBView:[],Sheets:[],CalcPr:{},xmlns:""};var pass=false,z;if(!opts)opts={};opts.biff=12;var Names=[];var supbooks=[];supbooks.SheetNames=[];recordhopper(data,function hopper_wb(val,R_n,RT){switch(RT){case 156:supbooks.SheetNames.push(val.name);wb.Sheets.push(val);break;case 39:val.Ref=stringify_formula(val.Ptg,null,null,supbooks,opts);delete val.Ptg;Names.push(val);break;case 1036:break;case 2071:;case 534:;case 677:;case 158:;case 157:;case 610:;case 2050:;case 362:;case 155:;case 548:;case 676:;case 128:;case 665:;case 2128:;case 2125:;case 549:;case 2053:;case 361:;case 596:;case 667:;case 355:;case 358:;case 357:;case 2076:;case 2075:;case 2082:;case 397:;case 154:;case 153:;case 1117:;case 553:;case 2091:break;case 35:pass=true;break;case 36:pass=false;break;case 37:break;case 38:break;case 16:break;default:if((R_n||"").indexOf("Begin")>0){}else if((R_n||"").indexOf("End")>0){}else if(!pass||opts.WTF)throw new Error("Unexpected record "+RT+" "+R_n);}},opts);parse_wb_defaults(wb);wb.Names=Names;return wb}function write_BUNDLESHS(ba,wb,opts){write_record(ba,"BrtBeginBundleShs");for(var idx=0;idx!=wb.SheetNames.length;++idx){var viz=wb.Workbook&&wb.Workbook.Sheets&&wb.Workbook.Sheets[idx]&&wb.Workbook.Sheets[idx].Hidden||0;var d={Hidden:viz,iTabID:idx+1,strRelID:"rId"+(idx+1),name:wb.SheetNames[idx]};write_record(ba,"BrtBundleSh",write_BrtBundleSh(d))}write_record(ba,"BrtEndBundleShs")}function write_BrtFileVersion(data,o){if(!o)o=new_buf(127);for(var i=0;i!=4;++i)o.write_shift(4,0);write_XLWideString("SheetJS",o);write_XLWideString(XLSX.version,o);write_XLWideString(XLSX.version,o);write_XLWideString("7262",o);o.length=o.l;return o.length>o.l?o.slice(0,o.l):o}function write_BrtBookView(idx,o){if(!o)o=new_buf(29);o.write_shift(-4,0);o.write_shift(-4,460);o.write_shift(4,28800);o.write_shift(4,17600);o.write_shift(4,500);o.write_shift(4,idx);o.write_shift(4,idx);var flags=120;o.write_shift(1,flags);return o.length>o.l?o.slice(0,o.l):o}function write_BOOKVIEWS(ba,wb,opts){if(!wb.Workbook||!wb.Workbook.Sheets)return;var sheets=wb.Workbook.Sheets;var i=0,vistab=-1,hidden=-1;for(;ivistab)return;write_record(ba,"BrtBeginBookViews");write_record(ba,"BrtBookView",write_BrtBookView(vistab));write_record(ba,"BrtEndBookViews")}function write_BrtCalcProp(data,o){if(!o)o=new_buf(26);o.write_shift(4,0);o.write_shift(4,1);o.write_shift(4,0);write_Xnum(0,o);o.write_shift(-4,1023);o.write_shift(1,51);o.write_shift(1,0);return o}function write_BrtFileRecover(data,o){if(!o)o=new_buf(1);o.write_shift(1,0);return o}function write_wb_bin(wb,opts){var ba=buf_array();write_record(ba,"BrtBeginBook");write_record(ba,"BrtFileVersion",write_BrtFileVersion());write_record(ba,"BrtWbProp",write_BrtWbProp());write_BOOKVIEWS(ba,wb,opts);write_BUNDLESHS(ba,wb,opts);write_record(ba,"BrtEndBook");return ba.end()}function parse_wb(data,name,opts){if(name.slice(-4)===".bin")return parse_wb_bin(data,opts);return parse_wb_xml(data,opts)}function parse_ws(data,name,opts,rels,wb,themes,styles){if(name.slice(-4)===".bin")return parse_ws_bin(data,opts,rels,wb,themes,styles);return parse_ws_xml(data,opts,rels,wb,themes,styles)}function parse_cs(data,name,opts,rels,wb,themes,styles){if(name.slice(-4)===".bin")return parse_cs_bin(data,opts,rels,wb,themes,styles);return parse_cs_xml(data,opts,rels,wb,themes,styles)}function parse_ms(data,name,opts,rels,wb,themes,styles){ +if(name.slice(-4)===".bin")return parse_ms_bin(data,opts,rels,wb,themes,styles);return parse_ms_xml(data,opts,rels,wb,themes,styles)}function parse_ds(data,name,opts,rels,wb,themes,styles){if(name.slice(-4)===".bin")return parse_ds_bin(data,opts,rels,wb,themes,styles);return parse_ds_xml(data,opts,rels,wb,themes,styles)}function parse_sty(data,name,themes,opts){if(name.slice(-4)===".bin")return parse_sty_bin(data,themes,opts);return parse_sty_xml(data,themes,opts)}function parse_theme(data,name,opts){return parse_theme_xml(data,opts)}function parse_sst(data,name,opts){if(name.slice(-4)===".bin")return parse_sst_bin(data,opts);return parse_sst_xml(data,opts)}function parse_cmnt(data,name,opts){if(name.slice(-4)===".bin")return parse_comments_bin(data,opts);return parse_comments_xml(data,opts)}function parse_cc(data,name,opts){if(name.slice(-4)===".bin")return parse_cc_bin(data,opts);return parse_cc_xml(data,opts)}function write_wb(wb,name,opts){return(name.slice(-4)===".bin"?write_wb_bin:write_wb_xml)(wb,opts)}function write_ws(data,name,opts,wb,rels){return(name.slice(-4)===".bin"?write_ws_bin:write_ws_xml)(data,opts,wb,rels)}function write_cs(data,name,opts,wb,rels){return(name.slice(-4)===".bin"?write_cs_bin:write_cs_xml)(data,opts,wb,rels)}function write_sty(data,name,opts){return(name.slice(-4)===".bin"?write_sty_bin:write_sty_xml)(data,opts)}function write_sst(data,name,opts){return(name.slice(-4)===".bin"?write_sst_bin:write_sst_xml)(data,opts)}function write_cmnt(data,name,opts){return(name.slice(-4)===".bin"?write_comments_bin:write_comments_xml)(data,opts)}var attregexg2=/([\w:]+)=((?:")([^"]*)(?:")|(?:')([^']*)(?:'))/g;var attregex2=/([\w:]+)=((?:")(?:[^"]*)(?:")|(?:')(?:[^']*)(?:'))/;var _chr=function(c){return String.fromCharCode(c)};function xlml_parsexmltag(tag,skip_root){var words=tag.split(/\s+/);var z=[];if(!skip_root)z[0]=words[0];if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_parsexmltagobj(tag){var words=tag.split(/\s+/);var z={};if(words.length===1)return z;var m=tag.match(attregexg2),y,j,w,i;if(m)for(i=0;i!=m.length;++i){y=m[i].match(attregex2);if((j=y[1].indexOf(":"))===-1)z[y[1]]=y[2].substr(1,y[2].length-2);else{if(y[1].substr(0,6)==="xmlns:")w="xmlns"+y[1].substr(6);else w=y[1].substr(j+1);z[w]=y[2].substr(1,y[2].length-2)}}return z}function xlml_format(format,value){var fmt=XLMLFormatMap[format]||unescapexml(format);if(fmt==="General")return SSF._general(value);return SSF.format(fmt,value)}function xlml_set_custprop(Custprops,Rn,cp,val){var oval=val;switch((cp[0].match(/dt:dt="([\w.]+)"/)||["",""])[1]){case"boolean":oval=parsexmlbool(val);break;case"i2":;case"int":oval=parseInt(val,10);break;case"r4":;case"float":oval=parseFloat(val);break;case"date":;case"dateTime.tz":oval=parseDate(val);break;case"i8":;case"string":;case"fixed":;case"uuid":;case"bin.base64":break;default:throw new Error("bad custprop:"+cp[0]);}Custprops[unescapexml(Rn[3])]=oval}function safe_format_xlml(cell,nf,o){if(cell.t==="z")return;if(!o||o.cellText!==false)try{if(cell.t==="e"){cell.w=cell.w||BErr[cell.v]}else if(nf==="General"){if(cell.t==="n"){if((cell.v|0)===cell.v)cell.w=SSF._general_int(cell.v);else cell.w=SSF._general_num(cell.v)}else cell.w=SSF._general(cell.v)}else cell.w=xlml_format(nf||"General",cell.v)}catch(e){if(o.WTF)throw e}try{var z=XLMLFormatMap[nf]||nf||"General";if(o.cellNF)cell.z=z;if(o.cellDates&&cell.t=="n"&&SSF.is_date(z)){var _d=SSF.parse_date_code(cell.v);if(_d){cell.t="d";cell.v=new Date(Date.UTC(_d.y,_d.m-1,_d.d,_d.H,_d.M,_d.S,_d.u))}}}catch(e){if(o.WTF)throw e}}function process_style_xlml(styles,stag,opts){if(opts.cellStyles){if(stag.Interior){var I=stag.Interior;if(I.Pattern)I.patternType=XLMLPatternTypeMap[I.Pattern]||I.Pattern}}styles[stag.ID]=stag}function parse_xlml_data(xml,ss,data,cell,base,styles,csty,row,arrayf,o){var nf="General",sid=cell.StyleID,S={};o=o||{};var interiors=[];var i=0;if(sid===undefined&&row)sid=row.StyleID;if(sid===undefined&&csty)sid=csty.StyleID;while(styles[sid]!==undefined){if(styles[sid].nf)nf=styles[sid].nf;if(styles[sid].Interior)interiors.push(styles[sid].Interior);if(!styles[sid].Parent)break;sid=styles[sid].Parent}switch(data.Type){case"Boolean":cell.t="b";cell.v=parsexmlbool(xml);break;case"String":cell.t="s";cell.r=xlml_fixstr(unescapexml(xml));cell.v=xml.indexOf("<")>-1?unescapexml(ss):cell.r;break;case"DateTime":if(xml.slice(-1)!="Z")xml+="Z";cell.v=(parseDate(xml)-new Date(Date.UTC(1899,11,30)))/(24*60*60*1e3);if(cell.v!==cell.v)cell.v=unescapexml(xml);else if(cell.v<60)cell.v=cell.v-1;if(!nf||nf=="General")nf="yyyy-mm-dd";case"Number":if(cell.v===undefined)cell.v=+xml;if(!cell.t)cell.t="n";break;case"Error":cell.t="e";cell.v=RBErr[xml];if(o.cellText!==false)cell.w=xml;break;default:cell.t="s";cell.v=xlml_fixstr(ss||xml);break;}safe_format_xlml(cell,nf,o);if(o.cellFormula!==false){if(cell.Formula){var fstr=unescapexml(cell.Formula);if(fstr.charCodeAt(0)==61)fstr=fstr.substr(1);cell.f=rc_to_a1(fstr,base);delete cell.Formula;if(cell.ArrayRange=="RC")cell.F=rc_to_a1("RC:RC",base);else if(cell.ArrayRange){cell.F=rc_to_a1(cell.ArrayRange,base);arrayf.push([safe_decode_range(cell.F),cell.F])}}else{for(i=0;i=arrayf[i][0].s.r&&base.r<=arrayf[i][0].e.r)if(base.c>=arrayf[i][0].s.c&&base.c<=arrayf[i][0].e.c)cell.F=arrayf[i][1]}}if(o.cellStyles){interiors.forEach(function(x){if(!S.patternType&&x.patternType)S.patternType=x.patternType});cell.s=S}cell.ixfe=cell.StyleID!==undefined?cell.StyleID:"Default"}function xlml_clean_comment(comment){comment.t=comment.v||"";comment.t=comment.t.replace(/\r\n/g,"\n").replace(/\r/g,"\n");comment.v=comment.w=comment.ixfe=undefined}function xlml_normalize(d){if(has_buf&&Buffer.isBuffer(d))return d.toString("utf8");if(typeof d==="string")return d;throw new Error("Bad input format: expected Buffer or string")}var xlmlregex=/<(\/?)([^\s?>!\/:]*:|)([^\s?>]*[^\s?>\/])[^>]*>/gm;function parse_xlml_xml(d,opts){make_ssf(SSF);var str=debom(xlml_normalize(d));if(opts&&opts.type=="binary"&&typeof cptable!=="undefined")str=cptable.utils.decode(65001,char_codes(str));if(str.substr(0,1e3).indexOf("=0)return HTML_.to_workbook(str,opts);var Rn;var state=[],tmp;if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var sheets={},sheetnames=[],cursheet=opts.dense?[]:{},sheetname="";var table={},cell={},row={};var dtag=xlml_parsexmltag(''),didx=0;var c=0,r=0;var refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};var styles={},stag={};var ss="",fidx=0;var mergecells=[];var Props={},Custprops={},pidx=0,cp={};var comments=[],comment={};var cstys=[],csty,seencol=false;var arrayf=[];var rowinfo=[],rowobj={};var Workbook={Sheets:[]},wsprops={};xlmlregex.lastIndex=0;str=str.replace(//gm,"");while(Rn=xlmlregex.exec(str))switch(Rn[3]){case"Data":if(state[state.length-1][1])break;if(Rn[1]==="/")parse_xlml_data(str.slice(didx,Rn.index),ss,dtag,state[state.length-1][0]=="Comment"?comment:cell,{c:c,r:r},styles,cstys[c],row,arrayf,opts);else{ss="";dtag=xlml_parsexmltag(Rn[0]);didx=Rn.index+Rn[0].length}break;case"Cell":if(Rn[1]==="/"){if(comments.length>0)cell.c=comments;if((!opts.sheetRows||opts.sheetRows>r)&&cell.v!==undefined){if(opts.dense){if(!cursheet[r])cursheet[r]=[];cursheet[r][c]=cell}else cursheet[encode_col(c)+encode_row(r)]=cell}if(cell.HRef){cell.l={Target:cell.HRef,Tooltip:cell.HRefScreenTip};delete cell.HRef;delete cell.HRefScreenTip}if(cell.MergeAcross||cell.MergeDown){var cc=c+(parseInt(cell.MergeAcross,10)|0);var rr=r+(parseInt(cell.MergeDown,10)|0);mergecells.push({s:{c:c,r:r},e:{c:cc,r:rr}})}if(!opts.sheetStubs){if(cell.MergeAcross)c=cc+1;else++c}else if(cell.MergeAcross||cell.MergeDown){for(var cma=c;cma<=cc;++cma){for(var cmd=r;cmd<=rr;++cmd){if(cma>c||cmd>r){if(opts.dense){if(!cursheet[cmd])cursheet[cmd]=[];cursheet[cmd][cma]={t:"z"}}else cursheet[encode_col(cma)+encode_row(cmd)]={t:"z"}}}}c=cc+1}else++c}else{cell=xlml_parsexmltagobj(Rn[0]);if(cell.Index)c=+cell.Index-1;if(crefguess.e.c)refguess.e.c=c;if(Rn[0].slice(-2)==="/>")++c;comments=[]}break;case"Row":if(Rn[1]==="/"||Rn[0].slice(-2)==="/>"){if(rrefguess.e.r)refguess.e.r=r;if(Rn[0].slice(-2)==="/>"){row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1}c=0;++r}else{row=xlml_parsexmltag(Rn[0]);if(row.Index)r=+row.Index-1;rowobj={};if(row.AutoFitHeight=="0"){rowobj.hpx=parseInt(row.Height,10);rowobj.hpt=px2pt(rowobj.hpx);rowinfo[r]=rowobj}if(row.Hidden=="1"){rowobj.hidden=true;rowinfo[r]=rowobj}}break;case"Worksheet":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"));sheetnames.push(sheetname);if(refguess.s.r<=refguess.e.r&&refguess.s.c<=refguess.e.c)cursheet["!ref"]=encode_range(refguess);if(mergecells.length)cursheet["!merges"]=mergecells;if(cstys.length>0)cursheet["!cols"]=cstys;if(rowinfo.length>0)cursheet["!rows"]=rowinfo;sheets[sheetname]=cursheet}else{refguess={s:{r:2e6,c:2e6},e:{r:0,c:0}};r=c=0;state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);sheetname=unescapexml(tmp.Name);cursheet=opts.dense?[]:{};mergecells=[];arrayf=[];rowinfo=[];wsprops={name:sheetname,Hidden:0};Workbook.Sheets.push(wsprops)}break;case"Table":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else if(Rn[0].slice(-2)=="/>")break;else{table=xlml_parsexmltag(Rn[0]);state.push([Rn[3],false]);cstys=[];seencol=false}break;case"Style":if(Rn[1]==="/")process_style_xlml(styles,stag,opts);else stag=xlml_parsexmltag(Rn[0]);break;case"NumberFormat":stag.nf=unescapexml(xlml_parsexmltag(Rn[0]).Format||"General");if(XLMLFormatMap[stag.nf])stag.nf=XLMLFormatMap[stag.nf];for(var ssfidx=0;ssfidx!=392;++ssfidx)if(SSF._table[ssfidx]==stag.nf)break;if(ssfidx==392)for(ssfidx=57;ssfidx!=392;++ssfidx)if(SSF._table[ssfidx]==null){SSF.load(stag.nf,ssfidx);break}break;case"Column":if(state[state.length-1][0]!=="Table")break;csty=xlml_parsexmltag(Rn[0]);if(csty.Hidden){csty.hidden=true;delete csty.Hidden}if(csty.Width)csty.wpx=parseInt(csty.Width,10);if(!seencol&&csty.wpx>10){seencol=true;MDW=DEF_MDW;for(var _col=0;_col0)_DefinedName.Sheet=Workbook.Sheets.length-1;Workbook.Names.push(_DefinedName);break;case"NamedCell":break;case"B":break;case"I":break;case"U":break;case"S":break;case"Sub":break;case"Sup":break;case"Span":break;case"Border":break;case"Alignment":break;case"Borders":break;case"Font":if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")ss+=str.slice(fidx,Rn.index);else fidx=Rn.index+Rn[0].length;break;case"Interior":if(!opts.cellStyles)break;stag.Interior=xlml_parsexmltag(Rn[0]);break;case"Protection":break;case"Author":;case"Title":;case"Description":;case"Created":;case"Keywords":;case"Subject":;case"Category":;case"Company":;case"LastAuthor":;case"LastSaved":;case"LastPrinted":;case"Version":;case"Revision":;case"TotalTime":;case"HyperlinkBase":;case"Manager":;case"ContentStatus":;case"Identifier":;case"Language":if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_prop(Props,Rn[3],str.slice(pidx,Rn.index));else pidx=Rn.index+Rn[0].length;break;case"Paragraphs":break;case"Styles":;case"Workbook":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else state.push([Rn[3],false]);break;case"Comment":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"));xlml_clean_comment(comment);comments.push(comment)}else{state.push([Rn[3],false]);tmp=xlml_parsexmltag(Rn[0]);comment={a:tmp.Author}}break;case"AutoFilter":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){var AutoFilter=xlml_parsexmltag(Rn[0]);cursheet["!autofilter"]={ref:rc_to_a1(AutoFilter.Range).replace(/\$/g,"")};state.push([Rn[3],true])}break;case"Name":break;case"ComponentOptions":;case"DocumentProperties":;case"CustomDocumentProperties":;case"OfficeDocumentSettings":;case"PivotTable":;case"PivotCache":;case"Names":;case"MapInfo":;case"PageBreaks":;case"QueryTable":;case"DataValidation":;case"Sorting":;case"Schema":;case"data":;case"ConditionalFormatting":;case"SmartTagType":;case"SmartTags":;case"ExcelWorkbook":;case"WorkbookOptions":;case"WorksheetOptions":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw new Error("Bad state: "+tmp.join("|"))}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;default:if(state.length==0&&Rn[3]=="document")return parse_fods(str,opts);if(state.length==0&&Rn[3]=="UOF")return parse_fods(str,opts);var seen=true;switch(state[state.length-1][0]){case"OfficeDocumentSettings":switch(Rn[3]){case"AllowPNG":break;case"RemovePersonalInformation":break;case"DownloadComponents":break;case"LocationOfComponents":break;case"Colors":break;case"Color":break;case"Index":break;case"RGB":break;case"PixelsPerInch":break;case"TargetScreenSize":break;case"ReadOnlyRecommended":break;default:seen=false;}break;case"ComponentOptions":switch(Rn[3]){case"Toolbar":break;case"HideOfficeLogo":break;case"SpreadsheetAutoFit":break;case"Label":break;case"Caption":break;case"MaxHeight":break;case"MaxWidth":break;case"NextSheetNumber":break;default:seen=false;}break;case"ExcelWorkbook":switch(Rn[3]){case"WindowHeight":break;case"WindowWidth":break;case"WindowTopX":break;case"WindowTopY":break;case"TabRatio":break;case"ProtectStructure":break;case"ProtectWindows":break;case"ActiveSheet":break;case"DisplayInkNotes":break;case"FirstVisibleSheet":break;case"SupBook":break;case"SheetName":break;case"SheetIndex":break;case"SheetIndexFirst":break;case"SheetIndexLast":break;case"Dll":break;case"AcceptLabelsInFormulas":break;case"DoNotSaveLinkValues":break;case"Date1904":break;case"Iteration":break;case"MaxIterations":break;case"MaxChange":break;case"Path":break;case"Xct":break;case"Count":break;case"SelectedSheets":break;case"Calculation":break;case"Uncalced":break;case"StartupPrompt":break;case"Crn":break;case"ExternName":break;case"Formula":break;case"ColFirst":break;case"ColLast":break;case"WantAdvise":break;case"Boolean":break;case"Error":break;case"Text":break;case"OLE":break;case"NoAutoRecover":break;case"PublishObjects":break;case"DoNotCalculateBeforeSave":break;case"Number":break;case"RefModeR1C1":break;case"EmbedSaveSmartTags":break;default:seen=false;}break;case"WorkbookOptions":switch(Rn[3]){case"OWCVersion":break;case"Height":break;case"Width":break;default:seen=false;}break;case"WorksheetOptions":switch(Rn[3]){case"Visible":if(Rn[0].slice(-2)==="/>"){}else if(Rn[1]==="/")switch(str.slice(pidx,Rn.index)){case"SheetHidden":wsprops.Hidden=1;break;case"SheetVeryHidden":wsprops.Hidden=2;break;}else pidx=Rn.index+Rn[0].length;break;case"Header":if(!cursheet["!margins"])default_margins(cursheet["!margins"]={},"xlml");cursheet["!margins"].header=parsexmltag(Rn[0]).Margin;break;case"Footer":if(!cursheet["!margins"])default_margins(cursheet["!margins"]={},"xlml");cursheet["!margins"].footer=parsexmltag(Rn[0]).Margin;break;case"PageMargins":var pagemargins=parsexmltag(Rn[0]);if(!cursheet["!margins"])default_margins(cursheet["!margins"]={},"xlml");if(pagemargins.Top)cursheet["!margins"].top=pagemargins.Top;if(pagemargins.Left)cursheet["!margins"].left=pagemargins.Left;if(pagemargins.Right)cursheet["!margins"].right=pagemargins.Right;if(pagemargins.Bottom)cursheet["!margins"].bottom=pagemargins.Bottom;break;case"Unsynced":break;case"Print":break;case"Panes":break;case"Scale":break;case"Pane":break;case"Number":break;case"Layout":break;case"PageSetup":break;case"Selected":break;case"ProtectObjects":break;case"EnableSelection":break;case"ProtectScenarios":break;case"ValidPrinterInfo":break;case"HorizontalResolution":break;case"VerticalResolution":break;case"NumberofCopies":break;case"ActiveRow":break;case"ActiveCol":break;case"ActivePane":break;case"TopRowVisible":break;case"TopRowBottomPane":break;case"LeftColumnVisible":break;case"LeftColumnRightPane":break;case"FitToPage":break;case"RangeSelection":break;case"PaperSizeIndex":break;case"PageLayoutZoom":break;case"PageBreakZoom":break;case"FilterOn":break;case"DoNotDisplayGridlines":break;case"SplitHorizontal":break;case"SplitVertical":break;case"FreezePanes":break;case"FrozenNoSplit":break;case"FitWidth":break;case"FitHeight":break;case"CommentsLayout":break;case"Zoom":break;case"LeftToRight":break;case"Gridlines":break;case"AllowSort":break;case"AllowFilter":break;case"AllowInsertRows":break;case"AllowDeleteRows":break;case"AllowInsertCols":break;case"AllowDeleteCols":break;case"AllowInsertHyperlinks":break;case"AllowFormatCells":break;case"AllowSizeCols":break;case"AllowSizeRows":break;case"NoSummaryRowsBelowDetail":break;case"TabColorIndex":break;case"DoNotDisplayHeadings":break;case"ShowPageLayoutZoom":break;case"NoSummaryColumnsRightDetail":break;case"BlackAndWhite":break;case"DoNotDisplayZeros":break;case"DisplayPageBreak":break;case"RowColHeadings":break;case"DoNotDisplayOutline":break;case"NoOrientation":break;case"AllowUsePivotTables":break;case"ZeroHeight":break;case"ViewableRange":break;case"Selection":break;case"ProtectContents":break;default:seen=false;}break;case"PivotTable":;case"PivotCache":switch(Rn[3]){case"ImmediateItemsOnDrop":break;case"ShowPageMultipleItemLabel":break;case"CompactRowIndent":break;case"Location":break;case"PivotField":break;case"Orientation":break;case"LayoutForm":break;case"LayoutSubtotalLocation":break;case"LayoutCompactRow":break;case"Position":break;case"PivotItem":break;case"DataType":break;case"DataField":break;case"SourceName":break;case"ParentField":break;case"PTLineItems":break;case"PTLineItem":break;case"CountOfSameItems":break;case"Item":break;case"ItemType":break;case"PTSource":break;case"CacheIndex":break;case"ConsolidationReference":break;case"FileName":break;case"Reference":break;case"NoColumnGrand":break;case"NoRowGrand":break;case"BlankLineAfterItems":break;case"Hidden":break;case"Subtotal":break;case"BaseField":break;case"MapChildItems":break;case"Function":break;case"RefreshOnFileOpen":break;case"PrintSetTitles":break;case"MergeLabels":break;case"DefaultVersion":break;case"RefreshName":break;case"RefreshDate":break;case"RefreshDateCopy":break;case"VersionLastRefresh":break;case"VersionLastUpdate":break;case"VersionUpdateableMin":break;case"VersionRefreshableMin":break;case"Calculation":break;default:seen=false;}break;case"PageBreaks":switch(Rn[3]){case"ColBreaks":break;case"ColBreak":break;case"RowBreaks":break;case"RowBreak":break;case"ColStart":break;case"ColEnd":break;case"RowEnd":break;default:seen=false;}break;case"AutoFilter":switch(Rn[3]){case"AutoFilterColumn":break;case"AutoFilterCondition":break;case"AutoFilterAnd":break;case"AutoFilterOr":break;default:seen=false;}break;case"QueryTable":switch(Rn[3]){case"Id":break;case"AutoFormatFont":break;case"AutoFormatPattern":break;case"QuerySource":break;case"QueryType":break;case"EnableRedirections":break;case"RefreshedInXl9":break;case"URLString":break;case"HTMLTables":break;case"Connection":break;case"CommandText":break;case"RefreshInfo":break;case"NoTitles":break;case"NextId":break;case"ColumnInfo":break;case"OverwriteCells":break;case"DoNotPromptForFile":break;case"TextWizardSettings":break;case"Source":break;case"Number":break;case"Decimal":break;case"ThousandSeparator":break;case"TrailingMinusNumbers":break;case"FormatSettings":break;case"FieldType":break;case"Delimiters":break;case"Tab":break;case"Comma":break;case"AutoFormatName":break;case"VersionLastEdit":break;case"VersionLastRefresh":break;default:seen=false;}break;case"Sorting":;case"ConditionalFormatting":;case"DataValidation":switch(Rn[3]){case"Range":break;case"Type":break;case"Min":break;case"Max":break;case"Sort":break;case"Descending":break;case"Order":break;case"CaseSensitive":break;case"Value":break;case"ErrorStyle":break;case"ErrorMessage":break;case"ErrorTitle":break;case"CellRangeList":break;case"InputMessage":break;case"InputTitle":break;case"ComboHide":break;case"InputHide":break;case"Condition":break;case"Qualifier":break;case"UseBlank":break;case"Value1":break;case"Value2":break;case"Format":break;default:seen=false;}break;case"MapInfo":;case"Schema":;case"data":switch(Rn[3]){case"Map":break;case"Entry":break;case"Range":break;case"XPath":break;case"Field":break;case"XSDType":break;case"FilterOn":break;case"Aggregate":break;case"ElementType":break;case"AttributeType":break;case"schema":;case"element":;case"complexType":;case"datatype":;case"all":;case"attribute":;case"extends":break;case"row":break;default:seen=false;}break;case"SmartTags":break;default:seen=false;break;}if(seen)break;if(!state[state.length-1][1])throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");if(state[state.length-1][0]==="CustomDocumentProperties"){if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")xlml_set_custprop(Custprops,Rn,cp,str.slice(pidx,Rn.index));else{cp=Rn;pidx=Rn.index+Rn[0].length}break}if(opts.WTF)throw"Unrecognized tag: "+Rn[3]+"|"+state.join("|");}var out={};if(!opts.bookSheets&&!opts.bookProps)out.Sheets=sheets;out.SheetNames=sheetnames;out.Workbook=Workbook;out.SSF=SSF.get_table();out.Props=Props;out.Custprops=Custprops;return out}function parse_xlml(data,opts){fix_read_opts(opts=opts||{});switch(opts.type||"base64"){case"base64":return parse_xlml_xml(Base64.decode(data),opts);case"binary":;case"buffer":;case"file":return parse_xlml_xml(data,opts);case"array":return parse_xlml_xml(data.map(_chr).join(""),opts);}}function write_props_xlml(wb,opts){var o=[];if(wb.Props)o.push(xlml_write_docprops(wb.Props,opts));if(wb.Custprops)o.push(xlml_write_custprops(wb.Props,wb.Custprops,opts));return o.join("")}function write_wb_xlml(wb,opts){return""}function write_sty_xlml(wb,opts){return""}function write_ws_xlml_wsopts(ws,opts,idx,wb){if(!ws)return"";var o=[];if(ws["!margins"]){o.push("");if(ws["!margins"].header)o.push(writextag("Header",null,{"x:Margin":ws["!margins"].header}));if(ws["!margins"].footer)o.push(writextag("Footer",null,{"x:Margin":ws["!margins"].footer}));o.push(writextag("PageMargins",null,{"x:Bottom":ws["!margins"].bottom||"0.75","x:Left":ws["!margins"].left||"0.7","x:Right":ws["!margins"].right||"0.7","x:Top":ws["!margins"].top||"0.75"}));o.push("")}if(wb&&wb.Workbook&&wb.Workbook.Sheets&&wb.Workbook.Sheets[idx]){if(wb.Workbook.Sheets[idx].Hidden)o.push(writextag("Visible",wb.Workbook.Sheets[idx].Hidden==1?"SheetHidden":"SheetVeryHidden",{}));else{for(var i=0;i")}}if(ws["!protect"]){o.push(writetag("ProtectContents","True"));if(ws["!protect"].objects)o.push(writetag("ProtectObjects","True"));if(ws["!protect"].scenarios)o.push(writetag("ProtectScenarios","True"));if(ws["!protect"].selectLockedCells!=null&&!ws["!protect"].selectLockedCells)o.push(writetag("EnableSelection","NoSelection"));else if(ws["!protect"].selectUnlockedCells!=null&&!ws["!protect"].selectUnlockedCells)o.push(writetag("EnableSelection","UnlockedCells"));[["formatColumns","AllowFormatCells"],["formatRows","AllowSizeCols"],["formatCells","AllowSizeRows"],["insertColumns","AllowInsertCols"],["insertRows","AllowInsertRows"],["insertHyperlinks","AllowInsertHyperlinks"],["deleteColumns","AllowDeleteCols"],["deleteRows","AllowDeleteRows"],["sort","AllowSort"],["autoFilter","AllowFilter"],["pivotTables","AllowUsePivotTables"]].forEach(function(x){if(ws["!protect"][x[0]])o.push("<"+x[1]+"/>")})}if(o.length==0)return"";return writextag("WorksheetOptions",o.join(""),{xmlns:XLMLNS.x})}function write_ws_xlml_comment(comments){return comments.map(function(c){var t=xlml_unfixstr(c.t||"");var d=writextag("ss:Data",t,{xmlns:"http://www.w3.org/TR/REC-html40"});return writextag("Comment",d,{"ss:Author":c.a})}).join("")}function write_ws_xlml_cell(cell,ref,ws,opts,idx,wb,addr){if(!cell||cell.v==undefined&&cell.f==undefined)return"";var attr={};if(cell.f)attr["ss:Formula"]="="+escapexml(a1_to_rc(cell.f,addr));if(cell.F&&cell.F.substr(0,ref.length)==ref){var end=decode_cell(cell.F.substr(ref.length+1));attr["ss:ArrayRange"]="RC:R"+(end.r==addr.r?"":"["+(end.r-addr.r)+"]")+"C"+(end.c==addr.c?"":"["+(end.c-addr.c)+"]")}if(cell.l&&cell.l.Target){attr["ss:HRef"]=escapexml(cell.l.Target);if(cell.l.Tooltip)attr["x:HRefScreenTip"]=escapexml(cell.l.Tooltip)}if(ws["!merges"]){var marr=ws["!merges"];for(var mi=0;mi!=marr.length;++mi){if(marr[mi].s.c!=addr.c||marr[mi].s.r!=addr.r)continue;if(marr[mi].e.c>marr[mi].s.c)attr["ss:MergeAcross"]=marr[mi].e.c-marr[mi].s.c;if(marr[mi].e.r>marr[mi].s.r)attr["ss:MergeDown"]=marr[mi].e.r-marr[mi].s.r}}var t="",p="";switch(cell.t){case"z":return"";case"n":t="Number";p=String(cell.v);break;case"b":t="Boolean";p=cell.v?"1":"0";break;case"e":t="Error";p=BErr[cell.v];break;case"d":t="DateTime";p=new Date(cell.v).toISOString();break;case"s":t="String";p=escapexml(cell.v||"");break;}var _v=cell.v!=null?p:"";if(opts&&opts.type=="binary"&&typeof cptable!=="undefined"&&cell.t=="s"){_v=cptable.utils.encode(65001,_v);var __v="";for(var __i=0;__i<_v.length;++__i)__v+=String.fromCharCode(_v[__i]);_v=__v}var m=''+_v+"";if((cell.c||[]).length>0)m+=write_ws_xlml_comment(cell.c);return writextag("Cell",m,attr)}function write_ws_xlml_row(R,row){var o='"}function write_ws_xlml_table(ws,opts,idx,wb){if(!ws["!ref"])return"";var range=safe_decode_range(ws["!ref"]);var marr=ws["!merges"]||[],mi=0;var o=[];if(ws["!cols"])ws["!cols"].forEach(function(n,i){process_col(n);var w=!!n.width;var p=col_obj_w(i,n);var k={"ss:Index":i+1};if(w)k["ss:Width"]=width2px(p.width);if(n.hidden)k["ss:Hidden"]="1";o.push(writextag("Column",null,k))});var dense=Array.isArray(ws);for(var R=range.s.r;R<=range.e.r;++R){var row=[write_ws_xlml_row(R,(ws["!rows"]||[])[R])];for(var C=range.s.c;C<=range.e.c;++C){var skip=false;for(mi=0;mi!=marr.length;++mi){if(marr[mi].s.c>C)continue;if(marr[mi].s.r>R)continue;if(marr[mi].e.c");if(row.length>2)o.push(row.join(""))}return o.join("")}function write_ws_xlml(idx,opts,wb){var o=[];var s=wb.SheetNames[idx];var ws=wb.Sheets[s];var t=ws?write_ws_xlml_table(ws,opts,idx,wb):"";if(t.length>0)o.push("
"+S+""+S+""+S+"
"+S+"
"+t+"
");o.push(write_ws_xlml_wsopts(ws,opts,idx,wb));return o.join("")}function write_xlml(wb,opts){var d=[];d.push(write_props_xlml(wb,opts));d.push(write_wb_xlml(wb,opts));d.push(write_sty_xlml(wb,opts));for(var i=0;i400)throw new Error("Unsupported Clipboard: "+m.toString(16));l+=m;}m=__lpstr(o,l);l+=m.length===0?0:5+m.length;v.Reserved1=m;if((m=__readUInt32LE(o,l))!==1907550708)return v;throw new Error("Unsupported Unicode Extension")}function slurp(R,blob,length,opts){var l=length;var bufs=[];var d=blob.slice(blob.l,blob.l+l);if(opts&&opts.enc&&opts.enc.insitu_decrypt)switch(R.n){case"BOF":;case"FilePass":;case"FileLock":;case"InterfaceHdr":;case"RRDInfo":;case"RRDHead":;case"UsrExcl":break;default:if(d.length===0)break;opts.enc.insitu_decrypt(d);}bufs.push(d);blob.l+=l;var next=XLSRecordEnum[__readUInt16LE(blob,blob.l)];while(next!=null&&next.n==="Continue"){l=__readUInt16LE(blob,blob.l+2);bufs.push(blob.slice(blob.l+4,blob.l+4+l));blob.l+=4+l;next=XLSRecordEnum[__readUInt16LE(blob,blob.l)]}var b=bconcat(bufs);prep_blob(b,0);var ll=0;b.lens=[];for(var j=0;j1)return;if(!cell_valid)return;if(options.cellStyles&&line.XF&&line.XF.data)process_cell_style(cell,line,options);lastcell=cell;last_cell=encode_cell(cell);if(range.s){if(cell.rrange.e.r)range.e.r=cell.r+1;if(cell.c+1>range.e.c)range.e.c=cell.c+1}if(options.cellFormula&&line.f){for(var afi=0;aficell.c)continue;if(array_formulae[afi][0].s.r>cell.r)continue;if(array_formulae[afi][0].e.c=options.sheetRows)cell_valid=false;else{if(options.dense){if(!out[cell.r])out[cell.r]=[];out[cell.r][cell.c]=line}else out[last_cell]=line}};var opts={enc:false,sbcch:0,snames:[],sharedf:shared_formulae,arrayf:array_formulae,rrtabid:[],lastuser:"",biff:8,codepage:0,winlocked:0,cellStyles:!!options&&!!options.cellStyles,WTF:!!options&&!!options.wtf};if(options.password)opts.password=options.password;var mergecells=[];var objects=[];var colinfo=[],rowinfo=[];var defwidth=0,defheight=0;var seencol=false; +var supbooks=[];supbooks.SheetNames=opts.snames;supbooks.sharedf=opts.sharedf;supbooks.arrayf=opts.arrayf;supbooks.names=[];supbooks.XTI=[];var last_Rn="";var file_depth=0;var BIFF2Fmt=0;var BIFF2FmtTable=[];var FilterDatabases=[];var last_lbl;opts.codepage=1200;set_cp(1200);while(blob.l0)last_lbl.Sheet=val.itab-1;supbooks.names.push(last_lbl);if(!supbooks[0])supbooks[0]=[];supbooks[supbooks.length-1].push(val);if(val.Name=="\r"&&val.itab>0)if(val.rgce&&val.rgce[0]&&val.rgce[0][0]&&val.rgce[0][0][0]=="PtgArea3d")FilterDatabases[val.itab-1]={ref:encode_range(val.rgce[0][0][1][2])};break;case"ExternSheet":if(supbooks.length==0){supbooks[0]=[];supbooks[0].XTI=[]}supbooks[supbooks.length-1].XTI=supbooks[supbooks.length-1].XTI.concat(val);supbooks.XTI=supbooks.XTI.concat(val);break;case"NameCmt":if(opts.biff<8)break;if(last_lbl!=null)last_lbl.Comment=val[1];break;case"Protect":out["!protect"]=val;break;case"Password":if(val!==0&&opts.WTF)console.error("Password verifier: "+val);break;case"Prot4Rev":;case"Prot4RevPass":break;case"BoundSheet8":{Directory[val.pos]=val;opts.snames.push(val.name)}break;case"EOF":{if(--file_depth)break;if(range.e){if(range.e.r>0&&range.e.c>0){range.e.r--;range.e.c--;out["!ref"]=encode_range(range);range.e.r++;range.e.c++}if(mergecells.length>0)out["!merges"]=mergecells;if(objects.length>0)out["!objects"]=objects;if(colinfo.length>0)out["!cols"]=colinfo;if(rowinfo.length>0)out["!rows"]=rowinfo;Workbook.Sheets.push(wsprops)}if(cur_sheet==="")Preamble=out;else Sheets[cur_sheet]=out;out=options.dense?[]:{}}break;case"BOF":{if(opts.biff!==8){}else if(RecordType===9)opts.biff=2;else if(RecordType===521)opts.biff=3;else if(RecordType===1033)opts.biff=4;else if(val.BIFFVer===1280)opts.biff=5;else if(val.BIFFVer===1536)opts.biff=8;else if(val.BIFFVer===2)opts.biff=2;else if(val.BIFFVer===7)opts.biff=2;if(file_depth++)break;cell_valid=true;out=options.dense?[]:{};if(opts.biff<5){if(cur_sheet==="")cur_sheet="Sheet1";range={s:{r:0,c:0},e:{r:0,c:0}};var fakebs8={pos:blob.l-length,name:cur_sheet};Directory[fakebs8.pos]=fakebs8;opts.snames.push(cur_sheet)}else cur_sheet=(Directory[s]||{name:""}).name;if(val.dt==32)out["!type"]="chart";mergecells=[];objects=[];array_formulae=[];opts.arrayf=array_formulae;colinfo=[];rowinfo=[];defwidth=defheight=0;seencol=false;wsprops={Hidden:(Directory[s]||{hs:0}).hs,name:cur_sheet}}break;case"Number":;case"BIFF2NUM":;case"BIFF2INT":{if(out["!type"]=="chart")if(options.dense?(out[val.r]||[])[val.c]:out[encode_cell({c:val.c,r:val.r})])++val.c;temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe]||{},v:val.val,t:"n"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"BoolErr":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.val,t:val.t};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"RK":{temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],v:val.rknum,t:"n"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulRk":{for(var j=val.c;j<=val.C;++j){var ixfe=val.rkrec[j-val.c][0];temp_val={ixfe:ixfe,XF:XFs[ixfe],v:val.rkrec[j-val.c][1],t:"n"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:j,r:val.r},temp_val,options)}}break;case"Formula":{if(val.val=="String"){last_formula=val;break}temp_val=make_cell(val.val,val.cell.ixfe,val.tt);temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula){var _f=val.formula;if(_f&&_f[0]&&_f[0][0]&&_f[0][0][0]=="PtgExp"){var _fr=_f[0][0][1][0],_fc=_f[0][0][1][1];var _fe=encode_cell({r:_fr,c:_fc});if(shared_formulae[_fe])temp_val.f=""+stringify_formula(val.formula,range,val.cell,supbooks,opts);else temp_val.F=((options.dense?(out[_fr]||[])[_fc]:out[_fe])||{}).F}else temp_val.f=""+stringify_formula(val.formula,range,val.cell,supbooks,opts)}if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(val.cell,temp_val,options);last_formula=val}break;case"String":{if(last_formula){last_formula.val=val;temp_val=make_cell(val,last_formula.cell.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(options.cellFormula){temp_val.f=""+stringify_formula(last_formula.formula,range,last_formula.cell,supbooks,opts)}if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell(last_formula.cell,temp_val,options);last_formula=null}else throw new Error("String record expects Formula")}break;case"Array":{array_formulae.push(val);var _arraystart=encode_cell(val[0].s);cc=options.dense?(out[val[0].s.r]||[])[val[0].s.c]:out[_arraystart];if(options.cellFormula&&cc){if(!last_formula)break;if(!_arraystart||!cc)break;cc.f=""+stringify_formula(val[1],range,val[0],supbooks,opts);cc.F=encode_range(val[0])}}break;case"ShrFmla":{if(!cell_valid)break;if(!options.cellFormula)break;if(last_cell){if(!last_formula)break;shared_formulae[encode_cell(last_formula.cell)]=val[0];cc=options.dense?(out[last_formula.cell.r]||[])[last_formula.cell.c]:out[encode_cell(last_formula.cell)];(cc||{}).f=""+stringify_formula(val[0],range,lastcell,supbooks,opts)}}break;case"LabelSst":temp_val=make_cell(sst[val.isst].t,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Blank":if(options.sheetStubs){temp_val={ixfe:val.ixfe,XF:XFs[val.ixfe],t:"z"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options)}break;case"MulBlank":if(options.sheetStubs){for(var _j=val.c;_j<=val.C;++_j){var _ixfe=val.ixfe[_j-val.c];temp_val={ixfe:_ixfe,XF:XFs[_ixfe],t:"z"};if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:_j,r:val.r},temp_val,options)}}break;case"RString":;case"Label":;case"BIFF2STR":temp_val=make_cell(val.val,val.ixfe,"s");temp_val.XF=XFs[temp_val.ixfe];if(BIFF2Fmt>0)temp_val.z=BIFF2FmtTable[temp_val.ixfe>>8&31];safe_format_xf(temp_val,options,wb.opts.Date1904);addcell({c:val.c,r:val.r},temp_val,options);break;case"Dimensions":{if(file_depth===1)range=val}break;case"SST":{sst=val}break;case"Format":{SSF.load(val[1],val[0])}break;case"BIFF2FORMAT":{BIFF2FmtTable[BIFF2Fmt++]=val;for(var b2idx=0;b2idx=163)SSF.load(val,BIFF2Fmt+163)}break;case"MergeCells":mergecells=mergecells.concat(val);break;case"Obj":objects[val.cmo[0]]=opts.lastobj=val;break;case"TxO":opts.lastobj.TxO=val;break;case"ImData":opts.lastobj.ImData=val;break;case"HLink":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC){cc=options.dense?(out[rngR]||[])[rngC]:out[encode_cell({c:rngC,r:rngR})];if(cc)cc.l=val[1]}}break;case"HLinkTooltip":{for(rngR=val[0].s.r;rngR<=val[0].e.r;++rngR)for(rngC=val[0].s.c;rngC<=val[0].e.c;++rngC){cc=options.dense?(out[rngR]||[])[rngC]:out[encode_cell({c:rngC,r:rngR})];if(cc)cc.l.Tooltip=val[1]}}break;case"Note":{if(opts.biff<=5&&opts.biff>=2)break;cc=options.dense?(out[val[0].r]||[])[val[0].c]:out[encode_cell(val[0])];var noteobj=objects[val[2]];if(!cc)break;if(!cc.c)cc.c=[];cmnt={a:val[1],t:noteobj.TxO.t};cc.c.push(cmnt)}break;default:switch(R.n){case"ClrtClient":break;case"XFExt":update_xfext(XFs[val.ixfe],val.ext);break;case"DefColWidth":defwidth=val;break;case"DefaultRowHeight":defheight=val[1];break;case"ColInfo":{if(!opts.cellStyles)break;while(val.e>=val.s){colinfo[val.e--]={width:val.w/256};if(!seencol){seencol=true;find_mdw_colw(val.w/256)}process_col(colinfo[val.e+1])}}break;case"Row":{var rowobj={};if(val.hidden){rowinfo[val.r]=rowobj;rowobj.hidden=true}if(val.hpt){rowinfo[val.r]=rowobj;rowobj.hpt=val.hpt;rowobj.hpx=pt2px(val.hpt)}}break;case"LeftMargin":;case"RightMargin":;case"TopMargin":;case"BottomMargin":if(!out["!margins"])default_margins(out["!margins"]={});out["!margins"][Rn.slice(0,-6).toLowerCase()]=val;break;case"Setup":if(!out["!margins"])default_margins(out["!margins"]={});out["!margins"].header=val.header;out["!margins"].footer=val.footer;break;case"Header":break;case"Footer":break;case"HCenter":break;case"VCenter":break;case"Pls":break;case"GCW":break;case"LHRecord":break;case"DBCell":break;case"EntExU2":break;case"SxView":break;case"Sxvd":break;case"SXVI":break;case"SXVDEx":break;case"SxIvd":break;case"SXDI":break;case"SXLI":break;case"SXEx":break;case"QsiSXTag":break;case"Selection":break;case"Feat":break;case"FeatHdr":;case"FeatHdr11":break;case"Feature11":;case"Feature12":;case"List12":break;case"Country":country=val;break;case"RecalcId":break;case"DxGCol":break;case"Fbi":;case"Fbi2":;case"GelFrame":break;case"Font":break;case"XFCRC":break;case"Style":break;case"StyleExt":break;case"Palette":palette=val;break;case"Theme":break;case"ScenarioProtect":break;case"ObjProtect":break;case"CondFmt12":break;case"Table":break;case"TableStyles":break;case"TableStyle":break;case"TableStyleElement":break;case"SXStreamID":break;case"SXVS":break;case"DConRef":break;case"SXAddl":break;case"DConBin":break;case"DConName":break;case"SXPI":break;case"SxFormat":break;case"SxSelect":break;case"SxRule":break;case"SxFilt":break;case"SxItm":break;case"SxDXF":break;case"ScenMan":break;case"DCon":break;case"CellWatch":break;case"PrintRowCol":break;case"PrintGrid":break;case"PrintSize":break;case"XCT":break;case"CRN":break;case"Scl":{}break;case"SheetExt":{}break;case"SheetExtOptional":{}break;case"ObNoMacros":{}break;case"ObProj":{}break;case"CodeName":{}break;case"GUIDTypeLib":{}break;case"WOpt":break;case"PhoneticInfo":break;case"OleObjectSize":break;case"DXF":;case"DXFN":;case"DXFN12":;case"DXFN12List":;case"DXFN12NoCB":break;case"Dv":;case"DVal":break;case"BRAI":;case"Series":;case"SeriesText":break;case"DConn":break;case"DbOrParamQry":break;case"DBQueryExt":break;case"IFmtRecord":break;case"CondFmt":;case"CF":;case"CF12":;case"CFEx":break;case"Excel9File":break;case"Units":break;case"InterfaceHdr":;case"Mms":;case"InterfaceEnd":;case"DSF":;case"BuiltInFnGroupCount":break;case"Window1":;case"Window2":;case"HideObj":;case"GridSet":;case"Guts":;case"UserBView":;case"UserSViewBegin":;case"UserSViewEnd":;case"Pane":break;default:switch(R.n){case"Dat":;case"Begin":;case"End":;case"StartBlock":;case"EndBlock":;case"Frame":;case"Area":;case"Axis":;case"AxisLine":;case"Tick":break;case"AxesUsed":;case"CrtLayout12":;case"CrtLayout12A":;case"CrtLink":;case"CrtLine":;case"CrtMlFrt":;case"CrtMlFrtContinue":break;case"LineFormat":;case"AreaFormat":;case"Chart":;case"Chart3d":;case"Chart3DBarShape":;case"ChartFormat":;case"ChartFrtInfo":break;case"PlotArea":;case"PlotGrowth":break;case"SeriesList":;case"SerParent":;case"SerAuxTrend":break;case"DataFormat":;case"SerToCrt":;case"FontX":break;case"CatSerRange":;case"AxcExt":;case"SerFmt":break;case"ShtProps":break;case"DefaultText":;case"Text":;case"CatLab":break;case"DataLabExtContents":break;case"Legend":;case"LegendException":break;case"Pie":;case"Scatter":break;case"PieFormat":;case"MarkerFormat":break;case"StartObject":;case"EndObject":break;case"AlRuns":;case"ObjectLink":break;case"SIIndex":break;case"AttachedLabel":;case"YMult":break;case"Line":;case"Bar":break;case"Surf":break;case"AxisParent":break;case"Pos":break;case"ValueRange":break;case"SXViewEx9":break;case"SXViewLink":break;case"PivotChartBits":break;case"SBaseRef":break;case"TextPropsStream":break;case"LnExt":break;case"MkrExt":break;case"CrtCoopt":break;case"Qsi":;case"Qsif":;case"Qsir":;case"QsiSXTag":break;case"TxtQry":break;case"FilterMode":break;case"AutoFilter":;case"AutoFilterInfo":break;case"AutoFilter12":break;case"DropDownObjIds":break;case"Sort":break;case"SortData":break;case"ShapePropsStream":break;case"MsoDrawing":;case"MsoDrawingGroup":;case"MsoDrawingSelection":break;case"WebPub":;case"AutoWebPub":break;case"HeaderFooter":;case"HFPicture":;case"PLV":;case"HorizontalPageBreaks":;case"VerticalPageBreaks":break;case"Backup":;case"CompressPictures":;case"Compat12":break;case"Continue":;case"ContinueFrt12":break;case"FrtFontList":;case"FrtWrapper":break;default:switch(R.n){case"ExternCount":break;case"TabIdConf":;case"Radar":;case"RadarArea":;case"DropBar":;case"Intl":;case"CoordList":;case"SerAuxErrBar":break;case"BIFF2FONTCLR":;case"BIFF2FMTCNT":;case"BIFF2FONTXTRA":break;case"BIFF2XF":;case"BIFF3XF":;case"BIFF4XF":break;case"BIFF4FMTCNT":;case"BIFF2ROW":;case"BIFF2WINDOW2":break;case"SCENARIO":;case"DConBin":;case"PicF":;case"DataLabExt":;case"Lel":;case"BopPop":;case"BopPopCustom":;case"RealTimeData":;case"Name":break;default:if(options.WTF)throw"Unrecognized Record "+R.n;};};};}}else blob.l+=length}var sheetnamesraw=Object.keys(Directory).sort(function(a,b){return Number(a)-Number(b)}).map(function(x){return Directory[x].name});var sheetnames=sheetnamesraw.slice();wb.Directory=sheetnamesraw;wb.SheetNames=sheetnamesraw;if(!options.bookSheets)wb.Sheets=Sheets;if(wb.Sheets)FilterDatabases.forEach(function(r,i){wb.Sheets[wb.SheetNames[i]]["!autofilter"]=r});wb.Preamble=Preamble;wb.Strings=sst;wb.SSF=SSF.get_table();if(opts.enc)wb.Encryption=opts.enc;wb.Metadata={};if(country!==undefined)wb.Metadata.Country=country;if(supbooks.names.length>0)Workbook.Names=supbooks.names;wb.Workbook=Workbook;return wb}function parse_props(cfb){var DSI=cfb.find("!DocumentSummaryInformation");if(DSI)try{cfb.DocSummary=parse_PropertySetStream(DSI,DocSummaryPIDDSI)}catch(e){}var SI=cfb.find("!SummaryInformation");if(SI)try{cfb.Summary=parse_PropertySetStream(SI,SummaryPIDSI)}catch(e){}}function parse_xlscfb(cfb,options){if(!options)options={};fix_read_opts(options);reset_cp();var CompObj,Summary,Workbook;if(cfb.FullPaths){CompObj=cfb.find("!CompObj");Summary=cfb.find("!SummaryInformation");Workbook=cfb.find("/Workbook")}else{prep_blob(cfb,0);Workbook={content:cfb}}if(!Workbook)Workbook=cfb.find("/Book");var CompObjP,SummaryP,WorkbookP;if(CompObj)CompObjP=parse_compobj(CompObj);if(options.bookProps&&!options.bookSheets)WorkbookP={};else{if(Workbook)WorkbookP=parse_workbook(Workbook.content,options,!!Workbook.find);else if(cfb.find("PerfectOffice_MAIN"))WorkbookP=WK_.to_workbook(cfb.find("PerfectOffice_MAIN").content,options);else if(cfb.find("NativeContent_MAIN"))WorkbookP=WK_.to_workbook(cfb.find("NativeContent_MAIN").content,options);else throw new Error("Cannot find Workbook stream")}if(cfb.FullPaths)parse_props(cfb);var props={};for(var y in cfb.Summary)props[y]=cfb.Summary[y];for(y in cfb.DocSummary)props[y]=cfb.DocSummary[y];WorkbookP.Props=WorkbookP.Custprops=props;if(options.bookFiles)WorkbookP.cfb=cfb;return WorkbookP}var XLSBRecordEnum={0:{n:"BrtRowHdr",f:parse_BrtRowHdr},1:{n:"BrtCellBlank",f:parse_BrtCellBlank},2:{n:"BrtCellRk",f:parse_BrtCellRk},3:{n:"BrtCellError",f:parse_BrtCellError},4:{n:"BrtCellBool",f:parse_BrtCellBool},5:{n:"BrtCellReal",f:parse_BrtCellReal},6:{n:"BrtCellSt",f:parse_BrtCellSt},7:{n:"BrtCellIsst",f:parse_BrtCellIsst},8:{n:"BrtFmlaString",f:parse_BrtFmlaString},9:{n:"BrtFmlaNum",f:parse_BrtFmlaNum},10:{n:"BrtFmlaBool",f:parse_BrtFmlaBool},11:{n:"BrtFmlaError",f:parse_BrtFmlaError},16:{n:"BrtFRTArchID$",f:parse_BrtFRTArchID$},19:{n:"BrtSSTItem",f:parse_RichStr},20:{n:"BrtPCDIMissing",f:parsenoop},21:{n:"BrtPCDINumber",f:parsenoop},22:{n:"BrtPCDIBoolean",f:parsenoop},23:{n:"BrtPCDIError",f:parsenoop},24:{n:"BrtPCDIString",f:parsenoop},25:{n:"BrtPCDIDatetime",f:parsenoop},26:{n:"BrtPCDIIndex",f:parsenoop},27:{n:"BrtPCDIAMissing",f:parsenoop},28:{n:"BrtPCDIANumber",f:parsenoop},29:{n:"BrtPCDIABoolean",f:parsenoop},30:{n:"BrtPCDIAError",f:parsenoop},31:{n:"BrtPCDIAString",f:parsenoop},32:{n:"BrtPCDIADatetime",f:parsenoop},33:{n:"BrtPCRRecord",f:parsenoop},34:{n:"BrtPCRRecordDt",f:parsenoop},35:{n:"BrtFRTBegin",f:parsenoop},36:{n:"BrtFRTEnd",f:parsenoop},37:{n:"BrtACBegin",f:parsenoop},38:{n:"BrtACEnd",f:parsenoop},39:{n:"BrtName",f:parse_BrtName},40:{n:"BrtIndexRowBlock",f:parsenoop},42:{n:"BrtIndexBlock",f:parsenoop},43:{n:"BrtFont",f:parse_BrtFont},44:{n:"BrtFmt",f:parse_BrtFmt},45:{n:"BrtFill",f:parsenoop},46:{n:"BrtBorder",f:parsenoop},47:{n:"BrtXF",f:parse_BrtXF},48:{n:"BrtStyle",f:parsenoop},49:{n:"BrtCellMeta",f:parsenoop},50:{n:"BrtValueMeta",f:parsenoop},51:{n:"BrtMdb",f:parsenoop},52:{n:"BrtBeginFmd",f:parsenoop},53:{n:"BrtEndFmd",f:parsenoop},54:{n:"BrtBeginMdx",f:parsenoop},55:{n:"BrtEndMdx",f:parsenoop},56:{n:"BrtBeginMdxTuple",f:parsenoop},57:{n:"BrtEndMdxTuple",f:parsenoop},58:{n:"BrtMdxMbrIstr",f:parsenoop},59:{n:"BrtStr",f:parsenoop},60:{n:"BrtColInfo",f:parse_ColInfo},62:{n:"BrtCellRString",f:parsenoop},63:{n:"BrtCalcChainItem$",f:parse_BrtCalcChainItem$},64:{n:"BrtDVal",f:parsenoop},65:{n:"BrtSxvcellNum",f:parsenoop},66:{n:"BrtSxvcellStr",f:parsenoop},67:{n:"BrtSxvcellBool",f:parsenoop},68:{n:"BrtSxvcellErr",f:parsenoop},69:{n:"BrtSxvcellDate",f:parsenoop},70:{n:"BrtSxvcellNil",f:parsenoop},128:{n:"BrtFileVersion",f:parsenoop},129:{n:"BrtBeginSheet",f:parsenoop},130:{n:"BrtEndSheet",f:parsenoop},131:{n:"BrtBeginBook",f:parsenoop,p:0},132:{n:"BrtEndBook",f:parsenoop},133:{n:"BrtBeginWsViews",f:parsenoop},134:{n:"BrtEndWsViews",f:parsenoop},135:{n:"BrtBeginBookViews",f:parsenoop},136:{n:"BrtEndBookViews",f:parsenoop},137:{n:"BrtBeginWsView",f:parsenoop},138:{n:"BrtEndWsView",f:parsenoop},139:{n:"BrtBeginCsViews",f:parsenoop},140:{n:"BrtEndCsViews",f:parsenoop},141:{n:"BrtBeginCsView",f:parsenoop},142:{n:"BrtEndCsView",f:parsenoop},143:{n:"BrtBeginBundleShs",f:parsenoop},144:{n:"BrtEndBundleShs",f:parsenoop},145:{n:"BrtBeginSheetData",f:parsenoop},146:{n:"BrtEndSheetData",f:parsenoop},147:{n:"BrtWsProp",f:parse_BrtWsProp},148:{n:"BrtWsDim",f:parse_BrtWsDim,p:16},151:{n:"BrtPane",f:parsenoop},152:{n:"BrtSel",f:parsenoop},153:{n:"BrtWbProp",f:parse_BrtWbProp},154:{n:"BrtWbFactoid",f:parsenoop},155:{n:"BrtFileRecover",f:parsenoop},156:{n:"BrtBundleSh",f:parse_BrtBundleSh},157:{n:"BrtCalcProp",f:parsenoop},158:{n:"BrtBookView",f:parsenoop},159:{n:"BrtBeginSst",f:parse_BrtBeginSst},160:{n:"BrtEndSst",f:parsenoop},161:{n:"BrtBeginAFilter",f:parse_UncheckedRfX},162:{n:"BrtEndAFilter",f:parsenoop},163:{n:"BrtBeginFilterColumn",f:parsenoop},164:{n:"BrtEndFilterColumn",f:parsenoop},165:{n:"BrtBeginFilters",f:parsenoop},166:{n:"BrtEndFilters",f:parsenoop},167:{n:"BrtFilter",f:parsenoop},168:{n:"BrtColorFilter",f:parsenoop},169:{n:"BrtIconFilter",f:parsenoop},170:{n:"BrtTop10Filter",f:parsenoop},171:{n:"BrtDynamicFilter",f:parsenoop},172:{n:"BrtBeginCustomFilters",f:parsenoop},173:{n:"BrtEndCustomFilters",f:parsenoop},174:{n:"BrtCustomFilter",f:parsenoop},175:{n:"BrtAFilterDateGroupItem",f:parsenoop},176:{n:"BrtMergeCell",f:parse_BrtMergeCell},177:{n:"BrtBeginMergeCells",f:parsenoop},178:{n:"BrtEndMergeCells",f:parsenoop},179:{n:"BrtBeginPivotCacheDef",f:parsenoop},180:{n:"BrtEndPivotCacheDef",f:parsenoop},181:{n:"BrtBeginPCDFields",f:parsenoop},182:{n:"BrtEndPCDFields",f:parsenoop},183:{n:"BrtBeginPCDField",f:parsenoop},184:{n:"BrtEndPCDField",f:parsenoop},185:{n:"BrtBeginPCDSource",f:parsenoop},186:{n:"BrtEndPCDSource",f:parsenoop},187:{n:"BrtBeginPCDSRange",f:parsenoop},188:{n:"BrtEndPCDSRange",f:parsenoop},189:{n:"BrtBeginPCDFAtbl",f:parsenoop},190:{n:"BrtEndPCDFAtbl",f:parsenoop},191:{n:"BrtBeginPCDIRun",f:parsenoop},192:{n:"BrtEndPCDIRun",f:parsenoop},193:{n:"BrtBeginPivotCacheRecords",f:parsenoop},194:{n:"BrtEndPivotCacheRecords",f:parsenoop},195:{n:"BrtBeginPCDHierarchies",f:parsenoop},196:{n:"BrtEndPCDHierarchies",f:parsenoop},197:{n:"BrtBeginPCDHierarchy",f:parsenoop},198:{n:"BrtEndPCDHierarchy",f:parsenoop},199:{n:"BrtBeginPCDHFieldsUsage",f:parsenoop},200:{n:"BrtEndPCDHFieldsUsage",f:parsenoop},201:{n:"BrtBeginExtConnection",f:parsenoop},202:{n:"BrtEndExtConnection",f:parsenoop},203:{n:"BrtBeginECDbProps",f:parsenoop},204:{n:"BrtEndECDbProps",f:parsenoop},205:{n:"BrtBeginECOlapProps",f:parsenoop},206:{n:"BrtEndECOlapProps",f:parsenoop},207:{n:"BrtBeginPCDSConsol",f:parsenoop},208:{n:"BrtEndPCDSConsol",f:parsenoop},209:{n:"BrtBeginPCDSCPages",f:parsenoop},210:{n:"BrtEndPCDSCPages",f:parsenoop},211:{n:"BrtBeginPCDSCPage",f:parsenoop},212:{n:"BrtEndPCDSCPage",f:parsenoop},213:{n:"BrtBeginPCDSCPItem",f:parsenoop},214:{n:"BrtEndPCDSCPItem",f:parsenoop},215:{n:"BrtBeginPCDSCSets",f:parsenoop},216:{n:"BrtEndPCDSCSets",f:parsenoop},217:{n:"BrtBeginPCDSCSet",f:parsenoop},218:{n:"BrtEndPCDSCSet",f:parsenoop},219:{n:"BrtBeginPCDFGroup",f:parsenoop},220:{n:"BrtEndPCDFGroup",f:parsenoop},221:{n:"BrtBeginPCDFGItems",f:parsenoop},222:{n:"BrtEndPCDFGItems",f:parsenoop},223:{n:"BrtBeginPCDFGRange",f:parsenoop},224:{n:"BrtEndPCDFGRange",f:parsenoop},225:{n:"BrtBeginPCDFGDiscrete",f:parsenoop},226:{n:"BrtEndPCDFGDiscrete",f:parsenoop},227:{n:"BrtBeginPCDSDTupleCache",f:parsenoop},228:{n:"BrtEndPCDSDTupleCache",f:parsenoop},229:{n:"BrtBeginPCDSDTCEntries",f:parsenoop},230:{n:"BrtEndPCDSDTCEntries",f:parsenoop},231:{n:"BrtBeginPCDSDTCEMembers",f:parsenoop},232:{n:"BrtEndPCDSDTCEMembers",f:parsenoop},233:{n:"BrtBeginPCDSDTCEMember",f:parsenoop},234:{n:"BrtEndPCDSDTCEMember",f:parsenoop},235:{n:"BrtBeginPCDSDTCQueries",f:parsenoop},236:{n:"BrtEndPCDSDTCQueries",f:parsenoop},237:{n:"BrtBeginPCDSDTCQuery",f:parsenoop},238:{n:"BrtEndPCDSDTCQuery",f:parsenoop},239:{n:"BrtBeginPCDSDTCSets",f:parsenoop},240:{n:"BrtEndPCDSDTCSets",f:parsenoop},241:{n:"BrtBeginPCDSDTCSet",f:parsenoop},242:{n:"BrtEndPCDSDTCSet",f:parsenoop},243:{n:"BrtBeginPCDCalcItems",f:parsenoop},244:{n:"BrtEndPCDCalcItems",f:parsenoop},245:{n:"BrtBeginPCDCalcItem",f:parsenoop},246:{n:"BrtEndPCDCalcItem",f:parsenoop},247:{n:"BrtBeginPRule",f:parsenoop},248:{n:"BrtEndPRule",f:parsenoop},249:{n:"BrtBeginPRFilters",f:parsenoop},250:{n:"BrtEndPRFilters",f:parsenoop},251:{n:"BrtBeginPRFilter",f:parsenoop},252:{n:"BrtEndPRFilter",f:parsenoop},253:{n:"BrtBeginPNames",f:parsenoop},254:{n:"BrtEndPNames",f:parsenoop},255:{n:"BrtBeginPName",f:parsenoop},256:{n:"BrtEndPName",f:parsenoop},257:{n:"BrtBeginPNPairs",f:parsenoop},258:{n:"BrtEndPNPairs",f:parsenoop},259:{n:"BrtBeginPNPair",f:parsenoop},260:{n:"BrtEndPNPair",f:parsenoop},261:{n:"BrtBeginECWebProps",f:parsenoop},262:{n:"BrtEndECWebProps",f:parsenoop},263:{n:"BrtBeginEcWpTables",f:parsenoop},264:{n:"BrtEndECWPTables",f:parsenoop},265:{n:"BrtBeginECParams",f:parsenoop},266:{n:"BrtEndECParams",f:parsenoop},267:{n:"BrtBeginECParam",f:parsenoop},268:{n:"BrtEndECParam",f:parsenoop},269:{n:"BrtBeginPCDKPIs",f:parsenoop},270:{n:"BrtEndPCDKPIs",f:parsenoop},271:{n:"BrtBeginPCDKPI",f:parsenoop},272:{n:"BrtEndPCDKPI",f:parsenoop},273:{n:"BrtBeginDims",f:parsenoop},274:{n:"BrtEndDims",f:parsenoop},275:{n:"BrtBeginDim",f:parsenoop},276:{n:"BrtEndDim",f:parsenoop},277:{n:"BrtIndexPartEnd",f:parsenoop},278:{n:"BrtBeginStyleSheet",f:parsenoop},279:{n:"BrtEndStyleSheet",f:parsenoop},280:{n:"BrtBeginSXView",f:parsenoop},281:{n:"BrtEndSXVI",f:parsenoop},282:{n:"BrtBeginSXVI",f:parsenoop},283:{n:"BrtBeginSXVIs",f:parsenoop},284:{n:"BrtEndSXVIs",f:parsenoop},285:{n:"BrtBeginSXVD",f:parsenoop},286:{n:"BrtEndSXVD",f:parsenoop},287:{n:"BrtBeginSXVDs",f:parsenoop},288:{n:"BrtEndSXVDs",f:parsenoop},289:{n:"BrtBeginSXPI",f:parsenoop},290:{n:"BrtEndSXPI",f:parsenoop},291:{n:"BrtBeginSXPIs",f:parsenoop},292:{n:"BrtEndSXPIs",f:parsenoop},293:{n:"BrtBeginSXDI",f:parsenoop},294:{n:"BrtEndSXDI",f:parsenoop},295:{n:"BrtBeginSXDIs",f:parsenoop},296:{n:"BrtEndSXDIs",f:parsenoop},297:{n:"BrtBeginSXLI",f:parsenoop},298:{n:"BrtEndSXLI",f:parsenoop},299:{n:"BrtBeginSXLIRws",f:parsenoop},300:{n:"BrtEndSXLIRws",f:parsenoop},301:{n:"BrtBeginSXLICols",f:parsenoop},302:{n:"BrtEndSXLICols",f:parsenoop},303:{n:"BrtBeginSXFormat",f:parsenoop},304:{n:"BrtEndSXFormat",f:parsenoop},305:{n:"BrtBeginSXFormats",f:parsenoop},306:{n:"BrtEndSxFormats",f:parsenoop},307:{n:"BrtBeginSxSelect",f:parsenoop},308:{n:"BrtEndSxSelect",f:parsenoop},309:{n:"BrtBeginISXVDRws",f:parsenoop},310:{n:"BrtEndISXVDRws",f:parsenoop},311:{n:"BrtBeginISXVDCols",f:parsenoop},312:{n:"BrtEndISXVDCols",f:parsenoop},313:{n:"BrtEndSXLocation",f:parsenoop},314:{n:"BrtBeginSXLocation",f:parsenoop},315:{n:"BrtEndSXView",f:parsenoop},316:{n:"BrtBeginSXTHs",f:parsenoop},317:{n:"BrtEndSXTHs",f:parsenoop},318:{n:"BrtBeginSXTH",f:parsenoop},319:{n:"BrtEndSXTH",f:parsenoop},320:{n:"BrtBeginISXTHRws",f:parsenoop},321:{n:"BrtEndISXTHRws",f:parsenoop},322:{n:"BrtBeginISXTHCols",f:parsenoop},323:{n:"BrtEndISXTHCols",f:parsenoop},324:{n:"BrtBeginSXTDMPS",f:parsenoop},325:{n:"BrtEndSXTDMPs",f:parsenoop},326:{n:"BrtBeginSXTDMP",f:parsenoop},327:{n:"BrtEndSXTDMP",f:parsenoop},328:{n:"BrtBeginSXTHItems",f:parsenoop},329:{n:"BrtEndSXTHItems",f:parsenoop},330:{n:"BrtBeginSXTHItem",f:parsenoop},331:{n:"BrtEndSXTHItem",f:parsenoop},332:{n:"BrtBeginMetadata",f:parsenoop},333:{n:"BrtEndMetadata",f:parsenoop},334:{n:"BrtBeginEsmdtinfo",f:parsenoop},335:{n:"BrtMdtinfo",f:parsenoop},336:{n:"BrtEndEsmdtinfo",f:parsenoop},337:{n:"BrtBeginEsmdb",f:parsenoop},338:{n:"BrtEndEsmdb",f:parsenoop},339:{n:"BrtBeginEsfmd",f:parsenoop},340:{n:"BrtEndEsfmd",f:parsenoop},341:{n:"BrtBeginSingleCells",f:parsenoop},342:{n:"BrtEndSingleCells",f:parsenoop},343:{n:"BrtBeginList",f:parsenoop},344:{n:"BrtEndList",f:parsenoop},345:{n:"BrtBeginListCols",f:parsenoop},346:{n:"BrtEndListCols",f:parsenoop},347:{n:"BrtBeginListCol",f:parsenoop},348:{n:"BrtEndListCol",f:parsenoop},349:{n:"BrtBeginListXmlCPr",f:parsenoop},350:{n:"BrtEndListXmlCPr",f:parsenoop},351:{n:"BrtListCCFmla",f:parsenoop},352:{n:"BrtListTrFmla",f:parsenoop},353:{n:"BrtBeginExternals",f:parsenoop},354:{n:"BrtEndExternals",f:parsenoop},355:{n:"BrtSupBookSrc",f:parsenoop},357:{n:"BrtSupSelf",f:parsenoop},358:{n:"BrtSupSame",f:parsenoop},359:{n:"BrtSupTabs",f:parsenoop},360:{n:"BrtBeginSupBook",f:parsenoop},361:{n:"BrtPlaceholderName",f:parsenoop},362:{n:"BrtExternSheet",f:parsenoop},363:{n:"BrtExternTableStart",f:parsenoop},364:{n:"BrtExternTableEnd",f:parsenoop},366:{n:"BrtExternRowHdr",f:parsenoop},367:{n:"BrtExternCellBlank",f:parsenoop},368:{n:"BrtExternCellReal",f:parsenoop},369:{n:"BrtExternCellBool",f:parsenoop},370:{n:"BrtExternCellError",f:parsenoop},371:{n:"BrtExternCellString",f:parsenoop},372:{n:"BrtBeginEsmdx",f:parsenoop},373:{n:"BrtEndEsmdx",f:parsenoop},374:{n:"BrtBeginMdxSet",f:parsenoop},375:{n:"BrtEndMdxSet",f:parsenoop},376:{n:"BrtBeginMdxMbrProp",f:parsenoop},377:{n:"BrtEndMdxMbrProp",f:parsenoop},378:{n:"BrtBeginMdxKPI",f:parsenoop},379:{n:"BrtEndMdxKPI",f:parsenoop},380:{n:"BrtBeginEsstr",f:parsenoop},381:{n:"BrtEndEsstr",f:parsenoop},382:{n:"BrtBeginPRFItem",f:parsenoop},383:{n:"BrtEndPRFItem",f:parsenoop},384:{n:"BrtBeginPivotCacheIDs",f:parsenoop},385:{n:"BrtEndPivotCacheIDs",f:parsenoop},386:{n:"BrtBeginPivotCacheID",f:parsenoop},387:{n:"BrtEndPivotCacheID",f:parsenoop},388:{n:"BrtBeginISXVIs",f:parsenoop},389:{n:"BrtEndISXVIs",f:parsenoop},390:{n:"BrtBeginColInfos",f:parsenoop},391:{n:"BrtEndColInfos",f:parsenoop},392:{n:"BrtBeginRwBrk",f:parsenoop},393:{n:"BrtEndRwBrk",f:parsenoop},394:{n:"BrtBeginColBrk",f:parsenoop},395:{n:"BrtEndColBrk",f:parsenoop},396:{n:"BrtBrk",f:parsenoop},397:{n:"BrtUserBookView",f:parsenoop},398:{n:"BrtInfo",f:parsenoop},399:{n:"BrtCUsr",f:parsenoop},400:{n:"BrtUsr",f:parsenoop},401:{n:"BrtBeginUsers",f:parsenoop},403:{n:"BrtEOF",f:parsenoop},404:{n:"BrtUCR",f:parsenoop},405:{n:"BrtRRInsDel",f:parsenoop},406:{n:"BrtRREndInsDel",f:parsenoop},407:{n:"BrtRRMove",f:parsenoop},408:{n:"BrtRREndMove",f:parsenoop},409:{n:"BrtRRChgCell",f:parsenoop},410:{n:"BrtRREndChgCell",f:parsenoop},411:{n:"BrtRRHeader",f:parsenoop},412:{n:"BrtRRUserView",f:parsenoop},413:{n:"BrtRRRenSheet",f:parsenoop},414:{n:"BrtRRInsertSh",f:parsenoop},415:{n:"BrtRRDefName",f:parsenoop},416:{n:"BrtRRNote",f:parsenoop},417:{n:"BrtRRConflict",f:parsenoop},418:{n:"BrtRRTQSIF",f:parsenoop},419:{n:"BrtRRFormat",f:parsenoop},420:{n:"BrtRREndFormat",f:parsenoop},421:{n:"BrtRRAutoFmt",f:parsenoop},422:{n:"BrtBeginUserShViews",f:parsenoop},423:{n:"BrtBeginUserShView",f:parsenoop},424:{n:"BrtEndUserShView",f:parsenoop},425:{n:"BrtEndUserShViews",f:parsenoop},426:{n:"BrtArrFmla",f:parse_BrtArrFmla},427:{n:"BrtShrFmla",f:parse_BrtShrFmla},428:{n:"BrtTable",f:parsenoop},429:{n:"BrtBeginExtConnections",f:parsenoop},430:{n:"BrtEndExtConnections",f:parsenoop},431:{n:"BrtBeginPCDCalcMems",f:parsenoop},432:{n:"BrtEndPCDCalcMems",f:parsenoop},433:{n:"BrtBeginPCDCalcMem",f:parsenoop},434:{n:"BrtEndPCDCalcMem",f:parsenoop},435:{n:"BrtBeginPCDHGLevels",f:parsenoop},436:{n:"BrtEndPCDHGLevels",f:parsenoop},437:{n:"BrtBeginPCDHGLevel",f:parsenoop},438:{n:"BrtEndPCDHGLevel",f:parsenoop},439:{n:"BrtBeginPCDHGLGroups",f:parsenoop},440:{n:"BrtEndPCDHGLGroups",f:parsenoop},441:{n:"BrtBeginPCDHGLGroup",f:parsenoop},442:{n:"BrtEndPCDHGLGroup",f:parsenoop},443:{n:"BrtBeginPCDHGLGMembers",f:parsenoop},444:{n:"BrtEndPCDHGLGMembers",f:parsenoop},445:{n:"BrtBeginPCDHGLGMember",f:parsenoop},446:{n:"BrtEndPCDHGLGMember",f:parsenoop},447:{n:"BrtBeginQSI",f:parsenoop},448:{n:"BrtEndQSI",f:parsenoop},449:{n:"BrtBeginQSIR",f:parsenoop},450:{n:"BrtEndQSIR",f:parsenoop},451:{n:"BrtBeginDeletedNames",f:parsenoop},452:{n:"BrtEndDeletedNames",f:parsenoop},453:{n:"BrtBeginDeletedName",f:parsenoop},454:{n:"BrtEndDeletedName",f:parsenoop},455:{n:"BrtBeginQSIFs",f:parsenoop},456:{n:"BrtEndQSIFs",f:parsenoop},457:{n:"BrtBeginQSIF",f:parsenoop},458:{n:"BrtEndQSIF",f:parsenoop},459:{n:"BrtBeginAutoSortScope",f:parsenoop},460:{n:"BrtEndAutoSortScope",f:parsenoop},461:{n:"BrtBeginConditionalFormatting",f:parsenoop},462:{n:"BrtEndConditionalFormatting",f:parsenoop},463:{n:"BrtBeginCFRule",f:parsenoop},464:{n:"BrtEndCFRule",f:parsenoop},465:{n:"BrtBeginIconSet",f:parsenoop},466:{n:"BrtEndIconSet",f:parsenoop},467:{n:"BrtBeginDatabar", +f:parsenoop},468:{n:"BrtEndDatabar",f:parsenoop},469:{n:"BrtBeginColorScale",f:parsenoop},470:{n:"BrtEndColorScale",f:parsenoop},471:{n:"BrtCFVO",f:parsenoop},472:{n:"BrtExternValueMeta",f:parsenoop},473:{n:"BrtBeginColorPalette",f:parsenoop},474:{n:"BrtEndColorPalette",f:parsenoop},475:{n:"BrtIndexedColor",f:parsenoop},476:{n:"BrtMargins",f:parse_BrtMargins},477:{n:"BrtPrintOptions",f:parsenoop},478:{n:"BrtPageSetup",f:parsenoop},479:{n:"BrtBeginHeaderFooter",f:parsenoop},480:{n:"BrtEndHeaderFooter",f:parsenoop},481:{n:"BrtBeginSXCrtFormat",f:parsenoop},482:{n:"BrtEndSXCrtFormat",f:parsenoop},483:{n:"BrtBeginSXCrtFormats",f:parsenoop},484:{n:"BrtEndSXCrtFormats",f:parsenoop},485:{n:"BrtWsFmtInfo",f:parsenoop},486:{n:"BrtBeginMgs",f:parsenoop},487:{n:"BrtEndMGs",f:parsenoop},488:{n:"BrtBeginMGMaps",f:parsenoop},489:{n:"BrtEndMGMaps",f:parsenoop},490:{n:"BrtBeginMG",f:parsenoop},491:{n:"BrtEndMG",f:parsenoop},492:{n:"BrtBeginMap",f:parsenoop},493:{n:"BrtEndMap",f:parsenoop},494:{n:"BrtHLink",f:parse_BrtHLink},495:{n:"BrtBeginDCon",f:parsenoop},496:{n:"BrtEndDCon",f:parsenoop},497:{n:"BrtBeginDRefs",f:parsenoop},498:{n:"BrtEndDRefs",f:parsenoop},499:{n:"BrtDRef",f:parsenoop},500:{n:"BrtBeginScenMan",f:parsenoop},501:{n:"BrtEndScenMan",f:parsenoop},502:{n:"BrtBeginSct",f:parsenoop},503:{n:"BrtEndSct",f:parsenoop},504:{n:"BrtSlc",f:parsenoop},505:{n:"BrtBeginDXFs",f:parsenoop},506:{n:"BrtEndDXFs",f:parsenoop},507:{n:"BrtDXF",f:parsenoop},508:{n:"BrtBeginTableStyles",f:parsenoop},509:{n:"BrtEndTableStyles",f:parsenoop},510:{n:"BrtBeginTableStyle",f:parsenoop},511:{n:"BrtEndTableStyle",f:parsenoop},512:{n:"BrtTableStyleElement",f:parsenoop},513:{n:"BrtTableStyleClient",f:parsenoop},514:{n:"BrtBeginVolDeps",f:parsenoop},515:{n:"BrtEndVolDeps",f:parsenoop},516:{n:"BrtBeginVolType",f:parsenoop},517:{n:"BrtEndVolType",f:parsenoop},518:{n:"BrtBeginVolMain",f:parsenoop},519:{n:"BrtEndVolMain",f:parsenoop},520:{n:"BrtBeginVolTopic",f:parsenoop},521:{n:"BrtEndVolTopic",f:parsenoop},522:{n:"BrtVolSubtopic",f:parsenoop},523:{n:"BrtVolRef",f:parsenoop},524:{n:"BrtVolNum",f:parsenoop},525:{n:"BrtVolErr",f:parsenoop},526:{n:"BrtVolStr",f:parsenoop},527:{n:"BrtVolBool",f:parsenoop},528:{n:"BrtBeginCalcChain$",f:parsenoop},529:{n:"BrtEndCalcChain$",f:parsenoop},530:{n:"BrtBeginSortState",f:parsenoop},531:{n:"BrtEndSortState",f:parsenoop},532:{n:"BrtBeginSortCond",f:parsenoop},533:{n:"BrtEndSortCond",f:parsenoop},534:{n:"BrtBookProtection",f:parsenoop},535:{n:"BrtSheetProtection",f:parsenoop},536:{n:"BrtRangeProtection",f:parsenoop},537:{n:"BrtPhoneticInfo",f:parsenoop},538:{n:"BrtBeginECTxtWiz",f:parsenoop},539:{n:"BrtEndECTxtWiz",f:parsenoop},540:{n:"BrtBeginECTWFldInfoLst",f:parsenoop},541:{n:"BrtEndECTWFldInfoLst",f:parsenoop},542:{n:"BrtBeginECTwFldInfo",f:parsenoop},548:{n:"BrtFileSharing",f:parsenoop},549:{n:"BrtOleSize",f:parsenoop},550:{n:"BrtDrawing",f:parse_RelID},551:{n:"BrtLegacyDrawing",f:parsenoop},552:{n:"BrtLegacyDrawingHF",f:parsenoop},553:{n:"BrtWebOpt",f:parsenoop},554:{n:"BrtBeginWebPubItems",f:parsenoop},555:{n:"BrtEndWebPubItems",f:parsenoop},556:{n:"BrtBeginWebPubItem",f:parsenoop},557:{n:"BrtEndWebPubItem",f:parsenoop},558:{n:"BrtBeginSXCondFmt",f:parsenoop},559:{n:"BrtEndSXCondFmt",f:parsenoop},560:{n:"BrtBeginSXCondFmts",f:parsenoop},561:{n:"BrtEndSXCondFmts",f:parsenoop},562:{n:"BrtBkHim",f:parsenoop},564:{n:"BrtColor",f:parsenoop},565:{n:"BrtBeginIndexedColors",f:parsenoop},566:{n:"BrtEndIndexedColors",f:parsenoop},569:{n:"BrtBeginMRUColors",f:parsenoop},570:{n:"BrtEndMRUColors",f:parsenoop},572:{n:"BrtMRUColor",f:parsenoop},573:{n:"BrtBeginDVals",f:parsenoop},574:{n:"BrtEndDVals",f:parsenoop},577:{n:"BrtSupNameStart",f:parsenoop},578:{n:"BrtSupNameValueStart",f:parsenoop},579:{n:"BrtSupNameValueEnd",f:parsenoop},580:{n:"BrtSupNameNum",f:parsenoop},581:{n:"BrtSupNameErr",f:parsenoop},582:{n:"BrtSupNameSt",f:parsenoop},583:{n:"BrtSupNameNil",f:parsenoop},584:{n:"BrtSupNameBool",f:parsenoop},585:{n:"BrtSupNameFmla",f:parsenoop},586:{n:"BrtSupNameBits",f:parsenoop},587:{n:"BrtSupNameEnd",f:parsenoop},588:{n:"BrtEndSupBook",f:parsenoop},589:{n:"BrtCellSmartTagProperty",f:parsenoop},590:{n:"BrtBeginCellSmartTag",f:parsenoop},591:{n:"BrtEndCellSmartTag",f:parsenoop},592:{n:"BrtBeginCellSmartTags",f:parsenoop},593:{n:"BrtEndCellSmartTags",f:parsenoop},594:{n:"BrtBeginSmartTags",f:parsenoop},595:{n:"BrtEndSmartTags",f:parsenoop},596:{n:"BrtSmartTagType",f:parsenoop},597:{n:"BrtBeginSmartTagTypes",f:parsenoop},598:{n:"BrtEndSmartTagTypes",f:parsenoop},599:{n:"BrtBeginSXFilters",f:parsenoop},600:{n:"BrtEndSXFilters",f:parsenoop},601:{n:"BrtBeginSXFILTER",f:parsenoop},602:{n:"BrtEndSXFilter",f:parsenoop},603:{n:"BrtBeginFills",f:parsenoop},604:{n:"BrtEndFills",f:parsenoop},605:{n:"BrtBeginCellWatches",f:parsenoop},606:{n:"BrtEndCellWatches",f:parsenoop},607:{n:"BrtCellWatch",f:parsenoop},608:{n:"BrtBeginCRErrs",f:parsenoop},609:{n:"BrtEndCRErrs",f:parsenoop},610:{n:"BrtCrashRecErr",f:parsenoop},611:{n:"BrtBeginFonts",f:parsenoop},612:{n:"BrtEndFonts",f:parsenoop},613:{n:"BrtBeginBorders",f:parsenoop},614:{n:"BrtEndBorders",f:parsenoop},615:{n:"BrtBeginFmts",f:parsenoop},616:{n:"BrtEndFmts",f:parsenoop},617:{n:"BrtBeginCellXFs",f:parsenoop},618:{n:"BrtEndCellXFs",f:parsenoop},619:{n:"BrtBeginStyles",f:parsenoop},620:{n:"BrtEndStyles",f:parsenoop},625:{n:"BrtBigName",f:parsenoop},626:{n:"BrtBeginCellStyleXFs",f:parsenoop},627:{n:"BrtEndCellStyleXFs",f:parsenoop},628:{n:"BrtBeginComments",f:parsenoop},629:{n:"BrtEndComments",f:parsenoop},630:{n:"BrtBeginCommentAuthors",f:parsenoop},631:{n:"BrtEndCommentAuthors",f:parsenoop},632:{n:"BrtCommentAuthor",f:parse_BrtCommentAuthor},633:{n:"BrtBeginCommentList",f:parsenoop},634:{n:"BrtEndCommentList",f:parsenoop},635:{n:"BrtBeginComment",f:parse_BrtBeginComment},636:{n:"BrtEndComment",f:parsenoop},637:{n:"BrtCommentText",f:parse_BrtCommentText},638:{n:"BrtBeginOleObjects",f:parsenoop},639:{n:"BrtOleObject",f:parsenoop},640:{n:"BrtEndOleObjects",f:parsenoop},641:{n:"BrtBeginSxrules",f:parsenoop},642:{n:"BrtEndSxRules",f:parsenoop},643:{n:"BrtBeginActiveXControls",f:parsenoop},644:{n:"BrtActiveX",f:parsenoop},645:{n:"BrtEndActiveXControls",f:parsenoop},646:{n:"BrtBeginPCDSDTCEMembersSortBy",f:parsenoop},648:{n:"BrtBeginCellIgnoreECs",f:parsenoop},649:{n:"BrtCellIgnoreEC",f:parsenoop},650:{n:"BrtEndCellIgnoreECs",f:parsenoop},651:{n:"BrtCsProp",f:parsenoop},652:{n:"BrtCsPageSetup",f:parsenoop},653:{n:"BrtBeginUserCsViews",f:parsenoop},654:{n:"BrtEndUserCsViews",f:parsenoop},655:{n:"BrtBeginUserCsView",f:parsenoop},656:{n:"BrtEndUserCsView",f:parsenoop},657:{n:"BrtBeginPcdSFCIEntries",f:parsenoop},658:{n:"BrtEndPCDSFCIEntries",f:parsenoop},659:{n:"BrtPCDSFCIEntry",f:parsenoop},660:{n:"BrtBeginListParts",f:parsenoop},661:{n:"BrtListPart",f:parsenoop},662:{n:"BrtEndListParts",f:parsenoop},663:{n:"BrtSheetCalcProp",f:parsenoop},664:{n:"BrtBeginFnGroup",f:parsenoop},665:{n:"BrtFnGroup",f:parsenoop},666:{n:"BrtEndFnGroup",f:parsenoop},667:{n:"BrtSupAddin",f:parsenoop},668:{n:"BrtSXTDMPOrder",f:parsenoop},669:{n:"BrtCsProtection",f:parsenoop},671:{n:"BrtBeginWsSortMap",f:parsenoop},672:{n:"BrtEndWsSortMap",f:parsenoop},673:{n:"BrtBeginRRSort",f:parsenoop},674:{n:"BrtEndRRSort",f:parsenoop},675:{n:"BrtRRSortItem",f:parsenoop},676:{n:"BrtFileSharingIso",f:parsenoop},677:{n:"BrtBookProtectionIso",f:parsenoop},678:{n:"BrtSheetProtectionIso",f:parsenoop},679:{n:"BrtCsProtectionIso",f:parsenoop},680:{n:"BrtRangeProtectionIso",f:parsenoop},1024:{n:"BrtRwDescent",f:parsenoop},1025:{n:"BrtKnownFonts",f:parsenoop},1026:{n:"BrtBeginSXTupleSet",f:parsenoop},1027:{n:"BrtEndSXTupleSet",f:parsenoop},1028:{n:"BrtBeginSXTupleSetHeader",f:parsenoop},1029:{n:"BrtEndSXTupleSetHeader",f:parsenoop},1030:{n:"BrtSXTupleSetHeaderItem",f:parsenoop},1031:{n:"BrtBeginSXTupleSetData",f:parsenoop},1032:{n:"BrtEndSXTupleSetData",f:parsenoop},1033:{n:"BrtBeginSXTupleSetRow",f:parsenoop},1034:{n:"BrtEndSXTupleSetRow",f:parsenoop},1035:{n:"BrtSXTupleSetRowItem",f:parsenoop},1036:{n:"BrtNameExt",f:parsenoop},1037:{n:"BrtPCDH14",f:parsenoop},1038:{n:"BrtBeginPCDCalcMem14",f:parsenoop},1039:{n:"BrtEndPCDCalcMem14",f:parsenoop},1040:{n:"BrtSXTH14",f:parsenoop},1041:{n:"BrtBeginSparklineGroup",f:parsenoop},1042:{n:"BrtEndSparklineGroup",f:parsenoop},1043:{n:"BrtSparkline",f:parsenoop},1044:{n:"BrtSXDI14",f:parsenoop},1045:{n:"BrtWsFmtInfoEx14",f:parsenoop},1046:{n:"BrtBeginConditionalFormatting14",f:parsenoop},1047:{n:"BrtEndConditionalFormatting14",f:parsenoop},1048:{n:"BrtBeginCFRule14",f:parsenoop},1049:{n:"BrtEndCFRule14",f:parsenoop},1050:{n:"BrtCFVO14",f:parsenoop},1051:{n:"BrtBeginDatabar14",f:parsenoop},1052:{n:"BrtBeginIconSet14",f:parsenoop},1053:{n:"BrtDVal14",f:parsenoop},1054:{n:"BrtBeginDVals14",f:parsenoop},1055:{n:"BrtColor14",f:parsenoop},1056:{n:"BrtBeginSparklines",f:parsenoop},1057:{n:"BrtEndSparklines",f:parsenoop},1058:{n:"BrtBeginSparklineGroups",f:parsenoop},1059:{n:"BrtEndSparklineGroups",f:parsenoop},1061:{n:"BrtSXVD14",f:parsenoop},1062:{n:"BrtBeginSxview14",f:parsenoop},1063:{n:"BrtEndSxview14",f:parsenoop},1066:{n:"BrtBeginPCD14",f:parsenoop},1067:{n:"BrtEndPCD14",f:parsenoop},1068:{n:"BrtBeginExtConn14",f:parsenoop},1069:{n:"BrtEndExtConn14",f:parsenoop},1070:{n:"BrtBeginSlicerCacheIDs",f:parsenoop},1071:{n:"BrtEndSlicerCacheIDs",f:parsenoop},1072:{n:"BrtBeginSlicerCacheID",f:parsenoop},1073:{n:"BrtEndSlicerCacheID",f:parsenoop},1075:{n:"BrtBeginSlicerCache",f:parsenoop},1076:{n:"BrtEndSlicerCache",f:parsenoop},1077:{n:"BrtBeginSlicerCacheDef",f:parsenoop},1078:{n:"BrtEndSlicerCacheDef",f:parsenoop},1079:{n:"BrtBeginSlicersEx",f:parsenoop},1080:{n:"BrtEndSlicersEx",f:parsenoop},1081:{n:"BrtBeginSlicerEx",f:parsenoop},1082:{n:"BrtEndSlicerEx",f:parsenoop},1083:{n:"BrtBeginSlicer",f:parsenoop},1084:{n:"BrtEndSlicer",f:parsenoop},1085:{n:"BrtSlicerCachePivotTables",f:parsenoop},1086:{n:"BrtBeginSlicerCacheOlapImpl",f:parsenoop},1087:{n:"BrtEndSlicerCacheOlapImpl",f:parsenoop},1088:{n:"BrtBeginSlicerCacheLevelsData",f:parsenoop},1089:{n:"BrtEndSlicerCacheLevelsData",f:parsenoop},1090:{n:"BrtBeginSlicerCacheLevelData",f:parsenoop},1091:{n:"BrtEndSlicerCacheLevelData",f:parsenoop},1092:{n:"BrtBeginSlicerCacheSiRanges",f:parsenoop},1093:{n:"BrtEndSlicerCacheSiRanges",f:parsenoop},1094:{n:"BrtBeginSlicerCacheSiRange",f:parsenoop},1095:{n:"BrtEndSlicerCacheSiRange",f:parsenoop},1096:{n:"BrtSlicerCacheOlapItem",f:parsenoop},1097:{n:"BrtBeginSlicerCacheSelections",f:parsenoop},1098:{n:"BrtSlicerCacheSelection",f:parsenoop},1099:{n:"BrtEndSlicerCacheSelections",f:parsenoop},1100:{n:"BrtBeginSlicerCacheNative",f:parsenoop},1101:{n:"BrtEndSlicerCacheNative",f:parsenoop},1102:{n:"BrtSlicerCacheNativeItem",f:parsenoop},1103:{n:"BrtRangeProtection14",f:parsenoop},1104:{n:"BrtRangeProtectionIso14",f:parsenoop},1105:{n:"BrtCellIgnoreEC14",f:parsenoop},1111:{n:"BrtList14",f:parsenoop},1112:{n:"BrtCFIcon",f:parsenoop},1113:{n:"BrtBeginSlicerCachesPivotCacheIDs",f:parsenoop},1114:{n:"BrtEndSlicerCachesPivotCacheIDs",f:parsenoop},1115:{n:"BrtBeginSlicers",f:parsenoop},1116:{n:"BrtEndSlicers",f:parsenoop},1117:{n:"BrtWbProp14",f:parsenoop},1118:{n:"BrtBeginSXEdit",f:parsenoop},1119:{n:"BrtEndSXEdit",f:parsenoop},1120:{n:"BrtBeginSXEdits",f:parsenoop},1121:{n:"BrtEndSXEdits",f:parsenoop},1122:{n:"BrtBeginSXChange",f:parsenoop},1123:{n:"BrtEndSXChange",f:parsenoop},1124:{n:"BrtBeginSXChanges",f:parsenoop},1125:{n:"BrtEndSXChanges",f:parsenoop},1126:{n:"BrtSXTupleItems",f:parsenoop},1128:{n:"BrtBeginSlicerStyle",f:parsenoop},1129:{n:"BrtEndSlicerStyle",f:parsenoop},1130:{n:"BrtSlicerStyleElement",f:parsenoop},1131:{n:"BrtBeginStyleSheetExt14",f:parsenoop},1132:{n:"BrtEndStyleSheetExt14",f:parsenoop},1133:{n:"BrtBeginSlicerCachesPivotCacheID",f:parsenoop},1134:{n:"BrtEndSlicerCachesPivotCacheID",f:parsenoop},1135:{n:"BrtBeginConditionalFormattings",f:parsenoop},1136:{n:"BrtEndConditionalFormattings",f:parsenoop},1137:{n:"BrtBeginPCDCalcMemExt",f:parsenoop},1138:{n:"BrtEndPCDCalcMemExt",f:parsenoop},1139:{n:"BrtBeginPCDCalcMemsExt",f:parsenoop},1140:{n:"BrtEndPCDCalcMemsExt",f:parsenoop},1141:{n:"BrtPCDField14",f:parsenoop},1142:{n:"BrtBeginSlicerStyles",f:parsenoop},1143:{n:"BrtEndSlicerStyles",f:parsenoop},1144:{n:"BrtBeginSlicerStyleElements",f:parsenoop},1145:{n:"BrtEndSlicerStyleElements",f:parsenoop},1146:{n:"BrtCFRuleExt",f:parsenoop},1147:{n:"BrtBeginSXCondFmt14",f:parsenoop},1148:{n:"BrtEndSXCondFmt14",f:parsenoop},1149:{n:"BrtBeginSXCondFmts14",f:parsenoop},1150:{n:"BrtEndSXCondFmts14",f:parsenoop},1152:{n:"BrtBeginSortCond14",f:parsenoop},1153:{n:"BrtEndSortCond14",f:parsenoop},1154:{n:"BrtEndDVals14",f:parsenoop},1155:{n:"BrtEndIconSet14",f:parsenoop},1156:{n:"BrtEndDatabar14",f:parsenoop},1157:{n:"BrtBeginColorScale14",f:parsenoop},1158:{n:"BrtEndColorScale14",f:parsenoop},1159:{n:"BrtBeginSxrules14",f:parsenoop},1160:{n:"BrtEndSxrules14",f:parsenoop},1161:{n:"BrtBeginPRule14",f:parsenoop},1162:{n:"BrtEndPRule14",f:parsenoop},1163:{n:"BrtBeginPRFilters14",f:parsenoop},1164:{n:"BrtEndPRFilters14",f:parsenoop},1165:{n:"BrtBeginPRFilter14",f:parsenoop},1166:{n:"BrtEndPRFilter14",f:parsenoop},1167:{n:"BrtBeginPRFItem14",f:parsenoop},1168:{n:"BrtEndPRFItem14",f:parsenoop},1169:{n:"BrtBeginCellIgnoreECs14",f:parsenoop},1170:{n:"BrtEndCellIgnoreECs14",f:parsenoop},1171:{n:"BrtDxf14",f:parsenoop},1172:{n:"BrtBeginDxF14s",f:parsenoop},1173:{n:"BrtEndDxf14s",f:parsenoop},1177:{n:"BrtFilter14",f:parsenoop},1178:{n:"BrtBeginCustomFilters14",f:parsenoop},1180:{n:"BrtCustomFilter14",f:parsenoop},1181:{n:"BrtIconFilter14",f:parsenoop},1182:{n:"BrtPivotCacheConnectionName",f:parsenoop},2048:{n:"BrtBeginDecoupledPivotCacheIDs",f:parsenoop},2049:{n:"BrtEndDecoupledPivotCacheIDs",f:parsenoop},2050:{n:"BrtDecoupledPivotCacheID",f:parsenoop},2051:{n:"BrtBeginPivotTableRefs",f:parsenoop},2052:{n:"BrtEndPivotTableRefs",f:parsenoop},2053:{n:"BrtPivotTableRef",f:parsenoop},2054:{n:"BrtSlicerCacheBookPivotTables",f:parsenoop},2055:{n:"BrtBeginSxvcells",f:parsenoop},2056:{n:"BrtEndSxvcells",f:parsenoop},2057:{n:"BrtBeginSxRow",f:parsenoop},2058:{n:"BrtEndSxRow",f:parsenoop},2060:{n:"BrtPcdCalcMem15",f:parsenoop},2067:{n:"BrtQsi15",f:parsenoop},2068:{n:"BrtBeginWebExtensions",f:parsenoop},2069:{n:"BrtEndWebExtensions",f:parsenoop},2070:{n:"BrtWebExtension",f:parsenoop},2071:{n:"BrtAbsPath15",f:parsenoop},2072:{n:"BrtBeginPivotTableUISettings",f:parsenoop},2073:{n:"BrtEndPivotTableUISettings",f:parsenoop},2075:{n:"BrtTableSlicerCacheIDs",f:parsenoop},2076:{n:"BrtTableSlicerCacheID",f:parsenoop},2077:{n:"BrtBeginTableSlicerCache",f:parsenoop},2078:{n:"BrtEndTableSlicerCache",f:parsenoop},2079:{n:"BrtSxFilter15",f:parsenoop},2080:{n:"BrtBeginTimelineCachePivotCacheIDs",f:parsenoop},2081:{n:"BrtEndTimelineCachePivotCacheIDs",f:parsenoop},2082:{n:"BrtTimelineCachePivotCacheID",f:parsenoop},2083:{n:"BrtBeginTimelineCacheIDs",f:parsenoop},2084:{n:"BrtEndTimelineCacheIDs",f:parsenoop},2085:{n:"BrtBeginTimelineCacheID",f:parsenoop},2086:{n:"BrtEndTimelineCacheID",f:parsenoop},2087:{n:"BrtBeginTimelinesEx",f:parsenoop},2088:{n:"BrtEndTimelinesEx",f:parsenoop},2089:{n:"BrtBeginTimelineEx",f:parsenoop},2090:{n:"BrtEndTimelineEx",f:parsenoop},2091:{n:"BrtWorkBookPr15",f:parsenoop},2092:{n:"BrtPCDH15",f:parsenoop},2093:{n:"BrtBeginTimelineStyle",f:parsenoop},2094:{n:"BrtEndTimelineStyle",f:parsenoop},2095:{n:"BrtTimelineStyleElement",f:parsenoop},2096:{n:"BrtBeginTimelineStylesheetExt15",f:parsenoop},2097:{n:"BrtEndTimelineStylesheetExt15",f:parsenoop},2098:{n:"BrtBeginTimelineStyles",f:parsenoop},2099:{n:"BrtEndTimelineStyles",f:parsenoop},2100:{n:"BrtBeginTimelineStyleElements",f:parsenoop},2101:{n:"BrtEndTimelineStyleElements",f:parsenoop},2102:{n:"BrtDxf15",f:parsenoop},2103:{n:"BrtBeginDxfs15",f:parsenoop},2104:{n:"brtEndDxfs15",f:parsenoop},2105:{n:"BrtSlicerCacheHideItemsWithNoData",f:parsenoop},2106:{n:"BrtBeginItemUniqueNames",f:parsenoop},2107:{n:"BrtEndItemUniqueNames",f:parsenoop},2108:{n:"BrtItemUniqueName",f:parsenoop},2109:{n:"BrtBeginExtConn15",f:parsenoop},2110:{n:"BrtEndExtConn15",f:parsenoop},2111:{n:"BrtBeginOledbPr15",f:parsenoop},2112:{n:"BrtEndOledbPr15",f:parsenoop},2113:{n:"BrtBeginDataFeedPr15",f:parsenoop},2114:{n:"BrtEndDataFeedPr15",f:parsenoop},2115:{n:"BrtTextPr15",f:parsenoop},2116:{n:"BrtRangePr15",f:parsenoop},2117:{n:"BrtDbCommand15",f:parsenoop},2118:{n:"BrtBeginDbTables15",f:parsenoop},2119:{n:"BrtEndDbTables15",f:parsenoop},2120:{n:"BrtDbTable15",f:parsenoop},2121:{n:"BrtBeginDataModel",f:parsenoop},2122:{n:"BrtEndDataModel",f:parsenoop},2123:{n:"BrtBeginModelTables",f:parsenoop},2124:{n:"BrtEndModelTables",f:parsenoop},2125:{n:"BrtModelTable",f:parsenoop},2126:{n:"BrtBeginModelRelationships",f:parsenoop},2127:{n:"BrtEndModelRelationships",f:parsenoop},2128:{n:"BrtModelRelationship",f:parsenoop},2129:{n:"BrtBeginECTxtWiz15",f:parsenoop},2130:{n:"BrtEndECTxtWiz15",f:parsenoop},2131:{n:"BrtBeginECTWFldInfoLst15",f:parsenoop},2132:{n:"BrtEndECTWFldInfoLst15",f:parsenoop},2133:{n:"BrtBeginECTWFldInfo15",f:parsenoop},2134:{n:"BrtFieldListActiveItem",f:parsenoop},2135:{n:"BrtPivotCacheIdVersion",f:parsenoop},2136:{n:"BrtSXDI15",f:parsenoop},65535:{n:"",f:parsenoop}};var evert_RE=evert_key(XLSBRecordEnum,"n");var XLSRecordEnum={3:{n:"BIFF2NUM",f:parse_BIFF2NUM},4:{n:"BIFF2STR",f:parse_BIFF2STR},6:{n:"Formula",f:parse_Formula},9:{n:"BOF",f:parse_BOF},10:{n:"EOF",f:parse_EOF},12:{n:"CalcCount",f:parse_CalcCount},13:{n:"CalcMode",f:parse_CalcMode},14:{n:"CalcPrecision",f:parse_CalcPrecision},15:{n:"CalcRefMode",f:parse_CalcRefMode},16:{n:"CalcDelta",f:parse_CalcDelta},17:{n:"CalcIter",f:parse_CalcIter},18:{n:"Protect",f:parse_Protect},19:{n:"Password",f:parse_Password},20:{n:"Header",f:parse_Header},21:{n:"Footer",f:parse_Footer},23:{n:"ExternSheet",f:parse_ExternSheet},24:{n:"Lbl",f:parse_Lbl},25:{n:"WinProtect",f:parse_WinProtect},26:{n:"VerticalPageBreaks",f:parse_VerticalPageBreaks},27:{n:"HorizontalPageBreaks",f:parse_HorizontalPageBreaks},28:{n:"Note",f:parse_Note},29:{n:"Selection",f:parse_Selection},34:{n:"Date1904",f:parse_Date1904},35:{n:"ExternName",f:parse_ExternName},38:{n:"LeftMargin",f:parse_LeftMargin},39:{n:"RightMargin",f:parse_RightMargin},40:{n:"TopMargin",f:parse_TopMargin},41:{n:"BottomMargin",f:parse_BottomMargin},42:{n:"PrintRowCol",f:parse_PrintRowCol},43:{n:"PrintGrid",f:parse_PrintGrid},47:{n:"FilePass",f:parse_FilePass},49:{n:"Font",f:parse_Font},51:{n:"PrintSize",f:parse_PrintSize},60:{n:"Continue",f:parse_Continue},61:{n:"Window1",f:parse_Window1},64:{n:"Backup",f:parse_Backup},65:{n:"Pane",f:parse_Pane},66:{n:"CodePage",f:parse_CodePage},77:{n:"Pls",f:parse_Pls},80:{n:"DCon",f:parse_DCon},81:{n:"DConRef",f:parse_DConRef},82:{n:"DConName",f:parse_DConName},85:{n:"DefColWidth",f:parse_DefColWidth},89:{n:"XCT",f:parse_XCT},90:{n:"CRN",f:parse_CRN},91:{n:"FileSharing",f:parse_FileSharing},92:{n:"WriteAccess",f:parse_WriteAccess},93:{n:"Obj",f:parse_Obj},94:{n:"Uncalced",f:parse_Uncalced},95:{n:"CalcSaveRecalc",f:parse_CalcSaveRecalc},96:{n:"Template",f:parse_Template},97:{n:"Intl",f:parse_Intl},99:{n:"ObjProtect",f:parse_ObjProtect},125:{n:"ColInfo",f:parse_ColInfo},128:{n:"Guts",f:parse_Guts},129:{n:"WsBool",f:parse_WsBool},130:{n:"GridSet",f:parse_GridSet},131:{n:"HCenter",f:parse_HCenter},132:{n:"VCenter",f:parse_VCenter},133:{n:"BoundSheet8",f:parse_BoundSheet8},134:{n:"WriteProtect",f:parse_WriteProtect},140:{n:"Country",f:parse_Country},141:{n:"HideObj",f:parse_HideObj},144:{n:"Sort",f:parse_Sort},146:{n:"Palette",f:parse_Palette},151:{n:"Sync",f:parse_Sync},152:{n:"LPr",f:parse_LPr},153:{n:"DxGCol",f:parse_DxGCol},154:{n:"FnGroupName",f:parse_FnGroupName},155:{n:"FilterMode",f:parse_FilterMode},156:{n:"BuiltInFnGroupCount",f:parse_BuiltInFnGroupCount},157:{n:"AutoFilterInfo",f:parse_AutoFilterInfo},158:{n:"AutoFilter",f:parse_AutoFilter},160:{n:"Scl",f:parse_Scl},161:{n:"Setup",f:parse_Setup},174:{n:"ScenMan",f:parse_ScenMan},175:{n:"SCENARIO",f:parse_SCENARIO},176:{n:"SxView",f:parse_SxView},177:{n:"Sxvd",f:parse_Sxvd},178:{n:"SXVI",f:parse_SXVI},180:{n:"SxIvd",f:parse_SxIvd},181:{n:"SXLI",f:parse_SXLI},182:{n:"SXPI",f:parse_SXPI},184:{n:"DocRoute",f:parse_DocRoute},185:{n:"RecipName",f:parse_RecipName},189:{n:"MulRk",f:parse_MulRk},190:{n:"MulBlank",f:parse_MulBlank},193:{n:"Mms",f:parse_Mms},197:{n:"SXDI",f:parse_SXDI},198:{n:"SXDB",f:parse_SXDB},199:{n:"SXFDB",f:parse_SXFDB},200:{n:"SXDBB",f:parse_SXDBB},201:{n:"SXNum",f:parse_SXNum},202:{n:"SxBool",f:parse_SxBool},203:{n:"SxErr",f:parse_SxErr},204:{n:"SXInt",f:parse_SXInt},205:{n:"SXString",f:parse_SXString},206:{n:"SXDtr",f:parse_SXDtr},207:{n:"SxNil",f:parse_SxNil},208:{n:"SXTbl",f:parse_SXTbl},209:{n:"SXTBRGIITM",f:parse_SXTBRGIITM},210:{n:"SxTbpg",f:parse_SxTbpg},211:{n:"ObProj",f:parse_ObProj},213:{n:"SXStreamID",f:parse_SXStreamID},215:{n:"DBCell",f:parse_DBCell},216:{n:"SXRng",f:parse_SXRng},217:{n:"SxIsxoper",f:parse_SxIsxoper},218:{n:"BookBool",f:parse_BookBool},220:{n:"DbOrParamQry",f:parse_DbOrParamQry},221:{n:"ScenarioProtect",f:parse_ScenarioProtect},222:{n:"OleObjectSize",f:parse_OleObjectSize},224:{n:"XF",f:parse_XF},225:{n:"InterfaceHdr",f:parse_InterfaceHdr},226:{n:"InterfaceEnd",f:parse_InterfaceEnd},227:{n:"SXVS",f:parse_SXVS},229:{n:"MergeCells",f:parse_MergeCells},233:{n:"BkHim",f:parse_BkHim},235:{n:"MsoDrawingGroup",f:parse_MsoDrawingGroup},236:{n:"MsoDrawing",f:parse_MsoDrawing},237:{n:"MsoDrawingSelection",f:parse_MsoDrawingSelection},239:{n:"PhoneticInfo",f:parse_PhoneticInfo},240:{n:"SxRule",f:parse_SxRule},241:{n:"SXEx",f:parse_SXEx},242:{n:"SxFilt",f:parse_SxFilt},244:{n:"SxDXF",f:parse_SxDXF},245:{n:"SxItm",f:parse_SxItm},246:{n:"SxName",f:parse_SxName},247:{n:"SxSelect",f:parse_SxSelect},248:{n:"SXPair",f:parse_SXPair},249:{n:"SxFmla",f:parse_SxFmla},251:{n:"SxFormat",f:parse_SxFormat},252:{n:"SST",f:parse_SST},253:{n:"LabelSst",f:parse_LabelSst},255:{n:"ExtSST",f:parse_ExtSST},256:{n:"SXVDEx",f:parse_SXVDEx},259:{n:"SXFormula",f:parse_SXFormula},290:{n:"SXDBEx",f:parse_SXDBEx},311:{n:"RRDInsDel",f:parse_RRDInsDel},312:{n:"RRDHead",f:parse_RRDHead},315:{n:"RRDChgCell",f:parse_RRDChgCell},317:{n:"RRTabId",f:parse_RRTabId},318:{n:"RRDRenSheet",f:parse_RRDRenSheet},319:{n:"RRSort",f:parse_RRSort},320:{n:"RRDMove",f:parse_RRDMove},330:{n:"RRFormat",f:parse_RRFormat},331:{n:"RRAutoFmt",f:parse_RRAutoFmt},333:{n:"RRInsertSh",f:parse_RRInsertSh},334:{n:"RRDMoveBegin",f:parse_RRDMoveBegin},335:{n:"RRDMoveEnd",f:parse_RRDMoveEnd},336:{n:"RRDInsDelBegin",f:parse_RRDInsDelBegin},337:{n:"RRDInsDelEnd",f:parse_RRDInsDelEnd},338:{n:"RRDConflict",f:parse_RRDConflict},339:{n:"RRDDefName",f:parse_RRDDefName},340:{n:"RRDRstEtxp",f:parse_RRDRstEtxp},351:{n:"LRng",f:parse_LRng},352:{n:"UsesELFs",f:parse_UsesELFs},353:{n:"DSF",f:parse_DSF},401:{n:"CUsr",f:parse_CUsr},402:{n:"CbUsr",f:parse_CbUsr},403:{n:"UsrInfo",f:parse_UsrInfo},404:{n:"UsrExcl",f:parse_UsrExcl},405:{n:"FileLock",f:parse_FileLock},406:{n:"RRDInfo",f:parse_RRDInfo},407:{n:"BCUsrs",f:parse_BCUsrs},408:{n:"UsrChk",f:parse_UsrChk},425:{n:"UserBView",f:parse_UserBView},426:{n:"UserSViewBegin",f:parse_UserSViewBegin},427:{n:"UserSViewEnd",f:parse_UserSViewEnd},428:{n:"RRDUserView",f:parse_RRDUserView},429:{n:"Qsi",f:parse_Qsi},430:{n:"SupBook",f:parse_SupBook},431:{n:"Prot4Rev",f:parse_Prot4Rev},432:{n:"CondFmt",f:parse_CondFmt},433:{n:"CF",f:parse_CF},434:{n:"DVal",f:parse_DVal},437:{n:"DConBin",f:parse_DConBin},438:{n:"TxO",f:parse_TxO},439:{n:"RefreshAll",f:parse_RefreshAll},440:{n:"HLink",f:parse_HLink},441:{n:"Lel",f:parse_Lel},442:{n:"CodeName",f:parse_XLSCodeName},443:{n:"SXFDBType",f:parse_SXFDBType},444:{n:"Prot4RevPass",f:parse_Prot4RevPass},445:{n:"ObNoMacros",f:parse_ObNoMacros},446:{n:"Dv",f:parse_Dv},448:{n:"Excel9File",f:parse_Excel9File},449:{n:"RecalcId",f:parse_RecalcId,r:2},450:{n:"EntExU2",f:parse_EntExU2},512:{n:"Dimensions",f:parse_Dimensions},513:{n:"Blank",f:parse_Blank},515:{n:"Number",f:parse_Number},516:{n:"Label",f:parse_Label},517:{n:"BoolErr",f:parse_BoolErr},518:{n:"Formula",f:parse_Formula},519:{n:"String",f:parse_String},520:{n:"Row",f:parse_Row},523:{n:"Index",f:parse_Index},545:{n:"Array",f:parse_Array},549:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},566:{n:"Table",f:parse_Table},574:{n:"Window2",f:parse_Window2},638:{n:"RK",f:parse_RK},659:{n:"Style",f:parse_Style},1030:{n:"Formula",f:parse_Formula},1048:{n:"BigName",f:parse_BigName},1054:{n:"Format",f:parse_Format},1084:{n:"ContinueBigName",f:parse_ContinueBigName},1212:{n:"ShrFmla",f:parse_ShrFmla},2048:{n:"HLinkTooltip",f:parse_HLinkTooltip},2049:{n:"WebPub",f:parse_WebPub},2050:{n:"QsiSXTag",f:parse_QsiSXTag},2051:{n:"DBQueryExt",f:parse_DBQueryExt},2052:{n:"ExtString",f:parse_ExtString},2053:{n:"TxtQry",f:parse_TxtQry},2054:{n:"Qsir",f:parse_Qsir},2055:{n:"Qsif",f:parse_Qsif},2056:{n:"RRDTQSIF",f:parse_RRDTQSIF},2057:{n:"BOF",f:parse_BOF},2058:{n:"OleDbConn",f:parse_OleDbConn},2059:{n:"WOpt",f:parse_WOpt},2060:{n:"SXViewEx",f:parse_SXViewEx},2061:{n:"SXTH",f:parse_SXTH},2062:{n:"SXPIEx",f:parse_SXPIEx},2063:{n:"SXVDTEx",f:parse_SXVDTEx},2064:{n:"SXViewEx9",f:parse_SXViewEx9},2066:{n:"ContinueFrt",f:parse_ContinueFrt},2067:{n:"RealTimeData",f:parse_RealTimeData},2128:{n:"ChartFrtInfo",f:parse_ChartFrtInfo},2129:{n:"FrtWrapper",f:parse_FrtWrapper},2130:{n:"StartBlock",f:parse_StartBlock},2131:{n:"EndBlock",f:parse_EndBlock},2132:{n:"StartObject",f:parse_StartObject},2133:{n:"EndObject",f:parse_EndObject},2134:{n:"CatLab",f:parse_CatLab},2135:{n:"YMult",f:parse_YMult},2136:{n:"SXViewLink",f:parse_SXViewLink},2137:{n:"PivotChartBits",f:parse_PivotChartBits},2138:{n:"FrtFontList",f:parse_FrtFontList},2146:{n:"SheetExt",f:parse_SheetExt},2147:{n:"BookExt",f:parse_BookExt,r:12},2148:{n:"SXAddl",f:parse_SXAddl},2149:{n:"CrErr",f:parse_CrErr},2150:{n:"HFPicture",f:parse_HFPicture},2151:{n:"FeatHdr",f:parse_FeatHdr},2152:{n:"Feat",f:parse_Feat},2154:{n:"DataLabExt",f:parse_DataLabExt},2155:{n:"DataLabExtContents",f:parse_DataLabExtContents},2156:{n:"CellWatch",f:parse_CellWatch},2161:{n:"FeatHdr11",f:parse_FeatHdr11},2162:{n:"Feature11",f:parse_Feature11},2164:{n:"DropDownObjIds",f:parse_DropDownObjIds},2165:{n:"ContinueFrt11",f:parse_ContinueFrt11},2166:{n:"DConn",f:parse_DConn},2167:{n:"List12",f:parse_List12},2168:{n:"Feature12",f:parse_Feature12},2169:{n:"CondFmt12",f:parse_CondFmt12},2170:{n:"CF12",f:parse_CF12},2171:{n:"CFEx",f:parse_CFEx},2172:{n:"XFCRC",f:parse_XFCRC,r:12},2173:{n:"XFExt",f:parse_XFExt,r:12},2174:{n:"AutoFilter12",f:parse_AutoFilter12},2175:{n:"ContinueFrt12",f:parse_ContinueFrt12},2180:{n:"MDTInfo",f:parse_MDTInfo},2181:{n:"MDXStr",f:parse_MDXStr},2182:{n:"MDXTuple",f:parse_MDXTuple},2183:{n:"MDXSet",f:parse_MDXSet},2184:{n:"MDXProp",f:parse_MDXProp},2185:{n:"MDXKPI",f:parse_MDXKPI},2186:{n:"MDB",f:parse_MDB},2187:{n:"PLV",f:parse_PLV},2188:{n:"Compat12",f:parse_Compat12,r:12},2189:{n:"DXF",f:parse_DXF},2190:{n:"TableStyles",f:parse_TableStyles,r:12},2191:{n:"TableStyle",f:parse_TableStyle},2192:{n:"TableStyleElement",f:parse_TableStyleElement},2194:{n:"StyleExt",f:parse_StyleExt},2195:{n:"NamePublish",f:parse_NamePublish},2196:{n:"NameCmt",f:parse_NameCmt,r:12},2197:{n:"SortData",f:parse_SortData},2198:{n:"Theme",f:parse_Theme,r:12},2199:{n:"GUIDTypeLib",f:parse_GUIDTypeLib},2200:{n:"FnGrp12",f:parse_FnGrp12},2201:{n:"NameFnGrp12",f:parse_NameFnGrp12},2202:{n:"MTRSettings",f:parse_MTRSettings,r:12},2203:{n:"CompressPictures",f:parse_CompressPictures},2204:{n:"HeaderFooter",f:parse_HeaderFooter},2205:{n:"CrtLayout12",f:parse_CrtLayout12},2206:{n:"CrtMlFrt",f:parse_CrtMlFrt},2207:{n:"CrtMlFrtContinue",f:parse_CrtMlFrtContinue},2211:{n:"ForceFullCalculation",f:parse_ForceFullCalculation},2212:{n:"ShapePropsStream",f:parse_ShapePropsStream},2213:{n:"TextPropsStream",f:parse_TextPropsStream},2214:{n:"RichTextStream",f:parse_RichTextStream},2215:{n:"CrtLayout12A",f:parse_CrtLayout12A},4097:{n:"Units",f:parse_Units},4098:{n:"Chart",f:parse_Chart},4099:{n:"Series",f:parse_Series},4102:{n:"DataFormat",f:parse_DataFormat},4103:{n:"LineFormat",f:parse_LineFormat},4105:{n:"MarkerFormat",f:parse_MarkerFormat},4106:{n:"AreaFormat",f:parse_AreaFormat},4107:{n:"PieFormat",f:parse_PieFormat},4108:{n:"AttachedLabel",f:parse_AttachedLabel},4109:{n:"SeriesText",f:parse_SeriesText},4116:{n:"ChartFormat",f:parse_ChartFormat},4117:{n:"Legend",f:parse_Legend},4118:{n:"SeriesList",f:parse_SeriesList},4119:{n:"Bar",f:parse_Bar},4120:{n:"Line",f:parse_Line},4121:{n:"Pie",f:parse_Pie},4122:{n:"Area",f:parse_Area},4123:{n:"Scatter",f:parse_Scatter},4124:{n:"CrtLine",f:parse_CrtLine},4125:{n:"Axis",f:parse_Axis},4126:{n:"Tick",f:parse_Tick},4127:{n:"ValueRange",f:parse_ValueRange},4128:{n:"CatSerRange",f:parse_CatSerRange},4129:{n:"AxisLine",f:parse_AxisLine},4130:{n:"CrtLink",f:parse_CrtLink},4132:{n:"DefaultText",f:parse_DefaultText},4133:{n:"Text",f:parse_Text},4134:{n:"FontX",f:parse_FontX},4135:{n:"ObjectLink",f:parse_ObjectLink},4146:{n:"Frame",f:parse_Frame},4147:{n:"Begin",f:parse_Begin},4148:{n:"End",f:parse_End},4149:{n:"PlotArea",f:parse_PlotArea},4154:{n:"Chart3d",f:parse_Chart3d},4156:{n:"PicF",f:parse_PicF},4157:{n:"DropBar",f:parse_DropBar},4158:{n:"Radar",f:parse_Radar},4159:{n:"Surf",f:parse_Surf},4160:{n:"RadarArea",f:parse_RadarArea},4161:{n:"AxisParent",f:parse_AxisParent},4163:{n:"LegendException",f:parse_LegendException},4164:{n:"ShtProps",f:parse_ShtProps},4165:{n:"SerToCrt",f:parse_SerToCrt},4166:{n:"AxesUsed",f:parse_AxesUsed},4168:{n:"SBaseRef",f:parse_SBaseRef},4170:{n:"SerParent",f:parse_SerParent},4171:{n:"SerAuxTrend",f:parse_SerAuxTrend},4174:{n:"IFmtRecord",f:parse_IFmtRecord},4175:{n:"Pos",f:parse_Pos},4176:{n:"AlRuns",f:parse_AlRuns},4177:{n:"BRAI",f:parse_BRAI},4187:{n:"SerAuxErrBar",f:parse_SerAuxErrBar},4188:{n:"ClrtClient",f:parse_ClrtClient},4189:{n:"SerFmt",f:parse_SerFmt},4191:{n:"Chart3DBarShape",f:parse_Chart3DBarShape},4192:{n:"Fbi",f:parse_Fbi},4193:{n:"BopPop",f:parse_BopPop},4194:{n:"AxcExt",f:parse_AxcExt},4195:{n:"Dat",f:parse_Dat},4196:{n:"PlotGrowth",f:parse_PlotGrowth},4197:{n:"SIIndex",f:parse_SIIndex},4198:{n:"GelFrame",f:parse_GelFrame},4199:{n:"BopPopCustom",f:parse_BopPopCustom},4200:{n:"Fbi2",f:parse_Fbi2},0:{n:"Dimensions",f:parse_Dimensions},2:{n:"BIFF2INT",f:parse_BIFF2INT},5:{n:"BoolErr",f:parse_BoolErr},7:{n:"String",f:parse_BIFF2STRING},8:{n:"BIFF2ROW",f:parsenoop},11:{n:"Index",f:parse_Index},22:{n:"ExternCount",f:parsenoop},30:{n:"BIFF2FORMAT",f:parse_BIFF2Format},31:{n:"BIFF2FMTCNT",f:parsenoop},32:{n:"BIFF2COLINFO",f:parsenoop},33:{n:"Array",f:parse_Array},37:{n:"DefaultRowHeight",f:parse_DefaultRowHeight},50:{n:"BIFF2FONTXTRA",f:parse_BIFF2FONTXTRA},62:{n:"BIFF2WINDOW2",f:parsenoop},69:{n:"BIFF2FONTCLR",f:parsenoop},86:{n:"BIFF4FMTCNT",f:parsenoop},126:{n:"RK",f:parsenoop},127:{n:"ImData",f:parse_ImData},135:{n:"Addin",f:parsenoop},136:{n:"Edg",f:parsenoop},137:{n:"Pub",f:parsenoop},145:{n:"Sub",f:parsenoop},148:{n:"LHRecord",f:parsenoop},149:{n:"LHNGraph",f:parsenoop},150:{n:"Sound",f:parsenoop},169:{n:"CoordList",f:parsenoop},171:{n:"GCW",f:parsenoop},188:{n:"ShrFmla",f:parsenoop},194:{n:"AddMenu",f:parsenoop},195:{n:"DelMenu",f:parsenoop},214:{n:"RString",f:parse_RString},223:{n:"UDDesc",f:parsenoop},234:{n:"TabIdConf",f:parsenoop},354:{n:"XL5Modify",f:parsenoop},421:{n:"FileSharing2",f:parsenoop},521:{n:"BOF",f:parse_BOF},536:{n:"Lbl",f:parse_Lbl},547:{n:"ExternName",f:parse_ExternName},561:{n:"Font",f:parsenoop},1033:{n:"BOF",f:parse_BOF},2157:{n:"FeatInfo",f:parsenoop},2163:{n:"FeatInfo11",f:parsenoop},2177:{n:"SXAddl12",f:parsenoop},2240:{n:"AutoWebPub",f:parsenoop},2241:{n:"ListObj",f:parsenoop},2242:{n:"ListField",f:parsenoop},2243:{n:"ListDV",f:parsenoop},2244:{n:"ListCondFmt",f:parsenoop},2245:{n:"ListCF",f:parsenoop},2246:{n:"FMQry",f:parsenoop},2247:{n:"FMSQry",f:parsenoop},2248:{n:"PLV",f:parsenoop},2249:{n:"LnExt",f:parsenoop},2250:{n:"MkrExt",f:parsenoop},2251:{n:"CrtCoopt",f:parsenoop},67:{n:"BIFF2XF",f:parsenoop},579:{n:"BIFF3XF",f:parsenoop},1091:{n:"BIFF4XF",f:parsenoop +},29282:{}};function write_biff_rec(ba,t,payload,length){var len=length||(payload||[]).length;var o=ba.next(4+len);o.write_shift(2,t);o.write_shift(2,len);if(len>0&&is_buf(payload))ba.push(payload)}function write_BOF(wb,o){if(o.bookType!="biff2")throw"unsupported BIFF version";var out=new_buf(4);out.write_shift(2,2);out.write_shift(2,16);return out}function write_BIFF2Cell(out,r,c){if(!out)out=new_buf(7);out.write_shift(2,r);out.write_shift(2,c);out.write_shift(1,0);out.write_shift(1,0);out.write_shift(1,0);return out}function write_BIFF2INT(r,c,val){var out=new_buf(9);write_BIFF2Cell(out,r,c);out.write_shift(2,val);return out}function write_BIFF2NUMBER(r,c,val){var out=new_buf(15);write_BIFF2Cell(out,r,c);out.write_shift(8,val,"f");return out}function write_BIFF2BERR(r,c,val,t){var out=new_buf(9);write_BIFF2Cell(out,r,c);if(t=="e"){out.write_shift(1,val);out.write_shift(1,1)}else{out.write_shift(1,val?1:0);out.write_shift(1,0)}return out}function write_BIFF2LABEL(r,c,val){var out=new_buf(8+2*val.length);write_BIFF2Cell(out,r,c);out.write_shift(1,val.length);out.write_shift(val.length,val,"sbcs");return out.l=0&&v<65536)write_biff_rec(ba,2,write_BIFF2INT(R,C,v));else write_biff_rec(ba,3,write_BIFF2NUMBER(R,C,v));return;case"b":;case"e":write_biff_rec(ba,5,write_BIFF2BERR(R,C,cell.v,cell.t));return;case"s":;case"str":write_biff_rec(ba,4,write_BIFF2LABEL(R,C,cell.v));return;}write_biff_rec(ba,1,write_BIFF2Cell(null,R,C))}function write_biff_ws(ba,ws,idx,opts,wb){var dense=Array.isArray(ws);var range=safe_decode_range(ws["!ref"]||"A1"),ref,rr="",cols=[];for(var R=range.s.r;R<=range.e.r;++R){rr=encode_row(R);for(var C=range.s.c;C<=range.e.c;++C){if(R===range.s.r)cols[C]=encode_col(C);ref=cols[C]+rr;var cell=dense?ws[R][C]:ws[ref];if(!cell)continue;write_ws_biff_cell(ba,cell,R,C,opts)}}}function write_biff_buf(wb,opts){var o=opts||{};if(DENSE!=null&&o.dense==null)o.dense=DENSE;var ba=buf_array();var idx=0;for(var i=0;i / pair");var rows=str.slice(i,j).split(/(:?]*>)/);var R=-1,C=0,RS=0,CS=0;var range={s:{r:1e7,c:1e7},e:{r:0,c:0}};var merges=[],midx=0;for(i=0;i");for(j=0;j"))>-1)m=m.slice(cc+1);while(m.indexOf(">")>-1)m=m.slice(0,m.lastIndexOf("<"));var tag=parsexmltag(cell.slice(0,cell.indexOf(">")));CS=tag.colspan?+tag.colspan:1;if((RS=+tag.rowspan)>0||CS>1)merges.push({s:{r:R,c:C},e:{r:R+(RS||1)-1,c:C+CS-1}});if(!m.length){C+=CS;continue}m=unescapexml(m).replace(/[\r\n]/g,"");if(range.s.r>R)range.s.r=R;if(range.e.rC)range.s.c=C;if(range.e.c";for(var C=r.s.c;C<=r.e.c;++C){var RS=0,CS=0;for(var j=0;jR||M[j].s.c>C)continue;if(M[j].e.r1)sp.rowspan=RS;if(CS>1)sp.colspan=CS;if(o.editable)sp.contenteditable="true";oo.push(writextag("td",w,sp))}return""+oo.join("")+""}var _BEGIN="SheetJS Table Export";var _END="
";function sheet_to_html(ws,opts){var o=opts||{};var out=[];var r=decode_range(ws["!ref"]);o.dense=Array.isArray(ws);for(var R=r.s.r;R<=r.e.r;++R)out.push(make_html_row(ws,r,R,o));var header=o.header!=null?o.header:_BEGIN;var footer=o.footer!=null?o.footer:_END;return header+out.join("")+footer}return{to_workbook:html_to_book,to_sheet:html_to_sheet,_row:make_html_row,BEGIN:_BEGIN,END:_END,from_sheet:sheet_to_html}}();function parse_dom_table(table,_opts){var opts=_opts||{};if(DENSE!=null)opts.dense=DENSE;var ws=opts.dense?[]:{};var rows=table.getElementsByTagName("tr");var range={s:{r:0,c:0},e:{r:rows.length-1,c:0}};var merges=[],midx=0;var R=0,_C=0,C=0,RS=0,CS=0;for(;R0||CS>1)merges.push({s:{r:R,c:C},e:{r:R+(RS||1)-1,c:C+CS-1}});var o={t:"s",v:v};if(v!=null&&v.length){if(!isNaN(Number(v)))o={t:"n",v:Number(v)};else if(!isNaN(fuzzydate(v).getDate())){o={t:"d",v:parseDate(v)};if(!opts.cellDates)o={t:"n",v:datenum(o.v)};o.z=opts.dateNF||SSF._table[14]}}if(opts.dense){if(!ws[R])ws[R]=[];ws[R][C]=o}else ws[encode_cell({c:C,r:R})]=o;if(range.e.c/g," ").replace(/<[^>]*>/g,""))};var number_formats={day:["d","dd"],month:["m","mm"],year:["y","yy"],hours:["h","hh"],minutes:["m","mm"],seconds:["s","ss"],"am-pm":["A/P","AM/PM"],"day-of-week":["ddd","dddd"]};return function pcx(d,_opts){var opts=_opts||{};if(DENSE!=null&&opts.dense==null)opts.dense=DENSE;var str=xlml_normalize(d);var state=[],tmp;var tag;var NFtag={name:""},NF="",pidx=0;var sheetag;var rowtag;var Sheets={},SheetNames=[];var ws=opts.dense?[]:{};var Rn,q;var ctag={value:""};var textp="",textpidx=0,textptag;var R=-1,C=-1,range={s:{r:1e6,c:1e7},e:{r:0,c:0}};var number_format_map={};var merges=[],mrange={},mR=0,mC=0;var arrayf=[];var comments=[],comment={};var creator="",creatoridx=0;var rept=1,isstub=false;var i=0;xlmlregex.lastIndex=0;str=str.replace(//gm,"").replace(//gm,"");while(Rn=xlmlregex.exec(str))switch(Rn[3]=Rn[3].replace(/_.*$/,"")){case"table":;case"ๅทฅไฝœ่กจ":if(Rn[1]==="/"){if(range.e.c>=range.s.c&&range.e.r>=range.s.r)ws["!ref"]=encode_range(range);if(merges.length)ws["!merges"]=merges;sheetag.name=utf8read(sheetag["ๅ็งฐ"]||sheetag.name);SheetNames.push(sheetag.name);Sheets[sheetag.name]=ws}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){sheetag=parsexmltag(Rn[0],false);R=C=-1;range.s.r=range.s.c=1e7;range.e.r=range.e.c=0;ws=opts.dense?[]:{};merges=[]}break;case"table-row":;case"่กŒ":if(Rn[1]==="/")break;rowtag=parsexmltag(Rn[0],false);if(rowtag["่กŒๅท"])R=rowtag["่กŒๅท"]-1;else++R;C=-1;break;case"covered-table-cell":++C;if(opts.sheetStubs){if(opts.dense){if(!ws[R])ws[R]=[];ws[R][C]={t:"z"}}else ws[encode_cell({r:R,c:C})]={t:"z"}}break;case"table-cell":;case"ๆ•ฐๆฎ":if(Rn[0].charAt(Rn[0].length-2)==="/"){ctag=parsexmltag(Rn[0],false);if(ctag["number-columns-repeated"])C+=parseInt(ctag["number-columns-repeated"],10);else++C}else if(Rn[1]!=="/"){++C;rept=1;if(C>range.e.c)range.e.c=C;if(R>range.e.r)range.e.r=R;if(C=arrayf[i][0].s.r&&R<=arrayf[i][0].e.r)if(C>=arrayf[i][0].s.c&&C<=arrayf[i][0].e.c)q.F=arrayf[i][1]}if(ctag["number-columns-spanned"]||ctag["number-rows-spanned"]){mR=parseInt(ctag["number-rows-spanned"],10)||0;mC=parseInt(ctag["number-columns-spanned"],10)||0;mrange={s:{r:R,c:C},e:{r:R+mR-1,c:C+mC-1}};merges.push(mrange)}if(ctag["number-columns-repeated"])rept=parseInt(ctag["number-columns-repeated"],10);switch(q.t){case"boolean":q.t="b";q.v=parsexmlbool(ctag["boolean-value"]);break;case"float":q.t="n";q.v=parseFloat(ctag.value);break;case"percentage":q.t="n";q.v=parseFloat(ctag.value);break;case"currency":q.t="n";q.v=parseFloat(ctag.value);break;case"date":q.t="d";q.v=parseDate(ctag["date-value"]);if(!opts.cellDates){q.t="n";q.v=datenum(q.v)}q.z="m/d/yy";break;case"time":q.t="n";q.v=parse_isodur(ctag["time-value"])/86400;break;case"number":q.t="n";q.v=parseFloat(ctag["ๆ•ฐๆฎๆ•ฐๅ€ผ"]);break;default:if(q.t==="string"||q.t==="text"||!q.t){q.t="s";if(ctag["string-value"]!=null)textp=unescapexml(ctag["string-value"])}else throw new Error("Unsupported value type "+q.t);}}else{isstub=false;if(q.t==="s"){q.v=textp||"";isstub=textpidx==0}if(comments.length>0){q.c=comments;comments=[]}if(textp&&opts.cellText!==false)q.w=textp;if(!isstub||opts.sheetStubs){if(!(opts.sheetRows&&opts.sheetRows0)ws[R][++C]=dup(q)}else{ws[encode_cell({r:R,c:C})]=q;while(--rept>0)ws[encode_cell({r:R,c:++C})]=dup(q)}if(range.e.c<=C)range.e.c=C}}else{C+=rept;rept=0}q={};textp=""}break;case"document":;case"document-content":;case"็”ตๅญ่กจๆ ผๆ–‡ๆกฃ":;case"spreadsheet":;case"ไธปไฝ“":;case"scripts":;case"styles":;case"font-face-decls":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],true]);break;case"annotation":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp;comment.t=textp;comment.a=creator;comments.push(comment)}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){state.push([Rn[3],false])}creator="";creatoridx=0;textp="";textpidx=0;break;case"creator":if(Rn[1]==="/"){creator=str.slice(creatoridx,Rn.index)}else creatoridx=Rn.index+Rn[0].length;break;case"meta":;case"ๅ…ƒๆ•ฐๆฎ":;case"settings":;case"config-item-set":;case"config-item-map-indexed":;case"config-item-map-entry":;case"config-item-map-named":;case"shapes":;case"frame":;case"text-box":;case"image":;case"data-pilot-tables":;case"list-style":;case"form":;case"dde-links":;case"event-listeners":if(Rn[1]==="/"){if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/")state.push([Rn[3],false]);textp="";textpidx=0;break;case"scientific-number":break;case"currency-symbol":break;case"currency-style":break;case"number-style":;case"percentage-style":;case"date-style":;case"time-style":if(Rn[1]==="/"){number_format_map[NFtag.name]=NF;if((tmp=state.pop())[0]!==Rn[3])throw"Bad state: "+tmp}else if(Rn[0].charAt(Rn[0].length-2)!=="/"){NF="";NFtag=parsexmltag(Rn[0],false);state.push([Rn[3],true])}break;case"script":break;case"libraries":break;case"automatic-styles":break;case"master-styles":break;case"default-style":;case"page-layout":break;case"style":break;case"map":break;case"font-face":break;case"paragraph-properties":break;case"table-properties":break;case"table-column-properties":break;case"table-row-properties":break;case"table-cell-properties":break;case"number":switch(state[state.length-1][0]){case"time-style":;case"date-style":tag=parsexmltag(Rn[0],false);NF+=number_formats[Rn[3]][tag.style==="long"?1:0];break;}break;case"fraction":break;case"day":;case"month":;case"year":;case"era":;case"day-of-week":;case"week-of-year":;case"quarter":;case"hours":;case"minutes":;case"seconds":;case"am-pm":switch(state[state.length-1][0]){case"time-style":;case"date-style":tag=parsexmltag(Rn[0],false);NF+=number_formats[Rn[3]][tag.style==="long"?1:0];break;}break;case"boolean-style":break;case"boolean":break;case"text-style":break;case"text":if(Rn[0].slice(-2)==="/>")break;else if(Rn[1]==="/")switch(state[state.length-1][0]){case"number-style":;case"date-style":;case"time-style":NF+=str.slice(pidx,Rn.index);break;}else pidx=Rn.index+Rn[0].length;break;case"text-content":break;case"text-properties":break;case"body":;case"็”ตๅญ่กจๆ ผ":break;case"forms":break;case"table-column":break;case"null-date":break;case"graphic-properties":break;case"calculation-settings":break;case"named-expressions":break;case"named-range":break;case"named-expression":break;case"sort":break;case"sort-by":break;case"sort-groups":break;case"span":break;case"line-break":break;case"p":;case"ๆ–‡ๆœฌไธฒ":if(Rn[1]==="/")textp=(textp.length>0?textp+"\n":"")+parse_text_p(str.slice(textpidx,Rn.index),textptag);else{textptag=parsexmltag(Rn[0],false);textpidx=Rn.index+Rn[0].length}break;case"database-range":if(Rn[1]==="/")break;try{var AutoFilter=ods_to_csf_range_3D(parsexmltag(Rn[0])["target-range-address"]);Sheets[AutoFilter[0]]["!autofilter"]={ref:AutoFilter[1]}}catch(e){}break;case"s":break;case"date":break;case"object":break;case"title":;case"ๆ ‡้ข˜":break;case"desc":break;case"table-source":break;case"iteration":break;case"content-validations":break;case"content-validation":break;case"error-message":break;case"database-ranges":break;case"filter":break;case"filter-and":break;case"filter-or":break;case"filter-condition":break;case"list-level-style-bullet":break;case"list-level-style-number":break;case"list-level-properties":break;case"sender-firstname":;case"sender-lastname":;case"sender-initials":;case"sender-title":;case"sender-position":;case"sender-email":;case"sender-phone-private":;case"sender-fax":;case"sender-company":;case"sender-phone-work":;case"sender-street":;case"sender-city":;case"sender-postal-code":;case"sender-country":;case"sender-state-or-province":;case"author-name":;case"author-initials":;case"chapter":;case"file-name":;case"template-name":;case"sheet-name":break;case"event-listener":break;case"initial-creator":;case"creation-date":;case"generator":;case"document-statistic":;case"user-defined":break;case"config-item":break;case"page-number":break;case"page-count":break;case"time":break;case"data-pilot-table":;case"source-cell-range":;case"source-service":;case"data-pilot-field":;case"data-pilot-level":;case"data-pilot-subtotals":;case"data-pilot-subtotal":;case"data-pilot-members":;case"data-pilot-member":;case"data-pilot-display-info":;case"data-pilot-sort-info":;case"data-pilot-layout-info":;case"data-pilot-field-reference":;case"data-pilot-groups":;case"data-pilot-group":;case"data-pilot-group-member":break;case"rect":break;case"dde-connection-decls":;case"dde-connection-decl":;case"dde-link":;case"dde-source":break;case"properties":break;case"property":break;case"a":break;case"table-protection":break;case"data-pilot-grand-total":break;default:if(Rn[2]==="dc:")break;if(Rn[2]==="draw:")break;if(Rn[2]==="style:")break;if(Rn[2]==="calcext:")break;if(Rn[2]==="loext:")break;if(Rn[2]==="uof:")break;if(Rn[2]==="่กจ:")break;if(Rn[2]==="ๅญ—:")break;if(opts.WTF)throw new Error(Rn);}var out={Sheets:Sheets,SheetNames:SheetNames};return out}}();function parse_ods(zip,opts){opts=opts||{};var ods=!!safegetzipfile(zip,"objectdata");if(ods)var manifest=parse_manifest(getzipdata(zip,"META-INF/manifest.xml"),opts);var content=getzipstr(zip,"content.xml");if(!content)throw new Error("Missing content.xml in "+(ods?"ODS":"UOF")+" file");return parse_content_xml(ods?content:utf8read(content),opts)}function parse_fods(data,opts){return parse_content_xml(data,opts)}var write_styles_ods=function(){var payload='';return function wso(wb,opts){return payload}}();var write_content_ods=function(){var null_cell_xml=" \n";var covered_cell_xml=" \n";var write_ws=function(ws,wb,i,opts){var o=[];o.push(' \n');var R=0,C=0,range=decode_range(ws["!ref"]);var marr=ws["!merges"]||[],mi=0;var dense=Array.isArray(ws);for(R=0;R\n");for(;R<=range.e.r;++R){o.push(" \n");for(C=0;CC)continue;if(marr[mi].s.r>R)continue;if(marr[mi].e.c\n")}o.push(" \n");return o.join("")};var write_automatic_styles_ods=function(o){o.push(" \n");o.push(' \n');o.push(' \n');o.push(" /\n");o.push(' \n');o.push(" /\n");o.push(" \n");o.push(" \n");o.push(' \n');o.push(" \n")};return function wcx(wb,opts){var o=[XML_HEADER];var attr=wxt_helper({"xmlns:office":"urn:oasis:names:tc:opendocument:xmlns:office:1.0","xmlns:table":"urn:oasis:names:tc:opendocument:xmlns:table:1.0","xmlns:style":"urn:oasis:names:tc:opendocument:xmlns:style:1.0","xmlns:text":"urn:oasis:names:tc:opendocument:xmlns:text:1.0","xmlns:draw":"urn:oasis:names:tc:opendocument:xmlns:drawing:1.0","xmlns:fo":"urn:oasis:names:tc:opendocument:xmlns:xsl-fo-compatible:1.0","xmlns:xlink":"http://www.w3.org/1999/xlink","xmlns:dc":"http://purl.org/dc/elements/1.1/","xmlns:meta":"urn:oasis:names:tc:opendocument:xmlns:meta:1.0","xmlns:number":"urn:oasis:names:tc:opendocument:xmlns:datastyle:1.0","xmlns:presentation":"urn:oasis:names:tc:opendocument:xmlns:presentation:1.0","xmlns:svg":"urn:oasis:names:tc:opendocument:xmlns:svg-compatible:1.0","xmlns:chart":"urn:oasis:names:tc:opendocument:xmlns:chart:1.0","xmlns:dr3d":"urn:oasis:names:tc:opendocument:xmlns:dr3d:1.0","xmlns:math":"http://www.w3.org/1998/Math/MathML","xmlns:form":"urn:oasis:names:tc:opendocument:xmlns:form:1.0","xmlns:script":"urn:oasis:names:tc:opendocument:xmlns:script:1.0","xmlns:ooo":"http://openoffice.org/2004/office","xmlns:ooow":"http://openoffice.org/2004/writer","xmlns:oooc":"http://openoffice.org/2004/calc","xmlns:dom":"http://www.w3.org/2001/xml-events","xmlns:xforms":"http://www.w3.org/2002/xforms","xmlns:xsd":"http://www.w3.org/2001/XMLSchema","xmlns:xsi":"http://www.w3.org/2001/XMLSchema-instance","xmlns:sheet":"urn:oasis:names:tc:opendocument:sh33tjs:1.0","xmlns:rpt":"http://openoffice.org/2005/report","xmlns:of":"urn:oasis:names:tc:opendocument:xmlns:of:1.2","xmlns:xhtml":"http://www.w3.org/1999/xhtml","xmlns:grddl":"http://www.w3.org/2003/g/data-view#","xmlns:tableooo":"http://openoffice.org/2009/table","xmlns:drawooo":"http://openoffice.org/2010/draw","xmlns:calcext":"urn:org:documentfoundation:names:experimental:calc:xmlns:calcext:1.0","xmlns:loext":"urn:org:documentfoundation:names:experimental:office:xmlns:loext:1.0","xmlns:field":"urn:openoffice:names:experimental:ooo-ms-interop:xmlns:field:1.0","xmlns:formx":"urn:openoffice:names:experimental:ooxml-odf-interop:xmlns:form:1.0","xmlns:css3t":"http://www.w3.org/TR/css3-text/","office:version":"1.2"});var fods=wxt_helper({"xmlns:config":"urn:oasis:names:tc:opendocument:xmlns:config:1.0","office:mimetype":"application/vnd.oasis.opendocument.spreadsheet"});if(opts.bookType=="fods")o.push("\n");else o.push("\n");write_automatic_styles_ods(o);o.push(" \n");o.push(" \n");for(var i=0;i!=wb.SheetNames.length;++i)o.push(write_ws(wb.Sheets[wb.SheetNames[i]],wb,i,opts));o.push(" \n");o.push(" \n");if(opts.bookType=="fods")o.push("");else o.push("");return o.join("")}}();function write_ods(wb,opts){if(opts.bookType=="fods")return write_content_ods(wb,opts);var zip=new jszip;var f="";var manifest=[];var rdf=[];f="mimetype";zip.file(f,"application/vnd.oasis.opendocument.spreadsheet");f="content.xml";zip.file(f,write_content_ods(wb,opts));manifest.push([f,"text/xml"]);rdf.push([f,"ContentFile"]);f="styles.xml";zip.file(f,write_styles_ods(wb,opts));manifest.push([f,"text/xml"]);rdf.push([f,"StylesFile"]);f="manifest.rdf";zip.file(f,write_rdf(rdf,opts));manifest.push([f,"application/rdf+xml"]);f="meta.xml";zip.file(f,write_meta_ods(wb,opts));manifest.push([f,"text/xml"]);rdf.push([f,"MetadataFile"]);f="META-INF/manifest.xml";zip.file(f,write_manifest(manifest,opts));return zip}function write_obj_str(factory){return function write_str(wb,o){var idx=0;for(var i=0;i-1)return"sheet";if(RELS.CS&&n==RELS.CS)return"chart";if(RELS.DS&&n==RELS.DS)return"dialog";if(RELS.MS&&n==RELS.MS)return"macro";if(!n||!n.length)return"sheet";return n}function safe_parse_wbrels(wbrels,sheets){if(!wbrels)return 0;try{wbrels=sheets.map(function pwbr(w){if(!w.id)w.id=w.strRelID;return[w.name,wbrels["!id"][w.id].Target,get_sheet_type(wbrels["!id"][w.id].Type)]})}catch(e){return null}return!wbrels||wbrels.length===0?null:wbrels}function safe_parse_sheet(zip,path,relsPath,sheet,sheetRels,sheets,stype,opts,wb,themes,styles){try{sheetRels[sheet]=parse_rels(getzipstr(zip,relsPath,true),path);var data=getzipdata(zip,path);switch(stype){case"sheet":sheets[sheet]=parse_ws(data,path,opts,sheetRels[sheet],wb,themes,styles);break;case"chart":var cs=parse_cs(data,path,opts,sheetRels[sheet],wb,themes,styles);sheets[sheet]=cs;if(!cs||!cs["!chart"])break;var dfile=resolve_path(cs["!chart"].Target,path);var drelsp=get_rels_path(dfile);var draw=parse_drawing(getzipstr(zip,dfile,true),parse_rels(getzipstr(zip,drelsp,true),dfile));var chartp=resolve_path(draw,dfile);var crelsp=get_rels_path(chartp);cs=parse_chart(getzipstr(zip,chartp,true),chartp,opts,parse_rels(getzipstr(zip,crelsp,true),chartp),wb,cs);break;case"macro":sheets[sheet]=parse_ms(data,path,opts,sheetRels[sheet],wb,themes,styles);break;case"dialog":sheets[sheet]=parse_ds(data,path,opts,sheetRels[sheet],wb,themes,styles);break;}}catch(e){if(opts.WTF)throw e}}var nodirs=function nodirs(x){return x.slice(-1)!="/"};function parse_zip(zip,opts){make_ssf(SSF);opts=opts||{};fix_read_opts(opts);reset_cp();if(safegetzipfile(zip,"META-INF/manifest.xml"))return parse_ods(zip,opts);if(safegetzipfile(zip,"objectdata.xml"))return parse_ods(zip,opts);var entries=keys(zip.files).filter(nodirs).sort();var dir=parse_ct(getzipstr(zip,"[Content_Types].xml"),opts);var xlsb=false;var sheets,binname;if(dir.workbooks.length===0){binname="xl/workbook.xml";if(getzipdata(zip,binname,true))dir.workbooks.push(binname)}if(dir.workbooks.length===0){binname="xl/workbook.bin";if(!getzipfile(zip,binname,true))throw new Error("Could not find workbook");dir.workbooks.push(binname);xlsb=true}if(dir.workbooks[0].slice(-3)=="bin")xlsb=true;if(xlsb)set_cp(1200);var themes={};var styles={};if(!opts.bookSheets&&!opts.bookProps){strs=[];if(dir.sst)strs=parse_sst(getzipdata(zip,dir.sst.replace(/^\//,"")),dir.sst,opts);if(opts.cellStyles&&dir.themes.length)themes=parse_theme(getzipstr(zip,dir.themes[0].replace(/^\//,""),true)||"",dir.themes[0],opts);if(dir.style)styles=parse_sty(getzipdata(zip,dir.style.replace(/^\//,"")),dir.style,themes,opts)}var wb=parse_wb(getzipdata(zip,dir.workbooks[0].replace(/^\//,"")),dir.workbooks[0],opts);var props={},propdata="";if(dir.coreprops.length!==0){propdata=getzipstr(zip,dir.coreprops[0].replace(/^\//,""),true);if(propdata)props=parse_core_props(propdata);if(dir.extprops.length!==0){propdata=getzipstr(zip,dir.extprops[0].replace(/^\//,""),true);if(propdata)parse_ext_props(propdata,props)}}var custprops={};if(!opts.bookSheets||opts.bookProps){if(dir.custprops.length!==0){propdata=getzipstr(zip,dir.custprops[0].replace(/^\//,""),true);if(propdata)custprops=parse_cust_props(propdata,opts)}}var out={};if(opts.bookSheets||opts.bookProps){if(wb.Sheets)sheets=wb.Sheets.map(function pluck(x){return x.name});else if(props.Worksheets&&props.SheetNames.length>0)sheets=props.SheetNames;if(opts.bookProps){out.Props=props;out.Custprops=custprops}if(opts.bookSheets&&typeof sheets!=="undefined")out.SheetNames=sheets;if(opts.bookSheets?out.SheetNames:opts.bookProps)return out}sheets={};var deps={};if(opts.bookDeps&&dir.calcchain)deps=parse_cc(getzipdata(zip,dir.calcchain.replace(/^\//,"")),dir.calcchain,opts);var i=0;var sheetRels={};var path,relsPath;{var wbsheets=wb.Sheets;props.Worksheets=wbsheets.length;props.SheetNames=[];for(var j=0;j!=wbsheets.length;++j){props.SheetNames[j]=wbsheets[j].name}}var wbext=xlsb?"bin":"xml";var wbrelsfile="xl/_rels/workbook."+wbext+".rels";var wbrels=parse_rels(getzipstr(zip,wbrelsfile,true),wbrelsfile);if(wbrels)wbrels=safe_parse_wbrels(wbrels,wb.Sheets);var nmode=getzipdata(zip,"xl/worksheets/sheet.xml",true)?1:0;for(i=0;i!=props.Worksheets;++i){var stype="sheet";if(wbrels&&wbrels[i]){path="xl/"+wbrels[i][1].replace(/[\/]?xl\//,"");stype=wbrels[i][2]}else{path="xl/worksheets/sheet"+(i+1-nmode)+"."+wbext;path=path.replace(/sheet0\./,"sheet.")}relsPath=path.replace(/^(.*)(\/)([^\/]*)$/,"$1/_rels/$3.rels");safe_parse_sheet(zip,path,relsPath,props.SheetNames[i],sheetRels,sheets,stype,opts,wb,themes,styles)}if(dir.comments)parse_comments(zip,dir.comments,sheets,sheetRels,opts);out={Directory:dir,Workbook:wb,Props:props,Custprops:custprops,Deps:deps,Sheets:sheets,SheetNames:props.SheetNames,Strings:strs,Styles:styles,Themes:themes,SSF:SSF.get_table()};if(opts.bookFiles){out.keys=entries;out.files=zip.files}if(opts.bookVBA){if(dir.vba.length>0)out.vbaraw=getzipdata(zip,dir.vba[0].replace(/^\//,""),true);else if(dir.defaults&&dir.defaults.bin==="application/vnd.ms-office.vbaProject")out.vbaraw=getzipdata(zip,"xl/vbaProject.bin",true)}return out}function parse_xlsxcfb(cfb,opts){var f="Version";var data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var version=parse_DataSpaceVersionInfo(data.content);f="DataSpaceMap";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var dsm=parse_DataSpaceMap(data.content);if(dsm.length!=1||dsm[0].comps.length!=1||dsm[0].comps[0].t!=0||dsm[0].name!="StrongEncryptionDataSpace"||dsm[0].comps[0].v!="EncryptedPackage")throw new Error("ECMA-376 Encrypted file bad "+f);f="StrongEncryptionDataSpace";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var seds=parse_DataSpaceDefinition(data.content);if(seds.length!=1||seds[0]!="StrongEncryptionTransform")throw new Error("ECMA-376 Encrypted file bad "+f);f="!Primary";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var hdr=parse_Primary(data.content);f="EncryptionInfo";data=cfb.find(f);if(!data)throw new Error("ECMA-376 Encrypted file missing "+f);var einfo=parse_EncryptionInfo(data.content);throw new Error("File is password-protected")}function write_zip(wb,opts){_shapeid=1024;if(opts.bookType=="ods")return write_ods(wb,opts);if(wb&&!wb.SSF){wb.SSF=SSF.get_table()}if(wb&&wb.SSF){make_ssf(SSF);SSF.load_table(wb.SSF);opts.revssf=evert_num(wb.SSF);opts.revssf[wb.SSF[65535]]=0;opts.ssf=wb.SSF}opts.rels={};opts.wbrels={};opts.Strings=[];opts.Strings.Count=0;opts.Strings.Unique=0;var wbext=opts.bookType=="xlsb"?"bin":"xml";var vbafmt=opts.bookType=="xlsb"||opts.bookType=="xlsm";var ct={workbooks:[],sheets:[],charts:[],dialogs:[],macros:[],rels:[],strs:[],comments:[],coreprops:[],extprops:[],custprops:[],themes:[],styles:[],calcchains:[],vba:[],drawings:[],TODO:[],xmlns:""};fix_write_opts(opts=opts||{});var zip=new jszip;var f="",rId=0;opts.cellXfs=[];get_cell_style(opts.cellXfs,{},{revssf:{General:0}});if(!wb.Props)wb.Props={};f="docProps/core.xml";zip.file(f,write_core_props(wb.Props,opts));ct.coreprops.push(f);add_rels(opts.rels,2,f,RELS.CORE_PROPS); +f="docProps/app.xml";if(wb.Props&&wb.Props.SheetNames){}else if(!wb.Workbook||!wb.Workbook.Sheets)wb.Props.SheetNames=wb.SheetNames;else wb.Props.SheetNames=wb.SheetNames.map(function(x,i){return[(wb.Workbook.Sheets[i]||{}).Hidden!=2,x]}).filter(function(x){return x[0]}).map(function(x){return x[1]});wb.Props.Worksheets=wb.Props.SheetNames.length;zip.file(f,write_ext_props(wb.Props,opts));ct.extprops.push(f);add_rels(opts.rels,3,f,RELS.EXT_PROPS);if(wb.Custprops!==wb.Props&&keys(wb.Custprops||{}).length>0){f="docProps/custom.xml";zip.file(f,write_cust_props(wb.Custprops,opts));ct.custprops.push(f);add_rels(opts.rels,4,f,RELS.CUST_PROPS)}f="xl/workbook."+wbext;zip.file(f,write_wb(wb,f,opts));ct.workbooks.push(f);add_rels(opts.rels,1,f,RELS.WB);for(rId=1;rId<=wb.SheetNames.length;++rId){var wsrels={"!id":{}};var ws=wb.Sheets[wb.SheetNames[rId-1]];var _type=(ws||{})["!type"]||"sheet";switch(_type){case"chart":;default:f="xl/worksheets/sheet"+rId+"."+wbext;zip.file(f,write_ws(rId-1,f,opts,wb,wsrels));ct.sheets.push(f);add_rels(opts.wbrels,-1,"worksheets/sheet"+rId+"."+wbext,RELS.WS[0]);}if(ws){var comments=ws["!comments"];if(comments&&comments.length>0){var cf="xl/comments"+rId+"."+wbext;zip.file(cf,write_cmnt(comments,cf,opts));ct.comments.push(cf);add_rels(wsrels,-1,"../comments"+rId+"."+wbext,RELS.CMNT)}if(ws["!legacy"]){zip.file("xl/drawings/vmlDrawing"+rId+".vml",write_comments_vml(rId,ws["!comments"]))}delete ws["!comments"];delete ws["!legacy"]}if(wsrels["!id"].rId1)zip.file(get_rels_path(f),write_rels(wsrels))}if(opts.Strings!=null&&opts.Strings.length>0){f="xl/sharedStrings."+wbext;zip.file(f,write_sst(opts.Strings,f,opts));ct.strs.push(f);add_rels(opts.wbrels,-1,"sharedStrings."+wbext,RELS.SST)}f="xl/theme/theme1.xml";zip.file(f,write_theme(wb.Themes,opts));ct.themes.push(f);add_rels(opts.wbrels,-1,"theme/theme1.xml",RELS.THEME);f="xl/styles."+wbext;zip.file(f,write_sty(wb,f,opts));ct.styles.push(f);add_rels(opts.wbrels,-1,"styles."+wbext,RELS.STY);if(wb.vbaraw&&vbafmt){f="xl/vbaProject.bin";zip.file(f,wb.vbaraw);ct.vba.push(f);add_rels(opts.wbrels,-1,"vbaProject.bin",RELS.VBA)}zip.file("[Content_Types].xml",write_ct(ct,opts));zip.file("_rels/.rels",write_rels(opts.rels));zip.file("xl/_rels/workbook."+wbext+".rels",write_rels(opts.wbrels));delete opts.revssf;delete opts.ssf;return zip}function firstbyte(f,o){var x="";switch((o||{}).type||"base64"){case"buffer":return[f[0],f[1],f[2],f[3]];case"base64":x=Base64.decode(f.substr(0,24));break;case"binary":x=f;break;case"array":return[f[0],f[1],f[2],f[3]];default:throw new Error("Unrecognized type "+(o?o.type:"undefined"));}return[x.charCodeAt(0),x.charCodeAt(1),x.charCodeAt(2),x.charCodeAt(3)]}function read_cfb(cfb,opts){if(cfb.find("EncryptedPackage"))return parse_xlsxcfb(cfb,opts);return parse_xlscfb(cfb,opts)}function read_zip(data,opts){var zip,d=data;var o=opts||{};if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";switch(o.type){case"base64":zip=new jszip(d,{base64:true});break;case"binary":;case"array":zip=new jszip(d,{base64:false});break;case"buffer":zip=new jszip(d);break;default:throw new Error("Unrecognized type "+o.type);}return parse_zip(zip,o)}function read_utf16(data,o){var d=data;if(o.type=="base64")d=Base64.decode(d);d=cptable.utils.decode(1200,d.slice(2));o.type="binary";if(d.charCodeAt(0)==60)return parse_xlml(d,o);return PRN.to_workbook(d,o)}function readSync(data,opts){var zip,d=data,n=[0];var o=opts||{};_ssfopts={};if(o.dateNF)_ssfopts.dateNF=o.dateNF;if(!o.type)o.type=has_buf&&Buffer.isBuffer(data)?"buffer":"base64";if(o.type=="file"){o.type="buffer";d=_fs.readFileSync(data)}switch((n=firstbyte(d,o))[0]){case 208:return read_cfb(CFB.read(d,o),o);case 9:return parse_xlscfb(s2a(o.type==="base64"?Base64.decode(d):d),o);case 60:return parse_xlml(d,o);case 73:if(n[1]==68)return read_wb_ID(d,o);break;case 84:if(n[1]==65&&n[2]==66&&n[3]==76)return DIF.to_workbook(d,o);break;case 80:if(n[1]==75&&n[2]<32&&n[3]<32)return read_zip(d,o);break;case 239:return n[3]==60?parse_xlml(d,o):PRN.to_workbook(d,o);case 255:if(n[1]==254){return read_utf16(d,o)}break;case 0:if(n[1]==0&&n[2]>=2&&n[3]==0)return WK_.to_workbook(d,o);break;case 3:;case 131:;case 139:return DBF.to_workbook(d,o);}if(n[2]<=12&&n[3]<=31)return DBF.to_workbook(d,o);if(32>n[0]||n[0]>127)throw new Error("Unsupported file "+n.join("|"));return PRN.to_workbook(d,o)}function readFileSync(filename,opts){var o=opts||{};o.type="file";return readSync(filename,o)}function write_zip_type(wb,opts){var o=opts||{};var z=write_zip(wb,o);var oopts={};if(o.compression)oopts.compression="DEFLATE";switch(o.type){case"base64":oopts.type="base64";break;case"binary":oopts.type="string";break;case"buffer":;case"file":oopts.type="nodebuffer";break;default:throw new Error("Unrecognized type "+o.type);}if(o.type==="file")return _fs.writeFileSync(o.file,z.generate(oopts));return z.generate(oopts)}function write_bstr_type(out,opts){switch(opts.type){case"base64":return Base64.encode(out);case"binary":return out;case"file":return _fs.writeFileSync(opts.file,out,"binary");case"buffer":{if(has_buf)return new Buffer(out,"utf8");else return out.split("").map(function(c){return c.charCodeAt(0)})};}throw new Error("Unrecognized type "+opts.type)}function write_string_type(out,opts){switch(opts.type){case"base64":return Base64.encode(out);case"binary":return out;case"file":return _fs.writeFileSync(opts.file,out,"utf8");case"buffer":{if(has_buf)return new Buffer(out,"utf8");else return out.split("").map(function(c){return c.charCodeAt(0)})};}throw new Error("Unrecognized type "+opts.type)}function write_binary_type(out,opts){switch(opts.type){case"base64":;case"binary":var bstr="";for(var i=0;i0)offset=0;var rr=encode_row(r.s.r);var cols=new Array(r.e.c-r.s.c+1);var out=new Array(r.e.r-r.s.r-offset+1);var outi=0,counter=0;var dense=Array.isArray(sheet);var R=r.s.r,C=0,CC=0;if(dense&&!sheet[R])sheet[R]=[];for(C=r.s.c;C<=r.e.c;++C){cols[C]=encode_col(C);val=dense?sheet[R][C]:sheet[cols[C]+rr];switch(header){case 1:hdr[C]=C-r.s.c;break;case 2:hdr[C]=cols[C];break;case 3:hdr[C]=o.header[C-r.s.c];break;default:if(val==null)continue;vv=v=format_cell(val,null,o);counter=0;for(CC=0;CC=0)txt='"'+txt.replace(qreg,'""')+'"'}else txt="";row+=(C===r.s.c?"":FS)+txt}if(o.blankrows===false&&isempty)return null;return row}function sheet_to_csv(sheet,opts){var out=[];var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null)return"";var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var endregex=new RegExp((FS=="|"?"\\|":FS)+"+$");var row="",cols=[];o.dense=Array.isArray(sheet);for(var C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){row=make_csv_row(sheet,r,R,cols,fs,rs,FS,o);if(row==null){continue}if(o.strip)row=row.replace(endregex,"");out.push(row+RS)}delete o.dense;return out.join("")}function sheet_to_txt(sheet,opts){if(!opts)opts={};opts.FS="\t";opts.RS="\n";var s=sheet_to_csv(sheet,opts);if(typeof cptable=="undefined")return s;var o=cptable.utils.encode(1200,s);return"รฟรพ"+o}function sheet_to_formulae(sheet){var y="",x,val="";if(sheet==null||sheet["!ref"]==null)return[];var r=safe_decode_range(sheet["!ref"]),rr="",cols=[],C;var cmds=new Array((r.e.r-r.s.r+1)*(r.e.c-r.s.c+1));var i=0;var dense=Array.isArray(sheet);for(C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);for(var R=r.s.r;R<=r.e.r;++R){rr=encode_row(R);for(C=r.s.c;C<=r.e.c;++C){y=cols[C]+rr;x=dense?(sheet[R]||[])[C]:sheet[y];val="";if(x===undefined)continue;else if(x.F!=null){y=x.F;if(!x.f)continue;val=x.f;if(y.indexOf(":")==-1)y=y+":"+y}if(x.f!=null)val=x.f;else if(x.t=="z")continue;else if(x.t=="n"&&x.v!=null)val=""+x.v;else if(x.t=="b")val=x.v?"TRUE":"FALSE";else if(x.w!==undefined)val="'"+x.w;else if(x.v===undefined)continue;else if(x.t=="s")val="'"+x.v;else val=""+x.v;cmds[i++]=y+"="+val}}cmds.length=i;return cmds}function json_to_sheet(js,opts){var o=opts||{};var ws={};var cell;var range={s:{c:0,r:0},e:{c:0,r:js.length}};var hdr=o.header||[],C=0;for(var R=0;R!=js.length;++R){Object.keys(js[R]).filter(function(x){return js[R].hasOwnProperty(x)}).forEach(function(k){if((C=hdr.indexOf(k))==-1)hdr[C=hdr.length]=k;var v=js[R][k];var t="z";var z="";if(typeof v=="number")t="n";else if(typeof v=="boolean")t="b";else if(typeof v=="string")t="s";else if(v instanceof Date){t="d";if(!o.cellDates){t="n";v=datenum(v)}z=o.dateNF||SSF._table[14]}ws[encode_cell({c:C,r:R+1})]=cell={t:t,v:v};if(z)cell.z=z})}range.e.c=hdr.length-1;for(C=0;C=0&&wb.SheetNames.length>sh)return sh;throw new Error("Cannot find sheet # "+sh)}else if(typeof sh=="string"){var idx=wb.SheetNames.indexOf(sh);if(idx>-1)return idx;throw new Error("Cannot find sheet name |"+sh+"|")}else throw new Error("Cannot find sheet |"+sh+"|")}utils.book_new=function(){return{SheetNames:[],Sheets:{}}};utils.book_append_sheet=function(wb,ws,name){if(!name)for(var i=1;i<=65535;++i)if(wb.SheetNames.indexOf(name="Sheet"+i)==-1)break;if(!name)throw new Error("Too many worksheets");check_ws_name(name);if(wb.SheetNames.indexOf(name)>=0)throw new Error("Worksheet with name |"+name+"| already exists!");wb.SheetNames.push(name);wb.Sheets[name]=ws};utils.book_set_sheet_visibility=function(wb,sh,vis){get_default(wb,"Workbook",{});get_default(wb.Workbook,"Sheets",[]);var idx=wb_sheet_idx(wb,sh);get_default(wb.Workbook.Sheets,idx,{});switch(vis){case 0:;case 1:;case 2:break;default:throw new Error("Bad sheet visibility setting "+vis);}wb.Workbook.Sheets[idx].Hidden=vis};add_consts([["SHEET_VISIBLE",0],["SHEET_HIDDEN",1],["SHEET_VERY_HIDDEN",2]]);utils.cell_set_number_format=function(cell,fmt){cell.z=fmt;return cell};utils.cell_set_hyperlink=function(cell,target,tooltip){if(!target){delete cell.l}else{cell.l={Target:target};if(tooltip)cell.l.Tooltip=tooltip}return cell};utils.cell_add_comment=function(cell,text,author){if(!cell.c)cell.c=[];cell.c.push({t:text,a:author||"SheetJS"})};utils.sheet_set_array_formula=function(ws,range,formula){var rng=typeof range!="string"?range:safe_decode_range(range);var rngstr=typeof range=="string"?range:encode_range(range);for(var R=rng.s.r;R<=rng.e.r;++R)for(var C=rng.s.c;C<=rng.e.c;++C){var cell=ws_get_cell_stub(ws,R,C);cell.t="n";cell.F=rngstr;delete cell.v;if(R==rng.s.r&&C==rng.s.c)cell.f=formula}return ws};return utils})(utils);if(has_buf&&typeof require!="undefined")(function(){var Readable=require("stream").Readable;var write_csv_stream=function(sheet,opts){var stream=Readable();var out="";var o=opts==null?{}:opts;if(sheet==null||sheet["!ref"]==null){stream.push(null);return stream}var r=safe_decode_range(sheet["!ref"]);var FS=o.FS!==undefined?o.FS:",",fs=FS.charCodeAt(0);var RS=o.RS!==undefined?o.RS:"\n",rs=RS.charCodeAt(0);var endregex=new RegExp((FS=="|"?"\\|":FS)+"+$");var row="",cols=[];o.dense=Array.isArray(sheet);for(var C=r.s.c;C<=r.e.c;++C)cols[C]=encode_col(C);var R=r.s.r;stream._read=function(){if(R>r.e.r)return stream.push(null);while(R<=r.e.r){row=make_csv_row(sheet,r,R,cols,fs,rs,FS,o);++R;if(row!=null){if(o.strip)row=row.replace(endregex,"");stream.push(row+RS);break}}};return stream};var write_html_stream=function(sheet,opts){var stream=Readable();var o=opts==null?{}:opts;var r=decode_range(sheet["!ref"]),cell;o.dense=Array.isArray(sheet);stream.push(HTML_.BEGIN);var R=r.s.r;var end=false;stream._read=function(){if(R>r.e.r){if(!end){end=true;stream.push(HTML_.END)}return stream.push(null)}while(R<=r.e.r){stream.push(HTML_._row(sheet,r,R,o));++R;break}};return stream};XLSX.stream={to_html:write_html_stream,to_csv:write_csv_stream}})();XLSX.parse_xlscfb=parse_xlscfb;XLSX.parse_ods=parse_ods;XLSX.parse_fods=parse_fods;XLSX.write_ods=write_ods;XLSX.parse_zip=parse_zip;XLSX.read=readSync;XLSX.readFile=readFileSync;XLSX.readFileSync=readFileSync;XLSX.write=writeSync;XLSX.writeFile=writeFileSync;XLSX.writeFileSync=writeFileSync;XLSX.writeFileAsync=writeFileAsync;XLSX.utils=utils;XLSX.SSF=SSF})(typeof exports!=="undefined"?exports:XLSX);var XLS=XLSX;var ODS=XLSX; diff --git a/example/include/docxjs/jszip-utils.js b/example/pages/include/docx/jszip-utils.js similarity index 100% rename from example/include/docxjs/jszip-utils.js rename to example/pages/include/docx/jszip-utils.js diff --git a/example/pages/include/docx/mammoth.browser.js b/example/pages/include/docx/mammoth.browser.js new file mode 100644 index 0000000..5ac0a81 --- /dev/null +++ b/example/pages/include/docx/mammoth.browser.js @@ -0,0 +1,32625 @@ +// Module: base64-js@1.2.0 +// License: MIT +// +// Module: bluebird@3.4.7 +// License: MIT +// +// Module: buffer-shims@1.0.0 +// License: MIT +// +// Module: buffer@4.9.1 +// License: MIT +// +// Module: core-util-is@1.0.2 +// License: MIT +// +// Module: events@1.1.1 +// License: MIT +// +// Module: ieee754@1.1.8 +// License: BSD-3-Clause +// +// Module: inherits@2.0.1 +// License: ISC +// +// Module: inherits@2.0.3 +// License: ISC +// +// Module: isarray@1.0.0 +// License: MIT +// +// Module: jszip@2.5.0 +// License: MIT or GPLv3 +// +// Module: lop@0.4.0 +// License: BSD +// +// Module: mammoth@1.4.7 +// License: BSD-2-Clause +// +// Module: option@0.2.3 +// License: BSD +// +// Module: pako@0.2.9 +// License: MIT +// +// Module: path-browserify@0.0.0 +// License: MIT +// +// Module: process-nextick-args@1.0.7 +// License: MIT +// +// Module: process@0.11.9 +// License: MIT +// +// Module: readable-stream@2.2.6 +// License: MIT +// +// Module: sax@1.1.6 +// License: ISC +// +// Module: stream-browserify@2.0.1 +// License: MIT +// +// Module: string_decoder@0.10.31 +// License: MIT +// +// Module: underscore@1.4.4 +// License: MIT +// +// Module: underscore@1.8.3 +// License: MIT +// +// Module: util-deprecate@1.0.2 +// License: MIT +// +// Module: util@0.10.3 +// License: MIT +// +// Module: xmlbuilder@10.0.0 +// License: MIT +// +(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.mammoth = f()}})(function(){var define,module,exports;return (function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o h1" instead of mammoth.styleMapping("p[style-name=\'Title\'] => h1")'); +}; + +},{"./document-to-html":3,"./docx/docx-reader":9,"./docx/style-map":14,"./images":20,"./options-reader":22,"./results":24,"./style-reader":25,"./transforms":29,"./underline":30,"./unzip":2,"underscore":153}],22:[function(require,module,exports){ +exports.readOptions = readOptions; + + +var _ = require("underscore"); + +var defaultStyleMap = exports._defaultStyleMap = [ + "p.Heading1 => h1:fresh", + "p.Heading2 => h2:fresh", + "p.Heading3 => h3:fresh", + "p.Heading4 => h4:fresh", + "p.Heading5 => h5:fresh", + "p.Heading6 => h6:fresh", + "p[style-name='Heading 1'] => h1:fresh", + "p[style-name='Heading 2'] => h2:fresh", + "p[style-name='Heading 3'] => h3:fresh", + "p[style-name='Heading 4'] => h4:fresh", + "p[style-name='Heading 5'] => h5:fresh", + "p[style-name='Heading 6'] => h6:fresh", + "p[style-name='heading 1'] => h1:fresh", + "p[style-name='heading 2'] => h2:fresh", + "p[style-name='heading 3'] => h3:fresh", + "p[style-name='heading 4'] => h4:fresh", + "p[style-name='heading 5'] => h5:fresh", + "p[style-name='heading 6'] => h6:fresh", + + "r[style-name='Strong'] => strong", + + "p[style-name='footnote text'] => p:fresh", + "r[style-name='footnote reference'] =>", + "p[style-name='endnote text'] => p:fresh", + "r[style-name='endnote reference'] =>", + "p[style-name='annotation text'] => p:fresh", + "r[style-name='annotation reference'] =>", + + // LibreOffice + "p[style-name='Footnote'] => p:fresh", + "r[style-name='Footnote anchor'] =>", + "p[style-name='Endnote'] => p:fresh", + "r[style-name='Endnote anchor'] =>", + + "p:unordered-list(1) => ul > li:fresh", + "p:unordered-list(2) => ul|ol > li > ul > li:fresh", + "p:unordered-list(3) => ul|ol > li > ul|ol > li > ul > li:fresh", + "p:unordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh", + "p:unordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ul > li:fresh", + "p:ordered-list(1) => ol > li:fresh", + "p:ordered-list(2) => ul|ol > li > ol > li:fresh", + "p:ordered-list(3) => ul|ol > li > ul|ol > li > ol > li:fresh", + "p:ordered-list(4) => ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh", + "p:ordered-list(5) => ul|ol > li > ul|ol > li > ul|ol > li > ul|ol > li > ol > li:fresh", + + "r[style-name='Hyperlink'] =>", + + "p[style-name='Normal'] => p:fresh" +]; + +var standardOptions = exports._standardOptions = { + transformDocument: identity, + includeDefaultStyleMap: true, + includeEmbeddedStyleMap: true +}; + +function readOptions(options) { + options = options || {}; + return _.extend({}, standardOptions, options, { + customStyleMap: readStyleMap(options.styleMap), + readStyleMap: function() { + var styleMap = this.customStyleMap; + if (this.includeEmbeddedStyleMap) { + styleMap = styleMap.concat(readStyleMap(this.embeddedStyleMap)); + } + if (this.includeDefaultStyleMap) { + styleMap = styleMap.concat(defaultStyleMap); + } + return styleMap; + } + }); +} + +function readStyleMap(styleMap) { + if (!styleMap) { + return []; + } else if (_.isString(styleMap)) { + return styleMap.split("\n") + .map(function(line) { + return line.trim(); + }) + .filter(function(line) { + return line !== "" && line.charAt(0) !== "#"; + }); + } else { + return styleMap; + } +} + +function identity(value) { + return value; +} + +},{"underscore":153}],23:[function(require,module,exports){ +var _ = require("underscore"); +var bluebird = require("bluebird/js/release/promise")(); + +exports.defer = defer; +exports.when = bluebird.resolve; +exports.resolve = bluebird.resolve; +exports.all = bluebird.all; +exports.props = bluebird.props; +exports.reject = bluebird.reject; +exports.promisify = bluebird.promisify; +exports.mapSeries = bluebird.mapSeries; +exports.attempt = bluebird.attempt; + +exports.nfcall = function(func) { + var args = Array.prototype.slice.call(arguments, 1); + var promisedFunc = bluebird.promisify(func); + return promisedFunc.apply(null, args); +}; + +bluebird.prototype.fail = bluebird.prototype.caught; + +bluebird.prototype.also = function(func) { + return this.then(function(value) { + var returnValue = _.extend({}, value, func(value)); + return bluebird.props(returnValue); + }); +}; + +function defer() { + var resolve; + var reject; + var promise = new bluebird.Promise(function(resolveArg, rejectArg) { + resolve = resolveArg; + reject = rejectArg; + }); + + return { + resolve: resolve, + reject: reject, + promise: promise + }; +} + +},{"bluebird/js/release/promise":60,"underscore":153}],24:[function(require,module,exports){ +var _ = require("underscore"); + + +exports.Result = Result; +exports.success = success; +exports.warning = warning; +exports.error = error; + + +function Result(value, messages) { + this.value = value; + this.messages = messages || []; +} + +Result.prototype.map = function(func) { + return new Result(func(this.value), this.messages); +}; + +Result.prototype.flatMap = function(func) { + var funcResult = func(this.value); + return new Result(funcResult.value, combineMessages([this, funcResult])); +}; + +Result.prototype.flatMapThen = function(func) { + var that = this; + return func(this.value).then(function(otherResult) { + return new Result(otherResult.value, combineMessages([that, otherResult])); + }); +}; + +Result.combine = function(results) { + var values = _.flatten(_.pluck(results, "value")); + var messages = combineMessages(results); + return new Result(values, messages); +}; + +function success(value) { + return new Result(value, []); +} + +function warning(message) { + return { + type: "warning", + message: message + }; +} + +function error(exception) { + return { + type: "error", + message: exception.message, + error: exception + }; +} + +function combineMessages(results) { + var messages = []; + _.flatten(_.pluck(results, "messages"), true).forEach(function(message) { + if (!containsMessage(messages, message)) { + messages.push(message); + } + }); + return messages; +} + +function containsMessage(messages, message) { + return _.find(messages, isSameMessage.bind(null, message)) !== undefined; +} + +function isSameMessage(first, second) { + return first.type === second.type && first.message === second.message; +} + +},{"underscore":153}],25:[function(require,module,exports){ +var _ = require("underscore"); +var lop = require("lop"); + +var documentMatchers = require("./styles/document-matchers"); +var htmlPaths = require("./styles/html-paths"); +var tokenise = require("./styles/parser/tokeniser").tokenise; +var results = require("./results"); + +exports.readHtmlPath = readHtmlPath; +exports.readDocumentMatcher = readDocumentMatcher; +exports.readStyle = readStyle; + + +function readStyle(string) { + return parseString(styleRule, string); +} + +function createStyleRule() { + return lop.rules.sequence( + lop.rules.sequence.capture(documentMatcherRule()), + lop.rules.tokenOfType("whitespace"), + lop.rules.tokenOfType("arrow"), + lop.rules.sequence.capture(lop.rules.optional(lop.rules.sequence( + lop.rules.tokenOfType("whitespace"), + lop.rules.sequence.capture(htmlPathRule()) + ).head())), + lop.rules.tokenOfType("end") + ).map(function(documentMatcher, htmlPath) { + return { + from: documentMatcher, + to: htmlPath.valueOrElse(htmlPaths.empty) + }; + }); +} + +function readDocumentMatcher(string) { + return parseString(documentMatcherRule(), string); +} + +function documentMatcherRule() { + var sequence = lop.rules.sequence; + + var identifierToConstant = function(identifier, constant) { + return lop.rules.then( + lop.rules.token("identifier", identifier), + function() { + return constant; + } + ); + }; + + var paragraphRule = identifierToConstant("p", documentMatchers.paragraph); + var runRule = identifierToConstant("r", documentMatchers.run); + + var elementTypeRule = lop.rules.firstOf("p or r or table", + paragraphRule, + runRule + ); + + var styleIdRule = lop.rules.then( + classRule, + function(styleId) { + return {styleId: styleId}; + } + ); + + var styleNameMatcherRule = lop.rules.firstOf("style name matcher", + lop.rules.then( + lop.rules.sequence( + lop.rules.tokenOfType("equals"), + lop.rules.sequence.cut(), + lop.rules.sequence.capture(stringRule) + ).head(), + function(styleName) { + return {styleName: documentMatchers.equalTo(styleName)}; + } + ), + lop.rules.then( + lop.rules.sequence( + lop.rules.tokenOfType("startsWith"), + lop.rules.sequence.cut(), + lop.rules.sequence.capture(stringRule) + ).head(), + function(styleName) { + return {styleName: documentMatchers.startsWith(styleName)}; + } + ) + ); + + var styleNameRule = lop.rules.sequence( + lop.rules.tokenOfType("open-square-bracket"), + lop.rules.sequence.cut(), + lop.rules.token("identifier", "style-name"), + lop.rules.sequence.capture(styleNameMatcherRule), + lop.rules.tokenOfType("close-square-bracket") + ).head(); + + + var listTypeRule = lop.rules.firstOf("list type", + identifierToConstant("ordered-list", {isOrdered: true}), + identifierToConstant("unordered-list", {isOrdered: false}) + ); + var listRule = sequence( + lop.rules.tokenOfType("colon"), + sequence.capture(listTypeRule), + sequence.cut(), + lop.rules.tokenOfType("open-paren"), + sequence.capture(integerRule), + lop.rules.tokenOfType("close-paren") + ).map(function(listType, levelNumber) { + return { + list: { + isOrdered: listType.isOrdered, + levelIndex: levelNumber - 1 + } + }; + }); + + function createMatcherSuffixesRule(rules) { + var matcherSuffix = lop.rules.firstOf.apply( + lop.rules.firstOf, + ["matcher suffix"].concat(rules) + ); + var matcherSuffixes = lop.rules.zeroOrMore(matcherSuffix); + return lop.rules.then(matcherSuffixes, function(suffixes) { + var matcherOptions = {}; + suffixes.forEach(function(suffix) { + _.extend(matcherOptions, suffix); + }); + return matcherOptions; + }); + } + + var paragraphOrRun = sequence( + sequence.capture(elementTypeRule), + sequence.capture(createMatcherSuffixesRule([ + styleIdRule, + styleNameRule, + listRule + ])) + ).map(function(createMatcher, matcherOptions) { + return createMatcher(matcherOptions); + }); + + var table = sequence( + lop.rules.token("identifier", "table"), + sequence.capture(createMatcherSuffixesRule([ + styleIdRule, + styleNameRule + ])) + ).map(function(options) { + return documentMatchers.table(options); + }); + + var bold = identifierToConstant("b", documentMatchers.bold); + var italic = identifierToConstant("i", documentMatchers.italic); + var underline = identifierToConstant("u", documentMatchers.underline); + var strikethrough = identifierToConstant("strike", documentMatchers.strikethrough); + var smallCaps = identifierToConstant("small-caps", documentMatchers.smallCaps); + var commentReference = identifierToConstant("comment-reference", documentMatchers.commentReference); + + var breakMatcher = sequence( + lop.rules.token("identifier", "br"), + sequence.cut(), + lop.rules.tokenOfType("open-square-bracket"), + lop.rules.token("identifier", "type"), + lop.rules.tokenOfType("equals"), + sequence.capture(stringRule), + lop.rules.tokenOfType("close-square-bracket") + ).map(function(breakType) { + switch (breakType) { + case "line": + return documentMatchers.lineBreak; + case "page": + return documentMatchers.pageBreak; + case "column": + return documentMatchers.columnBreak; + default: + // TODO: handle unknown document matchers + } + }); + + return lop.rules.firstOf("element type", + paragraphOrRun, + table, + bold, + italic, + underline, + strikethrough, + smallCaps, + commentReference, + breakMatcher + ); +} + +function readHtmlPath(string) { + return parseString(htmlPathRule(), string); +} + +function htmlPathRule() { + var capture = lop.rules.sequence.capture; + var whitespaceRule = lop.rules.tokenOfType("whitespace"); + var freshRule = lop.rules.then( + lop.rules.optional(lop.rules.sequence( + lop.rules.tokenOfType("colon"), + lop.rules.token("identifier", "fresh") + )), + function(option) { + return option.map(function() { + return true; + }).valueOrElse(false); + } + ); + + var separatorRule = lop.rules.then( + lop.rules.optional(lop.rules.sequence( + lop.rules.tokenOfType("colon"), + lop.rules.token("identifier", "separator"), + lop.rules.tokenOfType("open-paren"), + capture(stringRule), + lop.rules.tokenOfType("close-paren") + ).head()), + function(option) { + return option.valueOrElse(""); + } + ); + + var tagNamesRule = lop.rules.oneOrMoreWithSeparator( + identifierRule, + lop.rules.tokenOfType("choice") + ); + + var styleElementRule = lop.rules.sequence( + capture(tagNamesRule), + capture(lop.rules.zeroOrMore(classRule)), + capture(freshRule), + capture(separatorRule) + ).map(function(tagName, classNames, fresh, separator) { + var attributes = {}; + var options = {}; + if (classNames.length > 0) { + attributes["class"] = classNames.join(" "); + } + if (fresh) { + options.fresh = true; + } + if (separator) { + options.separator = separator; + } + return htmlPaths.element(tagName, attributes, options); + }); + + return lop.rules.firstOf("html path", + lop.rules.then(lop.rules.tokenOfType("bang"), function() { + return htmlPaths.ignore; + }), + lop.rules.then( + lop.rules.zeroOrMoreWithSeparator( + styleElementRule, + lop.rules.sequence( + whitespaceRule, + lop.rules.tokenOfType("gt"), + whitespaceRule + ) + ), + htmlPaths.elements + ) + ); +} + +var identifierRule = lop.rules.then( + lop.rules.tokenOfType("identifier"), + decodeEscapeSequences +); +var integerRule = lop.rules.tokenOfType("integer"); + +var stringRule = lop.rules.then( + lop.rules.tokenOfType("string"), + decodeEscapeSequences +); + +var escapeSequences = { + "n": "\n", + "r": "\r", + "t": "\t" +}; + +function decodeEscapeSequences(value) { + return value.replace(/\\(.)/g, function(match, code) { + return escapeSequences[code] || code; + }); +} + +var classRule = lop.rules.sequence( + lop.rules.tokenOfType("dot"), + lop.rules.sequence.cut(), + lop.rules.sequence.capture(identifierRule) +).head(); + +function parseString(rule, string) { + var tokens = tokenise(string); + var parser = lop.Parser(); + var parseResult = parser.parseTokens(rule, tokens); + if (parseResult.isSuccess()) { + return results.success(parseResult.value()); + } else { + return new results.Result(null, [results.warning(describeFailure(string, parseResult))]); + } +} + +function describeFailure(input, parseResult) { + return "Did not understand this style mapping, so ignored it: " + input + "\n" + + parseResult.errors().map(describeError).join("\n"); +} + +function describeError(error) { + return "Error was at character number " + error.characterNumber() + ": " + + "Expected " + error.expected + " but got " + error.actual; +} + +var styleRule = createStyleRule(); + +},{"./results":24,"./styles/document-matchers":26,"./styles/html-paths":27,"./styles/parser/tokeniser":28,"lop":107,"underscore":153}],26:[function(require,module,exports){ +exports.paragraph = paragraph; +exports.run = run; +exports.table = table; +exports.bold = new Matcher("bold"); +exports.italic = new Matcher("italic"); +exports.underline = new Matcher("underline"); +exports.strikethrough = new Matcher("strikethrough"); +exports.smallCaps = new Matcher("smallCaps"); +exports.commentReference = new Matcher("commentReference"); +exports.lineBreak = new Matcher("break", {breakType: "line"}); +exports.pageBreak = new Matcher("break", {breakType: "page"}); +exports.columnBreak = new Matcher("break", {breakType: "column"}); +exports.equalTo = equalTo; +exports.startsWith = startsWith; + + +function paragraph(options) { + return new Matcher("paragraph", options); +} + +function run(options) { + return new Matcher("run", options); +} + +function table(options) { + return new Matcher("table", options); +} + +function Matcher(elementType, options) { + options = options || {}; + this._elementType = elementType; + this._styleId = options.styleId; + this._styleName = options.styleName; + if (options.list) { + this._listIndex = options.list.levelIndex; + this._listIsOrdered = options.list.isOrdered; + } +} + +Matcher.prototype.matches = function(element) { + return element.type === this._elementType && + (this._styleId === undefined || element.styleId === this._styleId) && + (this._styleName === undefined || (element.styleName && this._styleName.operator(this._styleName.operand, element.styleName))) && + (this._listIndex === undefined || isList(element, this._listIndex, this._listIsOrdered)) && + (this._breakType === undefined || this._breakType === element.breakType); +}; + +function isList(element, levelIndex, isOrdered) { + return element.numbering && + element.numbering.level == levelIndex && + element.numbering.isOrdered == isOrdered; +} + +function equalTo(value) { + return { + operator: operatorEqualTo, + operand: value + }; +} + +function startsWith(value) { + return { + operator: operatorStartsWith, + operand: value + }; +} + +function operatorEqualTo(first, second) { + return first.toUpperCase() === second.toUpperCase(); +} + +function operatorStartsWith(first, second) { + return second.toUpperCase().indexOf(first.toUpperCase()) === 0; +} + +},{}],27:[function(require,module,exports){ +var _ = require("underscore"); + +var html = require("../html"); + +exports.topLevelElement = topLevelElement; +exports.elements = elements; +exports.element = element; + +function topLevelElement(tagName, attributes) { + return elements([element(tagName, attributes, {fresh: true})]); +} + +function elements(elementStyles) { + return new HtmlPath(elementStyles.map(function(elementStyle) { + if (_.isString(elementStyle)) { + return element(elementStyle); + } else { + return elementStyle; + } + })); +} + +function HtmlPath(elements) { + this._elements = elements; +} + +HtmlPath.prototype.wrap = function wrap(children) { + var result = children(); + for (var index = this._elements.length - 1; index >= 0; index--) { + result = this._elements[index].wrapNodes(result); + } + return result; +}; + +function element(tagName, attributes, options) { + options = options || {}; + return new Element(tagName, attributes, options); +} + +function Element(tagName, attributes, options) { + var tagNames = {}; + if (_.isArray(tagName)) { + tagName.forEach(function(tagName) { + tagNames[tagName] = true; + }); + tagName = tagName[0]; + } else { + tagNames[tagName] = true; + } + + this.tagName = tagName; + this.tagNames = tagNames; + this.attributes = attributes || {}; + this.fresh = options.fresh; + this.separator = options.separator; +} + +Element.prototype.matchesElement = function(element) { + return this.tagNames[element.tagName] && _.isEqual(this.attributes || {}, element.attributes || {}); +}; + +Element.prototype.wrap = function wrap(generateNodes) { + return this.wrapNodes(generateNodes()); +}; + +Element.prototype.wrapNodes = function wrapNodes(nodes) { + return [html.elementWithTag(this, nodes)]; +}; + +exports.empty = elements([]); +exports.ignore = { + wrap: function() { + return []; + } +}; + +},{"../html":18,"underscore":153}],28:[function(require,module,exports){ +var lop = require("lop"); +var RegexTokeniser = lop.RegexTokeniser; + +exports.tokenise = tokenise; + +var stringPrefix = "'((?:\\\\.|[^'])*)"; + +function tokenise(string) { + var identifierCharacter = "(?:[a-zA-Z\\-_]|\\\\.)"; + var tokeniser = new RegexTokeniser([ + {name: "identifier", regex: new RegExp("(" + identifierCharacter + "(?:" + identifierCharacter + "|[0-9])*)")}, + {name: "dot", regex: /\./}, + {name: "colon", regex: /:/}, + {name: "gt", regex: />/}, + {name: "whitespace", regex: /\s+/}, + {name: "arrow", regex: /=>/}, + {name: "equals", regex: /=/}, + {name: "startsWith", regex: /\^=/}, + {name: "open-paren", regex: /\(/}, + {name: "close-paren", regex: /\)/}, + {name: "open-square-bracket", regex: /\[/}, + {name: "close-square-bracket", regex: /\]/}, + {name: "string", regex: new RegExp(stringPrefix + "'")}, + {name: "unterminated-string", regex: new RegExp(stringPrefix)}, + {name: "integer", regex: /([0-9]+)/}, + {name: "choice", regex: /\|/}, + {name: "bang", regex: /(!)/} + ]); + return tokeniser.tokenise(string); +} + +},{"lop":107}],29:[function(require,module,exports){ +var _ = require("underscore"); + +exports.paragraph = paragraph; +exports.run = run; +exports._elements = elements; +exports.getDescendantsOfType = getDescendantsOfType; +exports.getDescendants = getDescendants; + +function paragraph(transform) { + return elementsOfType("paragraph", transform); +} + +function run(transform) { + return elementsOfType("run", transform); +} + +function elementsOfType(elementType, transform) { + return elements(function(element) { + if (element.type === elementType) { + return transform(element); + } else { + return element; + } + }); +} + +function elements(transform) { + return function transformElement(element) { + if (element.children) { + var children = _.map(element.children, transformElement); + element = _.extend(element, {children: children}); + } + return transform(element); + }; +} + + +function getDescendantsOfType(element, type) { + return getDescendants(element).filter(function(descendant) { + return descendant.type === type; + }); +} + +function getDescendants(element) { + var descendants = []; + + visitDescendants(element, function(descendant) { + descendants.push(descendant); + }); + + return descendants; +} + +function visitDescendants(element, visit) { + if (element.children) { + element.children.forEach(function(child) { + visitDescendants(child, visit); + visit(child); + }); + } +} + +},{"underscore":153}],30:[function(require,module,exports){ +var htmlPaths = require("./styles/html-paths"); +var Html = require("./html"); + + +exports.element = element; + +function element(name) { + return function(html) { + return Html.elementWithTag(htmlPaths.element(name), [html]); + }; +} + +},{"./html":18,"./styles/html-paths":27}],31:[function(require,module,exports){ +var util = require("util"); +var _ = require("underscore"); + +exports.writer = writer; + +function writer(options) { + options = options || {}; + if (options.prettyPrint) { + return prettyWriter(); + } else { + return simpleWriter(); + } +} + + +var indentedElements = { + div: true, + p: true, + ul: true, + li: true +}; + + +function prettyWriter() { + var indentationLevel = 0; + var indentation = " "; + var stack = []; + var start = true; + var inText = false; + + var writer = simpleWriter(); + + function open(tagName, attributes) { + if (indentedElements[tagName]) { + indent(); + } + stack.push(tagName); + writer.open(tagName, attributes); + if (indentedElements[tagName]) { + indentationLevel++; + } + start = false; + } + + function close(tagName) { + if (indentedElements[tagName]) { + indentationLevel--; + indent(); + } + stack.pop(); + writer.close(tagName); + } + + function text(value) { + startText(); + var text = isInPre() ? value : value.replace("\n", "\n" + indentation); + writer.text(text); + } + + function selfClosing(tagName, attributes) { + indent(); + writer.selfClosing(tagName, attributes); + } + + function insideIndentedElement() { + return stack.length === 0 || indentedElements[stack[stack.length - 1]]; + } + + function startText() { + if (!inText) { + indent(); + inText = true; + } + } + + function indent() { + inText = false; + if (!start && insideIndentedElement() && !isInPre()) { + writer._append("\n"); + for (var i = 0; i < indentationLevel; i++) { + writer._append(indentation); + } + } + } + + function isInPre() { + return _.some(stack, function(tagName) { + return tagName === "pre"; + }); + } + + return { + asString: writer.asString, + open: open, + close: close, + text: text, + selfClosing: selfClosing + }; +} + + +function simpleWriter() { + var fragments = []; + + function open(tagName, attributes) { + var attributeString = generateAttributeString(attributes); + fragments.push(util.format("<%s%s>", tagName, attributeString)); + } + + function close(tagName) { + fragments.push(util.format("", tagName)); + } + + function selfClosing(tagName, attributes) { + var attributeString = generateAttributeString(attributes); + fragments.push(util.format("<%s%s />", tagName, attributeString)); + } + + function generateAttributeString(attributes) { + return _.map(attributes, function(value, key) { + return util.format(' %s="%s"', key, escapeHtmlAttribute(value)); + }).join(""); + } + + function text(value) { + fragments.push(escapeHtmlText(value)); + } + + function append(html) { + fragments.push(html); + } + + function asString() { + return fragments.join(""); + } + + return { + asString: asString, + open: open, + close: close, + text: text, + selfClosing: selfClosing, + _append: append + }; +} + +function escapeHtmlText(value) { + return value + .replace(/&/g, '&') + .replace(//g, '>'); +} + +function escapeHtmlAttribute(value) { + return value + .replace(/&/g, '&') + .replace(/"/g, '"') + .replace(//g, '>'); +} + +},{"underscore":153,"util":157}],32:[function(require,module,exports){ +var htmlWriter = require("./html-writer"); +var markdownWriter = require("./markdown-writer"); + +exports.writer = writer; + + +function writer(options) { + options = options || {}; + if (options.outputFormat === "markdown") { + return markdownWriter.writer(); + } else { + return htmlWriter.writer(options); + } +} + +},{"./html-writer":31,"./markdown-writer":33}],33:[function(require,module,exports){ +var _ = require("underscore"); + + +function symmetricMarkdownElement(end) { + return markdownElement(end, end); +} + +function markdownElement(start, end) { + return function() { + return {start: start, end: end}; + }; +} + +function markdownLink(attributes) { + var href = attributes.href || ""; + if (href) { + return { + start: "[", + end: "](" + href + ")", + anchorPosition: "before" + }; + } else { + return {}; + } +} + +function markdownImage(attributes) { + var src = attributes.src || ""; + var altText = attributes.alt || ""; + if (src || altText) { + return {start: "![" + altText + "](" + src + ")"}; + } else { + return {}; + } +} + +function markdownList(options) { + return function(attributes, list) { + return { + start: list ? "\n" : "", + end: list ? "" : "\n", + list: { + isOrdered: options.isOrdered, + indent: list ? list.indent + 1 : 0, + count: 0 + } + }; + }; +} + +function markdownListItem(attributes, list, listItem) { + list = list || {indent: 0, isOrdered: false, count: 0}; + list.count++; + listItem.hasClosed = false; + + var bullet = list.isOrdered ? list.count + "." : "-"; + var start = repeatString("\t", list.indent) + bullet + " "; + + return { + start: start, + end: function() { + if (!listItem.hasClosed) { + listItem.hasClosed = true; + return "\n"; + } + } + }; +} + +var htmlToMarkdown = { + "p": markdownElement("", "\n\n"), + "br": markdownElement("", " \n"), + "ul": markdownList({isOrdered: false}), + "ol": markdownList({isOrdered: true}), + "li": markdownListItem, + "strong": symmetricMarkdownElement("__"), + "em": symmetricMarkdownElement("*"), + "a": markdownLink, + "img": markdownImage +}; + +(function() { + for (var i = 1; i <= 6; i++) { + htmlToMarkdown["h" + i] = markdownElement(repeatString("#", i) + " ", "\n\n"); + } +})(); + +function repeatString(value, count) { + return new Array(count + 1).join(value); +} + +function markdownWriter() { + var fragments = []; + var elementStack = []; + var list = null; + var listItem = {}; + + function open(tagName, attributes) { + attributes = attributes || {}; + + var createElement = htmlToMarkdown[tagName] || function() { + return {}; + }; + var element = createElement(attributes, list, listItem); + elementStack.push({end: element.end, list: list}); + + if (element.list) { + list = element.list; + } + + var anchorBeforeStart = element.anchorPosition === "before"; + if (anchorBeforeStart) { + writeAnchor(attributes); + } + + fragments.push(element.start || ""); + if (!anchorBeforeStart) { + writeAnchor(attributes); + } + } + + function writeAnchor(attributes) { + if (attributes.id) { + fragments.push(''); + } + } + + function close(tagName) { + var element = elementStack.pop(); + list = element.list; + var end = _.isFunction(element.end) ? element.end() : element.end; + fragments.push(end || ""); + } + + function selfClosing(tagName, attributes) { + open(tagName, attributes); + close(tagName); + } + + function text(value) { + fragments.push(escapeMarkdown(value)); + } + + function asString() { + return fragments.join(""); + } + + return { + asString: asString, + open: open, + close: close, + text: text, + selfClosing: selfClosing + }; +} + +exports.writer = markdownWriter; + +function escapeMarkdown(value) { + return value + .replace(/\\/g, '\\\\') + .replace(/([\`\*_\{\}\[\]\(\)\#\+\-\.\!])/g, '\\$1'); +} + +},{"underscore":153}],34:[function(require,module,exports){ +var nodes = require("./nodes"); + +exports.Element = nodes.Element; +exports.element = nodes.element; +exports.text = nodes.text; +exports.readString = require("./reader").readString; +exports.writeString = require("./writer").writeString; + +},{"./nodes":35,"./reader":36,"./writer":37}],35:[function(require,module,exports){ +var _ = require("underscore"); + + +exports.Element = Element; +exports.element = function(name, attributes, children) { + return new Element(name, attributes, children); +}; +exports.text = function(value) { + return { + type: "text", + value: value + }; +}; + + +var emptyElement = { + first: function() { + return null; + }, + firstOrEmpty: function() { + return emptyElement; + }, + attributes: {} +}; + +function Element(name, attributes, children) { + this.type = "element"; + this.name = name; + this.attributes = attributes || {}; + this.children = children || []; +} + +Element.prototype.first = function(name) { + return _.find(this.children, function(child) { + return child.name === name; + }); +}; + +Element.prototype.firstOrEmpty = function(name) { + return this.first(name) || emptyElement; +}; + +Element.prototype.getElementsByTagName = function(name) { + var elements = _.filter(this.children, function(child) { + return child.name === name; + }); + return toElementList(elements); +}; + +Element.prototype.text = function() { + if (this.children.length === 0) { + return ""; + } else if (this.children.length !== 1 || this.children[0].type !== "text") { + throw new Error("Not implemented"); + } + return this.children[0].value; +}; + +var elementListPrototype = { + getElementsByTagName: function(name) { + return toElementList(_.flatten(this.map(function(element) { + return element.getElementsByTagName(name); + }, true))); + } +}; + +function toElementList(array) { + return _.extend(array, elementListPrototype); +} + +},{"underscore":153}],36:[function(require,module,exports){ +var promises = require("../promises"); +var sax = require("sax"); +var _ = require("underscore"); + +var nodes = require("./nodes"); +var Element = nodes.Element; + +exports.readString = readString; + +function readString(xmlString, namespaceMap) { + namespaceMap = namespaceMap || {}; + + var finished = false; + var parser = sax.parser(true, {xmlns: true, position: false}); + + var rootElement = {children: []}; + var currentElement = rootElement; + var stack = []; + + var deferred = promises.defer(); + + parser.onopentag = function(node) { + var attributes = mapObject(node.attributes, function(attribute) { + return attribute.value; + }, mapName); + + var element = new Element(mapName(node), attributes); + currentElement.children.push(element); + stack.push(currentElement); + currentElement = element; + }; + + function mapName(node) { + if (node.uri) { + var mappedPrefix = namespaceMap[node.uri]; + var prefix; + if (mappedPrefix) { + prefix = mappedPrefix + ":"; + } else { + prefix = "{" + node.uri + "}"; + } + return prefix + node.local; + } else { + return node.local; + } + } + + parser.onclosetag = function(node) { + currentElement = stack.pop(); + }; + + parser.ontext = function(text) { + if (currentElement !== rootElement) { + currentElement.children.push(nodes.text(text)); + } + }; + + parser.onend = function() { + if (!finished) { + finished = true; + deferred.resolve(rootElement.children[0]); + } + }; + + parser.onerror = function(error) { + if (!finished) { + finished = true; + deferred.reject(error); + } + }; + + parser.write(xmlString).close(); + + return deferred.promise; +} + +function mapObject(input, valueFunc, keyFunc) { + return _.reduce(input, function(result, value, key) { + var mappedKey = keyFunc(value, key, input); + result[mappedKey] = valueFunc(value, key, input); + return result; + }, {}); +} + +},{"../promises":23,"./nodes":35,"sax":150,"underscore":153}],37:[function(require,module,exports){ +var _ = require("underscore"); +var xmlbuilder = require("xmlbuilder"); + + +exports.writeString = writeString; + + +function writeString(root, namespaces) { + var uriToPrefix = _.invert(namespaces); + + var nodeWriters = { + element: writeElement, + text: writeTextNode + }; + + function writeNode(builder, node) { + return nodeWriters[node.type](builder, node); + } + + function writeElement(builder, element) { + var elementBuilder = builder.element(mapElementName(element.name), element.attributes); + element.children.forEach(function(child) { + writeNode(elementBuilder, child); + }); + } + + function mapElementName(name) { + var longFormMatch = /^\{(.*)\}(.*)$/.exec(name); + if (longFormMatch) { + var prefix = uriToPrefix[longFormMatch[1]]; + return prefix + (prefix === "" ? "" : ":") + longFormMatch[2]; + } else { + return name; + } + } + + function writeDocument(root) { + var builder = xmlbuilder + .create(mapElementName(root.name), { + version: '1.0', + encoding: 'UTF-8', + standalone: true + }); + + _.forEach(namespaces, function(uri, prefix) { + var key = "xmlns" + (prefix === "" ? "" : ":" + prefix); + builder.attribute(key, uri); + }); + + root.children.forEach(function(child) { + writeNode(builder, child); + }); + return builder.end(); + } + + return writeDocument(root); +} + +function writeTextNode(builder, node) { + builder.text(node.value); +} + +},{"underscore":153,"xmlbuilder":179}],38:[function(require,module,exports){ +(function (Buffer){ +var JSZip = require("jszip"); + +var promises = require("./promises"); + +exports.openArrayBuffer = openArrayBuffer; +exports.splitPath = splitPath; +exports.joinPath = joinPath; + +function openArrayBuffer(arrayBuffer) { + var zipFile = new JSZip(arrayBuffer); + function exists(name) { + return zipFile.file(name) !== null; + } + + function read(name, encoding) { + var array = zipFile.file(name).asUint8Array(); + var buffer = new Buffer(array); + if (encoding) { + return promises.when(buffer.toString(encoding)); + } else { + return promises.when(buffer); + } + } + + function write(name, contents) { + zipFile.file(name, contents); + } + + function toBuffer() { + return zipFile.generate({type: "nodebuffer"}); + } + + return { + exists: exists, + read: read, + write: write, + toBuffer: toBuffer + }; +} + +function splitPath(path) { + var lastIndex = path.lastIndexOf("/"); + if (lastIndex === -1) { + return {dirname: "", basename: path}; + } else { + return { + dirname: path.substring(0, lastIndex), + basename: path.substring(lastIndex + 1) + }; + } +} + +function joinPath() { + var nonEmptyPaths = Array.prototype.filter.call(arguments, function(path) { + return path; + }); + + var relevantPaths = []; + + nonEmptyPaths.forEach(function(path) { + if (/^\//.test(path)) { + relevantPaths = [path]; + } else { + relevantPaths.push(path); + } + }); + + return relevantPaths.join("/"); +} + +}).call(this,require("buffer").Buffer) +},{"./promises":23,"buffer":77,"jszip":92}],39:[function(require,module,exports){ +'use strict' + +exports.byteLength = byteLength +exports.toByteArray = toByteArray +exports.fromByteArray = fromByteArray + +var lookup = [] +var revLookup = [] +var Arr = typeof Uint8Array !== 'undefined' ? Uint8Array : Array + +var code = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' +for (var i = 0, len = code.length; i < len; ++i) { + lookup[i] = code[i] + revLookup[code.charCodeAt(i)] = i +} + +revLookup['-'.charCodeAt(0)] = 62 +revLookup['_'.charCodeAt(0)] = 63 + +function placeHoldersCount (b64) { + var len = b64.length + if (len % 4 > 0) { + throw new Error('Invalid string. Length must be a multiple of 4') + } + + // the number of equal signs (place holders) + // if there are two placeholders, than the two characters before it + // represent one byte + // if there is only one, then the three characters before it represent 2 bytes + // this is just a cheap hack to not do indexOf twice + return b64[len - 2] === '=' ? 2 : b64[len - 1] === '=' ? 1 : 0 +} + +function byteLength (b64) { + // base64 is 4/3 + up to two characters of the original data + return b64.length * 3 / 4 - placeHoldersCount(b64) +} + +function toByteArray (b64) { + var i, j, l, tmp, placeHolders, arr + var len = b64.length + placeHolders = placeHoldersCount(b64) + + arr = new Arr(len * 3 / 4 - placeHolders) + + // if there are placeholders, only get up to the last complete 4 chars + l = placeHolders > 0 ? len - 4 : len + + var L = 0 + + for (i = 0, j = 0; i < l; i += 4, j += 3) { + tmp = (revLookup[b64.charCodeAt(i)] << 18) | (revLookup[b64.charCodeAt(i + 1)] << 12) | (revLookup[b64.charCodeAt(i + 2)] << 6) | revLookup[b64.charCodeAt(i + 3)] + arr[L++] = (tmp >> 16) & 0xFF + arr[L++] = (tmp >> 8) & 0xFF + arr[L++] = tmp & 0xFF + } + + if (placeHolders === 2) { + tmp = (revLookup[b64.charCodeAt(i)] << 2) | (revLookup[b64.charCodeAt(i + 1)] >> 4) + arr[L++] = tmp & 0xFF + } else if (placeHolders === 1) { + tmp = (revLookup[b64.charCodeAt(i)] << 10) | (revLookup[b64.charCodeAt(i + 1)] << 4) | (revLookup[b64.charCodeAt(i + 2)] >> 2) + arr[L++] = (tmp >> 8) & 0xFF + arr[L++] = tmp & 0xFF + } + + return arr +} + +function tripletToBase64 (num) { + return lookup[num >> 18 & 0x3F] + lookup[num >> 12 & 0x3F] + lookup[num >> 6 & 0x3F] + lookup[num & 0x3F] +} + +function encodeChunk (uint8, start, end) { + var tmp + var output = [] + for (var i = start; i < end; i += 3) { + tmp = (uint8[i] << 16) + (uint8[i + 1] << 8) + (uint8[i + 2]) + output.push(tripletToBase64(tmp)) + } + return output.join('') +} + +function fromByteArray (uint8) { + var tmp + var len = uint8.length + var extraBytes = len % 3 // if we have 1 byte left, pad 2 bytes + var output = '' + var parts = [] + var maxChunkLength = 16383 // must be multiple of 3 + + // go through the array every three bytes, we'll deal with trailing stuff later + for (var i = 0, len2 = len - extraBytes; i < len2; i += maxChunkLength) { + parts.push(encodeChunk(uint8, i, (i + maxChunkLength) > len2 ? len2 : (i + maxChunkLength))) + } + + // pad the end with zeros, but make sure to not forget the extra bytes + if (extraBytes === 1) { + tmp = uint8[len - 1] + output += lookup[tmp >> 2] + output += lookup[(tmp << 4) & 0x3F] + output += '==' + } else if (extraBytes === 2) { + tmp = (uint8[len - 2] << 8) + (uint8[len - 1]) + output += lookup[tmp >> 10] + output += lookup[(tmp >> 4) & 0x3F] + output += lookup[(tmp << 2) & 0x3F] + output += '=' + } + + parts.push(output) + + return parts.join('') +} + +},{}],40:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise) { +var SomePromiseArray = Promise._SomePromiseArray; +function any(promises) { + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ret.setHowMany(1); + ret.setUnwrap(); + ret.init(); + return promise; +} + +Promise.any = function (promises) { + return any(promises); +}; + +Promise.prototype.any = function () { + return any(this); +}; + +}; + +},{}],41:[function(require,module,exports){ +(function (process){ +"use strict"; +var firstLineError; +try {throw new Error(); } catch (e) {firstLineError = e;} +var schedule = require("./schedule"); +var Queue = require("./queue"); +var util = require("./util"); + +function Async() { + this._customScheduler = false; + this._isTickUsed = false; + this._lateQueue = new Queue(16); + this._normalQueue = new Queue(16); + this._haveDrainedQueues = false; + this._trampolineEnabled = true; + var self = this; + this.drainQueues = function () { + self._drainQueues(); + }; + this._schedule = schedule; +} + +Async.prototype.setScheduler = function(fn) { + var prev = this._schedule; + this._schedule = fn; + this._customScheduler = true; + return prev; +}; + +Async.prototype.hasCustomScheduler = function() { + return this._customScheduler; +}; + +Async.prototype.enableTrampoline = function() { + this._trampolineEnabled = true; +}; + +Async.prototype.disableTrampolineIfNecessary = function() { + if (util.hasDevTools) { + this._trampolineEnabled = false; + } +}; + +Async.prototype.haveItemsQueued = function () { + return this._isTickUsed || this._haveDrainedQueues; +}; + + +Async.prototype.fatalError = function(e, isNode) { + if (isNode) { + process.stderr.write("Fatal " + (e instanceof Error ? e.stack : e) + + "\n"); + process.exit(2); + } else { + this.throwLater(e); + } +}; + +Async.prototype.throwLater = function(fn, arg) { + if (arguments.length === 1) { + arg = fn; + fn = function () { throw arg; }; + } + if (typeof setTimeout !== "undefined") { + setTimeout(function() { + fn(arg); + }, 0); + } else try { + this._schedule(function() { + fn(arg); + }); + } catch (e) { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +}; + +function AsyncInvokeLater(fn, receiver, arg) { + this._lateQueue.push(fn, receiver, arg); + this._queueTick(); +} + +function AsyncInvoke(fn, receiver, arg) { + this._normalQueue.push(fn, receiver, arg); + this._queueTick(); +} + +function AsyncSettlePromises(promise) { + this._normalQueue._pushOne(promise); + this._queueTick(); +} + +if (!util.hasDevTools) { + Async.prototype.invokeLater = AsyncInvokeLater; + Async.prototype.invoke = AsyncInvoke; + Async.prototype.settlePromises = AsyncSettlePromises; +} else { + Async.prototype.invokeLater = function (fn, receiver, arg) { + if (this._trampolineEnabled) { + AsyncInvokeLater.call(this, fn, receiver, arg); + } else { + this._schedule(function() { + setTimeout(function() { + fn.call(receiver, arg); + }, 100); + }); + } + }; + + Async.prototype.invoke = function (fn, receiver, arg) { + if (this._trampolineEnabled) { + AsyncInvoke.call(this, fn, receiver, arg); + } else { + this._schedule(function() { + fn.call(receiver, arg); + }); + } + }; + + Async.prototype.settlePromises = function(promise) { + if (this._trampolineEnabled) { + AsyncSettlePromises.call(this, promise); + } else { + this._schedule(function() { + promise._settlePromises(); + }); + } + }; +} + +Async.prototype._drainQueue = function(queue) { + while (queue.length() > 0) { + var fn = queue.shift(); + if (typeof fn !== "function") { + fn._settlePromises(); + continue; + } + var receiver = queue.shift(); + var arg = queue.shift(); + fn.call(receiver, arg); + } +}; + +Async.prototype._drainQueues = function () { + this._drainQueue(this._normalQueue); + this._reset(); + this._haveDrainedQueues = true; + this._drainQueue(this._lateQueue); +}; + +Async.prototype._queueTick = function () { + if (!this._isTickUsed) { + this._isTickUsed = true; + this._schedule(this.drainQueues); + } +}; + +Async.prototype._reset = function () { + this._isTickUsed = false; +}; + +module.exports = Async; +module.exports.firstLineError = firstLineError; + +}).call(this,require('_process')) +},{"./queue":64,"./schedule":67,"./util":74,"_process":138}],42:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, debug) { +var calledBind = false; +var rejectThis = function(_, e) { + this._reject(e); +}; + +var targetRejected = function(e, context) { + context.promiseRejectionQueued = true; + context.bindingPromise._then(rejectThis, rejectThis, null, this, e); +}; + +var bindingResolved = function(thisArg, context) { + if (((this._bitField & 50397184) === 0)) { + this._resolveCallback(context.target); + } +}; + +var bindingRejected = function(e, context) { + if (!context.promiseRejectionQueued) this._reject(e); +}; + +Promise.prototype.bind = function (thisArg) { + if (!calledBind) { + calledBind = true; + Promise.prototype._propagateFrom = debug.propagateFromFunction(); + Promise.prototype._boundValue = debug.boundValueFunction(); + } + var maybePromise = tryConvertToPromise(thisArg); + var ret = new Promise(INTERNAL); + ret._propagateFrom(this, 1); + var target = this._target(); + ret._setBoundTo(maybePromise); + if (maybePromise instanceof Promise) { + var context = { + promiseRejectionQueued: false, + promise: ret, + target: target, + bindingPromise: maybePromise + }; + target._then(INTERNAL, targetRejected, undefined, ret, context); + maybePromise._then( + bindingResolved, bindingRejected, undefined, ret, context); + ret._setOnCancel(maybePromise); + } else { + ret._resolveCallback(target); + } + return ret; +}; + +Promise.prototype._setBoundTo = function (obj) { + if (obj !== undefined) { + this._bitField = this._bitField | 2097152; + this._boundTo = obj; + } else { + this._bitField = this._bitField & (~2097152); + } +}; + +Promise.prototype._isBound = function () { + return (this._bitField & 2097152) === 2097152; +}; + +Promise.bind = function (thisArg, value) { + return Promise.resolve(value).bind(thisArg); +}; +}; + +},{}],43:[function(require,module,exports){ +"use strict"; +var cr = Object.create; +if (cr) { + var callerCache = cr(null); + var getterCache = cr(null); + callerCache[" size"] = getterCache[" size"] = 0; +} + +module.exports = function(Promise) { +var util = require("./util"); +var canEvaluate = util.canEvaluate; +var isIdentifier = util.isIdentifier; + +var getMethodCaller; +var getGetter; +if (!false) { +var makeMethodCaller = function (methodName) { + return new Function("ensureMethod", " \n\ + return function(obj) { \n\ + 'use strict' \n\ + var len = this.length; \n\ + ensureMethod(obj, 'methodName'); \n\ + switch(len) { \n\ + case 1: return obj.methodName(this[0]); \n\ + case 2: return obj.methodName(this[0], this[1]); \n\ + case 3: return obj.methodName(this[0], this[1], this[2]); \n\ + case 0: return obj.methodName(); \n\ + default: \n\ + return obj.methodName.apply(obj, this); \n\ + } \n\ + }; \n\ + ".replace(/methodName/g, methodName))(ensureMethod); +}; + +var makeGetter = function (propertyName) { + return new Function("obj", " \n\ + 'use strict'; \n\ + return obj.propertyName; \n\ + ".replace("propertyName", propertyName)); +}; + +var getCompiled = function(name, compiler, cache) { + var ret = cache[name]; + if (typeof ret !== "function") { + if (!isIdentifier(name)) { + return null; + } + ret = compiler(name); + cache[name] = ret; + cache[" size"]++; + if (cache[" size"] > 512) { + var keys = Object.keys(cache); + for (var i = 0; i < 256; ++i) delete cache[keys[i]]; + cache[" size"] = keys.length - 256; + } + } + return ret; +}; + +getMethodCaller = function(name) { + return getCompiled(name, makeMethodCaller, callerCache); +}; + +getGetter = function(name) { + return getCompiled(name, makeGetter, getterCache); +}; +} + +function ensureMethod(obj, methodName) { + var fn; + if (obj != null) fn = obj[methodName]; + if (typeof fn !== "function") { + var message = "Object " + util.classString(obj) + " has no method '" + + util.toString(methodName) + "'"; + throw new Promise.TypeError(message); + } + return fn; +} + +function caller(obj) { + var methodName = this.pop(); + var fn = ensureMethod(obj, methodName); + return fn.apply(obj, this); +} +Promise.prototype.call = function (methodName) { + var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}; + if (!false) { + if (canEvaluate) { + var maybeCaller = getMethodCaller(methodName); + if (maybeCaller !== null) { + return this._then( + maybeCaller, undefined, undefined, args, undefined); + } + } + } + args.push(methodName); + return this._then(caller, undefined, undefined, args, undefined); +}; + +function namedGetter(obj) { + return obj[this]; +} +function indexedGetter(obj) { + var index = +this; + if (index < 0) index = Math.max(0, index + obj.length); + return obj[index]; +} +Promise.prototype.get = function (propertyName) { + var isIndex = (typeof propertyName === "number"); + var getter; + if (!isIndex) { + if (canEvaluate) { + var maybeGetter = getGetter(propertyName); + getter = maybeGetter !== null ? maybeGetter : namedGetter; + } else { + getter = namedGetter; + } + } else { + getter = indexedGetter; + } + return this._then(getter, undefined, undefined, propertyName, undefined); +}; +}; + +},{"./util":74}],44:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, PromiseArray, apiRejection, debug) { +var util = require("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +Promise.prototype["break"] = Promise.prototype.cancel = function() { + if (!debug.cancellation()) return this._warn("cancellation is disabled"); + + var promise = this; + var child = promise; + while (promise._isCancellable()) { + if (!promise._cancelBy(child)) { + if (child._isFollowing()) { + child._followee().cancel(); + } else { + child._cancelBranched(); + } + break; + } + + var parent = promise._cancellationParent; + if (parent == null || !parent._isCancellable()) { + if (promise._isFollowing()) { + promise._followee().cancel(); + } else { + promise._cancelBranched(); + } + break; + } else { + if (promise._isFollowing()) promise._followee().cancel(); + promise._setWillBeCancelled(); + child = promise; + promise = parent; + } + } +}; + +Promise.prototype._branchHasCancelled = function() { + this._branchesRemainingToCancel--; +}; + +Promise.prototype._enoughBranchesHaveCancelled = function() { + return this._branchesRemainingToCancel === undefined || + this._branchesRemainingToCancel <= 0; +}; + +Promise.prototype._cancelBy = function(canceller) { + if (canceller === this) { + this._branchesRemainingToCancel = 0; + this._invokeOnCancel(); + return true; + } else { + this._branchHasCancelled(); + if (this._enoughBranchesHaveCancelled()) { + this._invokeOnCancel(); + return true; + } + } + return false; +}; + +Promise.prototype._cancelBranched = function() { + if (this._enoughBranchesHaveCancelled()) { + this._cancel(); + } +}; + +Promise.prototype._cancel = function() { + if (!this._isCancellable()) return; + this._setCancelled(); + async.invoke(this._cancelPromises, this, undefined); +}; + +Promise.prototype._cancelPromises = function() { + if (this._length() > 0) this._settlePromises(); +}; + +Promise.prototype._unsetOnCancel = function() { + this._onCancelField = undefined; +}; + +Promise.prototype._isCancellable = function() { + return this.isPending() && !this._isCancelled(); +}; + +Promise.prototype.isCancellable = function() { + return this.isPending() && !this.isCancelled(); +}; + +Promise.prototype._doInvokeOnCancel = function(onCancelCallback, internalOnly) { + if (util.isArray(onCancelCallback)) { + for (var i = 0; i < onCancelCallback.length; ++i) { + this._doInvokeOnCancel(onCancelCallback[i], internalOnly); + } + } else if (onCancelCallback !== undefined) { + if (typeof onCancelCallback === "function") { + if (!internalOnly) { + var e = tryCatch(onCancelCallback).call(this._boundValue()); + if (e === errorObj) { + this._attachExtraTrace(e.e); + async.throwLater(e.e); + } + } + } else { + onCancelCallback._resultCancelled(this); + } + } +}; + +Promise.prototype._invokeOnCancel = function() { + var onCancelCallback = this._onCancel(); + this._unsetOnCancel(); + async.invoke(this._doInvokeOnCancel, this, onCancelCallback); +}; + +Promise.prototype._invokeInternalOnCancel = function() { + if (this._isCancellable()) { + this._doInvokeOnCancel(this._onCancel(), true); + this._unsetOnCancel(); + } +}; + +Promise.prototype._resultCancelled = function() { + this.cancel(); +}; + +}; + +},{"./util":74}],45:[function(require,module,exports){ +"use strict"; +module.exports = function(NEXT_FILTER) { +var util = require("./util"); +var getKeys = require("./es5").keys; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function catchFilter(instances, cb, promise) { + return function(e) { + var boundTo = promise._boundValue(); + predicateLoop: for (var i = 0; i < instances.length; ++i) { + var item = instances[i]; + + if (item === Error || + (item != null && item.prototype instanceof Error)) { + if (e instanceof item) { + return tryCatch(cb).call(boundTo, e); + } + } else if (typeof item === "function") { + var matchesPredicate = tryCatch(item).call(boundTo, e); + if (matchesPredicate === errorObj) { + return matchesPredicate; + } else if (matchesPredicate) { + return tryCatch(cb).call(boundTo, e); + } + } else if (util.isObject(e)) { + var keys = getKeys(item); + for (var j = 0; j < keys.length; ++j) { + var key = keys[j]; + if (item[key] != e[key]) { + continue predicateLoop; + } + } + return tryCatch(cb).call(boundTo, e); + } + } + return NEXT_FILTER; + }; +} + +return catchFilter; +}; + +},{"./es5":51,"./util":74}],46:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise) { +var longStackTraces = false; +var contextStack = []; + +Promise.prototype._promiseCreated = function() {}; +Promise.prototype._pushContext = function() {}; +Promise.prototype._popContext = function() {return null;}; +Promise._peekContext = Promise.prototype._peekContext = function() {}; + +function Context() { + this._trace = new Context.CapturedTrace(peekContext()); +} +Context.prototype._pushContext = function () { + if (this._trace !== undefined) { + this._trace._promiseCreated = null; + contextStack.push(this._trace); + } +}; + +Context.prototype._popContext = function () { + if (this._trace !== undefined) { + var trace = contextStack.pop(); + var ret = trace._promiseCreated; + trace._promiseCreated = null; + return ret; + } + return null; +}; + +function createContext() { + if (longStackTraces) return new Context(); +} + +function peekContext() { + var lastIndex = contextStack.length - 1; + if (lastIndex >= 0) { + return contextStack[lastIndex]; + } + return undefined; +} +Context.CapturedTrace = null; +Context.create = createContext; +Context.deactivateLongStackTraces = function() {}; +Context.activateLongStackTraces = function() { + var Promise_pushContext = Promise.prototype._pushContext; + var Promise_popContext = Promise.prototype._popContext; + var Promise_PeekContext = Promise._peekContext; + var Promise_peekContext = Promise.prototype._peekContext; + var Promise_promiseCreated = Promise.prototype._promiseCreated; + Context.deactivateLongStackTraces = function() { + Promise.prototype._pushContext = Promise_pushContext; + Promise.prototype._popContext = Promise_popContext; + Promise._peekContext = Promise_PeekContext; + Promise.prototype._peekContext = Promise_peekContext; + Promise.prototype._promiseCreated = Promise_promiseCreated; + longStackTraces = false; + }; + longStackTraces = true; + Promise.prototype._pushContext = Context.prototype._pushContext; + Promise.prototype._popContext = Context.prototype._popContext; + Promise._peekContext = Promise.prototype._peekContext = peekContext; + Promise.prototype._promiseCreated = function() { + var ctx = this._peekContext(); + if (ctx && ctx._promiseCreated == null) ctx._promiseCreated = this; + }; +}; +return Context; +}; + +},{}],47:[function(require,module,exports){ +(function (process){ +"use strict"; +module.exports = function(Promise, Context) { +var getDomain = Promise._getDomain; +var async = Promise._async; +var Warning = require("./errors").Warning; +var util = require("./util"); +var canAttachTrace = util.canAttachTrace; +var unhandledRejectionHandled; +var possiblyUnhandledRejection; +var bluebirdFramePattern = + /[\\\/]bluebird[\\\/]js[\\\/](release|debug|instrumented)/; +var nodeFramePattern = /\((?:timers\.js):\d+:\d+\)/; +var parseLinePattern = /[\/<\(](.+?):(\d+):(\d+)\)?\s*$/; +var stackFramePattern = null; +var formatStack = null; +var indentStackFrames = false; +var printWarning; +var debugging = !!(util.env("BLUEBIRD_DEBUG") != 0 && + (false || + util.env("BLUEBIRD_DEBUG") || + util.env("NODE_ENV") === "development")); + +var warnings = !!(util.env("BLUEBIRD_WARNINGS") != 0 && + (debugging || util.env("BLUEBIRD_WARNINGS"))); + +var longStackTraces = !!(util.env("BLUEBIRD_LONG_STACK_TRACES") != 0 && + (debugging || util.env("BLUEBIRD_LONG_STACK_TRACES"))); + +var wForgottenReturn = util.env("BLUEBIRD_W_FORGOTTEN_RETURN") != 0 && + (warnings || !!util.env("BLUEBIRD_W_FORGOTTEN_RETURN")); + +Promise.prototype.suppressUnhandledRejections = function() { + var target = this._target(); + target._bitField = ((target._bitField & (~1048576)) | + 524288); +}; + +Promise.prototype._ensurePossibleRejectionHandled = function () { + if ((this._bitField & 524288) !== 0) return; + this._setRejectionIsUnhandled(); + async.invokeLater(this._notifyUnhandledRejection, this, undefined); +}; + +Promise.prototype._notifyUnhandledRejectionIsHandled = function () { + fireRejectionEvent("rejectionHandled", + unhandledRejectionHandled, undefined, this); +}; + +Promise.prototype._setReturnedNonUndefined = function() { + this._bitField = this._bitField | 268435456; +}; + +Promise.prototype._returnedNonUndefined = function() { + return (this._bitField & 268435456) !== 0; +}; + +Promise.prototype._notifyUnhandledRejection = function () { + if (this._isRejectionUnhandled()) { + var reason = this._settledValue(); + this._setUnhandledRejectionIsNotified(); + fireRejectionEvent("unhandledRejection", + possiblyUnhandledRejection, reason, this); + } +}; + +Promise.prototype._setUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField | 262144; +}; + +Promise.prototype._unsetUnhandledRejectionIsNotified = function () { + this._bitField = this._bitField & (~262144); +}; + +Promise.prototype._isUnhandledRejectionNotified = function () { + return (this._bitField & 262144) > 0; +}; + +Promise.prototype._setRejectionIsUnhandled = function () { + this._bitField = this._bitField | 1048576; +}; + +Promise.prototype._unsetRejectionIsUnhandled = function () { + this._bitField = this._bitField & (~1048576); + if (this._isUnhandledRejectionNotified()) { + this._unsetUnhandledRejectionIsNotified(); + this._notifyUnhandledRejectionIsHandled(); + } +}; + +Promise.prototype._isRejectionUnhandled = function () { + return (this._bitField & 1048576) > 0; +}; + +Promise.prototype._warn = function(message, shouldUseOwnTrace, promise) { + return warn(message, shouldUseOwnTrace, promise || this); +}; + +Promise.onPossiblyUnhandledRejection = function (fn) { + var domain = getDomain(); + possiblyUnhandledRejection = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +Promise.onUnhandledRejectionHandled = function (fn) { + var domain = getDomain(); + unhandledRejectionHandled = + typeof fn === "function" ? (domain === null ? + fn : util.domainBind(domain, fn)) + : undefined; +}; + +var disableLongStackTraces = function() {}; +Promise.longStackTraces = function () { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + if (!config.longStackTraces && longStackTracesIsSupported()) { + var Promise_captureStackTrace = Promise.prototype._captureStackTrace; + var Promise_attachExtraTrace = Promise.prototype._attachExtraTrace; + config.longStackTraces = true; + disableLongStackTraces = function() { + if (async.haveItemsQueued() && !config.longStackTraces) { + throw new Error("cannot enable long stack traces after promises have been created\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + Promise.prototype._captureStackTrace = Promise_captureStackTrace; + Promise.prototype._attachExtraTrace = Promise_attachExtraTrace; + Context.deactivateLongStackTraces(); + async.enableTrampoline(); + config.longStackTraces = false; + }; + Promise.prototype._captureStackTrace = longStackTracesCaptureStackTrace; + Promise.prototype._attachExtraTrace = longStackTracesAttachExtraTrace; + Context.activateLongStackTraces(); + async.disableTrampolineIfNecessary(); + } +}; + +Promise.hasLongStackTraces = function () { + return config.longStackTraces && longStackTracesIsSupported(); +}; + +var fireDomEvent = (function() { + try { + if (typeof CustomEvent === "function") { + var event = new CustomEvent("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new CustomEvent(name.toLowerCase(), { + detail: event, + cancelable: true + }); + return !util.global.dispatchEvent(domEvent); + }; + } else if (typeof Event === "function") { + var event = new Event("CustomEvent"); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = new Event(name.toLowerCase(), { + cancelable: true + }); + domEvent.detail = event; + return !util.global.dispatchEvent(domEvent); + }; + } else { + var event = document.createEvent("CustomEvent"); + event.initCustomEvent("testingtheevent", false, true, {}); + util.global.dispatchEvent(event); + return function(name, event) { + var domEvent = document.createEvent("CustomEvent"); + domEvent.initCustomEvent(name.toLowerCase(), false, true, + event); + return !util.global.dispatchEvent(domEvent); + }; + } + } catch (e) {} + return function() { + return false; + }; +})(); + +var fireGlobalEvent = (function() { + if (util.isNode) { + return function() { + return process.emit.apply(process, arguments); + }; + } else { + if (!util.global) { + return function() { + return false; + }; + } + return function(name) { + var methodName = "on" + name.toLowerCase(); + var method = util.global[methodName]; + if (!method) return false; + method.apply(util.global, [].slice.call(arguments, 1)); + return true; + }; + } +})(); + +function generatePromiseLifecycleEventObject(name, promise) { + return {promise: promise}; +} + +var eventToObjectGenerator = { + promiseCreated: generatePromiseLifecycleEventObject, + promiseFulfilled: generatePromiseLifecycleEventObject, + promiseRejected: generatePromiseLifecycleEventObject, + promiseResolved: generatePromiseLifecycleEventObject, + promiseCancelled: generatePromiseLifecycleEventObject, + promiseChained: function(name, promise, child) { + return {promise: promise, child: child}; + }, + warning: function(name, warning) { + return {warning: warning}; + }, + unhandledRejection: function (name, reason, promise) { + return {reason: reason, promise: promise}; + }, + rejectionHandled: generatePromiseLifecycleEventObject +}; + +var activeFireEvent = function (name) { + var globalEventFired = false; + try { + globalEventFired = fireGlobalEvent.apply(null, arguments); + } catch (e) { + async.throwLater(e); + globalEventFired = true; + } + + var domEventFired = false; + try { + domEventFired = fireDomEvent(name, + eventToObjectGenerator[name].apply(null, arguments)); + } catch (e) { + async.throwLater(e); + domEventFired = true; + } + + return domEventFired || globalEventFired; +}; + +Promise.config = function(opts) { + opts = Object(opts); + if ("longStackTraces" in opts) { + if (opts.longStackTraces) { + Promise.longStackTraces(); + } else if (!opts.longStackTraces && Promise.hasLongStackTraces()) { + disableLongStackTraces(); + } + } + if ("warnings" in opts) { + var warningsOption = opts.warnings; + config.warnings = !!warningsOption; + wForgottenReturn = config.warnings; + + if (util.isObject(warningsOption)) { + if ("wForgottenReturn" in warningsOption) { + wForgottenReturn = !!warningsOption.wForgottenReturn; + } + } + } + if ("cancellation" in opts && opts.cancellation && !config.cancellation) { + if (async.haveItemsQueued()) { + throw new Error( + "cannot enable cancellation after promises are in use"); + } + Promise.prototype._clearCancellationData = + cancellationClearCancellationData; + Promise.prototype._propagateFrom = cancellationPropagateFrom; + Promise.prototype._onCancel = cancellationOnCancel; + Promise.prototype._setOnCancel = cancellationSetOnCancel; + Promise.prototype._attachCancellationCallback = + cancellationAttachCancellationCallback; + Promise.prototype._execute = cancellationExecute; + propagateFromFunction = cancellationPropagateFrom; + config.cancellation = true; + } + if ("monitoring" in opts) { + if (opts.monitoring && !config.monitoring) { + config.monitoring = true; + Promise.prototype._fireEvent = activeFireEvent; + } else if (!opts.monitoring && config.monitoring) { + config.monitoring = false; + Promise.prototype._fireEvent = defaultFireEvent; + } + } + return Promise; +}; + +function defaultFireEvent() { return false; } + +Promise.prototype._fireEvent = defaultFireEvent; +Promise.prototype._execute = function(executor, resolve, reject) { + try { + executor(resolve, reject); + } catch (e) { + return e; + } +}; +Promise.prototype._onCancel = function () {}; +Promise.prototype._setOnCancel = function (handler) { ; }; +Promise.prototype._attachCancellationCallback = function(onCancel) { + ; +}; +Promise.prototype._captureStackTrace = function () {}; +Promise.prototype._attachExtraTrace = function () {}; +Promise.prototype._clearCancellationData = function() {}; +Promise.prototype._propagateFrom = function (parent, flags) { + ; + ; +}; + +function cancellationExecute(executor, resolve, reject) { + var promise = this; + try { + executor(resolve, reject, function(onCancel) { + if (typeof onCancel !== "function") { + throw new TypeError("onCancel must be a function, got: " + + util.toString(onCancel)); + } + promise._attachCancellationCallback(onCancel); + }); + } catch (e) { + return e; + } +} + +function cancellationAttachCancellationCallback(onCancel) { + if (!this._isCancellable()) return this; + + var previousOnCancel = this._onCancel(); + if (previousOnCancel !== undefined) { + if (util.isArray(previousOnCancel)) { + previousOnCancel.push(onCancel); + } else { + this._setOnCancel([previousOnCancel, onCancel]); + } + } else { + this._setOnCancel(onCancel); + } +} + +function cancellationOnCancel() { + return this._onCancelField; +} + +function cancellationSetOnCancel(onCancel) { + this._onCancelField = onCancel; +} + +function cancellationClearCancellationData() { + this._cancellationParent = undefined; + this._onCancelField = undefined; +} + +function cancellationPropagateFrom(parent, flags) { + if ((flags & 1) !== 0) { + this._cancellationParent = parent; + var branchesRemainingToCancel = parent._branchesRemainingToCancel; + if (branchesRemainingToCancel === undefined) { + branchesRemainingToCancel = 0; + } + parent._branchesRemainingToCancel = branchesRemainingToCancel + 1; + } + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} + +function bindingPropagateFrom(parent, flags) { + if ((flags & 2) !== 0 && parent._isBound()) { + this._setBoundTo(parent._boundTo); + } +} +var propagateFromFunction = bindingPropagateFrom; + +function boundValueFunction() { + var ret = this._boundTo; + if (ret !== undefined) { + if (ret instanceof Promise) { + if (ret.isFulfilled()) { + return ret.value(); + } else { + return undefined; + } + } + } + return ret; +} + +function longStackTracesCaptureStackTrace() { + this._trace = new CapturedTrace(this._peekContext()); +} + +function longStackTracesAttachExtraTrace(error, ignoreSelf) { + if (canAttachTrace(error)) { + var trace = this._trace; + if (trace !== undefined) { + if (ignoreSelf) trace = trace._parent; + } + if (trace !== undefined) { + trace.attachExtraTrace(error); + } else if (!error.__stackCleaned__) { + var parsed = parseStackAndMessage(error); + util.notEnumerableProp(error, "stack", + parsed.message + "\n" + parsed.stack.join("\n")); + util.notEnumerableProp(error, "__stackCleaned__", true); + } + } +} + +function checkForgottenReturns(returnValue, promiseCreated, name, promise, + parent) { + if (returnValue === undefined && promiseCreated !== null && + wForgottenReturn) { + if (parent !== undefined && parent._returnedNonUndefined()) return; + if ((promise._bitField & 65535) === 0) return; + + if (name) name = name + " "; + var handlerLine = ""; + var creatorLine = ""; + if (promiseCreated._trace) { + var traceLines = promiseCreated._trace.stack.split("\n"); + var stack = cleanStack(traceLines); + for (var i = stack.length - 1; i >= 0; --i) { + var line = stack[i]; + if (!nodeFramePattern.test(line)) { + var lineMatches = line.match(parseLinePattern); + if (lineMatches) { + handlerLine = "at " + lineMatches[1] + + ":" + lineMatches[2] + ":" + lineMatches[3] + " "; + } + break; + } + } + + if (stack.length > 0) { + var firstUserLine = stack[0]; + for (var i = 0; i < traceLines.length; ++i) { + + if (traceLines[i] === firstUserLine) { + if (i > 0) { + creatorLine = "\n" + traceLines[i - 1]; + } + break; + } + } + + } + } + var msg = "a promise was created in a " + name + + "handler " + handlerLine + "but was not returned from it, " + + "see http://goo.gl/rRqMUw" + + creatorLine; + promise._warn(msg, true, promiseCreated); + } +} + +function deprecated(name, replacement) { + var message = name + + " is deprecated and will be removed in a future version."; + if (replacement) message += " Use " + replacement + " instead."; + return warn(message); +} + +function warn(message, shouldUseOwnTrace, promise) { + if (!config.warnings) return; + var warning = new Warning(message); + var ctx; + if (shouldUseOwnTrace) { + promise._attachExtraTrace(warning); + } else if (config.longStackTraces && (ctx = Promise._peekContext())) { + ctx.attachExtraTrace(warning); + } else { + var parsed = parseStackAndMessage(warning); + warning.stack = parsed.message + "\n" + parsed.stack.join("\n"); + } + + if (!activeFireEvent("warning", warning)) { + formatAndLogError(warning, "", true); + } +} + +function reconstructStack(message, stacks) { + for (var i = 0; i < stacks.length - 1; ++i) { + stacks[i].push("From previous event:"); + stacks[i] = stacks[i].join("\n"); + } + if (i < stacks.length) { + stacks[i] = stacks[i].join("\n"); + } + return message + "\n" + stacks.join("\n"); +} + +function removeDuplicateOrEmptyJumps(stacks) { + for (var i = 0; i < stacks.length; ++i) { + if (stacks[i].length === 0 || + ((i + 1 < stacks.length) && stacks[i][0] === stacks[i+1][0])) { + stacks.splice(i, 1); + i--; + } + } +} + +function removeCommonRoots(stacks) { + var current = stacks[0]; + for (var i = 1; i < stacks.length; ++i) { + var prev = stacks[i]; + var currentLastIndex = current.length - 1; + var currentLastLine = current[currentLastIndex]; + var commonRootMeetPoint = -1; + + for (var j = prev.length - 1; j >= 0; --j) { + if (prev[j] === currentLastLine) { + commonRootMeetPoint = j; + break; + } + } + + for (var j = commonRootMeetPoint; j >= 0; --j) { + var line = prev[j]; + if (current[currentLastIndex] === line) { + current.pop(); + currentLastIndex--; + } else { + break; + } + } + current = prev; + } +} + +function cleanStack(stack) { + var ret = []; + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + var isTraceLine = " (No stack trace)" === line || + stackFramePattern.test(line); + var isInternalFrame = isTraceLine && shouldIgnore(line); + if (isTraceLine && !isInternalFrame) { + if (indentStackFrames && line.charAt(0) !== " ") { + line = " " + line; + } + ret.push(line); + } + } + return ret; +} + +function stackFramesAsArray(error) { + var stack = error.stack.replace(/\s+$/g, "").split("\n"); + for (var i = 0; i < stack.length; ++i) { + var line = stack[i]; + if (" (No stack trace)" === line || stackFramePattern.test(line)) { + break; + } + } + if (i > 0 && error.name != "SyntaxError") { + stack = stack.slice(i); + } + return stack; +} + +function parseStackAndMessage(error) { + var stack = error.stack; + var message = error.toString(); + stack = typeof stack === "string" && stack.length > 0 + ? stackFramesAsArray(error) : [" (No stack trace)"]; + return { + message: message, + stack: error.name == "SyntaxError" ? stack : cleanStack(stack) + }; +} + +function formatAndLogError(error, title, isSoft) { + if (typeof console !== "undefined") { + var message; + if (util.isObject(error)) { + var stack = error.stack; + message = title + formatStack(stack, error); + } else { + message = title + String(error); + } + if (typeof printWarning === "function") { + printWarning(message, isSoft); + } else if (typeof console.log === "function" || + typeof console.log === "object") { + console.log(message); + } + } +} + +function fireRejectionEvent(name, localHandler, reason, promise) { + var localEventFired = false; + try { + if (typeof localHandler === "function") { + localEventFired = true; + if (name === "rejectionHandled") { + localHandler(promise); + } else { + localHandler(reason, promise); + } + } + } catch (e) { + async.throwLater(e); + } + + if (name === "unhandledRejection") { + if (!activeFireEvent(name, reason, promise) && !localEventFired) { + formatAndLogError(reason, "Unhandled rejection "); + } + } else { + activeFireEvent(name, promise); + } +} + +function formatNonError(obj) { + var str; + if (typeof obj === "function") { + str = "[function " + + (obj.name || "anonymous") + + "]"; + } else { + str = obj && typeof obj.toString === "function" + ? obj.toString() : util.toString(obj); + var ruselessToString = /\[object [a-zA-Z0-9$_]+\]/; + if (ruselessToString.test(str)) { + try { + var newStr = JSON.stringify(obj); + str = newStr; + } + catch(e) { + + } + } + if (str.length === 0) { + str = "(empty array)"; + } + } + return ("(<" + snip(str) + ">, no stack trace)"); +} + +function snip(str) { + var maxChars = 41; + if (str.length < maxChars) { + return str; + } + return str.substr(0, maxChars - 3) + "..."; +} + +function longStackTracesIsSupported() { + return typeof captureStackTrace === "function"; +} + +var shouldIgnore = function() { return false; }; +var parseLineInfoRegex = /[\/<\(]([^:\/]+):(\d+):(?:\d+)\)?\s*$/; +function parseLineInfo(line) { + var matches = line.match(parseLineInfoRegex); + if (matches) { + return { + fileName: matches[1], + line: parseInt(matches[2], 10) + }; + } +} + +function setBounds(firstLineError, lastLineError) { + if (!longStackTracesIsSupported()) return; + var firstStackLines = firstLineError.stack.split("\n"); + var lastStackLines = lastLineError.stack.split("\n"); + var firstIndex = -1; + var lastIndex = -1; + var firstFileName; + var lastFileName; + for (var i = 0; i < firstStackLines.length; ++i) { + var result = parseLineInfo(firstStackLines[i]); + if (result) { + firstFileName = result.fileName; + firstIndex = result.line; + break; + } + } + for (var i = 0; i < lastStackLines.length; ++i) { + var result = parseLineInfo(lastStackLines[i]); + if (result) { + lastFileName = result.fileName; + lastIndex = result.line; + break; + } + } + if (firstIndex < 0 || lastIndex < 0 || !firstFileName || !lastFileName || + firstFileName !== lastFileName || firstIndex >= lastIndex) { + return; + } + + shouldIgnore = function(line) { + if (bluebirdFramePattern.test(line)) return true; + var info = parseLineInfo(line); + if (info) { + if (info.fileName === firstFileName && + (firstIndex <= info.line && info.line <= lastIndex)) { + return true; + } + } + return false; + }; +} + +function CapturedTrace(parent) { + this._parent = parent; + this._promisesCreated = 0; + var length = this._length = 1 + (parent === undefined ? 0 : parent._length); + captureStackTrace(this, CapturedTrace); + if (length > 32) this.uncycle(); +} +util.inherits(CapturedTrace, Error); +Context.CapturedTrace = CapturedTrace; + +CapturedTrace.prototype.uncycle = function() { + var length = this._length; + if (length < 2) return; + var nodes = []; + var stackToIndex = {}; + + for (var i = 0, node = this; node !== undefined; ++i) { + nodes.push(node); + node = node._parent; + } + length = this._length = i; + for (var i = length - 1; i >= 0; --i) { + var stack = nodes[i].stack; + if (stackToIndex[stack] === undefined) { + stackToIndex[stack] = i; + } + } + for (var i = 0; i < length; ++i) { + var currentStack = nodes[i].stack; + var index = stackToIndex[currentStack]; + if (index !== undefined && index !== i) { + if (index > 0) { + nodes[index - 1]._parent = undefined; + nodes[index - 1]._length = 1; + } + nodes[i]._parent = undefined; + nodes[i]._length = 1; + var cycleEdgeNode = i > 0 ? nodes[i - 1] : this; + + if (index < length - 1) { + cycleEdgeNode._parent = nodes[index + 1]; + cycleEdgeNode._parent.uncycle(); + cycleEdgeNode._length = + cycleEdgeNode._parent._length + 1; + } else { + cycleEdgeNode._parent = undefined; + cycleEdgeNode._length = 1; + } + var currentChildLength = cycleEdgeNode._length + 1; + for (var j = i - 2; j >= 0; --j) { + nodes[j]._length = currentChildLength; + currentChildLength++; + } + return; + } + } +}; + +CapturedTrace.prototype.attachExtraTrace = function(error) { + if (error.__stackCleaned__) return; + this.uncycle(); + var parsed = parseStackAndMessage(error); + var message = parsed.message; + var stacks = [parsed.stack]; + + var trace = this; + while (trace !== undefined) { + stacks.push(cleanStack(trace.stack.split("\n"))); + trace = trace._parent; + } + removeCommonRoots(stacks); + removeDuplicateOrEmptyJumps(stacks); + util.notEnumerableProp(error, "stack", reconstructStack(message, stacks)); + util.notEnumerableProp(error, "__stackCleaned__", true); +}; + +var captureStackTrace = (function stackDetection() { + var v8stackFramePattern = /^\s*at\s*/; + var v8stackFormatter = function(stack, error) { + if (typeof stack === "string") return stack; + + if (error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + if (typeof Error.stackTraceLimit === "number" && + typeof Error.captureStackTrace === "function") { + Error.stackTraceLimit += 6; + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + var captureStackTrace = Error.captureStackTrace; + + shouldIgnore = function(line) { + return bluebirdFramePattern.test(line); + }; + return function(receiver, ignoreUntil) { + Error.stackTraceLimit += 6; + captureStackTrace(receiver, ignoreUntil); + Error.stackTraceLimit -= 6; + }; + } + var err = new Error(); + + if (typeof err.stack === "string" && + err.stack.split("\n")[0].indexOf("stackDetection@") >= 0) { + stackFramePattern = /@/; + formatStack = v8stackFormatter; + indentStackFrames = true; + return function captureStackTrace(o) { + o.stack = new Error().stack; + }; + } + + var hasStackAfterThrow; + try { throw new Error(); } + catch(e) { + hasStackAfterThrow = ("stack" in e); + } + if (!("stack" in err) && hasStackAfterThrow && + typeof Error.stackTraceLimit === "number") { + stackFramePattern = v8stackFramePattern; + formatStack = v8stackFormatter; + return function captureStackTrace(o) { + Error.stackTraceLimit += 6; + try { throw new Error(); } + catch(e) { o.stack = e.stack; } + Error.stackTraceLimit -= 6; + }; + } + + formatStack = function(stack, error) { + if (typeof stack === "string") return stack; + + if ((typeof error === "object" || + typeof error === "function") && + error.name !== undefined && + error.message !== undefined) { + return error.toString(); + } + return formatNonError(error); + }; + + return null; + +})([]); + +if (typeof console !== "undefined" && typeof console.warn !== "undefined") { + printWarning = function (message) { + console.warn(message); + }; + if (util.isNode && process.stderr.isTTY) { + printWarning = function(message, isSoft) { + var color = isSoft ? "\u001b[33m" : "\u001b[31m"; + console.warn(color + message + "\u001b[0m\n"); + }; + } else if (!util.isNode && typeof (new Error().stack) === "string") { + printWarning = function(message, isSoft) { + console.warn("%c" + message, + isSoft ? "color: darkorange" : "color: red"); + }; + } +} + +var config = { + warnings: warnings, + longStackTraces: false, + cancellation: false, + monitoring: false +}; + +if (longStackTraces) Promise.longStackTraces(); + +return { + longStackTraces: function() { + return config.longStackTraces; + }, + warnings: function() { + return config.warnings; + }, + cancellation: function() { + return config.cancellation; + }, + monitoring: function() { + return config.monitoring; + }, + propagateFromFunction: function() { + return propagateFromFunction; + }, + boundValueFunction: function() { + return boundValueFunction; + }, + checkForgottenReturns: checkForgottenReturns, + setBounds: setBounds, + warn: warn, + deprecated: deprecated, + CapturedTrace: CapturedTrace, + fireDomEvent: fireDomEvent, + fireGlobalEvent: fireGlobalEvent +}; +}; + +}).call(this,require('_process')) +},{"./errors":50,"./util":74,"_process":138}],48:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise) { +function returner() { + return this.value; +} +function thrower() { + throw this.reason; +} + +Promise.prototype["return"] = +Promise.prototype.thenReturn = function (value) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + returner, undefined, undefined, {value: value}, undefined); +}; + +Promise.prototype["throw"] = +Promise.prototype.thenThrow = function (reason) { + return this._then( + thrower, undefined, undefined, {reason: reason}, undefined); +}; + +Promise.prototype.catchThrow = function (reason) { + if (arguments.length <= 1) { + return this._then( + undefined, thrower, undefined, {reason: reason}, undefined); + } else { + var _reason = arguments[1]; + var handler = function() {throw _reason;}; + return this.caught(reason, handler); + } +}; + +Promise.prototype.catchReturn = function (value) { + if (arguments.length <= 1) { + if (value instanceof Promise) value.suppressUnhandledRejections(); + return this._then( + undefined, returner, undefined, {value: value}, undefined); + } else { + var _value = arguments[1]; + if (_value instanceof Promise) _value.suppressUnhandledRejections(); + var handler = function() {return _value;}; + return this.caught(value, handler); + } +}; +}; + +},{}],49:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseReduce = Promise.reduce; +var PromiseAll = Promise.all; + +function promiseAllThis() { + return PromiseAll(this); +} + +function PromiseMapSeries(promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, INTERNAL); +} + +Promise.prototype.each = function (fn) { + return PromiseReduce(this, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, this, undefined); +}; + +Promise.prototype.mapSeries = function (fn) { + return PromiseReduce(this, fn, INTERNAL, INTERNAL); +}; + +Promise.each = function (promises, fn) { + return PromiseReduce(promises, fn, INTERNAL, 0) + ._then(promiseAllThis, undefined, undefined, promises, undefined); +}; + +Promise.mapSeries = PromiseMapSeries; +}; + + +},{}],50:[function(require,module,exports){ +"use strict"; +var es5 = require("./es5"); +var Objectfreeze = es5.freeze; +var util = require("./util"); +var inherits = util.inherits; +var notEnumerableProp = util.notEnumerableProp; + +function subError(nameProperty, defaultMessage) { + function SubError(message) { + if (!(this instanceof SubError)) return new SubError(message); + notEnumerableProp(this, "message", + typeof message === "string" ? message : defaultMessage); + notEnumerableProp(this, "name", nameProperty); + if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } else { + Error.call(this); + } + } + inherits(SubError, Error); + return SubError; +} + +var _TypeError, _RangeError; +var Warning = subError("Warning", "warning"); +var CancellationError = subError("CancellationError", "cancellation error"); +var TimeoutError = subError("TimeoutError", "timeout error"); +var AggregateError = subError("AggregateError", "aggregate error"); +try { + _TypeError = TypeError; + _RangeError = RangeError; +} catch(e) { + _TypeError = subError("TypeError", "type error"); + _RangeError = subError("RangeError", "range error"); +} + +var methods = ("join pop push shift unshift slice filter forEach some " + + "every map indexOf lastIndexOf reduce reduceRight sort reverse").split(" "); + +for (var i = 0; i < methods.length; ++i) { + if (typeof Array.prototype[methods[i]] === "function") { + AggregateError.prototype[methods[i]] = Array.prototype[methods[i]]; + } +} + +es5.defineProperty(AggregateError.prototype, "length", { + value: 0, + configurable: false, + writable: true, + enumerable: true +}); +AggregateError.prototype["isOperational"] = true; +var level = 0; +AggregateError.prototype.toString = function() { + var indent = Array(level * 4 + 1).join(" "); + var ret = "\n" + indent + "AggregateError of:" + "\n"; + level++; + indent = Array(level * 4 + 1).join(" "); + for (var i = 0; i < this.length; ++i) { + var str = this[i] === this ? "[Circular AggregateError]" : this[i] + ""; + var lines = str.split("\n"); + for (var j = 0; j < lines.length; ++j) { + lines[j] = indent + lines[j]; + } + str = lines.join("\n"); + ret += str + "\n"; + } + level--; + return ret; +}; + +function OperationalError(message) { + if (!(this instanceof OperationalError)) + return new OperationalError(message); + notEnumerableProp(this, "name", "OperationalError"); + notEnumerableProp(this, "message", message); + this.cause = message; + this["isOperational"] = true; + + if (message instanceof Error) { + notEnumerableProp(this, "message", message.message); + notEnumerableProp(this, "stack", message.stack); + } else if (Error.captureStackTrace) { + Error.captureStackTrace(this, this.constructor); + } + +} +inherits(OperationalError, Error); + +var errorTypes = Error["__BluebirdErrorTypes__"]; +if (!errorTypes) { + errorTypes = Objectfreeze({ + CancellationError: CancellationError, + TimeoutError: TimeoutError, + OperationalError: OperationalError, + RejectionError: OperationalError, + AggregateError: AggregateError + }); + es5.defineProperty(Error, "__BluebirdErrorTypes__", { + value: errorTypes, + writable: false, + enumerable: false, + configurable: false + }); +} + +module.exports = { + Error: Error, + TypeError: _TypeError, + RangeError: _RangeError, + CancellationError: errorTypes.CancellationError, + OperationalError: errorTypes.OperationalError, + TimeoutError: errorTypes.TimeoutError, + AggregateError: errorTypes.AggregateError, + Warning: Warning +}; + +},{"./es5":51,"./util":74}],51:[function(require,module,exports){ +var isES5 = (function(){ + "use strict"; + return this === undefined; +})(); + +if (isES5) { + module.exports = { + freeze: Object.freeze, + defineProperty: Object.defineProperty, + getDescriptor: Object.getOwnPropertyDescriptor, + keys: Object.keys, + names: Object.getOwnPropertyNames, + getPrototypeOf: Object.getPrototypeOf, + isArray: Array.isArray, + isES5: isES5, + propertyIsWritable: function(obj, prop) { + var descriptor = Object.getOwnPropertyDescriptor(obj, prop); + return !!(!descriptor || descriptor.writable || descriptor.set); + } + }; +} else { + var has = {}.hasOwnProperty; + var str = {}.toString; + var proto = {}.constructor.prototype; + + var ObjectKeys = function (o) { + var ret = []; + for (var key in o) { + if (has.call(o, key)) { + ret.push(key); + } + } + return ret; + }; + + var ObjectGetDescriptor = function(o, key) { + return {value: o[key]}; + }; + + var ObjectDefineProperty = function (o, key, desc) { + o[key] = desc.value; + return o; + }; + + var ObjectFreeze = function (obj) { + return obj; + }; + + var ObjectGetPrototypeOf = function (obj) { + try { + return Object(obj).constructor.prototype; + } + catch (e) { + return proto; + } + }; + + var ArrayIsArray = function (obj) { + try { + return str.call(obj) === "[object Array]"; + } + catch(e) { + return false; + } + }; + + module.exports = { + isArray: ArrayIsArray, + keys: ObjectKeys, + names: ObjectKeys, + defineProperty: ObjectDefineProperty, + getDescriptor: ObjectGetDescriptor, + freeze: ObjectFreeze, + getPrototypeOf: ObjectGetPrototypeOf, + isES5: isES5, + propertyIsWritable: function() { + return true; + } + }; +} + +},{}],52:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var PromiseMap = Promise.map; + +Promise.prototype.filter = function (fn, options) { + return PromiseMap(this, fn, options, INTERNAL); +}; + +Promise.filter = function (promises, fn, options) { + return PromiseMap(promises, fn, options, INTERNAL); +}; +}; + +},{}],53:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, tryConvertToPromise) { +var util = require("./util"); +var CancellationError = Promise.CancellationError; +var errorObj = util.errorObj; + +function PassThroughHandlerContext(promise, type, handler) { + this.promise = promise; + this.type = type; + this.handler = handler; + this.called = false; + this.cancelPromise = null; +} + +PassThroughHandlerContext.prototype.isFinallyHandler = function() { + return this.type === 0; +}; + +function FinallyHandlerCancelReaction(finallyHandler) { + this.finallyHandler = finallyHandler; +} + +FinallyHandlerCancelReaction.prototype._resultCancelled = function() { + checkCancel(this.finallyHandler); +}; + +function checkCancel(ctx, reason) { + if (ctx.cancelPromise != null) { + if (arguments.length > 1) { + ctx.cancelPromise._reject(reason); + } else { + ctx.cancelPromise._cancel(); + } + ctx.cancelPromise = null; + return true; + } + return false; +} + +function succeed() { + return finallyHandler.call(this, this.promise._target()._settledValue()); +} +function fail(reason) { + if (checkCancel(this, reason)) return; + errorObj.e = reason; + return errorObj; +} +function finallyHandler(reasonOrValue) { + var promise = this.promise; + var handler = this.handler; + + if (!this.called) { + this.called = true; + var ret = this.isFinallyHandler() + ? handler.call(promise._boundValue()) + : handler.call(promise._boundValue(), reasonOrValue); + if (ret !== undefined) { + promise._setReturnedNonUndefined(); + var maybePromise = tryConvertToPromise(ret, promise); + if (maybePromise instanceof Promise) { + if (this.cancelPromise != null) { + if (maybePromise._isCancelled()) { + var reason = + new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + errorObj.e = reason; + return errorObj; + } else if (maybePromise.isPending()) { + maybePromise._attachCancellationCallback( + new FinallyHandlerCancelReaction(this)); + } + } + return maybePromise._then( + succeed, fail, undefined, this, undefined); + } + } + } + + if (promise.isRejected()) { + checkCancel(this); + errorObj.e = reasonOrValue; + return errorObj; + } else { + checkCancel(this); + return reasonOrValue; + } +} + +Promise.prototype._passThrough = function(handler, type, success, fail) { + if (typeof handler !== "function") return this.then(); + return this._then(success, + fail, + undefined, + new PassThroughHandlerContext(this, type, handler), + undefined); +}; + +Promise.prototype.lastly = +Promise.prototype["finally"] = function (handler) { + return this._passThrough(handler, + 0, + finallyHandler, + finallyHandler); +}; + +Promise.prototype.tap = function (handler) { + return this._passThrough(handler, 1, finallyHandler); +}; + +return PassThroughHandlerContext; +}; + +},{"./util":74}],54:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, + apiRejection, + INTERNAL, + tryConvertToPromise, + Proxyable, + debug) { +var errors = require("./errors"); +var TypeError = errors.TypeError; +var util = require("./util"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +var yieldHandlers = []; + +function promiseFromYieldHandler(value, yieldHandlers, traceParent) { + for (var i = 0; i < yieldHandlers.length; ++i) { + traceParent._pushContext(); + var result = tryCatch(yieldHandlers[i])(value); + traceParent._popContext(); + if (result === errorObj) { + traceParent._pushContext(); + var ret = Promise.reject(errorObj.e); + traceParent._popContext(); + return ret; + } + var maybePromise = tryConvertToPromise(result, traceParent); + if (maybePromise instanceof Promise) return maybePromise; + } + return null; +} + +function PromiseSpawn(generatorFunction, receiver, yieldHandler, stack) { + if (debug.cancellation()) { + var internal = new Promise(INTERNAL); + var _finallyPromise = this._finallyPromise = new Promise(INTERNAL); + this._promise = internal.lastly(function() { + return _finallyPromise; + }); + internal._captureStackTrace(); + internal._setOnCancel(this); + } else { + var promise = this._promise = new Promise(INTERNAL); + promise._captureStackTrace(); + } + this._stack = stack; + this._generatorFunction = generatorFunction; + this._receiver = receiver; + this._generator = undefined; + this._yieldHandlers = typeof yieldHandler === "function" + ? [yieldHandler].concat(yieldHandlers) + : yieldHandlers; + this._yieldedPromise = null; + this._cancellationPhase = false; +} +util.inherits(PromiseSpawn, Proxyable); + +PromiseSpawn.prototype._isResolved = function() { + return this._promise === null; +}; + +PromiseSpawn.prototype._cleanup = function() { + this._promise = this._generator = null; + if (debug.cancellation() && this._finallyPromise !== null) { + this._finallyPromise._fulfill(); + this._finallyPromise = null; + } +}; + +PromiseSpawn.prototype._promiseCancelled = function() { + if (this._isResolved()) return; + var implementsReturn = typeof this._generator["return"] !== "undefined"; + + var result; + if (!implementsReturn) { + var reason = new Promise.CancellationError( + "generator .return() sentinel"); + Promise.coroutine.returnSentinel = reason; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + result = tryCatch(this._generator["throw"]).call(this._generator, + reason); + this._promise._popContext(); + } else { + this._promise._pushContext(); + result = tryCatch(this._generator["return"]).call(this._generator, + undefined); + this._promise._popContext(); + } + this._cancellationPhase = true; + this._yieldedPromise = null; + this._continue(result); +}; + +PromiseSpawn.prototype._promiseFulfilled = function(value) { + this._yieldedPromise = null; + this._promise._pushContext(); + var result = tryCatch(this._generator.next).call(this._generator, value); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._promiseRejected = function(reason) { + this._yieldedPromise = null; + this._promise._attachExtraTrace(reason); + this._promise._pushContext(); + var result = tryCatch(this._generator["throw"]) + .call(this._generator, reason); + this._promise._popContext(); + this._continue(result); +}; + +PromiseSpawn.prototype._resultCancelled = function() { + if (this._yieldedPromise instanceof Promise) { + var promise = this._yieldedPromise; + this._yieldedPromise = null; + promise.cancel(); + } +}; + +PromiseSpawn.prototype.promise = function () { + return this._promise; +}; + +PromiseSpawn.prototype._run = function () { + this._generator = this._generatorFunction.call(this._receiver); + this._receiver = + this._generatorFunction = undefined; + this._promiseFulfilled(undefined); +}; + +PromiseSpawn.prototype._continue = function (result) { + var promise = this._promise; + if (result === errorObj) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._rejectCallback(result.e, false); + } + } + + var value = result.value; + if (result.done === true) { + this._cleanup(); + if (this._cancellationPhase) { + return promise.cancel(); + } else { + return promise._resolveCallback(value); + } + } else { + var maybePromise = tryConvertToPromise(value, this._promise); + if (!(maybePromise instanceof Promise)) { + maybePromise = + promiseFromYieldHandler(maybePromise, + this._yieldHandlers, + this._promise); + if (maybePromise === null) { + this._promiseRejected( + new TypeError( + "A value %s was yielded that could not be treated as a promise\u000a\u000a See http://goo.gl/MqrFmX\u000a\u000a".replace("%s", value) + + "From coroutine:\u000a" + + this._stack.split("\n").slice(1, -7).join("\n") + ) + ); + return; + } + } + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + this._yieldedPromise = maybePromise; + maybePromise._proxy(this, null); + } else if (((bitField & 33554432) !== 0)) { + Promise._async.invoke( + this._promiseFulfilled, this, maybePromise._value() + ); + } else if (((bitField & 16777216) !== 0)) { + Promise._async.invoke( + this._promiseRejected, this, maybePromise._reason() + ); + } else { + this._promiseCancelled(); + } + } +}; + +Promise.coroutine = function (generatorFunction, options) { + if (typeof generatorFunction !== "function") { + throw new TypeError("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var yieldHandler = Object(options).yieldHandler; + var PromiseSpawn$ = PromiseSpawn; + var stack = new Error().stack; + return function () { + var generator = generatorFunction.apply(this, arguments); + var spawn = new PromiseSpawn$(undefined, undefined, yieldHandler, + stack); + var ret = spawn.promise(); + spawn._generator = generator; + spawn._promiseFulfilled(undefined); + return ret; + }; +}; + +Promise.coroutine.addYieldHandler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + yieldHandlers.push(fn); +}; + +Promise.spawn = function (generatorFunction) { + debug.deprecated("Promise.spawn()", "Promise.coroutine()"); + if (typeof generatorFunction !== "function") { + return apiRejection("generatorFunction must be a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var spawn = new PromiseSpawn(generatorFunction, this); + var ret = spawn.promise(); + spawn._run(Promise.spawn); + return ret; +}; +}; + +},{"./errors":50,"./util":74}],55:[function(require,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, + getDomain) { +var util = require("./util"); +var canEvaluate = util.canEvaluate; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var reject; + +if (!false) { +if (canEvaluate) { + var thenCallback = function(i) { + return new Function("value", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = value; \n\ + holder.checkFulfillment(this); \n\ + ".replace(/Index/g, i)); + }; + + var promiseSetter = function(i) { + return new Function("promise", "holder", " \n\ + 'use strict'; \n\ + holder.pIndex = promise; \n\ + ".replace(/Index/g, i)); + }; + + var generateHolderClass = function(total) { + var props = new Array(total); + for (var i = 0; i < props.length; ++i) { + props[i] = "this.p" + (i+1); + } + var assignment = props.join(" = ") + " = null;"; + var cancellationCode= "var promise;\n" + props.map(function(prop) { + return " \n\ + promise = " + prop + "; \n\ + if (promise instanceof Promise) { \n\ + promise.cancel(); \n\ + } \n\ + "; + }).join("\n"); + var passedArguments = props.join(", "); + var name = "Holder$" + total; + + + var code = "return function(tryCatch, errorObj, Promise, async) { \n\ + 'use strict'; \n\ + function [TheName](fn) { \n\ + [TheProperties] \n\ + this.fn = fn; \n\ + this.asyncNeeded = true; \n\ + this.now = 0; \n\ + } \n\ + \n\ + [TheName].prototype._callFunction = function(promise) { \n\ + promise._pushContext(); \n\ + var ret = tryCatch(this.fn)([ThePassedArguments]); \n\ + promise._popContext(); \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(ret.e, false); \n\ + } else { \n\ + promise._resolveCallback(ret); \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype.checkFulfillment = function(promise) { \n\ + var now = ++this.now; \n\ + if (now === [TheTotal]) { \n\ + if (this.asyncNeeded) { \n\ + async.invoke(this._callFunction, this, promise); \n\ + } else { \n\ + this._callFunction(promise); \n\ + } \n\ + \n\ + } \n\ + }; \n\ + \n\ + [TheName].prototype._resultCancelled = function() { \n\ + [CancellationCode] \n\ + }; \n\ + \n\ + return [TheName]; \n\ + }(tryCatch, errorObj, Promise, async); \n\ + "; + + code = code.replace(/\[TheName\]/g, name) + .replace(/\[TheTotal\]/g, total) + .replace(/\[ThePassedArguments\]/g, passedArguments) + .replace(/\[TheProperties\]/g, assignment) + .replace(/\[CancellationCode\]/g, cancellationCode); + + return new Function("tryCatch", "errorObj", "Promise", "async", code) + (tryCatch, errorObj, Promise, async); + }; + + var holderClasses = []; + var thenCallbacks = []; + var promiseSetters = []; + + for (var i = 0; i < 8; ++i) { + holderClasses.push(generateHolderClass(i + 1)); + thenCallbacks.push(thenCallback(i + 1)); + promiseSetters.push(promiseSetter(i + 1)); + } + + reject = function (reason) { + this._reject(reason); + }; +}} + +Promise.join = function () { + var last = arguments.length - 1; + var fn; + if (last > 0 && typeof arguments[last] === "function") { + fn = arguments[last]; + if (!false) { + if (last <= 8 && canEvaluate) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var HolderClass = holderClasses[last - 1]; + var holder = new HolderClass(fn); + var callbacks = thenCallbacks; + + for (var i = 0; i < last; ++i) { + var maybePromise = tryConvertToPromise(arguments[i], ret); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + maybePromise._then(callbacks[i], reject, + undefined, ret, holder); + promiseSetters[i](maybePromise, holder); + holder.asyncNeeded = false; + } else if (((bitField & 33554432) !== 0)) { + callbacks[i].call(ret, + maybePromise._value(), holder); + } else if (((bitField & 16777216) !== 0)) { + ret._reject(maybePromise._reason()); + } else { + ret._cancel(); + } + } else { + callbacks[i].call(ret, maybePromise, holder); + } + } + + if (!ret._isFateSealed()) { + if (holder.asyncNeeded) { + var domain = getDomain(); + if (domain !== null) { + holder.fn = util.domainBind(domain, holder.fn); + } + } + ret._setAsyncGuaranteed(); + ret._setOnCancel(holder); + } + return ret; + } + } + } + var $_len = arguments.length;var args = new Array($_len); for(var $_i = 0; $_i < $_len; ++$_i) {args[$_i] = arguments[$_i];}; + if (fn) args.pop(); + var ret = new PromiseArray(args).promise(); + return fn !== undefined ? ret.spread(fn) : ret; +}; + +}; + +},{"./util":74}],56:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = require("./util"); +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; +var async = Promise._async; + +function MappingPromiseArray(promises, fn, limit, _filter) { + this.constructor$(promises); + this._promise._captureStackTrace(); + var domain = getDomain(); + this._callback = domain === null ? fn : util.domainBind(domain, fn); + this._preservedValues = _filter === INTERNAL + ? new Array(this.length()) + : null; + this._limit = limit; + this._inFlight = 0; + this._queue = []; + async.invoke(this._asyncInit, this, undefined); +} +util.inherits(MappingPromiseArray, PromiseArray); + +MappingPromiseArray.prototype._asyncInit = function() { + this._init$(undefined, -2); +}; + +MappingPromiseArray.prototype._init = function () {}; + +MappingPromiseArray.prototype._promiseFulfilled = function (value, index) { + var values = this._values; + var length = this.length(); + var preservedValues = this._preservedValues; + var limit = this._limit; + + if (index < 0) { + index = (index * -1) - 1; + values[index] = value; + if (limit >= 1) { + this._inFlight--; + this._drainQueue(); + if (this._isResolved()) return true; + } + } else { + if (limit >= 1 && this._inFlight >= limit) { + values[index] = value; + this._queue.push(index); + return false; + } + if (preservedValues !== null) preservedValues[index] = value; + + var promise = this._promise; + var callback = this._callback; + var receiver = promise._boundValue(); + promise._pushContext(); + var ret = tryCatch(callback).call(receiver, value, index, length); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + preservedValues !== null ? "Promise.filter" : "Promise.map", + promise + ); + if (ret === errorObj) { + this._reject(ret.e); + return true; + } + + var maybePromise = tryConvertToPromise(ret, this._promise); + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + var bitField = maybePromise._bitField; + ; + if (((bitField & 50397184) === 0)) { + if (limit >= 1) this._inFlight++; + values[index] = maybePromise; + maybePromise._proxy(this, (index + 1) * -1); + return false; + } else if (((bitField & 33554432) !== 0)) { + ret = maybePromise._value(); + } else if (((bitField & 16777216) !== 0)) { + this._reject(maybePromise._reason()); + return true; + } else { + this._cancel(); + return true; + } + } + values[index] = ret; + } + var totalResolved = ++this._totalResolved; + if (totalResolved >= length) { + if (preservedValues !== null) { + this._filter(values, preservedValues); + } else { + this._resolve(values); + } + return true; + } + return false; +}; + +MappingPromiseArray.prototype._drainQueue = function () { + var queue = this._queue; + var limit = this._limit; + var values = this._values; + while (queue.length > 0 && this._inFlight < limit) { + if (this._isResolved()) return; + var index = queue.pop(); + this._promiseFulfilled(values[index], index); + } +}; + +MappingPromiseArray.prototype._filter = function (booleans, values) { + var len = values.length; + var ret = new Array(len); + var j = 0; + for (var i = 0; i < len; ++i) { + if (booleans[i]) ret[j++] = values[i]; + } + ret.length = j; + this._resolve(ret); +}; + +MappingPromiseArray.prototype.preservedValues = function () { + return this._preservedValues; +}; + +function map(promises, fn, options, _filter) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + + var limit = 0; + if (options !== undefined) { + if (typeof options === "object" && options !== null) { + if (typeof options.concurrency !== "number") { + return Promise.reject( + new TypeError("'concurrency' must be a number but it is " + + util.classString(options.concurrency))); + } + limit = options.concurrency; + } else { + return Promise.reject(new TypeError( + "options argument must be an object but it is " + + util.classString(options))); + } + } + limit = typeof limit === "number" && + isFinite(limit) && limit >= 1 ? limit : 0; + return new MappingPromiseArray(promises, fn, limit, _filter).promise(); +} + +Promise.prototype.map = function (fn, options) { + return map(this, fn, options, null); +}; + +Promise.map = function (promises, fn, options, _filter) { + return map(promises, fn, options, _filter); +}; + + +}; + +},{"./util":74}],57:[function(require,module,exports){ +"use strict"; +module.exports = +function(Promise, INTERNAL, tryConvertToPromise, apiRejection, debug) { +var util = require("./util"); +var tryCatch = util.tryCatch; + +Promise.method = function (fn) { + if (typeof fn !== "function") { + throw new Promise.TypeError("expecting a function but got " + util.classString(fn)); + } + return function () { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value = tryCatch(fn).apply(this, arguments); + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.method", ret); + ret._resolveFromSyncValue(value); + return ret; + }; +}; + +Promise.attempt = Promise["try"] = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._pushContext(); + var value; + if (arguments.length > 1) { + debug.deprecated("calling Promise.try with more than 1 argument"); + var arg = arguments[1]; + var ctx = arguments[2]; + value = util.isArray(arg) ? tryCatch(fn).apply(ctx, arg) + : tryCatch(fn).call(ctx, arg); + } else { + value = tryCatch(fn)(); + } + var promiseCreated = ret._popContext(); + debug.checkForgottenReturns( + value, promiseCreated, "Promise.try", ret); + ret._resolveFromSyncValue(value); + return ret; +}; + +Promise.prototype._resolveFromSyncValue = function (value) { + if (value === util.errorObj) { + this._rejectCallback(value.e, false); + } else { + this._resolveCallback(value, true); + } +}; +}; + +},{"./util":74}],58:[function(require,module,exports){ +"use strict"; +var util = require("./util"); +var maybeWrapAsError = util.maybeWrapAsError; +var errors = require("./errors"); +var OperationalError = errors.OperationalError; +var es5 = require("./es5"); + +function isUntypedError(obj) { + return obj instanceof Error && + es5.getPrototypeOf(obj) === Error.prototype; +} + +var rErrorKey = /^(?:name|message|stack|cause)$/; +function wrapAsOperationalError(obj) { + var ret; + if (isUntypedError(obj)) { + ret = new OperationalError(obj); + ret.name = obj.name; + ret.message = obj.message; + ret.stack = obj.stack; + var keys = es5.keys(obj); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (!rErrorKey.test(key)) { + ret[key] = obj[key]; + } + } + return ret; + } + util.markAsOriginatingFromRejection(obj); + return obj; +} + +function nodebackForPromise(promise, multiArgs) { + return function(err, value) { + if (promise === null) return; + if (err) { + var wrapped = wrapAsOperationalError(maybeWrapAsError(err)); + promise._attachExtraTrace(wrapped); + promise._reject(wrapped); + } else if (!multiArgs) { + promise._fulfill(value); + } else { + var $_len = arguments.length;var args = new Array(Math.max($_len - 1, 0)); for(var $_i = 1; $_i < $_len; ++$_i) {args[$_i - 1] = arguments[$_i];}; + promise._fulfill(args); + } + promise = null; + }; +} + +module.exports = nodebackForPromise; + +},{"./errors":50,"./es5":51,"./util":74}],59:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise) { +var util = require("./util"); +var async = Promise._async; +var tryCatch = util.tryCatch; +var errorObj = util.errorObj; + +function spreadAdapter(val, nodeback) { + var promise = this; + if (!util.isArray(val)) return successAdapter.call(promise, val, nodeback); + var ret = + tryCatch(nodeback).apply(promise._boundValue(), [null].concat(val)); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +function successAdapter(val, nodeback) { + var promise = this; + var receiver = promise._boundValue(); + var ret = val === undefined + ? tryCatch(nodeback).call(receiver, null) + : tryCatch(nodeback).call(receiver, null, val); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} +function errorAdapter(reason, nodeback) { + var promise = this; + if (!reason) { + var newReason = new Error(reason + ""); + newReason.cause = reason; + reason = newReason; + } + var ret = tryCatch(nodeback).call(promise._boundValue(), reason); + if (ret === errorObj) { + async.throwLater(ret.e); + } +} + +Promise.prototype.asCallback = Promise.prototype.nodeify = function (nodeback, + options) { + if (typeof nodeback == "function") { + var adapter = successAdapter; + if (options !== undefined && Object(options).spread) { + adapter = spreadAdapter; + } + this._then( + adapter, + errorAdapter, + undefined, + this, + nodeback + ); + } + return this; +}; +}; + +},{"./util":74}],60:[function(require,module,exports){ +(function (process){ +"use strict"; +module.exports = function() { +var makeSelfResolutionError = function () { + return new TypeError("circular promise resolution chain\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var reflectHandler = function() { + return new Promise.PromiseInspection(this._target()); +}; +var apiRejection = function(msg) { + return Promise.reject(new TypeError(msg)); +}; +function Proxyable() {} +var UNDEFINED_BINDING = {}; +var util = require("./util"); + +var getDomain; +if (util.isNode) { + getDomain = function() { + var ret = process.domain; + if (ret === undefined) ret = null; + return ret; + }; +} else { + getDomain = function() { + return null; + }; +} +util.notEnumerableProp(Promise, "_getDomain", getDomain); + +var es5 = require("./es5"); +var Async = require("./async"); +var async = new Async(); +es5.defineProperty(Promise, "_async", {value: async}); +var errors = require("./errors"); +var TypeError = Promise.TypeError = errors.TypeError; +Promise.RangeError = errors.RangeError; +var CancellationError = Promise.CancellationError = errors.CancellationError; +Promise.TimeoutError = errors.TimeoutError; +Promise.OperationalError = errors.OperationalError; +Promise.RejectionError = errors.OperationalError; +Promise.AggregateError = errors.AggregateError; +var INTERNAL = function(){}; +var APPLY = {}; +var NEXT_FILTER = {}; +var tryConvertToPromise = require("./thenables")(Promise, INTERNAL); +var PromiseArray = + require("./promise_array")(Promise, INTERNAL, + tryConvertToPromise, apiRejection, Proxyable); +var Context = require("./context")(Promise); + /*jshint unused:false*/ +var createContext = Context.create; +var debug = require("./debuggability")(Promise, Context); +var CapturedTrace = debug.CapturedTrace; +var PassThroughHandlerContext = + require("./finally")(Promise, tryConvertToPromise); +var catchFilter = require("./catch_filter")(NEXT_FILTER); +var nodebackForPromise = require("./nodeback"); +var errorObj = util.errorObj; +var tryCatch = util.tryCatch; +function check(self, executor) { + if (typeof executor !== "function") { + throw new TypeError("expecting a function but got " + util.classString(executor)); + } + if (self.constructor !== Promise) { + throw new TypeError("the promise constructor cannot be invoked directly\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } +} + +function Promise(executor) { + this._bitField = 0; + this._fulfillmentHandler0 = undefined; + this._rejectionHandler0 = undefined; + this._promise0 = undefined; + this._receiver0 = undefined; + if (executor !== INTERNAL) { + check(this, executor); + this._resolveFromExecutor(executor); + } + this._promiseCreated(); + this._fireEvent("promiseCreated", this); +} + +Promise.prototype.toString = function () { + return "[object Promise]"; +}; + +Promise.prototype.caught = Promise.prototype["catch"] = function (fn) { + var len = arguments.length; + if (len > 1) { + var catchInstances = new Array(len - 1), + j = 0, i; + for (i = 0; i < len - 1; ++i) { + var item = arguments[i]; + if (util.isObject(item)) { + catchInstances[j++] = item; + } else { + return apiRejection("expecting an object but got " + + "A catch statement predicate " + util.classString(item)); + } + } + catchInstances.length = j; + fn = arguments[i]; + return this.then(undefined, catchFilter(catchInstances, fn, this)); + } + return this.then(undefined, fn); +}; + +Promise.prototype.reflect = function () { + return this._then(reflectHandler, + reflectHandler, undefined, this, undefined); +}; + +Promise.prototype.then = function (didFulfill, didReject) { + if (debug.warnings() && arguments.length > 0 && + typeof didFulfill !== "function" && + typeof didReject !== "function") { + var msg = ".then() only accepts functions but was passed: " + + util.classString(didFulfill); + if (arguments.length > 1) { + msg += ", " + util.classString(didReject); + } + this._warn(msg); + } + return this._then(didFulfill, didReject, undefined, undefined, undefined); +}; + +Promise.prototype.done = function (didFulfill, didReject) { + var promise = + this._then(didFulfill, didReject, undefined, undefined, undefined); + promise._setIsFinal(); +}; + +Promise.prototype.spread = function (fn) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + return this.all()._then(fn, undefined, undefined, APPLY, undefined); +}; + +Promise.prototype.toJSON = function () { + var ret = { + isFulfilled: false, + isRejected: false, + fulfillmentValue: undefined, + rejectionReason: undefined + }; + if (this.isFulfilled()) { + ret.fulfillmentValue = this.value(); + ret.isFulfilled = true; + } else if (this.isRejected()) { + ret.rejectionReason = this.reason(); + ret.isRejected = true; + } + return ret; +}; + +Promise.prototype.all = function () { + if (arguments.length > 0) { + this._warn(".all() was passed arguments but it does not take any"); + } + return new PromiseArray(this).promise(); +}; + +Promise.prototype.error = function (fn) { + return this.caught(util.originatesFromRejection, fn); +}; + +Promise.getNewLibraryCopy = module.exports; + +Promise.is = function (val) { + return val instanceof Promise; +}; + +Promise.fromNode = Promise.fromCallback = function(fn) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + var multiArgs = arguments.length > 1 ? !!Object(arguments[1]).multiArgs + : false; + var result = tryCatch(fn)(nodebackForPromise(ret, multiArgs)); + if (result === errorObj) { + ret._rejectCallback(result.e, true); + } + if (!ret._isFateSealed()) ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.all = function (promises) { + return new PromiseArray(promises).promise(); +}; + +Promise.cast = function (obj) { + var ret = tryConvertToPromise(obj); + if (!(ret instanceof Promise)) { + ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._setFulfilled(); + ret._rejectionHandler0 = obj; + } + return ret; +}; + +Promise.resolve = Promise.fulfilled = Promise.cast; + +Promise.reject = Promise.rejected = function (reason) { + var ret = new Promise(INTERNAL); + ret._captureStackTrace(); + ret._rejectCallback(reason, true); + return ret; +}; + +Promise.setScheduler = function(fn) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + return async.setScheduler(fn); +}; + +Promise.prototype._then = function ( + didFulfill, + didReject, + _, receiver, + internalData +) { + var haveInternalData = internalData !== undefined; + var promise = haveInternalData ? internalData : new Promise(INTERNAL); + var target = this._target(); + var bitField = target._bitField; + + if (!haveInternalData) { + promise._propagateFrom(this, 3); + promise._captureStackTrace(); + if (receiver === undefined && + ((this._bitField & 2097152) !== 0)) { + if (!((bitField & 50397184) === 0)) { + receiver = this._boundValue(); + } else { + receiver = target === this ? undefined : this._boundTo; + } + } + this._fireEvent("promiseChained", this, promise); + } + + var domain = getDomain(); + if (!((bitField & 50397184) === 0)) { + var handler, value, settler = target._settlePromiseCtx; + if (((bitField & 33554432) !== 0)) { + value = target._rejectionHandler0; + handler = didFulfill; + } else if (((bitField & 16777216) !== 0)) { + value = target._fulfillmentHandler0; + handler = didReject; + target._unsetRejectionIsUnhandled(); + } else { + settler = target._settlePromiseLateCancellationObserver; + value = new CancellationError("late cancellation observer"); + target._attachExtraTrace(value); + handler = didReject; + } + + async.invoke(settler, target, { + handler: domain === null ? handler + : (typeof handler === "function" && + util.domainBind(domain, handler)), + promise: promise, + receiver: receiver, + value: value + }); + } else { + target._addCallbacks(didFulfill, didReject, promise, receiver, domain); + } + + return promise; +}; + +Promise.prototype._length = function () { + return this._bitField & 65535; +}; + +Promise.prototype._isFateSealed = function () { + return (this._bitField & 117506048) !== 0; +}; + +Promise.prototype._isFollowing = function () { + return (this._bitField & 67108864) === 67108864; +}; + +Promise.prototype._setLength = function (len) { + this._bitField = (this._bitField & -65536) | + (len & 65535); +}; + +Promise.prototype._setFulfilled = function () { + this._bitField = this._bitField | 33554432; + this._fireEvent("promiseFulfilled", this); +}; + +Promise.prototype._setRejected = function () { + this._bitField = this._bitField | 16777216; + this._fireEvent("promiseRejected", this); +}; + +Promise.prototype._setFollowing = function () { + this._bitField = this._bitField | 67108864; + this._fireEvent("promiseResolved", this); +}; + +Promise.prototype._setIsFinal = function () { + this._bitField = this._bitField | 4194304; +}; + +Promise.prototype._isFinal = function () { + return (this._bitField & 4194304) > 0; +}; + +Promise.prototype._unsetCancelled = function() { + this._bitField = this._bitField & (~65536); +}; + +Promise.prototype._setCancelled = function() { + this._bitField = this._bitField | 65536; + this._fireEvent("promiseCancelled", this); +}; + +Promise.prototype._setWillBeCancelled = function() { + this._bitField = this._bitField | 8388608; +}; + +Promise.prototype._setAsyncGuaranteed = function() { + if (async.hasCustomScheduler()) return; + this._bitField = this._bitField | 134217728; +}; + +Promise.prototype._receiverAt = function (index) { + var ret = index === 0 ? this._receiver0 : this[ + index * 4 - 4 + 3]; + if (ret === UNDEFINED_BINDING) { + return undefined; + } else if (ret === undefined && this._isBound()) { + return this._boundValue(); + } + return ret; +}; + +Promise.prototype._promiseAt = function (index) { + return this[ + index * 4 - 4 + 2]; +}; + +Promise.prototype._fulfillmentHandlerAt = function (index) { + return this[ + index * 4 - 4 + 0]; +}; + +Promise.prototype._rejectionHandlerAt = function (index) { + return this[ + index * 4 - 4 + 1]; +}; + +Promise.prototype._boundValue = function() {}; + +Promise.prototype._migrateCallback0 = function (follower) { + var bitField = follower._bitField; + var fulfill = follower._fulfillmentHandler0; + var reject = follower._rejectionHandler0; + var promise = follower._promise0; + var receiver = follower._receiverAt(0); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._migrateCallbackAt = function (follower, index) { + var fulfill = follower._fulfillmentHandlerAt(index); + var reject = follower._rejectionHandlerAt(index); + var promise = follower._promiseAt(index); + var receiver = follower._receiverAt(index); + if (receiver === undefined) receiver = UNDEFINED_BINDING; + this._addCallbacks(fulfill, reject, promise, receiver, null); +}; + +Promise.prototype._addCallbacks = function ( + fulfill, + reject, + promise, + receiver, + domain +) { + var index = this._length(); + + if (index >= 65535 - 4) { + index = 0; + this._setLength(0); + } + + if (index === 0) { + this._promise0 = promise; + this._receiver0 = receiver; + if (typeof fulfill === "function") { + this._fulfillmentHandler0 = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this._rejectionHandler0 = + domain === null ? reject : util.domainBind(domain, reject); + } + } else { + var base = index * 4 - 4; + this[base + 2] = promise; + this[base + 3] = receiver; + if (typeof fulfill === "function") { + this[base + 0] = + domain === null ? fulfill : util.domainBind(domain, fulfill); + } + if (typeof reject === "function") { + this[base + 1] = + domain === null ? reject : util.domainBind(domain, reject); + } + } + this._setLength(index + 1); + return index; +}; + +Promise.prototype._proxy = function (proxyable, arg) { + this._addCallbacks(undefined, undefined, arg, proxyable, null); +}; + +Promise.prototype._resolveCallback = function(value, shouldBind) { + if (((this._bitField & 117506048) !== 0)) return; + if (value === this) + return this._rejectCallback(makeSelfResolutionError(), false); + var maybePromise = tryConvertToPromise(value, this); + if (!(maybePromise instanceof Promise)) return this._fulfill(value); + + if (shouldBind) this._propagateFrom(maybePromise, 2); + + var promise = maybePromise._target(); + + if (promise === this) { + this._reject(makeSelfResolutionError()); + return; + } + + var bitField = promise._bitField; + if (((bitField & 50397184) === 0)) { + var len = this._length(); + if (len > 0) promise._migrateCallback0(this); + for (var i = 1; i < len; ++i) { + promise._migrateCallbackAt(this, i); + } + this._setFollowing(); + this._setLength(0); + this._setFollowee(promise); + } else if (((bitField & 33554432) !== 0)) { + this._fulfill(promise._value()); + } else if (((bitField & 16777216) !== 0)) { + this._reject(promise._reason()); + } else { + var reason = new CancellationError("late cancellation observer"); + promise._attachExtraTrace(reason); + this._reject(reason); + } +}; + +Promise.prototype._rejectCallback = +function(reason, synchronous, ignoreNonErrorWarnings) { + var trace = util.ensureErrorObject(reason); + var hasStack = trace === reason; + if (!hasStack && !ignoreNonErrorWarnings && debug.warnings()) { + var message = "a promise was rejected with a non-error: " + + util.classString(reason); + this._warn(message, true); + } + this._attachExtraTrace(trace, synchronous ? hasStack : false); + this._reject(reason); +}; + +Promise.prototype._resolveFromExecutor = function (executor) { + var promise = this; + this._captureStackTrace(); + this._pushContext(); + var synchronous = true; + var r = this._execute(executor, function(value) { + promise._resolveCallback(value); + }, function (reason) { + promise._rejectCallback(reason, synchronous); + }); + synchronous = false; + this._popContext(); + + if (r !== undefined) { + promise._rejectCallback(r, true); + } +}; + +Promise.prototype._settlePromiseFromHandler = function ( + handler, receiver, value, promise +) { + var bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + promise._pushContext(); + var x; + if (receiver === APPLY) { + if (!value || typeof value.length !== "number") { + x = errorObj; + x.e = new TypeError("cannot .spread() a non-array: " + + util.classString(value)); + } else { + x = tryCatch(handler).apply(this._boundValue(), value); + } + } else { + x = tryCatch(handler).call(receiver, value); + } + var promiseCreated = promise._popContext(); + bitField = promise._bitField; + if (((bitField & 65536) !== 0)) return; + + if (x === NEXT_FILTER) { + promise._reject(value); + } else if (x === errorObj) { + promise._rejectCallback(x.e, false); + } else { + debug.checkForgottenReturns(x, promiseCreated, "", promise, this); + promise._resolveCallback(x); + } +}; + +Promise.prototype._target = function() { + var ret = this; + while (ret._isFollowing()) ret = ret._followee(); + return ret; +}; + +Promise.prototype._followee = function() { + return this._rejectionHandler0; +}; + +Promise.prototype._setFollowee = function(promise) { + this._rejectionHandler0 = promise; +}; + +Promise.prototype._settlePromise = function(promise, handler, receiver, value) { + var isPromise = promise instanceof Promise; + var bitField = this._bitField; + var asyncGuaranteed = ((bitField & 134217728) !== 0); + if (((bitField & 65536) !== 0)) { + if (isPromise) promise._invokeInternalOnCancel(); + + if (receiver instanceof PassThroughHandlerContext && + receiver.isFinallyHandler()) { + receiver.cancelPromise = promise; + if (tryCatch(handler).call(receiver, value) === errorObj) { + promise._reject(errorObj.e); + } + } else if (handler === reflectHandler) { + promise._fulfill(reflectHandler.call(receiver)); + } else if (receiver instanceof Proxyable) { + receiver._promiseCancelled(promise); + } else if (isPromise || promise instanceof PromiseArray) { + promise._cancel(); + } else { + receiver.cancel(); + } + } else if (typeof handler === "function") { + if (!isPromise) { + handler.call(receiver, value, promise); + } else { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (receiver instanceof Proxyable) { + if (!receiver._isResolved()) { + if (((bitField & 33554432) !== 0)) { + receiver._promiseFulfilled(value, promise); + } else { + receiver._promiseRejected(value, promise); + } + } + } else if (isPromise) { + if (asyncGuaranteed) promise._setAsyncGuaranteed(); + if (((bitField & 33554432) !== 0)) { + promise._fulfill(value); + } else { + promise._reject(value); + } + } +}; + +Promise.prototype._settlePromiseLateCancellationObserver = function(ctx) { + var handler = ctx.handler; + var promise = ctx.promise; + var receiver = ctx.receiver; + var value = ctx.value; + if (typeof handler === "function") { + if (!(promise instanceof Promise)) { + handler.call(receiver, value, promise); + } else { + this._settlePromiseFromHandler(handler, receiver, value, promise); + } + } else if (promise instanceof Promise) { + promise._reject(value); + } +}; + +Promise.prototype._settlePromiseCtx = function(ctx) { + this._settlePromise(ctx.promise, ctx.handler, ctx.receiver, ctx.value); +}; + +Promise.prototype._settlePromise0 = function(handler, value, bitField) { + var promise = this._promise0; + var receiver = this._receiverAt(0); + this._promise0 = undefined; + this._receiver0 = undefined; + this._settlePromise(promise, handler, receiver, value); +}; + +Promise.prototype._clearCallbackDataAtIndex = function(index) { + var base = index * 4 - 4; + this[base + 2] = + this[base + 3] = + this[base + 0] = + this[base + 1] = undefined; +}; + +Promise.prototype._fulfill = function (value) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + if (value === this) { + var err = makeSelfResolutionError(); + this._attachExtraTrace(err); + return this._reject(err); + } + this._setFulfilled(); + this._rejectionHandler0 = value; + + if ((bitField & 65535) > 0) { + if (((bitField & 134217728) !== 0)) { + this._settlePromises(); + } else { + async.settlePromises(this); + } + } +}; + +Promise.prototype._reject = function (reason) { + var bitField = this._bitField; + if (((bitField & 117506048) >>> 16)) return; + this._setRejected(); + this._fulfillmentHandler0 = reason; + + if (this._isFinal()) { + return async.fatalError(reason, util.isNode); + } + + if ((bitField & 65535) > 0) { + async.settlePromises(this); + } else { + this._ensurePossibleRejectionHandled(); + } +}; + +Promise.prototype._fulfillPromises = function (len, value) { + for (var i = 1; i < len; i++) { + var handler = this._fulfillmentHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, value); + } +}; + +Promise.prototype._rejectPromises = function (len, reason) { + for (var i = 1; i < len; i++) { + var handler = this._rejectionHandlerAt(i); + var promise = this._promiseAt(i); + var receiver = this._receiverAt(i); + this._clearCallbackDataAtIndex(i); + this._settlePromise(promise, handler, receiver, reason); + } +}; + +Promise.prototype._settlePromises = function () { + var bitField = this._bitField; + var len = (bitField & 65535); + + if (len > 0) { + if (((bitField & 16842752) !== 0)) { + var reason = this._fulfillmentHandler0; + this._settlePromise0(this._rejectionHandler0, reason, bitField); + this._rejectPromises(len, reason); + } else { + var value = this._rejectionHandler0; + this._settlePromise0(this._fulfillmentHandler0, value, bitField); + this._fulfillPromises(len, value); + } + this._setLength(0); + } + this._clearCancellationData(); +}; + +Promise.prototype._settledValue = function() { + var bitField = this._bitField; + if (((bitField & 33554432) !== 0)) { + return this._rejectionHandler0; + } else if (((bitField & 16777216) !== 0)) { + return this._fulfillmentHandler0; + } +}; + +function deferResolve(v) {this.promise._resolveCallback(v);} +function deferReject(v) {this.promise._rejectCallback(v, false);} + +Promise.defer = Promise.pending = function() { + debug.deprecated("Promise.defer", "new Promise"); + var promise = new Promise(INTERNAL); + return { + promise: promise, + resolve: deferResolve, + reject: deferReject + }; +}; + +util.notEnumerableProp(Promise, + "_makeSelfResolutionError", + makeSelfResolutionError); + +require("./method")(Promise, INTERNAL, tryConvertToPromise, apiRejection, + debug); +require("./bind")(Promise, INTERNAL, tryConvertToPromise, debug); +require("./cancel")(Promise, PromiseArray, apiRejection, debug); +require("./direct_resolve")(Promise); +require("./synchronous_inspection")(Promise); +require("./join")( + Promise, PromiseArray, tryConvertToPromise, INTERNAL, async, getDomain); +Promise.Promise = Promise; +Promise.version = "3.4.7"; +require('./map.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +require('./call_get.js')(Promise); +require('./using.js')(Promise, apiRejection, tryConvertToPromise, createContext, INTERNAL, debug); +require('./timers.js')(Promise, INTERNAL, debug); +require('./generators.js')(Promise, apiRejection, INTERNAL, tryConvertToPromise, Proxyable, debug); +require('./nodeify.js')(Promise); +require('./promisify.js')(Promise, INTERNAL); +require('./props.js')(Promise, PromiseArray, tryConvertToPromise, apiRejection); +require('./race.js')(Promise, INTERNAL, tryConvertToPromise, apiRejection); +require('./reduce.js')(Promise, PromiseArray, apiRejection, tryConvertToPromise, INTERNAL, debug); +require('./settle.js')(Promise, PromiseArray, debug); +require('./some.js')(Promise, PromiseArray, apiRejection); +require('./filter.js')(Promise, INTERNAL); +require('./each.js')(Promise, INTERNAL); +require('./any.js')(Promise); + + util.toFastProperties(Promise); + util.toFastProperties(Promise.prototype); + function fillTypes(value) { + var p = new Promise(INTERNAL); + p._fulfillmentHandler0 = value; + p._rejectionHandler0 = value; + p._promise0 = value; + p._receiver0 = value; + } + // Complete slack tracking, opt out of field-type tracking and + // stabilize map + fillTypes({a: 1}); + fillTypes({b: 2}); + fillTypes({c: 3}); + fillTypes(1); + fillTypes(function(){}); + fillTypes(undefined); + fillTypes(false); + fillTypes(new Promise(INTERNAL)); + debug.setBounds(Async.firstLineError, util.lastLineError); + return Promise; + +}; + +}).call(this,require('_process')) +},{"./any.js":40,"./async":41,"./bind":42,"./call_get.js":43,"./cancel":44,"./catch_filter":45,"./context":46,"./debuggability":47,"./direct_resolve":48,"./each.js":49,"./errors":50,"./es5":51,"./filter.js":52,"./finally":53,"./generators.js":54,"./join":55,"./map.js":56,"./method":57,"./nodeback":58,"./nodeify.js":59,"./promise_array":61,"./promisify.js":62,"./props.js":63,"./race.js":65,"./reduce.js":66,"./settle.js":68,"./some.js":69,"./synchronous_inspection":70,"./thenables":71,"./timers.js":72,"./using.js":73,"./util":74,"_process":138}],61:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, tryConvertToPromise, + apiRejection, Proxyable) { +var util = require("./util"); +var isArray = util.isArray; + +function toResolutionValue(val) { + switch(val) { + case -2: return []; + case -3: return {}; + } +} + +function PromiseArray(values) { + var promise = this._promise = new Promise(INTERNAL); + if (values instanceof Promise) { + promise._propagateFrom(values, 3); + } + promise._setOnCancel(this); + this._values = values; + this._length = 0; + this._totalResolved = 0; + this._init(undefined, -2); +} +util.inherits(PromiseArray, Proxyable); + +PromiseArray.prototype.length = function () { + return this._length; +}; + +PromiseArray.prototype.promise = function () { + return this._promise; +}; + +PromiseArray.prototype._init = function init(_, resolveValueIfEmpty) { + var values = tryConvertToPromise(this._values, this._promise); + if (values instanceof Promise) { + values = values._target(); + var bitField = values._bitField; + ; + this._values = values; + + if (((bitField & 50397184) === 0)) { + this._promise._setAsyncGuaranteed(); + return values._then( + init, + this._reject, + undefined, + this, + resolveValueIfEmpty + ); + } else if (((bitField & 33554432) !== 0)) { + values = values._value(); + } else if (((bitField & 16777216) !== 0)) { + return this._reject(values._reason()); + } else { + return this._cancel(); + } + } + values = util.asArray(values); + if (values === null) { + var err = apiRejection( + "expecting an array or an iterable object but got " + util.classString(values)).reason(); + this._promise._rejectCallback(err, false); + return; + } + + if (values.length === 0) { + if (resolveValueIfEmpty === -5) { + this._resolveEmptyArray(); + } + else { + this._resolve(toResolutionValue(resolveValueIfEmpty)); + } + return; + } + this._iterate(values); +}; + +PromiseArray.prototype._iterate = function(values) { + var len = this.getActualLength(values.length); + this._length = len; + this._values = this.shouldCopyValues() ? new Array(len) : this._values; + var result = this._promise; + var isResolved = false; + var bitField = null; + for (var i = 0; i < len; ++i) { + var maybePromise = tryConvertToPromise(values[i], result); + + if (maybePromise instanceof Promise) { + maybePromise = maybePromise._target(); + bitField = maybePromise._bitField; + } else { + bitField = null; + } + + if (isResolved) { + if (bitField !== null) { + maybePromise.suppressUnhandledRejections(); + } + } else if (bitField !== null) { + if (((bitField & 50397184) === 0)) { + maybePromise._proxy(this, i); + this._values[i] = maybePromise; + } else if (((bitField & 33554432) !== 0)) { + isResolved = this._promiseFulfilled(maybePromise._value(), i); + } else if (((bitField & 16777216) !== 0)) { + isResolved = this._promiseRejected(maybePromise._reason(), i); + } else { + isResolved = this._promiseCancelled(i); + } + } else { + isResolved = this._promiseFulfilled(maybePromise, i); + } + } + if (!isResolved) result._setAsyncGuaranteed(); +}; + +PromiseArray.prototype._isResolved = function () { + return this._values === null; +}; + +PromiseArray.prototype._resolve = function (value) { + this._values = null; + this._promise._fulfill(value); +}; + +PromiseArray.prototype._cancel = function() { + if (this._isResolved() || !this._promise._isCancellable()) return; + this._values = null; + this._promise._cancel(); +}; + +PromiseArray.prototype._reject = function (reason) { + this._values = null; + this._promise._rejectCallback(reason, false); +}; + +PromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +PromiseArray.prototype._promiseCancelled = function() { + this._cancel(); + return true; +}; + +PromiseArray.prototype._promiseRejected = function (reason) { + this._totalResolved++; + this._reject(reason); + return true; +}; + +PromiseArray.prototype._resultCancelled = function() { + if (this._isResolved()) return; + var values = this._values; + this._cancel(); + if (values instanceof Promise) { + values.cancel(); + } else { + for (var i = 0; i < values.length; ++i) { + if (values[i] instanceof Promise) { + values[i].cancel(); + } + } + } +}; + +PromiseArray.prototype.shouldCopyValues = function () { + return true; +}; + +PromiseArray.prototype.getActualLength = function (len) { + return len; +}; + +return PromiseArray; +}; + +},{"./util":74}],62:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var THIS = {}; +var util = require("./util"); +var nodebackForPromise = require("./nodeback"); +var withAppended = util.withAppended; +var maybeWrapAsError = util.maybeWrapAsError; +var canEvaluate = util.canEvaluate; +var TypeError = require("./errors").TypeError; +var defaultSuffix = "Async"; +var defaultPromisified = {__isPromisified__: true}; +var noCopyProps = [ + "arity", "length", + "name", + "arguments", + "caller", + "callee", + "prototype", + "__isPromisified__" +]; +var noCopyPropsPattern = new RegExp("^(?:" + noCopyProps.join("|") + ")$"); + +var defaultFilter = function(name) { + return util.isIdentifier(name) && + name.charAt(0) !== "_" && + name !== "constructor"; +}; + +function propsFilter(key) { + return !noCopyPropsPattern.test(key); +} + +function isPromisified(fn) { + try { + return fn.__isPromisified__ === true; + } + catch (e) { + return false; + } +} + +function hasPromisified(obj, key, suffix) { + var val = util.getDataPropertyOrDefault(obj, key + suffix, + defaultPromisified); + return val ? isPromisified(val) : false; +} +function checkValid(ret, suffix, suffixRegexp) { + for (var i = 0; i < ret.length; i += 2) { + var key = ret[i]; + if (suffixRegexp.test(key)) { + var keyWithoutAsyncSuffix = key.replace(suffixRegexp, ""); + for (var j = 0; j < ret.length; j += 2) { + if (ret[j] === keyWithoutAsyncSuffix) { + throw new TypeError("Cannot promisify an API that has normal methods with '%s'-suffix\u000a\u000a See http://goo.gl/MqrFmX\u000a" + .replace("%s", suffix)); + } + } + } + } +} + +function promisifiableMethods(obj, suffix, suffixRegexp, filter) { + var keys = util.inheritedDataKeys(obj); + var ret = []; + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + var value = obj[key]; + var passesDefaultFilter = filter === defaultFilter + ? true : defaultFilter(key, value, obj); + if (typeof value === "function" && + !isPromisified(value) && + !hasPromisified(obj, key, suffix) && + filter(key, value, obj, passesDefaultFilter)) { + ret.push(key, value); + } + } + checkValid(ret, suffix, suffixRegexp); + return ret; +} + +var escapeIdentRegex = function(str) { + return str.replace(/([$])/, "\\$"); +}; + +var makeNodePromisifiedEval; +if (!false) { +var switchCaseArgumentOrder = function(likelyArgumentCount) { + var ret = [likelyArgumentCount]; + var min = Math.max(0, likelyArgumentCount - 1 - 3); + for(var i = likelyArgumentCount - 1; i >= min; --i) { + ret.push(i); + } + for(var i = likelyArgumentCount + 1; i <= 3; ++i) { + ret.push(i); + } + return ret; +}; + +var argumentSequence = function(argumentCount) { + return util.filledRange(argumentCount, "_arg", ""); +}; + +var parameterDeclaration = function(parameterCount) { + return util.filledRange( + Math.max(parameterCount, 3), "_arg", ""); +}; + +var parameterCount = function(fn) { + if (typeof fn.length === "number") { + return Math.max(Math.min(fn.length, 1023 + 1), 0); + } + return 0; +}; + +makeNodePromisifiedEval = +function(callback, receiver, originalName, fn, _, multiArgs) { + var newParameterCount = Math.max(0, parameterCount(fn) - 1); + var argumentOrder = switchCaseArgumentOrder(newParameterCount); + var shouldProxyThis = typeof callback === "string" || receiver === THIS; + + function generateCallForArgumentCount(count) { + var args = argumentSequence(count).join(", "); + var comma = count > 0 ? ", " : ""; + var ret; + if (shouldProxyThis) { + ret = "ret = callback.call(this, {{args}}, nodeback); break;\n"; + } else { + ret = receiver === undefined + ? "ret = callback({{args}}, nodeback); break;\n" + : "ret = callback.call(receiver, {{args}}, nodeback); break;\n"; + } + return ret.replace("{{args}}", args).replace(", ", comma); + } + + function generateArgumentSwitchCase() { + var ret = ""; + for (var i = 0; i < argumentOrder.length; ++i) { + ret += "case " + argumentOrder[i] +":" + + generateCallForArgumentCount(argumentOrder[i]); + } + + ret += " \n\ + default: \n\ + var args = new Array(len + 1); \n\ + var i = 0; \n\ + for (var i = 0; i < len; ++i) { \n\ + args[i] = arguments[i]; \n\ + } \n\ + args[i] = nodeback; \n\ + [CodeForCall] \n\ + break; \n\ + ".replace("[CodeForCall]", (shouldProxyThis + ? "ret = callback.apply(this, args);\n" + : "ret = callback.apply(receiver, args);\n")); + return ret; + } + + var getFunctionCode = typeof callback === "string" + ? ("this != null ? this['"+callback+"'] : fn") + : "fn"; + var body = "'use strict'; \n\ + var ret = function (Parameters) { \n\ + 'use strict'; \n\ + var len = arguments.length; \n\ + var promise = new Promise(INTERNAL); \n\ + promise._captureStackTrace(); \n\ + var nodeback = nodebackForPromise(promise, " + multiArgs + "); \n\ + var ret; \n\ + var callback = tryCatch([GetFunctionCode]); \n\ + switch(len) { \n\ + [CodeForSwitchCase] \n\ + } \n\ + if (ret === errorObj) { \n\ + promise._rejectCallback(maybeWrapAsError(ret.e), true, true);\n\ + } \n\ + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); \n\ + return promise; \n\ + }; \n\ + notEnumerableProp(ret, '__isPromisified__', true); \n\ + return ret; \n\ + ".replace("[CodeForSwitchCase]", generateArgumentSwitchCase()) + .replace("[GetFunctionCode]", getFunctionCode); + body = body.replace("Parameters", parameterDeclaration(newParameterCount)); + return new Function("Promise", + "fn", + "receiver", + "withAppended", + "maybeWrapAsError", + "nodebackForPromise", + "tryCatch", + "errorObj", + "notEnumerableProp", + "INTERNAL", + body)( + Promise, + fn, + receiver, + withAppended, + maybeWrapAsError, + nodebackForPromise, + util.tryCatch, + util.errorObj, + util.notEnumerableProp, + INTERNAL); +}; +} + +function makeNodePromisifiedClosure(callback, receiver, _, fn, __, multiArgs) { + var defaultThis = (function() {return this;})(); + var method = callback; + if (typeof method === "string") { + callback = fn; + } + function promisified() { + var _receiver = receiver; + if (receiver === THIS) _receiver = this; + var promise = new Promise(INTERNAL); + promise._captureStackTrace(); + var cb = typeof method === "string" && this !== defaultThis + ? this[method] : callback; + var fn = nodebackForPromise(promise, multiArgs); + try { + cb.apply(_receiver, withAppended(arguments, fn)); + } catch(e) { + promise._rejectCallback(maybeWrapAsError(e), true, true); + } + if (!promise._isFateSealed()) promise._setAsyncGuaranteed(); + return promise; + } + util.notEnumerableProp(promisified, "__isPromisified__", true); + return promisified; +} + +var makeNodePromisified = canEvaluate + ? makeNodePromisifiedEval + : makeNodePromisifiedClosure; + +function promisifyAll(obj, suffix, filter, promisifier, multiArgs) { + var suffixRegexp = new RegExp(escapeIdentRegex(suffix) + "$"); + var methods = + promisifiableMethods(obj, suffix, suffixRegexp, filter); + + for (var i = 0, len = methods.length; i < len; i+= 2) { + var key = methods[i]; + var fn = methods[i+1]; + var promisifiedKey = key + suffix; + if (promisifier === makeNodePromisified) { + obj[promisifiedKey] = + makeNodePromisified(key, THIS, key, fn, suffix, multiArgs); + } else { + var promisified = promisifier(fn, function() { + return makeNodePromisified(key, THIS, key, + fn, suffix, multiArgs); + }); + util.notEnumerableProp(promisified, "__isPromisified__", true); + obj[promisifiedKey] = promisified; + } + } + util.toFastProperties(obj); + return obj; +} + +function promisify(callback, receiver, multiArgs) { + return makeNodePromisified(callback, receiver, undefined, + callback, null, multiArgs); +} + +Promise.promisify = function (fn, options) { + if (typeof fn !== "function") { + throw new TypeError("expecting a function but got " + util.classString(fn)); + } + if (isPromisified(fn)) { + return fn; + } + options = Object(options); + var receiver = options.context === undefined ? THIS : options.context; + var multiArgs = !!options.multiArgs; + var ret = promisify(fn, receiver, multiArgs); + util.copyDescriptors(fn, ret, propsFilter); + return ret; +}; + +Promise.promisifyAll = function (target, options) { + if (typeof target !== "function" && typeof target !== "object") { + throw new TypeError("the target of promisifyAll must be an object or a function\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + options = Object(options); + var multiArgs = !!options.multiArgs; + var suffix = options.suffix; + if (typeof suffix !== "string") suffix = defaultSuffix; + var filter = options.filter; + if (typeof filter !== "function") filter = defaultFilter; + var promisifier = options.promisifier; + if (typeof promisifier !== "function") promisifier = makeNodePromisified; + + if (!util.isIdentifier(suffix)) { + throw new RangeError("suffix must be a valid identifier\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + + var keys = util.inheritedDataKeys(target); + for (var i = 0; i < keys.length; ++i) { + var value = target[keys[i]]; + if (keys[i] !== "constructor" && + util.isClass(value)) { + promisifyAll(value.prototype, suffix, filter, promisifier, + multiArgs); + promisifyAll(value, suffix, filter, promisifier, multiArgs); + } + } + + return promisifyAll(target, suffix, filter, promisifier, multiArgs); +}; +}; + + +},{"./errors":50,"./nodeback":58,"./util":74}],63:[function(require,module,exports){ +"use strict"; +module.exports = function( + Promise, PromiseArray, tryConvertToPromise, apiRejection) { +var util = require("./util"); +var isObject = util.isObject; +var es5 = require("./es5"); +var Es6Map; +if (typeof Map === "function") Es6Map = Map; + +var mapToEntries = (function() { + var index = 0; + var size = 0; + + function extractEntry(value, key) { + this[index] = value; + this[index + size] = key; + index++; + } + + return function mapToEntries(map) { + size = map.size; + index = 0; + var ret = new Array(map.size * 2); + map.forEach(extractEntry, ret); + return ret; + }; +})(); + +var entriesToMap = function(entries) { + var ret = new Es6Map(); + var length = entries.length / 2 | 0; + for (var i = 0; i < length; ++i) { + var key = entries[length + i]; + var value = entries[i]; + ret.set(key, value); + } + return ret; +}; + +function PropertiesPromiseArray(obj) { + var isMap = false; + var entries; + if (Es6Map !== undefined && obj instanceof Es6Map) { + entries = mapToEntries(obj); + isMap = true; + } else { + var keys = es5.keys(obj); + var len = keys.length; + entries = new Array(len * 2); + for (var i = 0; i < len; ++i) { + var key = keys[i]; + entries[i] = obj[key]; + entries[i + len] = key; + } + } + this.constructor$(entries); + this._isMap = isMap; + this._init$(undefined, -3); +} +util.inherits(PropertiesPromiseArray, PromiseArray); + +PropertiesPromiseArray.prototype._init = function () {}; + +PropertiesPromiseArray.prototype._promiseFulfilled = function (value, index) { + this._values[index] = value; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + var val; + if (this._isMap) { + val = entriesToMap(this._values); + } else { + val = {}; + var keyOffset = this.length(); + for (var i = 0, len = this.length(); i < len; ++i) { + val[this._values[i + keyOffset]] = this._values[i]; + } + } + this._resolve(val); + return true; + } + return false; +}; + +PropertiesPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +PropertiesPromiseArray.prototype.getActualLength = function (len) { + return len >> 1; +}; + +function props(promises) { + var ret; + var castValue = tryConvertToPromise(promises); + + if (!isObject(castValue)) { + return apiRejection("cannot await properties of a non-object\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } else if (castValue instanceof Promise) { + ret = castValue._then( + Promise.props, undefined, undefined, undefined, undefined); + } else { + ret = new PropertiesPromiseArray(castValue).promise(); + } + + if (castValue instanceof Promise) { + ret._propagateFrom(castValue, 2); + } + return ret; +} + +Promise.prototype.props = function () { + return props(this); +}; + +Promise.props = function (promises) { + return props(promises); +}; +}; + +},{"./es5":51,"./util":74}],64:[function(require,module,exports){ +"use strict"; +function arrayMove(src, srcIndex, dst, dstIndex, len) { + for (var j = 0; j < len; ++j) { + dst[j + dstIndex] = src[j + srcIndex]; + src[j + srcIndex] = void 0; + } +} + +function Queue(capacity) { + this._capacity = capacity; + this._length = 0; + this._front = 0; +} + +Queue.prototype._willBeOverCapacity = function (size) { + return this._capacity < size; +}; + +Queue.prototype._pushOne = function (arg) { + var length = this.length(); + this._checkCapacity(length + 1); + var i = (this._front + length) & (this._capacity - 1); + this[i] = arg; + this._length = length + 1; +}; + +Queue.prototype.push = function (fn, receiver, arg) { + var length = this.length() + 3; + if (this._willBeOverCapacity(length)) { + this._pushOne(fn); + this._pushOne(receiver); + this._pushOne(arg); + return; + } + var j = this._front + length - 3; + this._checkCapacity(length); + var wrapMask = this._capacity - 1; + this[(j + 0) & wrapMask] = fn; + this[(j + 1) & wrapMask] = receiver; + this[(j + 2) & wrapMask] = arg; + this._length = length; +}; + +Queue.prototype.shift = function () { + var front = this._front, + ret = this[front]; + + this[front] = undefined; + this._front = (front + 1) & (this._capacity - 1); + this._length--; + return ret; +}; + +Queue.prototype.length = function () { + return this._length; +}; + +Queue.prototype._checkCapacity = function (size) { + if (this._capacity < size) { + this._resizeTo(this._capacity << 1); + } +}; + +Queue.prototype._resizeTo = function (capacity) { + var oldCapacity = this._capacity; + this._capacity = capacity; + var front = this._front; + var length = this._length; + var moveItemsCount = (front + length) & (oldCapacity - 1); + arrayMove(this, 0, this, oldCapacity, moveItemsCount); +}; + +module.exports = Queue; + +},{}],65:[function(require,module,exports){ +"use strict"; +module.exports = function( + Promise, INTERNAL, tryConvertToPromise, apiRejection) { +var util = require("./util"); + +var raceLater = function (promise) { + return promise.then(function(array) { + return race(array, promise); + }); +}; + +function race(promises, parent) { + var maybePromise = tryConvertToPromise(promises); + + if (maybePromise instanceof Promise) { + return raceLater(maybePromise); + } else { + promises = util.asArray(promises); + if (promises === null) + return apiRejection("expecting an array or an iterable object but got " + util.classString(promises)); + } + + var ret = new Promise(INTERNAL); + if (parent !== undefined) { + ret._propagateFrom(parent, 3); + } + var fulfill = ret._fulfill; + var reject = ret._reject; + for (var i = 0, len = promises.length; i < len; ++i) { + var val = promises[i]; + + if (val === undefined && !(i in promises)) { + continue; + } + + Promise.cast(val)._then(fulfill, reject, undefined, ret, null); + } + return ret; +} + +Promise.race = function (promises) { + return race(promises, undefined); +}; + +Promise.prototype.race = function () { + return race(this, undefined); +}; + +}; + +},{"./util":74}],66:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, + PromiseArray, + apiRejection, + tryConvertToPromise, + INTERNAL, + debug) { +var getDomain = Promise._getDomain; +var util = require("./util"); +var tryCatch = util.tryCatch; + +function ReductionPromiseArray(promises, fn, initialValue, _each) { + this.constructor$(promises); + var domain = getDomain(); + this._fn = domain === null ? fn : util.domainBind(domain, fn); + if (initialValue !== undefined) { + initialValue = Promise.resolve(initialValue); + initialValue._attachCancellationCallback(this); + } + this._initialValue = initialValue; + this._currentCancellable = null; + if(_each === INTERNAL) { + this._eachValues = Array(this._length); + } else if (_each === 0) { + this._eachValues = null; + } else { + this._eachValues = undefined; + } + this._promise._captureStackTrace(); + this._init$(undefined, -5); +} +util.inherits(ReductionPromiseArray, PromiseArray); + +ReductionPromiseArray.prototype._gotAccum = function(accum) { + if (this._eachValues !== undefined && + this._eachValues !== null && + accum !== INTERNAL) { + this._eachValues.push(accum); + } +}; + +ReductionPromiseArray.prototype._eachComplete = function(value) { + if (this._eachValues !== null) { + this._eachValues.push(value); + } + return this._eachValues; +}; + +ReductionPromiseArray.prototype._init = function() {}; + +ReductionPromiseArray.prototype._resolveEmptyArray = function() { + this._resolve(this._eachValues !== undefined ? this._eachValues + : this._initialValue); +}; + +ReductionPromiseArray.prototype.shouldCopyValues = function () { + return false; +}; + +ReductionPromiseArray.prototype._resolve = function(value) { + this._promise._resolveCallback(value); + this._values = null; +}; + +ReductionPromiseArray.prototype._resultCancelled = function(sender) { + if (sender === this._initialValue) return this._cancel(); + if (this._isResolved()) return; + this._resultCancelled$(); + if (this._currentCancellable instanceof Promise) { + this._currentCancellable.cancel(); + } + if (this._initialValue instanceof Promise) { + this._initialValue.cancel(); + } +}; + +ReductionPromiseArray.prototype._iterate = function (values) { + this._values = values; + var value; + var i; + var length = values.length; + if (this._initialValue !== undefined) { + value = this._initialValue; + i = 0; + } else { + value = Promise.resolve(values[0]); + i = 1; + } + + this._currentCancellable = value; + + if (!value.isRejected()) { + for (; i < length; ++i) { + var ctx = { + accum: null, + value: values[i], + index: i, + length: length, + array: this + }; + value = value._then(gotAccum, undefined, undefined, ctx, undefined); + } + } + + if (this._eachValues !== undefined) { + value = value + ._then(this._eachComplete, undefined, undefined, this, undefined); + } + value._then(completed, completed, undefined, value, this); +}; + +Promise.prototype.reduce = function (fn, initialValue) { + return reduce(this, fn, initialValue, null); +}; + +Promise.reduce = function (promises, fn, initialValue, _each) { + return reduce(promises, fn, initialValue, _each); +}; + +function completed(valueOrReason, array) { + if (this.isFulfilled()) { + array._resolve(valueOrReason); + } else { + array._reject(valueOrReason); + } +} + +function reduce(promises, fn, initialValue, _each) { + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var array = new ReductionPromiseArray(promises, fn, initialValue, _each); + return array.promise(); +} + +function gotAccum(accum) { + this.accum = accum; + this.array._gotAccum(accum); + var value = tryConvertToPromise(this.value, this.array._promise); + if (value instanceof Promise) { + this.array._currentCancellable = value; + return value._then(gotValue, undefined, undefined, this, undefined); + } else { + return gotValue.call(this, value); + } +} + +function gotValue(value) { + var array = this.array; + var promise = array._promise; + var fn = tryCatch(array._fn); + promise._pushContext(); + var ret; + if (array._eachValues !== undefined) { + ret = fn.call(promise._boundValue(), value, this.index, this.length); + } else { + ret = fn.call(promise._boundValue(), + this.accum, value, this.index, this.length); + } + if (ret instanceof Promise) { + array._currentCancellable = ret; + } + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, + promiseCreated, + array._eachValues !== undefined ? "Promise.each" : "Promise.reduce", + promise + ); + return ret; +} +}; + +},{"./util":74}],67:[function(require,module,exports){ +(function (process,global){ +"use strict"; +var util = require("./util"); +var schedule; +var noAsyncScheduler = function() { + throw new Error("No async scheduler available\u000a\u000a See http://goo.gl/MqrFmX\u000a"); +}; +var NativePromise = util.getNativePromise(); +if (util.isNode && typeof MutationObserver === "undefined") { + var GlobalSetImmediate = global.setImmediate; + var ProcessNextTick = process.nextTick; + schedule = util.isRecentNode + ? function(fn) { GlobalSetImmediate.call(global, fn); } + : function(fn) { ProcessNextTick.call(process, fn); }; +} else if (typeof NativePromise === "function" && + typeof NativePromise.resolve === "function") { + var nativePromise = NativePromise.resolve(); + schedule = function(fn) { + nativePromise.then(fn); + }; +} else if ((typeof MutationObserver !== "undefined") && + !(typeof window !== "undefined" && + window.navigator && + (window.navigator.standalone || window.cordova))) { + schedule = (function() { + var div = document.createElement("div"); + var opts = {attributes: true}; + var toggleScheduled = false; + var div2 = document.createElement("div"); + var o2 = new MutationObserver(function() { + div.classList.toggle("foo"); + toggleScheduled = false; + }); + o2.observe(div2, opts); + + var scheduleToggle = function() { + if (toggleScheduled) return; + toggleScheduled = true; + div2.classList.toggle("foo"); + }; + + return function schedule(fn) { + var o = new MutationObserver(function() { + o.disconnect(); + fn(); + }); + o.observe(div, opts); + scheduleToggle(); + }; + })(); +} else if (typeof setImmediate !== "undefined") { + schedule = function (fn) { + setImmediate(fn); + }; +} else if (typeof setTimeout !== "undefined") { + schedule = function (fn) { + setTimeout(fn, 0); + }; +} else { + schedule = noAsyncScheduler; +} +module.exports = schedule; + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./util":74,"_process":138}],68:[function(require,module,exports){ +"use strict"; +module.exports = + function(Promise, PromiseArray, debug) { +var PromiseInspection = Promise.PromiseInspection; +var util = require("./util"); + +function SettledPromiseArray(values) { + this.constructor$(values); +} +util.inherits(SettledPromiseArray, PromiseArray); + +SettledPromiseArray.prototype._promiseResolved = function (index, inspection) { + this._values[index] = inspection; + var totalResolved = ++this._totalResolved; + if (totalResolved >= this._length) { + this._resolve(this._values); + return true; + } + return false; +}; + +SettledPromiseArray.prototype._promiseFulfilled = function (value, index) { + var ret = new PromiseInspection(); + ret._bitField = 33554432; + ret._settledValueField = value; + return this._promiseResolved(index, ret); +}; +SettledPromiseArray.prototype._promiseRejected = function (reason, index) { + var ret = new PromiseInspection(); + ret._bitField = 16777216; + ret._settledValueField = reason; + return this._promiseResolved(index, ret); +}; + +Promise.settle = function (promises) { + debug.deprecated(".settle()", ".reflect()"); + return new SettledPromiseArray(promises).promise(); +}; + +Promise.prototype.settle = function () { + return Promise.settle(this); +}; +}; + +},{"./util":74}],69:[function(require,module,exports){ +"use strict"; +module.exports = +function(Promise, PromiseArray, apiRejection) { +var util = require("./util"); +var RangeError = require("./errors").RangeError; +var AggregateError = require("./errors").AggregateError; +var isArray = util.isArray; +var CANCELLATION = {}; + + +function SomePromiseArray(values) { + this.constructor$(values); + this._howMany = 0; + this._unwrap = false; + this._initialized = false; +} +util.inherits(SomePromiseArray, PromiseArray); + +SomePromiseArray.prototype._init = function () { + if (!this._initialized) { + return; + } + if (this._howMany === 0) { + this._resolve([]); + return; + } + this._init$(undefined, -5); + var isArrayResolved = isArray(this._values); + if (!this._isResolved() && + isArrayResolved && + this._howMany > this._canPossiblyFulfill()) { + this._reject(this._getRangeError(this.length())); + } +}; + +SomePromiseArray.prototype.init = function () { + this._initialized = true; + this._init(); +}; + +SomePromiseArray.prototype.setUnwrap = function () { + this._unwrap = true; +}; + +SomePromiseArray.prototype.howMany = function () { + return this._howMany; +}; + +SomePromiseArray.prototype.setHowMany = function (count) { + this._howMany = count; +}; + +SomePromiseArray.prototype._promiseFulfilled = function (value) { + this._addFulfilled(value); + if (this._fulfilled() === this.howMany()) { + this._values.length = this.howMany(); + if (this.howMany() === 1 && this._unwrap) { + this._resolve(this._values[0]); + } else { + this._resolve(this._values); + } + return true; + } + return false; + +}; +SomePromiseArray.prototype._promiseRejected = function (reason) { + this._addRejected(reason); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._promiseCancelled = function () { + if (this._values instanceof Promise || this._values == null) { + return this._cancel(); + } + this._addRejected(CANCELLATION); + return this._checkOutcome(); +}; + +SomePromiseArray.prototype._checkOutcome = function() { + if (this.howMany() > this._canPossiblyFulfill()) { + var e = new AggregateError(); + for (var i = this.length(); i < this._values.length; ++i) { + if (this._values[i] !== CANCELLATION) { + e.push(this._values[i]); + } + } + if (e.length > 0) { + this._reject(e); + } else { + this._cancel(); + } + return true; + } + return false; +}; + +SomePromiseArray.prototype._fulfilled = function () { + return this._totalResolved; +}; + +SomePromiseArray.prototype._rejected = function () { + return this._values.length - this.length(); +}; + +SomePromiseArray.prototype._addRejected = function (reason) { + this._values.push(reason); +}; + +SomePromiseArray.prototype._addFulfilled = function (value) { + this._values[this._totalResolved++] = value; +}; + +SomePromiseArray.prototype._canPossiblyFulfill = function () { + return this.length() - this._rejected(); +}; + +SomePromiseArray.prototype._getRangeError = function (count) { + var message = "Input array must contain at least " + + this._howMany + " items but contains only " + count + " items"; + return new RangeError(message); +}; + +SomePromiseArray.prototype._resolveEmptyArray = function () { + this._reject(this._getRangeError(0)); +}; + +function some(promises, howMany) { + if ((howMany | 0) !== howMany || howMany < 0) { + return apiRejection("expecting a positive integer\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + var ret = new SomePromiseArray(promises); + var promise = ret.promise(); + ret.setHowMany(howMany); + ret.init(); + return promise; +} + +Promise.some = function (promises, howMany) { + return some(promises, howMany); +}; + +Promise.prototype.some = function (howMany) { + return some(this, howMany); +}; + +Promise._SomePromiseArray = SomePromiseArray; +}; + +},{"./errors":50,"./util":74}],70:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise) { +function PromiseInspection(promise) { + if (promise !== undefined) { + promise = promise._target(); + this._bitField = promise._bitField; + this._settledValueField = promise._isFateSealed() + ? promise._settledValue() : undefined; + } + else { + this._bitField = 0; + this._settledValueField = undefined; + } +} + +PromiseInspection.prototype._settledValue = function() { + return this._settledValueField; +}; + +var value = PromiseInspection.prototype.value = function () { + if (!this.isFulfilled()) { + throw new TypeError("cannot get fulfillment value of a non-fulfilled promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var reason = PromiseInspection.prototype.error = +PromiseInspection.prototype.reason = function () { + if (!this.isRejected()) { + throw new TypeError("cannot get rejection reason of a non-rejected promise\u000a\u000a See http://goo.gl/MqrFmX\u000a"); + } + return this._settledValue(); +}; + +var isFulfilled = PromiseInspection.prototype.isFulfilled = function() { + return (this._bitField & 33554432) !== 0; +}; + +var isRejected = PromiseInspection.prototype.isRejected = function () { + return (this._bitField & 16777216) !== 0; +}; + +var isPending = PromiseInspection.prototype.isPending = function () { + return (this._bitField & 50397184) === 0; +}; + +var isResolved = PromiseInspection.prototype.isResolved = function () { + return (this._bitField & 50331648) !== 0; +}; + +PromiseInspection.prototype.isCancelled = function() { + return (this._bitField & 8454144) !== 0; +}; + +Promise.prototype.__isCancelled = function() { + return (this._bitField & 65536) === 65536; +}; + +Promise.prototype._isCancelled = function() { + return this._target().__isCancelled(); +}; + +Promise.prototype.isCancelled = function() { + return (this._target()._bitField & 8454144) !== 0; +}; + +Promise.prototype.isPending = function() { + return isPending.call(this._target()); +}; + +Promise.prototype.isRejected = function() { + return isRejected.call(this._target()); +}; + +Promise.prototype.isFulfilled = function() { + return isFulfilled.call(this._target()); +}; + +Promise.prototype.isResolved = function() { + return isResolved.call(this._target()); +}; + +Promise.prototype.value = function() { + return value.call(this._target()); +}; + +Promise.prototype.reason = function() { + var target = this._target(); + target._unsetRejectionIsUnhandled(); + return reason.call(target); +}; + +Promise.prototype._value = function() { + return this._settledValue(); +}; + +Promise.prototype._reason = function() { + this._unsetRejectionIsUnhandled(); + return this._settledValue(); +}; + +Promise.PromiseInspection = PromiseInspection; +}; + +},{}],71:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL) { +var util = require("./util"); +var errorObj = util.errorObj; +var isObject = util.isObject; + +function tryConvertToPromise(obj, context) { + if (isObject(obj)) { + if (obj instanceof Promise) return obj; + var then = getThen(obj); + if (then === errorObj) { + if (context) context._pushContext(); + var ret = Promise.reject(then.e); + if (context) context._popContext(); + return ret; + } else if (typeof then === "function") { + if (isAnyBluebirdPromise(obj)) { + var ret = new Promise(INTERNAL); + obj._then( + ret._fulfill, + ret._reject, + undefined, + ret, + null + ); + return ret; + } + return doThenable(obj, then, context); + } + } + return obj; +} + +function doGetThen(obj) { + return obj.then; +} + +function getThen(obj) { + try { + return doGetThen(obj); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} + +var hasProp = {}.hasOwnProperty; +function isAnyBluebirdPromise(obj) { + try { + return hasProp.call(obj, "_promise0"); + } catch (e) { + return false; + } +} + +function doThenable(x, then, context) { + var promise = new Promise(INTERNAL); + var ret = promise; + if (context) context._pushContext(); + promise._captureStackTrace(); + if (context) context._popContext(); + var synchronous = true; + var result = util.tryCatch(then).call(x, resolve, reject); + synchronous = false; + + if (promise && result === errorObj) { + promise._rejectCallback(result.e, true, true); + promise = null; + } + + function resolve(value) { + if (!promise) return; + promise._resolveCallback(value); + promise = null; + } + + function reject(reason) { + if (!promise) return; + promise._rejectCallback(reason, synchronous, true); + promise = null; + } + return ret; +} + +return tryConvertToPromise; +}; + +},{"./util":74}],72:[function(require,module,exports){ +"use strict"; +module.exports = function(Promise, INTERNAL, debug) { +var util = require("./util"); +var TimeoutError = Promise.TimeoutError; + +function HandleWrapper(handle) { + this.handle = handle; +} + +HandleWrapper.prototype._resultCancelled = function() { + clearTimeout(this.handle); +}; + +var afterValue = function(value) { return delay(+this).thenReturn(value); }; +var delay = Promise.delay = function (ms, value) { + var ret; + var handle; + if (value !== undefined) { + ret = Promise.resolve(value) + ._then(afterValue, null, null, ms, undefined); + if (debug.cancellation() && value instanceof Promise) { + ret._setOnCancel(value); + } + } else { + ret = new Promise(INTERNAL); + handle = setTimeout(function() { ret._fulfill(); }, +ms); + if (debug.cancellation()) { + ret._setOnCancel(new HandleWrapper(handle)); + } + ret._captureStackTrace(); + } + ret._setAsyncGuaranteed(); + return ret; +}; + +Promise.prototype.delay = function (ms) { + return delay(ms, this); +}; + +var afterTimeout = function (promise, message, parent) { + var err; + if (typeof message !== "string") { + if (message instanceof Error) { + err = message; + } else { + err = new TimeoutError("operation timed out"); + } + } else { + err = new TimeoutError(message); + } + util.markAsOriginatingFromRejection(err); + promise._attachExtraTrace(err); + promise._reject(err); + + if (parent != null) { + parent.cancel(); + } +}; + +function successClear(value) { + clearTimeout(this.handle); + return value; +} + +function failureClear(reason) { + clearTimeout(this.handle); + throw reason; +} + +Promise.prototype.timeout = function (ms, message) { + ms = +ms; + var ret, parent; + + var handleWrapper = new HandleWrapper(setTimeout(function timeoutTimeout() { + if (ret.isPending()) { + afterTimeout(ret, message, parent); + } + }, ms)); + + if (debug.cancellation()) { + parent = this.then(); + ret = parent._then(successClear, failureClear, + undefined, handleWrapper, undefined); + ret._setOnCancel(handleWrapper); + } else { + ret = this._then(successClear, failureClear, + undefined, handleWrapper, undefined); + } + + return ret; +}; + +}; + +},{"./util":74}],73:[function(require,module,exports){ +"use strict"; +module.exports = function (Promise, apiRejection, tryConvertToPromise, + createContext, INTERNAL, debug) { + var util = require("./util"); + var TypeError = require("./errors").TypeError; + var inherits = require("./util").inherits; + var errorObj = util.errorObj; + var tryCatch = util.tryCatch; + var NULL = {}; + + function thrower(e) { + setTimeout(function(){throw e;}, 0); + } + + function castPreservingDisposable(thenable) { + var maybePromise = tryConvertToPromise(thenable); + if (maybePromise !== thenable && + typeof thenable._isDisposable === "function" && + typeof thenable._getDisposer === "function" && + thenable._isDisposable()) { + maybePromise._setDisposable(thenable._getDisposer()); + } + return maybePromise; + } + function dispose(resources, inspection) { + var i = 0; + var len = resources.length; + var ret = new Promise(INTERNAL); + function iterator() { + if (i >= len) return ret._fulfill(); + var maybePromise = castPreservingDisposable(resources[i++]); + if (maybePromise instanceof Promise && + maybePromise._isDisposable()) { + try { + maybePromise = tryConvertToPromise( + maybePromise._getDisposer().tryDispose(inspection), + resources.promise); + } catch (e) { + return thrower(e); + } + if (maybePromise instanceof Promise) { + return maybePromise._then(iterator, thrower, + null, null, null); + } + } + iterator(); + } + iterator(); + return ret; + } + + function Disposer(data, promise, context) { + this._data = data; + this._promise = promise; + this._context = context; + } + + Disposer.prototype.data = function () { + return this._data; + }; + + Disposer.prototype.promise = function () { + return this._promise; + }; + + Disposer.prototype.resource = function () { + if (this.promise().isFulfilled()) { + return this.promise().value(); + } + return NULL; + }; + + Disposer.prototype.tryDispose = function(inspection) { + var resource = this.resource(); + var context = this._context; + if (context !== undefined) context._pushContext(); + var ret = resource !== NULL + ? this.doDispose(resource, inspection) : null; + if (context !== undefined) context._popContext(); + this._promise._unsetDisposable(); + this._data = null; + return ret; + }; + + Disposer.isDisposer = function (d) { + return (d != null && + typeof d.resource === "function" && + typeof d.tryDispose === "function"); + }; + + function FunctionDisposer(fn, promise, context) { + this.constructor$(fn, promise, context); + } + inherits(FunctionDisposer, Disposer); + + FunctionDisposer.prototype.doDispose = function (resource, inspection) { + var fn = this.data(); + return fn.call(resource, resource, inspection); + }; + + function maybeUnwrapDisposer(value) { + if (Disposer.isDisposer(value)) { + this.resources[this.index]._setDisposable(value); + return value.promise(); + } + return value; + } + + function ResourceList(length) { + this.length = length; + this.promise = null; + this[length-1] = null; + } + + ResourceList.prototype._resultCancelled = function() { + var len = this.length; + for (var i = 0; i < len; ++i) { + var item = this[i]; + if (item instanceof Promise) { + item.cancel(); + } + } + }; + + Promise.using = function () { + var len = arguments.length; + if (len < 2) return apiRejection( + "you must pass at least 2 arguments to Promise.using"); + var fn = arguments[len - 1]; + if (typeof fn !== "function") { + return apiRejection("expecting a function but got " + util.classString(fn)); + } + var input; + var spreadArgs = true; + if (len === 2 && Array.isArray(arguments[0])) { + input = arguments[0]; + len = input.length; + spreadArgs = false; + } else { + input = arguments; + len--; + } + var resources = new ResourceList(len); + for (var i = 0; i < len; ++i) { + var resource = input[i]; + if (Disposer.isDisposer(resource)) { + var disposer = resource; + resource = resource.promise(); + resource._setDisposable(disposer); + } else { + var maybePromise = tryConvertToPromise(resource); + if (maybePromise instanceof Promise) { + resource = + maybePromise._then(maybeUnwrapDisposer, null, null, { + resources: resources, + index: i + }, undefined); + } + } + resources[i] = resource; + } + + var reflectedResources = new Array(resources.length); + for (var i = 0; i < reflectedResources.length; ++i) { + reflectedResources[i] = Promise.resolve(resources[i]).reflect(); + } + + var resultPromise = Promise.all(reflectedResources) + .then(function(inspections) { + for (var i = 0; i < inspections.length; ++i) { + var inspection = inspections[i]; + if (inspection.isRejected()) { + errorObj.e = inspection.error(); + return errorObj; + } else if (!inspection.isFulfilled()) { + resultPromise.cancel(); + return; + } + inspections[i] = inspection.value(); + } + promise._pushContext(); + + fn = tryCatch(fn); + var ret = spreadArgs + ? fn.apply(undefined, inspections) : fn(inspections); + var promiseCreated = promise._popContext(); + debug.checkForgottenReturns( + ret, promiseCreated, "Promise.using", promise); + return ret; + }); + + var promise = resultPromise.lastly(function() { + var inspection = new Promise.PromiseInspection(resultPromise); + return dispose(resources, inspection); + }); + resources.promise = promise; + promise._setOnCancel(resources); + return promise; + }; + + Promise.prototype._setDisposable = function (disposer) { + this._bitField = this._bitField | 131072; + this._disposer = disposer; + }; + + Promise.prototype._isDisposable = function () { + return (this._bitField & 131072) > 0; + }; + + Promise.prototype._getDisposer = function () { + return this._disposer; + }; + + Promise.prototype._unsetDisposable = function () { + this._bitField = this._bitField & (~131072); + this._disposer = undefined; + }; + + Promise.prototype.disposer = function (fn) { + if (typeof fn === "function") { + return new FunctionDisposer(fn, this, createContext()); + } + throw new TypeError(); + }; + +}; + +},{"./errors":50,"./util":74}],74:[function(require,module,exports){ +(function (process,global){ +"use strict"; +var es5 = require("./es5"); +var canEvaluate = typeof navigator == "undefined"; + +var errorObj = {e: {}}; +var tryCatchTarget; +var globalObject = typeof self !== "undefined" ? self : + typeof window !== "undefined" ? window : + typeof global !== "undefined" ? global : + this !== undefined ? this : null; + +function tryCatcher() { + try { + var target = tryCatchTarget; + tryCatchTarget = null; + return target.apply(this, arguments); + } catch (e) { + errorObj.e = e; + return errorObj; + } +} +function tryCatch(fn) { + tryCatchTarget = fn; + return tryCatcher; +} + +var inherits = function(Child, Parent) { + var hasProp = {}.hasOwnProperty; + + function T() { + this.constructor = Child; + this.constructor$ = Parent; + for (var propertyName in Parent.prototype) { + if (hasProp.call(Parent.prototype, propertyName) && + propertyName.charAt(propertyName.length-1) !== "$" + ) { + this[propertyName + "$"] = Parent.prototype[propertyName]; + } + } + } + T.prototype = Parent.prototype; + Child.prototype = new T(); + return Child.prototype; +}; + + +function isPrimitive(val) { + return val == null || val === true || val === false || + typeof val === "string" || typeof val === "number"; + +} + +function isObject(value) { + return typeof value === "function" || + typeof value === "object" && value !== null; +} + +function maybeWrapAsError(maybeError) { + if (!isPrimitive(maybeError)) return maybeError; + + return new Error(safeToString(maybeError)); +} + +function withAppended(target, appendee) { + var len = target.length; + var ret = new Array(len + 1); + var i; + for (i = 0; i < len; ++i) { + ret[i] = target[i]; + } + ret[i] = appendee; + return ret; +} + +function getDataPropertyOrDefault(obj, key, defaultValue) { + if (es5.isES5) { + var desc = Object.getOwnPropertyDescriptor(obj, key); + + if (desc != null) { + return desc.get == null && desc.set == null + ? desc.value + : defaultValue; + } + } else { + return {}.hasOwnProperty.call(obj, key) ? obj[key] : undefined; + } +} + +function notEnumerableProp(obj, name, value) { + if (isPrimitive(obj)) return obj; + var descriptor = { + value: value, + configurable: true, + enumerable: false, + writable: true + }; + es5.defineProperty(obj, name, descriptor); + return obj; +} + +function thrower(r) { + throw r; +} + +var inheritedDataKeys = (function() { + var excludedPrototypes = [ + Array.prototype, + Object.prototype, + Function.prototype + ]; + + var isExcludedProto = function(val) { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (excludedPrototypes[i] === val) { + return true; + } + } + return false; + }; + + if (es5.isES5) { + var getKeys = Object.getOwnPropertyNames; + return function(obj) { + var ret = []; + var visitedKeys = Object.create(null); + while (obj != null && !isExcludedProto(obj)) { + var keys; + try { + keys = getKeys(obj); + } catch (e) { + return ret; + } + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (visitedKeys[key]) continue; + visitedKeys[key] = true; + var desc = Object.getOwnPropertyDescriptor(obj, key); + if (desc != null && desc.get == null && desc.set == null) { + ret.push(key); + } + } + obj = es5.getPrototypeOf(obj); + } + return ret; + }; + } else { + var hasProp = {}.hasOwnProperty; + return function(obj) { + if (isExcludedProto(obj)) return []; + var ret = []; + + /*jshint forin:false */ + enumeration: for (var key in obj) { + if (hasProp.call(obj, key)) { + ret.push(key); + } else { + for (var i = 0; i < excludedPrototypes.length; ++i) { + if (hasProp.call(excludedPrototypes[i], key)) { + continue enumeration; + } + } + ret.push(key); + } + } + return ret; + }; + } + +})(); + +var thisAssignmentPattern = /this\s*\.\s*\S+\s*=/; +function isClass(fn) { + try { + if (typeof fn === "function") { + var keys = es5.names(fn.prototype); + + var hasMethods = es5.isES5 && keys.length > 1; + var hasMethodsOtherThanConstructor = keys.length > 0 && + !(keys.length === 1 && keys[0] === "constructor"); + var hasThisAssignmentAndStaticMethods = + thisAssignmentPattern.test(fn + "") && es5.names(fn).length > 0; + + if (hasMethods || hasMethodsOtherThanConstructor || + hasThisAssignmentAndStaticMethods) { + return true; + } + } + return false; + } catch (e) { + return false; + } +} + +function toFastProperties(obj) { + /*jshint -W027,-W055,-W031*/ + function FakeConstructor() {} + FakeConstructor.prototype = obj; + var l = 8; + while (l--) new FakeConstructor(); + return obj; + eval(obj); +} + +var rident = /^[a-z$_][a-z$_0-9]*$/i; +function isIdentifier(str) { + return rident.test(str); +} + +function filledRange(count, prefix, suffix) { + var ret = new Array(count); + for(var i = 0; i < count; ++i) { + ret[i] = prefix + i + suffix; + } + return ret; +} + +function safeToString(obj) { + try { + return obj + ""; + } catch (e) { + return "[no string representation]"; + } +} + +function isError(obj) { + return obj !== null && + typeof obj === "object" && + typeof obj.message === "string" && + typeof obj.name === "string"; +} + +function markAsOriginatingFromRejection(e) { + try { + notEnumerableProp(e, "isOperational", true); + } + catch(ignore) {} +} + +function originatesFromRejection(e) { + if (e == null) return false; + return ((e instanceof Error["__BluebirdErrorTypes__"].OperationalError) || + e["isOperational"] === true); +} + +function canAttachTrace(obj) { + return isError(obj) && es5.propertyIsWritable(obj, "stack"); +} + +var ensureErrorObject = (function() { + if (!("stack" in new Error())) { + return function(value) { + if (canAttachTrace(value)) return value; + try {throw new Error(safeToString(value));} + catch(err) {return err;} + }; + } else { + return function(value) { + if (canAttachTrace(value)) return value; + return new Error(safeToString(value)); + }; + } +})(); + +function classString(obj) { + return {}.toString.call(obj); +} + +function copyDescriptors(from, to, filter) { + var keys = es5.names(from); + for (var i = 0; i < keys.length; ++i) { + var key = keys[i]; + if (filter(key)) { + try { + es5.defineProperty(to, key, es5.getDescriptor(from, key)); + } catch (ignore) {} + } + } +} + +var asArray = function(v) { + if (es5.isArray(v)) { + return v; + } + return null; +}; + +if (typeof Symbol !== "undefined" && Symbol.iterator) { + var ArrayFrom = typeof Array.from === "function" ? function(v) { + return Array.from(v); + } : function(v) { + var ret = []; + var it = v[Symbol.iterator](); + var itResult; + while (!((itResult = it.next()).done)) { + ret.push(itResult.value); + } + return ret; + }; + + asArray = function(v) { + if (es5.isArray(v)) { + return v; + } else if (v != null && typeof v[Symbol.iterator] === "function") { + return ArrayFrom(v); + } + return null; + }; +} + +var isNode = typeof process !== "undefined" && + classString(process).toLowerCase() === "[object process]"; + +var hasEnvVariables = typeof process !== "undefined" && + typeof process.env !== "undefined"; + +function env(key) { + return hasEnvVariables ? process.env[key] : undefined; +} + +function getNativePromise() { + if (typeof Promise === "function") { + try { + var promise = new Promise(function(){}); + if ({}.toString.call(promise) === "[object Promise]") { + return Promise; + } + } catch (e) {} + } +} + +function domainBind(self, cb) { + return self.bind(cb); +} + +var ret = { + isClass: isClass, + isIdentifier: isIdentifier, + inheritedDataKeys: inheritedDataKeys, + getDataPropertyOrDefault: getDataPropertyOrDefault, + thrower: thrower, + isArray: es5.isArray, + asArray: asArray, + notEnumerableProp: notEnumerableProp, + isPrimitive: isPrimitive, + isObject: isObject, + isError: isError, + canEvaluate: canEvaluate, + errorObj: errorObj, + tryCatch: tryCatch, + inherits: inherits, + withAppended: withAppended, + maybeWrapAsError: maybeWrapAsError, + toFastProperties: toFastProperties, + filledRange: filledRange, + toString: safeToString, + canAttachTrace: canAttachTrace, + ensureErrorObject: ensureErrorObject, + originatesFromRejection: originatesFromRejection, + markAsOriginatingFromRejection: markAsOriginatingFromRejection, + classString: classString, + copyDescriptors: copyDescriptors, + hasDevTools: typeof chrome !== "undefined" && chrome && + typeof chrome.loadTimes === "function", + isNode: isNode, + hasEnvVariables: hasEnvVariables, + env: env, + global: globalObject, + getNativePromise: getNativePromise, + domainBind: domainBind +}; +ret.isRecentNode = ret.isNode && (function() { + var version = process.versions.node.split(".").map(Number); + return (version[0] === 0 && version[1] > 10) || (version[0] > 0); +})(); + +if (ret.isNode) ret.toFastProperties(process); + +try {throw new Error(); } catch (e) {ret.lastLineError = e;} +module.exports = ret; + +}).call(this,require('_process'),typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"./es5":51,"_process":138}],75:[function(require,module,exports){ + +},{}],76:[function(require,module,exports){ +(function (global){ +'use strict'; + +var buffer = require('buffer'); +var Buffer = buffer.Buffer; +var SlowBuffer = buffer.SlowBuffer; +var MAX_LEN = buffer.kMaxLength || 2147483647; +exports.alloc = function alloc(size, fill, encoding) { + if (typeof Buffer.alloc === 'function') { + return Buffer.alloc(size, fill, encoding); + } + if (typeof encoding === 'number') { + throw new TypeError('encoding must not be number'); + } + if (typeof size !== 'number') { + throw new TypeError('size must be a number'); + } + if (size > MAX_LEN) { + throw new RangeError('size is too large'); + } + var enc = encoding; + var _fill = fill; + if (_fill === undefined) { + enc = undefined; + _fill = 0; + } + var buf = new Buffer(size); + if (typeof _fill === 'string') { + var fillBuf = new Buffer(_fill, enc); + var flen = fillBuf.length; + var i = -1; + while (++i < size) { + buf[i] = fillBuf[i % flen]; + } + } else { + buf.fill(_fill); + } + return buf; +} +exports.allocUnsafe = function allocUnsafe(size) { + if (typeof Buffer.allocUnsafe === 'function') { + return Buffer.allocUnsafe(size); + } + if (typeof size !== 'number') { + throw new TypeError('size must be a number'); + } + if (size > MAX_LEN) { + throw new RangeError('size is too large'); + } + return new Buffer(size); +} +exports.from = function from(value, encodingOrOffset, length) { + if (typeof Buffer.from === 'function' && (!global.Uint8Array || Uint8Array.from !== Buffer.from)) { + return Buffer.from(value, encodingOrOffset, length); + } + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number'); + } + if (typeof value === 'string') { + return new Buffer(value, encodingOrOffset); + } + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + var offset = encodingOrOffset; + if (arguments.length === 1) { + return new Buffer(value); + } + if (typeof offset === 'undefined') { + offset = 0; + } + var len = length; + if (typeof len === 'undefined') { + len = value.byteLength - offset; + } + if (offset >= value.byteLength) { + throw new RangeError('\'offset\' is out of bounds'); + } + if (len > value.byteLength - offset) { + throw new RangeError('\'length\' is out of bounds'); + } + return new Buffer(value.slice(offset, offset + len)); + } + if (Buffer.isBuffer(value)) { + var out = new Buffer(value.length); + value.copy(out, 0, 0, value.length); + return out; + } + if (value) { + if (Array.isArray(value) || (typeof ArrayBuffer !== 'undefined' && value.buffer instanceof ArrayBuffer) || 'length' in value) { + return new Buffer(value); + } + if (value.type === 'Buffer' && Array.isArray(value.data)) { + return new Buffer(value.data); + } + } + + throw new TypeError('First argument must be a string, Buffer, ' + 'ArrayBuffer, Array, or array-like object.'); +} +exports.allocUnsafeSlow = function allocUnsafeSlow(size) { + if (typeof Buffer.allocUnsafeSlow === 'function') { + return Buffer.allocUnsafeSlow(size); + } + if (typeof size !== 'number') { + throw new TypeError('size must be a number'); + } + if (size >= MAX_LEN) { + throw new RangeError('size is too large'); + } + return new SlowBuffer(size); +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"buffer":77}],77:[function(require,module,exports){ +(function (global){ +/*! + * The buffer module from node.js, for the browser. + * + * @author Feross Aboukhadijeh + * @license MIT + */ +/* eslint-disable no-proto */ + +'use strict' + +var base64 = require('base64-js') +var ieee754 = require('ieee754') +var isArray = require('isarray') + +exports.Buffer = Buffer +exports.SlowBuffer = SlowBuffer +exports.INSPECT_MAX_BYTES = 50 + +/** + * If `Buffer.TYPED_ARRAY_SUPPORT`: + * === true Use Uint8Array implementation (fastest) + * === false Use Object implementation (most compatible, even IE6) + * + * Browsers that support typed arrays are IE 10+, Firefox 4+, Chrome 7+, Safari 5.1+, + * Opera 11.6+, iOS 4.2+. + * + * Due to various browser bugs, sometimes the Object implementation will be used even + * when the browser supports typed arrays. + * + * Note: + * + * - Firefox 4-29 lacks support for adding new properties to `Uint8Array` instances, + * See: https://bugzilla.mozilla.org/show_bug.cgi?id=695438. + * + * - Chrome 9-10 is missing the `TypedArray.prototype.subarray` function. + * + * - IE10 has a broken `TypedArray.prototype.subarray` function which returns arrays of + * incorrect length in some situations. + + * We detect these buggy browsers and set `Buffer.TYPED_ARRAY_SUPPORT` to `false` so they + * get the Object implementation, which is slower but behaves correctly. + */ +Buffer.TYPED_ARRAY_SUPPORT = global.TYPED_ARRAY_SUPPORT !== undefined + ? global.TYPED_ARRAY_SUPPORT + : typedArraySupport() + +/* + * Export kMaxLength after typed array support is determined. + */ +exports.kMaxLength = kMaxLength() + +function typedArraySupport () { + try { + var arr = new Uint8Array(1) + arr.__proto__ = {__proto__: Uint8Array.prototype, foo: function () { return 42 }} + return arr.foo() === 42 && // typed array instances can be augmented + typeof arr.subarray === 'function' && // chrome 9-10 lack `subarray` + arr.subarray(1, 1).byteLength === 0 // ie10 has broken `subarray` + } catch (e) { + return false + } +} + +function kMaxLength () { + return Buffer.TYPED_ARRAY_SUPPORT + ? 0x7fffffff + : 0x3fffffff +} + +function createBuffer (that, length) { + if (kMaxLength() < length) { + throw new RangeError('Invalid typed array length') + } + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = new Uint8Array(length) + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + if (that === null) { + that = new Buffer(length) + } + that.length = length + } + + return that +} + +/** + * The Buffer constructor returns instances of `Uint8Array` that have their + * prototype changed to `Buffer.prototype`. Furthermore, `Buffer` is a subclass of + * `Uint8Array`, so the returned instances will have all the node `Buffer` methods + * and the `Uint8Array` methods. Square bracket notation works as expected -- it + * returns a single octet. + * + * The `Uint8Array` prototype remains unmodified. + */ + +function Buffer (arg, encodingOrOffset, length) { + if (!Buffer.TYPED_ARRAY_SUPPORT && !(this instanceof Buffer)) { + return new Buffer(arg, encodingOrOffset, length) + } + + // Common case. + if (typeof arg === 'number') { + if (typeof encodingOrOffset === 'string') { + throw new Error( + 'If encoding is specified then the first argument must be a string' + ) + } + return allocUnsafe(this, arg) + } + return from(this, arg, encodingOrOffset, length) +} + +Buffer.poolSize = 8192 // not used by this implementation + +// TODO: Legacy, not needed anymore. Remove in next major version. +Buffer._augment = function (arr) { + arr.__proto__ = Buffer.prototype + return arr +} + +function from (that, value, encodingOrOffset, length) { + if (typeof value === 'number') { + throw new TypeError('"value" argument must not be a number') + } + + if (typeof ArrayBuffer !== 'undefined' && value instanceof ArrayBuffer) { + return fromArrayBuffer(that, value, encodingOrOffset, length) + } + + if (typeof value === 'string') { + return fromString(that, value, encodingOrOffset) + } + + return fromObject(that, value) +} + +/** + * Functionally equivalent to Buffer(arg, encoding) but throws a TypeError + * if value is a number. + * Buffer.from(str[, encoding]) + * Buffer.from(array) + * Buffer.from(buffer) + * Buffer.from(arrayBuffer[, byteOffset[, length]]) + **/ +Buffer.from = function (value, encodingOrOffset, length) { + return from(null, value, encodingOrOffset, length) +} + +if (Buffer.TYPED_ARRAY_SUPPORT) { + Buffer.prototype.__proto__ = Uint8Array.prototype + Buffer.__proto__ = Uint8Array + if (typeof Symbol !== 'undefined' && Symbol.species && + Buffer[Symbol.species] === Buffer) { + // Fix subarray() in ES2016. See: https://github.com/feross/buffer/pull/97 + Object.defineProperty(Buffer, Symbol.species, { + value: null, + configurable: true + }) + } +} + +function assertSize (size) { + if (typeof size !== 'number') { + throw new TypeError('"size" argument must be a number') + } else if (size < 0) { + throw new RangeError('"size" argument must not be negative') + } +} + +function alloc (that, size, fill, encoding) { + assertSize(size) + if (size <= 0) { + return createBuffer(that, size) + } + if (fill !== undefined) { + // Only pay attention to encoding if it's a string. This + // prevents accidentally sending in a number that would + // be interpretted as a start offset. + return typeof encoding === 'string' + ? createBuffer(that, size).fill(fill, encoding) + : createBuffer(that, size).fill(fill) + } + return createBuffer(that, size) +} + +/** + * Creates a new filled Buffer instance. + * alloc(size[, fill[, encoding]]) + **/ +Buffer.alloc = function (size, fill, encoding) { + return alloc(null, size, fill, encoding) +} + +function allocUnsafe (that, size) { + assertSize(size) + that = createBuffer(that, size < 0 ? 0 : checked(size) | 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) { + for (var i = 0; i < size; ++i) { + that[i] = 0 + } + } + return that +} + +/** + * Equivalent to Buffer(num), by default creates a non-zero-filled Buffer instance. + * */ +Buffer.allocUnsafe = function (size) { + return allocUnsafe(null, size) +} +/** + * Equivalent to SlowBuffer(num), by default creates a non-zero-filled Buffer instance. + */ +Buffer.allocUnsafeSlow = function (size) { + return allocUnsafe(null, size) +} + +function fromString (that, string, encoding) { + if (typeof encoding !== 'string' || encoding === '') { + encoding = 'utf8' + } + + if (!Buffer.isEncoding(encoding)) { + throw new TypeError('"encoding" must be a valid string encoding') + } + + var length = byteLength(string, encoding) | 0 + that = createBuffer(that, length) + + var actual = that.write(string, encoding) + + if (actual !== length) { + // Writing a hex string, for example, that contains invalid characters will + // cause everything after the first invalid character to be ignored. (e.g. + // 'abxxcd' will be treated as 'ab') + that = that.slice(0, actual) + } + + return that +} + +function fromArrayLike (that, array) { + var length = array.length < 0 ? 0 : checked(array.length) | 0 + that = createBuffer(that, length) + for (var i = 0; i < length; i += 1) { + that[i] = array[i] & 255 + } + return that +} + +function fromArrayBuffer (that, array, byteOffset, length) { + array.byteLength // this throws if `array` is not a valid ArrayBuffer + + if (byteOffset < 0 || array.byteLength < byteOffset) { + throw new RangeError('\'offset\' is out of bounds') + } + + if (array.byteLength < byteOffset + (length || 0)) { + throw new RangeError('\'length\' is out of bounds') + } + + if (byteOffset === undefined && length === undefined) { + array = new Uint8Array(array) + } else if (length === undefined) { + array = new Uint8Array(array, byteOffset) + } else { + array = new Uint8Array(array, byteOffset, length) + } + + if (Buffer.TYPED_ARRAY_SUPPORT) { + // Return an augmented `Uint8Array` instance, for best performance + that = array + that.__proto__ = Buffer.prototype + } else { + // Fallback: Return an object instance of the Buffer class + that = fromArrayLike(that, array) + } + return that +} + +function fromObject (that, obj) { + if (Buffer.isBuffer(obj)) { + var len = checked(obj.length) | 0 + that = createBuffer(that, len) + + if (that.length === 0) { + return that + } + + obj.copy(that, 0, 0, len) + return that + } + + if (obj) { + if ((typeof ArrayBuffer !== 'undefined' && + obj.buffer instanceof ArrayBuffer) || 'length' in obj) { + if (typeof obj.length !== 'number' || isnan(obj.length)) { + return createBuffer(that, 0) + } + return fromArrayLike(that, obj) + } + + if (obj.type === 'Buffer' && isArray(obj.data)) { + return fromArrayLike(that, obj.data) + } + } + + throw new TypeError('First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.') +} + +function checked (length) { + // Note: cannot use `length < kMaxLength()` here because that fails when + // length is NaN (which is otherwise coerced to zero.) + if (length >= kMaxLength()) { + throw new RangeError('Attempt to allocate Buffer larger than maximum ' + + 'size: 0x' + kMaxLength().toString(16) + ' bytes') + } + return length | 0 +} + +function SlowBuffer (length) { + if (+length != length) { // eslint-disable-line eqeqeq + length = 0 + } + return Buffer.alloc(+length) +} + +Buffer.isBuffer = function isBuffer (b) { + return !!(b != null && b._isBuffer) +} + +Buffer.compare = function compare (a, b) { + if (!Buffer.isBuffer(a) || !Buffer.isBuffer(b)) { + throw new TypeError('Arguments must be Buffers') + } + + if (a === b) return 0 + + var x = a.length + var y = b.length + + for (var i = 0, len = Math.min(x, y); i < len; ++i) { + if (a[i] !== b[i]) { + x = a[i] + y = b[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +Buffer.isEncoding = function isEncoding (encoding) { + switch (String(encoding).toLowerCase()) { + case 'hex': + case 'utf8': + case 'utf-8': + case 'ascii': + case 'latin1': + case 'binary': + case 'base64': + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return true + default: + return false + } +} + +Buffer.concat = function concat (list, length) { + if (!isArray(list)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + + if (list.length === 0) { + return Buffer.alloc(0) + } + + var i + if (length === undefined) { + length = 0 + for (i = 0; i < list.length; ++i) { + length += list[i].length + } + } + + var buffer = Buffer.allocUnsafe(length) + var pos = 0 + for (i = 0; i < list.length; ++i) { + var buf = list[i] + if (!Buffer.isBuffer(buf)) { + throw new TypeError('"list" argument must be an Array of Buffers') + } + buf.copy(buffer, pos) + pos += buf.length + } + return buffer +} + +function byteLength (string, encoding) { + if (Buffer.isBuffer(string)) { + return string.length + } + if (typeof ArrayBuffer !== 'undefined' && typeof ArrayBuffer.isView === 'function' && + (ArrayBuffer.isView(string) || string instanceof ArrayBuffer)) { + return string.byteLength + } + if (typeof string !== 'string') { + string = '' + string + } + + var len = string.length + if (len === 0) return 0 + + // Use a for loop to avoid recursion + var loweredCase = false + for (;;) { + switch (encoding) { + case 'ascii': + case 'latin1': + case 'binary': + return len + case 'utf8': + case 'utf-8': + case undefined: + return utf8ToBytes(string).length + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return len * 2 + case 'hex': + return len >>> 1 + case 'base64': + return base64ToBytes(string).length + default: + if (loweredCase) return utf8ToBytes(string).length // assume utf8 + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} +Buffer.byteLength = byteLength + +function slowToString (encoding, start, end) { + var loweredCase = false + + // No need to verify that "this.length <= MAX_UINT32" since it's a read-only + // property of a typed array. + + // This behaves neither like String nor Uint8Array in that we set start/end + // to their upper/lower bounds if the value passed is out of range. + // undefined is handled specially as per ECMA-262 6th Edition, + // Section 13.3.3.7 Runtime Semantics: KeyedBindingInitialization. + if (start === undefined || start < 0) { + start = 0 + } + // Return early if start > this.length. Done here to prevent potential uint32 + // coercion fail below. + if (start > this.length) { + return '' + } + + if (end === undefined || end > this.length) { + end = this.length + } + + if (end <= 0) { + return '' + } + + // Force coersion to uint32. This will also coerce falsey/NaN values to 0. + end >>>= 0 + start >>>= 0 + + if (end <= start) { + return '' + } + + if (!encoding) encoding = 'utf8' + + while (true) { + switch (encoding) { + case 'hex': + return hexSlice(this, start, end) + + case 'utf8': + case 'utf-8': + return utf8Slice(this, start, end) + + case 'ascii': + return asciiSlice(this, start, end) + + case 'latin1': + case 'binary': + return latin1Slice(this, start, end) + + case 'base64': + return base64Slice(this, start, end) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return utf16leSlice(this, start, end) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = (encoding + '').toLowerCase() + loweredCase = true + } + } +} + +// The property is used by `Buffer.isBuffer` and `is-buffer` (in Safari 5-7) to detect +// Buffer instances. +Buffer.prototype._isBuffer = true + +function swap (b, n, m) { + var i = b[n] + b[n] = b[m] + b[m] = i +} + +Buffer.prototype.swap16 = function swap16 () { + var len = this.length + if (len % 2 !== 0) { + throw new RangeError('Buffer size must be a multiple of 16-bits') + } + for (var i = 0; i < len; i += 2) { + swap(this, i, i + 1) + } + return this +} + +Buffer.prototype.swap32 = function swap32 () { + var len = this.length + if (len % 4 !== 0) { + throw new RangeError('Buffer size must be a multiple of 32-bits') + } + for (var i = 0; i < len; i += 4) { + swap(this, i, i + 3) + swap(this, i + 1, i + 2) + } + return this +} + +Buffer.prototype.swap64 = function swap64 () { + var len = this.length + if (len % 8 !== 0) { + throw new RangeError('Buffer size must be a multiple of 64-bits') + } + for (var i = 0; i < len; i += 8) { + swap(this, i, i + 7) + swap(this, i + 1, i + 6) + swap(this, i + 2, i + 5) + swap(this, i + 3, i + 4) + } + return this +} + +Buffer.prototype.toString = function toString () { + var length = this.length | 0 + if (length === 0) return '' + if (arguments.length === 0) return utf8Slice(this, 0, length) + return slowToString.apply(this, arguments) +} + +Buffer.prototype.equals = function equals (b) { + if (!Buffer.isBuffer(b)) throw new TypeError('Argument must be a Buffer') + if (this === b) return true + return Buffer.compare(this, b) === 0 +} + +Buffer.prototype.inspect = function inspect () { + var str = '' + var max = exports.INSPECT_MAX_BYTES + if (this.length > 0) { + str = this.toString('hex', 0, max).match(/.{2}/g).join(' ') + if (this.length > max) str += ' ... ' + } + return '' +} + +Buffer.prototype.compare = function compare (target, start, end, thisStart, thisEnd) { + if (!Buffer.isBuffer(target)) { + throw new TypeError('Argument must be a Buffer') + } + + if (start === undefined) { + start = 0 + } + if (end === undefined) { + end = target ? target.length : 0 + } + if (thisStart === undefined) { + thisStart = 0 + } + if (thisEnd === undefined) { + thisEnd = this.length + } + + if (start < 0 || end > target.length || thisStart < 0 || thisEnd > this.length) { + throw new RangeError('out of range index') + } + + if (thisStart >= thisEnd && start >= end) { + return 0 + } + if (thisStart >= thisEnd) { + return -1 + } + if (start >= end) { + return 1 + } + + start >>>= 0 + end >>>= 0 + thisStart >>>= 0 + thisEnd >>>= 0 + + if (this === target) return 0 + + var x = thisEnd - thisStart + var y = end - start + var len = Math.min(x, y) + + var thisCopy = this.slice(thisStart, thisEnd) + var targetCopy = target.slice(start, end) + + for (var i = 0; i < len; ++i) { + if (thisCopy[i] !== targetCopy[i]) { + x = thisCopy[i] + y = targetCopy[i] + break + } + } + + if (x < y) return -1 + if (y < x) return 1 + return 0 +} + +// Finds either the first index of `val` in `buffer` at offset >= `byteOffset`, +// OR the last index of `val` in `buffer` at offset <= `byteOffset`. +// +// Arguments: +// - buffer - a Buffer to search +// - val - a string, Buffer, or number +// - byteOffset - an index into `buffer`; will be clamped to an int32 +// - encoding - an optional encoding, relevant is val is a string +// - dir - true for indexOf, false for lastIndexOf +function bidirectionalIndexOf (buffer, val, byteOffset, encoding, dir) { + // Empty buffer means no match + if (buffer.length === 0) return -1 + + // Normalize byteOffset + if (typeof byteOffset === 'string') { + encoding = byteOffset + byteOffset = 0 + } else if (byteOffset > 0x7fffffff) { + byteOffset = 0x7fffffff + } else if (byteOffset < -0x80000000) { + byteOffset = -0x80000000 + } + byteOffset = +byteOffset // Coerce to Number. + if (isNaN(byteOffset)) { + // byteOffset: it it's undefined, null, NaN, "foo", etc, search whole buffer + byteOffset = dir ? 0 : (buffer.length - 1) + } + + // Normalize byteOffset: negative offsets start from the end of the buffer + if (byteOffset < 0) byteOffset = buffer.length + byteOffset + if (byteOffset >= buffer.length) { + if (dir) return -1 + else byteOffset = buffer.length - 1 + } else if (byteOffset < 0) { + if (dir) byteOffset = 0 + else return -1 + } + + // Normalize val + if (typeof val === 'string') { + val = Buffer.from(val, encoding) + } + + // Finally, search either indexOf (if dir is true) or lastIndexOf + if (Buffer.isBuffer(val)) { + // Special case: looking for empty string/buffer always fails + if (val.length === 0) { + return -1 + } + return arrayIndexOf(buffer, val, byteOffset, encoding, dir) + } else if (typeof val === 'number') { + val = val & 0xFF // Search for a byte value [0-255] + if (Buffer.TYPED_ARRAY_SUPPORT && + typeof Uint8Array.prototype.indexOf === 'function') { + if (dir) { + return Uint8Array.prototype.indexOf.call(buffer, val, byteOffset) + } else { + return Uint8Array.prototype.lastIndexOf.call(buffer, val, byteOffset) + } + } + return arrayIndexOf(buffer, [ val ], byteOffset, encoding, dir) + } + + throw new TypeError('val must be string, number or Buffer') +} + +function arrayIndexOf (arr, val, byteOffset, encoding, dir) { + var indexSize = 1 + var arrLength = arr.length + var valLength = val.length + + if (encoding !== undefined) { + encoding = String(encoding).toLowerCase() + if (encoding === 'ucs2' || encoding === 'ucs-2' || + encoding === 'utf16le' || encoding === 'utf-16le') { + if (arr.length < 2 || val.length < 2) { + return -1 + } + indexSize = 2 + arrLength /= 2 + valLength /= 2 + byteOffset /= 2 + } + } + + function read (buf, i) { + if (indexSize === 1) { + return buf[i] + } else { + return buf.readUInt16BE(i * indexSize) + } + } + + var i + if (dir) { + var foundIndex = -1 + for (i = byteOffset; i < arrLength; i++) { + if (read(arr, i) === read(val, foundIndex === -1 ? 0 : i - foundIndex)) { + if (foundIndex === -1) foundIndex = i + if (i - foundIndex + 1 === valLength) return foundIndex * indexSize + } else { + if (foundIndex !== -1) i -= i - foundIndex + foundIndex = -1 + } + } + } else { + if (byteOffset + valLength > arrLength) byteOffset = arrLength - valLength + for (i = byteOffset; i >= 0; i--) { + var found = true + for (var j = 0; j < valLength; j++) { + if (read(arr, i + j) !== read(val, j)) { + found = false + break + } + } + if (found) return i + } + } + + return -1 +} + +Buffer.prototype.includes = function includes (val, byteOffset, encoding) { + return this.indexOf(val, byteOffset, encoding) !== -1 +} + +Buffer.prototype.indexOf = function indexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, true) +} + +Buffer.prototype.lastIndexOf = function lastIndexOf (val, byteOffset, encoding) { + return bidirectionalIndexOf(this, val, byteOffset, encoding, false) +} + +function hexWrite (buf, string, offset, length) { + offset = Number(offset) || 0 + var remaining = buf.length - offset + if (!length) { + length = remaining + } else { + length = Number(length) + if (length > remaining) { + length = remaining + } + } + + // must be an even number of digits + var strLen = string.length + if (strLen % 2 !== 0) throw new TypeError('Invalid hex string') + + if (length > strLen / 2) { + length = strLen / 2 + } + for (var i = 0; i < length; ++i) { + var parsed = parseInt(string.substr(i * 2, 2), 16) + if (isNaN(parsed)) return i + buf[offset + i] = parsed + } + return i +} + +function utf8Write (buf, string, offset, length) { + return blitBuffer(utf8ToBytes(string, buf.length - offset), buf, offset, length) +} + +function asciiWrite (buf, string, offset, length) { + return blitBuffer(asciiToBytes(string), buf, offset, length) +} + +function latin1Write (buf, string, offset, length) { + return asciiWrite(buf, string, offset, length) +} + +function base64Write (buf, string, offset, length) { + return blitBuffer(base64ToBytes(string), buf, offset, length) +} + +function ucs2Write (buf, string, offset, length) { + return blitBuffer(utf16leToBytes(string, buf.length - offset), buf, offset, length) +} + +Buffer.prototype.write = function write (string, offset, length, encoding) { + // Buffer#write(string) + if (offset === undefined) { + encoding = 'utf8' + length = this.length + offset = 0 + // Buffer#write(string, encoding) + } else if (length === undefined && typeof offset === 'string') { + encoding = offset + length = this.length + offset = 0 + // Buffer#write(string, offset[, length][, encoding]) + } else if (isFinite(offset)) { + offset = offset | 0 + if (isFinite(length)) { + length = length | 0 + if (encoding === undefined) encoding = 'utf8' + } else { + encoding = length + length = undefined + } + // legacy write(string, encoding, offset, length) - remove in v0.13 + } else { + throw new Error( + 'Buffer.write(string, encoding, offset[, length]) is no longer supported' + ) + } + + var remaining = this.length - offset + if (length === undefined || length > remaining) length = remaining + + if ((string.length > 0 && (length < 0 || offset < 0)) || offset > this.length) { + throw new RangeError('Attempt to write outside buffer bounds') + } + + if (!encoding) encoding = 'utf8' + + var loweredCase = false + for (;;) { + switch (encoding) { + case 'hex': + return hexWrite(this, string, offset, length) + + case 'utf8': + case 'utf-8': + return utf8Write(this, string, offset, length) + + case 'ascii': + return asciiWrite(this, string, offset, length) + + case 'latin1': + case 'binary': + return latin1Write(this, string, offset, length) + + case 'base64': + // Warning: maxLength not taken into account in base64Write + return base64Write(this, string, offset, length) + + case 'ucs2': + case 'ucs-2': + case 'utf16le': + case 'utf-16le': + return ucs2Write(this, string, offset, length) + + default: + if (loweredCase) throw new TypeError('Unknown encoding: ' + encoding) + encoding = ('' + encoding).toLowerCase() + loweredCase = true + } + } +} + +Buffer.prototype.toJSON = function toJSON () { + return { + type: 'Buffer', + data: Array.prototype.slice.call(this._arr || this, 0) + } +} + +function base64Slice (buf, start, end) { + if (start === 0 && end === buf.length) { + return base64.fromByteArray(buf) + } else { + return base64.fromByteArray(buf.slice(start, end)) + } +} + +function utf8Slice (buf, start, end) { + end = Math.min(buf.length, end) + var res = [] + + var i = start + while (i < end) { + var firstByte = buf[i] + var codePoint = null + var bytesPerSequence = (firstByte > 0xEF) ? 4 + : (firstByte > 0xDF) ? 3 + : (firstByte > 0xBF) ? 2 + : 1 + + if (i + bytesPerSequence <= end) { + var secondByte, thirdByte, fourthByte, tempCodePoint + + switch (bytesPerSequence) { + case 1: + if (firstByte < 0x80) { + codePoint = firstByte + } + break + case 2: + secondByte = buf[i + 1] + if ((secondByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0x1F) << 0x6 | (secondByte & 0x3F) + if (tempCodePoint > 0x7F) { + codePoint = tempCodePoint + } + } + break + case 3: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0xC | (secondByte & 0x3F) << 0x6 | (thirdByte & 0x3F) + if (tempCodePoint > 0x7FF && (tempCodePoint < 0xD800 || tempCodePoint > 0xDFFF)) { + codePoint = tempCodePoint + } + } + break + case 4: + secondByte = buf[i + 1] + thirdByte = buf[i + 2] + fourthByte = buf[i + 3] + if ((secondByte & 0xC0) === 0x80 && (thirdByte & 0xC0) === 0x80 && (fourthByte & 0xC0) === 0x80) { + tempCodePoint = (firstByte & 0xF) << 0x12 | (secondByte & 0x3F) << 0xC | (thirdByte & 0x3F) << 0x6 | (fourthByte & 0x3F) + if (tempCodePoint > 0xFFFF && tempCodePoint < 0x110000) { + codePoint = tempCodePoint + } + } + } + } + + if (codePoint === null) { + // we did not generate a valid codePoint so insert a + // replacement char (U+FFFD) and advance only 1 byte + codePoint = 0xFFFD + bytesPerSequence = 1 + } else if (codePoint > 0xFFFF) { + // encode to utf16 (surrogate pair dance) + codePoint -= 0x10000 + res.push(codePoint >>> 10 & 0x3FF | 0xD800) + codePoint = 0xDC00 | codePoint & 0x3FF + } + + res.push(codePoint) + i += bytesPerSequence + } + + return decodeCodePointsArray(res) +} + +// Based on http://stackoverflow.com/a/22747272/680742, the browser with +// the lowest limit is Chrome, with 0x10000 args. +// We go 1 magnitude less, for safety +var MAX_ARGUMENTS_LENGTH = 0x1000 + +function decodeCodePointsArray (codePoints) { + var len = codePoints.length + if (len <= MAX_ARGUMENTS_LENGTH) { + return String.fromCharCode.apply(String, codePoints) // avoid extra slice() + } + + // Decode in chunks to avoid "call stack size exceeded". + var res = '' + var i = 0 + while (i < len) { + res += String.fromCharCode.apply( + String, + codePoints.slice(i, i += MAX_ARGUMENTS_LENGTH) + ) + } + return res +} + +function asciiSlice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i] & 0x7F) + } + return ret +} + +function latin1Slice (buf, start, end) { + var ret = '' + end = Math.min(buf.length, end) + + for (var i = start; i < end; ++i) { + ret += String.fromCharCode(buf[i]) + } + return ret +} + +function hexSlice (buf, start, end) { + var len = buf.length + + if (!start || start < 0) start = 0 + if (!end || end < 0 || end > len) end = len + + var out = '' + for (var i = start; i < end; ++i) { + out += toHex(buf[i]) + } + return out +} + +function utf16leSlice (buf, start, end) { + var bytes = buf.slice(start, end) + var res = '' + for (var i = 0; i < bytes.length; i += 2) { + res += String.fromCharCode(bytes[i] + bytes[i + 1] * 256) + } + return res +} + +Buffer.prototype.slice = function slice (start, end) { + var len = this.length + start = ~~start + end = end === undefined ? len : ~~end + + if (start < 0) { + start += len + if (start < 0) start = 0 + } else if (start > len) { + start = len + } + + if (end < 0) { + end += len + if (end < 0) end = 0 + } else if (end > len) { + end = len + } + + if (end < start) end = start + + var newBuf + if (Buffer.TYPED_ARRAY_SUPPORT) { + newBuf = this.subarray(start, end) + newBuf.__proto__ = Buffer.prototype + } else { + var sliceLen = end - start + newBuf = new Buffer(sliceLen, undefined) + for (var i = 0; i < sliceLen; ++i) { + newBuf[i] = this[i + start] + } + } + + return newBuf +} + +/* + * Need to make sure that buffer isn't trying to write out of bounds. + */ +function checkOffset (offset, ext, length) { + if ((offset % 1) !== 0 || offset < 0) throw new RangeError('offset is not uint') + if (offset + ext > length) throw new RangeError('Trying to access beyond buffer length') +} + +Buffer.prototype.readUIntLE = function readUIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + + return val +} + +Buffer.prototype.readUIntBE = function readUIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + checkOffset(offset, byteLength, this.length) + } + + var val = this[offset + --byteLength] + var mul = 1 + while (byteLength > 0 && (mul *= 0x100)) { + val += this[offset + --byteLength] * mul + } + + return val +} + +Buffer.prototype.readUInt8 = function readUInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + return this[offset] +} + +Buffer.prototype.readUInt16LE = function readUInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return this[offset] | (this[offset + 1] << 8) +} + +Buffer.prototype.readUInt16BE = function readUInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + return (this[offset] << 8) | this[offset + 1] +} + +Buffer.prototype.readUInt32LE = function readUInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return ((this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16)) + + (this[offset + 3] * 0x1000000) +} + +Buffer.prototype.readUInt32BE = function readUInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] * 0x1000000) + + ((this[offset + 1] << 16) | + (this[offset + 2] << 8) | + this[offset + 3]) +} + +Buffer.prototype.readIntLE = function readIntLE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var val = this[offset] + var mul = 1 + var i = 0 + while (++i < byteLength && (mul *= 0x100)) { + val += this[offset + i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readIntBE = function readIntBE (offset, byteLength, noAssert) { + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) checkOffset(offset, byteLength, this.length) + + var i = byteLength + var mul = 1 + var val = this[offset + --i] + while (i > 0 && (mul *= 0x100)) { + val += this[offset + --i] * mul + } + mul *= 0x80 + + if (val >= mul) val -= Math.pow(2, 8 * byteLength) + + return val +} + +Buffer.prototype.readInt8 = function readInt8 (offset, noAssert) { + if (!noAssert) checkOffset(offset, 1, this.length) + if (!(this[offset] & 0x80)) return (this[offset]) + return ((0xff - this[offset] + 1) * -1) +} + +Buffer.prototype.readInt16LE = function readInt16LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset] | (this[offset + 1] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt16BE = function readInt16BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 2, this.length) + var val = this[offset + 1] | (this[offset] << 8) + return (val & 0x8000) ? val | 0xFFFF0000 : val +} + +Buffer.prototype.readInt32LE = function readInt32LE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset]) | + (this[offset + 1] << 8) | + (this[offset + 2] << 16) | + (this[offset + 3] << 24) +} + +Buffer.prototype.readInt32BE = function readInt32BE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + + return (this[offset] << 24) | + (this[offset + 1] << 16) | + (this[offset + 2] << 8) | + (this[offset + 3]) +} + +Buffer.prototype.readFloatLE = function readFloatLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, true, 23, 4) +} + +Buffer.prototype.readFloatBE = function readFloatBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 4, this.length) + return ieee754.read(this, offset, false, 23, 4) +} + +Buffer.prototype.readDoubleLE = function readDoubleLE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, true, 52, 8) +} + +Buffer.prototype.readDoubleBE = function readDoubleBE (offset, noAssert) { + if (!noAssert) checkOffset(offset, 8, this.length) + return ieee754.read(this, offset, false, 52, 8) +} + +function checkInt (buf, value, offset, ext, max, min) { + if (!Buffer.isBuffer(buf)) throw new TypeError('"buffer" argument must be a Buffer instance') + if (value > max || value < min) throw new RangeError('"value" argument is out of bounds') + if (offset + ext > buf.length) throw new RangeError('Index out of range') +} + +Buffer.prototype.writeUIntLE = function writeUIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var mul = 1 + var i = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUIntBE = function writeUIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + byteLength = byteLength | 0 + if (!noAssert) { + var maxBytes = Math.pow(2, 8 * byteLength) - 1 + checkInt(this, value, offset, byteLength, maxBytes, 0) + } + + var i = byteLength - 1 + var mul = 1 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + this[offset + i] = (value / mul) & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeUInt8 = function writeUInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0xff, 0) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + this[offset] = (value & 0xff) + return offset + 1 +} + +function objectWriteUInt16 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 2); i < j; ++i) { + buf[offset + i] = (value & (0xff << (8 * (littleEndian ? i : 1 - i)))) >>> + (littleEndian ? i : 1 - i) * 8 + } +} + +Buffer.prototype.writeUInt16LE = function writeUInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeUInt16BE = function writeUInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0xffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +function objectWriteUInt32 (buf, value, offset, littleEndian) { + if (value < 0) value = 0xffffffff + value + 1 + for (var i = 0, j = Math.min(buf.length - offset, 4); i < j; ++i) { + buf[offset + i] = (value >>> (littleEndian ? i : 3 - i) * 8) & 0xff + } +} + +Buffer.prototype.writeUInt32LE = function writeUInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset + 3] = (value >>> 24) + this[offset + 2] = (value >>> 16) + this[offset + 1] = (value >>> 8) + this[offset] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeUInt32BE = function writeUInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0xffffffff, 0) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +Buffer.prototype.writeIntLE = function writeIntLE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = 0 + var mul = 1 + var sub = 0 + this[offset] = value & 0xFF + while (++i < byteLength && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i - 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeIntBE = function writeIntBE (value, offset, byteLength, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) { + var limit = Math.pow(2, 8 * byteLength - 1) + + checkInt(this, value, offset, byteLength, limit - 1, -limit) + } + + var i = byteLength - 1 + var mul = 1 + var sub = 0 + this[offset + i] = value & 0xFF + while (--i >= 0 && (mul *= 0x100)) { + if (value < 0 && sub === 0 && this[offset + i + 1] !== 0) { + sub = 1 + } + this[offset + i] = ((value / mul) >> 0) - sub & 0xFF + } + + return offset + byteLength +} + +Buffer.prototype.writeInt8 = function writeInt8 (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 1, 0x7f, -0x80) + if (!Buffer.TYPED_ARRAY_SUPPORT) value = Math.floor(value) + if (value < 0) value = 0xff + value + 1 + this[offset] = (value & 0xff) + return offset + 1 +} + +Buffer.prototype.writeInt16LE = function writeInt16LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + } else { + objectWriteUInt16(this, value, offset, true) + } + return offset + 2 +} + +Buffer.prototype.writeInt16BE = function writeInt16BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 2, 0x7fff, -0x8000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 8) + this[offset + 1] = (value & 0xff) + } else { + objectWriteUInt16(this, value, offset, false) + } + return offset + 2 +} + +Buffer.prototype.writeInt32LE = function writeInt32LE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value & 0xff) + this[offset + 1] = (value >>> 8) + this[offset + 2] = (value >>> 16) + this[offset + 3] = (value >>> 24) + } else { + objectWriteUInt32(this, value, offset, true) + } + return offset + 4 +} + +Buffer.prototype.writeInt32BE = function writeInt32BE (value, offset, noAssert) { + value = +value + offset = offset | 0 + if (!noAssert) checkInt(this, value, offset, 4, 0x7fffffff, -0x80000000) + if (value < 0) value = 0xffffffff + value + 1 + if (Buffer.TYPED_ARRAY_SUPPORT) { + this[offset] = (value >>> 24) + this[offset + 1] = (value >>> 16) + this[offset + 2] = (value >>> 8) + this[offset + 3] = (value & 0xff) + } else { + objectWriteUInt32(this, value, offset, false) + } + return offset + 4 +} + +function checkIEEE754 (buf, value, offset, ext, max, min) { + if (offset + ext > buf.length) throw new RangeError('Index out of range') + if (offset < 0) throw new RangeError('Index out of range') +} + +function writeFloat (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 4, 3.4028234663852886e+38, -3.4028234663852886e+38) + } + ieee754.write(buf, value, offset, littleEndian, 23, 4) + return offset + 4 +} + +Buffer.prototype.writeFloatLE = function writeFloatLE (value, offset, noAssert) { + return writeFloat(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeFloatBE = function writeFloatBE (value, offset, noAssert) { + return writeFloat(this, value, offset, false, noAssert) +} + +function writeDouble (buf, value, offset, littleEndian, noAssert) { + if (!noAssert) { + checkIEEE754(buf, value, offset, 8, 1.7976931348623157E+308, -1.7976931348623157E+308) + } + ieee754.write(buf, value, offset, littleEndian, 52, 8) + return offset + 8 +} + +Buffer.prototype.writeDoubleLE = function writeDoubleLE (value, offset, noAssert) { + return writeDouble(this, value, offset, true, noAssert) +} + +Buffer.prototype.writeDoubleBE = function writeDoubleBE (value, offset, noAssert) { + return writeDouble(this, value, offset, false, noAssert) +} + +// copy(targetBuffer, targetStart=0, sourceStart=0, sourceEnd=buffer.length) +Buffer.prototype.copy = function copy (target, targetStart, start, end) { + if (!start) start = 0 + if (!end && end !== 0) end = this.length + if (targetStart >= target.length) targetStart = target.length + if (!targetStart) targetStart = 0 + if (end > 0 && end < start) end = start + + // Copy 0 bytes; we're done + if (end === start) return 0 + if (target.length === 0 || this.length === 0) return 0 + + // Fatal error conditions + if (targetStart < 0) { + throw new RangeError('targetStart out of bounds') + } + if (start < 0 || start >= this.length) throw new RangeError('sourceStart out of bounds') + if (end < 0) throw new RangeError('sourceEnd out of bounds') + + // Are we oob? + if (end > this.length) end = this.length + if (target.length - targetStart < end - start) { + end = target.length - targetStart + start + } + + var len = end - start + var i + + if (this === target && start < targetStart && targetStart < end) { + // descending copy from end + for (i = len - 1; i >= 0; --i) { + target[i + targetStart] = this[i + start] + } + } else if (len < 1000 || !Buffer.TYPED_ARRAY_SUPPORT) { + // ascending copy from start + for (i = 0; i < len; ++i) { + target[i + targetStart] = this[i + start] + } + } else { + Uint8Array.prototype.set.call( + target, + this.subarray(start, start + len), + targetStart + ) + } + + return len +} + +// Usage: +// buffer.fill(number[, offset[, end]]) +// buffer.fill(buffer[, offset[, end]]) +// buffer.fill(string[, offset[, end]][, encoding]) +Buffer.prototype.fill = function fill (val, start, end, encoding) { + // Handle string cases: + if (typeof val === 'string') { + if (typeof start === 'string') { + encoding = start + start = 0 + end = this.length + } else if (typeof end === 'string') { + encoding = end + end = this.length + } + if (val.length === 1) { + var code = val.charCodeAt(0) + if (code < 256) { + val = code + } + } + if (encoding !== undefined && typeof encoding !== 'string') { + throw new TypeError('encoding must be a string') + } + if (typeof encoding === 'string' && !Buffer.isEncoding(encoding)) { + throw new TypeError('Unknown encoding: ' + encoding) + } + } else if (typeof val === 'number') { + val = val & 255 + } + + // Invalid ranges are not set to a default, so can range check early. + if (start < 0 || this.length < start || this.length < end) { + throw new RangeError('Out of range index') + } + + if (end <= start) { + return this + } + + start = start >>> 0 + end = end === undefined ? this.length : end >>> 0 + + if (!val) val = 0 + + var i + if (typeof val === 'number') { + for (i = start; i < end; ++i) { + this[i] = val + } + } else { + var bytes = Buffer.isBuffer(val) + ? val + : utf8ToBytes(new Buffer(val, encoding).toString()) + var len = bytes.length + for (i = 0; i < end - start; ++i) { + this[i + start] = bytes[i % len] + } + } + + return this +} + +// HELPER FUNCTIONS +// ================ + +var INVALID_BASE64_RE = /[^+\/0-9A-Za-z-_]/g + +function base64clean (str) { + // Node strips out invalid characters like \n and \t from the string, base64-js does not + str = stringtrim(str).replace(INVALID_BASE64_RE, '') + // Node converts strings with length < 2 to '' + if (str.length < 2) return '' + // Node allows for non-padded base64 strings (missing trailing ===), base64-js does not + while (str.length % 4 !== 0) { + str = str + '=' + } + return str +} + +function stringtrim (str) { + if (str.trim) return str.trim() + return str.replace(/^\s+|\s+$/g, '') +} + +function toHex (n) { + if (n < 16) return '0' + n.toString(16) + return n.toString(16) +} + +function utf8ToBytes (string, units) { + units = units || Infinity + var codePoint + var length = string.length + var leadSurrogate = null + var bytes = [] + + for (var i = 0; i < length; ++i) { + codePoint = string.charCodeAt(i) + + // is surrogate component + if (codePoint > 0xD7FF && codePoint < 0xE000) { + // last char was a lead + if (!leadSurrogate) { + // no lead yet + if (codePoint > 0xDBFF) { + // unexpected trail + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } else if (i + 1 === length) { + // unpaired lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + continue + } + + // valid lead + leadSurrogate = codePoint + + continue + } + + // 2 leads in a row + if (codePoint < 0xDC00) { + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + leadSurrogate = codePoint + continue + } + + // valid surrogate pair + codePoint = (leadSurrogate - 0xD800 << 10 | codePoint - 0xDC00) + 0x10000 + } else if (leadSurrogate) { + // valid bmp char, but last char was a lead + if ((units -= 3) > -1) bytes.push(0xEF, 0xBF, 0xBD) + } + + leadSurrogate = null + + // encode utf8 + if (codePoint < 0x80) { + if ((units -= 1) < 0) break + bytes.push(codePoint) + } else if (codePoint < 0x800) { + if ((units -= 2) < 0) break + bytes.push( + codePoint >> 0x6 | 0xC0, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x10000) { + if ((units -= 3) < 0) break + bytes.push( + codePoint >> 0xC | 0xE0, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else if (codePoint < 0x110000) { + if ((units -= 4) < 0) break + bytes.push( + codePoint >> 0x12 | 0xF0, + codePoint >> 0xC & 0x3F | 0x80, + codePoint >> 0x6 & 0x3F | 0x80, + codePoint & 0x3F | 0x80 + ) + } else { + throw new Error('Invalid code point') + } + } + + return bytes +} + +function asciiToBytes (str) { + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + // Node's code seems to be doing this and not & 0x7F.. + byteArray.push(str.charCodeAt(i) & 0xFF) + } + return byteArray +} + +function utf16leToBytes (str, units) { + var c, hi, lo + var byteArray = [] + for (var i = 0; i < str.length; ++i) { + if ((units -= 2) < 0) break + + c = str.charCodeAt(i) + hi = c >> 8 + lo = c % 256 + byteArray.push(lo) + byteArray.push(hi) + } + + return byteArray +} + +function base64ToBytes (str) { + return base64.toByteArray(base64clean(str)) +} + +function blitBuffer (src, dst, offset, length) { + for (var i = 0; i < length; ++i) { + if ((i + offset >= dst.length) || (i >= src.length)) break + dst[i + offset] = src[i] + } + return i +} + +function isnan (val) { + return val !== val // eslint-disable-line no-self-compare +} + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{"base64-js":39,"ieee754":80,"isarray":83}],78:[function(require,module,exports){ +(function (Buffer){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// NOTE: These type checking functions intentionally don't use `instanceof` +// because it is fragile and can be easily faked with `Object.create()`. + +function isArray(arg) { + if (Array.isArray) { + return Array.isArray(arg); + } + return objectToString(arg) === '[object Array]'; +} +exports.isArray = isArray; + +function isBoolean(arg) { + return typeof arg === 'boolean'; +} +exports.isBoolean = isBoolean; + +function isNull(arg) { + return arg === null; +} +exports.isNull = isNull; + +function isNullOrUndefined(arg) { + return arg == null; +} +exports.isNullOrUndefined = isNullOrUndefined; + +function isNumber(arg) { + return typeof arg === 'number'; +} +exports.isNumber = isNumber; + +function isString(arg) { + return typeof arg === 'string'; +} +exports.isString = isString; + +function isSymbol(arg) { + return typeof arg === 'symbol'; +} +exports.isSymbol = isSymbol; + +function isUndefined(arg) { + return arg === void 0; +} +exports.isUndefined = isUndefined; + +function isRegExp(re) { + return objectToString(re) === '[object RegExp]'; +} +exports.isRegExp = isRegExp; + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} +exports.isObject = isObject; + +function isDate(d) { + return objectToString(d) === '[object Date]'; +} +exports.isDate = isDate; + +function isError(e) { + return (objectToString(e) === '[object Error]' || e instanceof Error); +} +exports.isError = isError; + +function isFunction(arg) { + return typeof arg === 'function'; +} +exports.isFunction = isFunction; + +function isPrimitive(arg) { + return arg === null || + typeof arg === 'boolean' || + typeof arg === 'number' || + typeof arg === 'string' || + typeof arg === 'symbol' || // ES6 symbol + typeof arg === 'undefined'; +} +exports.isPrimitive = isPrimitive; + +exports.isBuffer = Buffer.isBuffer; + +function objectToString(o) { + return Object.prototype.toString.call(o); +} + +}).call(this,{"isBuffer":require("../../is-buffer/index.js")}) +},{"../../is-buffer/index.js":82}],79:[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + // At least give some kind of context to the user + var err = new Error('Uncaught, unspecified "error" event. (' + er + ')'); + err.context = er; + throw err; + } + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + args = Array.prototype.slice.call(arguments, 1); + handler.apply(this, args); + } + } else if (isObject(handler)) { + args = Array.prototype.slice.call(arguments, 1); + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else if (listeners) { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.prototype.listenerCount = function(type) { + if (this._events) { + var evlistener = this._events[type]; + + if (isFunction(evlistener)) + return 1; + else if (evlistener) + return evlistener.length; + } + return 0; +}; + +EventEmitter.listenerCount = function(emitter, type) { + return emitter.listenerCount(type); +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}],80:[function(require,module,exports){ +exports.read = function (buffer, offset, isLE, mLen, nBytes) { + var e, m + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var nBits = -7 + var i = isLE ? (nBytes - 1) : 0 + var d = isLE ? -1 : 1 + var s = buffer[offset + i] + + i += d + + e = s & ((1 << (-nBits)) - 1) + s >>= (-nBits) + nBits += eLen + for (; nBits > 0; e = e * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + m = e & ((1 << (-nBits)) - 1) + e >>= (-nBits) + nBits += mLen + for (; nBits > 0; m = m * 256 + buffer[offset + i], i += d, nBits -= 8) {} + + if (e === 0) { + e = 1 - eBias + } else if (e === eMax) { + return m ? NaN : ((s ? -1 : 1) * Infinity) + } else { + m = m + Math.pow(2, mLen) + e = e - eBias + } + return (s ? -1 : 1) * m * Math.pow(2, e - mLen) +} + +exports.write = function (buffer, value, offset, isLE, mLen, nBytes) { + var e, m, c + var eLen = nBytes * 8 - mLen - 1 + var eMax = (1 << eLen) - 1 + var eBias = eMax >> 1 + var rt = (mLen === 23 ? Math.pow(2, -24) - Math.pow(2, -77) : 0) + var i = isLE ? 0 : (nBytes - 1) + var d = isLE ? 1 : -1 + var s = value < 0 || (value === 0 && 1 / value < 0) ? 1 : 0 + + value = Math.abs(value) + + if (isNaN(value) || value === Infinity) { + m = isNaN(value) ? 1 : 0 + e = eMax + } else { + e = Math.floor(Math.log(value) / Math.LN2) + if (value * (c = Math.pow(2, -e)) < 1) { + e-- + c *= 2 + } + if (e + eBias >= 1) { + value += rt / c + } else { + value += rt * Math.pow(2, 1 - eBias) + } + if (value * c >= 2) { + e++ + c /= 2 + } + + if (e + eBias >= eMax) { + m = 0 + e = eMax + } else if (e + eBias >= 1) { + m = (value * c - 1) * Math.pow(2, mLen) + e = e + eBias + } else { + m = value * Math.pow(2, eBias - 1) * Math.pow(2, mLen) + e = 0 + } + } + + for (; mLen >= 8; buffer[offset + i] = m & 0xff, i += d, m /= 256, mLen -= 8) {} + + e = (e << mLen) | m + eLen += mLen + for (; eLen > 0; buffer[offset + i] = e & 0xff, i += d, e /= 256, eLen -= 8) {} + + buffer[offset + i - d] |= s * 128 +} + +},{}],81:[function(require,module,exports){ +if (typeof Object.create === 'function') { + // implementation from standard node.js 'util' module + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + ctor.prototype = Object.create(superCtor.prototype, { + constructor: { + value: ctor, + enumerable: false, + writable: true, + configurable: true + } + }); + }; +} else { + // old school shim for old browsers + module.exports = function inherits(ctor, superCtor) { + ctor.super_ = superCtor + var TempCtor = function () {} + TempCtor.prototype = superCtor.prototype + ctor.prototype = new TempCtor() + ctor.prototype.constructor = ctor + } +} + +},{}],82:[function(require,module,exports){ +/*! + * Determine if an object is a Buffer + * + * @author Feross Aboukhadijeh + * @license MIT + */ + +// The _isBuffer check is for Safari 5-7 support, because it's missing +// Object.prototype.constructor. Remove this eventually +module.exports = function (obj) { + return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer) +} + +function isBuffer (obj) { + return !!obj.constructor && typeof obj.constructor.isBuffer === 'function' && obj.constructor.isBuffer(obj) +} + +// For Node v0.10 support. Remove this eventually. +function isSlowBuffer (obj) { + return typeof obj.readFloatLE === 'function' && typeof obj.slice === 'function' && isBuffer(obj.slice(0, 0)) +} + +},{}],83:[function(require,module,exports){ +var toString = {}.toString; + +module.exports = Array.isArray || function (arr) { + return toString.call(arr) == '[object Array]'; +}; + +},{}],84:[function(require,module,exports){ +'use strict'; +// private property +var _keyStr = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="; + + +// public method for encoding +exports.encode = function(input, utf8) { + var output = ""; + var chr1, chr2, chr3, enc1, enc2, enc3, enc4; + var i = 0; + + while (i < input.length) { + + chr1 = input.charCodeAt(i++); + chr2 = input.charCodeAt(i++); + chr3 = input.charCodeAt(i++); + + enc1 = chr1 >> 2; + enc2 = ((chr1 & 3) << 4) | (chr2 >> 4); + enc3 = ((chr2 & 15) << 2) | (chr3 >> 6); + enc4 = chr3 & 63; + + if (isNaN(chr2)) { + enc3 = enc4 = 64; + } + else if (isNaN(chr3)) { + enc4 = 64; + } + + output = output + _keyStr.charAt(enc1) + _keyStr.charAt(enc2) + _keyStr.charAt(enc3) + _keyStr.charAt(enc4); + + } + + return output; +}; + +// public method for decoding +exports.decode = function(input, utf8) { + var output = ""; + var chr1, chr2, chr3; + var enc1, enc2, enc3, enc4; + var i = 0; + + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, ""); + + while (i < input.length) { + + enc1 = _keyStr.indexOf(input.charAt(i++)); + enc2 = _keyStr.indexOf(input.charAt(i++)); + enc3 = _keyStr.indexOf(input.charAt(i++)); + enc4 = _keyStr.indexOf(input.charAt(i++)); + + chr1 = (enc1 << 2) | (enc2 >> 4); + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2); + chr3 = ((enc3 & 3) << 6) | enc4; + + output = output + String.fromCharCode(chr1); + + if (enc3 != 64) { + output = output + String.fromCharCode(chr2); + } + if (enc4 != 64) { + output = output + String.fromCharCode(chr3); + } + + } + + return output; + +}; + +},{}],85:[function(require,module,exports){ +'use strict'; +function CompressedObject() { + this.compressedSize = 0; + this.uncompressedSize = 0; + this.crc32 = 0; + this.compressionMethod = null; + this.compressedContent = null; +} + +CompressedObject.prototype = { + /** + * Return the decompressed content in an unspecified format. + * The format will depend on the decompressor. + * @return {Object} the decompressed content. + */ + getContent: function() { + return null; // see implementation + }, + /** + * Return the compressed content in an unspecified format. + * The format will depend on the compressed conten source. + * @return {Object} the compressed content. + */ + getCompressedContent: function() { + return null; // see implementation + } +}; +module.exports = CompressedObject; + +},{}],86:[function(require,module,exports){ +'use strict'; +exports.STORE = { + magic: "\x00\x00", + compress: function(content, compressionOptions) { + return content; // no compression + }, + uncompress: function(content) { + return content; // no compression + }, + compressInputType: null, + uncompressInputType: null +}; +exports.DEFLATE = require('./flate'); + +},{"./flate":91}],87:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +var table = [ + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, + 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, + 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, + 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, + 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, + 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, + 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, + 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, + 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, + 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, + 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, + 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, + 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, + 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, + 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, + 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, + 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, + 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, + 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, + 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, + 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, + 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, + 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, + 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, + 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, + 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, + 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, + 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, + 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, + 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, + 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, + 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, + 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, + 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, + 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, + 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, + 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, + 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, + 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, + 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, + 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, + 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, + 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, + 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, + 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, + 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, + 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, + 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, + 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D +]; + +/** + * + * Javascript crc32 + * http://www.webtoolkit.info/ + * + */ +module.exports = function crc32(input, crc) { + if (typeof input === "undefined" || !input.length) { + return 0; + } + + var isArray = utils.getTypeOf(input) !== "string"; + + if (typeof(crc) == "undefined") { + crc = 0; + } + var x = 0; + var y = 0; + var b = 0; + + crc = crc ^ (-1); + for (var i = 0, iTop = input.length; i < iTop; i++) { + b = isArray ? input[i] : input.charCodeAt(i); + y = (crc ^ b) & 0xFF; + x = table[y]; + crc = (crc >>> 8) ^ x; + } + + return crc ^ (-1); +}; +// vim: set shiftwidth=4 softtabstop=4: + +},{"./utils":104}],88:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); + +function DataReader(data) { + this.data = null; // type : see implementation + this.length = 0; + this.index = 0; +} +DataReader.prototype = { + /** + * Check that the offset will not go too far. + * @param {string} offset the additional offset to check. + * @throws {Error} an Error if the offset is out of bounds. + */ + checkOffset: function(offset) { + this.checkIndex(this.index + offset); + }, + /** + * Check that the specifed index will not be too far. + * @param {string} newIndex the index to check. + * @throws {Error} an Error if the index is out of bounds. + */ + checkIndex: function(newIndex) { + if (this.length < newIndex || newIndex < 0) { + throw new Error("End of data reached (data length = " + this.length + ", asked index = " + (newIndex) + "). Corrupted zip ?"); + } + }, + /** + * Change the index. + * @param {number} newIndex The new index. + * @throws {Error} if the new index is out of the data. + */ + setIndex: function(newIndex) { + this.checkIndex(newIndex); + this.index = newIndex; + }, + /** + * Skip the next n bytes. + * @param {number} n the number of bytes to skip. + * @throws {Error} if the new index is out of the data. + */ + skip: function(n) { + this.setIndex(this.index + n); + }, + /** + * Get the byte at the specified index. + * @param {number} i the index to use. + * @return {number} a byte. + */ + byteAt: function(i) { + // see implementations + }, + /** + * Get the next number with a given byte size. + * @param {number} size the number of bytes to read. + * @return {number} the corresponding number. + */ + readInt: function(size) { + var result = 0, + i; + this.checkOffset(size); + for (i = this.index + size - 1; i >= this.index; i--) { + result = (result << 8) + this.byteAt(i); + } + this.index += size; + return result; + }, + /** + * Get the next string with a given byte size. + * @param {number} size the number of bytes to read. + * @return {string} the corresponding string. + */ + readString: function(size) { + return utils.transformTo("string", this.readData(size)); + }, + /** + * Get raw data without conversion, bytes. + * @param {number} size the number of bytes to read. + * @return {Object} the raw data, implementation specific. + */ + readData: function(size) { + // see implementations + }, + /** + * Find the last occurence of a zip signature (4 bytes). + * @param {string} sig the signature to find. + * @return {number} the index of the last occurence, -1 if not found. + */ + lastIndexOfSignature: function(sig) { + // see implementations + }, + /** + * Get the next date. + * @return {Date} the date. + */ + readDate: function() { + var dostime = this.readInt(4); + return new Date( + ((dostime >> 25) & 0x7f) + 1980, // year + ((dostime >> 21) & 0x0f) - 1, // month + (dostime >> 16) & 0x1f, // day + (dostime >> 11) & 0x1f, // hour + (dostime >> 5) & 0x3f, // minute + (dostime & 0x1f) << 1); // second + } +}; +module.exports = DataReader; + +},{"./utils":104}],89:[function(require,module,exports){ +'use strict'; +exports.base64 = false; +exports.binary = false; +exports.dir = false; +exports.createFolders = false; +exports.date = null; +exports.compression = null; +exports.compressionOptions = null; +exports.comment = null; +exports.unixPermissions = null; +exports.dosPermissions = null; + +},{}],90:[function(require,module,exports){ +'use strict'; +var utils = require('./utils'); + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.string2binary = function(str) { + return utils.string2binary(str); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.string2Uint8Array = function(str) { + return utils.transformTo("uint8array", str); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.uint8Array2String = function(array) { + return utils.transformTo("string", array); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.string2Blob = function(str) { + var buffer = utils.transformTo("arraybuffer", str); + return utils.arrayBuffer2Blob(buffer); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.arrayBuffer2Blob = function(buffer) { + return utils.arrayBuffer2Blob(buffer); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.transformTo = function(outputType, input) { + return utils.transformTo(outputType, input); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.getTypeOf = function(input) { + return utils.getTypeOf(input); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.checkSupport = function(type) { + return utils.checkSupport(type); +}; + +/** + * @deprecated + * This value will be removed in a future version without replacement. + */ +exports.MAX_VALUE_16BITS = utils.MAX_VALUE_16BITS; + +/** + * @deprecated + * This value will be removed in a future version without replacement. + */ +exports.MAX_VALUE_32BITS = utils.MAX_VALUE_32BITS; + + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.pretty = function(str) { + return utils.pretty(str); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.findCompression = function(compressionMethod) { + return utils.findCompression(compressionMethod); +}; + +/** + * @deprecated + * This function will be removed in a future version without replacement. + */ +exports.isRegExp = function (object) { + return utils.isRegExp(object); +}; + + +},{"./utils":104}],91:[function(require,module,exports){ +'use strict'; +var USE_TYPEDARRAY = (typeof Uint8Array !== 'undefined') && (typeof Uint16Array !== 'undefined') && (typeof Uint32Array !== 'undefined'); + +var pako = require("pako"); +exports.uncompressInputType = USE_TYPEDARRAY ? "uint8array" : "array"; +exports.compressInputType = USE_TYPEDARRAY ? "uint8array" : "array"; + +exports.magic = "\x08\x00"; +exports.compress = function(input, compressionOptions) { + return pako.deflateRaw(input, { + level : compressionOptions.level || -1 // default compression + }); +}; +exports.uncompress = function(input) { + return pako.inflateRaw(input); +}; + +},{"pako":120}],92:[function(require,module,exports){ +'use strict'; + +var base64 = require('./base64'); + +/** +Usage: + zip = new JSZip(); + zip.file("hello.txt", "Hello, World!").file("tempfile", "nothing"); + zip.folder("images").file("smile.gif", base64Data, {base64: true}); + zip.file("Xmas.txt", "Ho ho ho !", {date : new Date("December 25, 2007 00:00:01")}); + zip.remove("tempfile"); + + base64zip = zip.generate(); + +**/ + +/** + * Representation a of zip file in js + * @constructor + * @param {String=|ArrayBuffer=|Uint8Array=} data the data to load, if any (optional). + * @param {Object=} options the options for creating this objects (optional). + */ +function JSZip(data, options) { + // if this constructor isย used withoutย `new`, itย adds `new` beforeย itself: + if(!(this instanceof JSZip)) return new JSZip(data, options); + + // object containing the files : + // { + // "folder/" : {...}, + // "folder/data.txt" : {...} + // } + this.files = {}; + + this.comment = null; + + // Where we are in the hierarchy + this.root = ""; + if (data) { + this.load(data, options); + } + this.clone = function() { + var newObj = new JSZip(); + for (var i in this) { + if (typeof this[i] !== "function") { + newObj[i] = this[i]; + } + } + return newObj; + }; +} +JSZip.prototype = require('./object'); +JSZip.prototype.load = require('./load'); +JSZip.support = require('./support'); +JSZip.defaults = require('./defaults'); + +/** + * @deprecated + * This namespace will be removed in a future version without replacement. + */ +JSZip.utils = require('./deprecatedPublicUtils'); + +JSZip.base64 = { + /** + * @deprecated + * This method will be removed in a future version without replacement. + */ + encode : function(input) { + return base64.encode(input); + }, + /** + * @deprecated + * This method will be removed in a future version without replacement. + */ + decode : function(input) { + return base64.decode(input); + } +}; +JSZip.compressions = require('./compressions'); +module.exports = JSZip; + +},{"./base64":84,"./compressions":86,"./defaults":89,"./deprecatedPublicUtils":90,"./load":93,"./object":96,"./support":100}],93:[function(require,module,exports){ +'use strict'; +var base64 = require('./base64'); +var ZipEntries = require('./zipEntries'); +module.exports = function(data, options) { + var files, zipEntries, i, input; + options = options || {}; + if (options.base64) { + data = base64.decode(data); + } + + zipEntries = new ZipEntries(data, options); + files = zipEntries.files; + for (i = 0; i < files.length; i++) { + input = files[i]; + this.file(input.fileName, input.decompressed, { + binary: true, + optimizedBinaryString: true, + date: input.date, + dir: input.dir, + comment : input.fileComment.length ? input.fileComment : null, + unixPermissions : input.unixPermissions, + dosPermissions : input.dosPermissions, + createFolders: options.createFolders + }); + } + if (zipEntries.zipComment.length) { + this.comment = zipEntries.zipComment; + } + + return this; +}; + +},{"./base64":84,"./zipEntries":105}],94:[function(require,module,exports){ +(function (Buffer){ +'use strict'; +module.exports = function(data, encoding){ + return new Buffer(data, encoding); +}; +module.exports.test = function(b){ + return Buffer.isBuffer(b); +}; + +}).call(this,require("buffer").Buffer) +},{"buffer":77}],95:[function(require,module,exports){ +'use strict'; +var Uint8ArrayReader = require('./uint8ArrayReader'); + +function NodeBufferReader(data) { + this.data = data; + this.length = this.data.length; + this.index = 0; +} +NodeBufferReader.prototype = new Uint8ArrayReader(); + +/** + * @see DataReader.readData + */ +NodeBufferReader.prototype.readData = function(size) { + this.checkOffset(size); + var result = this.data.slice(this.index, this.index + size); + this.index += size; + return result; +}; +module.exports = NodeBufferReader; + +},{"./uint8ArrayReader":101}],96:[function(require,module,exports){ +'use strict'; +var support = require('./support'); +var utils = require('./utils'); +var crc32 = require('./crc32'); +var signature = require('./signature'); +var defaults = require('./defaults'); +var base64 = require('./base64'); +var compressions = require('./compressions'); +var CompressedObject = require('./compressedObject'); +var nodeBuffer = require('./nodeBuffer'); +var utf8 = require('./utf8'); +var StringWriter = require('./stringWriter'); +var Uint8ArrayWriter = require('./uint8ArrayWriter'); + +/** + * Returns the raw data of a ZipObject, decompress the content if necessary. + * @param {ZipObject} file the file to use. + * @return {String|ArrayBuffer|Uint8Array|Buffer} the data. + */ +var getRawData = function(file) { + if (file._data instanceof CompressedObject) { + file._data = file._data.getContent(); + file.options.binary = true; + file.options.base64 = false; + + if (utils.getTypeOf(file._data) === "uint8array") { + var copy = file._data; + // when reading an arraybuffer, the CompressedObject mechanism will keep it and subarray() a Uint8Array. + // if we request a file in the same format, we might get the same Uint8Array or its ArrayBuffer (the original zip file). + file._data = new Uint8Array(copy.length); + // with an empty Uint8Array, Opera fails with a "Offset larger than array size" + if (copy.length !== 0) { + file._data.set(copy, 0); + } + } + } + return file._data; +}; + +/** + * Returns the data of a ZipObject in a binary form. If the content is an unicode string, encode it. + * @param {ZipObject} file the file to use. + * @return {String|ArrayBuffer|Uint8Array|Buffer} the data. + */ +var getBinaryData = function(file) { + var result = getRawData(file), + type = utils.getTypeOf(result); + if (type === "string") { + if (!file.options.binary) { + // unicode text ! + // unicode string => binary string is a painful process, check if we can avoid it. + if (support.nodebuffer) { + return nodeBuffer(result, "utf-8"); + } + } + return file.asBinary(); + } + return result; +}; + +/** + * Transform this._data into a string. + * @param {function} filter a function String -> String, applied if not null on the result. + * @return {String} the string representing this._data. + */ +var dataToString = function(asUTF8) { + var result = getRawData(this); + if (result === null || typeof result === "undefined") { + return ""; + } + // if the data is a base64 string, we decode it before checking the encoding ! + if (this.options.base64) { + result = base64.decode(result); + } + if (asUTF8 && this.options.binary) { + // JSZip.prototype.utf8decode supports arrays as input + // skip to array => string step, utf8decode will do it. + result = out.utf8decode(result); + } + else { + // no utf8 transformation, do the array => string step. + result = utils.transformTo("string", result); + } + + if (!asUTF8 && !this.options.binary) { + result = utils.transformTo("string", out.utf8encode(result)); + } + return result; +}; +/** + * A simple object representing a file in the zip file. + * @constructor + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data + * @param {Object} options the options of the file + */ +var ZipObject = function(name, data, options) { + this.name = name; + this.dir = options.dir; + this.date = options.date; + this.comment = options.comment; + this.unixPermissions = options.unixPermissions; + this.dosPermissions = options.dosPermissions; + + this._data = data; + this.options = options; + + /* + * This object contains initial values for dir and date. + * With them, we can check if the user changed the deprecated metadata in + * `ZipObject#options` or not. + */ + this._initialMetadata = { + dir : options.dir, + date : options.date + }; +}; + +ZipObject.prototype = { + /** + * Return the content as UTF8 string. + * @return {string} the UTF8 string. + */ + asText: function() { + return dataToString.call(this, true); + }, + /** + * Returns the binary content. + * @return {string} the content as binary. + */ + asBinary: function() { + return dataToString.call(this, false); + }, + /** + * Returns the content as a nodejs Buffer. + * @return {Buffer} the content as a Buffer. + */ + asNodeBuffer: function() { + var result = getBinaryData(this); + return utils.transformTo("nodebuffer", result); + }, + /** + * Returns the content as an Uint8Array. + * @return {Uint8Array} the content as an Uint8Array. + */ + asUint8Array: function() { + var result = getBinaryData(this); + return utils.transformTo("uint8array", result); + }, + /** + * Returns the content as an ArrayBuffer. + * @return {ArrayBuffer} the content as an ArrayBufer. + */ + asArrayBuffer: function() { + return this.asUint8Array().buffer; + } +}; + +/** + * Transform an integer into a string in hexadecimal. + * @private + * @param {number} dec the number to convert. + * @param {number} bytes the number of bytes to generate. + * @returns {string} the result. + */ +var decToHex = function(dec, bytes) { + var hex = "", + i; + for (i = 0; i < bytes; i++) { + hex += String.fromCharCode(dec & 0xff); + dec = dec >>> 8; + } + return hex; +}; + +/** + * Merge the objects passed as parameters into a new one. + * @private + * @param {...Object} var_args All objects to merge. + * @return {Object} a new object with the data of the others. + */ +var extend = function() { + var result = {}, i, attr; + for (i = 0; i < arguments.length; i++) { // arguments is not enumerable in some browsers + for (attr in arguments[i]) { + if (arguments[i].hasOwnProperty(attr) && typeof result[attr] === "undefined") { + result[attr] = arguments[i][attr]; + } + } + } + return result; +}; + +/** + * Transforms the (incomplete) options from the user into the complete + * set of options to create a file. + * @private + * @param {Object} o the options from the user. + * @return {Object} the complete set of options. + */ +var prepareFileAttrs = function(o) { + o = o || {}; + if (o.base64 === true && (o.binary === null || o.binary === undefined)) { + o.binary = true; + } + o = extend(o, defaults); + o.date = o.date || new Date(); + if (o.compression !== null) o.compression = o.compression.toUpperCase(); + + return o; +}; + +/** + * Add a file in the current folder. + * @private + * @param {string} name the name of the file + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the data of the file + * @param {Object} o the options of the file + * @return {Object} the new file. + */ +var fileAdd = function(name, data, o) { + // be sure sub folders exist + var dataType = utils.getTypeOf(data), + parent; + + o = prepareFileAttrs(o); + + if (typeof o.unixPermissions === "string") { + o.unixPermissions = parseInt(o.unixPermissions, 8); + } + + // UNX_IFDIR 0040000 see zipinfo.c + if (o.unixPermissions && (o.unixPermissions & 0x4000)) { + o.dir = true; + } + // Bit 4 Directory + if (o.dosPermissions && (o.dosPermissions & 0x0010)) { + o.dir = true; + } + + if (o.dir) { + name = forceTrailingSlash(name); + } + + if (o.createFolders && (parent = parentFolder(name))) { + folderAdd.call(this, parent, true); + } + + if (o.dir || data === null || typeof data === "undefined") { + o.base64 = false; + o.binary = false; + data = null; + dataType = null; + } + else if (dataType === "string") { + if (o.binary && !o.base64) { + // optimizedBinaryString == true means that the file has already been filtered with a 0xFF mask + if (o.optimizedBinaryString !== true) { + // this is a string, not in a base64 format. + // Be sure that this is a correct "binary string" + data = utils.string2binary(data); + } + } + } + else { // arraybuffer, uint8array, ... + o.base64 = false; + o.binary = true; + + if (!dataType && !(data instanceof CompressedObject)) { + throw new Error("The data of '" + name + "' is in an unsupported format !"); + } + + // special case : it's way easier to work with Uint8Array than with ArrayBuffer + if (dataType === "arraybuffer") { + data = utils.transformTo("uint8array", data); + } + } + + var object = new ZipObject(name, data, o); + this.files[name] = object; + return object; +}; + +/** + * Find the parent folder of the path. + * @private + * @param {string} path the path to use + * @return {string} the parent folder, or "" + */ +var parentFolder = function (path) { + if (path.slice(-1) == '/') { + path = path.substring(0, path.length - 1); + } + var lastSlash = path.lastIndexOf('/'); + return (lastSlash > 0) ? path.substring(0, lastSlash) : ""; +}; + + +/** + * Returns the path with a slash at the end. + * @private + * @param {String} path the path to check. + * @return {String} the path with a trailing slash. + */ +var forceTrailingSlash = function(path) { + // Check the name ends with a / + if (path.slice(-1) != "/") { + path += "/"; // IE doesn't like substr(-1) + } + return path; +}; +/** + * Add a (sub) folder in the current folder. + * @private + * @param {string} name the folder's name + * @param {boolean=} [createFolders] If true, automatically create sub + * folders. Defaults to false. + * @return {Object} the new folder. + */ +var folderAdd = function(name, createFolders) { + createFolders = (typeof createFolders !== 'undefined') ? createFolders : false; + + name = forceTrailingSlash(name); + + // Does this folder already exist? + if (!this.files[name]) { + fileAdd.call(this, name, null, { + dir: true, + createFolders: createFolders + }); + } + return this.files[name]; +}; + +/** + * Generate a JSZip.CompressedObject for a given zipOject. + * @param {ZipObject} file the object to read. + * @param {JSZip.compression} compression the compression to use. + * @param {Object} compressionOptions the options to use when compressing. + * @return {JSZip.CompressedObject} the compressed result. + */ +var generateCompressedObjectFrom = function(file, compression, compressionOptions) { + var result = new CompressedObject(), + content; + + // the data has not been decompressed, we might reuse things ! + if (file._data instanceof CompressedObject) { + result.uncompressedSize = file._data.uncompressedSize; + result.crc32 = file._data.crc32; + + if (result.uncompressedSize === 0 || file.dir) { + compression = compressions['STORE']; + result.compressedContent = ""; + result.crc32 = 0; + } + else if (file._data.compressionMethod === compression.magic) { + result.compressedContent = file._data.getCompressedContent(); + } + else { + content = file._data.getContent(); + // need to decompress / recompress + result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions); + } + } + else { + // have uncompressed data + content = getBinaryData(file); + if (!content || content.length === 0 || file.dir) { + compression = compressions['STORE']; + content = ""; + } + result.uncompressedSize = content.length; + result.crc32 = crc32(content); + result.compressedContent = compression.compress(utils.transformTo(compression.compressInputType, content), compressionOptions); + } + + result.compressedSize = result.compressedContent.length; + result.compressionMethod = compression.magic; + + return result; +}; + + + + +/** + * Generate the UNIX part of the external file attributes. + * @param {Object} unixPermissions the unix permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * adapted from http://unix.stackexchange.com/questions/14705/the-zip-formats-external-file-attribute : + * + * TTTTsstrwxrwxrwx0000000000ADVSHR + * ^^^^____________________________ file type, see zipinfo.c (UNX_*) + * ^^^_________________________ setuid, setgid, sticky + * ^^^^^^^^^________________ permissions + * ^^^^^^^^^^______ not used ? + * ^^^^^^ DOS attribute bits : Archive, Directory, Volume label, System file, Hidden, Read only + */ +var generateUnixExternalFileAttr = function (unixPermissions, isDir) { + + var result = unixPermissions; + if (!unixPermissions) { + // I can't use octal values in strict mode, hence the hexa. + // 040775 => 0x41fd + // 0100664 => 0x81b4 + result = isDir ? 0x41fd : 0x81b4; + } + + return (result & 0xFFFF) << 16; +}; + +/** + * Generate the DOS part of the external file attributes. + * @param {Object} dosPermissions the dos permissions or null. + * @param {Boolean} isDir true if the entry is a directory, false otherwise. + * @return {Number} a 32 bit integer. + * + * Bit 0 Read-Only + * Bit 1 Hidden + * Bit 2 System + * Bit 3 Volume Label + * Bit 4 Directory + * Bit 5 Archive + */ +var generateDosExternalFileAttr = function (dosPermissions, isDir) { + + // the dir flag is already set for compatibility + + return (dosPermissions || 0) & 0x3F; +}; + +/** + * Generate the various parts used in the construction of the final zip file. + * @param {string} name the file name. + * @param {ZipObject} file the file content. + * @param {JSZip.CompressedObject} compressedObject the compressed object. + * @param {number} offset the current offset from the start of the zip file. + * @param {String} platform let's pretend we are this platform (change platform dependents fields) + * @return {object} the zip parts. + */ +var generateZipParts = function(name, file, compressedObject, offset, platform) { + var data = compressedObject.compressedContent, + utfEncodedFileName = utils.transformTo("string", utf8.utf8encode(file.name)), + comment = file.comment || "", + utfEncodedComment = utils.transformTo("string", utf8.utf8encode(comment)), + useUTF8ForFileName = utfEncodedFileName.length !== file.name.length, + useUTF8ForComment = utfEncodedComment.length !== comment.length, + o = file.options, + dosTime, + dosDate, + extraFields = "", + unicodePathExtraField = "", + unicodeCommentExtraField = "", + dir, date; + + + // handle the deprecated options.dir + if (file._initialMetadata.dir !== file.dir) { + dir = file.dir; + } else { + dir = o.dir; + } + + // handle the deprecated options.date + if(file._initialMetadata.date !== file.date) { + date = file.date; + } else { + date = o.date; + } + + var extFileAttr = 0; + var versionMadeBy = 0; + if (dir) { + // dos or unix, we set the dos dir flag + extFileAttr |= 0x00010; + } + if(platform === "UNIX") { + versionMadeBy = 0x031E; // UNIX, version 3.0 + extFileAttr |= generateUnixExternalFileAttr(file.unixPermissions, dir); + } else { // DOS or other, fallback to DOS + versionMadeBy = 0x0014; // DOS, version 2.0 + extFileAttr |= generateDosExternalFileAttr(file.dosPermissions, dir); + } + + // date + // @see http://www.delorie.com/djgpp/doc/rbinter/it/52/13.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/65/16.html + // @see http://www.delorie.com/djgpp/doc/rbinter/it/66/16.html + + dosTime = date.getHours(); + dosTime = dosTime << 6; + dosTime = dosTime | date.getMinutes(); + dosTime = dosTime << 5; + dosTime = dosTime | date.getSeconds() / 2; + + dosDate = date.getFullYear() - 1980; + dosDate = dosDate << 4; + dosDate = dosDate | (date.getMonth() + 1); + dosDate = dosDate << 5; + dosDate = dosDate | date.getDate(); + + if (useUTF8ForFileName) { + // set the unicode path extra field. unzip needs at least one extra + // field to correctly handle unicode path, so using the path is as good + // as any other information. This could improve the situation with + // other archive managers too. + // This field is usually used without the utf8 flag, with a non + // unicode path in the header (winrar, winzip). This helps (a bit) + // with the messy Windows' default compressed folders feature but + // breaks on p7zip which doesn't seek the unicode path extra field. + // So for now, UTF-8 everywhere ! + unicodePathExtraField = + // Version + decToHex(1, 1) + + // NameCRC32 + decToHex(crc32(utfEncodedFileName), 4) + + // UnicodeName + utfEncodedFileName; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x70" + + // size + decToHex(unicodePathExtraField.length, 2) + + // content + unicodePathExtraField; + } + + if(useUTF8ForComment) { + + unicodeCommentExtraField = + // Version + decToHex(1, 1) + + // CommentCRC32 + decToHex(this.crc32(utfEncodedComment), 4) + + // UnicodeName + utfEncodedComment; + + extraFields += + // Info-ZIP Unicode Path Extra Field + "\x75\x63" + + // size + decToHex(unicodeCommentExtraField.length, 2) + + // content + unicodeCommentExtraField; + } + + var header = ""; + + // version needed to extract + header += "\x0A\x00"; + // general purpose bit flag + // set bit 11 if utf8 + header += (useUTF8ForFileName || useUTF8ForComment) ? "\x00\x08" : "\x00\x00"; + // compression method + header += compressedObject.compressionMethod; + // last mod file time + header += decToHex(dosTime, 2); + // last mod file date + header += decToHex(dosDate, 2); + // crc-32 + header += decToHex(compressedObject.crc32, 4); + // compressed size + header += decToHex(compressedObject.compressedSize, 4); + // uncompressed size + header += decToHex(compressedObject.uncompressedSize, 4); + // file name length + header += decToHex(utfEncodedFileName.length, 2); + // extra field length + header += decToHex(extraFields.length, 2); + + + var fileRecord = signature.LOCAL_FILE_HEADER + header + utfEncodedFileName + extraFields; + + var dirRecord = signature.CENTRAL_FILE_HEADER + + // version made by (00: DOS) + decToHex(versionMadeBy, 2) + + // file header (common to file and central directory) + header + + // file comment length + decToHex(utfEncodedComment.length, 2) + + // disk number start + "\x00\x00" + + // internal file attributes TODO + "\x00\x00" + + // external file attributes + decToHex(extFileAttr, 4) + + // relative offset of local header + decToHex(offset, 4) + + // file name + utfEncodedFileName + + // extra field + extraFields + + // file comment + utfEncodedComment; + + return { + fileRecord: fileRecord, + dirRecord: dirRecord, + compressedObject: compressedObject + }; +}; + + +// return the actual prototype of JSZip +var out = { + /** + * Read an existing zip and merge the data in the current JSZip object. + * The implementation is in jszip-load.js, don't forget to include it. + * @param {String|ArrayBuffer|Uint8Array|Buffer} stream The stream to load + * @param {Object} options Options for loading the stream. + * options.base64 : is the stream in base64 ? default : false + * @return {JSZip} the current JSZip object + */ + load: function(stream, options) { + throw new Error("Load method is not defined. Is the file jszip-load.js included ?"); + }, + + /** + * Filter nested files/folders with the specified function. + * @param {Function} search the predicate to use : + * function (relativePath, file) {...} + * It takes 2 arguments : the relative path and the file. + * @return {Array} An array of matching elements. + */ + filter: function(search) { + var result = [], + filename, relativePath, file, fileClone; + for (filename in this.files) { + if (!this.files.hasOwnProperty(filename)) { + continue; + } + file = this.files[filename]; + // return a new object, don't let the user mess with our internal objects :) + fileClone = new ZipObject(file.name, file._data, extend(file.options)); + relativePath = filename.slice(this.root.length, filename.length); + if (filename.slice(0, this.root.length) === this.root && // the file is in the current root + search(relativePath, fileClone)) { // and the file matches the function + result.push(fileClone); + } + } + return result; + }, + + /** + * Add a file to the zip file, or search a file. + * @param {string|RegExp} name The name of the file to add (if data is defined), + * the name of the file to find (if no data) or a regex to match files. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data The file data, either raw or base64 encoded + * @param {Object} o File options + * @return {JSZip|Object|Array} this JSZip object (when adding a file), + * a file (when searching by string) or an array of files (when searching by regex). + */ + file: function(name, data, o) { + if (arguments.length === 1) { + if (utils.isRegExp(name)) { + var regexp = name; + return this.filter(function(relativePath, file) { + return !file.dir && regexp.test(relativePath); + }); + } + else { // text + return this.filter(function(relativePath, file) { + return !file.dir && relativePath === name; + })[0] || null; + } + } + else { // more than one argument : we have data ! + name = this.root + name; + fileAdd.call(this, name, data, o); + } + return this; + }, + + /** + * Add a directory to the zip file, or search. + * @param {String|RegExp} arg The name of the directory to add, or a regex to search folders. + * @return {JSZip} an object with the new directory as the root, or an array containing matching folders. + */ + folder: function(arg) { + if (!arg) { + return this; + } + + if (utils.isRegExp(arg)) { + return this.filter(function(relativePath, file) { + return file.dir && arg.test(relativePath); + }); + } + + // else, name is a new folder + var name = this.root + arg; + var newFolder = folderAdd.call(this, name); + + // Allow chaining by returning a new object with this folder as the root + var ret = this.clone(); + ret.root = newFolder.name; + return ret; + }, + + /** + * Delete a file, or a directory and all sub-files, from the zip + * @param {string} name the name of the file to delete + * @return {JSZip} this JSZip object + */ + remove: function(name) { + name = this.root + name; + var file = this.files[name]; + if (!file) { + // Look for any folders + if (name.slice(-1) != "/") { + name += "/"; + } + file = this.files[name]; + } + + if (file && !file.dir) { + // file + delete this.files[name]; + } else { + // maybe a folder, delete recursively + var kids = this.filter(function(relativePath, file) { + return file.name.slice(0, name.length) === name; + }); + for (var i = 0; i < kids.length; i++) { + delete this.files[kids[i].name]; + } + } + + return this; + }, + + /** + * Generate the complete zip file + * @param {Object} options the options to generate the zip file : + * - base64, (deprecated, use type instead) true to generate base64. + * - compression, "STORE" by default. + * - type, "base64" by default. Values are : string, base64, uint8array, arraybuffer, blob. + * @return {String|Uint8Array|ArrayBuffer|Buffer|Blob} the zip file + */ + generate: function(options) { + options = extend(options || {}, { + base64: true, + compression: "STORE", + compressionOptions : null, + type: "base64", + platform: "DOS", + comment: null, + mimeType: 'application/zip' + }); + + utils.checkSupport(options.type); + + // accept nodejs `process.platform` + if( + options.platform === 'darwin' || + options.platform === 'freebsd' || + options.platform === 'linux' || + options.platform === 'sunos' + ) { + options.platform = "UNIX"; + } + if (options.platform === 'win32') { + options.platform = "DOS"; + } + + var zipData = [], + localDirLength = 0, + centralDirLength = 0, + writer, i, + utfEncodedComment = utils.transformTo("string", this.utf8encode(options.comment || this.comment || "")); + + // first, generate all the zip parts. + for (var name in this.files) { + if (!this.files.hasOwnProperty(name)) { + continue; + } + var file = this.files[name]; + + var compressionName = file.options.compression || options.compression.toUpperCase(); + var compression = compressions[compressionName]; + if (!compression) { + throw new Error(compressionName + " is not a valid compression method !"); + } + var compressionOptions = file.options.compressionOptions || options.compressionOptions || {}; + + var compressedObject = generateCompressedObjectFrom.call(this, file, compression, compressionOptions); + + var zipPart = generateZipParts.call(this, name, file, compressedObject, localDirLength, options.platform); + localDirLength += zipPart.fileRecord.length + compressedObject.compressedSize; + centralDirLength += zipPart.dirRecord.length; + zipData.push(zipPart); + } + + var dirEnd = ""; + + // end of central dir signature + dirEnd = signature.CENTRAL_DIRECTORY_END + + // number of this disk + "\x00\x00" + + // number of the disk with the start of the central directory + "\x00\x00" + + // total number of entries in the central directory on this disk + decToHex(zipData.length, 2) + + // total number of entries in the central directory + decToHex(zipData.length, 2) + + // size of the central directory 4 bytes + decToHex(centralDirLength, 4) + + // offset of start of central directory with respect to the starting disk number + decToHex(localDirLength, 4) + + // .ZIP file comment length + decToHex(utfEncodedComment.length, 2) + + // .ZIP file comment + utfEncodedComment; + + + // we have all the parts (and the total length) + // time to create a writer ! + var typeName = options.type.toLowerCase(); + if(typeName==="uint8array"||typeName==="arraybuffer"||typeName==="blob"||typeName==="nodebuffer") { + writer = new Uint8ArrayWriter(localDirLength + centralDirLength + dirEnd.length); + }else{ + writer = new StringWriter(localDirLength + centralDirLength + dirEnd.length); + } + + for (i = 0; i < zipData.length; i++) { + writer.append(zipData[i].fileRecord); + writer.append(zipData[i].compressedObject.compressedContent); + } + for (i = 0; i < zipData.length; i++) { + writer.append(zipData[i].dirRecord); + } + + writer.append(dirEnd); + + var zip = writer.finalize(); + + + + switch(options.type.toLowerCase()) { + // case "zip is an Uint8Array" + case "uint8array" : + case "arraybuffer" : + case "nodebuffer" : + return utils.transformTo(options.type.toLowerCase(), zip); + case "blob" : + return utils.arrayBuffer2Blob(utils.transformTo("arraybuffer", zip), options.mimeType); + // case "zip is a string" + case "base64" : + return (options.base64) ? base64.encode(zip) : zip; + default : // case "string" : + return zip; + } + + }, + + /** + * @deprecated + * This method will be removed in a future version without replacement. + */ + crc32: function (input, crc) { + return crc32(input, crc); + }, + + /** + * @deprecated + * This method will be removed in a future version without replacement. + */ + utf8encode: function (string) { + return utils.transformTo("string", utf8.utf8encode(string)); + }, + + /** + * @deprecated + * This method will be removed in a future version without replacement. + */ + utf8decode: function (input) { + return utf8.utf8decode(input); + } +}; +module.exports = out; + +},{"./base64":84,"./compressedObject":85,"./compressions":86,"./crc32":87,"./defaults":89,"./nodeBuffer":94,"./signature":97,"./stringWriter":99,"./support":100,"./uint8ArrayWriter":102,"./utf8":103,"./utils":104}],97:[function(require,module,exports){ +'use strict'; +exports.LOCAL_FILE_HEADER = "PK\x03\x04"; +exports.CENTRAL_FILE_HEADER = "PK\x01\x02"; +exports.CENTRAL_DIRECTORY_END = "PK\x05\x06"; +exports.ZIP64_CENTRAL_DIRECTORY_LOCATOR = "PK\x06\x07"; +exports.ZIP64_CENTRAL_DIRECTORY_END = "PK\x06\x06"; +exports.DATA_DESCRIPTOR = "PK\x07\x08"; + +},{}],98:[function(require,module,exports){ +'use strict'; +var DataReader = require('./dataReader'); +var utils = require('./utils'); + +function StringReader(data, optimizedBinaryString) { + this.data = data; + if (!optimizedBinaryString) { + this.data = utils.string2binary(this.data); + } + this.length = this.data.length; + this.index = 0; +} +StringReader.prototype = new DataReader(); +/** + * @see DataReader.byteAt + */ +StringReader.prototype.byteAt = function(i) { + return this.data.charCodeAt(i); +}; +/** + * @see DataReader.lastIndexOfSignature + */ +StringReader.prototype.lastIndexOfSignature = function(sig) { + return this.data.lastIndexOf(sig); +}; +/** + * @see DataReader.readData + */ +StringReader.prototype.readData = function(size) { + this.checkOffset(size); + // this will work because the constructor applied the "& 0xff" mask. + var result = this.data.slice(this.index, this.index + size); + this.index += size; + return result; +}; +module.exports = StringReader; + +},{"./dataReader":88,"./utils":104}],99:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * An object to write any content to a string. + * @constructor + */ +var StringWriter = function() { + this.data = []; +}; +StringWriter.prototype = { + /** + * Append any content to the current string. + * @param {Object} input the content to add. + */ + append: function(input) { + input = utils.transformTo("string", input); + this.data.push(input); + }, + /** + * Finalize the construction an return the result. + * @return {string} the generated string. + */ + finalize: function() { + return this.data.join(""); + } +}; + +module.exports = StringWriter; + +},{"./utils":104}],100:[function(require,module,exports){ +(function (Buffer){ +'use strict'; +exports.base64 = true; +exports.array = true; +exports.string = true; +exports.arraybuffer = typeof ArrayBuffer !== "undefined" && typeof Uint8Array !== "undefined"; +// contains true if JSZip can read/generate nodejs Buffer, false otherwise. +// Browserify will provide a Buffer implementation for browsers, which is +// an augmented Uint8Array (i.e., can be used as either Buffer or U8). +exports.nodebuffer = typeof Buffer !== "undefined"; +// contains true if JSZip can read/generate Uint8Array, false otherwise. +exports.uint8array = typeof Uint8Array !== "undefined"; + +if (typeof ArrayBuffer === "undefined") { + exports.blob = false; +} +else { + var buffer = new ArrayBuffer(0); + try { + exports.blob = new Blob([buffer], { + type: "application/zip" + }).size === 0; + } + catch (e) { + try { + var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + exports.blob = builder.getBlob('application/zip').size === 0; + } + catch (e) { + exports.blob = false; + } + } +} + +}).call(this,require("buffer").Buffer) +},{"buffer":77}],101:[function(require,module,exports){ +'use strict'; +var DataReader = require('./dataReader'); + +function Uint8ArrayReader(data) { + if (data) { + this.data = data; + this.length = this.data.length; + this.index = 0; + } +} +Uint8ArrayReader.prototype = new DataReader(); +/** + * @see DataReader.byteAt + */ +Uint8ArrayReader.prototype.byteAt = function(i) { + return this.data[i]; +}; +/** + * @see DataReader.lastIndexOfSignature + */ +Uint8ArrayReader.prototype.lastIndexOfSignature = function(sig) { + var sig0 = sig.charCodeAt(0), + sig1 = sig.charCodeAt(1), + sig2 = sig.charCodeAt(2), + sig3 = sig.charCodeAt(3); + for (var i = this.length - 4; i >= 0; --i) { + if (this.data[i] === sig0 && this.data[i + 1] === sig1 && this.data[i + 2] === sig2 && this.data[i + 3] === sig3) { + return i; + } + } + + return -1; +}; +/** + * @see DataReader.readData + */ +Uint8ArrayReader.prototype.readData = function(size) { + this.checkOffset(size); + if(size === 0) { + // in IE10, when using subarray(idx, idx), we get the array [0x00] instead of []. + return new Uint8Array(0); + } + var result = this.data.subarray(this.index, this.index + size); + this.index += size; + return result; +}; +module.exports = Uint8ArrayReader; + +},{"./dataReader":88}],102:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); + +/** + * An object to write any content to an Uint8Array. + * @constructor + * @param {number} length The length of the array. + */ +var Uint8ArrayWriter = function(length) { + this.data = new Uint8Array(length); + this.index = 0; +}; +Uint8ArrayWriter.prototype = { + /** + * Append any content to the current array. + * @param {Object} input the content to add. + */ + append: function(input) { + if (input.length !== 0) { + // with an empty Uint8Array, Opera fails with a "Offset larger than array size" + input = utils.transformTo("uint8array", input); + this.data.set(input, this.index); + this.index += input.length; + } + }, + /** + * Finalize the construction an return the result. + * @return {Uint8Array} the generated array. + */ + finalize: function() { + return this.data; + } +}; + +module.exports = Uint8ArrayWriter; + +},{"./utils":104}],103:[function(require,module,exports){ +'use strict'; + +var utils = require('./utils'); +var support = require('./support'); +var nodeBuffer = require('./nodeBuffer'); + +/** + * The following functions come from pako, from pako/lib/utils/strings + * released under the MIT license, see pako https://github.com/nodeca/pako/ + */ + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new Array(256); +for (var i=0; i<256; i++) { + _utf8len[i] = (i >= 252 ? 6 : i >= 248 ? 5 : i >= 240 ? 4 : i >= 224 ? 3 : i >= 192 ? 2 : 1); +} +_utf8len[254]=_utf8len[254]=1; // Invalid sequence start + +// convert string to array (typed, when possible) +var string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + if (support.uint8array) { + buf = new Uint8Array(buf_len); + } else { + buf = new Array(buf_len); + } + + // convert + for (i=0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos+1 < str_len)) { + c2 = str.charCodeAt(m_pos+1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +var utf8border = function(buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max-1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +// convert array to string +var buf2string = function (buf) { + var str, i, out, c, c_len; + var len = buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len*2); + + for (out=0, i=0; i 4) { utf16buf[out++] = 0xfffd; i += c_len-1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + // shrinkBuf(utf16buf, out) + if (utf16buf.length !== out) { + if(utf16buf.subarray) { + utf16buf = utf16buf.subarray(0, out); + } else { + utf16buf.length = out; + } + } + + // return String.fromCharCode.apply(null, utf16buf); + return utils.applyFromCharCode(utf16buf); +}; + + +// That's all for the pako functions. + + +/** + * Transform a javascript string into an array (typed if possible) of bytes, + * UTF-8 encoded. + * @param {String} str the string to encode + * @return {Array|Uint8Array|Buffer} the UTF-8 encoded string. + */ +exports.utf8encode = function utf8encode(str) { + if (support.nodebuffer) { + return nodeBuffer(str, "utf-8"); + } + + return string2buf(str); +}; + + +/** + * Transform a bytes array (or a representation) representing an UTF-8 encoded + * string into a javascript string. + * @param {Array|Uint8Array|Buffer} buf the data de decode + * @return {String} the decoded string. + */ +exports.utf8decode = function utf8decode(buf) { + if (support.nodebuffer) { + return utils.transformTo("nodebuffer", buf).toString("utf-8"); + } + + buf = utils.transformTo(support.uint8array ? "uint8array" : "array", buf); + + // return buf2string(buf); + // Chrome prefers to work with "small" chunks of data + // for the method buf2string. + // Firefox and Chrome has their own shortcut, IE doesn't seem to really care. + var result = [], k = 0, len = buf.length, chunk = 65536; + while (k < len) { + var nextBoundary = utf8border(buf, Math.min(k + chunk, len)); + if (support.uint8array) { + result.push(buf2string(buf.subarray(k, nextBoundary))); + } else { + result.push(buf2string(buf.slice(k, nextBoundary))); + } + k = nextBoundary; + } + return result.join(""); + +}; +// vim: set shiftwidth=4 softtabstop=4: + +},{"./nodeBuffer":94,"./support":100,"./utils":104}],104:[function(require,module,exports){ +'use strict'; +var support = require('./support'); +var compressions = require('./compressions'); +var nodeBuffer = require('./nodeBuffer'); +/** + * Convert a string to a "binary string" : a string containing only char codes between 0 and 255. + * @param {string} str the string to transform. + * @return {String} the binary string. + */ +exports.string2binary = function(str) { + var result = ""; + for (var i = 0; i < str.length; i++) { + result += String.fromCharCode(str.charCodeAt(i) & 0xff); + } + return result; +}; +exports.arrayBuffer2Blob = function(buffer, mimeType) { + exports.checkSupport("blob"); + mimeType = mimeType || 'application/zip'; + + try { + // Blob constructor + return new Blob([buffer], { + type: mimeType + }); + } + catch (e) { + + try { + // deprecated, browser only, old way + var Builder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder; + var builder = new Builder(); + builder.append(buffer); + return builder.getBlob(mimeType); + } + catch (e) { + + // well, fuck ?! + throw new Error("Bug : can't construct the Blob."); + } + } + + +}; +/** + * The identity function. + * @param {Object} input the input. + * @return {Object} the same input. + */ +function identity(input) { + return input; +} + +/** + * Fill in an array with a string. + * @param {String} str the string to use. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to fill in (will be mutated). + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated array. + */ +function stringToArrayLike(str, array) { + for (var i = 0; i < str.length; ++i) { + array[i] = str.charCodeAt(i) & 0xFF; + } + return array; +} + +/** + * Transform an array-like object to a string. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} array the array to transform. + * @return {String} the result. + */ +function arrayLikeToString(array) { + // Performances notes : + // -------------------- + // String.fromCharCode.apply(null, array) is the fastest, see + // see http://jsperf.com/converting-a-uint8array-to-a-string/2 + // but the stack is limited (and we can get huge arrays !). + // + // result += String.fromCharCode(array[i]); generate too many strings ! + // + // This code is inspired by http://jsperf.com/arraybuffer-to-string-apply-performance/2 + var chunk = 65536; + var result = [], + len = array.length, + type = exports.getTypeOf(array), + k = 0, + canUseApply = true; + try { + switch(type) { + case "uint8array": + String.fromCharCode.apply(null, new Uint8Array(0)); + break; + case "nodebuffer": + String.fromCharCode.apply(null, nodeBuffer(0)); + break; + } + } catch(e) { + canUseApply = false; + } + + // no apply : slow and painful algorithm + // default browser on android 4.* + if (!canUseApply) { + var resultStr = ""; + for(var i = 0; i < array.length;i++) { + resultStr += String.fromCharCode(array[i]); + } + return resultStr; + } + while (k < len && chunk > 1) { + try { + if (type === "array" || type === "nodebuffer") { + result.push(String.fromCharCode.apply(null, array.slice(k, Math.min(k + chunk, len)))); + } + else { + result.push(String.fromCharCode.apply(null, array.subarray(k, Math.min(k + chunk, len)))); + } + k += chunk; + } + catch (e) { + chunk = Math.floor(chunk / 2); + } + } + return result.join(""); +} + +exports.applyFromCharCode = arrayLikeToString; + + +/** + * Copy the data from an array-like to an other array-like. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayFrom the origin array. + * @param {Array|ArrayBuffer|Uint8Array|Buffer} arrayTo the destination array which will be mutated. + * @return {Array|ArrayBuffer|Uint8Array|Buffer} the updated destination array. + */ +function arrayLikeToArrayLike(arrayFrom, arrayTo) { + for (var i = 0; i < arrayFrom.length; i++) { + arrayTo[i] = arrayFrom[i]; + } + return arrayTo; +} + +// a matrix containing functions to transform everything into everything. +var transform = {}; + +// string to ? +transform["string"] = { + "string": identity, + "array": function(input) { + return stringToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["string"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return stringToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": function(input) { + return stringToArrayLike(input, nodeBuffer(input.length)); + } +}; + +// array to ? +transform["array"] = { + "string": arrayLikeToString, + "array": identity, + "arraybuffer": function(input) { + return (new Uint8Array(input)).buffer; + }, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodeBuffer(input); + } +}; + +// arraybuffer to ? +transform["arraybuffer"] = { + "string": function(input) { + return arrayLikeToString(new Uint8Array(input)); + }, + "array": function(input) { + return arrayLikeToArrayLike(new Uint8Array(input), new Array(input.byteLength)); + }, + "arraybuffer": identity, + "uint8array": function(input) { + return new Uint8Array(input); + }, + "nodebuffer": function(input) { + return nodeBuffer(new Uint8Array(input)); + } +}; + +// uint8array to ? +transform["uint8array"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return input.buffer; + }, + "uint8array": identity, + "nodebuffer": function(input) { + return nodeBuffer(input); + } +}; + +// nodebuffer to ? +transform["nodebuffer"] = { + "string": arrayLikeToString, + "array": function(input) { + return arrayLikeToArrayLike(input, new Array(input.length)); + }, + "arraybuffer": function(input) { + return transform["nodebuffer"]["uint8array"](input).buffer; + }, + "uint8array": function(input) { + return arrayLikeToArrayLike(input, new Uint8Array(input.length)); + }, + "nodebuffer": identity +}; + +/** + * Transform an input into any type. + * The supported output type are : string, array, uint8array, arraybuffer, nodebuffer. + * If no output type is specified, the unmodified input will be returned. + * @param {String} outputType the output type. + * @param {String|Array|ArrayBuffer|Uint8Array|Buffer} input the input to convert. + * @throws {Error} an Error if the browser doesn't support the requested output type. + */ +exports.transformTo = function(outputType, input) { + if (!input) { + // undefined, null, etc + // an empty string won't harm. + input = ""; + } + if (!outputType) { + return input; + } + exports.checkSupport(outputType); + var inputType = exports.getTypeOf(input); + var result = transform[inputType][outputType](input); + return result; +}; + +/** + * Return the type of the input. + * The type will be in a format valid for JSZip.utils.transformTo : string, array, uint8array, arraybuffer. + * @param {Object} input the input to identify. + * @return {String} the (lowercase) type of the input. + */ +exports.getTypeOf = function(input) { + if (typeof input === "string") { + return "string"; + } + if (Object.prototype.toString.call(input) === "[object Array]") { + return "array"; + } + if (support.nodebuffer && nodeBuffer.test(input)) { + return "nodebuffer"; + } + if (support.uint8array && input instanceof Uint8Array) { + return "uint8array"; + } + if (support.arraybuffer && input instanceof ArrayBuffer) { + return "arraybuffer"; + } +}; + +/** + * Throw an exception if the type is not supported. + * @param {String} type the type to check. + * @throws {Error} an Error if the browser doesn't support the requested type. + */ +exports.checkSupport = function(type) { + var supported = support[type.toLowerCase()]; + if (!supported) { + throw new Error(type + " is not supported by this browser"); + } +}; +exports.MAX_VALUE_16BITS = 65535; +exports.MAX_VALUE_32BITS = -1; // well, "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF" is parsed as -1 + +/** + * Prettify a string read as binary. + * @param {string} str the string to prettify. + * @return {string} a pretty string. + */ +exports.pretty = function(str) { + var res = '', + code, i; + for (i = 0; i < (str || "").length; i++) { + code = str.charCodeAt(i); + res += '\\x' + (code < 16 ? "0" : "") + code.toString(16).toUpperCase(); + } + return res; +}; + +/** + * Find a compression registered in JSZip. + * @param {string} compressionMethod the method magic to find. + * @return {Object|null} the JSZip compression object, null if none found. + */ +exports.findCompression = function(compressionMethod) { + for (var method in compressions) { + if (!compressions.hasOwnProperty(method)) { + continue; + } + if (compressions[method].magic === compressionMethod) { + return compressions[method]; + } + } + return null; +}; +/** +* Cross-window, cross-Node-context regular expression detection +* @param {Object} object Anything +* @return {Boolean} true if the object is a regular expression, +* false otherwise +*/ +exports.isRegExp = function (object) { + return Object.prototype.toString.call(object) === "[object RegExp]"; +}; + + +},{"./compressions":86,"./nodeBuffer":94,"./support":100}],105:[function(require,module,exports){ +'use strict'; +var StringReader = require('./stringReader'); +var NodeBufferReader = require('./nodeBufferReader'); +var Uint8ArrayReader = require('./uint8ArrayReader'); +var utils = require('./utils'); +var sig = require('./signature'); +var ZipEntry = require('./zipEntry'); +var support = require('./support'); +var jszipProto = require('./object'); +// class ZipEntries {{{ +/** + * All the entries in the zip file. + * @constructor + * @param {String|ArrayBuffer|Uint8Array} data the binary stream to load. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntries(data, loadOptions) { + this.files = []; + this.loadOptions = loadOptions; + if (data) { + this.load(data); + } +} +ZipEntries.prototype = { + /** + * Check that the reader is on the speficied signature. + * @param {string} expectedSignature the expected signature. + * @throws {Error} if it is an other signature. + */ + checkSignature: function(expectedSignature) { + var signature = this.reader.readString(4); + if (signature !== expectedSignature) { + throw new Error("Corrupted zip or bug : unexpected signature " + "(" + utils.pretty(signature) + ", expected " + utils.pretty(expectedSignature) + ")"); + } + }, + /** + * Read the end of the central directory. + */ + readBlockEndOfCentral: function() { + this.diskNumber = this.reader.readInt(2); + this.diskWithCentralDirStart = this.reader.readInt(2); + this.centralDirRecordsOnThisDisk = this.reader.readInt(2); + this.centralDirRecords = this.reader.readInt(2); + this.centralDirSize = this.reader.readInt(4); + this.centralDirOffset = this.reader.readInt(4); + + this.zipCommentLength = this.reader.readInt(2); + // warning : the encoding depends of the system locale + // On a linux machine with LANG=en_US.utf8, this field is utf8 encoded. + // On a windows machine, this field is encoded with the localized windows code page. + this.zipComment = this.reader.readString(this.zipCommentLength); + // To get consistent behavior with the generation part, we will assume that + // this is utf8 encoded. + this.zipComment = jszipProto.utf8decode(this.zipComment); + }, + /** + * Read the end of the Zip 64 central directory. + * Not merged with the method readEndOfCentral : + * The end of central can coexist with its Zip64 brother, + * I don't want to read the wrong number of bytes ! + */ + readBlockZip64EndOfCentral: function() { + this.zip64EndOfCentralSize = this.reader.readInt(8); + this.versionMadeBy = this.reader.readString(2); + this.versionNeeded = this.reader.readInt(2); + this.diskNumber = this.reader.readInt(4); + this.diskWithCentralDirStart = this.reader.readInt(4); + this.centralDirRecordsOnThisDisk = this.reader.readInt(8); + this.centralDirRecords = this.reader.readInt(8); + this.centralDirSize = this.reader.readInt(8); + this.centralDirOffset = this.reader.readInt(8); + + this.zip64ExtensibleData = {}; + var extraDataSize = this.zip64EndOfCentralSize - 44, + index = 0, + extraFieldId, + extraFieldLength, + extraFieldValue; + while (index < extraDataSize) { + extraFieldId = this.reader.readInt(2); + extraFieldLength = this.reader.readInt(4); + extraFieldValue = this.reader.readString(extraFieldLength); + this.zip64ExtensibleData[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Read the end of the Zip 64 central directory locator. + */ + readBlockZip64EndOfCentralLocator: function() { + this.diskWithZip64CentralDirStart = this.reader.readInt(4); + this.relativeOffsetEndOfZip64CentralDir = this.reader.readInt(8); + this.disksCount = this.reader.readInt(4); + if (this.disksCount > 1) { + throw new Error("Multi-volumes zip are not supported"); + } + }, + /** + * Read the local files, based on the offset read in the central part. + */ + readLocalFiles: function() { + var i, file; + for (i = 0; i < this.files.length; i++) { + file = this.files[i]; + this.reader.setIndex(file.localHeaderOffset); + this.checkSignature(sig.LOCAL_FILE_HEADER); + file.readLocalPart(this.reader); + file.handleUTF8(); + file.processAttributes(); + } + }, + /** + * Read the central directory. + */ + readCentralDir: function() { + var file; + + this.reader.setIndex(this.centralDirOffset); + while (this.reader.readString(4) === sig.CENTRAL_FILE_HEADER) { + file = new ZipEntry({ + zip64: this.zip64 + }, this.loadOptions); + file.readCentralPart(this.reader); + this.files.push(file); + } + }, + /** + * Read the end of central directory. + */ + readEndOfCentral: function() { + var offset = this.reader.lastIndexOfSignature(sig.CENTRAL_DIRECTORY_END); + if (offset === -1) { + // Check if the content is a truncated zip or complete garbage. + // A "LOCAL_FILE_HEADER" is not required at the beginning (auto + // extractible zip for example) but it can give a good hint. + // If an ajax request was used without responseType, we will also + // get unreadable data. + var isGarbage = true; + try { + this.reader.setIndex(0); + this.checkSignature(sig.LOCAL_FILE_HEADER); + isGarbage = false; + } catch (e) {} + + if (isGarbage) { + throw new Error("Can't find end of central directory : is this a zip file ? " + + "If it is, see http://stuk.github.io/jszip/documentation/howto/read_zip.html"); + } else { + throw new Error("Corrupted zip : can't find end of central directory"); + } + } + this.reader.setIndex(offset); + this.checkSignature(sig.CENTRAL_DIRECTORY_END); + this.readBlockEndOfCentral(); + + + /* extract from the zip spec : + 4) If one of the fields in the end of central directory + record is too small to hold required data, the field + should be set to -1 (0xFFFF or 0xFFFFFFFF) and the + ZIP64 format record should be created. + 5) The end of central directory record and the + Zip64 end of central directory locator record must + reside on the same disk when splitting or spanning + an archive. + */ + if (this.diskNumber === utils.MAX_VALUE_16BITS || this.diskWithCentralDirStart === utils.MAX_VALUE_16BITS || this.centralDirRecordsOnThisDisk === utils.MAX_VALUE_16BITS || this.centralDirRecords === utils.MAX_VALUE_16BITS || this.centralDirSize === utils.MAX_VALUE_32BITS || this.centralDirOffset === utils.MAX_VALUE_32BITS) { + this.zip64 = true; + + /* + Warning : the zip64 extension is supported, but ONLY if the 64bits integer read from + the zip file can fit into a 32bits integer. This cannot be solved : Javascript represents + all numbers as 64-bit double precision IEEE 754 floating point numbers. + So, we have 53bits for integers and bitwise operations treat everything as 32bits. + see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/Bitwise_Operators + and http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf section 8.5 + */ + + // should look for a zip64 EOCD locator + offset = this.reader.lastIndexOfSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + if (offset === -1) { + throw new Error("Corrupted zip : can't find the ZIP64 end of central directory locator"); + } + this.reader.setIndex(offset); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_LOCATOR); + this.readBlockZip64EndOfCentralLocator(); + + // now the zip64 EOCD record + this.reader.setIndex(this.relativeOffsetEndOfZip64CentralDir); + this.checkSignature(sig.ZIP64_CENTRAL_DIRECTORY_END); + this.readBlockZip64EndOfCentral(); + } + }, + prepareReader: function(data) { + var type = utils.getTypeOf(data); + if (type === "string" && !support.uint8array) { + this.reader = new StringReader(data, this.loadOptions.optimizedBinaryString); + } + else if (type === "nodebuffer") { + this.reader = new NodeBufferReader(data); + } + else { + this.reader = new Uint8ArrayReader(utils.transformTo("uint8array", data)); + } + }, + /** + * Read a zip file and create ZipEntries. + * @param {String|ArrayBuffer|Uint8Array|Buffer} data the binary string representing a zip file. + */ + load: function(data) { + this.prepareReader(data); + this.readEndOfCentral(); + this.readCentralDir(); + this.readLocalFiles(); + } +}; +// }}} end of ZipEntries +module.exports = ZipEntries; + +},{"./nodeBufferReader":95,"./object":96,"./signature":97,"./stringReader":98,"./support":100,"./uint8ArrayReader":101,"./utils":104,"./zipEntry":106}],106:[function(require,module,exports){ +'use strict'; +var StringReader = require('./stringReader'); +var utils = require('./utils'); +var CompressedObject = require('./compressedObject'); +var jszipProto = require('./object'); + +var MADE_BY_DOS = 0x00; +var MADE_BY_UNIX = 0x03; + +// class ZipEntry {{{ +/** + * An entry in the zip file. + * @constructor + * @param {Object} options Options of the current file. + * @param {Object} loadOptions Options for loading the stream. + */ +function ZipEntry(options, loadOptions) { + this.options = options; + this.loadOptions = loadOptions; +} +ZipEntry.prototype = { + /** + * say if the file is encrypted. + * @return {boolean} true if the file is encrypted, false otherwise. + */ + isEncrypted: function() { + // bit 1 is set + return (this.bitFlag & 0x0001) === 0x0001; + }, + /** + * say if the file has utf-8 filename/comment. + * @return {boolean} true if the filename/comment is in utf-8, false otherwise. + */ + useUTF8: function() { + // bit 11 is set + return (this.bitFlag & 0x0800) === 0x0800; + }, + /** + * Prepare the function used to generate the compressed content from this ZipFile. + * @param {DataReader} reader the reader to use. + * @param {number} from the offset from where we should read the data. + * @param {number} length the length of the data to read. + * @return {Function} the callback to get the compressed content (the type depends of the DataReader class). + */ + prepareCompressedContent: function(reader, from, length) { + return function() { + var previousIndex = reader.index; + reader.setIndex(from); + var compressedFileData = reader.readData(length); + reader.setIndex(previousIndex); + + return compressedFileData; + }; + }, + /** + * Prepare the function used to generate the uncompressed content from this ZipFile. + * @param {DataReader} reader the reader to use. + * @param {number} from the offset from where we should read the data. + * @param {number} length the length of the data to read. + * @param {JSZip.compression} compression the compression used on this file. + * @param {number} uncompressedSize the uncompressed size to expect. + * @return {Function} the callback to get the uncompressed content (the type depends of the DataReader class). + */ + prepareContent: function(reader, from, length, compression, uncompressedSize) { + return function() { + + var compressedFileData = utils.transformTo(compression.uncompressInputType, this.getCompressedContent()); + var uncompressedFileData = compression.uncompress(compressedFileData); + + if (uncompressedFileData.length !== uncompressedSize) { + throw new Error("Bug : uncompressed data size mismatch"); + } + + return uncompressedFileData; + }; + }, + /** + * Read the local part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readLocalPart: function(reader) { + var compression, localExtraFieldsLength; + + // we already know everything from the central dir ! + // If the central dir data are false, we are doomed. + // On the bright side, the local part is scary : zip64, data descriptors, both, etc. + // The less data we get here, the more reliable this should be. + // Let's skip the whole header and dash to the data ! + reader.skip(22); + // in some zip created on windows, the filename stored in the central dir contains \ instead of /. + // Strangely, the filename here is OK. + // I would love to treat these zip files as corrupted (see http://www.info-zip.org/FAQ.html#backslashes + // or APPNOTE#4.4.17.1, "All slashes MUST be forward slashes '/'") but there are a lot of bad zip generators... + // Search "unzip mismatching "local" filename continuing with "central" filename version" on + // the internet. + // + // I think I see the logic here : the central directory is used to display + // content and the local directory is used to extract the files. Mixing / and \ + // may be used to display \ to windows users and use / when extracting the files. + // Unfortunately, this lead also to some issues : http://seclists.org/fulldisclosure/2009/Sep/394 + this.fileNameLength = reader.readInt(2); + localExtraFieldsLength = reader.readInt(2); // can't be sure this will be the same as the central dir + this.fileName = reader.readString(this.fileNameLength); + reader.skip(localExtraFieldsLength); + + if (this.compressedSize == -1 || this.uncompressedSize == -1) { + throw new Error("Bug or corrupted zip : didn't get enough informations from the central directory " + "(compressedSize == -1 || uncompressedSize == -1)"); + } + + compression = utils.findCompression(this.compressionMethod); + if (compression === null) { // no compression found + throw new Error("Corrupted zip : compression " + utils.pretty(this.compressionMethod) + " unknown (inner file : " + this.fileName + ")"); + } + this.decompressed = new CompressedObject(); + this.decompressed.compressedSize = this.compressedSize; + this.decompressed.uncompressedSize = this.uncompressedSize; + this.decompressed.crc32 = this.crc32; + this.decompressed.compressionMethod = this.compressionMethod; + this.decompressed.getCompressedContent = this.prepareCompressedContent(reader, reader.index, this.compressedSize, compression); + this.decompressed.getContent = this.prepareContent(reader, reader.index, this.compressedSize, compression, this.uncompressedSize); + + // we need to compute the crc32... + if (this.loadOptions.checkCRC32) { + this.decompressed = utils.transformTo("string", this.decompressed.getContent()); + if (jszipProto.crc32(this.decompressed) !== this.crc32) { + throw new Error("Corrupted zip : CRC32 mismatch"); + } + } + }, + + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readCentralPart: function(reader) { + this.versionMadeBy = reader.readInt(2); + this.versionNeeded = reader.readInt(2); + this.bitFlag = reader.readInt(2); + this.compressionMethod = reader.readString(2); + this.date = reader.readDate(); + this.crc32 = reader.readInt(4); + this.compressedSize = reader.readInt(4); + this.uncompressedSize = reader.readInt(4); + this.fileNameLength = reader.readInt(2); + this.extraFieldsLength = reader.readInt(2); + this.fileCommentLength = reader.readInt(2); + this.diskNumberStart = reader.readInt(2); + this.internalFileAttributes = reader.readInt(2); + this.externalFileAttributes = reader.readInt(4); + this.localHeaderOffset = reader.readInt(4); + + if (this.isEncrypted()) { + throw new Error("Encrypted zip are not supported"); + } + + this.fileName = reader.readString(this.fileNameLength); + this.readExtraFields(reader); + this.parseZIP64ExtraField(reader); + this.fileComment = reader.readString(this.fileCommentLength); + }, + + /** + * Parse the external file attributes and get the unix/dos permissions. + */ + processAttributes: function () { + this.unixPermissions = null; + this.dosPermissions = null; + var madeBy = this.versionMadeBy >> 8; + + // Check if we have the DOS directory flag set. + // We look for it in the DOS and UNIX permissions + // but some unknown platform could set it as a compatibility flag. + this.dir = this.externalFileAttributes & 0x0010 ? true : false; + + if(madeBy === MADE_BY_DOS) { + // first 6 bits (0 to 5) + this.dosPermissions = this.externalFileAttributes & 0x3F; + } + + if(madeBy === MADE_BY_UNIX) { + this.unixPermissions = (this.externalFileAttributes >> 16) & 0xFFFF; + // the octal permissions are in (this.unixPermissions & 0x01FF).toString(8); + } + + // fail safe : if the name ends with a / it probably means a folder + if (!this.dir && this.fileName.slice(-1) === '/') { + this.dir = true; + } + }, + + /** + * Parse the ZIP64 extra field and merge the info in the current ZipEntry. + * @param {DataReader} reader the reader to use. + */ + parseZIP64ExtraField: function(reader) { + + if (!this.extraFields[0x0001]) { + return; + } + + // should be something, preparing the extra reader + var extraReader = new StringReader(this.extraFields[0x0001].value); + + // I really hope that these 64bits integer can fit in 32 bits integer, because js + // won't let us have more. + if (this.uncompressedSize === utils.MAX_VALUE_32BITS) { + this.uncompressedSize = extraReader.readInt(8); + } + if (this.compressedSize === utils.MAX_VALUE_32BITS) { + this.compressedSize = extraReader.readInt(8); + } + if (this.localHeaderOffset === utils.MAX_VALUE_32BITS) { + this.localHeaderOffset = extraReader.readInt(8); + } + if (this.diskNumberStart === utils.MAX_VALUE_32BITS) { + this.diskNumberStart = extraReader.readInt(4); + } + }, + /** + * Read the central part of a zip file and add the info in this object. + * @param {DataReader} reader the reader to use. + */ + readExtraFields: function(reader) { + var start = reader.index, + extraFieldId, + extraFieldLength, + extraFieldValue; + + this.extraFields = this.extraFields || {}; + + while (reader.index < start + this.extraFieldsLength) { + extraFieldId = reader.readInt(2); + extraFieldLength = reader.readInt(2); + extraFieldValue = reader.readString(extraFieldLength); + + this.extraFields[extraFieldId] = { + id: extraFieldId, + length: extraFieldLength, + value: extraFieldValue + }; + } + }, + /** + * Apply an UTF8 transformation if needed. + */ + handleUTF8: function() { + if (this.useUTF8()) { + this.fileName = jszipProto.utf8decode(this.fileName); + this.fileComment = jszipProto.utf8decode(this.fileComment); + } else { + var upath = this.findExtraFieldUnicodePath(); + if (upath !== null) { + this.fileName = upath; + } + var ucomment = this.findExtraFieldUnicodeComment(); + if (ucomment !== null) { + this.fileComment = ucomment; + } + } + }, + + /** + * Find the unicode path declared in the extra field, if any. + * @return {String} the unicode path, null otherwise. + */ + findExtraFieldUnicodePath: function() { + var upathField = this.extraFields[0x7075]; + if (upathField) { + var extraReader = new StringReader(upathField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the filename changed, this field is out of date. + if (jszipProto.crc32(this.fileName) !== extraReader.readInt(4)) { + return null; + } + + return jszipProto.utf8decode(extraReader.readString(upathField.length - 5)); + } + return null; + }, + + /** + * Find the unicode comment declared in the extra field, if any. + * @return {String} the unicode comment, null otherwise. + */ + findExtraFieldUnicodeComment: function() { + var ucommentField = this.extraFields[0x6375]; + if (ucommentField) { + var extraReader = new StringReader(ucommentField.value); + + // wrong version + if (extraReader.readInt(1) !== 1) { + return null; + } + + // the crc of the comment changed, this field is out of date. + if (jszipProto.crc32(this.fileComment) !== extraReader.readInt(4)) { + return null; + } + + return jszipProto.utf8decode(extraReader.readString(ucommentField.length - 5)); + } + return null; + } +}; +module.exports = ZipEntry; + +},{"./compressedObject":85,"./object":96,"./stringReader":98,"./utils":104}],107:[function(require,module,exports){ +exports.Parser = require("./lib/parser").Parser; +exports.rules = require("./lib/rules"); +exports.errors = require("./lib/errors"); +exports.results = require("./lib/parsing-results"); +exports.StringSource = require("./lib/StringSource"); +exports.Token = require("./lib/Token"); +exports.bottomUp = require("./lib/bottom-up"); +exports.RegexTokeniser = require("./lib/regex-tokeniser").RegexTokeniser; + +exports.rule = function(ruleBuilder) { + var rule; + return function(input) { + if (!rule) { + rule = ruleBuilder(); + } + return rule(input); + }; +}; + +},{"./lib/StringSource":108,"./lib/Token":109,"./lib/bottom-up":111,"./lib/errors":112,"./lib/parser":114,"./lib/parsing-results":115,"./lib/regex-tokeniser":116,"./lib/rules":117}],108:[function(require,module,exports){ +var util = require("util"); + +var StringSource = module.exports = function(string, description) { + var self = { + asString: function() { + return string; + }, + range: function(startIndex, endIndex) { + return new StringSourceRange(string, description, startIndex, endIndex); + } + }; + return self; +}; + +var StringSourceRange = function(string, description, startIndex, endIndex) { + this._string = string; + this._description = description; + this._startIndex = startIndex; + this._endIndex = endIndex; +}; + +StringSourceRange.prototype.to = function(otherRange) { + // TODO: Assert that tokens are the same across both iterators + return new StringSourceRange(this._string, this._description, this._startIndex, otherRange._endIndex); +}; + +StringSourceRange.prototype.describe = function() { + var position = this._position(); + var description = this._description ? this._description + "\n" : ""; + return util.format("%sLine number: %s\nCharacter number: %s", + description, position.lineNumber, position.characterNumber); +}; + +StringSourceRange.prototype.lineNumber = function() { + return this._position().lineNumber; +}; + +StringSourceRange.prototype.characterNumber = function() { + return this._position().characterNumber; +}; + +StringSourceRange.prototype._position = function() { + var self = this; + var index = 0; + var nextNewLine = function() { + return self._string.indexOf("\n", index); + }; + + var lineNumber = 1; + while (nextNewLine() !== -1 && nextNewLine() < this._startIndex) { + index = nextNewLine() + 1; + lineNumber += 1; + } + var characterNumber = this._startIndex - index + 1; + return {lineNumber: lineNumber, characterNumber: characterNumber}; +}; + +},{"util":157}],109:[function(require,module,exports){ +module.exports = function(name, value, source) { + this.name = name; + this.value = value; + if (source) { + this.source = source; + } +}; + +},{}],110:[function(require,module,exports){ +var TokenIterator = module.exports = function(tokens, startIndex) { + this._tokens = tokens; + this._startIndex = startIndex || 0; +}; + +TokenIterator.prototype.head = function() { + return this._tokens[this._startIndex]; +}; + +TokenIterator.prototype.tail = function(startIndex) { + return new TokenIterator(this._tokens, this._startIndex + 1); +}; + +TokenIterator.prototype.toArray = function() { + return this._tokens.slice(this._startIndex); +}; + +TokenIterator.prototype.end = function() { + return this._tokens[this._tokens.length - 1]; +}; + +// TODO: doesn't need to be a method, can be a separate function, +// which simplifies implementation of the TokenIterator interface +TokenIterator.prototype.to = function(end) { + var start = this.head().source; + var endToken = end.head() || end.end(); + return start.to(endToken.source); +}; + +},{}],111:[function(require,module,exports){ +var rules = require("./rules"); +var results = require("./parsing-results"); + +exports.parser = function(name, prefixRules, infixRuleBuilders) { + var self = { + rule: rule, + leftAssociative: leftAssociative, + rightAssociative: rightAssociative + }; + + var infixRules = new InfixRules(infixRuleBuilders.map(createInfixRule)); + var prefixRule = rules.firstOf(name, prefixRules); + + function createInfixRule(infixRuleBuilder) { + return { + name: infixRuleBuilder.name, + rule: lazyRule(infixRuleBuilder.ruleBuilder.bind(null, self)) + }; + } + + function rule() { + return createRule(infixRules); + } + + function leftAssociative(name) { + return createRule(infixRules.untilExclusive(name)); + } + + function rightAssociative(name) { + return createRule(infixRules.untilInclusive(name)); + } + + function createRule(infixRules) { + return apply.bind(null, infixRules); + } + + function apply(infixRules, tokens) { + var leftResult = prefixRule(tokens); + if (leftResult.isSuccess()) { + return infixRules.apply(leftResult); + } else { + return leftResult; + } + } + + return self; +}; + +function InfixRules(infixRules) { + function untilExclusive(name) { + return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name))); + } + + function untilInclusive(name) { + return new InfixRules(infixRules.slice(0, ruleNames().indexOf(name) + 1)); + } + + function ruleNames() { + return infixRules.map(function(rule) { + return rule.name; + }); + } + + function apply(leftResult) { + var currentResult; + var source; + while (true) { + currentResult = applyToTokens(leftResult.remaining()); + if (currentResult.isSuccess()) { + source = leftResult.source().to(currentResult.source()); + leftResult = results.success( + currentResult.value()(leftResult.value(), source), + currentResult.remaining(), + source + ) + } else if (currentResult.isFailure()) { + return leftResult; + } else { + return currentResult; + } + } + } + + function applyToTokens(tokens) { + return rules.firstOf("infix", infixRules.map(function(infix) { + return infix.rule; + }))(tokens); + } + + return { + apply: apply, + untilExclusive: untilExclusive, + untilInclusive: untilInclusive + } +} + +exports.infix = function(name, ruleBuilder) { + function map(func) { + return exports.infix(name, function(parser) { + var rule = ruleBuilder(parser); + return function(tokens) { + var result = rule(tokens); + return result.map(function(right) { + return function(left, source) { + return func(left, right, source); + }; + }); + }; + }); + } + + return { + name: name, + ruleBuilder: ruleBuilder, + map: map + }; +} + +// TODO: move into a sensible place and remove duplication +var lazyRule = function(ruleBuilder) { + var rule; + return function(input) { + if (!rule) { + rule = ruleBuilder(); + } + return rule(input); + }; +}; + +},{"./parsing-results":115,"./rules":117}],112:[function(require,module,exports){ +exports.error = function(options) { + return new Error(options); +}; + +var Error = function(options) { + this.expected = options.expected; + this.actual = options.actual; + this._location = options.location; +}; + +Error.prototype.describe = function() { + var locationDescription = this._location ? this._location.describe() + ":\n" : ""; + return locationDescription + "Expected " + this.expected + "\nbut got " + this.actual; +}; + +Error.prototype.lineNumber = function() { + return this._location.lineNumber(); +}; + +Error.prototype.characterNumber = function() { + return this._location.characterNumber(); +}; + +},{}],113:[function(require,module,exports){ +var fromArray = exports.fromArray = function(array) { + var index = 0; + var hasNext = function() { + return index < array.length; + }; + return new LazyIterator({ + hasNext: hasNext, + next: function() { + if (!hasNext()) { + throw new Error("No more elements"); + } else { + return array[index++]; + } + } + }); +}; + +var LazyIterator = function(iterator) { + this._iterator = iterator; +}; + +LazyIterator.prototype.map = function(func) { + var iterator = this._iterator; + return new LazyIterator({ + hasNext: function() { + return iterator.hasNext(); + }, + next: function() { + return func(iterator.next()); + } + }); +}; + +LazyIterator.prototype.filter = function(condition) { + var iterator = this._iterator; + + var moved = false; + var hasNext = false; + var next; + var moveIfNecessary = function() { + if (moved) { + return; + } + moved = true; + hasNext = false; + while (iterator.hasNext() && !hasNext) { + next = iterator.next(); + hasNext = condition(next); + } + }; + + return new LazyIterator({ + hasNext: function() { + moveIfNecessary(); + return hasNext; + }, + next: function() { + moveIfNecessary(); + var toReturn = next; + moved = false; + return toReturn; + } + }); +}; + +LazyIterator.prototype.first = function() { + var iterator = this._iterator; + if (this._iterator.hasNext()) { + return iterator.next(); + } else { + return null; + } +}; + +LazyIterator.prototype.toArray = function() { + var result = []; + while (this._iterator.hasNext()) { + result.push(this._iterator.next()); + } + return result; +}; + +},{}],114:[function(require,module,exports){ +var TokenIterator = require("./TokenIterator"); + +exports.Parser = function(options) { + var parseTokens = function(parser, tokens) { + return parser(new TokenIterator(tokens)); + }; + + return { + parseTokens: parseTokens + }; +}; + +},{"./TokenIterator":110}],115:[function(require,module,exports){ +module.exports = { + failure: function(errors, remaining) { + if (errors.length < 1) { + throw new Error("Failure must have errors"); + } + return new Result({ + status: "failure", + remaining: remaining, + errors: errors + }); + }, + error: function(errors, remaining) { + if (errors.length < 1) { + throw new Error("Failure must have errors"); + } + return new Result({ + status: "error", + remaining: remaining, + errors: errors + }); + }, + success: function(value, remaining, source) { + return new Result({ + status: "success", + value: value, + source: source, + remaining: remaining, + errors: [] + }); + }, + cut: function(remaining) { + return new Result({ + status: "cut", + remaining: remaining, + errors: [] + }); + } +}; + +var Result = function(options) { + this._value = options.value; + this._status = options.status; + this._hasValue = options.value !== undefined; + this._remaining = options.remaining; + this._source = options.source; + this._errors = options.errors; +}; + +Result.prototype.map = function(func) { + if (this._hasValue) { + return new Result({ + value: func(this._value, this._source), + status: this._status, + remaining: this._remaining, + source: this._source, + errors: this._errors + }); + } else { + return this; + } +}; + +Result.prototype.changeRemaining = function(remaining) { + return new Result({ + value: this._value, + status: this._status, + remaining: remaining, + source: this._source, + errors: this._errors + }); +}; + +Result.prototype.isSuccess = function() { + return this._status === "success" || this._status === "cut"; +}; + +Result.prototype.isFailure = function() { + return this._status === "failure"; +}; + +Result.prototype.isError = function() { + return this._status === "error"; +}; + +Result.prototype.isCut = function() { + return this._status === "cut"; +}; + +Result.prototype.value = function() { + return this._value; +}; + +Result.prototype.remaining = function() { + return this._remaining; +}; + +Result.prototype.source = function() { + return this._source; +}; + +Result.prototype.errors = function() { + return this._errors; +}; + +},{}],116:[function(require,module,exports){ +var Token = require("./Token"); +var StringSource = require("./StringSource"); + +exports.RegexTokeniser = RegexTokeniser; + +function RegexTokeniser(rules) { + rules = rules.map(function(rule) { + return { + name: rule.name, + regex: new RegExp(rule.regex.source, "g") + }; + }); + + function tokenise(input, description) { + var source = new StringSource(input, description); + var index = 0; + var tokens = []; + + while (index < input.length) { + var result = readNextToken(input, index, source); + index = result.endIndex; + tokens.push(result.token); + } + + tokens.push(endToken(input, source)); + return tokens; + } + + function readNextToken(string, startIndex, source) { + for (var i = 0; i < rules.length; i++) { + var regex = rules[i].regex; + regex.lastIndex = startIndex; + var result = regex.exec(string); + + if (result) { + var endIndex = startIndex + result[0].length; + if (result.index === startIndex && endIndex > startIndex) { + var value = result[1]; + var token = new Token( + rules[i].name, + value, + source.range(startIndex, endIndex) + ); + return {token: token, endIndex: endIndex}; + } + } + } + var endIndex = startIndex + 1; + var token = new Token( + "unrecognisedCharacter", + string.substring(startIndex, endIndex), + source.range(startIndex, endIndex) + ); + return {token: token, endIndex: endIndex}; + } + + function endToken(input, source) { + return new Token( + "end", + null, + source.range(input.length, input.length) + ); + } + + return { + tokenise: tokenise + } +} + + + +},{"./StringSource":108,"./Token":109}],117:[function(require,module,exports){ +var _ = require("underscore"); +var options = require("option"); +var results = require("./parsing-results"); +var errors = require("./errors"); +var lazyIterators = require("./lazy-iterators"); + +exports.token = function(tokenType, value) { + var matchValue = value !== undefined; + return function(input) { + var token = input.head(); + if (token && token.name === tokenType && (!matchValue || token.value === value)) { + return results.success(token.value, input.tail(), token.source); + } else { + var expected = describeToken({name: tokenType, value: value}); + return describeTokenMismatch(input, expected); + } + }; +}; + +exports.tokenOfType = function(tokenType) { + return exports.token(tokenType); +}; + +exports.firstOf = function(name, parsers) { + if (!_.isArray(parsers)) { + parsers = Array.prototype.slice.call(arguments, 1); + } + return function(input) { + return lazyIterators + .fromArray(parsers) + .map(function(parser) { + return parser(input); + }) + .filter(function(result) { + return result.isSuccess() || result.isError(); + }) + .first() || describeTokenMismatch(input, name); + }; +}; + +exports.then = function(parser, func) { + return function(input) { + var result = parser(input); + if (!result.map) { + console.log(result); + } + return result.map(func); + }; +}; + +exports.sequence = function() { + var parsers = Array.prototype.slice.call(arguments, 0); + var rule = function(input) { + var result = _.foldl(parsers, function(memo, parser) { + var result = memo.result; + var hasCut = memo.hasCut; + if (!result.isSuccess()) { + return {result: result, hasCut: hasCut}; + } + var subResult = parser(result.remaining()); + if (subResult.isCut()) { + return {result: result, hasCut: true}; + } else if (subResult.isSuccess()) { + var values; + if (parser.isCaptured) { + values = result.value().withValue(parser, subResult.value()); + } else { + values = result.value(); + } + var remaining = subResult.remaining(); + var source = input.to(remaining); + return { + result: results.success(values, remaining, source), + hasCut: hasCut + }; + } else if (hasCut) { + return {result: results.error(subResult.errors(), subResult.remaining()), hasCut: hasCut}; + } else { + return {result: subResult, hasCut: hasCut}; + } + }, {result: results.success(new SequenceValues(), input), hasCut: false}).result; + var source = input.to(result.remaining()); + return result.map(function(values) { + return values.withValue(exports.sequence.source, source); + }); + }; + rule.head = function() { + var firstCapture = _.find(parsers, isCapturedRule); + return exports.then( + rule, + exports.sequence.extract(firstCapture) + ); + }; + rule.map = function(func) { + return exports.then( + rule, + function(result) { + return func.apply(this, result.toArray()); + } + ); + }; + + function isCapturedRule(subRule) { + return subRule.isCaptured; + } + + return rule; +}; + +var SequenceValues = function(values, valuesArray) { + this._values = values || {}; + this._valuesArray = valuesArray || []; +}; + +SequenceValues.prototype.withValue = function(rule, value) { + if (rule.captureName && rule.captureName in this._values) { + throw new Error("Cannot add second value for capture \"" + rule.captureName + "\""); + } else { + var newValues = _.clone(this._values); + newValues[rule.captureName] = value; + var newValuesArray = this._valuesArray.concat([value]); + return new SequenceValues(newValues, newValuesArray); + } +}; + +SequenceValues.prototype.get = function(rule) { + if (rule.captureName in this._values) { + return this._values[rule.captureName]; + } else { + throw new Error("No value for capture \"" + rule.captureName + "\""); + } +}; + +SequenceValues.prototype.toArray = function() { + return this._valuesArray; +}; + +exports.sequence.capture = function(rule, name) { + var captureRule = function() { + return rule.apply(this, arguments); + }; + captureRule.captureName = name; + captureRule.isCaptured = true; + return captureRule; +}; + +exports.sequence.extract = function(rule) { + return function(result) { + return result.get(rule); + }; +}; + +exports.sequence.applyValues = function(func) { + // TODO: check captureName doesn't conflict with source or other captures + var rules = Array.prototype.slice.call(arguments, 1); + return function(result) { + var values = rules.map(function(rule) { + return result.get(rule); + }); + return func.apply(this, values); + }; +}; + +exports.sequence.source = { + captureName: "โ˜ƒsourceโ˜ƒ" +}; + +exports.sequence.cut = function() { + return function(input) { + return results.cut(input); + }; +}; + +exports.optional = function(rule) { + return function(input) { + var result = rule(input); + if (result.isSuccess()) { + return result.map(options.some); + } else if (result.isFailure()) { + return results.success(options.none, input); + } else { + return result; + } + }; +}; + +exports.zeroOrMoreWithSeparator = function(rule, separator) { + return repeatedWithSeparator(rule, separator, false); +}; + +exports.oneOrMoreWithSeparator = function(rule, separator) { + return repeatedWithSeparator(rule, separator, true); +}; + +var zeroOrMore = exports.zeroOrMore = function(rule) { + return function(input) { + var values = []; + var result; + while ((result = rule(input)) && result.isSuccess()) { + input = result.remaining(); + values.push(result.value()); + } + if (result.isError()) { + return result; + } else { + return results.success(values, input); + } + }; +}; + +exports.oneOrMore = function(rule) { + return exports.oneOrMoreWithSeparator(rule, noOpRule); +}; + +function noOpRule(input) { + return results.success(null, input); +} + +var repeatedWithSeparator = function(rule, separator, isOneOrMore) { + return function(input) { + var result = rule(input); + if (result.isSuccess()) { + var mainRule = exports.sequence.capture(rule, "main"); + var remainingRule = zeroOrMore(exports.then( + exports.sequence(separator, mainRule), + exports.sequence.extract(mainRule) + )); + var remainingResult = remainingRule(result.remaining()); + return results.success([result.value()].concat(remainingResult.value()), remainingResult.remaining()); + } else if (isOneOrMore || result.isError()) { + return result; + } else { + return results.success([], input); + } + }; +}; + +exports.leftAssociative = function(leftRule, rightRule, func) { + var rights; + if (func) { + rights = [{func: func, rule: rightRule}]; + } else { + rights = rightRule; + } + rights = rights.map(function(right) { + return exports.then(right.rule, function(rightValue) { + return function(leftValue, source) { + return right.func(leftValue, rightValue, source); + }; + }); + }); + var repeatedRule = exports.firstOf.apply(null, ["rules"].concat(rights)); + + return function(input) { + var start = input; + var leftResult = leftRule(input); + if (!leftResult.isSuccess()) { + return leftResult; + } + var repeatedResult = repeatedRule(leftResult.remaining()); + while (repeatedResult.isSuccess()) { + var remaining = repeatedResult.remaining(); + var source = start.to(repeatedResult.remaining()); + var right = repeatedResult.value(); + leftResult = results.success( + right(leftResult.value(), source), + remaining, + source + ); + repeatedResult = repeatedRule(leftResult.remaining()); + } + if (repeatedResult.isError()) { + return repeatedResult; + } + return leftResult; + }; +}; + +exports.leftAssociative.firstOf = function() { + return Array.prototype.slice.call(arguments, 0); +}; + +exports.nonConsuming = function(rule) { + return function(input) { + return rule(input).changeRemaining(input); + }; +}; + +var describeToken = function(token) { + if (token.value) { + return token.name + " \"" + token.value + "\""; + } else { + return token.name; + } +}; + +function describeTokenMismatch(input, expected) { + var error; + var token = input.head(); + if (token) { + error = errors.error({ + expected: expected, + actual: describeToken(token), + location: token.source + }); + } else { + error = errors.error({ + expected: expected, + actual: "end of tokens" + }); + } + return results.failure([error], input); +} + +},{"./errors":112,"./lazy-iterators":113,"./parsing-results":115,"option":119,"underscore":118}],118:[function(require,module,exports){ +// Underscore.js 1.4.4 +// http://underscorejs.org +// (c) 2009-2013 Jeremy Ashkenas, DocumentCloud Inc. +// Underscore may be freely distributed under the MIT license. + +(function() { + + // Baseline setup + // -------------- + + // Establish the root object, `window` in the browser, or `global` on the server. + var root = this; + + // Save the previous value of the `_` variable. + var previousUnderscore = root._; + + // Establish the object that gets returned to break out of a loop iteration. + var breaker = {}; + + // Save bytes in the minified (but not gzipped) version: + var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype; + + // Create quick reference variables for speed access to core prototypes. + var push = ArrayProto.push, + slice = ArrayProto.slice, + concat = ArrayProto.concat, + toString = ObjProto.toString, + hasOwnProperty = ObjProto.hasOwnProperty; + + // All **ECMAScript 5** native function implementations that we hope to use + // are declared here. + var + nativeForEach = ArrayProto.forEach, + nativeMap = ArrayProto.map, + nativeReduce = ArrayProto.reduce, + nativeReduceRight = ArrayProto.reduceRight, + nativeFilter = ArrayProto.filter, + nativeEvery = ArrayProto.every, + nativeSome = ArrayProto.some, + nativeIndexOf = ArrayProto.indexOf, + nativeLastIndexOf = ArrayProto.lastIndexOf, + nativeIsArray = Array.isArray, + nativeKeys = Object.keys, + nativeBind = FuncProto.bind; + + // Create a safe reference to the Underscore object for use below. + var _ = function(obj) { + if (obj instanceof _) return obj; + if (!(this instanceof _)) return new _(obj); + this._wrapped = obj; + }; + + // Export the Underscore object for **Node.js**, with + // backwards-compatibility for the old `require()` API. If we're in + // the browser, add `_` as a global object via a string identifier, + // for Closure Compiler "advanced" mode. + if (typeof exports !== 'undefined') { + if (typeof module !== 'undefined' && module.exports) { + exports = module.exports = _; + } + exports._ = _; + } else { + root._ = _; + } + + // Current version. + _.VERSION = '1.4.4'; + + // Collection Functions + // -------------------- + + // The cornerstone, an `each` implementation, aka `forEach`. + // Handles objects with the built-in `forEach`, arrays, and raw objects. + // Delegates to **ECMAScript 5**'s native `forEach` if available. + var each = _.each = _.forEach = function(obj, iterator, context) { + if (obj == null) return; + if (nativeForEach && obj.forEach === nativeForEach) { + obj.forEach(iterator, context); + } else if (obj.length === +obj.length) { + for (var i = 0, l = obj.length; i < l; i++) { + if (iterator.call(context, obj[i], i, obj) === breaker) return; + } + } else { + for (var key in obj) { + if (_.has(obj, key)) { + if (iterator.call(context, obj[key], key, obj) === breaker) return; + } + } + } + }; + + // Return the results of applying the iterator to each element. + // Delegates to **ECMAScript 5**'s native `map` if available. + _.map = _.collect = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context); + each(obj, function(value, index, list) { + results[results.length] = iterator.call(context, value, index, list); + }); + return results; + }; + + var reduceError = 'Reduce of empty array with no initial value'; + + // **Reduce** builds up a single result from a list of values, aka `inject`, + // or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available. + _.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) { + var initial = arguments.length > 2; + if (obj == null) obj = []; + if (nativeReduce && obj.reduce === nativeReduce) { + if (context) iterator = _.bind(iterator, context); + return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator); + } + each(obj, function(value, index, list) { + if (!initial) { + memo = value; + initial = true; + } else { + memo = iterator.call(context, memo, value, index, list); + } + }); + if (!initial) throw new TypeError(reduceError); + return memo; + }; + + // The right-associative version of reduce, also known as `foldr`. + // Delegates to **ECMAScript 5**'s native `reduceRight` if available. + _.reduceRight = _.foldr = function(obj, iterator, memo, context) { + var initial = arguments.length > 2; + if (obj == null) obj = []; + if (nativeReduceRight && obj.reduceRight === nativeReduceRight) { + if (context) iterator = _.bind(iterator, context); + return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator); + } + var length = obj.length; + if (length !== +length) { + var keys = _.keys(obj); + length = keys.length; + } + each(obj, function(value, index, list) { + index = keys ? keys[--length] : --length; + if (!initial) { + memo = obj[index]; + initial = true; + } else { + memo = iterator.call(context, memo, obj[index], index, list); + } + }); + if (!initial) throw new TypeError(reduceError); + return memo; + }; + + // Return the first value which passes a truth test. Aliased as `detect`. + _.find = _.detect = function(obj, iterator, context) { + var result; + any(obj, function(value, index, list) { + if (iterator.call(context, value, index, list)) { + result = value; + return true; + } + }); + return result; + }; + + // Return all the elements that pass a truth test. + // Delegates to **ECMAScript 5**'s native `filter` if available. + // Aliased as `select`. + _.filter = _.select = function(obj, iterator, context) { + var results = []; + if (obj == null) return results; + if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context); + each(obj, function(value, index, list) { + if (iterator.call(context, value, index, list)) results[results.length] = value; + }); + return results; + }; + + // Return all the elements for which a truth test fails. + _.reject = function(obj, iterator, context) { + return _.filter(obj, function(value, index, list) { + return !iterator.call(context, value, index, list); + }, context); + }; + + // Determine whether all of the elements match a truth test. + // Delegates to **ECMAScript 5**'s native `every` if available. + // Aliased as `all`. + _.every = _.all = function(obj, iterator, context) { + iterator || (iterator = _.identity); + var result = true; + if (obj == null) return result; + if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context); + each(obj, function(value, index, list) { + if (!(result = result && iterator.call(context, value, index, list))) return breaker; + }); + return !!result; + }; + + // Determine if at least one element in the object matches a truth test. + // Delegates to **ECMAScript 5**'s native `some` if available. + // Aliased as `any`. + var any = _.some = _.any = function(obj, iterator, context) { + iterator || (iterator = _.identity); + var result = false; + if (obj == null) return result; + if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context); + each(obj, function(value, index, list) { + if (result || (result = iterator.call(context, value, index, list))) return breaker; + }); + return !!result; + }; + + // Determine if the array or object contains a given value (using `===`). + // Aliased as `include`. + _.contains = _.include = function(obj, target) { + if (obj == null) return false; + if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1; + return any(obj, function(value) { + return value === target; + }); + }; + + // Invoke a method (with arguments) on every item in a collection. + _.invoke = function(obj, method) { + var args = slice.call(arguments, 2); + var isFunc = _.isFunction(method); + return _.map(obj, function(value) { + return (isFunc ? method : value[method]).apply(value, args); + }); + }; + + // Convenience version of a common use case of `map`: fetching a property. + _.pluck = function(obj, key) { + return _.map(obj, function(value){ return value[key]; }); + }; + + // Convenience version of a common use case of `filter`: selecting only objects + // containing specific `key:value` pairs. + _.where = function(obj, attrs, first) { + if (_.isEmpty(attrs)) return first ? null : []; + return _[first ? 'find' : 'filter'](obj, function(value) { + for (var key in attrs) { + if (attrs[key] !== value[key]) return false; + } + return true; + }); + }; + + // Convenience version of a common use case of `find`: getting the first object + // containing specific `key:value` pairs. + _.findWhere = function(obj, attrs) { + return _.where(obj, attrs, true); + }; + + // Return the maximum element or (element-based computation). + // Can't optimize arrays of integers longer than 65,535 elements. + // See: https://bugs.webkit.org/show_bug.cgi?id=80797 + _.max = function(obj, iterator, context) { + if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { + return Math.max.apply(Math, obj); + } + if (!iterator && _.isEmpty(obj)) return -Infinity; + var result = {computed : -Infinity, value: -Infinity}; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + computed >= result.computed && (result = {value : value, computed : computed}); + }); + return result.value; + }; + + // Return the minimum element (or element-based computation). + _.min = function(obj, iterator, context) { + if (!iterator && _.isArray(obj) && obj[0] === +obj[0] && obj.length < 65535) { + return Math.min.apply(Math, obj); + } + if (!iterator && _.isEmpty(obj)) return Infinity; + var result = {computed : Infinity, value: Infinity}; + each(obj, function(value, index, list) { + var computed = iterator ? iterator.call(context, value, index, list) : value; + computed < result.computed && (result = {value : value, computed : computed}); + }); + return result.value; + }; + + // Shuffle an array. + _.shuffle = function(obj) { + var rand; + var index = 0; + var shuffled = []; + each(obj, function(value) { + rand = _.random(index++); + shuffled[index - 1] = shuffled[rand]; + shuffled[rand] = value; + }); + return shuffled; + }; + + // An internal function to generate lookup iterators. + var lookupIterator = function(value) { + return _.isFunction(value) ? value : function(obj){ return obj[value]; }; + }; + + // Sort the object's values by a criterion produced by an iterator. + _.sortBy = function(obj, value, context) { + var iterator = lookupIterator(value); + return _.pluck(_.map(obj, function(value, index, list) { + return { + value : value, + index : index, + criteria : iterator.call(context, value, index, list) + }; + }).sort(function(left, right) { + var a = left.criteria; + var b = right.criteria; + if (a !== b) { + if (a > b || a === void 0) return 1; + if (a < b || b === void 0) return -1; + } + return left.index < right.index ? -1 : 1; + }), 'value'); + }; + + // An internal function used for aggregate "group by" operations. + var group = function(obj, value, context, behavior) { + var result = {}; + var iterator = lookupIterator(value || _.identity); + each(obj, function(value, index) { + var key = iterator.call(context, value, index, obj); + behavior(result, key, value); + }); + return result; + }; + + // Groups the object's values by a criterion. Pass either a string attribute + // to group by, or a function that returns the criterion. + _.groupBy = function(obj, value, context) { + return group(obj, value, context, function(result, key, value) { + (_.has(result, key) ? result[key] : (result[key] = [])).push(value); + }); + }; + + // Counts instances of an object that group by a certain criterion. Pass + // either a string attribute to count by, or a function that returns the + // criterion. + _.countBy = function(obj, value, context) { + return group(obj, value, context, function(result, key) { + if (!_.has(result, key)) result[key] = 0; + result[key]++; + }); + }; + + // Use a comparator function to figure out the smallest index at which + // an object should be inserted so as to maintain order. Uses binary search. + _.sortedIndex = function(array, obj, iterator, context) { + iterator = iterator == null ? _.identity : lookupIterator(iterator); + var value = iterator.call(context, obj); + var low = 0, high = array.length; + while (low < high) { + var mid = (low + high) >>> 1; + iterator.call(context, array[mid]) < value ? low = mid + 1 : high = mid; + } + return low; + }; + + // Safely convert anything iterable into a real, live array. + _.toArray = function(obj) { + if (!obj) return []; + if (_.isArray(obj)) return slice.call(obj); + if (obj.length === +obj.length) return _.map(obj, _.identity); + return _.values(obj); + }; + + // Return the number of elements in an object. + _.size = function(obj) { + if (obj == null) return 0; + return (obj.length === +obj.length) ? obj.length : _.keys(obj).length; + }; + + // Array Functions + // --------------- + + // Get the first element of an array. Passing **n** will return the first N + // values in the array. Aliased as `head` and `take`. The **guard** check + // allows it to work with `_.map`. + _.first = _.head = _.take = function(array, n, guard) { + if (array == null) return void 0; + return (n != null) && !guard ? slice.call(array, 0, n) : array[0]; + }; + + // Returns everything but the last entry of the array. Especially useful on + // the arguments object. Passing **n** will return all the values in + // the array, excluding the last N. The **guard** check allows it to work with + // `_.map`. + _.initial = function(array, n, guard) { + return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n)); + }; + + // Get the last element of an array. Passing **n** will return the last N + // values in the array. The **guard** check allows it to work with `_.map`. + _.last = function(array, n, guard) { + if (array == null) return void 0; + if ((n != null) && !guard) { + return slice.call(array, Math.max(array.length - n, 0)); + } else { + return array[array.length - 1]; + } + }; + + // Returns everything but the first entry of the array. Aliased as `tail` and `drop`. + // Especially useful on the arguments object. Passing an **n** will return + // the rest N values in the array. The **guard** + // check allows it to work with `_.map`. + _.rest = _.tail = _.drop = function(array, n, guard) { + return slice.call(array, (n == null) || guard ? 1 : n); + }; + + // Trim out all falsy values from an array. + _.compact = function(array) { + return _.filter(array, _.identity); + }; + + // Internal implementation of a recursive `flatten` function. + var flatten = function(input, shallow, output) { + each(input, function(value) { + if (_.isArray(value)) { + shallow ? push.apply(output, value) : flatten(value, shallow, output); + } else { + output.push(value); + } + }); + return output; + }; + + // Return a completely flattened version of an array. + _.flatten = function(array, shallow) { + return flatten(array, shallow, []); + }; + + // Return a version of the array that does not contain the specified value(s). + _.without = function(array) { + return _.difference(array, slice.call(arguments, 1)); + }; + + // Produce a duplicate-free version of the array. If the array has already + // been sorted, you have the option of using a faster algorithm. + // Aliased as `unique`. + _.uniq = _.unique = function(array, isSorted, iterator, context) { + if (_.isFunction(isSorted)) { + context = iterator; + iterator = isSorted; + isSorted = false; + } + var initial = iterator ? _.map(array, iterator, context) : array; + var results = []; + var seen = []; + each(initial, function(value, index) { + if (isSorted ? (!index || seen[seen.length - 1] !== value) : !_.contains(seen, value)) { + seen.push(value); + results.push(array[index]); + } + }); + return results; + }; + + // Produce an array that contains the union: each distinct element from all of + // the passed-in arrays. + _.union = function() { + return _.uniq(concat.apply(ArrayProto, arguments)); + }; + + // Produce an array that contains every item shared between all the + // passed-in arrays. + _.intersection = function(array) { + var rest = slice.call(arguments, 1); + return _.filter(_.uniq(array), function(item) { + return _.every(rest, function(other) { + return _.indexOf(other, item) >= 0; + }); + }); + }; + + // Take the difference between one array and a number of other arrays. + // Only the elements present in just the first array will remain. + _.difference = function(array) { + var rest = concat.apply(ArrayProto, slice.call(arguments, 1)); + return _.filter(array, function(value){ return !_.contains(rest, value); }); + }; + + // Zip together multiple lists into a single array -- elements that share + // an index go together. + _.zip = function() { + var args = slice.call(arguments); + var length = _.max(_.pluck(args, 'length')); + var results = new Array(length); + for (var i = 0; i < length; i++) { + results[i] = _.pluck(args, "" + i); + } + return results; + }; + + // Converts lists into objects. Pass either a single array of `[key, value]` + // pairs, or two parallel arrays of the same length -- one of keys, and one of + // the corresponding values. + _.object = function(list, values) { + if (list == null) return {}; + var result = {}; + for (var i = 0, l = list.length; i < l; i++) { + if (values) { + result[list[i]] = values[i]; + } else { + result[list[i][0]] = list[i][1]; + } + } + return result; + }; + + // If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**), + // we need this function. Return the position of the first occurrence of an + // item in an array, or -1 if the item is not included in the array. + // Delegates to **ECMAScript 5**'s native `indexOf` if available. + // If the array is large and already in sort order, pass `true` + // for **isSorted** to use binary search. + _.indexOf = function(array, item, isSorted) { + if (array == null) return -1; + var i = 0, l = array.length; + if (isSorted) { + if (typeof isSorted == 'number') { + i = (isSorted < 0 ? Math.max(0, l + isSorted) : isSorted); + } else { + i = _.sortedIndex(array, item); + return array[i] === item ? i : -1; + } + } + if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item, isSorted); + for (; i < l; i++) if (array[i] === item) return i; + return -1; + }; + + // Delegates to **ECMAScript 5**'s native `lastIndexOf` if available. + _.lastIndexOf = function(array, item, from) { + if (array == null) return -1; + var hasIndex = from != null; + if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) { + return hasIndex ? array.lastIndexOf(item, from) : array.lastIndexOf(item); + } + var i = (hasIndex ? from : array.length); + while (i--) if (array[i] === item) return i; + return -1; + }; + + // Generate an integer Array containing an arithmetic progression. A port of + // the native Python `range()` function. See + // [the Python documentation](http://docs.python.org/library/functions.html#range). + _.range = function(start, stop, step) { + if (arguments.length <= 1) { + stop = start || 0; + start = 0; + } + step = arguments[2] || 1; + + var len = Math.max(Math.ceil((stop - start) / step), 0); + var idx = 0; + var range = new Array(len); + + while(idx < len) { + range[idx++] = start; + start += step; + } + + return range; + }; + + // Function (ahem) Functions + // ------------------ + + // Create a function bound to a given object (assigning `this`, and arguments, + // optionally). Delegates to **ECMAScript 5**'s native `Function.bind` if + // available. + _.bind = function(func, context) { + if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1)); + var args = slice.call(arguments, 2); + return function() { + return func.apply(context, args.concat(slice.call(arguments))); + }; + }; + + // Partially apply a function by creating a version that has had some of its + // arguments pre-filled, without changing its dynamic `this` context. + _.partial = function(func) { + var args = slice.call(arguments, 1); + return function() { + return func.apply(this, args.concat(slice.call(arguments))); + }; + }; + + // Bind all of an object's methods to that object. Useful for ensuring that + // all callbacks defined on an object belong to it. + _.bindAll = function(obj) { + var funcs = slice.call(arguments, 1); + if (funcs.length === 0) funcs = _.functions(obj); + each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); }); + return obj; + }; + + // Memoize an expensive function by storing its results. + _.memoize = function(func, hasher) { + var memo = {}; + hasher || (hasher = _.identity); + return function() { + var key = hasher.apply(this, arguments); + return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments)); + }; + }; + + // Delays a function for the given number of milliseconds, and then calls + // it with the arguments supplied. + _.delay = function(func, wait) { + var args = slice.call(arguments, 2); + return setTimeout(function(){ return func.apply(null, args); }, wait); + }; + + // Defers a function, scheduling it to run after the current call stack has + // cleared. + _.defer = function(func) { + return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1))); + }; + + // Returns a function, that, when invoked, will only be triggered at most once + // during a given window of time. + _.throttle = function(func, wait) { + var context, args, timeout, result; + var previous = 0; + var later = function() { + previous = new Date; + timeout = null; + result = func.apply(context, args); + }; + return function() { + var now = new Date; + var remaining = wait - (now - previous); + context = this; + args = arguments; + if (remaining <= 0) { + clearTimeout(timeout); + timeout = null; + previous = now; + result = func.apply(context, args); + } else if (!timeout) { + timeout = setTimeout(later, remaining); + } + return result; + }; + }; + + // Returns a function, that, as long as it continues to be invoked, will not + // be triggered. The function will be called after it stops being called for + // N milliseconds. If `immediate` is passed, trigger the function on the + // leading edge, instead of the trailing. + _.debounce = function(func, wait, immediate) { + var timeout, result; + return function() { + var context = this, args = arguments; + var later = function() { + timeout = null; + if (!immediate) result = func.apply(context, args); + }; + var callNow = immediate && !timeout; + clearTimeout(timeout); + timeout = setTimeout(later, wait); + if (callNow) result = func.apply(context, args); + return result; + }; + }; + + // Returns a function that will be executed at most one time, no matter how + // often you call it. Useful for lazy initialization. + _.once = function(func) { + var ran = false, memo; + return function() { + if (ran) return memo; + ran = true; + memo = func.apply(this, arguments); + func = null; + return memo; + }; + }; + + // Returns the first function passed as an argument to the second, + // allowing you to adjust arguments, run code before and after, and + // conditionally execute the original function. + _.wrap = function(func, wrapper) { + return function() { + var args = [func]; + push.apply(args, arguments); + return wrapper.apply(this, args); + }; + }; + + // Returns a function that is the composition of a list of functions, each + // consuming the return value of the function that follows. + _.compose = function() { + var funcs = arguments; + return function() { + var args = arguments; + for (var i = funcs.length - 1; i >= 0; i--) { + args = [funcs[i].apply(this, args)]; + } + return args[0]; + }; + }; + + // Returns a function that will only be executed after being called N times. + _.after = function(times, func) { + if (times <= 0) return func(); + return function() { + if (--times < 1) { + return func.apply(this, arguments); + } + }; + }; + + // Object Functions + // ---------------- + + // Retrieve the names of an object's properties. + // Delegates to **ECMAScript 5**'s native `Object.keys` + _.keys = nativeKeys || function(obj) { + if (obj !== Object(obj)) throw new TypeError('Invalid object'); + var keys = []; + for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key; + return keys; + }; + + // Retrieve the values of an object's properties. + _.values = function(obj) { + var values = []; + for (var key in obj) if (_.has(obj, key)) values.push(obj[key]); + return values; + }; + + // Convert an object into a list of `[key, value]` pairs. + _.pairs = function(obj) { + var pairs = []; + for (var key in obj) if (_.has(obj, key)) pairs.push([key, obj[key]]); + return pairs; + }; + + // Invert the keys and values of an object. The values must be serializable. + _.invert = function(obj) { + var result = {}; + for (var key in obj) if (_.has(obj, key)) result[obj[key]] = key; + return result; + }; + + // Return a sorted list of the function names available on the object. + // Aliased as `methods` + _.functions = _.methods = function(obj) { + var names = []; + for (var key in obj) { + if (_.isFunction(obj[key])) names.push(key); + } + return names.sort(); + }; + + // Extend a given object with all the properties in passed-in object(s). + _.extend = function(obj) { + each(slice.call(arguments, 1), function(source) { + if (source) { + for (var prop in source) { + obj[prop] = source[prop]; + } + } + }); + return obj; + }; + + // Return a copy of the object only containing the whitelisted properties. + _.pick = function(obj) { + var copy = {}; + var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); + each(keys, function(key) { + if (key in obj) copy[key] = obj[key]; + }); + return copy; + }; + + // Return a copy of the object without the blacklisted properties. + _.omit = function(obj) { + var copy = {}; + var keys = concat.apply(ArrayProto, slice.call(arguments, 1)); + for (var key in obj) { + if (!_.contains(keys, key)) copy[key] = obj[key]; + } + return copy; + }; + + // Fill in a given object with default properties. + _.defaults = function(obj) { + each(slice.call(arguments, 1), function(source) { + if (source) { + for (var prop in source) { + if (obj[prop] == null) obj[prop] = source[prop]; + } + } + }); + return obj; + }; + + // Create a (shallow-cloned) duplicate of an object. + _.clone = function(obj) { + if (!_.isObject(obj)) return obj; + return _.isArray(obj) ? obj.slice() : _.extend({}, obj); + }; + + // Invokes interceptor with the obj, and then returns obj. + // The primary purpose of this method is to "tap into" a method chain, in + // order to perform operations on intermediate results within the chain. + _.tap = function(obj, interceptor) { + interceptor(obj); + return obj; + }; + + // Internal recursive comparison function for `isEqual`. + var eq = function(a, b, aStack, bStack) { + // Identical objects are equal. `0 === -0`, but they aren't identical. + // See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal. + if (a === b) return a !== 0 || 1 / a == 1 / b; + // A strict comparison is necessary because `null == undefined`. + if (a == null || b == null) return a === b; + // Unwrap any wrapped objects. + if (a instanceof _) a = a._wrapped; + if (b instanceof _) b = b._wrapped; + // Compare `[[Class]]` names. + var className = toString.call(a); + if (className != toString.call(b)) return false; + switch (className) { + // Strings, numbers, dates, and booleans are compared by value. + case '[object String]': + // Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is + // equivalent to `new String("5")`. + return a == String(b); + case '[object Number]': + // `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for + // other numeric values. + return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b); + case '[object Date]': + case '[object Boolean]': + // Coerce dates and booleans to numeric primitive values. Dates are compared by their + // millisecond representations. Note that invalid dates with millisecond representations + // of `NaN` are not equivalent. + return +a == +b; + // RegExps are compared by their source patterns and flags. + case '[object RegExp]': + return a.source == b.source && + a.global == b.global && + a.multiline == b.multiline && + a.ignoreCase == b.ignoreCase; + } + if (typeof a != 'object' || typeof b != 'object') return false; + // Assume equality for cyclic structures. The algorithm for detecting cyclic + // structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`. + var length = aStack.length; + while (length--) { + // Linear search. Performance is inversely proportional to the number of + // unique nested structures. + if (aStack[length] == a) return bStack[length] == b; + } + // Add the first object to the stack of traversed objects. + aStack.push(a); + bStack.push(b); + var size = 0, result = true; + // Recursively compare objects and arrays. + if (className == '[object Array]') { + // Compare array lengths to determine if a deep comparison is necessary. + size = a.length; + result = size == b.length; + if (result) { + // Deep compare the contents, ignoring non-numeric properties. + while (size--) { + if (!(result = eq(a[size], b[size], aStack, bStack))) break; + } + } + } else { + // Objects with different constructors are not equivalent, but `Object`s + // from different frames are. + var aCtor = a.constructor, bCtor = b.constructor; + if (aCtor !== bCtor && !(_.isFunction(aCtor) && (aCtor instanceof aCtor) && + _.isFunction(bCtor) && (bCtor instanceof bCtor))) { + return false; + } + // Deep compare objects. + for (var key in a) { + if (_.has(a, key)) { + // Count the expected number of properties. + size++; + // Deep compare each member. + if (!(result = _.has(b, key) && eq(a[key], b[key], aStack, bStack))) break; + } + } + // Ensure that both objects contain the same number of properties. + if (result) { + for (key in b) { + if (_.has(b, key) && !(size--)) break; + } + result = !size; + } + } + // Remove the first object from the stack of traversed objects. + aStack.pop(); + bStack.pop(); + return result; + }; + + // Perform a deep comparison to check if two objects are equal. + _.isEqual = function(a, b) { + return eq(a, b, [], []); + }; + + // Is a given array, string, or object empty? + // An "empty" object has no enumerable own-properties. + _.isEmpty = function(obj) { + if (obj == null) return true; + if (_.isArray(obj) || _.isString(obj)) return obj.length === 0; + for (var key in obj) if (_.has(obj, key)) return false; + return true; + }; + + // Is a given value a DOM element? + _.isElement = function(obj) { + return !!(obj && obj.nodeType === 1); + }; + + // Is a given value an array? + // Delegates to ECMA5's native Array.isArray + _.isArray = nativeIsArray || function(obj) { + return toString.call(obj) == '[object Array]'; + }; + + // Is a given variable an object? + _.isObject = function(obj) { + return obj === Object(obj); + }; + + // Add some isType methods: isArguments, isFunction, isString, isNumber, isDate, isRegExp. + each(['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'], function(name) { + _['is' + name] = function(obj) { + return toString.call(obj) == '[object ' + name + ']'; + }; + }); + + // Define a fallback version of the method in browsers (ahem, IE), where + // there isn't any inspectable "Arguments" type. + if (!_.isArguments(arguments)) { + _.isArguments = function(obj) { + return !!(obj && _.has(obj, 'callee')); + }; + } + + // Optimize `isFunction` if appropriate. + if (typeof (/./) !== 'function') { + _.isFunction = function(obj) { + return typeof obj === 'function'; + }; + } + + // Is a given object a finite number? + _.isFinite = function(obj) { + return isFinite(obj) && !isNaN(parseFloat(obj)); + }; + + // Is the given value `NaN`? (NaN is the only number which does not equal itself). + _.isNaN = function(obj) { + return _.isNumber(obj) && obj != +obj; + }; + + // Is a given value a boolean? + _.isBoolean = function(obj) { + return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; + }; + + // Is a given value equal to null? + _.isNull = function(obj) { + return obj === null; + }; + + // Is a given variable undefined? + _.isUndefined = function(obj) { + return obj === void 0; + }; + + // Shortcut function for checking if an object has a given property directly + // on itself (in other words, not on a prototype). + _.has = function(obj, key) { + return hasOwnProperty.call(obj, key); + }; + + // Utility Functions + // ----------------- + + // Run Underscore.js in *noConflict* mode, returning the `_` variable to its + // previous owner. Returns a reference to the Underscore object. + _.noConflict = function() { + root._ = previousUnderscore; + return this; + }; + + // Keep the identity function around for default iterators. + _.identity = function(value) { + return value; + }; + + // Run a function **n** times. + _.times = function(n, iterator, context) { + var accum = Array(n); + for (var i = 0; i < n; i++) accum[i] = iterator.call(context, i); + return accum; + }; + + // Return a random integer between min and max (inclusive). + _.random = function(min, max) { + if (max == null) { + max = min; + min = 0; + } + return min + Math.floor(Math.random() * (max - min + 1)); + }; + + // List of HTML entities for escaping. + var entityMap = { + escape: { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '/': '/' + } + }; + entityMap.unescape = _.invert(entityMap.escape); + + // Regexes containing the keys and values listed immediately above. + var entityRegexes = { + escape: new RegExp('[' + _.keys(entityMap.escape).join('') + ']', 'g'), + unescape: new RegExp('(' + _.keys(entityMap.unescape).join('|') + ')', 'g') + }; + + // Functions for escaping and unescaping strings to/from HTML interpolation. + _.each(['escape', 'unescape'], function(method) { + _[method] = function(string) { + if (string == null) return ''; + return ('' + string).replace(entityRegexes[method], function(match) { + return entityMap[method][match]; + }); + }; + }); + + // If the value of the named property is a function then invoke it; + // otherwise, return it. + _.result = function(object, property) { + if (object == null) return null; + var value = object[property]; + return _.isFunction(value) ? value.call(object) : value; + }; + + // Add your own custom functions to the Underscore object. + _.mixin = function(obj) { + each(_.functions(obj), function(name){ + var func = _[name] = obj[name]; + _.prototype[name] = function() { + var args = [this._wrapped]; + push.apply(args, arguments); + return result.call(this, func.apply(_, args)); + }; + }); + }; + + // Generate a unique integer id (unique within the entire client session). + // Useful for temporary DOM ids. + var idCounter = 0; + _.uniqueId = function(prefix) { + var id = ++idCounter + ''; + return prefix ? prefix + id : id; + }; + + // By default, Underscore uses ERB-style template delimiters, change the + // following template settings to use alternative delimiters. + _.templateSettings = { + evaluate : /<%([\s\S]+?)%>/g, + interpolate : /<%=([\s\S]+?)%>/g, + escape : /<%-([\s\S]+?)%>/g + }; + + // When customizing `templateSettings`, if you don't want to define an + // interpolation, evaluation or escaping regex, we need one that is + // guaranteed not to match. + var noMatch = /(.)^/; + + // Certain characters need to be escaped so that they can be put into a + // string literal. + var escapes = { + "'": "'", + '\\': '\\', + '\r': 'r', + '\n': 'n', + '\t': 't', + '\u2028': 'u2028', + '\u2029': 'u2029' + }; + + var escaper = /\\|'|\r|\n|\t|\u2028|\u2029/g; + + // JavaScript micro-templating, similar to John Resig's implementation. + // Underscore templating handles arbitrary delimiters, preserves whitespace, + // and correctly escapes quotes within interpolated code. + _.template = function(text, data, settings) { + var render; + settings = _.defaults({}, settings, _.templateSettings); + + // Combine delimiters into one regular expression via alternation. + var matcher = new RegExp([ + (settings.escape || noMatch).source, + (settings.interpolate || noMatch).source, + (settings.evaluate || noMatch).source + ].join('|') + '|$', 'g'); + + // Compile the template source, escaping string literals appropriately. + var index = 0; + var source = "__p+='"; + text.replace(matcher, function(match, escape, interpolate, evaluate, offset) { + source += text.slice(index, offset) + .replace(escaper, function(match) { return '\\' + escapes[match]; }); + + if (escape) { + source += "'+\n((__t=(" + escape + "))==null?'':_.escape(__t))+\n'"; + } + if (interpolate) { + source += "'+\n((__t=(" + interpolate + "))==null?'':__t)+\n'"; + } + if (evaluate) { + source += "';\n" + evaluate + "\n__p+='"; + } + index = offset + match.length; + return match; + }); + source += "';\n"; + + // If a variable is not specified, place data values in local scope. + if (!settings.variable) source = 'with(obj||{}){\n' + source + '}\n'; + + source = "var __t,__p='',__j=Array.prototype.join," + + "print=function(){__p+=__j.call(arguments,'');};\n" + + source + "return __p;\n"; + + try { + render = new Function(settings.variable || 'obj', '_', source); + } catch (e) { + e.source = source; + throw e; + } + + if (data) return render(data, _); + var template = function(data) { + return render.call(this, data, _); + }; + + // Provide the compiled function source as a convenience for precompilation. + template.source = 'function(' + (settings.variable || 'obj') + '){\n' + source + '}'; + + return template; + }; + + // Add a "chain" function, which will delegate to the wrapper. + _.chain = function(obj) { + return _(obj).chain(); + }; + + // OOP + // --------------- + // If Underscore is called as a function, it returns a wrapped object that + // can be used OO-style. This wrapper holds altered versions of all the + // underscore functions. Wrapped objects may be chained. + + // Helper function to continue chaining intermediate results. + var result = function(obj) { + return this._chain ? _(obj).chain() : obj; + }; + + // Add all of the Underscore functions to the wrapper object. + _.mixin(_); + + // Add all mutator Array functions to the wrapper. + each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + var obj = this._wrapped; + method.apply(obj, arguments); + if ((name == 'shift' || name == 'splice') && obj.length === 0) delete obj[0]; + return result.call(this, obj); + }; + }); + + // Add all accessor Array functions to the wrapper. + each(['concat', 'join', 'slice'], function(name) { + var method = ArrayProto[name]; + _.prototype[name] = function() { + return result.call(this, method.apply(this._wrapped, arguments)); + }; + }); + + _.extend(_.prototype, { + + // Start chaining a wrapped Underscore object. + chain: function() { + this._chain = true; + return this; + }, + + // Extracts the result from a wrapped and chained object. + value: function() { + return this._wrapped; + } + + }); + +}).call(this); + +},{}],119:[function(require,module,exports){ +exports.none = Object.create({ + value: function() { + throw new Error('Called value on none'); + }, + isNone: function() { + return true; + }, + isSome: function() { + return false; + }, + map: function() { + return exports.none; + }, + flatMap: function() { + return exports.none; + }, + toArray: function() { + return []; + }, + orElse: callOrReturn, + valueOrElse: callOrReturn +}); + +function callOrReturn(value) { + if (typeof(value) == "function") { + return value(); + } else { + return value; + } +} + +exports.some = function(value) { + return new Some(value); +}; + +var Some = function(value) { + this._value = value; +}; + +Some.prototype.value = function() { + return this._value; +}; + +Some.prototype.isNone = function() { + return false; +}; + +Some.prototype.isSome = function() { + return true; +}; + +Some.prototype.map = function(func) { + return new Some(func(this._value)); +}; + +Some.prototype.flatMap = function(func) { + return func(this._value); +}; + +Some.prototype.toArray = function() { + return [this._value]; +}; + +Some.prototype.orElse = function(value) { + return this; +}; + +Some.prototype.valueOrElse = function(value) { + return this._value; +}; + +exports.isOption = function(value) { + return value === exports.none || value instanceof Some; +}; + +exports.fromNullable = function(value) { + if (value == null) { + return exports.none; + } + return new Some(value); +} + +},{}],120:[function(require,module,exports){ +// Top level file is just a mixin of submodules & constants +'use strict'; + +var assign = require('./lib/utils/common').assign; + +var deflate = require('./lib/deflate'); +var inflate = require('./lib/inflate'); +var constants = require('./lib/zlib/constants'); + +var pako = {}; + +assign(pako, deflate, inflate, constants); + +module.exports = pako; + +},{"./lib/deflate":121,"./lib/inflate":122,"./lib/utils/common":123,"./lib/zlib/constants":126}],121:[function(require,module,exports){ +'use strict'; + + +var zlib_deflate = require('./zlib/deflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); + +var toString = Object.prototype.toString; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + +var Z_NO_FLUSH = 0; +var Z_FINISH = 4; + +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_SYNC_FLUSH = 2; + +var Z_DEFAULT_COMPRESSION = -1; + +var Z_DEFAULT_STRATEGY = 0; + +var Z_DEFLATED = 8; + +/* ===========================================================================*/ + + +/** + * class Deflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[deflate]], + * [[deflateRaw]] and [[gzip]]. + **/ + +/* internal + * Deflate.chunks -> Array + * + * Chunks of output data, if [[Deflate#onData]] not overriden. + **/ + +/** + * Deflate.result -> Uint8Array|Array + * + * Compressed result, generated by default [[Deflate#onData]] + * and [[Deflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Deflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Deflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Deflate.err -> Number + * + * Error code after deflate finished. 0 (Z_OK) on success. + * You will not need it in real life, because deflate errors + * are possible only on wrong options or bad `onData` / `onEnd` + * custom handlers. + **/ + +/** + * Deflate.msg -> String + * + * Error message, if [[Deflate.err]] != 0 + **/ + + +/** + * new Deflate(options) + * - options (Object): zlib deflate options. + * + * Creates new deflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `level` + * - `windowBits` + * - `memLevel` + * - `strategy` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw deflate + * - `gzip` (Boolean) - create gzip wrapper + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * - `header` (Object) - custom header for gzip + * - `text` (Boolean) - true if compressed data believed to be text + * - `time` (Number) - modification time, unix timestamp + * - `os` (Number) - operation system code + * - `extra` (Array) - array of bytes with extra data (max 65536) + * - `name` (String) - file name (binary string) + * - `comment` (String) - comment (binary string) + * - `hcrc` (Boolean) - true if header crc should be added + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var deflate = new pako.Deflate({ level: 3}); + * + * deflate.push(chunk1, false); + * deflate.push(chunk2, true); // true -> last chunk + * + * if (deflate.err) { throw new Error(deflate.err); } + * + * console.log(deflate.result); + * ``` + **/ +function Deflate(options) { + if (!(this instanceof Deflate)) return new Deflate(options); + + this.options = utils.assign({ + level: Z_DEFAULT_COMPRESSION, + method: Z_DEFLATED, + chunkSize: 16384, + windowBits: 15, + memLevel: 8, + strategy: Z_DEFAULT_STRATEGY, + to: '' + }, options || {}); + + var opt = this.options; + + if (opt.raw && (opt.windowBits > 0)) { + opt.windowBits = -opt.windowBits; + } + + else if (opt.gzip && (opt.windowBits > 0) && (opt.windowBits < 16)) { + opt.windowBits += 16; + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_deflate.deflateInit2( + this.strm, + opt.level, + opt.method, + opt.windowBits, + opt.memLevel, + opt.strategy + ); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + if (opt.header) { + zlib_deflate.deflateSetHeader(this.strm, opt.header); + } + + if (opt.dictionary) { + var dict; + // Convert data if needed + if (typeof opt.dictionary === 'string') { + // If we need to compress text, change encoding to utf8. + dict = strings.string2buf(opt.dictionary); + } else if (toString.call(opt.dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(opt.dictionary); + } else { + dict = opt.dictionary; + } + + status = zlib_deflate.deflateSetDictionary(this.strm, dict); + + if (status !== Z_OK) { + throw new Error(msg[status]); + } + + this._dict_set = true; + } +} + +/** + * Deflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data. Strings will be + * converted to utf8 byte sequence. + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to deflate pipe, generating [[Deflate#onData]] calls with + * new compressed chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Deflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the compression context. + * + * On fail call [[Deflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * array format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Deflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var status, _mode; + + if (this.ended) { return false; } + + _mode = (mode === ~~mode) ? mode : ((mode === true) ? Z_FINISH : Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // If we need to compress text, change encoding to utf8. + strm.input = strings.string2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + status = zlib_deflate.deflate(strm, _mode); /* no bad return value */ + + if (status !== Z_STREAM_END && status !== Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + if (strm.avail_out === 0 || (strm.avail_in === 0 && (_mode === Z_FINISH || _mode === Z_SYNC_FLUSH))) { + if (this.options.to === 'string') { + this.onData(strings.buf2binstring(utils.shrinkBuf(strm.output, strm.next_out))); + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== Z_STREAM_END); + + // Finalize on the last chunk. + if (_mode === Z_FINISH) { + status = zlib_deflate.deflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === Z_SYNC_FLUSH) { + this.onEnd(Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Deflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Deflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Deflate#onEnd(status) -> Void + * - status (Number): deflate status. 0 (Z_OK) on success, + * other if not. + * + * Called once after you tell deflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Deflate.prototype.onEnd = function (status) { + // On success - join + if (status === Z_OK) { + if (this.options.to === 'string') { + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * deflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * Compress `data` with deflate algorithm and `options`. + * + * Supported options are: + * + * - level + * - windowBits + * - memLevel + * - strategy + * - dictionary + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be "binary string" + * (each char code [0..255]) + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , data = Uint8Array([1,2,3,4,5,6,7,8,9]); + * + * console.log(pako.deflate(data)); + * ``` + **/ +function deflate(input, options) { + var deflator = new Deflate(options); + + deflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (deflator.err) { throw deflator.msg; } + + return deflator.result; +} + + +/** + * deflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function deflateRaw(input, options) { + options = options || {}; + options.raw = true; + return deflate(input, options); +} + + +/** + * gzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to compress. + * - options (Object): zlib deflate options. + * + * The same as [[deflate]], but create gzip wrapper instead of + * deflate one. + **/ +function gzip(input, options) { + options = options || {}; + options.gzip = true; + return deflate(input, options); +} + + +exports.Deflate = Deflate; +exports.deflate = deflate; +exports.deflateRaw = deflateRaw; +exports.gzip = gzip; + +},{"./utils/common":123,"./utils/strings":124,"./zlib/deflate":128,"./zlib/messages":133,"./zlib/zstream":135}],122:[function(require,module,exports){ +'use strict'; + + +var zlib_inflate = require('./zlib/inflate'); +var utils = require('./utils/common'); +var strings = require('./utils/strings'); +var c = require('./zlib/constants'); +var msg = require('./zlib/messages'); +var ZStream = require('./zlib/zstream'); +var GZheader = require('./zlib/gzheader'); + +var toString = Object.prototype.toString; + +/** + * class Inflate + * + * Generic JS-style wrapper for zlib calls. If you don't need + * streaming behaviour - use more simple functions: [[inflate]] + * and [[inflateRaw]]. + **/ + +/* internal + * inflate.chunks -> Array + * + * Chunks of output data, if [[Inflate#onData]] not overriden. + **/ + +/** + * Inflate.result -> Uint8Array|Array|String + * + * Uncompressed result, generated by default [[Inflate#onData]] + * and [[Inflate#onEnd]] handlers. Filled after you push last chunk + * (call [[Inflate#push]] with `Z_FINISH` / `true` param) or if you + * push a chunk with explicit flush (call [[Inflate#push]] with + * `Z_SYNC_FLUSH` param). + **/ + +/** + * Inflate.err -> Number + * + * Error code after inflate finished. 0 (Z_OK) on success. + * Should be checked if broken data possible. + **/ + +/** + * Inflate.msg -> String + * + * Error message, if [[Inflate.err]] != 0 + **/ + + +/** + * new Inflate(options) + * - options (Object): zlib inflate options. + * + * Creates new inflator instance with specified params. Throws exception + * on bad params. Supported options: + * + * - `windowBits` + * - `dictionary` + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information on these. + * + * Additional options, for internal needs: + * + * - `chunkSize` - size of generated data chunks (16K by default) + * - `raw` (Boolean) - do raw inflate + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * By default, when no options set, autodetect deflate/gzip data format via + * wrapper header. + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , chunk1 = Uint8Array([1,2,3,4,5,6,7,8,9]) + * , chunk2 = Uint8Array([10,11,12,13,14,15,16,17,18,19]); + * + * var inflate = new pako.Inflate({ level: 3}); + * + * inflate.push(chunk1, false); + * inflate.push(chunk2, true); // true -> last chunk + * + * if (inflate.err) { throw new Error(inflate.err); } + * + * console.log(inflate.result); + * ``` + **/ +function Inflate(options) { + if (!(this instanceof Inflate)) return new Inflate(options); + + this.options = utils.assign({ + chunkSize: 16384, + windowBits: 0, + to: '' + }, options || {}); + + var opt = this.options; + + // Force window size for `raw` data, if not set directly, + // because we have no header for autodetect. + if (opt.raw && (opt.windowBits >= 0) && (opt.windowBits < 16)) { + opt.windowBits = -opt.windowBits; + if (opt.windowBits === 0) { opt.windowBits = -15; } + } + + // If `windowBits` not defined (and mode not raw) - set autodetect flag for gzip/deflate + if ((opt.windowBits >= 0) && (opt.windowBits < 16) && + !(options && options.windowBits)) { + opt.windowBits += 32; + } + + // Gzip header has no info about windows size, we can do autodetect only + // for deflate. So, if window size not set, force it to max when gzip possible + if ((opt.windowBits > 15) && (opt.windowBits < 48)) { + // bit 3 (16) -> gzipped data + // bit 4 (32) -> autodetect gzip/deflate + if ((opt.windowBits & 15) === 0) { + opt.windowBits |= 15; + } + } + + this.err = 0; // error code, if happens (0 = Z_OK) + this.msg = ''; // error message + this.ended = false; // used to avoid multiple onEnd() calls + this.chunks = []; // chunks of compressed data + + this.strm = new ZStream(); + this.strm.avail_out = 0; + + var status = zlib_inflate.inflateInit2( + this.strm, + opt.windowBits + ); + + if (status !== c.Z_OK) { + throw new Error(msg[status]); + } + + this.header = new GZheader(); + + zlib_inflate.inflateGetHeader(this.strm, this.header); +} + +/** + * Inflate#push(data[, mode]) -> Boolean + * - data (Uint8Array|Array|ArrayBuffer|String): input data + * - mode (Number|Boolean): 0..6 for corresponding Z_NO_FLUSH..Z_TREE modes. + * See constants. Skipped or `false` means Z_NO_FLUSH, `true` meansh Z_FINISH. + * + * Sends input data to inflate pipe, generating [[Inflate#onData]] calls with + * new output chunks. Returns `true` on success. The last data block must have + * mode Z_FINISH (or `true`). That will flush internal pending buffers and call + * [[Inflate#onEnd]]. For interim explicit flushes (without ending the stream) you + * can use mode Z_SYNC_FLUSH, keeping the decompression context. + * + * On fail call [[Inflate#onEnd]] with error code and return false. + * + * We strongly recommend to use `Uint8Array` on input for best speed (output + * format is detected automatically). Also, don't skip last param and always + * use the same type in your code (boolean or number). That will improve JS speed. + * + * For regular `Array`-s make sure all elements are [0..255]. + * + * ##### Example + * + * ```javascript + * push(chunk, false); // push one of data chunks + * ... + * push(chunk, true); // push last chunk + * ``` + **/ +Inflate.prototype.push = function (data, mode) { + var strm = this.strm; + var chunkSize = this.options.chunkSize; + var dictionary = this.options.dictionary; + var status, _mode; + var next_out_utf8, tail, utf8str; + var dict; + + // Flag to properly process Z_BUF_ERROR on testing inflate call + // when we check that all output data was flushed. + var allowBufError = false; + + if (this.ended) { return false; } + _mode = (mode === ~~mode) ? mode : ((mode === true) ? c.Z_FINISH : c.Z_NO_FLUSH); + + // Convert data if needed + if (typeof data === 'string') { + // Only binary strings can be decompressed on practice + strm.input = strings.binstring2buf(data); + } else if (toString.call(data) === '[object ArrayBuffer]') { + strm.input = new Uint8Array(data); + } else { + strm.input = data; + } + + strm.next_in = 0; + strm.avail_in = strm.input.length; + + do { + if (strm.avail_out === 0) { + strm.output = new utils.Buf8(chunkSize); + strm.next_out = 0; + strm.avail_out = chunkSize; + } + + status = zlib_inflate.inflate(strm, c.Z_NO_FLUSH); /* no bad return value */ + + if (status === c.Z_NEED_DICT && dictionary) { + // Convert data if needed + if (typeof dictionary === 'string') { + dict = strings.string2buf(dictionary); + } else if (toString.call(dictionary) === '[object ArrayBuffer]') { + dict = new Uint8Array(dictionary); + } else { + dict = dictionary; + } + + status = zlib_inflate.inflateSetDictionary(this.strm, dict); + + } + + if (status === c.Z_BUF_ERROR && allowBufError === true) { + status = c.Z_OK; + allowBufError = false; + } + + if (status !== c.Z_STREAM_END && status !== c.Z_OK) { + this.onEnd(status); + this.ended = true; + return false; + } + + if (strm.next_out) { + if (strm.avail_out === 0 || status === c.Z_STREAM_END || (strm.avail_in === 0 && (_mode === c.Z_FINISH || _mode === c.Z_SYNC_FLUSH))) { + + if (this.options.to === 'string') { + + next_out_utf8 = strings.utf8border(strm.output, strm.next_out); + + tail = strm.next_out - next_out_utf8; + utf8str = strings.buf2string(strm.output, next_out_utf8); + + // move tail + strm.next_out = tail; + strm.avail_out = chunkSize - tail; + if (tail) { utils.arraySet(strm.output, strm.output, next_out_utf8, tail, 0); } + + this.onData(utf8str); + + } else { + this.onData(utils.shrinkBuf(strm.output, strm.next_out)); + } + } + } + + // When no more input data, we should check that internal inflate buffers + // are flushed. The only way to do it when avail_out = 0 - run one more + // inflate pass. But if output data not exists, inflate return Z_BUF_ERROR. + // Here we set flag to process this error properly. + // + // NOTE. Deflate does not return error in this case and does not needs such + // logic. + if (strm.avail_in === 0 && strm.avail_out === 0) { + allowBufError = true; + } + + } while ((strm.avail_in > 0 || strm.avail_out === 0) && status !== c.Z_STREAM_END); + + if (status === c.Z_STREAM_END) { + _mode = c.Z_FINISH; + } + + // Finalize on the last chunk. + if (_mode === c.Z_FINISH) { + status = zlib_inflate.inflateEnd(this.strm); + this.onEnd(status); + this.ended = true; + return status === c.Z_OK; + } + + // callback interim results if Z_SYNC_FLUSH. + if (_mode === c.Z_SYNC_FLUSH) { + this.onEnd(c.Z_OK); + strm.avail_out = 0; + return true; + } + + return true; +}; + + +/** + * Inflate#onData(chunk) -> Void + * - chunk (Uint8Array|Array|String): ouput data. Type of array depends + * on js engine support. When string output requested, each chunk + * will be string. + * + * By default, stores data blocks in `chunks[]` property and glue + * those in `onEnd`. Override this handler, if you need another behaviour. + **/ +Inflate.prototype.onData = function (chunk) { + this.chunks.push(chunk); +}; + + +/** + * Inflate#onEnd(status) -> Void + * - status (Number): inflate status. 0 (Z_OK) on success, + * other if not. + * + * Called either after you tell inflate that the input stream is + * complete (Z_FINISH) or should be flushed (Z_SYNC_FLUSH) + * or if an error happened. By default - join collected chunks, + * free memory and fill `results` / `err` properties. + **/ +Inflate.prototype.onEnd = function (status) { + // On success - join + if (status === c.Z_OK) { + if (this.options.to === 'string') { + // Glue & convert here, until we teach pako to send + // utf8 alligned strings to onData + this.result = this.chunks.join(''); + } else { + this.result = utils.flattenChunks(this.chunks); + } + } + this.chunks = []; + this.err = status; + this.msg = this.strm.msg; +}; + + +/** + * inflate(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Decompress `data` with inflate/ungzip and `options`. Autodetect + * format via wrapper header by default. That's why we don't provide + * separate `ungzip` method. + * + * Supported options are: + * + * - windowBits + * + * [http://zlib.net/manual.html#Advanced](http://zlib.net/manual.html#Advanced) + * for more information. + * + * Sugar (options): + * + * - `raw` (Boolean) - say that we work with raw stream, if you don't wish to specify + * negative windowBits implicitly. + * - `to` (String) - if equal to 'string', then result will be converted + * from utf8 to utf16 (javascript) string. When string output requested, + * chunk length can differ from `chunkSize`, depending on content. + * + * + * ##### Example: + * + * ```javascript + * var pako = require('pako') + * , input = pako.deflate([1,2,3,4,5,6,7,8,9]) + * , output; + * + * try { + * output = pako.inflate(input); + * } catch (err) + * console.log(err); + * } + * ``` + **/ +function inflate(input, options) { + var inflator = new Inflate(options); + + inflator.push(input, true); + + // That will never happens, if you don't cheat with options :) + if (inflator.err) { throw inflator.msg; } + + return inflator.result; +} + + +/** + * inflateRaw(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * The same as [[inflate]], but creates raw data, without wrapper + * (header and adler32 crc). + **/ +function inflateRaw(input, options) { + options = options || {}; + options.raw = true; + return inflate(input, options); +} + + +/** + * ungzip(data[, options]) -> Uint8Array|Array|String + * - data (Uint8Array|Array|String): input data to decompress. + * - options (Object): zlib inflate options. + * + * Just shortcut to [[inflate]], because it autodetects format + * by header.content. Done for convenience. + **/ + + +exports.Inflate = Inflate; +exports.inflate = inflate; +exports.inflateRaw = inflateRaw; +exports.ungzip = inflate; + +},{"./utils/common":123,"./utils/strings":124,"./zlib/constants":126,"./zlib/gzheader":129,"./zlib/inflate":131,"./zlib/messages":133,"./zlib/zstream":135}],123:[function(require,module,exports){ +'use strict'; + + +var TYPED_OK = (typeof Uint8Array !== 'undefined') && + (typeof Uint16Array !== 'undefined') && + (typeof Int32Array !== 'undefined'); + + +exports.assign = function (obj /*from1, from2, from3, ...*/) { + var sources = Array.prototype.slice.call(arguments, 1); + while (sources.length) { + var source = sources.shift(); + if (!source) { continue; } + + if (typeof source !== 'object') { + throw new TypeError(source + 'must be non-object'); + } + + for (var p in source) { + if (source.hasOwnProperty(p)) { + obj[p] = source[p]; + } + } + } + + return obj; +}; + + +// reduce buffer size, avoiding mem copy +exports.shrinkBuf = function (buf, size) { + if (buf.length === size) { return buf; } + if (buf.subarray) { return buf.subarray(0, size); } + buf.length = size; + return buf; +}; + + +var fnTyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + if (src.subarray && dest.subarray) { + dest.set(src.subarray(src_offs, src_offs + len), dest_offs); + return; + } + // Fallback to ordinary array + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + var i, l, len, pos, chunk, result; + + // calculate data length + len = 0; + for (i = 0, l = chunks.length; i < l; i++) { + len += chunks[i].length; + } + + // join chunks + result = new Uint8Array(len); + pos = 0; + for (i = 0, l = chunks.length; i < l; i++) { + chunk = chunks[i]; + result.set(chunk, pos); + pos += chunk.length; + } + + return result; + } +}; + +var fnUntyped = { + arraySet: function (dest, src, src_offs, len, dest_offs) { + for (var i = 0; i < len; i++) { + dest[dest_offs + i] = src[src_offs + i]; + } + }, + // Join array of chunks to single array. + flattenChunks: function (chunks) { + return [].concat.apply([], chunks); + } +}; + + +// Enable/Disable typed arrays use, for testing +// +exports.setTyped = function (on) { + if (on) { + exports.Buf8 = Uint8Array; + exports.Buf16 = Uint16Array; + exports.Buf32 = Int32Array; + exports.assign(exports, fnTyped); + } else { + exports.Buf8 = Array; + exports.Buf16 = Array; + exports.Buf32 = Array; + exports.assign(exports, fnUntyped); + } +}; + +exports.setTyped(TYPED_OK); + +},{}],124:[function(require,module,exports){ +// String encode/decode helpers +'use strict'; + + +var utils = require('./common'); + + +// Quick check if we can use fast array to bin string conversion +// +// - apply(Array) can fail on Android 2.2 +// - apply(Uint8Array) can fail on iOS 5.1 Safary +// +var STR_APPLY_OK = true; +var STR_APPLY_UIA_OK = true; + +try { String.fromCharCode.apply(null, [ 0 ]); } catch (__) { STR_APPLY_OK = false; } +try { String.fromCharCode.apply(null, new Uint8Array(1)); } catch (__) { STR_APPLY_UIA_OK = false; } + + +// Table with utf8 lengths (calculated by first byte of sequence) +// Note, that 5 & 6-byte values and some 4-byte values can not be represented in JS, +// because max possible codepoint is 0x10ffff +var _utf8len = new utils.Buf8(256); +for (var q = 0; q < 256; q++) { + _utf8len[q] = (q >= 252 ? 6 : q >= 248 ? 5 : q >= 240 ? 4 : q >= 224 ? 3 : q >= 192 ? 2 : 1); +} +_utf8len[254] = _utf8len[254] = 1; // Invalid sequence start + + +// convert string to array (typed, when possible) +exports.string2buf = function (str) { + var buf, c, c2, m_pos, i, str_len = str.length, buf_len = 0; + + // count binary size + for (m_pos = 0; m_pos < str_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + buf_len += c < 0x80 ? 1 : c < 0x800 ? 2 : c < 0x10000 ? 3 : 4; + } + + // allocate buffer + buf = new utils.Buf8(buf_len); + + // convert + for (i = 0, m_pos = 0; i < buf_len; m_pos++) { + c = str.charCodeAt(m_pos); + if ((c & 0xfc00) === 0xd800 && (m_pos + 1 < str_len)) { + c2 = str.charCodeAt(m_pos + 1); + if ((c2 & 0xfc00) === 0xdc00) { + c = 0x10000 + ((c - 0xd800) << 10) + (c2 - 0xdc00); + m_pos++; + } + } + if (c < 0x80) { + /* one byte */ + buf[i++] = c; + } else if (c < 0x800) { + /* two bytes */ + buf[i++] = 0xC0 | (c >>> 6); + buf[i++] = 0x80 | (c & 0x3f); + } else if (c < 0x10000) { + /* three bytes */ + buf[i++] = 0xE0 | (c >>> 12); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } else { + /* four bytes */ + buf[i++] = 0xf0 | (c >>> 18); + buf[i++] = 0x80 | (c >>> 12 & 0x3f); + buf[i++] = 0x80 | (c >>> 6 & 0x3f); + buf[i++] = 0x80 | (c & 0x3f); + } + } + + return buf; +}; + +// Helper (used in 2 places) +function buf2binstring(buf, len) { + // use fallback for big arrays to avoid stack overflow + if (len < 65537) { + if ((buf.subarray && STR_APPLY_UIA_OK) || (!buf.subarray && STR_APPLY_OK)) { + return String.fromCharCode.apply(null, utils.shrinkBuf(buf, len)); + } + } + + var result = ''; + for (var i = 0; i < len; i++) { + result += String.fromCharCode(buf[i]); + } + return result; +} + + +// Convert byte array to binary string +exports.buf2binstring = function (buf) { + return buf2binstring(buf, buf.length); +}; + + +// Convert binary string (typed, when possible) +exports.binstring2buf = function (str) { + var buf = new utils.Buf8(str.length); + for (var i = 0, len = buf.length; i < len; i++) { + buf[i] = str.charCodeAt(i); + } + return buf; +}; + + +// convert array to string +exports.buf2string = function (buf, max) { + var i, out, c, c_len; + var len = max || buf.length; + + // Reserve max possible length (2 words per char) + // NB: by unknown reasons, Array is significantly faster for + // String.fromCharCode.apply than Uint16Array. + var utf16buf = new Array(len * 2); + + for (out = 0, i = 0; i < len;) { + c = buf[i++]; + // quick process ascii + if (c < 0x80) { utf16buf[out++] = c; continue; } + + c_len = _utf8len[c]; + // skip 5 & 6 byte codes + if (c_len > 4) { utf16buf[out++] = 0xfffd; i += c_len - 1; continue; } + + // apply mask on first byte + c &= c_len === 2 ? 0x1f : c_len === 3 ? 0x0f : 0x07; + // join the rest + while (c_len > 1 && i < len) { + c = (c << 6) | (buf[i++] & 0x3f); + c_len--; + } + + // terminated by end of string? + if (c_len > 1) { utf16buf[out++] = 0xfffd; continue; } + + if (c < 0x10000) { + utf16buf[out++] = c; + } else { + c -= 0x10000; + utf16buf[out++] = 0xd800 | ((c >> 10) & 0x3ff); + utf16buf[out++] = 0xdc00 | (c & 0x3ff); + } + } + + return buf2binstring(utf16buf, out); +}; + + +// Calculate max possible position in utf8 buffer, +// that will not break sequence. If that's not possible +// - (very small limits) return max size as is. +// +// buf[] - utf8 bytes array +// max - length limit (mandatory); +exports.utf8border = function (buf, max) { + var pos; + + max = max || buf.length; + if (max > buf.length) { max = buf.length; } + + // go back from last position, until start of sequence found + pos = max - 1; + while (pos >= 0 && (buf[pos] & 0xC0) === 0x80) { pos--; } + + // Fuckup - very small and broken sequence, + // return max, because we should return something anyway. + if (pos < 0) { return max; } + + // If we came to start of buffer - that means vuffer is too small, + // return max too. + if (pos === 0) { return max; } + + return (pos + _utf8len[buf[pos]] > max) ? pos : max; +}; + +},{"./common":123}],125:[function(require,module,exports){ +'use strict'; + +// Note: adler32 takes 12% for level 0 and 2% for level 6. +// It doesn't worth to make additional optimizationa as in original. +// Small size is preferable. + +function adler32(adler, buf, len, pos) { + var s1 = (adler & 0xffff) |0, + s2 = ((adler >>> 16) & 0xffff) |0, + n = 0; + + while (len !== 0) { + // Set limit ~ twice less than 5552, to keep + // s2 in 31-bits, because we force signed ints. + // in other case %= will fail. + n = len > 2000 ? 2000 : len; + len -= n; + + do { + s1 = (s1 + buf[pos++]) |0; + s2 = (s2 + s1) |0; + } while (--n); + + s1 %= 65521; + s2 %= 65521; + } + + return (s1 | (s2 << 16)) |0; +} + + +module.exports = adler32; + +},{}],126:[function(require,module,exports){ +'use strict'; + + +module.exports = { + + /* Allowed flush values; see deflate() and inflate() below for details */ + Z_NO_FLUSH: 0, + Z_PARTIAL_FLUSH: 1, + Z_SYNC_FLUSH: 2, + Z_FULL_FLUSH: 3, + Z_FINISH: 4, + Z_BLOCK: 5, + Z_TREES: 6, + + /* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + Z_OK: 0, + Z_STREAM_END: 1, + Z_NEED_DICT: 2, + Z_ERRNO: -1, + Z_STREAM_ERROR: -2, + Z_DATA_ERROR: -3, + //Z_MEM_ERROR: -4, + Z_BUF_ERROR: -5, + //Z_VERSION_ERROR: -6, + + /* compression levels */ + Z_NO_COMPRESSION: 0, + Z_BEST_SPEED: 1, + Z_BEST_COMPRESSION: 9, + Z_DEFAULT_COMPRESSION: -1, + + + Z_FILTERED: 1, + Z_HUFFMAN_ONLY: 2, + Z_RLE: 3, + Z_FIXED: 4, + Z_DEFAULT_STRATEGY: 0, + + /* Possible values of the data_type field (though see inflate()) */ + Z_BINARY: 0, + Z_TEXT: 1, + //Z_ASCII: 1, // = Z_TEXT (deprecated) + Z_UNKNOWN: 2, + + /* The deflate compression method */ + Z_DEFLATED: 8 + //Z_NULL: null // Use -1 or null inline, depending on var type +}; + +},{}],127:[function(require,module,exports){ +'use strict'; + +// Note: we can't get significant speed boost here. +// So write code to minimize size - no pregenerated tables +// and array tools dependencies. + + +// Use ordinary array, since untyped makes no boost here +function makeTable() { + var c, table = []; + + for (var n = 0; n < 256; n++) { + c = n; + for (var k = 0; k < 8; k++) { + c = ((c & 1) ? (0xEDB88320 ^ (c >>> 1)) : (c >>> 1)); + } + table[n] = c; + } + + return table; +} + +// Create table on load. Just 255 signed longs. Not a problem. +var crcTable = makeTable(); + + +function crc32(crc, buf, len, pos) { + var t = crcTable, + end = pos + len; + + crc ^= -1; + + for (var i = pos; i < end; i++) { + crc = (crc >>> 8) ^ t[(crc ^ buf[i]) & 0xFF]; + } + + return (crc ^ (-1)); // >>> 0; +} + + +module.exports = crc32; + +},{}],128:[function(require,module,exports){ +'use strict'; + +var utils = require('../utils/common'); +var trees = require('./trees'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var msg = require('./messages'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +var Z_NO_FLUSH = 0; +var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +//var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +//var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +//var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + + +/* compression levels */ +//var Z_NO_COMPRESSION = 0; +//var Z_BEST_SPEED = 1; +//var Z_BEST_COMPRESSION = 9; +var Z_DEFAULT_COMPRESSION = -1; + + +var Z_FILTERED = 1; +var Z_HUFFMAN_ONLY = 2; +var Z_RLE = 3; +var Z_FIXED = 4; +var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +//var Z_BINARY = 0; +//var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + + +/* The deflate compression method */ +var Z_DEFLATED = 8; + +/*============================================================================*/ + + +var MAX_MEM_LEVEL = 9; +/* Maximum value for memLevel in deflateInit2 */ +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_MEM_LEVEL = 8; + + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ +var LITERALS = 256; +/* number of literal bytes 0..255 */ +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ +var D_CODES = 30; +/* number of distance codes */ +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +var MIN_LOOKAHEAD = (MAX_MATCH + MIN_MATCH + 1); + +var PRESET_DICT = 0x20; + +var INIT_STATE = 42; +var EXTRA_STATE = 69; +var NAME_STATE = 73; +var COMMENT_STATE = 91; +var HCRC_STATE = 103; +var BUSY_STATE = 113; +var FINISH_STATE = 666; + +var BS_NEED_MORE = 1; /* block not completed, need more input or more output */ +var BS_BLOCK_DONE = 2; /* block flush performed */ +var BS_FINISH_STARTED = 3; /* finish started, need only more output at next deflate */ +var BS_FINISH_DONE = 4; /* finish done, accept no more input or output */ + +var OS_CODE = 0x03; // Unix :) . Don't detect, use this default. + +function err(strm, errorCode) { + strm.msg = msg[errorCode]; + return errorCode; +} + +function rank(f) { + return ((f) << 1) - ((f) > 4 ? 9 : 0); +} + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output goes + * through this function so some applications may wish to modify it + * to avoid allocating a large strm->output buffer and copying into it. + * (See also read_buf()). + */ +function flush_pending(strm) { + var s = strm.state; + + //_tr_flush_bits(s); + var len = s.pending; + if (len > strm.avail_out) { + len = strm.avail_out; + } + if (len === 0) { return; } + + utils.arraySet(strm.output, s.pending_buf, s.pending_out, len, strm.next_out); + strm.next_out += len; + s.pending_out += len; + strm.total_out += len; + strm.avail_out -= len; + s.pending -= len; + if (s.pending === 0) { + s.pending_out = 0; + } +} + + +function flush_block_only(s, last) { + trees._tr_flush_block(s, (s.block_start >= 0 ? s.block_start : -1), s.strstart - s.block_start, last); + s.block_start = s.strstart; + flush_pending(s.strm); +} + + +function put_byte(s, b) { + s.pending_buf[s.pending++] = b; +} + + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +function putShortMSB(s, b) { +// put_byte(s, (Byte)(b >> 8)); +// put_byte(s, (Byte)(b & 0xff)); + s.pending_buf[s.pending++] = (b >>> 8) & 0xff; + s.pending_buf[s.pending++] = b & 0xff; +} + + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->input buffer and copying from it. + * (See also flush_pending()). + */ +function read_buf(strm, buf, start, size) { + var len = strm.avail_in; + + if (len > size) { len = size; } + if (len === 0) { return 0; } + + strm.avail_in -= len; + + // zmemcpy(buf, strm->next_in, len); + utils.arraySet(buf, strm.input, strm.next_in, len, start); + if (strm.state.wrap === 1) { + strm.adler = adler32(strm.adler, buf, len, start); + } + + else if (strm.state.wrap === 2) { + strm.adler = crc32(strm.adler, buf, len, start); + } + + strm.next_in += len; + strm.total_in += len; + + return len; +} + + +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +function longest_match(s, cur_match) { + var chain_length = s.max_chain_length; /* max hash chain length */ + var scan = s.strstart; /* current string */ + var match; /* matched string */ + var len; /* length of current match */ + var best_len = s.prev_length; /* best match length so far */ + var nice_match = s.nice_match; /* stop if match long enough */ + var limit = (s.strstart > (s.w_size - MIN_LOOKAHEAD)) ? + s.strstart - (s.w_size - MIN_LOOKAHEAD) : 0/*NIL*/; + + var _win = s.window; // shortcut + + var wmask = s.w_mask; + var prev = s.prev; + + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + + var strend = s.strstart + MAX_MATCH; + var scan_end1 = _win[scan + best_len - 1]; + var scan_end = _win[scan + best_len]; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + // Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s.prev_length >= s.good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if (nice_match > s.lookahead) { nice_match = s.lookahead; } + + // Assert((ulg)s->strstart <= s->window_size-MIN_LOOKAHEAD, "need lookahead"); + + do { + // Assert(cur_match < s->strstart, "no future"); + match = cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ + + if (_win[match + best_len] !== scan_end || + _win[match + best_len - 1] !== scan_end1 || + _win[match] !== _win[scan] || + _win[++match] !== _win[scan + 1]) { + continue; + } + + /* The check at best_len-1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2; + match++; + // Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart+258. + */ + do { + /*jshint noempty:false*/ + } while (_win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + _win[++scan] === _win[++match] && _win[++scan] === _win[++match] && + scan < strend); + + // Assert(scan <= s->window+(unsigned)(s->window_size-1), "wild scan"); + + len = MAX_MATCH - (strend - scan); + scan = strend - MAX_MATCH; + + if (len > best_len) { + s.match_start = cur_match; + best_len = len; + if (len >= nice_match) { + break; + } + scan_end1 = _win[scan + best_len - 1]; + scan_end = _win[scan + best_len]; + } + } while ((cur_match = prev[cur_match & wmask]) > limit && --chain_length !== 0); + + if (best_len <= s.lookahead) { + return best_len; + } + return s.lookahead; +} + + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +function fill_window(s) { + var _w_size = s.w_size; + var p, n, m, more, str; + + //Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = s.window_size - s.lookahead - s.strstart; + + // JS ints have 32 bit, block below not needed + /* Deal with !@#$% 64K limit: */ + //if (sizeof(int) <= 2) { + // if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + // more = wsize; + // + // } else if (more == (unsigned)(-1)) { + // /* Very unlikely, but possible on 16 bit machine if + // * strstart == 0 && lookahead == 1 (input done a byte at time) + // */ + // more--; + // } + //} + + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s.strstart >= _w_size + (_w_size - MIN_LOOKAHEAD)) { + + utils.arraySet(s.window, s.window, _w_size, _w_size, 0); + s.match_start -= _w_size; + s.strstart -= _w_size; + /* we now have strstart >= MAX_DIST */ + s.block_start -= _w_size; + + /* Slide the hash table (could be avoided with 32 bit values + at the expense of memory usage). We slide even when level == 0 + to keep the hash table consistent if we switch back to level > 0 + later. (Using level 0 permanently is not an optimal usage of + zlib, so we don't care about this pathological case.) + */ + + n = s.hash_size; + p = n; + do { + m = s.head[--p]; + s.head[p] = (m >= _w_size ? m - _w_size : 0); + } while (--n); + + n = _w_size; + p = n; + do { + m = s.prev[--p]; + s.prev[p] = (m >= _w_size ? m - _w_size : 0); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); + + more += _w_size; + } + if (s.strm.avail_in === 0) { + break; + } + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + //Assert(more >= 2, "more < 2"); + n = read_buf(s.strm, s.window, s.strstart + s.lookahead, more); + s.lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s.lookahead + s.insert >= MIN_MATCH) { + str = s.strstart - s.insert; + s.ins_h = s.window[str]; + + /* UPDATE_HASH(s, s->ins_h, s->window[str + 1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + 1]) & s.hash_mask; +//#if MIN_MATCH != 3 +// Call update_hash() MIN_MATCH-3 more times +//#endif + while (s.insert) { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = str; + str++; + s.insert--; + if (s.lookahead + s.insert < MIN_MATCH) { + break; + } + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s.lookahead < MIN_LOOKAHEAD && s.strm.avail_in !== 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ +// if (s.high_water < s.window_size) { +// var curr = s.strstart + s.lookahead; +// var init = 0; +// +// if (s.high_water < curr) { +// /* Previous high water mark below current data -- zero WIN_INIT +// * bytes or up to end of window, whichever is less. +// */ +// init = s.window_size - curr; +// if (init > WIN_INIT) +// init = WIN_INIT; +// zmemzero(s->window + curr, (unsigned)init); +// s->high_water = curr + init; +// } +// else if (s->high_water < (ulg)curr + WIN_INIT) { +// /* High water mark at or above current data, but below current data +// * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up +// * to end of window, whichever is less. +// */ +// init = (ulg)curr + WIN_INIT - s->high_water; +// if (init > s->window_size - s->high_water) +// init = s->window_size - s->high_water; +// zmemzero(s->window + s->high_water, (unsigned)init); +// s->high_water += init; +// } +// } +// +// Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, +// "not enough room for search"); +} + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * This function does not insert new strings in the dictionary since + * uncompressible data is probably not useful. This function is used + * only for the level=0 compression option. + * NOTE: this function should be optimized to avoid extra copying from + * window to pending_buf. + */ +function deflate_stored(s, flush) { + /* Stored blocks are limited to 0xffff bytes, pending_buf is limited + * to pending_buf_size, and each stored block has a 5 byte header: + */ + var max_block_size = 0xffff; + + if (max_block_size > s.pending_buf_size - 5) { + max_block_size = s.pending_buf_size - 5; + } + + /* Copy as much as possible from input to output: */ + for (;;) { + /* Fill the window as much as possible: */ + if (s.lookahead <= 1) { + + //Assert(s->strstart < s->w_size+MAX_DIST(s) || + // s->block_start >= (long)s->w_size, "slide too late"); +// if (!(s.strstart < s.w_size + (s.w_size - MIN_LOOKAHEAD) || +// s.block_start >= s.w_size)) { +// throw new Error("slide too late"); +// } + + fill_window(s); + if (s.lookahead === 0 && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + + if (s.lookahead === 0) { + break; + } + /* flush the current block */ + } + //Assert(s->block_start >= 0L, "block gone"); +// if (s.block_start < 0) throw new Error("block gone"); + + s.strstart += s.lookahead; + s.lookahead = 0; + + /* Emit a stored block if pending_buf will be full: */ + var max_start = s.block_start + max_block_size; + + if (s.strstart === 0 || s.strstart >= max_start) { + /* strstart == 0 is possible when wraparound on 16-bit machine */ + s.lookahead = s.strstart - max_start; + s.strstart = max_start; + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + + + } + /* Flush if we may have to slide, otherwise block_start may become + * negative and the data will be gone: + */ + if (s.strstart - s.block_start >= (s.w_size - MIN_LOOKAHEAD)) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + + s.insert = 0; + + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + + if (s.strstart > s.block_start) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_NEED_MORE; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +function deflate_fast(s, flush) { + var hash_head; /* head of the hash chain */ + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { + break; /* flush the current block */ + } + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head !== 0/*NIL*/ && ((s.strstart - hash_head) <= (s.w_size - MIN_LOOKAHEAD))) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + } + if (s.match_length >= MIN_MATCH) { + // check_match(s, s.strstart, s.match_start, s.match_length); // for debug only + + /*** _tr_tally_dist(s, s.strstart - s.match_start, + s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, s.strstart - s.match_start, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ + if (s.match_length <= s.max_lazy_match/*max_insert_length*/ && s.lookahead >= MIN_MATCH) { + s.match_length--; /* string at strstart already in table */ + do { + s.strstart++; + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s.match_length !== 0); + s.strstart++; + } else + { + s.strstart += s.match_length; + s.match_length = 0; + s.ins_h = s.window[s.strstart]; + /* UPDATE_HASH(s, s.ins_h, s.window[s.strstart+1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + 1]) & s.hash_mask; + +//#if MIN_MATCH != 3 +// Call UPDATE_HASH() MIN_MATCH-3 more times +//#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s.window[s.strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = ((s.strstart < (MIN_MATCH - 1)) ? s.strstart : MIN_MATCH - 1); + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +function deflate_slow(s, flush) { + var hash_head; /* head of hash chain */ + var bflush; /* set if current block must be flushed */ + + var max_insert; + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s.lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s.lookahead < MIN_LOOKAHEAD && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart+2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = 0/*NIL*/; + if (s.lookahead >= MIN_MATCH) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + + /* Find the longest match, discarding those <= prev_length. + */ + s.prev_length = s.match_length; + s.prev_match = s.match_start; + s.match_length = MIN_MATCH - 1; + + if (hash_head !== 0/*NIL*/ && s.prev_length < s.max_lazy_match && + s.strstart - hash_head <= (s.w_size - MIN_LOOKAHEAD)/*MAX_DIST(s)*/) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s.match_length = longest_match(s, hash_head); + /* longest_match() sets match_start */ + + if (s.match_length <= 5 && + (s.strategy === Z_FILTERED || (s.match_length === MIN_MATCH && s.strstart - s.match_start > 4096/*TOO_FAR*/))) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s.match_length = MIN_MATCH - 1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s.prev_length >= MIN_MATCH && s.match_length <= s.prev_length) { + max_insert = s.strstart + s.lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + //check_match(s, s.strstart-1, s.prev_match, s.prev_length); + + /***_tr_tally_dist(s, s.strstart - 1 - s.prev_match, + s.prev_length - MIN_MATCH, bflush);***/ + bflush = trees._tr_tally(s, s.strstart - 1 - s.prev_match, s.prev_length - MIN_MATCH); + /* Insert in hash table all strings up to the end of the match. + * strstart-1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s.lookahead -= s.prev_length - 1; + s.prev_length -= 2; + do { + if (++s.strstart <= max_insert) { + /*** INSERT_STRING(s, s.strstart, hash_head); ***/ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[s.strstart + MIN_MATCH - 1]) & s.hash_mask; + hash_head = s.prev[s.strstart & s.w_mask] = s.head[s.ins_h]; + s.head[s.ins_h] = s.strstart; + /***/ + } + } while (--s.prev_length !== 0); + s.match_available = 0; + s.match_length = MIN_MATCH - 1; + s.strstart++; + + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + } else if (s.match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + if (bflush) { + /*** FLUSH_BLOCK_ONLY(s, 0) ***/ + flush_block_only(s, false); + /***/ + } + s.strstart++; + s.lookahead--; + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s.match_available = 1; + s.strstart++; + s.lookahead--; + } + } + //Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s.match_available) { + //Tracevv((stderr,"%c", s->window[s->strstart-1])); + /*** _tr_tally_lit(s, s.window[s.strstart-1], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart - 1]); + + s.match_available = 0; + } + s.insert = s.strstart < MIN_MATCH - 1 ? s.strstart : MIN_MATCH - 1; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + + return BS_BLOCK_DONE; +} + + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +function deflate_rle(s, flush) { + var bflush; /* set if current block must be flushed */ + var prev; /* byte at distance one to match */ + var scan, strend; /* scan goes up to strend for length of run */ + + var _win = s.window; + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s.lookahead <= MAX_MATCH) { + fill_window(s); + if (s.lookahead <= MAX_MATCH && flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + if (s.lookahead === 0) { break; } /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s.match_length = 0; + if (s.lookahead >= MIN_MATCH && s.strstart > 0) { + scan = s.strstart - 1; + prev = _win[scan]; + if (prev === _win[++scan] && prev === _win[++scan] && prev === _win[++scan]) { + strend = s.strstart + MAX_MATCH; + do { + /*jshint noempty:false*/ + } while (prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + prev === _win[++scan] && prev === _win[++scan] && + scan < strend); + s.match_length = MAX_MATCH - (strend - scan); + if (s.match_length > s.lookahead) { + s.match_length = s.lookahead; + } + } + //Assert(scan <= s->window+(uInt)(s->window_size-1), "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s.match_length >= MIN_MATCH) { + //check_match(s, s.strstart, s.strstart - 1, s.match_length); + + /*** _tr_tally_dist(s, 1, s.match_length - MIN_MATCH, bflush); ***/ + bflush = trees._tr_tally(s, 1, s.match_length - MIN_MATCH); + + s.lookahead -= s.match_length; + s.strstart += s.match_length; + s.match_length = 0; + } else { + /* No match, output a literal byte */ + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + + s.lookahead--; + s.strstart++; + } + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +function deflate_huff(s, flush) { + var bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s.lookahead === 0) { + fill_window(s); + if (s.lookahead === 0) { + if (flush === Z_NO_FLUSH) { + return BS_NEED_MORE; + } + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s.match_length = 0; + //Tracevv((stderr,"%c", s->window[s->strstart])); + /*** _tr_tally_lit(s, s.window[s.strstart], bflush); ***/ + bflush = trees._tr_tally(s, 0, s.window[s.strstart]); + s.lookahead--; + s.strstart++; + if (bflush) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + } + s.insert = 0; + if (flush === Z_FINISH) { + /*** FLUSH_BLOCK(s, 1); ***/ + flush_block_only(s, true); + if (s.strm.avail_out === 0) { + return BS_FINISH_STARTED; + } + /***/ + return BS_FINISH_DONE; + } + if (s.last_lit) { + /*** FLUSH_BLOCK(s, 0); ***/ + flush_block_only(s, false); + if (s.strm.avail_out === 0) { + return BS_NEED_MORE; + } + /***/ + } + return BS_BLOCK_DONE; +} + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +function Config(good_length, max_lazy, nice_length, max_chain, func) { + this.good_length = good_length; + this.max_lazy = max_lazy; + this.nice_length = nice_length; + this.max_chain = max_chain; + this.func = func; +} + +var configuration_table; + +configuration_table = [ + /* good lazy nice chain */ + new Config(0, 0, 0, 0, deflate_stored), /* 0 store only */ + new Config(4, 4, 8, 4, deflate_fast), /* 1 max speed, no lazy matches */ + new Config(4, 5, 16, 8, deflate_fast), /* 2 */ + new Config(4, 6, 32, 32, deflate_fast), /* 3 */ + + new Config(4, 4, 16, 16, deflate_slow), /* 4 lazy matches */ + new Config(8, 16, 32, 32, deflate_slow), /* 5 */ + new Config(8, 16, 128, 128, deflate_slow), /* 6 */ + new Config(8, 32, 128, 256, deflate_slow), /* 7 */ + new Config(32, 128, 258, 1024, deflate_slow), /* 8 */ + new Config(32, 258, 258, 4096, deflate_slow) /* 9 max compression */ +]; + + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +function lm_init(s) { + s.window_size = 2 * s.w_size; + + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + + /* Set the default configuration parameters: + */ + s.max_lazy_match = configuration_table[s.level].max_lazy; + s.good_match = configuration_table[s.level].good_length; + s.nice_match = configuration_table[s.level].nice_length; + s.max_chain_length = configuration_table[s.level].max_chain; + + s.strstart = 0; + s.block_start = 0; + s.lookahead = 0; + s.insert = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + s.ins_h = 0; +} + + +function DeflateState() { + this.strm = null; /* pointer back to this zlib stream */ + this.status = 0; /* as the name implies */ + this.pending_buf = null; /* output still pending */ + this.pending_buf_size = 0; /* size of pending_buf */ + this.pending_out = 0; /* next pending byte to output to the stream */ + this.pending = 0; /* nb of bytes in the pending buffer */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.gzhead = null; /* gzip header information to write */ + this.gzindex = 0; /* where in extra, name, or comment */ + this.method = Z_DEFLATED; /* can only be DEFLATED */ + this.last_flush = -1; /* value of flush param for previous deflate call */ + + this.w_size = 0; /* LZ77 window size (32K by default) */ + this.w_bits = 0; /* log2(w_size) (8..16) */ + this.w_mask = 0; /* w_size - 1 */ + + this.window = null; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. + */ + + this.window_size = 0; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + this.prev = null; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + this.head = null; /* Heads of the hash chains or NIL. */ + + this.ins_h = 0; /* hash index of string to be inserted */ + this.hash_size = 0; /* number of elements in hash table */ + this.hash_bits = 0; /* log2(hash_size) */ + this.hash_mask = 0; /* hash_size-1 */ + + this.hash_shift = 0; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + this.block_start = 0; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + this.match_length = 0; /* length of best match */ + this.prev_match = 0; /* previous match */ + this.match_available = 0; /* set if previous match exists */ + this.strstart = 0; /* start of string to insert */ + this.match_start = 0; /* start of matching string */ + this.lookahead = 0; /* number of valid bytes ahead in window */ + + this.prev_length = 0; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + this.max_chain_length = 0; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + this.max_lazy_match = 0; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ + // That's alias to max_lazy_match, don't use directly + //this.max_insert_length = 0; + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + this.level = 0; /* compression level (1..9) */ + this.strategy = 0; /* favor or force Huffman coding*/ + + this.good_match = 0; + /* Use a faster search when the previous match is longer than this */ + + this.nice_match = 0; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + + /* Didn't use ct_data typedef below to suppress compiler warning */ + + // struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + // struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + // struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + // Use flat array of DOUBLE size, with interleaved fata, + // because JS does not support effective + this.dyn_ltree = new utils.Buf16(HEAP_SIZE * 2); + this.dyn_dtree = new utils.Buf16((2 * D_CODES + 1) * 2); + this.bl_tree = new utils.Buf16((2 * BL_CODES + 1) * 2); + zero(this.dyn_ltree); + zero(this.dyn_dtree); + zero(this.bl_tree); + + this.l_desc = null; /* desc. for literal tree */ + this.d_desc = null; /* desc. for distance tree */ + this.bl_desc = null; /* desc. for bit length tree */ + + //ush bl_count[MAX_BITS+1]; + this.bl_count = new utils.Buf16(MAX_BITS + 1); + /* number of codes at each bit length for an optimal tree */ + + //int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + this.heap = new utils.Buf16(2 * L_CODES + 1); /* heap used to build the Huffman trees */ + zero(this.heap); + + this.heap_len = 0; /* number of elements in the heap */ + this.heap_max = 0; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + this.depth = new utils.Buf16(2 * L_CODES + 1); //uch depth[2*L_CODES+1]; + zero(this.depth); + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + + this.l_buf = 0; /* buffer index for literals or lengths */ + + this.lit_bufsize = 0; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + this.last_lit = 0; /* running index in l_buf */ + + this.d_buf = 0; + /* Buffer index for distances. To simplify the code, d_buf and l_buf have + * the same number of elements. To use different lengths, an extra flag + * array would be necessary. + */ + + this.opt_len = 0; /* bit length of current block with optimal trees */ + this.static_len = 0; /* bit length of current block with static trees */ + this.matches = 0; /* number of string matches in current block */ + this.insert = 0; /* bytes at end of window left to insert */ + + + this.bi_buf = 0; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + this.bi_valid = 0; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + // Used for window memory init. We safely ignore it for JS. That makes + // sense only for pointers and memory check tools. + //this.high_water = 0; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ +} + + +function deflateResetKeep(strm) { + var s; + + if (!strm || !strm.state) { + return err(strm, Z_STREAM_ERROR); + } + + strm.total_in = strm.total_out = 0; + strm.data_type = Z_UNKNOWN; + + s = strm.state; + s.pending = 0; + s.pending_out = 0; + + if (s.wrap < 0) { + s.wrap = -s.wrap; + /* was made negative by deflate(..., Z_FINISH); */ + } + s.status = (s.wrap ? INIT_STATE : BUSY_STATE); + strm.adler = (s.wrap === 2) ? + 0 // crc32(0, Z_NULL, 0) + : + 1; // adler32(0, Z_NULL, 0) + s.last_flush = Z_NO_FLUSH; + trees._tr_init(s); + return Z_OK; +} + + +function deflateReset(strm) { + var ret = deflateResetKeep(strm); + if (ret === Z_OK) { + lm_init(strm.state); + } + return ret; +} + + +function deflateSetHeader(strm, head) { + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + if (strm.state.wrap !== 2) { return Z_STREAM_ERROR; } + strm.state.gzhead = head; + return Z_OK; +} + + +function deflateInit2(strm, level, method, windowBits, memLevel, strategy) { + if (!strm) { // === Z_NULL + return Z_STREAM_ERROR; + } + var wrap = 1; + + if (level === Z_DEFAULT_COMPRESSION) { + level = 6; + } + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + windowBits = -windowBits; + } + + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } + + + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method !== Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED) { + return err(strm, Z_STREAM_ERROR); + } + + + if (windowBits === 8) { + windowBits = 9; + } + /* until 256-byte window bug fixed */ + + var s = new DeflateState(); + + strm.state = s; + s.strm = strm; + + s.wrap = wrap; + s.gzhead = null; + s.w_bits = windowBits; + s.w_size = 1 << s.w_bits; + s.w_mask = s.w_size - 1; + + s.hash_bits = memLevel + 7; + s.hash_size = 1 << s.hash_bits; + s.hash_mask = s.hash_size - 1; + s.hash_shift = ~~((s.hash_bits + MIN_MATCH - 1) / MIN_MATCH); + + s.window = new utils.Buf8(s.w_size * 2); + s.head = new utils.Buf16(s.hash_size); + s.prev = new utils.Buf16(s.w_size); + + // Don't need mem init magic for JS. + //s.high_water = 0; /* nothing written to s->window yet */ + + s.lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + s.pending_buf_size = s.lit_bufsize * 4; + + //overlay = (ushf *) ZALLOC(strm, s->lit_bufsize, sizeof(ush)+2); + //s->pending_buf = (uchf *) overlay; + s.pending_buf = new utils.Buf8(s.pending_buf_size); + + // It is offset from `s.pending_buf` (size is `s.lit_bufsize * 2`) + //s->d_buf = overlay + s->lit_bufsize/sizeof(ush); + s.d_buf = 1 * s.lit_bufsize; + + //s->l_buf = s->pending_buf + (1+sizeof(ush))*s->lit_bufsize; + s.l_buf = (1 + 2) * s.lit_bufsize; + + s.level = level; + s.strategy = strategy; + s.method = method; + + return deflateReset(strm); +} + +function deflateInit(strm, level) { + return deflateInit2(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY); +} + + +function deflate(strm, flush) { + var old_flush, s; + var beg, val; // for gzip header write only + + if (!strm || !strm.state || + flush > Z_BLOCK || flush < 0) { + return strm ? err(strm, Z_STREAM_ERROR) : Z_STREAM_ERROR; + } + + s = strm.state; + + if (!strm.output || + (!strm.input && strm.avail_in !== 0) || + (s.status === FINISH_STATE && flush !== Z_FINISH)) { + return err(strm, (strm.avail_out === 0) ? Z_BUF_ERROR : Z_STREAM_ERROR); + } + + s.strm = strm; /* just in case */ + old_flush = s.last_flush; + s.last_flush = flush; + + /* Write the header */ + if (s.status === INIT_STATE) { + + if (s.wrap === 2) { // GZIP header + strm.adler = 0; //crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (!s.gzhead) { // s->gzhead == Z_NULL + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s.status = BUSY_STATE; + } + else { + put_byte(s, (s.gzhead.text ? 1 : 0) + + (s.gzhead.hcrc ? 2 : 0) + + (!s.gzhead.extra ? 0 : 4) + + (!s.gzhead.name ? 0 : 8) + + (!s.gzhead.comment ? 0 : 16) + ); + put_byte(s, s.gzhead.time & 0xff); + put_byte(s, (s.gzhead.time >> 8) & 0xff); + put_byte(s, (s.gzhead.time >> 16) & 0xff); + put_byte(s, (s.gzhead.time >> 24) & 0xff); + put_byte(s, s.level === 9 ? 2 : + (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2 ? + 4 : 0)); + put_byte(s, s.gzhead.os & 0xff); + if (s.gzhead.extra && s.gzhead.extra.length) { + put_byte(s, s.gzhead.extra.length & 0xff); + put_byte(s, (s.gzhead.extra.length >> 8) & 0xff); + } + if (s.gzhead.hcrc) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending, 0); + } + s.gzindex = 0; + s.status = EXTRA_STATE; + } + } + else // DEFLATE header + { + var header = (Z_DEFLATED + ((s.w_bits - 8) << 4)) << 8; + var level_flags = -1; + + if (s.strategy >= Z_HUFFMAN_ONLY || s.level < 2) { + level_flags = 0; + } else if (s.level < 6) { + level_flags = 1; + } else if (s.level === 6) { + level_flags = 2; + } else { + level_flags = 3; + } + header |= (level_flags << 6); + if (s.strstart !== 0) { header |= PRESET_DICT; } + header += 31 - (header % 31); + + s.status = BUSY_STATE; + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s.strstart !== 0) { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + strm.adler = 1; // adler32(0L, Z_NULL, 0); + } + } + +//#ifdef GZIP + if (s.status === EXTRA_STATE) { + if (s.gzhead.extra/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + + while (s.gzindex < (s.gzhead.extra.length & 0xffff)) { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + break; + } + } + put_byte(s, s.gzhead.extra[s.gzindex] & 0xff); + s.gzindex++; + } + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (s.gzindex === s.gzhead.extra.length) { + s.gzindex = 0; + s.status = NAME_STATE; + } + } + else { + s.status = NAME_STATE; + } + } + if (s.status === NAME_STATE) { + if (s.gzhead.name/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.name.length) { + val = s.gzhead.name.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.gzindex = 0; + s.status = COMMENT_STATE; + } + } + else { + s.status = COMMENT_STATE; + } + } + if (s.status === COMMENT_STATE) { + if (s.gzhead.comment/* != Z_NULL*/) { + beg = s.pending; /* start of bytes to update crc */ + //int val; + + do { + if (s.pending === s.pending_buf_size) { + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + flush_pending(strm); + beg = s.pending; + if (s.pending === s.pending_buf_size) { + val = 1; + break; + } + } + // JS specific: little magic to add zero terminator to end of string + if (s.gzindex < s.gzhead.comment.length) { + val = s.gzhead.comment.charCodeAt(s.gzindex++) & 0xff; + } else { + val = 0; + } + put_byte(s, val); + } while (val !== 0); + + if (s.gzhead.hcrc && s.pending > beg) { + strm.adler = crc32(strm.adler, s.pending_buf, s.pending - beg, beg); + } + if (val === 0) { + s.status = HCRC_STATE; + } + } + else { + s.status = HCRC_STATE; + } + } + if (s.status === HCRC_STATE) { + if (s.gzhead.hcrc) { + if (s.pending + 2 > s.pending_buf_size) { + flush_pending(strm); + } + if (s.pending + 2 <= s.pending_buf_size) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + strm.adler = 0; //crc32(0L, Z_NULL, 0); + s.status = BUSY_STATE; + } + } + else { + s.status = BUSY_STATE; + } + } +//#endif + + /* Flush as much pending output as possible */ + if (s.pending !== 0) { + flush_pending(strm); + if (strm.avail_out === 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s.last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm.avail_in === 0 && rank(flush) <= rank(old_flush) && + flush !== Z_FINISH) { + return err(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s.status === FINISH_STATE && strm.avail_in !== 0) { + return err(strm, Z_BUF_ERROR); + } + + /* Start a new block or continue the current one. + */ + if (strm.avail_in !== 0 || s.lookahead !== 0 || + (flush !== Z_NO_FLUSH && s.status !== FINISH_STATE)) { + var bstate = (s.strategy === Z_HUFFMAN_ONLY) ? deflate_huff(s, flush) : + (s.strategy === Z_RLE ? deflate_rle(s, flush) : + configuration_table[s.level].func(s, flush)); + + if (bstate === BS_FINISH_STARTED || bstate === BS_FINISH_DONE) { + s.status = FINISH_STATE; + } + if (bstate === BS_NEED_MORE || bstate === BS_FINISH_STARTED) { + if (strm.avail_out === 0) { + s.last_flush = -1; + /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate === BS_BLOCK_DONE) { + if (flush === Z_PARTIAL_FLUSH) { + trees._tr_align(s); + } + else if (flush !== Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + + trees._tr_stored_block(s, 0, 0, false); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush === Z_FULL_FLUSH) { + /*** CLEAR_HASH(s); ***/ /* forget history */ + zero(s.head); // Fill with NIL (= 0); + + if (s.lookahead === 0) { + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + } + } + flush_pending(strm); + if (strm.avail_out === 0) { + s.last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + //Assert(strm->avail_out > 0, "bug2"); + //if (strm.avail_out <= 0) { throw new Error("bug2");} + + if (flush !== Z_FINISH) { return Z_OK; } + if (s.wrap <= 0) { return Z_STREAM_END; } + + /* Write the trailer */ + if (s.wrap === 2) { + put_byte(s, strm.adler & 0xff); + put_byte(s, (strm.adler >> 8) & 0xff); + put_byte(s, (strm.adler >> 16) & 0xff); + put_byte(s, (strm.adler >> 24) & 0xff); + put_byte(s, strm.total_in & 0xff); + put_byte(s, (strm.total_in >> 8) & 0xff); + put_byte(s, (strm.total_in >> 16) & 0xff); + put_byte(s, (strm.total_in >> 24) & 0xff); + } + else + { + putShortMSB(s, strm.adler >>> 16); + putShortMSB(s, strm.adler & 0xffff); + } + + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s.wrap > 0) { s.wrap = -s.wrap; } + /* write the trailer only once! */ + return s.pending !== 0 ? Z_OK : Z_STREAM_END; +} + +function deflateEnd(strm) { + var status; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + status = strm.state.status; + if (status !== INIT_STATE && + status !== EXTRA_STATE && + status !== NAME_STATE && + status !== COMMENT_STATE && + status !== HCRC_STATE && + status !== BUSY_STATE && + status !== FINISH_STATE + ) { + return err(strm, Z_STREAM_ERROR); + } + + strm.state = null; + + return status === BUSY_STATE ? err(strm, Z_DATA_ERROR) : Z_OK; +} + + +/* ========================================================================= + * Initializes the compression dictionary from the given byte + * sequence without producing any compressed output. + */ +function deflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var s; + var str, n; + var wrap; + var avail; + var next; + var input; + var tmpDict; + + if (!strm/*== Z_NULL*/ || !strm.state/*== Z_NULL*/) { + return Z_STREAM_ERROR; + } + + s = strm.state; + wrap = s.wrap; + + if (wrap === 2 || (wrap === 1 && s.status !== INIT_STATE) || s.lookahead) { + return Z_STREAM_ERROR; + } + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap === 1) { + /* adler32(strm->adler, dictionary, dictLength); */ + strm.adler = adler32(strm.adler, dictionary, dictLength, 0); + } + + s.wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s.w_size) { + if (wrap === 0) { /* already empty otherwise */ + /*** CLEAR_HASH(s); ***/ + zero(s.head); // Fill with NIL (= 0); + s.strstart = 0; + s.block_start = 0; + s.insert = 0; + } + /* use the tail */ + // dictionary = dictionary.slice(dictLength - s.w_size); + tmpDict = new utils.Buf8(s.w_size); + utils.arraySet(tmpDict, dictionary, dictLength - s.w_size, s.w_size, 0); + dictionary = tmpDict; + dictLength = s.w_size; + } + /* insert dictionary into window and hash */ + avail = strm.avail_in; + next = strm.next_in; + input = strm.input; + strm.avail_in = dictLength; + strm.next_in = 0; + strm.input = dictionary; + fill_window(s); + while (s.lookahead >= MIN_MATCH) { + str = s.strstart; + n = s.lookahead - (MIN_MATCH - 1); + do { + /* UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); */ + s.ins_h = ((s.ins_h << s.hash_shift) ^ s.window[str + MIN_MATCH - 1]) & s.hash_mask; + + s.prev[str & s.w_mask] = s.head[s.ins_h]; + + s.head[s.ins_h] = str; + str++; + } while (--n); + s.strstart = str; + s.lookahead = MIN_MATCH - 1; + fill_window(s); + } + s.strstart += s.lookahead; + s.block_start = s.strstart; + s.insert = s.lookahead; + s.lookahead = 0; + s.match_length = s.prev_length = MIN_MATCH - 1; + s.match_available = 0; + strm.next_in = next; + strm.input = input; + strm.avail_in = avail; + s.wrap = wrap; + return Z_OK; +} + + +exports.deflateInit = deflateInit; +exports.deflateInit2 = deflateInit2; +exports.deflateReset = deflateReset; +exports.deflateResetKeep = deflateResetKeep; +exports.deflateSetHeader = deflateSetHeader; +exports.deflate = deflate; +exports.deflateEnd = deflateEnd; +exports.deflateSetDictionary = deflateSetDictionary; +exports.deflateInfo = 'pako deflate (from Nodeca project)'; + +/* Not implemented +exports.deflateBound = deflateBound; +exports.deflateCopy = deflateCopy; +exports.deflateParams = deflateParams; +exports.deflatePending = deflatePending; +exports.deflatePrime = deflatePrime; +exports.deflateTune = deflateTune; +*/ + +},{"../utils/common":123,"./adler32":125,"./crc32":127,"./messages":133,"./trees":134}],129:[function(require,module,exports){ +'use strict'; + + +function GZheader() { + /* true if compressed data believed to be text */ + this.text = 0; + /* modification time */ + this.time = 0; + /* extra flags (not used when writing a gzip file) */ + this.xflags = 0; + /* operating system */ + this.os = 0; + /* pointer to extra field or Z_NULL if none */ + this.extra = null; + /* extra field length (valid if extra != Z_NULL) */ + this.extra_len = 0; // Actually, we don't need it in JS, + // but leave for few code modifications + + // + // Setup limits is not necessary because in js we should not preallocate memory + // for inflate use constant limit in 65536 bytes + // + + /* space at extra (only when reading header) */ + // this.extra_max = 0; + /* pointer to zero-terminated file name or Z_NULL */ + this.name = ''; + /* space at name (only when reading header) */ + // this.name_max = 0; + /* pointer to zero-terminated comment or Z_NULL */ + this.comment = ''; + /* space at comment (only when reading header) */ + // this.comm_max = 0; + /* true if there was or will be a header crc */ + this.hcrc = 0; + /* true when done reading gzip header (not used when writing a gzip file) */ + this.done = false; +} + +module.exports = GZheader; + +},{}],130:[function(require,module,exports){ +'use strict'; + +// See state defs from inflate.js +var BAD = 30; /* got a data error -- remain here until reset */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state.mode === LEN + strm.avail_in >= 6 + strm.avail_out >= 258 + start >= strm.avail_out + state.bits < 8 + + On return, state.mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm.avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm.avail_out >= 258 for each loop to avoid checking for + output space. + */ +module.exports = function inflate_fast(strm, start) { + var state; + var _in; /* local strm.input */ + var last; /* have enough input while in < last */ + var _out; /* local strm.output */ + var beg; /* inflate()'s initial strm.output */ + var end; /* while out < end, enough space available */ +//#ifdef INFLATE_STRICT + var dmax; /* maximum distance from zlib header */ +//#endif + var wsize; /* window size or zero if not using window */ + var whave; /* valid bytes in the window */ + var wnext; /* window write index */ + // Use `s_window` instead `window`, avoid conflict with instrumentation tools + var s_window; /* allocated sliding window, if wsize != 0 */ + var hold; /* local strm.hold */ + var bits; /* local strm.bits */ + var lcode; /* local strm.lencode */ + var dcode; /* local strm.distcode */ + var lmask; /* mask for first level of length codes */ + var dmask; /* mask for first level of distance codes */ + var here; /* retrieved table entry */ + var op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + var len; /* match length, unused bytes */ + var dist; /* match distance */ + var from; /* where to copy match from */ + var from_source; + + + var input, output; // JS specific, because we have no pointers + + /* copy state to local variables */ + state = strm.state; + //here = state.here; + _in = strm.next_in; + input = strm.input; + last = _in + (strm.avail_in - 5); + _out = strm.next_out; + output = strm.output; + beg = _out - (start - strm.avail_out); + end = _out + (strm.avail_out - 257); +//#ifdef INFLATE_STRICT + dmax = state.dmax; +//#endif + wsize = state.wsize; + whave = state.whave; + wnext = state.wnext; + s_window = state.window; + hold = state.hold; + bits = state.bits; + lcode = state.lencode; + dcode = state.distcode; + lmask = (1 << state.lenbits) - 1; + dmask = (1 << state.distbits) - 1; + + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + + top: + do { + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + + here = lcode[hold & lmask]; + + dolen: + for (;;) { // Goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + if (op === 0) { /* literal */ + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + output[_out++] = here & 0xffff/*here.val*/; + } + else if (op & 16) { /* length base */ + len = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + len += hold & ((1 << op) - 1); + hold >>>= op; + bits -= op; + } + //Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += input[_in++] << bits; + bits += 8; + hold += input[_in++] << bits; + bits += 8; + } + here = dcode[hold & dmask]; + + dodist: + for (;;) { // goto emulation + op = here >>> 24/*here.bits*/; + hold >>>= op; + bits -= op; + op = (here >>> 16) & 0xff/*here.op*/; + + if (op & 16) { /* distance base */ + dist = here & 0xffff/*here.val*/; + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + if (bits < op) { + hold += input[_in++] << bits; + bits += 8; + } + } + dist += hold & ((1 << op) - 1); +//#ifdef INFLATE_STRICT + if (dist > dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } +//#endif + hold >>>= op; + bits -= op; + //Tracevv((stderr, "inflate: distance %u\n", dist)); + op = _out - beg; /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break top; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// if (len <= op - whave) { +// do { +// output[_out++] = 0; +// } while (--len); +// continue top; +// } +// len -= op - whave; +// do { +// output[_out++] = 0; +// } while (--op > whave); +// if (op === 0) { +// from = _out - dist; +// do { +// output[_out++] = output[from++]; +// } while (--len); +// continue top; +// } +//#endif + } + from = 0; // window index + from_source = s_window; + if (wnext === 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = 0; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + output[_out++] = s_window[from++]; + } while (--op); + from = _out - dist; /* rest from output */ + from_source = output; + } + } + while (len > 2) { + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + output[_out++] = from_source[from++]; + len -= 3; + } + if (len) { + output[_out++] = from_source[from++]; + if (len > 1) { + output[_out++] = from_source[from++]; + } + } + } + else { + from = _out - dist; /* copy direct from output */ + do { /* minimum length is three */ + output[_out++] = output[from++]; + output[_out++] = output[from++]; + output[_out++] = output[from++]; + len -= 3; + } while (len > 2); + if (len) { + output[_out++] = output[from++]; + if (len > 1) { + output[_out++] = output[from++]; + } + } + } + } + else if ((op & 64) === 0) { /* 2nd level distance code */ + here = dcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dodist; + } + else { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } + else if ((op & 64) === 0) { /* 2nd level length code */ + here = lcode[(here & 0xffff)/*here.val*/ + (hold & ((1 << op) - 1))]; + continue dolen; + } + else if (op & 32) { /* end-of-block */ + //Tracevv((stderr, "inflate: end of block\n")); + state.mode = TYPE; + break top; + } + else { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break top; + } + + break; // need to emulate goto via "continue" + } + } while (_in < last && _out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + _in -= len; + bits -= len << 3; + hold &= (1 << bits) - 1; + + /* update state and return */ + strm.next_in = _in; + strm.next_out = _out; + strm.avail_in = (_in < last ? 5 + (last - _in) : 5 - (_in - last)); + strm.avail_out = (_out < end ? 257 + (end - _out) : 257 - (_out - end)); + state.hold = hold; + state.bits = bits; + return; +}; + +},{}],131:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); +var adler32 = require('./adler32'); +var crc32 = require('./crc32'); +var inflate_fast = require('./inffast'); +var inflate_table = require('./inftrees'); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +/* Allowed flush values; see deflate() and inflate() below for details */ +//var Z_NO_FLUSH = 0; +//var Z_PARTIAL_FLUSH = 1; +//var Z_SYNC_FLUSH = 2; +//var Z_FULL_FLUSH = 3; +var Z_FINISH = 4; +var Z_BLOCK = 5; +var Z_TREES = 6; + + +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ +var Z_OK = 0; +var Z_STREAM_END = 1; +var Z_NEED_DICT = 2; +//var Z_ERRNO = -1; +var Z_STREAM_ERROR = -2; +var Z_DATA_ERROR = -3; +var Z_MEM_ERROR = -4; +var Z_BUF_ERROR = -5; +//var Z_VERSION_ERROR = -6; + +/* The deflate compression method */ +var Z_DEFLATED = 8; + + +/* STATES ====================================================================*/ +/* ===========================================================================*/ + + +var HEAD = 1; /* i: waiting for magic header */ +var FLAGS = 2; /* i: waiting for method and flags (gzip) */ +var TIME = 3; /* i: waiting for modification time (gzip) */ +var OS = 4; /* i: waiting for extra flags and operating system (gzip) */ +var EXLEN = 5; /* i: waiting for extra length (gzip) */ +var EXTRA = 6; /* i: waiting for extra bytes (gzip) */ +var NAME = 7; /* i: waiting for end of file name (gzip) */ +var COMMENT = 8; /* i: waiting for end of comment (gzip) */ +var HCRC = 9; /* i: waiting for header crc (gzip) */ +var DICTID = 10; /* i: waiting for dictionary check value */ +var DICT = 11; /* waiting for inflateSetDictionary() call */ +var TYPE = 12; /* i: waiting for type bits, including last-flag bit */ +var TYPEDO = 13; /* i: same, but skip check to exit inflate on new block */ +var STORED = 14; /* i: waiting for stored size (length and complement) */ +var COPY_ = 15; /* i/o: same as COPY below, but only first time in */ +var COPY = 16; /* i/o: waiting for input or output to copy stored block */ +var TABLE = 17; /* i: waiting for dynamic block table lengths */ +var LENLENS = 18; /* i: waiting for code length code lengths */ +var CODELENS = 19; /* i: waiting for length/lit and distance code lengths */ +var LEN_ = 20; /* i: same as LEN below, but only first time in */ +var LEN = 21; /* i: waiting for length/lit/eob code */ +var LENEXT = 22; /* i: waiting for length extra bits */ +var DIST = 23; /* i: waiting for distance code */ +var DISTEXT = 24; /* i: waiting for distance extra bits */ +var MATCH = 25; /* o: waiting for output space to copy string */ +var LIT = 26; /* o: waiting for output space to write literal */ +var CHECK = 27; /* i: waiting for 32-bit check value */ +var LENGTH = 28; /* i: waiting for 32-bit length (gzip) */ +var DONE = 29; /* finished check, done -- remain here until reset */ +var BAD = 30; /* got a data error -- remain here until reset */ +var MEM = 31; /* got an inflate() memory error -- remain here until reset */ +var SYNC = 32; /* looking for synchronization bytes to restart inflate() */ + +/* ===========================================================================*/ + + + +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var MAX_WBITS = 15; +/* 32K LZ77 window */ +var DEF_WBITS = MAX_WBITS; + + +function zswap32(q) { + return (((q >>> 24) & 0xff) + + ((q >>> 8) & 0xff00) + + ((q & 0xff00) << 8) + + ((q & 0xff) << 24)); +} + + +function InflateState() { + this.mode = 0; /* current inflate mode */ + this.last = false; /* true if processing last block */ + this.wrap = 0; /* bit 0 true for zlib, bit 1 true for gzip */ + this.havedict = false; /* true if dictionary provided */ + this.flags = 0; /* gzip header method and flags (0 if zlib) */ + this.dmax = 0; /* zlib header max distance (INFLATE_STRICT) */ + this.check = 0; /* protected copy of check value */ + this.total = 0; /* protected copy of output count */ + // TODO: may be {} + this.head = null; /* where to save gzip header information */ + + /* sliding window */ + this.wbits = 0; /* log base 2 of requested window size */ + this.wsize = 0; /* window size or zero if not using window */ + this.whave = 0; /* valid bytes in the window */ + this.wnext = 0; /* window write index */ + this.window = null; /* allocated sliding window, if needed */ + + /* bit accumulator */ + this.hold = 0; /* input bit accumulator */ + this.bits = 0; /* number of bits in "in" */ + + /* for string and stored block copying */ + this.length = 0; /* literal or length of data to copy */ + this.offset = 0; /* distance back to copy string from */ + + /* for table and code decoding */ + this.extra = 0; /* extra bits needed */ + + /* fixed and dynamic code tables */ + this.lencode = null; /* starting table for length/literal codes */ + this.distcode = null; /* starting table for distance codes */ + this.lenbits = 0; /* index bits for lencode */ + this.distbits = 0; /* index bits for distcode */ + + /* dynamic table building */ + this.ncode = 0; /* number of code length code lengths */ + this.nlen = 0; /* number of length code lengths */ + this.ndist = 0; /* number of distance code lengths */ + this.have = 0; /* number of code lengths in lens[] */ + this.next = null; /* next available space in codes[] */ + + this.lens = new utils.Buf16(320); /* temporary storage for code lengths */ + this.work = new utils.Buf16(288); /* work area for code table building */ + + /* + because we don't have pointers in js, we use lencode and distcode directly + as buffers so we don't need codes + */ + //this.codes = new utils.Buf32(ENOUGH); /* space for code tables */ + this.lendyn = null; /* dynamic table for length/literal codes (JS specific) */ + this.distdyn = null; /* dynamic table for distance codes (JS specific) */ + this.sane = 0; /* if false, allow invalid distance too far */ + this.back = 0; /* bits back of last unprocessed length/lit */ + this.was = 0; /* initial length of match */ +} + +function inflateResetKeep(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + strm.total_in = strm.total_out = state.total = 0; + strm.msg = ''; /*Z_NULL*/ + if (state.wrap) { /* to support ill-conceived Java test suite */ + strm.adler = state.wrap & 1; + } + state.mode = HEAD; + state.last = 0; + state.havedict = 0; + state.dmax = 32768; + state.head = null/*Z_NULL*/; + state.hold = 0; + state.bits = 0; + //state.lencode = state.distcode = state.next = state.codes; + state.lencode = state.lendyn = new utils.Buf32(ENOUGH_LENS); + state.distcode = state.distdyn = new utils.Buf32(ENOUGH_DISTS); + + state.sane = 1; + state.back = -1; + //Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +function inflateReset(strm) { + var state; + + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + state.wsize = 0; + state.whave = 0; + state.wnext = 0; + return inflateResetKeep(strm); + +} + +function inflateReset2(strm, windowBits) { + var wrap; + var state; + + /* get the state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 1; + if (windowBits < 48) { + windowBits &= 15; + } + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) { + return Z_STREAM_ERROR; + } + if (state.window !== null && state.wbits !== windowBits) { + state.window = null; + } + + /* update state and reset the rest of it */ + state.wrap = wrap; + state.wbits = windowBits; + return inflateReset(strm); +} + +function inflateInit2(strm, windowBits) { + var ret; + var state; + + if (!strm) { return Z_STREAM_ERROR; } + //strm.msg = Z_NULL; /* in case we return an error */ + + state = new InflateState(); + + //if (state === Z_NULL) return Z_MEM_ERROR; + //Tracev((stderr, "inflate: allocated\n")); + strm.state = state; + state.window = null/*Z_NULL*/; + ret = inflateReset2(strm, windowBits); + if (ret !== Z_OK) { + strm.state = null/*Z_NULL*/; + } + return ret; +} + +function inflateInit(strm) { + return inflateInit2(strm, DEF_WBITS); +} + + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +var virgin = true; + +var lenfix, distfix; // We have no pointers in JS, so keep tables separate + +function fixedtables(state) { + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + var sym; + + lenfix = new utils.Buf32(512); + distfix = new utils.Buf32(32); + + /* literal/length table */ + sym = 0; + while (sym < 144) { state.lens[sym++] = 8; } + while (sym < 256) { state.lens[sym++] = 9; } + while (sym < 280) { state.lens[sym++] = 7; } + while (sym < 288) { state.lens[sym++] = 8; } + + inflate_table(LENS, state.lens, 0, 288, lenfix, 0, state.work, { bits: 9 }); + + /* distance table */ + sym = 0; + while (sym < 32) { state.lens[sym++] = 5; } + + inflate_table(DISTS, state.lens, 0, 32, distfix, 0, state.work, { bits: 5 }); + + /* do this just once */ + virgin = false; + } + + state.lencode = lenfix; + state.lenbits = 9; + state.distcode = distfix; + state.distbits = 5; +} + + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +function updatewindow(strm, src, end, copy) { + var dist; + var state = strm.state; + + /* if it hasn't been done already, allocate space for the window */ + if (state.window === null) { + state.wsize = 1 << state.wbits; + state.wnext = 0; + state.whave = 0; + + state.window = new utils.Buf8(state.wsize); + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state.wsize) { + utils.arraySet(state.window, src, end - state.wsize, state.wsize, 0); + state.wnext = 0; + state.whave = state.wsize; + } + else { + dist = state.wsize - state.wnext; + if (dist > copy) { + dist = copy; + } + //zmemcpy(state->window + state->wnext, end - copy, dist); + utils.arraySet(state.window, src, end - copy, dist, state.wnext); + copy -= dist; + if (copy) { + //zmemcpy(state->window, end - copy, copy); + utils.arraySet(state.window, src, end - copy, copy, 0); + state.wnext = copy; + state.whave = state.wsize; + } + else { + state.wnext += dist; + if (state.wnext === state.wsize) { state.wnext = 0; } + if (state.whave < state.wsize) { state.whave += dist; } + } + } + return 0; +} + +function inflate(strm, flush) { + var state; + var input, output; // input/output buffers + var next; /* next input INDEX */ + var put; /* next output INDEX */ + var have, left; /* available input and output */ + var hold; /* bit buffer */ + var bits; /* bits in bit buffer */ + var _in, _out; /* save starting available input and output */ + var copy; /* number of stored or match bytes to copy */ + var from; /* where to copy match bytes from */ + var from_source; + var here = 0; /* current decoding table entry */ + var here_bits, here_op, here_val; // paked "here" denormalized (JS specific) + //var last; /* parent table entry */ + var last_bits, last_op, last_val; // paked "last" denormalized (JS specific) + var len; /* length to copy for repeats, bits to drop */ + var ret; /* return code */ + var hbuf = new utils.Buf8(4); /* buffer for gzip header crc calculation */ + var opts; + + var n; // temporary var for NEED_BITS + + var order = /* permutation of code lengths */ + [ 16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 ]; + + + if (!strm || !strm.state || !strm.output || + (!strm.input && strm.avail_in !== 0)) { + return Z_STREAM_ERROR; + } + + state = strm.state; + if (state.mode === TYPE) { state.mode = TYPEDO; } /* skip check */ + + + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + _in = have; + _out = left; + ret = Z_OK; + + inf_leave: // goto emulation + for (;;) { + switch (state.mode) { + case HEAD: + if (state.wrap === 0) { + state.mode = TYPEDO; + break; + } + //=== NEEDBITS(16); + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((state.wrap & 2) && hold === 0x8b1f) { /* gzip header */ + state.check = 0/*crc32(0L, Z_NULL, 0)*/; + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = FLAGS; + break; + } + state.flags = 0; /* expect zlib header */ + if (state.head) { + state.head.done = false; + } + if (!(state.wrap & 1) || /* check if zlib header allowed */ + (((hold & 0xff)/*BITS(8)*/ << 8) + (hold >> 8)) % 31) { + strm.msg = 'incorrect header check'; + state.mode = BAD; + break; + } + if ((hold & 0x0f)/*BITS(4)*/ !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// + len = (hold & 0x0f)/*BITS(4)*/ + 8; + if (state.wbits === 0) { + state.wbits = len; + } + else if (len > state.wbits) { + strm.msg = 'invalid window size'; + state.mode = BAD; + break; + } + state.dmax = 1 << len; + //Tracev((stderr, "inflate: zlib header ok\n")); + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = hold & 0x200 ? DICTID : TYPE; + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + break; + case FLAGS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.flags = hold; + if ((state.flags & 0xff) !== Z_DEFLATED) { + strm.msg = 'unknown compression method'; + state.mode = BAD; + break; + } + if (state.flags & 0xe000) { + strm.msg = 'unknown header flags set'; + state.mode = BAD; + break; + } + if (state.head) { + state.head.text = ((hold >> 8) & 1); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = TIME; + /* falls through */ + case TIME: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.time = hold; + } + if (state.flags & 0x0200) { + //=== CRC4(state.check, hold) + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + hbuf[2] = (hold >>> 16) & 0xff; + hbuf[3] = (hold >>> 24) & 0xff; + state.check = crc32(state.check, hbuf, 4, 0); + //=== + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = OS; + /* falls through */ + case OS: + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (state.head) { + state.head.xflags = (hold & 0xff); + state.head.os = (hold >> 8); + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = EXLEN; + /* falls through */ + case EXLEN: + if (state.flags & 0x0400) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length = hold; + if (state.head) { + state.head.extra_len = hold; + } + if (state.flags & 0x0200) { + //=== CRC2(state.check, hold); + hbuf[0] = hold & 0xff; + hbuf[1] = (hold >>> 8) & 0xff; + state.check = crc32(state.check, hbuf, 2, 0); + //===// + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + else if (state.head) { + state.head.extra = null/*Z_NULL*/; + } + state.mode = EXTRA; + /* falls through */ + case EXTRA: + if (state.flags & 0x0400) { + copy = state.length; + if (copy > have) { copy = have; } + if (copy) { + if (state.head) { + len = state.head.extra_len - state.length; + if (!state.head.extra) { + // Use untyped array for more conveniend processing later + state.head.extra = new Array(state.head.extra_len); + } + utils.arraySet( + state.head.extra, + input, + next, + // extra field is limited to 65536 bytes + // - no need for additional size check + copy, + /*len + copy > state.head.extra_max - len ? state.head.extra_max : copy,*/ + len + ); + //zmemcpy(state.head.extra + len, next, + // len + copy > state.head.extra_max ? + // state.head.extra_max - len : copy); + } + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + state.length -= copy; + } + if (state.length) { break inf_leave; } + } + state.length = 0; + state.mode = NAME; + /* falls through */ + case NAME: + if (state.flags & 0x0800) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + // TODO: 2 or 1 bytes? + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.name_max*/)) { + state.head.name += String.fromCharCode(len); + } + } while (len && copy < have); + + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.name = null; + } + state.length = 0; + state.mode = COMMENT; + /* falls through */ + case COMMENT: + if (state.flags & 0x1000) { + if (have === 0) { break inf_leave; } + copy = 0; + do { + len = input[next + copy++]; + /* use constant limit because in js we should not preallocate memory */ + if (state.head && len && + (state.length < 65536 /*state.head.comm_max*/)) { + state.head.comment += String.fromCharCode(len); + } + } while (len && copy < have); + if (state.flags & 0x0200) { + state.check = crc32(state.check, input, copy, next); + } + have -= copy; + next += copy; + if (len) { break inf_leave; } + } + else if (state.head) { + state.head.comment = null; + } + state.mode = HCRC; + /* falls through */ + case HCRC: + if (state.flags & 0x0200) { + //=== NEEDBITS(16); */ + while (bits < 16) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.check & 0xffff)) { + strm.msg = 'header crc mismatch'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + } + if (state.head) { + state.head.hcrc = ((state.flags >> 9) & 1); + state.head.done = true; + } + strm.adler = state.check = 0; + state.mode = TYPE; + break; + case DICTID: + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + strm.adler = state.check = zswap32(hold); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = DICT; + /* falls through */ + case DICT: + if (state.havedict === 0) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + return Z_NEED_DICT; + } + strm.adler = state.check = 1/*adler32(0L, Z_NULL, 0)*/; + state.mode = TYPE; + /* falls through */ + case TYPE: + if (flush === Z_BLOCK || flush === Z_TREES) { break inf_leave; } + /* falls through */ + case TYPEDO: + if (state.last) { + //--- BYTEBITS() ---// + hold >>>= bits & 7; + bits -= bits & 7; + //---// + state.mode = CHECK; + break; + } + //=== NEEDBITS(3); */ + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.last = (hold & 0x01)/*BITS(1)*/; + //--- DROPBITS(1) ---// + hold >>>= 1; + bits -= 1; + //---// + + switch ((hold & 0x03)/*BITS(2)*/) { + case 0: /* stored block */ + //Tracev((stderr, "inflate: stored block%s\n", + // state.last ? " (last)" : "")); + state.mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + //Tracev((stderr, "inflate: fixed codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = LEN_; /* decode codes */ + if (flush === Z_TREES) { + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break inf_leave; + } + break; + case 2: /* dynamic block */ + //Tracev((stderr, "inflate: dynamic codes block%s\n", + // state.last ? " (last)" : "")); + state.mode = TABLE; + break; + case 3: + strm.msg = 'invalid block type'; + state.mode = BAD; + } + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + break; + case STORED: + //--- BYTEBITS() ---// /* go to byte boundary */ + hold >>>= bits & 7; + bits -= bits & 7; + //---// + //=== NEEDBITS(32); */ + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if ((hold & 0xffff) !== ((hold >>> 16) ^ 0xffff)) { + strm.msg = 'invalid stored block lengths'; + state.mode = BAD; + break; + } + state.length = hold & 0xffff; + //Tracev((stderr, "inflate: stored length %u\n", + // state.length)); + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + state.mode = COPY_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case COPY_: + state.mode = COPY; + /* falls through */ + case COPY: + copy = state.length; + if (copy) { + if (copy > have) { copy = have; } + if (copy > left) { copy = left; } + if (copy === 0) { break inf_leave; } + //--- zmemcpy(put, next, copy); --- + utils.arraySet(output, input, next, copy, put); + //---// + have -= copy; + next += copy; + left -= copy; + put += copy; + state.length -= copy; + break; + } + //Tracev((stderr, "inflate: stored end\n")); + state.mode = TYPE; + break; + case TABLE: + //=== NEEDBITS(14); */ + while (bits < 14) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.nlen = (hold & 0x1f)/*BITS(5)*/ + 257; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ndist = (hold & 0x1f)/*BITS(5)*/ + 1; + //--- DROPBITS(5) ---// + hold >>>= 5; + bits -= 5; + //---// + state.ncode = (hold & 0x0f)/*BITS(4)*/ + 4; + //--- DROPBITS(4) ---// + hold >>>= 4; + bits -= 4; + //---// +//#ifndef PKZIP_BUG_WORKAROUND + if (state.nlen > 286 || state.ndist > 30) { + strm.msg = 'too many length or distance symbols'; + state.mode = BAD; + break; + } +//#endif + //Tracev((stderr, "inflate: table sizes ok\n")); + state.have = 0; + state.mode = LENLENS; + /* falls through */ + case LENLENS: + while (state.have < state.ncode) { + //=== NEEDBITS(3); + while (bits < 3) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.lens[order[state.have++]] = (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + while (state.have < 19) { + state.lens[order[state.have++]] = 0; + } + // We have separate tables & no pointers. 2 commented lines below not needed. + //state.next = state.codes; + //state.lencode = state.next; + // Switch to use dynamic table + state.lencode = state.lendyn; + state.lenbits = 7; + + opts = { bits: state.lenbits }; + ret = inflate_table(CODES, state.lens, 0, 19, state.lencode, 0, state.work, opts); + state.lenbits = opts.bits; + + if (ret) { + strm.msg = 'invalid code lengths set'; + state.mode = BAD; + break; + } + //Tracev((stderr, "inflate: code lengths ok\n")); + state.have = 0; + state.mode = CODELENS; + /* falls through */ + case CODELENS: + while (state.have < state.nlen + state.ndist) { + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)];/*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_val < 16) { + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.lens[state.have++] = here_val; + } + else { + if (here_val === 16) { + //=== NEEDBITS(here.bits + 2); + n = here_bits + 2; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + if (state.have === 0) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + len = state.lens[state.have - 1]; + copy = 3 + (hold & 0x03);//BITS(2); + //--- DROPBITS(2) ---// + hold >>>= 2; + bits -= 2; + //---// + } + else if (here_val === 17) { + //=== NEEDBITS(here.bits + 3); + n = here_bits + 3; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 3 + (hold & 0x07);//BITS(3); + //--- DROPBITS(3) ---// + hold >>>= 3; + bits -= 3; + //---// + } + else { + //=== NEEDBITS(here.bits + 7); + n = here_bits + 7; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + len = 0; + copy = 11 + (hold & 0x7f);//BITS(7); + //--- DROPBITS(7) ---// + hold >>>= 7; + bits -= 7; + //---// + } + if (state.have + copy > state.nlen + state.ndist) { + strm.msg = 'invalid bit length repeat'; + state.mode = BAD; + break; + } + while (copy--) { + state.lens[state.have++] = len; + } + } + } + + /* handle error breaks in while */ + if (state.mode === BAD) { break; } + + /* check for end-of-block code (better have one) */ + if (state.lens[256] === 0) { + strm.msg = 'invalid code -- missing end-of-block'; + state.mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state.lenbits = 9; + + opts = { bits: state.lenbits }; + ret = inflate_table(LENS, state.lens, 0, state.nlen, state.lencode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.lenbits = opts.bits; + // state.lencode = state.next; + + if (ret) { + strm.msg = 'invalid literal/lengths set'; + state.mode = BAD; + break; + } + + state.distbits = 6; + //state.distcode.copy(state.codes); + // Switch to use dynamic table + state.distcode = state.distdyn; + opts = { bits: state.distbits }; + ret = inflate_table(DISTS, state.lens, state.nlen, state.ndist, state.distcode, 0, state.work, opts); + // We have separate tables & no pointers. 2 commented lines below not needed. + // state.next_index = opts.table_index; + state.distbits = opts.bits; + // state.distcode = state.next; + + if (ret) { + strm.msg = 'invalid distances set'; + state.mode = BAD; + break; + } + //Tracev((stderr, 'inflate: codes ok\n')); + state.mode = LEN_; + if (flush === Z_TREES) { break inf_leave; } + /* falls through */ + case LEN_: + state.mode = LEN; + /* falls through */ + case LEN: + if (have >= 6 && left >= 258) { + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + inflate_fast(strm, _out); + //--- LOAD() --- + put = strm.next_out; + output = strm.output; + left = strm.avail_out; + next = strm.next_in; + input = strm.input; + have = strm.avail_in; + hold = state.hold; + bits = state.bits; + //--- + + if (state.mode === TYPE) { + state.back = -1; + } + break; + } + state.back = 0; + for (;;) { + here = state.lencode[hold & ((1 << state.lenbits) - 1)]; /*BITS(state.lenbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if (here_bits <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if (here_op && (here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.lencode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + state.length = here_val; + if (here_op === 0) { + //Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + // "inflate: literal '%c'\n" : + // "inflate: literal 0x%02x\n", here.val)); + state.mode = LIT; + break; + } + if (here_op & 32) { + //Tracevv((stderr, "inflate: end of block\n")); + state.back = -1; + state.mode = TYPE; + break; + } + if (here_op & 64) { + strm.msg = 'invalid literal/length code'; + state.mode = BAD; + break; + } + state.extra = here_op & 15; + state.mode = LENEXT; + /* falls through */ + case LENEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.length += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } + //Tracevv((stderr, "inflate: length %u\n", state.length)); + state.was = state.length; + state.mode = DIST; + /* falls through */ + case DIST: + for (;;) { + here = state.distcode[hold & ((1 << state.distbits) - 1)];/*BITS(state.distbits)*/ + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + if ((here_op & 0xf0) === 0) { + last_bits = here_bits; + last_op = here_op; + last_val = here_val; + for (;;) { + here = state.distcode[last_val + + ((hold & ((1 << (last_bits + last_op)) - 1))/*BITS(last.bits + last.op)*/ >> last_bits)]; + here_bits = here >>> 24; + here_op = (here >>> 16) & 0xff; + here_val = here & 0xffff; + + if ((last_bits + here_bits) <= bits) { break; } + //--- PULLBYTE() ---// + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + //---// + } + //--- DROPBITS(last.bits) ---// + hold >>>= last_bits; + bits -= last_bits; + //---// + state.back += last_bits; + } + //--- DROPBITS(here.bits) ---// + hold >>>= here_bits; + bits -= here_bits; + //---// + state.back += here_bits; + if (here_op & 64) { + strm.msg = 'invalid distance code'; + state.mode = BAD; + break; + } + state.offset = here_val; + state.extra = (here_op) & 15; + state.mode = DISTEXT; + /* falls through */ + case DISTEXT: + if (state.extra) { + //=== NEEDBITS(state.extra); + n = state.extra; + while (bits < n) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + state.offset += hold & ((1 << state.extra) - 1)/*BITS(state.extra)*/; + //--- DROPBITS(state.extra) ---// + hold >>>= state.extra; + bits -= state.extra; + //---// + state.back += state.extra; + } +//#ifdef INFLATE_STRICT + if (state.offset > state.dmax) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +//#endif + //Tracevv((stderr, "inflate: distance %u\n", state.offset)); + state.mode = MATCH; + /* falls through */ + case MATCH: + if (left === 0) { break inf_leave; } + copy = _out - left; + if (state.offset > copy) { /* copy from window */ + copy = state.offset - copy; + if (copy > state.whave) { + if (state.sane) { + strm.msg = 'invalid distance too far back'; + state.mode = BAD; + break; + } +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility +//#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR +// Trace((stderr, "inflate.c too far\n")); +// copy -= state.whave; +// if (copy > state.length) { copy = state.length; } +// if (copy > left) { copy = left; } +// left -= copy; +// state.length -= copy; +// do { +// output[put++] = 0; +// } while (--copy); +// if (state.length === 0) { state.mode = LEN; } +// break; +//#endif + } + if (copy > state.wnext) { + copy -= state.wnext; + from = state.wsize - copy; + } + else { + from = state.wnext - copy; + } + if (copy > state.length) { copy = state.length; } + from_source = state.window; + } + else { /* copy from output */ + from_source = output; + from = put - state.offset; + copy = state.length; + } + if (copy > left) { copy = left; } + left -= copy; + state.length -= copy; + do { + output[put++] = from_source[from++]; + } while (--copy); + if (state.length === 0) { state.mode = LEN; } + break; + case LIT: + if (left === 0) { break inf_leave; } + output[put++] = state.length; + left--; + state.mode = LEN; + break; + case CHECK: + if (state.wrap) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + // Use '|' insdead of '+' to make sure that result is signed + hold |= input[next++] << bits; + bits += 8; + } + //===// + _out -= left; + strm.total_out += _out; + state.total += _out; + if (_out) { + strm.adler = state.check = + /*UPDATE(state.check, put - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, put - _out) : adler32(state.check, output, _out, put - _out)); + + } + _out = left; + // NB: crc32 stored as signed 32-bit int, zswap32 returns signed too + if ((state.flags ? hold : zswap32(hold)) !== state.check) { + strm.msg = 'incorrect data check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: check matches trailer\n")); + } + state.mode = LENGTH; + /* falls through */ + case LENGTH: + if (state.wrap && state.flags) { + //=== NEEDBITS(32); + while (bits < 32) { + if (have === 0) { break inf_leave; } + have--; + hold += input[next++] << bits; + bits += 8; + } + //===// + if (hold !== (state.total & 0xffffffff)) { + strm.msg = 'incorrect length check'; + state.mode = BAD; + break; + } + //=== INITBITS(); + hold = 0; + bits = 0; + //===// + //Tracev((stderr, "inflate: length matches trailer\n")); + } + state.mode = DONE; + /* falls through */ + case DONE: + ret = Z_STREAM_END; + break inf_leave; + case BAD: + ret = Z_DATA_ERROR; + break inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* falls through */ + default: + return Z_STREAM_ERROR; + } + } + + // inf_leave <- here is real place for "goto inf_leave", emulated via "break inf_leave" + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + + //--- RESTORE() --- + strm.next_out = put; + strm.avail_out = left; + strm.next_in = next; + strm.avail_in = have; + state.hold = hold; + state.bits = bits; + //--- + + if (state.wsize || (_out !== strm.avail_out && state.mode < BAD && + (state.mode < CHECK || flush !== Z_FINISH))) { + if (updatewindow(strm, strm.output, strm.next_out, _out - strm.avail_out)) { + state.mode = MEM; + return Z_MEM_ERROR; + } + } + _in -= strm.avail_in; + _out -= strm.avail_out; + strm.total_in += _in; + strm.total_out += _out; + state.total += _out; + if (state.wrap && _out) { + strm.adler = state.check = /*UPDATE(state.check, strm.next_out - _out, _out);*/ + (state.flags ? crc32(state.check, output, _out, strm.next_out - _out) : adler32(state.check, output, _out, strm.next_out - _out)); + } + strm.data_type = state.bits + (state.last ? 64 : 0) + + (state.mode === TYPE ? 128 : 0) + + (state.mode === LEN_ || state.mode === COPY_ ? 256 : 0); + if (((_in === 0 && _out === 0) || flush === Z_FINISH) && ret === Z_OK) { + ret = Z_BUF_ERROR; + } + return ret; +} + +function inflateEnd(strm) { + + if (!strm || !strm.state /*|| strm->zfree == (free_func)0*/) { + return Z_STREAM_ERROR; + } + + var state = strm.state; + if (state.window) { + state.window = null; + } + strm.state = null; + return Z_OK; +} + +function inflateGetHeader(strm, head) { + var state; + + /* check state */ + if (!strm || !strm.state) { return Z_STREAM_ERROR; } + state = strm.state; + if ((state.wrap & 2) === 0) { return Z_STREAM_ERROR; } + + /* save header structure */ + state.head = head; + head.done = false; + return Z_OK; +} + +function inflateSetDictionary(strm, dictionary) { + var dictLength = dictionary.length; + + var state; + var dictid; + var ret; + + /* check state */ + if (!strm /* == Z_NULL */ || !strm.state /* == Z_NULL */) { return Z_STREAM_ERROR; } + state = strm.state; + + if (state.wrap !== 0 && state.mode !== DICT) { + return Z_STREAM_ERROR; + } + + /* check for correct dictionary identifier */ + if (state.mode === DICT) { + dictid = 1; /* adler32(0, null, 0)*/ + /* dictid = adler32(dictid, dictionary, dictLength); */ + dictid = adler32(dictid, dictionary, dictLength, 0); + if (dictid !== state.check) { + return Z_DATA_ERROR; + } + } + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary, dictLength, dictLength); + if (ret) { + state.mode = MEM; + return Z_MEM_ERROR; + } + state.havedict = 1; + // Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +exports.inflateReset = inflateReset; +exports.inflateReset2 = inflateReset2; +exports.inflateResetKeep = inflateResetKeep; +exports.inflateInit = inflateInit; +exports.inflateInit2 = inflateInit2; +exports.inflate = inflate; +exports.inflateEnd = inflateEnd; +exports.inflateGetHeader = inflateGetHeader; +exports.inflateSetDictionary = inflateSetDictionary; +exports.inflateInfo = 'pako inflate (from Nodeca project)'; + +/* Not implemented +exports.inflateCopy = inflateCopy; +exports.inflateGetDictionary = inflateGetDictionary; +exports.inflateMark = inflateMark; +exports.inflatePrime = inflatePrime; +exports.inflateSync = inflateSync; +exports.inflateSyncPoint = inflateSyncPoint; +exports.inflateUndermine = inflateUndermine; +*/ + +},{"../utils/common":123,"./adler32":125,"./crc32":127,"./inffast":130,"./inftrees":132}],132:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); + +var MAXBITS = 15; +var ENOUGH_LENS = 852; +var ENOUGH_DISTS = 592; +//var ENOUGH = (ENOUGH_LENS+ENOUGH_DISTS); + +var CODES = 0; +var LENS = 1; +var DISTS = 2; + +var lbase = [ /* Length codes 257..285 base */ + 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, 0, 0 +]; + +var lext = [ /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 72, 78 +]; + +var dbase = [ /* Distance codes 0..29 base */ + 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, 0, 0 +]; + +var dext = [ /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64 +]; + +module.exports = function inflate_table(type, lens, lens_index, codes, table, table_index, work, opts) +{ + var bits = opts.bits; + //here = opts.here; /* table entry for duplication */ + + var len = 0; /* a code's length in bits */ + var sym = 0; /* index of code symbols */ + var min = 0, max = 0; /* minimum and maximum code lengths */ + var root = 0; /* number of index bits for root table */ + var curr = 0; /* number of index bits for current table */ + var drop = 0; /* code bits to drop for sub-table */ + var left = 0; /* number of prefix codes available */ + var used = 0; /* code entries in table used */ + var huff = 0; /* Huffman code */ + var incr; /* for incrementing code, index */ + var fill; /* index for replicating entries */ + var low; /* low bits for current root entry */ + var mask; /* mask for low root bits */ + var next; /* next available space in table */ + var base = null; /* base value table to use */ + var base_index = 0; +// var shoextra; /* extra bits table to use */ + var end; /* use base and extra for symbol > end */ + var count = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* number of codes of each length */ + var offs = new utils.Buf16(MAXBITS + 1); //[MAXBITS+1]; /* offsets in table for each length */ + var extra = null; + var extra_index = 0; + + var here_bits, here_op, here_val; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) { + count[len] = 0; + } + for (sym = 0; sym < codes; sym++) { + count[lens[lens_index + sym]]++; + } + + /* bound code lengths, force root to be within code lengths */ + root = bits; + for (max = MAXBITS; max >= 1; max--) { + if (count[max] !== 0) { break; } + } + if (root > max) { + root = max; + } + if (max === 0) { /* no symbols to code at all */ + //table.op[opts.table_index] = 64; //here.op = (var char)64; /* invalid code marker */ + //table.bits[opts.table_index] = 1; //here.bits = (var char)1; + //table.val[opts.table_index++] = 0; //here.val = (var short)0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + + //table.op[opts.table_index] = 64; + //table.bits[opts.table_index] = 1; + //table.val[opts.table_index++] = 0; + table[table_index++] = (1 << 24) | (64 << 16) | 0; + + opts.bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) { + if (count[min] !== 0) { break; } + } + if (root < min) { + root = min; + } + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) { + return -1; + } /* over-subscribed */ + } + if (left > 0 && (type === CODES || max !== 1)) { + return -1; /* incomplete set */ + } + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) { + offs[len + 1] = offs[len] + count[len]; + } + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) { + if (lens[lens_index + sym] !== 0) { + work[offs[lens[lens_index + sym]]++] = sym; + } + } + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + // poor man optimization - use if-else instead of switch, + // to avoid deopts in old v8 + if (type === CODES) { + base = extra = work; /* dummy value--not used */ + end = 19; + + } else if (type === LENS) { + base = lbase; + base_index -= 257; + extra = lext; + extra_index -= 257; + end = 256; + + } else { /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize opts for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = table_index; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = -1; /* trigger new sub-table when len > root */ + used = 1 << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + var i = 0; + /* process all codes and make table entries */ + for (;;) { + i++; + /* create table entry */ + here_bits = len - drop; + if (work[sym] < end) { + here_op = 0; + here_val = work[sym]; + } + else if (work[sym] > end) { + here_op = extra[extra_index + work[sym]]; + here_val = base[base_index + work[sym]]; + } + else { + here_op = 32 + 64; /* end of block */ + here_val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1 << (len - drop); + fill = 1 << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + table[next + (huff >> drop) + fill] = (here_bits << 24) | (here_op << 16) | here_val |0; + } while (fill !== 0); + + /* backwards increment the len-bit code huff */ + incr = 1 << (len - 1); + while (huff & incr) { + incr >>= 1; + } + if (incr !== 0) { + huff &= incr - 1; + huff += incr; + } else { + huff = 0; + } + + /* go to next symbol, update count, len */ + sym++; + if (--count[len] === 0) { + if (len === max) { break; } + len = lens[lens_index + work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) !== low) { + /* if first time, transition to sub-tables */ + if (drop === 0) { + drop = root; + } + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = 1 << curr; + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) { break; } + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1 << curr; + if ((type === LENS && used > ENOUGH_LENS) || + (type === DISTS && used > ENOUGH_DISTS)) { + return 1; + } + + /* point entry in root table to sub-table */ + low = huff & mask; + /*table.op[low] = curr; + table.bits[low] = root; + table.val[low] = next - opts.table_index;*/ + table[low] = (root << 24) | (curr << 16) | (next - table_index) |0; + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff !== 0) { + //table.op[next + huff] = 64; /* invalid code marker */ + //table.bits[next + huff] = len - drop; + //table.val[next + huff] = 0; + table[next + huff] = ((len - drop) << 24) | (64 << 16) |0; + } + + /* set return parameters */ + //opts.table_index += used; + opts.bits = root; + return 0; +}; + +},{"../utils/common":123}],133:[function(require,module,exports){ +'use strict'; + +module.exports = { + 2: 'need dictionary', /* Z_NEED_DICT 2 */ + 1: 'stream end', /* Z_STREAM_END 1 */ + 0: '', /* Z_OK 0 */ + '-1': 'file error', /* Z_ERRNO (-1) */ + '-2': 'stream error', /* Z_STREAM_ERROR (-2) */ + '-3': 'data error', /* Z_DATA_ERROR (-3) */ + '-4': 'insufficient memory', /* Z_MEM_ERROR (-4) */ + '-5': 'buffer error', /* Z_BUF_ERROR (-5) */ + '-6': 'incompatible version' /* Z_VERSION_ERROR (-6) */ +}; + +},{}],134:[function(require,module,exports){ +'use strict'; + + +var utils = require('../utils/common'); + +/* Public constants ==========================================================*/ +/* ===========================================================================*/ + + +//var Z_FILTERED = 1; +//var Z_HUFFMAN_ONLY = 2; +//var Z_RLE = 3; +var Z_FIXED = 4; +//var Z_DEFAULT_STRATEGY = 0; + +/* Possible values of the data_type field (though see inflate()) */ +var Z_BINARY = 0; +var Z_TEXT = 1; +//var Z_ASCII = 1; // = Z_TEXT +var Z_UNKNOWN = 2; + +/*============================================================================*/ + + +function zero(buf) { var len = buf.length; while (--len >= 0) { buf[len] = 0; } } + +// From zutil.h + +var STORED_BLOCK = 0; +var STATIC_TREES = 1; +var DYN_TREES = 2; +/* The three kinds of block type */ + +var MIN_MATCH = 3; +var MAX_MATCH = 258; +/* The minimum and maximum match lengths */ + +// From deflate.h +/* =========================================================================== + * Internal compression state. + */ + +var LENGTH_CODES = 29; +/* number of length codes, not counting the special END_BLOCK code */ + +var LITERALS = 256; +/* number of literal bytes 0..255 */ + +var L_CODES = LITERALS + 1 + LENGTH_CODES; +/* number of Literal or Length codes, including the END_BLOCK code */ + +var D_CODES = 30; +/* number of distance codes */ + +var BL_CODES = 19; +/* number of codes used to transfer the bit lengths */ + +var HEAP_SIZE = 2 * L_CODES + 1; +/* maximum heap size */ + +var MAX_BITS = 15; +/* All codes must not exceed MAX_BITS bits */ + +var Buf_size = 16; +/* size of bit buffer in bi_buf */ + + +/* =========================================================================== + * Constants + */ + +var MAX_BL_BITS = 7; +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +var END_BLOCK = 256; +/* end of block literal code */ + +var REP_3_6 = 16; +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +var REPZ_3_10 = 17; +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +var REPZ_11_138 = 18; +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +/* eslint-disable comma-spacing,array-bracket-spacing */ +var extra_lbits = /* extra bits for each length code */ + [0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0]; + +var extra_dbits = /* extra bits for each distance code */ + [0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13]; + +var extra_blbits = /* extra bits for each bit length code */ + [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7]; + +var bl_order = + [16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15]; +/* eslint-enable comma-spacing,array-bracket-spacing */ + +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +// We pre-fill arrays with 0 to avoid uninitialized gaps + +var DIST_CODE_LEN = 512; /* see definition of array dist_code below */ + +// !!!! Use flat array insdead of structure, Freq = i*2, Len = i*2+1 +var static_ltree = new Array((L_CODES + 2) * 2); +zero(static_ltree); +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +var static_dtree = new Array(D_CODES * 2); +zero(static_dtree); +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +var _dist_code = new Array(DIST_CODE_LEN); +zero(_dist_code); +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +var _length_code = new Array(MAX_MATCH - MIN_MATCH + 1); +zero(_length_code); +/* length code for each normalized match length (0 == MIN_MATCH) */ + +var base_length = new Array(LENGTH_CODES); +zero(base_length); +/* First normalized length for each code (0 = MIN_MATCH) */ + +var base_dist = new Array(D_CODES); +zero(base_dist); +/* First normalized distance for each code (0 = distance of 1) */ + + +function StaticTreeDesc(static_tree, extra_bits, extra_base, elems, max_length) { + + this.static_tree = static_tree; /* static tree or NULL */ + this.extra_bits = extra_bits; /* extra bits for each code or NULL */ + this.extra_base = extra_base; /* base index for extra_bits */ + this.elems = elems; /* max number of elements in the tree */ + this.max_length = max_length; /* max bit length for the codes */ + + // show if `static_tree` has data or dummy - needed for monomorphic objects + this.has_stree = static_tree && static_tree.length; +} + + +var static_l_desc; +var static_d_desc; +var static_bl_desc; + + +function TreeDesc(dyn_tree, stat_desc) { + this.dyn_tree = dyn_tree; /* the dynamic tree */ + this.max_code = 0; /* largest code with non zero frequency */ + this.stat_desc = stat_desc; /* the corresponding static tree */ +} + + + +function d_code(dist) { + return dist < 256 ? _dist_code[dist] : _dist_code[256 + (dist >>> 7)]; +} + + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +function put_short(s, w) { +// put_byte(s, (uch)((w) & 0xff)); +// put_byte(s, (uch)((ush)(w) >> 8)); + s.pending_buf[s.pending++] = (w) & 0xff; + s.pending_buf[s.pending++] = (w >>> 8) & 0xff; +} + + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +function send_bits(s, value, length) { + if (s.bi_valid > (Buf_size - length)) { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + put_short(s, s.bi_buf); + s.bi_buf = value >> (Buf_size - s.bi_valid); + s.bi_valid += length - Buf_size; + } else { + s.bi_buf |= (value << s.bi_valid) & 0xffff; + s.bi_valid += length; + } +} + + +function send_code(s, c, tree) { + send_bits(s, tree[c * 2]/*.Code*/, tree[c * 2 + 1]/*.Len*/); +} + + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +function bi_reverse(code, len) { + var res = 0; + do { + res |= code & 1; + code >>>= 1; + res <<= 1; + } while (--len > 0); + return res >>> 1; +} + + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +function bi_flush(s) { + if (s.bi_valid === 16) { + put_short(s, s.bi_buf); + s.bi_buf = 0; + s.bi_valid = 0; + + } else if (s.bi_valid >= 8) { + s.pending_buf[s.pending++] = s.bi_buf & 0xff; + s.bi_buf >>= 8; + s.bi_valid -= 8; + } +} + + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +function gen_bitlen(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var max_code = desc.max_code; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var extra = desc.stat_desc.extra_bits; + var base = desc.stat_desc.extra_base; + var max_length = desc.stat_desc.max_length; + var h; /* heap index */ + var n, m; /* iterate over the tree elements */ + var bits; /* bit length */ + var xbits; /* extra bits */ + var f; /* frequency */ + var overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) { + s.bl_count[bits] = 0; + } + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s.heap[s.heap_max] * 2 + 1]/*.Len*/ = 0; /* root of the heap */ + + for (h = s.heap_max + 1; h < HEAP_SIZE; h++) { + n = s.heap[h]; + bits = tree[tree[n * 2 + 1]/*.Dad*/ * 2 + 1]/*.Len*/ + 1; + if (bits > max_length) { + bits = max_length; + overflow++; + } + tree[n * 2 + 1]/*.Len*/ = bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) { continue; } /* not a leaf node */ + + s.bl_count[bits]++; + xbits = 0; + if (n >= base) { + xbits = extra[n - base]; + } + f = tree[n * 2]/*.Freq*/; + s.opt_len += f * (bits + xbits); + if (has_stree) { + s.static_len += f * (stree[n * 2 + 1]/*.Len*/ + xbits); + } + } + if (overflow === 0) { return; } + + // Trace((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s.bl_count[bits] === 0) { bits--; } + s.bl_count[bits]--; /* move one leaf down the tree */ + s.bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s.bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits !== 0; bits--) { + n = s.bl_count[bits]; + while (n !== 0) { + m = s.heap[--h]; + if (m > max_code) { continue; } + if (tree[m * 2 + 1]/*.Len*/ !== bits) { + // Trace((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s.opt_len += (bits - tree[m * 2 + 1]/*.Len*/) * tree[m * 2]/*.Freq*/; + tree[m * 2 + 1]/*.Len*/ = bits; + } + n--; + } + } +} + + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +function gen_codes(tree, max_code, bl_count) +// ct_data *tree; /* the tree to decorate */ +// int max_code; /* largest code with non zero frequency */ +// ushf *bl_count; /* number of codes at each bit length */ +{ + var next_code = new Array(MAX_BITS + 1); /* next code value for each bit length */ + var code = 0; /* running code value */ + var bits; /* bit index */ + var n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + next_code[bits] = code = (code + bl_count[bits - 1]) << 1; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + //Assert (code + bl_count[MAX_BITS]-1 == (1< length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES - 1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = code; + } + } + //Assert (length == 256, "tr_static_init: length != 256"); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: dist != 256"); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for (; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = code; + } + } + //Assert (dist == 256, "tr_static_init: 256+dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) { + bl_count[bits] = 0; + } + + n = 0; + while (n <= 143) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + while (n <= 255) { + static_ltree[n * 2 + 1]/*.Len*/ = 9; + n++; + bl_count[9]++; + } + while (n <= 279) { + static_ltree[n * 2 + 1]/*.Len*/ = 7; + n++; + bl_count[7]++; + } + while (n <= 287) { + static_ltree[n * 2 + 1]/*.Len*/ = 8; + n++; + bl_count[8]++; + } + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes(static_ltree, L_CODES + 1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n * 2 + 1]/*.Len*/ = 5; + static_dtree[n * 2]/*.Code*/ = bi_reverse(n, 5); + } + + // Now data ready and we can init static trees + static_l_desc = new StaticTreeDesc(static_ltree, extra_lbits, LITERALS + 1, L_CODES, MAX_BITS); + static_d_desc = new StaticTreeDesc(static_dtree, extra_dbits, 0, D_CODES, MAX_BITS); + static_bl_desc = new StaticTreeDesc(new Array(0), extra_blbits, 0, BL_CODES, MAX_BL_BITS); + + //static_init_done = true; +} + + +/* =========================================================================== + * Initialize a new block. + */ +function init_block(s) { + var n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) { s.dyn_ltree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < D_CODES; n++) { s.dyn_dtree[n * 2]/*.Freq*/ = 0; } + for (n = 0; n < BL_CODES; n++) { s.bl_tree[n * 2]/*.Freq*/ = 0; } + + s.dyn_ltree[END_BLOCK * 2]/*.Freq*/ = 1; + s.opt_len = s.static_len = 0; + s.last_lit = s.matches = 0; +} + + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +function bi_windup(s) +{ + if (s.bi_valid > 8) { + put_short(s, s.bi_buf); + } else if (s.bi_valid > 0) { + //put_byte(s, (Byte)s->bi_buf); + s.pending_buf[s.pending++] = s.bi_buf; + } + s.bi_buf = 0; + s.bi_valid = 0; +} + +/* =========================================================================== + * Copy a stored block, storing first the length and its + * one's complement if requested. + */ +function copy_block(s, buf, len, header) +//DeflateState *s; +//charf *buf; /* the input data */ +//unsigned len; /* its length */ +//int header; /* true if block header must be written */ +{ + bi_windup(s); /* align on byte boundary */ + + if (header) { + put_short(s, len); + put_short(s, ~len); + } +// while (len--) { +// put_byte(s, *buf++); +// } + utils.arraySet(s.pending_buf, s.window, buf, len, s.pending); + s.pending += len; +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +function smaller(tree, n, m, depth) { + var _n2 = n * 2; + var _m2 = m * 2; + return (tree[_n2]/*.Freq*/ < tree[_m2]/*.Freq*/ || + (tree[_n2]/*.Freq*/ === tree[_m2]/*.Freq*/ && depth[n] <= depth[m])); +} + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +function pqdownheap(s, tree, k) +// deflate_state *s; +// ct_data *tree; /* the tree to restore */ +// int k; /* node to move down */ +{ + var v = s.heap[k]; + var j = k << 1; /* left son of k */ + while (j <= s.heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s.heap_len && + smaller(tree, s.heap[j + 1], s.heap[j], s.depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s.heap[j], s.depth)) { break; } + + /* Exchange v with the smallest son */ + s.heap[k] = s.heap[j]; + k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s.heap[k] = v; +} + + +// inlined manually +// var SMALLEST = 1; + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +function compress_block(s, ltree, dtree) +// deflate_state *s; +// const ct_data *ltree; /* literal tree */ +// const ct_data *dtree; /* distance tree */ +{ + var dist; /* distance of matched string */ + var lc; /* match length or unmatched char (if dist == 0) */ + var lx = 0; /* running index in l_buf */ + var code; /* the code to send */ + var extra; /* number of extra bits to send */ + + if (s.last_lit !== 0) { + do { + dist = (s.pending_buf[s.d_buf + lx * 2] << 8) | (s.pending_buf[s.d_buf + lx * 2 + 1]); + lc = s.pending_buf[s.l_buf + lx]; + lx++; + + if (dist === 0) { + send_code(s, lc, ltree); /* send a literal byte */ + //Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send the length code */ + extra = extra_lbits[code]; + if (extra !== 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + //Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra !== 0) { + dist -= base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check that the overlay between pending_buf and d_buf+l_buf is ok: */ + //Assert((uInt)(s->pending) < s->lit_bufsize + 2*lx, + // "pendingBuf overflow"); + + } while (lx < s.last_lit); + } + + send_code(s, END_BLOCK, ltree); +} + + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +function build_tree(s, desc) +// deflate_state *s; +// tree_desc *desc; /* the tree descriptor */ +{ + var tree = desc.dyn_tree; + var stree = desc.stat_desc.static_tree; + var has_stree = desc.stat_desc.has_stree; + var elems = desc.stat_desc.elems; + var n, m; /* iterate over heap elements */ + var max_code = -1; /* largest code with non zero frequency */ + var node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n+1]. + * heap[0] is not used. + */ + s.heap_len = 0; + s.heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n * 2]/*.Freq*/ !== 0) { + s.heap[++s.heap_len] = max_code = n; + s.depth[n] = 0; + + } else { + tree[n * 2 + 1]/*.Len*/ = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s.heap_len < 2) { + node = s.heap[++s.heap_len] = (max_code < 2 ? ++max_code : 0); + tree[node * 2]/*.Freq*/ = 1; + s.depth[node] = 0; + s.opt_len--; + + if (has_stree) { + s.static_len -= stree[node * 2 + 1]/*.Len*/; + } + /* node is 0 or 1 so it does not have extra bits */ + } + desc.max_code = max_code; + + /* The elements heap[heap_len/2+1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = (s.heap_len >> 1/*int /2*/); n >= 1; n--) { pqdownheap(s, tree, n); } + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + //pqremove(s, tree, n); /* n = node of least frequency */ + /*** pqremove ***/ + n = s.heap[1/*SMALLEST*/]; + s.heap[1/*SMALLEST*/] = s.heap[s.heap_len--]; + pqdownheap(s, tree, 1/*SMALLEST*/); + /***/ + + m = s.heap[1/*SMALLEST*/]; /* m = node of next least frequency */ + + s.heap[--s.heap_max] = n; /* keep the nodes sorted by frequency */ + s.heap[--s.heap_max] = m; + + /* Create a new node father of n and m */ + tree[node * 2]/*.Freq*/ = tree[n * 2]/*.Freq*/ + tree[m * 2]/*.Freq*/; + s.depth[node] = (s.depth[n] >= s.depth[m] ? s.depth[n] : s.depth[m]) + 1; + tree[n * 2 + 1]/*.Dad*/ = tree[m * 2 + 1]/*.Dad*/ = node; + + /* and insert the new node in the heap */ + s.heap[1/*SMALLEST*/] = node++; + pqdownheap(s, tree, 1/*SMALLEST*/); + + } while (s.heap_len >= 2); + + s.heap[--s.heap_max] = s.heap[1/*SMALLEST*/]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes(tree, max_code, s.bl_count); +} + + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +function scan_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + tree[(max_code + 1) * 2 + 1]/*.Len*/ = 0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + s.bl_tree[curlen * 2]/*.Freq*/ += count; + + } else if (curlen !== 0) { + + if (curlen !== prevlen) { s.bl_tree[curlen * 2]/*.Freq*/++; } + s.bl_tree[REP_3_6 * 2]/*.Freq*/++; + + } else if (count <= 10) { + s.bl_tree[REPZ_3_10 * 2]/*.Freq*/++; + + } else { + s.bl_tree[REPZ_11_138 * 2]/*.Freq*/++; + } + + count = 0; + prevlen = curlen; + + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +function send_tree(s, tree, max_code) +// deflate_state *s; +// ct_data *tree; /* the tree to be scanned */ +// int max_code; /* and its largest code of non zero frequency */ +{ + var n; /* iterates over all tree elements */ + var prevlen = -1; /* last emitted length */ + var curlen; /* length of current code */ + + var nextlen = tree[0 * 2 + 1]/*.Len*/; /* length of next code */ + + var count = 0; /* repeat count of the current code */ + var max_count = 7; /* max repeat count */ + var min_count = 4; /* min repeat count */ + + /* tree[max_code+1].Len = -1; */ /* guard already set */ + if (nextlen === 0) { + max_count = 138; + min_count = 3; + } + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; + nextlen = tree[(n + 1) * 2 + 1]/*.Len*/; + + if (++count < max_count && curlen === nextlen) { + continue; + + } else if (count < min_count) { + do { send_code(s, curlen, s.bl_tree); } while (--count !== 0); + + } else if (curlen !== 0) { + if (curlen !== prevlen) { + send_code(s, curlen, s.bl_tree); + count--; + } + //Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s.bl_tree); + send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s.bl_tree); + send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s.bl_tree); + send_bits(s, count - 11, 7); + } + + count = 0; + prevlen = curlen; + if (nextlen === 0) { + max_count = 138; + min_count = 3; + + } else if (curlen === nextlen) { + max_count = 6; + min_count = 3; + + } else { + max_count = 7; + min_count = 4; + } + } +} + + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +function build_bl_tree(s) { + var max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, s.dyn_ltree, s.l_desc.max_code); + scan_tree(s, s.dyn_dtree, s.d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, s.bl_desc); + /* opt_len now includes the length of the tree representations, except + * the lengths of the bit lengths codes and the 5+5+4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES - 1; max_blindex >= 3; max_blindex--) { + if (s.bl_tree[bl_order[max_blindex] * 2 + 1]/*.Len*/ !== 0) { + break; + } + } + /* Update opt_len to include the bit length tree and counts */ + s.opt_len += 3 * (max_blindex + 1) + 5 + 5 + 4; + //Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + // s->opt_len, s->static_len)); + + return max_blindex; +} + + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +function send_all_trees(s, lcodes, dcodes, blcodes) +// deflate_state *s; +// int lcodes, dcodes, blcodes; /* number of codes for each tree */ +{ + var rank; /* index in bl_order */ + + //Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + //Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + // "too many codes"); + //Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + //Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s.bl_tree[bl_order[rank] * 2 + 1]/*.Len*/, 3); + } + //Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_ltree, lcodes - 1); /* literal tree */ + //Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, s.dyn_dtree, dcodes - 1); /* distance tree */ + //Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "black list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "white list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +function detect_data_type(s) { + /* black_mask is the bit mask of black-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + var black_mask = 0xf3ffc07f; + var n; + + /* Check for non-textual ("black-listed") bytes. */ + for (n = 0; n <= 31; n++, black_mask >>>= 1) { + if ((black_mask & 1) && (s.dyn_ltree[n * 2]/*.Freq*/ !== 0)) { + return Z_BINARY; + } + } + + /* Check for textual ("white-listed") bytes. */ + if (s.dyn_ltree[9 * 2]/*.Freq*/ !== 0 || s.dyn_ltree[10 * 2]/*.Freq*/ !== 0 || + s.dyn_ltree[13 * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + for (n = 32; n < LITERALS; n++) { + if (s.dyn_ltree[n * 2]/*.Freq*/ !== 0) { + return Z_TEXT; + } + } + + /* There are no "black-listed" or "white-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + + +var static_init_done = false; + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +function _tr_init(s) +{ + + if (!static_init_done) { + tr_static_init(); + static_init_done = true; + } + + s.l_desc = new TreeDesc(s.dyn_ltree, static_l_desc); + s.d_desc = new TreeDesc(s.dyn_dtree, static_d_desc); + s.bl_desc = new TreeDesc(s.bl_tree, static_bl_desc); + + s.bi_buf = 0; + s.bi_valid = 0; + + /* Initialize the first block of the first file: */ + init_block(s); +} + + +/* =========================================================================== + * Send a stored block + */ +function _tr_stored_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + send_bits(s, (STORED_BLOCK << 1) + (last ? 1 : 0), 3); /* send block type */ + copy_block(s, buf, stored_len, true); /* with header */ +} + + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +function _tr_align(s) { + send_bits(s, STATIC_TREES << 1, 3); + send_code(s, END_BLOCK, static_ltree); + bi_flush(s); +} + + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and output the encoded block to the zip file. + */ +function _tr_flush_block(s, buf, stored_len, last) +//DeflateState *s; +//charf *buf; /* input block, or NULL if too old */ +//ulg stored_len; /* length of input block */ +//int last; /* one if this is the last block for a file */ +{ + var opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + var max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s.level > 0) { + + /* Check if the file is binary or text */ + if (s.strm.data_type === Z_UNKNOWN) { + s.strm.data_type = detect_data_type(s); + } + + /* Construct the literal and distance trees */ + build_tree(s, s.l_desc); + // Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + + build_tree(s, s.d_desc); + // Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + // s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s.opt_len + 3 + 7) >>> 3; + static_lenb = (s.static_len + 3 + 7) >>> 3; + + // Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + // opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + // s->last_lit)); + + if (static_lenb <= opt_lenb) { opt_lenb = static_lenb; } + + } else { + // Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + + if ((stored_len + 4 <= opt_lenb) && (buf !== -1)) { + /* 4: two words for the lengths */ + + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (s.strategy === Z_FIXED || static_lenb === opt_lenb) { + + send_bits(s, (STATIC_TREES << 1) + (last ? 1 : 0), 3); + compress_block(s, static_ltree, static_dtree); + + } else { + send_bits(s, (DYN_TREES << 1) + (last ? 1 : 0), 3); + send_all_trees(s, s.l_desc.max_code + 1, s.d_desc.max_code + 1, max_blindex + 1); + compress_block(s, s.dyn_ltree, s.dyn_dtree); + } + // Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); + } + // Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len>>3, + // s->compressed_len-7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +function _tr_tally(s, dist, lc) +// deflate_state *s; +// unsigned dist; /* distance of matched string */ +// unsigned lc; /* match length-MIN_MATCH or unmatched char (if dist==0) */ +{ + //var out_length, in_length, dcode; + + s.pending_buf[s.d_buf + s.last_lit * 2] = (dist >>> 8) & 0xff; + s.pending_buf[s.d_buf + s.last_lit * 2 + 1] = dist & 0xff; + + s.pending_buf[s.l_buf + s.last_lit] = lc & 0xff; + s.last_lit++; + + if (dist === 0) { + /* lc is the unmatched char */ + s.dyn_ltree[lc * 2]/*.Freq*/++; + } else { + s.matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + //Assert((ush)dist < (ush)MAX_DIST(s) && + // (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + // (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s.dyn_ltree[(_length_code[lc] + LITERALS + 1) * 2]/*.Freq*/++; + s.dyn_dtree[d_code(dist) * 2]/*.Freq*/++; + } + +// (!) This block is disabled in zlib defailts, +// don't enable it for binary compatibility + +//#ifdef TRUNCATE_BLOCK +// /* Try to guess if it is profitable to stop the current block here */ +// if ((s.last_lit & 0x1fff) === 0 && s.level > 2) { +// /* Compute an upper bound for the compressed length */ +// out_length = s.last_lit*8; +// in_length = s.strstart - s.block_start; +// +// for (dcode = 0; dcode < D_CODES; dcode++) { +// out_length += s.dyn_dtree[dcode*2]/*.Freq*/ * (5 + extra_dbits[dcode]); +// } +// out_length >>>= 3; +// //Tracev((stderr,"\nlast_lit %u, in %ld, out ~%ld(%ld%%) ", +// // s->last_lit, in_length, out_length, +// // 100L - out_length*100L/in_length)); +// if (s.matches < (s.last_lit>>1)/*int /2*/ && out_length < (in_length>>1)/*int /2*/) { +// return true; +// } +// } +//#endif + + return (s.last_lit === s.lit_bufsize - 1); + /* We avoid equality with lit_bufsize because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ +} + +exports._tr_init = _tr_init; +exports._tr_stored_block = _tr_stored_block; +exports._tr_flush_block = _tr_flush_block; +exports._tr_tally = _tr_tally; +exports._tr_align = _tr_align; + +},{"../utils/common":123}],135:[function(require,module,exports){ +'use strict'; + + +function ZStream() { + /* next input byte */ + this.input = null; // JS specific, because we have no pointers + this.next_in = 0; + /* number of bytes available at input */ + this.avail_in = 0; + /* total number of input bytes read so far */ + this.total_in = 0; + /* next output byte should be put there */ + this.output = null; // JS specific, because we have no pointers + this.next_out = 0; + /* remaining free space at output */ + this.avail_out = 0; + /* total number of bytes output so far */ + this.total_out = 0; + /* last error message, NULL if no error */ + this.msg = ''/*Z_NULL*/; + /* not visible by applications */ + this.state = null; + /* best guess about the data type: binary or text */ + this.data_type = 2/*Z_UNKNOWN*/; + /* adler32 value of the uncompressed data */ + this.adler = 0; +} + +module.exports = ZStream; + +},{}],136:[function(require,module,exports){ +(function (process){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +// resolves . and .. elements in a path array with directory names there +// must be no slashes, empty elements, or device names (c:\) in the array +// (so also no leading and trailing slashes - it does not distinguish +// relative and absolute paths) +function normalizeArray(parts, allowAboveRoot) { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up--; up) { + parts.unshift('..'); + } + } + + return parts; +} + +// Split a filename into [root, dir, basename, ext], unix version +// 'root' is just a slash, or nothing. +var splitPathRe = + /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; +var splitPath = function(filename) { + return splitPathRe.exec(filename).slice(1); +}; + +// path.resolve([from ...], to) +// posix version +exports.resolve = function() { + var resolvedPath = '', + resolvedAbsolute = false; + + for (var i = arguments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? arguments[i] : process.cwd(); + + // Skip empty and invalid entries + if (typeof path !== 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + continue; + } + + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = path.charAt(0) === '/'; + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeArray(filter(resolvedPath.split('/'), function(p) { + return !!p; + }), !resolvedAbsolute).join('/'); + + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; +}; + +// path.normalize(path) +// posix version +exports.normalize = function(path) { + var isAbsolute = exports.isAbsolute(path), + trailingSlash = substr(path, -1) === '/'; + + // Normalize the path + path = normalizeArray(filter(path.split('/'), function(p) { + return !!p; + }), !isAbsolute).join('/'); + + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + + return (isAbsolute ? '/' : '') + path; +}; + +// posix version +exports.isAbsolute = function(path) { + return path.charAt(0) === '/'; +}; + +// posix version +exports.join = function() { + var paths = Array.prototype.slice.call(arguments, 0); + return exports.normalize(filter(paths, function(p, index) { + if (typeof p !== 'string') { + throw new TypeError('Arguments to path.join must be strings'); + } + return p; + }).join('/')); +}; + + +// path.relative(from, to) +// posix version +exports.relative = function(from, to) { + from = exports.resolve(from).substr(1); + to = exports.resolve(to).substr(1); + + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + + return outputParts.join('/'); +}; + +exports.sep = '/'; +exports.delimiter = ':'; + +exports.dirname = function(path) { + var result = splitPath(path), + root = result[0], + dir = result[1]; + + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.substr(0, dir.length - 1); + } + + return root + dir; +}; + + +exports.basename = function(path, ext) { + var f = splitPath(path)[2]; + // TODO: make this comparison case-insensitive on windows? + if (ext && f.substr(-1 * ext.length) === ext) { + f = f.substr(0, f.length - ext.length); + } + return f; +}; + + +exports.extname = function(path) { + return splitPath(path)[3]; +}; + +function filter (xs, f) { + if (xs.filter) return xs.filter(f); + var res = []; + for (var i = 0; i < xs.length; i++) { + if (f(xs[i], i, xs)) res.push(xs[i]); + } + return res; +} + +// String.prototype.substr - negative index don't work in IE8 +var substr = 'ab'.substr(-1) === 'b' + ? function (str, start, len) { return str.substr(start, len) } + : function (str, start, len) { + if (start < 0) start = str.length + start; + return str.substr(start, len); + } +; + +}).call(this,require('_process')) +},{"_process":138}],137:[function(require,module,exports){ +(function (process){ +'use strict'; + +if (!process.version || + process.version.indexOf('v0.') === 0 || + process.version.indexOf('v1.') === 0 && process.version.indexOf('v1.8.') !== 0) { + module.exports = nextTick; +} else { + module.exports = process.nextTick; +} + +function nextTick(fn, arg1, arg2, arg3) { + if (typeof fn !== 'function') { + throw new TypeError('"callback" argument must be a function'); + } + var len = arguments.length; + var args, i; + switch (len) { + case 0: + case 1: + return process.nextTick(fn); + case 2: + return process.nextTick(function afterTickOne() { + fn.call(null, arg1); + }); + case 3: + return process.nextTick(function afterTickTwo() { + fn.call(null, arg1, arg2); + }); + case 4: + return process.nextTick(function afterTickThree() { + fn.call(null, arg1, arg2, arg3); + }); + default: + args = new Array(len - 1); + i = 0; + while (i < args.length) { + args[i++] = arguments[i]; + } + return process.nextTick(function afterTick() { + fn.apply(null, args); + }); + } +} + +}).call(this,require('_process')) +},{"_process":138}],138:[function(require,module,exports){ +// shim for using process in browser +var process = module.exports = {}; + +// cached from whatever global is present so that test runners that stub it +// don't break things. But we need to wrap it in a try catch in case it is +// wrapped in strict mode code which doesn't define any globals. It's inside a +// function because try/catches deoptimize in certain engines. + +var cachedSetTimeout; +var cachedClearTimeout; + +function defaultSetTimout() { + throw new Error('setTimeout has not been defined'); +} +function defaultClearTimeout () { + throw new Error('clearTimeout has not been defined'); +} +(function () { + try { + if (typeof setTimeout === 'function') { + cachedSetTimeout = setTimeout; + } else { + cachedSetTimeout = defaultSetTimout; + } + } catch (e) { + cachedSetTimeout = defaultSetTimout; + } + try { + if (typeof clearTimeout === 'function') { + cachedClearTimeout = clearTimeout; + } else { + cachedClearTimeout = defaultClearTimeout; + } + } catch (e) { + cachedClearTimeout = defaultClearTimeout; + } +} ()) +function runTimeout(fun) { + if (cachedSetTimeout === setTimeout) { + //normal enviroments in sane situations + return setTimeout(fun, 0); + } + // if setTimeout wasn't available but was latter defined + if ((cachedSetTimeout === defaultSetTimout || !cachedSetTimeout) && setTimeout) { + cachedSetTimeout = setTimeout; + return setTimeout(fun, 0); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedSetTimeout(fun, 0); + } catch(e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedSetTimeout.call(null, fun, 0); + } catch(e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error + return cachedSetTimeout.call(this, fun, 0); + } + } + + +} +function runClearTimeout(marker) { + if (cachedClearTimeout === clearTimeout) { + //normal enviroments in sane situations + return clearTimeout(marker); + } + // if clearTimeout wasn't available but was latter defined + if ((cachedClearTimeout === defaultClearTimeout || !cachedClearTimeout) && clearTimeout) { + cachedClearTimeout = clearTimeout; + return clearTimeout(marker); + } + try { + // when when somebody has screwed with setTimeout but no I.E. maddness + return cachedClearTimeout(marker); + } catch (e){ + try { + // When we are in I.E. but the script has been evaled so I.E. doesn't trust the global object when called normally + return cachedClearTimeout.call(null, marker); + } catch (e){ + // same as above but when it's a version of I.E. that must have the global object for 'this', hopfully our context correct otherwise it will throw a global error. + // Some versions of I.E. have different rules for clearTimeout vs setTimeout + return cachedClearTimeout.call(this, marker); + } + } + + + +} +var queue = []; +var draining = false; +var currentQueue; +var queueIndex = -1; + +function cleanUpNextTick() { + if (!draining || !currentQueue) { + return; + } + draining = false; + if (currentQueue.length) { + queue = currentQueue.concat(queue); + } else { + queueIndex = -1; + } + if (queue.length) { + drainQueue(); + } +} + +function drainQueue() { + if (draining) { + return; + } + var timeout = runTimeout(cleanUpNextTick); + draining = true; + + var len = queue.length; + while(len) { + currentQueue = queue; + queue = []; + while (++queueIndex < len) { + if (currentQueue) { + currentQueue[queueIndex].run(); + } + } + queueIndex = -1; + len = queue.length; + } + currentQueue = null; + draining = false; + runClearTimeout(timeout); +} + +process.nextTick = function (fun) { + var args = new Array(arguments.length - 1); + if (arguments.length > 1) { + for (var i = 1; i < arguments.length; i++) { + args[i - 1] = arguments[i]; + } + } + queue.push(new Item(fun, args)); + if (queue.length === 1 && !draining) { + runTimeout(drainQueue); + } +}; + +// v8 likes predictible objects +function Item(fun, array) { + this.fun = fun; + this.array = array; +} +Item.prototype.run = function () { + this.fun.apply(null, this.array); +}; +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; +process.version = ''; // empty string to avoid regexp issues +process.versions = {}; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +}; + +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; +process.umask = function() { return 0; }; + +},{}],139:[function(require,module,exports){ +module.exports = require("./lib/_stream_duplex.js") + +},{"./lib/_stream_duplex.js":140}],140:[function(require,module,exports){ +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +'use strict'; + +/**/ + +var objectKeys = Object.keys || function (obj) { + var keys = []; + for (var key in obj) { + keys.push(key); + }return keys; +}; +/**/ + +module.exports = Duplex; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +var keys = objectKeys(Writable.prototype); +for (var v = 0; v < keys.length; v++) { + var method = keys[v]; + if (!Duplex.prototype[method]) Duplex.prototype[method] = Writable.prototype[method]; +} + +function Duplex(options) { + if (!(this instanceof Duplex)) return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) this.readable = false; + + if (options && options.writable === false) this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) this.allowHalfOpen = false; + + this.once('end', onend); +} + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) return; + + // no more data can be written. + // But allow more writes to happen in this tick. + processNextTick(onEndNT, this); +} + +function onEndNT(self) { + self.end(); +} + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} +},{"./_stream_readable":142,"./_stream_writable":144,"core-util-is":78,"inherits":81,"process-nextick-args":137}],141:[function(require,module,exports){ +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +'use strict'; + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function (chunk, encoding, cb) { + cb(null, chunk); +}; +},{"./_stream_transform":143,"core-util-is":78,"inherits":81}],142:[function(require,module,exports){ +(function (process){ +'use strict'; + +module.exports = Readable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var isArray = require('isarray'); +/**/ + +/**/ +var Duplex; +/**/ + +Readable.ReadableState = ReadableState; + +/**/ +var EE = require('events').EventEmitter; + +var EElistenerCount = function (emitter, type) { + return emitter.listeners(type).length; +}; +/**/ + +/**/ +var Stream; +(function () { + try { + Stream = require('st' + 'ream'); + } catch (_) {} finally { + if (!Stream) Stream = require('events').EventEmitter; + } +})(); +/**/ + +var Buffer = require('buffer').Buffer; +/**/ +var bufferShim = require('buffer-shims'); +/**/ + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var debugUtil = require('util'); +var debug = void 0; +if (debugUtil && debugUtil.debuglog) { + debug = debugUtil.debuglog('stream'); +} else { + debug = function () {}; +} +/**/ + +var BufferList = require('./internal/streams/BufferList'); +var StringDecoder; + +util.inherits(Readable, Stream); + +function prependListener(emitter, event, fn) { + // Sadly this is not cacheable as some libraries bundle their own + // event emitter implementation with them. + if (typeof emitter.prependListener === 'function') { + return emitter.prependListener(event, fn); + } else { + // This is a hack to make sure that our error handler is attached before any + // userland ones. NEVER DO THIS. This is here only because this code needs + // to continue to work with older versions of Node.js that do not include + // the prependListener() method. The goal is to eventually remove this hack. + if (!emitter._events || !emitter._events[event]) emitter.on(event, fn);else if (isArray(emitter._events[event])) emitter._events[event].unshift(fn);else emitter._events[event] = [fn, emitter._events[event]]; + } +} + +function ReadableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.readableObjectMode; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + // A linked list is used to store data chunks instead of an array because the + // linked list can remove elements from the beginning faster than + // array.shift() + this.buffer = new BufferList(); + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = null; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + this.resumeScheduled = false; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + if (!(this instanceof Readable)) return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + if (options && typeof options.read === 'function') this._read = options.read; + + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function (chunk, encoding) { + var state = this._readableState; + + if (!state.objectMode && typeof chunk === 'string') { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = bufferShim.from(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function (chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; + +Readable.prototype.isPaused = function () { + return this._readableState.flowing === false; +}; + +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (chunk === null) { + state.reading = false; + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var _e = new Error('stream.unshift() after end event'); + stream.emit('error', _e); + } else { + var skipAdd; + if (state.decoder && !addToFront && !encoding) { + chunk = state.decoder.write(chunk); + skipAdd = !state.objectMode && chunk.length === 0; + } + + if (!addToFront) state.reading = false; + + // Don't add to the buffer if we've decoded to an empty string chunk and + // we're not in object mode + if (!skipAdd) { + // if we want the data now, just emit it. + if (state.flowing && state.length === 0 && !state.sync) { + stream.emit('data', chunk); + stream.read(0); + } else { + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) state.buffer.unshift(chunk);else state.buffer.push(chunk); + + if (state.needReadable) emitReadable(stream); + } + } + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); +} + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && (state.needReadable || state.length < state.highWaterMark || state.length === 0); +} + +// backwards compatibility. +Readable.prototype.setEncoding = function (enc) { + if (!StringDecoder) StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; + return this; +}; + +// Don't raise the hwm > 8MB +var MAX_HWM = 0x800000; +function computeNewHighWaterMark(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 to prevent increasing hwm excessively in + // tiny amounts + n--; + n |= n >>> 1; + n |= n >>> 2; + n |= n >>> 4; + n |= n >>> 8; + n |= n >>> 16; + n++; + } + return n; +} + +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function howMuchToRead(n, state) { + if (n <= 0 || state.length === 0 && state.ended) return 0; + if (state.objectMode) return 1; + if (n !== n) { + // Only flow one buffer at a time + if (state.flowing && state.length) return state.buffer.head.data.length;else return state.length; + } + // If we're asking for more than the current hwm, then raise the hwm. + if (n > state.highWaterMark) state.highWaterMark = computeNewHighWaterMark(n); + if (n <= state.length) return n; + // Don't have enough + if (!state.ended) { + state.needReadable = true; + return 0; + } + return state.length; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function (n) { + debug('read', n); + n = parseInt(n, 10); + var state = this._readableState; + var nOrig = n; + + if (n !== 0) state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && state.needReadable && (state.length >= state.highWaterMark || state.ended)) { + debug('read: emitReadable', state.length, state.ended); + if (state.length === 0 && state.ended) endReadable(this);else emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + debug('need readable', doRead); + + // if we currently have less than the highWaterMark, then also read some + if (state.length === 0 || state.length - n < state.highWaterMark) { + doRead = true; + debug('length less than watermark', doRead); + } + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) { + doRead = false; + debug('reading or ended', doRead); + } else if (doRead) { + debug('do read'); + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + // If _read pushed data synchronously, then `reading` will be false, + // and we need to re-evaluate how much data we can return to the user. + if (!state.reading) n = howMuchToRead(nOrig, state); + } + + var ret; + if (n > 0) ret = fromList(n, state);else ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } else { + state.length -= n; + } + + if (state.length === 0) { + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (!state.ended) state.needReadable = true; + + // If we tried to read() past the EOF, then emit end on the next tick. + if (nOrig !== n && state.ended) endReadable(this); + } + + if (ret !== null) this.emit('data', ret); + + return ret; +}; + +function chunkInvalid(state, chunk) { + var er = null; + if (!Buffer.isBuffer(chunk) && typeof chunk !== 'string' && chunk !== null && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + +function onEofChunk(stream, state) { + if (state.ended) return; + if (state.decoder) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // emit 'readable' now to make sure it gets picked up. + emitReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (!state.emittedReadable) { + debug('emitReadable', state.flowing); + state.emittedReadable = true; + if (state.sync) processNextTick(emitReadable_, stream);else emitReadable_(stream); + } +} + +function emitReadable_(stream) { + debug('emit readable'); + stream.emit('readable'); + flow(stream); +} + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + processNextTick(maybeReadMore_, stream, state); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && state.length < state.highWaterMark) { + debug('maybeReadMore read 0'); + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break;else len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function (n) { + this.emit('error', new Error('_read() is not implemented')); +}; + +Readable.prototype.pipe = function (dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + debug('pipe count=%d opts=%j', state.pipesCount, pipeOpts); + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && dest !== process.stdout && dest !== process.stderr; + + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) processNextTick(endFn);else src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + debug('onunpipe'); + if (readable === src) { + cleanup(); + } + } + + function onend() { + debug('onend'); + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + var cleanedUp = false; + function cleanup() { + debug('cleanup'); + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + src.removeListener('data', ondata); + + cleanedUp = true; + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (state.awaitDrain && (!dest._writableState || dest._writableState.needDrain)) ondrain(); + } + + // If the user pushes more data while we're writing to dest then we'll end up + // in ondata again. However, we only want to increase awaitDrain once because + // dest will only emit one 'drain' event for the multiple writes. + // => Introduce a guard on increasing awaitDrain. + var increasedAwaitDrain = false; + src.on('data', ondata); + function ondata(chunk) { + debug('ondata'); + increasedAwaitDrain = false; + var ret = dest.write(chunk); + if (false === ret && !increasedAwaitDrain) { + // If the user unpiped during `dest.write()`, it is possible + // to get stuck in a permanently paused state if that write + // also returned false. + // => Check whether `dest` is still a piping destination. + if ((state.pipesCount === 1 && state.pipes === dest || state.pipesCount > 1 && indexOf(state.pipes, dest) !== -1) && !cleanedUp) { + debug('false write response, pause', src._readableState.awaitDrain); + src._readableState.awaitDrain++; + increasedAwaitDrain = true; + } + src.pause(); + } + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + debug('onerror', er); + unpipe(); + dest.removeListener('error', onerror); + if (EElistenerCount(dest, 'error') === 0) dest.emit('error', er); + } + + // Make sure our error handler is attached before userland ones. + prependListener(dest, 'error', onerror); + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + debug('onfinish'); + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + debug('unpipe'); + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + debug('pipe resume'); + src.resume(); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function () { + var state = src._readableState; + debug('pipeOnDrain', state.awaitDrain); + if (state.awaitDrain) state.awaitDrain--; + if (state.awaitDrain === 0 && EElistenerCount(src, 'data')) { + state.flowing = true; + flow(src); + } + }; +} + +Readable.prototype.unpipe = function (dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) return this; + + if (!dest) dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + if (dest) dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + state.flowing = false; + + for (var i = 0; i < len; i++) { + dests[i].emit('unpipe', this); + }return this; + } + + // try to find the right one. + var index = indexOf(state.pipes, dest); + if (index === -1) return this; + + state.pipes.splice(index, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function (ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data') { + // Start flowing on next tick if stream isn't explicitly paused + if (this._readableState.flowing !== false) this.resume(); + } else if (ev === 'readable') { + var state = this._readableState; + if (!state.endEmitted && !state.readableListening) { + state.readableListening = state.needReadable = true; + state.emittedReadable = false; + if (!state.reading) { + processNextTick(nReadingNextTick, this); + } else if (state.length) { + emitReadable(this, state); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +function nReadingNextTick(self) { + debug('readable nexttick read 0'); + self.read(0); +} + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function () { + var state = this._readableState; + if (!state.flowing) { + debug('resume'); + state.flowing = true; + resume(this, state); + } + return this; +}; + +function resume(stream, state) { + if (!state.resumeScheduled) { + state.resumeScheduled = true; + processNextTick(resume_, stream, state); + } +} + +function resume_(stream, state) { + if (!state.reading) { + debug('resume read 0'); + stream.read(0); + } + + state.resumeScheduled = false; + state.awaitDrain = 0; + stream.emit('resume'); + flow(stream); + if (state.flowing && !state.reading) stream.read(0); +} + +Readable.prototype.pause = function () { + debug('call pause flowing=%j', this._readableState.flowing); + if (false !== this._readableState.flowing) { + debug('pause'); + this._readableState.flowing = false; + this.emit('pause'); + } + return this; +}; + +function flow(stream) { + var state = stream._readableState; + debug('flow', state.flowing); + while (state.flowing && stream.read() !== null) {} +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function (stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function () { + debug('wrapped end'); + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function (chunk) { + debug('wrapped data'); + if (state.decoder) chunk = state.decoder.write(chunk); + + // don't skip over falsy values in objectMode + if (state.objectMode && (chunk === null || chunk === undefined)) return;else if (!state.objectMode && (!chunk || !chunk.length)) return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (this[i] === undefined && typeof stream[i] === 'function') { + this[i] = function (method) { + return function () { + return stream[method].apply(stream, arguments); + }; + }(i); + } + } + + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + forEach(events, function (ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function (n) { + debug('wrapped _read', n); + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromList(n, state) { + // nothing buffered + if (state.length === 0) return null; + + var ret; + if (state.objectMode) ret = state.buffer.shift();else if (!n || n >= state.length) { + // read it all, truncate the list + if (state.decoder) ret = state.buffer.join('');else if (state.buffer.length === 1) ret = state.buffer.head.data;else ret = state.buffer.concat(state.length); + state.buffer.clear(); + } else { + // read part of list + ret = fromListPartial(n, state.buffer, state.decoder); + } + + return ret; +} + +// Extracts only enough buffered data to satisfy the amount requested. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function fromListPartial(n, list, hasStrings) { + var ret; + if (n < list.head.data.length) { + // slice is the same for buffers and strings + ret = list.head.data.slice(0, n); + list.head.data = list.head.data.slice(n); + } else if (n === list.head.data.length) { + // first chunk is a perfect match + ret = list.shift(); + } else { + // result spans more than one buffer + ret = hasStrings ? copyFromBufferString(n, list) : copyFromBuffer(n, list); + } + return ret; +} + +// Copies a specified amount of characters from the list of buffered data +// chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBufferString(n, list) { + var p = list.head; + var c = 1; + var ret = p.data; + n -= ret.length; + while (p = p.next) { + var str = p.data; + var nb = n > str.length ? str.length : n; + if (nb === str.length) ret += str;else ret += str.slice(0, n); + n -= nb; + if (n === 0) { + if (nb === str.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = str.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +// Copies a specified amount of bytes from the list of buffered data chunks. +// This function is designed to be inlinable, so please take care when making +// changes to the function body. +function copyFromBuffer(n, list) { + var ret = bufferShim.allocUnsafe(n); + var p = list.head; + var c = 1; + p.data.copy(ret); + n -= p.data.length; + while (p = p.next) { + var buf = p.data; + var nb = n > buf.length ? buf.length : n; + buf.copy(ret, ret.length - n, 0, nb); + n -= nb; + if (n === 0) { + if (nb === buf.length) { + ++c; + if (p.next) list.head = p.next;else list.head = list.tail = null; + } else { + list.head = p; + p.data = buf.slice(nb); + } + break; + } + ++c; + } + list.length -= c; + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) throw new Error('"endReadable()" called on non-empty stream'); + + if (!state.endEmitted) { + state.ended = true; + processNextTick(endReadableNT, state, stream); + } +} + +function endReadableNT(state, stream) { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } +} + +function forEach(xs, f) { + for (var i = 0, l = xs.length; i < l; i++) { + f(xs[i], i); + } +} + +function indexOf(xs, x) { + for (var i = 0, l = xs.length; i < l; i++) { + if (xs[i] === x) return i; + } + return -1; +} +}).call(this,require('_process')) +},{"./_stream_duplex":140,"./internal/streams/BufferList":145,"_process":138,"buffer":77,"buffer-shims":76,"core-util-is":78,"events":79,"inherits":81,"isarray":83,"process-nextick-args":137,"string_decoder/":152,"util":75}],143:[function(require,module,exports){ +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +'use strict'; + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +util.inherits(Transform, Duplex); + +function TransformState(stream) { + this.afterTransform = function (er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; + this.writeencoding = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) stream.push(data); + + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + +function Transform(options) { + if (!(this instanceof Transform)) return new Transform(options); + + Duplex.call(this, options); + + this._transformState = new TransformState(this); + + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + if (options) { + if (typeof options.transform === 'function') this._transform = options.transform; + + if (typeof options.flush === 'function') this._flush = options.flush; + } + + // When the writable side finishes, then flush out anything remaining. + this.once('prefinish', function () { + if (typeof this._flush === 'function') this._flush(function (er, data) { + done(stream, er, data); + });else done(stream); + }); +} + +Transform.prototype.push = function (chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function (chunk, encoding, cb) { + throw new Error('_transform() is not implemented'); +}; + +Transform.prototype._write = function (chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || rs.needReadable || rs.length < rs.highWaterMark) this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function (n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + +function done(stream, er, data) { + if (er) return stream.emit('error', er); + + if (data !== null && data !== undefined) stream.push(data); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var ts = stream._transformState; + + if (ws.length) throw new Error('Calling transform done when ws.length != 0'); + + if (ts.transforming) throw new Error('Calling transform done when still transforming'); + + return stream.push(null); +} +},{"./_stream_duplex":140,"core-util-is":78,"inherits":81}],144:[function(require,module,exports){ +(function (process){ +// A bit simpler than readable streams. +// Implement an async ._write(chunk, encoding, cb), and it'll handle all +// the drain event emission and buffering. + +'use strict'; + +module.exports = Writable; + +/**/ +var processNextTick = require('process-nextick-args'); +/**/ + +/**/ +var asyncWrite = !process.browser && ['v0.10', 'v0.9.'].indexOf(process.version.slice(0, 5)) > -1 ? setImmediate : processNextTick; +/**/ + +/**/ +var Duplex; +/**/ + +Writable.WritableState = WritableState; + +/**/ +var util = require('core-util-is'); +util.inherits = require('inherits'); +/**/ + +/**/ +var internalUtil = { + deprecate: require('util-deprecate') +}; +/**/ + +/**/ +var Stream; +(function () { + try { + Stream = require('st' + 'ream'); + } catch (_) {} finally { + if (!Stream) Stream = require('events').EventEmitter; + } +})(); +/**/ + +var Buffer = require('buffer').Buffer; +/**/ +var bufferShim = require('buffer-shims'); +/**/ + +util.inherits(Writable, Stream); + +function nop() {} + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; + this.next = null; +} + +function WritableState(options, stream) { + Duplex = Duplex || require('./_stream_duplex'); + + options = options || {}; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + if (stream instanceof Duplex) this.objectMode = this.objectMode || !!options.writableObjectMode; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + var defaultHwm = this.objectMode ? 16 : 16 * 1024; + this.highWaterMark = hwm || hwm === 0 ? hwm : defaultHwm; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + // drain event flag. + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // when true all writes will be buffered until .uncork() call + this.corked = 0; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, because any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function (er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.bufferedRequest = null; + this.lastBufferedRequest = null; + + // number of pending user-supplied write callbacks + // this must be 0 before 'finish' can be emitted + this.pendingcb = 0; + + // emit prefinish if the only thing we're waiting for is _write cbs + // This is relevant for synchronous Transform streams + this.prefinished = false; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; + + // count buffered requests + this.bufferedRequestCount = 0; + + // allocate the first CorkedRequest, there is always + // one allocated and free to use, and we maintain at most two + this.corkedRequestsFree = new CorkedRequest(this); +} + +WritableState.prototype.getBuffer = function getBuffer() { + var current = this.bufferedRequest; + var out = []; + while (current) { + out.push(current); + current = current.next; + } + return out; +}; + +(function () { + try { + Object.defineProperty(WritableState.prototype, 'buffer', { + get: internalUtil.deprecate(function () { + return this.getBuffer(); + }, '_writableState.buffer is deprecated. Use _writableState.getBuffer ' + 'instead.') + }); + } catch (_) {} +})(); + +// Test _writableState for inheritance to account for Duplex streams, +// whose prototype chain only points to Readable. +var realHasInstance; +if (typeof Symbol === 'function' && Symbol.hasInstance && typeof Function.prototype[Symbol.hasInstance] === 'function') { + realHasInstance = Function.prototype[Symbol.hasInstance]; + Object.defineProperty(Writable, Symbol.hasInstance, { + value: function (object) { + if (realHasInstance.call(this, object)) return true; + + return object && object._writableState instanceof WritableState; + } + }); +} else { + realHasInstance = function (object) { + return object instanceof this; + }; +} + +function Writable(options) { + Duplex = Duplex || require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, too. + // `realHasInstance` is necessary because using plain `instanceof` + // would return false, as no `_writableState` property is attached. + + // Trying to use the custom `instanceof` for Writable here will also break the + // Node.js LazyTransform implementation, which has a non-trivial getter for + // `_writableState` that would lead to infinite recursion. + if (!realHasInstance.call(Writable, this) && !(this instanceof Duplex)) { + return new Writable(options); + } + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + if (options) { + if (typeof options.write === 'function') this._write = options.write; + + if (typeof options.writev === 'function') this._writev = options.writev; + } + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function () { + this.emit('error', new Error('Cannot pipe, not readable')); +}; + +function writeAfterEnd(stream, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + processNextTick(cb, er); +} + +// Checks that a user-supplied chunk is valid, especially for the particular +// mode the stream is in. Currently this means that `null` is never accepted +// and undefined/non-string values are only allowed in object mode. +function validChunk(stream, state, chunk, cb) { + var valid = true; + var er = false; + + if (chunk === null) { + er = new TypeError('May not write null values to stream'); + } else if (typeof chunk !== 'string' && chunk !== undefined && !state.objectMode) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + if (er) { + stream.emit('error', er); + processNextTick(cb, er); + valid = false; + } + return valid; +} + +Writable.prototype.write = function (chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + var isBuf = Buffer.isBuffer(chunk); + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (isBuf) encoding = 'buffer';else if (!encoding) encoding = state.defaultEncoding; + + if (typeof cb !== 'function') cb = nop; + + if (state.ended) writeAfterEnd(this, cb);else if (isBuf || validChunk(this, state, chunk, cb)) { + state.pendingcb++; + ret = writeOrBuffer(this, state, isBuf, chunk, encoding, cb); + } + + return ret; +}; + +Writable.prototype.cork = function () { + var state = this._writableState; + + state.corked++; +}; + +Writable.prototype.uncork = function () { + var state = this._writableState; + + if (state.corked) { + state.corked--; + + if (!state.writing && !state.corked && !state.finished && !state.bufferProcessing && state.bufferedRequest) clearBuffer(this, state); + } +}; + +Writable.prototype.setDefaultEncoding = function setDefaultEncoding(encoding) { + // node::ParseEncoding() requires lower case. + if (typeof encoding === 'string') encoding = encoding.toLowerCase(); + if (!(['hex', 'utf8', 'utf-8', 'ascii', 'binary', 'base64', 'ucs2', 'ucs-2', 'utf16le', 'utf-16le', 'raw'].indexOf((encoding + '').toLowerCase()) > -1)) throw new TypeError('Unknown encoding: ' + encoding); + this._writableState.defaultEncoding = encoding; + return this; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && state.decodeStrings !== false && typeof chunk === 'string') { + chunk = bufferShim.from(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, isBuf, chunk, encoding, cb) { + if (!isBuf) { + chunk = decodeChunk(state, chunk, encoding); + if (Buffer.isBuffer(chunk)) encoding = 'buffer'; + } + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) state.needDrain = true; + + if (state.writing || state.corked) { + var last = state.lastBufferedRequest; + state.lastBufferedRequest = new WriteReq(chunk, encoding, cb); + if (last) { + last.next = state.lastBufferedRequest; + } else { + state.bufferedRequest = state.lastBufferedRequest; + } + state.bufferedRequestCount += 1; + } else { + doWrite(stream, state, false, len, chunk, encoding, cb); + } + + return ret; +} + +function doWrite(stream, state, writev, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + if (writev) stream._writev(chunk, state.onwrite);else stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + --state.pendingcb; + if (sync) processNextTick(cb, er);else cb(er); + + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) onwriteError(stream, state, sync, er, cb);else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(state); + + if (!finished && !state.corked && !state.bufferProcessing && state.bufferedRequest) { + clearBuffer(stream, state); + } + + if (sync) { + /**/ + asyncWrite(afterWrite, stream, state, finished, cb); + /**/ + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) onwriteDrain(stream, state); + state.pendingcb--; + cb(); + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + var entry = state.bufferedRequest; + + if (stream._writev && entry && entry.next) { + // Fast case, write everything using _writev() + var l = state.bufferedRequestCount; + var buffer = new Array(l); + var holder = state.corkedRequestsFree; + holder.entry = entry; + + var count = 0; + while (entry) { + buffer[count] = entry; + entry = entry.next; + count += 1; + } + + doWrite(stream, state, true, state.length, buffer, '', holder.finish); + + // doWrite is almost always async, defer these to save a bit of time + // as the hot path ends with doWrite + state.pendingcb++; + state.lastBufferedRequest = null; + if (holder.next) { + state.corkedRequestsFree = holder.next; + holder.next = null; + } else { + state.corkedRequestsFree = new CorkedRequest(state); + } + } else { + // Slow case, write chunks one-by-one + while (entry) { + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, false, len, chunk, encoding, cb); + entry = entry.next; + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + break; + } + } + + if (entry === null) state.lastBufferedRequest = null; + } + + state.bufferedRequestCount = 0; + state.bufferedRequest = entry; + state.bufferProcessing = false; +} + +Writable.prototype._write = function (chunk, encoding, cb) { + cb(new Error('_write() is not implemented')); +}; + +Writable.prototype._writev = null; + +Writable.prototype.end = function (chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (chunk !== null && chunk !== undefined) this.write(chunk, encoding); + + // .end() fully uncorks + if (state.corked) { + state.corked = 1; + this.uncork(); + } + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) endWritable(this, state, cb); +}; + +function needFinish(state) { + return state.ending && state.length === 0 && state.bufferedRequest === null && !state.finished && !state.writing; +} + +function prefinish(stream, state) { + if (!state.prefinished) { + state.prefinished = true; + stream.emit('prefinish'); + } +} + +function finishMaybe(stream, state) { + var need = needFinish(state); + if (need) { + if (state.pendingcb === 0) { + prefinish(stream, state); + state.finished = true; + stream.emit('finish'); + } else { + prefinish(stream, state); + } + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) processNextTick(cb);else stream.once('finish', cb); + } + state.ended = true; + stream.writable = false; +} + +// It seems a linked list but it is not +// there will be only 2 of these for each stream +function CorkedRequest(state) { + var _this = this; + + this.next = null; + this.entry = null; + this.finish = function (err) { + var entry = _this.entry; + _this.entry = null; + while (entry) { + var cb = entry.callback; + state.pendingcb--; + cb(err); + entry = entry.next; + } + if (state.corkedRequestsFree) { + state.corkedRequestsFree.next = _this; + } else { + state.corkedRequestsFree = _this; + } + }; +} +}).call(this,require('_process')) +},{"./_stream_duplex":140,"_process":138,"buffer":77,"buffer-shims":76,"core-util-is":78,"events":79,"inherits":81,"process-nextick-args":137,"util-deprecate":154}],145:[function(require,module,exports){ +'use strict'; + +var Buffer = require('buffer').Buffer; +/**/ +var bufferShim = require('buffer-shims'); +/**/ + +module.exports = BufferList; + +function BufferList() { + this.head = null; + this.tail = null; + this.length = 0; +} + +BufferList.prototype.push = function (v) { + var entry = { data: v, next: null }; + if (this.length > 0) this.tail.next = entry;else this.head = entry; + this.tail = entry; + ++this.length; +}; + +BufferList.prototype.unshift = function (v) { + var entry = { data: v, next: this.head }; + if (this.length === 0) this.tail = entry; + this.head = entry; + ++this.length; +}; + +BufferList.prototype.shift = function () { + if (this.length === 0) return; + var ret = this.head.data; + if (this.length === 1) this.head = this.tail = null;else this.head = this.head.next; + --this.length; + return ret; +}; + +BufferList.prototype.clear = function () { + this.head = this.tail = null; + this.length = 0; +}; + +BufferList.prototype.join = function (s) { + if (this.length === 0) return ''; + var p = this.head; + var ret = '' + p.data; + while (p = p.next) { + ret += s + p.data; + }return ret; +}; + +BufferList.prototype.concat = function (n) { + if (this.length === 0) return bufferShim.alloc(0); + if (this.length === 1) return this.head.data; + var ret = bufferShim.allocUnsafe(n >>> 0); + var p = this.head; + var i = 0; + while (p) { + p.data.copy(ret, i); + i += p.data.length; + p = p.next; + } + return ret; +}; +},{"buffer":77,"buffer-shims":76}],146:[function(require,module,exports){ +module.exports = require("./lib/_stream_passthrough.js") + +},{"./lib/_stream_passthrough.js":141}],147:[function(require,module,exports){ +(function (process){ +var Stream = (function (){ + try { + return require('st' + 'ream'); // hack to fix a circular dependency issue when used with browserify + } catch(_){} +}()); +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Stream = Stream || exports; +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); + +if (!process.browser && process.env.READABLE_STREAM === 'disable' && Stream) { + module.exports = Stream; +} + +}).call(this,require('_process')) +},{"./lib/_stream_duplex.js":140,"./lib/_stream_passthrough.js":141,"./lib/_stream_readable.js":142,"./lib/_stream_transform.js":143,"./lib/_stream_writable.js":144,"_process":138}],148:[function(require,module,exports){ +module.exports = require("./lib/_stream_transform.js") + +},{"./lib/_stream_transform.js":143}],149:[function(require,module,exports){ +module.exports = require("./lib/_stream_writable.js") + +},{"./lib/_stream_writable.js":144}],150:[function(require,module,exports){ +(function (Buffer){ +;(function (sax) { // wrapper for non-node envs + sax.parser = function (strict, opt) { return new SAXParser(strict, opt) } + sax.SAXParser = SAXParser + sax.SAXStream = SAXStream + sax.createStream = createStream + + // When we pass the MAX_BUFFER_LENGTH position, start checking for buffer overruns. + // When we check, schedule the next check for MAX_BUFFER_LENGTH - (max(buffer lengths)), + // since that's the earliest that a buffer overrun could occur. This way, checks are + // as rare as required, but as often as necessary to ensure never crossing this bound. + // Furthermore, buffers are only tested at most once per write(), so passing a very + // large string into write() might have undesirable effects, but this is manageable by + // the caller, so it is assumed to be safe. Thus, a call to write() may, in the extreme + // edge case, result in creating at most one complete copy of the string passed in. + // Set to Infinity to have unlimited buffers. + sax.MAX_BUFFER_LENGTH = 64 * 1024 + + var buffers = [ + 'comment', 'sgmlDecl', 'textNode', 'tagName', 'doctype', + 'procInstName', 'procInstBody', 'entity', 'attribName', + 'attribValue', 'cdata', 'script' + ] + + sax.EVENTS = [ + 'text', + 'processinginstruction', + 'sgmldeclaration', + 'doctype', + 'comment', + 'attribute', + 'opentag', + 'closetag', + 'opencdata', + 'cdata', + 'closecdata', + 'error', + 'end', + 'ready', + 'script', + 'opennamespace', + 'closenamespace' + ] + + function SAXParser (strict, opt) { + if (!(this instanceof SAXParser)) { + return new SAXParser(strict, opt) + } + + var parser = this + clearBuffers(parser) + parser.q = parser.c = '' + parser.bufferCheckPosition = sax.MAX_BUFFER_LENGTH + parser.opt = opt || {} + parser.opt.lowercase = parser.opt.lowercase || parser.opt.lowercasetags + parser.looseCase = parser.opt.lowercase ? 'toLowerCase' : 'toUpperCase' + parser.tags = [] + parser.closed = parser.closedRoot = parser.sawRoot = false + parser.tag = parser.error = null + parser.strict = !!strict + parser.noscript = !!(strict || parser.opt.noscript) + parser.state = S.BEGIN + parser.strictEntities = parser.opt.strictEntities + parser.ENTITIES = parser.strictEntities ? Object.create(sax.XML_ENTITIES) : Object.create(sax.ENTITIES) + parser.attribList = [] + + // namespaces form a prototype chain. + // it always points at the current tag, + // which protos to its parent tag. + if (parser.opt.xmlns) { + parser.ns = Object.create(rootNS) + } + + // mostly just for error reporting + parser.trackPosition = parser.opt.position !== false + if (parser.trackPosition) { + parser.position = parser.line = parser.column = 0 + } + emit(parser, 'onready') + } + + if (!Object.create) { + Object.create = function (o) { + function F () {} + F.prototype = o + var newf = new F() + return newf + } + } + + if (!Object.keys) { + Object.keys = function (o) { + var a = [] + for (var i in o) if (o.hasOwnProperty(i)) a.push(i) + return a + } + } + + function checkBufferLength (parser) { + var maxAllowed = Math.max(sax.MAX_BUFFER_LENGTH, 10) + var maxActual = 0 + for (var i = 0, l = buffers.length; i < l; i++) { + var len = parser[buffers[i]].length + if (len > maxAllowed) { + // Text/cdata nodes can get big, and since they're buffered, + // we can get here under normal conditions. + // Avoid issues by emitting the text node now, + // so at least it won't get any bigger. + switch (buffers[i]) { + case 'textNode': + closeText(parser) + break + + case 'cdata': + emitNode(parser, 'oncdata', parser.cdata) + parser.cdata = '' + break + + case 'script': + emitNode(parser, 'onscript', parser.script) + parser.script = '' + break + + default: + error(parser, 'Max buffer length exceeded: ' + buffers[i]) + } + } + maxActual = Math.max(maxActual, len) + } + // schedule the next check for the earliest possible buffer overrun. + var m = sax.MAX_BUFFER_LENGTH - maxActual + parser.bufferCheckPosition = m + parser.position + } + + function clearBuffers (parser) { + for (var i = 0, l = buffers.length; i < l; i++) { + parser[buffers[i]] = '' + } + } + + function flushBuffers (parser) { + closeText(parser) + if (parser.cdata !== '') { + emitNode(parser, 'oncdata', parser.cdata) + parser.cdata = '' + } + if (parser.script !== '') { + emitNode(parser, 'onscript', parser.script) + parser.script = '' + } + } + + SAXParser.prototype = { + end: function () { end(this) }, + write: write, + resume: function () { this.error = null; return this }, + close: function () { return this.write(null) }, + flush: function () { flushBuffers(this) } + } + + var Stream + try { + Stream = require('stream').Stream + } catch (ex) { + Stream = function () {} + } + + var streamWraps = sax.EVENTS.filter(function (ev) { + return ev !== 'error' && ev !== 'end' + }) + + function createStream (strict, opt) { + return new SAXStream(strict, opt) + } + + function SAXStream (strict, opt) { + if (!(this instanceof SAXStream)) { + return new SAXStream(strict, opt) + } + + Stream.apply(this) + + this._parser = new SAXParser(strict, opt) + this.writable = true + this.readable = true + + var me = this + + this._parser.onend = function () { + me.emit('end') + } + + this._parser.onerror = function (er) { + me.emit('error', er) + + // if didn't throw, then means error was handled. + // go ahead and clear error, so we can write again. + me._parser.error = null + } + + this._decoder = null + + streamWraps.forEach(function (ev) { + Object.defineProperty(me, 'on' + ev, { + get: function () { + return me._parser['on' + ev] + }, + set: function (h) { + if (!h) { + me.removeAllListeners(ev) + me._parser['on' + ev] = h + return h + } + me.on(ev, h) + }, + enumerable: true, + configurable: false + }) + }) + } + + SAXStream.prototype = Object.create(Stream.prototype, { + constructor: { + value: SAXStream + } + }) + + SAXStream.prototype.write = function (data) { + if (typeof Buffer === 'function' && + typeof Buffer.isBuffer === 'function' && + Buffer.isBuffer(data)) { + if (!this._decoder) { + var SD = require('string_decoder').StringDecoder + this._decoder = new SD('utf8') + } + data = this._decoder.write(data) + } + + this._parser.write(data.toString()) + this.emit('data', data) + return true + } + + SAXStream.prototype.end = function (chunk) { + if (chunk && chunk.length) { + this.write(chunk) + } + this._parser.end() + return true + } + + SAXStream.prototype.on = function (ev, handler) { + var me = this + if (!me._parser['on' + ev] && streamWraps.indexOf(ev) !== -1) { + me._parser['on' + ev] = function () { + var args = arguments.length === 1 ? [arguments[0]] : Array.apply(null, arguments) + args.splice(0, 0, ev) + me.emit.apply(me, args) + } + } + + return Stream.prototype.on.call(me, ev, handler) + } + + // character classes and tokens + var whitespace = '\r\n\t ' + + // this really needs to be replaced with character classes. + // XML allows all manner of ridiculous numbers and digits. + var number = '0124356789' + var letter = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ' + + // (Letter | "_" | ":") + var quote = '\'"' + var attribEnd = whitespace + '>' + var CDATA = '[CDATA[' + var DOCTYPE = 'DOCTYPE' + var XML_NAMESPACE = 'http://www.w3.org/XML/1998/namespace' + var XMLNS_NAMESPACE = 'http://www.w3.org/2000/xmlns/' + var rootNS = { xml: XML_NAMESPACE, xmlns: XMLNS_NAMESPACE } + + // turn all the string character sets into character class objects. + whitespace = charClass(whitespace) + number = charClass(number) + letter = charClass(letter) + + // http://www.w3.org/TR/REC-xml/#NT-NameStartChar + // This implementation works on strings, a single character at a time + // as such, it cannot ever support astral-plane characters (10000-EFFFF) + // without a significant breaking change to either this parser, or the + // JavaScript language. Implementation of an emoji-capable xml parser + // is left as an exercise for the reader. + var nameStart = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + + var nameBody = /[:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + + var entityStart = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD]/ + var entityBody = /[#:_A-Za-z\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u02FF\u0370-\u037D\u037F-\u1FFF\u200C-\u200D\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD\u00B7\u0300-\u036F\u203F-\u2040\.\d-]/ + + quote = charClass(quote) + attribEnd = charClass(attribEnd) + + function charClass (str) { + return str.split('').reduce(function (s, c) { + s[c] = true + return s + }, {}) + } + + function isRegExp (c) { + return Object.prototype.toString.call(c) === '[object RegExp]' + } + + function is (charclass, c) { + return isRegExp(charclass) ? !!c.match(charclass) : charclass[c] + } + + function not (charclass, c) { + return !is(charclass, c) + } + + var S = 0 + sax.STATE = { + BEGIN: S++, // leading byte order mark or whitespace + BEGIN_WHITESPACE: S++, // leading whitespace + TEXT: S++, // general stuff + TEXT_ENTITY: S++, // & and such. + OPEN_WAKA: S++, // < + SGML_DECL: S++, // + SCRIPT: S++, // + + + + +
+ +
+
+
+ + + +
+
+

supported languages

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
#lang codelang name
1achAcoli
2afAfrikaans
3akAfrikaans (South Africa)
4anAfrikaans (South Africa)
5arArabic
6asArabic (Yemen)
7astArabic (Yemen)
8azAzeri (Latin)
9beBelarusian
10bgBulgarian
11bn-BDBulgarian (Bulgaria)
12bn-INBulgarian (Bulgaria)
13brBulgarian (Bulgaria)
14bsBulgarian (Bulgaria)
15caCatalan
16csCzech
17csbCzech
18cyWelsh
19daDanish
20deGerman
21elGreek
22en-GBEnglish (United Kingdom)
23en-USEnglish (United States)
24en-ZAEnglish (South Africa)
25eoEsperanto
26es-ARSpanish (Argentina)
27es-CLSpanish (Chile)
28es-ESSpanish (Spain)
29es-MXSpanish (Mexico)
30etEstonian
31euBasque
32faFarsi
33ffFarsi (Iran)
34fiFinnish
35frFrench
36fy-NLFrench (Principality of Monaco)
37ga-IEFrench (Principality of Monaco)
38gdFrench (Principality of Monaco)
39glGalician
40gu-INGujarati (India)
41heHebrew
42hi-INHindi (India)
43hrCroatian
44huHungarian
45hy-AMArmenian (Armenia)
46idIndonesian
47isIcelandic
48itItalian
49jaJapanese
50kaGeorgian
51kkKazakh
52kmKazakh (Kazakhstan)
53knKannada
54koKorean
55kuKonkani (India)
56lgKyrgyz (Kyrgyzstan)
57lijKyrgyz (Kyrgyzstan)
58ltLithuanian
59lvLatvian
60maiLatvian (Latvia)
61mkFYRO Macedonian
62mlFYRO Macedonian (Former Yugoslav Republic of Macedonia)
63mnMongolian
64mrMarathi
65msMalay
66myMaltese (Malta)
67nb-NONorwegian (Bokm?l) (Norway)
68nlDutch
69nn-NONorwegian (Nynorsk) (Norway)
70nsoNorthern Sotho
71ocNorthern Sotho (South Africa)
72orNorthern Sotho (South Africa)
73pa-INPunjabi (India)
74plPolish
75pt-BRPortuguese (Brazil)
76pt-PTPortuguese (Portugal)
77rmQuechua (Peru)
78roRomanian
79ruRussian
80rwRussian (Russia)
81sahSanskrit
82siSami (Southern) (Sweden)
83skSlovak
84slSlovenian
85sonSlovenian (Slovenia)
86sqAlbanian
87srAlbanian (Albania)
88sv-SESwedish (Sweden)
89swSwahili
90taTamil
91ta-LKTamil (India)
92teTelugu
93thThai
94tlTagalog
95tnTswana
96trTurkish
97ukUkrainian
98urUrdu
99viVietnamese
100woVietnamese (Viet Nam)
101xhXhosa
102zh-CNChinese (S)
103zh-TWChinese (T)
104zuZulu
+
+
+
+ +
+
+
+ +
+ +
+ + + diff --git a/example/pages/layout/index.html b/example/pages/layout/index.html new file mode 100644 index 0000000..e69de29 diff --git a/example/pages/layout/scripts/index.html b/example/pages/layout/scripts/index.html new file mode 100644 index 0000000..e69de29 diff --git a/example/pages/layout/scripts/jquery.backtotop.js b/example/pages/layout/scripts/jquery.backtotop.js new file mode 100644 index 0000000..dd3cce7 --- /dev/null +++ b/example/pages/layout/scripts/jquery.backtotop.js @@ -0,0 +1,21 @@ +/* +Template Name: Epigosha +Author: OS Templates +Author URI: http://www.os-templates.com/ +Licence: Free to use under our free template licence terms +Licence URI: http://www.os-templates.com/template-terms +File: Back to Top JS +*/ + +jQuery("#backtotop").click(function () { + jQuery("body,html").animate({ + scrollTop: 0 + }, 600); +}); +jQuery(window).scroll(function () { + if (jQuery(window).scrollTop() > 150) { + jQuery("#backtotop").addClass("visible"); + } else { + jQuery("#backtotop").removeClass("visible"); + } +}); \ No newline at end of file diff --git a/example/pages/layout/scripts/jquery.min.js b/example/pages/layout/scripts/jquery.min.js new file mode 100644 index 0000000..2fb85ae --- /dev/null +++ b/example/pages/layout/scripts/jquery.min.js @@ -0,0 +1,4 @@ +/*! jQuery v2.2.1 | (c) jQuery Foundation | jquery.org/license */ +!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){var c=[],d=a.document,e=c.slice,f=c.concat,g=c.push,h=c.indexOf,i={},j=i.toString,k=i.hasOwnProperty,l={},m="2.2.1",n=function(a,b){return new n.fn.init(a,b)},o=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,p=/^-ms-/,q=/-([\da-z])/gi,r=function(a,b){return b.toUpperCase()};n.fn=n.prototype={jquery:m,constructor:n,selector:"",length:0,toArray:function(){return e.call(this)},get:function(a){return null!=a?0>a?this[a+this.length]:this[a]:e.call(this)},pushStack:function(a){var b=n.merge(this.constructor(),a);return b.prevObject=this,b.context=this.context,b},each:function(a){return n.each(this,a)},map:function(a){return this.pushStack(n.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(e.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(0>a?b:0);return this.pushStack(c>=0&&b>c?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:g,sort:c.sort,splice:c.splice},n.extend=n.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||n.isFunction(g)||(g={}),h===i&&(g=this,h--);i>h;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(n.isPlainObject(d)||(e=n.isArray(d)))?(e?(e=!1,f=c&&n.isArray(c)?c:[]):f=c&&n.isPlainObject(c)?c:{},g[b]=n.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},n.extend({expando:"jQuery"+(m+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===n.type(a)},isArray:Array.isArray,isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=a&&a.toString();return!n.isArray(a)&&b-parseFloat(b)+1>=0},isPlainObject:function(a){return"object"!==n.type(a)||a.nodeType||n.isWindow(a)?!1:a.constructor&&!k.call(a.constructor.prototype,"isPrototypeOf")?!1:!0},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?i[j.call(a)]||"object":typeof a},globalEval:function(a){var b,c=eval;a=n.trim(a),a&&(1===a.indexOf("use strict")?(b=d.createElement("script"),b.text=a,d.head.appendChild(b).parentNode.removeChild(b)):c(a))},camelCase:function(a){return a.replace(p,"ms-").replace(q,r)},nodeName:function(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()},each:function(a,b){var c,d=0;if(s(a)){for(c=a.length;c>d;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(o,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(s(Object(a))?n.merge(c,"string"==typeof a?[a]:a):g.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:h.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;c>d;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;g>f;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,g=0,h=[];if(s(a))for(d=a.length;d>g;g++)e=b(a[g],g,c),null!=e&&h.push(e);else for(g in a)e=b(a[g],g,c),null!=e&&h.push(e);return f.apply([],h)},guid:1,proxy:function(a,b){var c,d,f;return"string"==typeof b&&(c=a[b],b=a,a=c),n.isFunction(a)?(d=e.call(arguments,2),f=function(){return a.apply(b||this,d.concat(e.call(arguments)))},f.guid=a.guid=a.guid||n.guid++,f):void 0},now:Date.now,support:l}),"function"==typeof Symbol&&(n.fn[Symbol.iterator]=c[Symbol.iterator]),n.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){i["[object "+b+"]"]=b.toLowerCase()});function s(a){var b=!!a&&"length"in a&&a.length,c=n.type(a);return"function"===c||n.isWindow(a)?!1:"array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a}var t=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ga(),z=ga(),A=ga(),B=function(a,b){return a===b&&(l=!0),0},C=1<<31,D={}.hasOwnProperty,E=[],F=E.pop,G=E.push,H=E.push,I=E.slice,J=function(a,b){for(var c=0,d=a.length;d>c;c++)if(a[c]===b)return c;return-1},K="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",L="[\\x20\\t\\r\\n\\f]",M="(?:\\\\.|[\\w-]|[^\\x00-\\xa0])+",N="\\["+L+"*("+M+")(?:"+L+"*([*^$|!~]?=)"+L+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+M+"))|)"+L+"*\\]",O=":("+M+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+N+")*)|.*)\\)|)",P=new RegExp(L+"+","g"),Q=new RegExp("^"+L+"+|((?:^|[^\\\\])(?:\\\\.)*)"+L+"+$","g"),R=new RegExp("^"+L+"*,"+L+"*"),S=new RegExp("^"+L+"*([>+~]|"+L+")"+L+"*"),T=new RegExp("="+L+"*([^\\]'\"]*?)"+L+"*\\]","g"),U=new RegExp(O),V=new RegExp("^"+M+"$"),W={ID:new RegExp("^#("+M+")"),CLASS:new RegExp("^\\.("+M+")"),TAG:new RegExp("^("+M+"|[*])"),ATTR:new RegExp("^"+N),PSEUDO:new RegExp("^"+O),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+L+"*(even|odd|(([+-]|)(\\d*)n|)"+L+"*(?:([+-]|)"+L+"*(\\d+)|))"+L+"*\\)|)","i"),bool:new RegExp("^(?:"+K+")$","i"),needsContext:new RegExp("^"+L+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+L+"*((?:-\\d)?\\d*)"+L+"*\\)|)(?=[^-]|$)","i")},X=/^(?:input|select|textarea|button)$/i,Y=/^h\d$/i,Z=/^[^{]+\{\s*\[native \w/,$=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,_=/[+~]/,aa=/'|\\/g,ba=new RegExp("\\\\([\\da-f]{1,6}"+L+"?|("+L+")|.)","ig"),ca=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:0>d?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},da=function(){m()};try{H.apply(E=I.call(v.childNodes),v.childNodes),E[v.childNodes.length].nodeType}catch(ea){H={apply:E.length?function(a,b){G.apply(a,I.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function fa(a,b,d,e){var f,h,j,k,l,o,r,s,w=b&&b.ownerDocument,x=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==x&&9!==x&&11!==x)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==x&&(o=$.exec(a)))if(f=o[1]){if(9===x){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(w&&(j=w.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(o[2])return H.apply(d,b.getElementsByTagName(a)),d;if((f=o[3])&&c.getElementsByClassName&&b.getElementsByClassName)return H.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==x)w=b,s=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(aa,"\\$&"):b.setAttribute("id",k=u),r=g(a),h=r.length,l=V.test(k)?"#"+k:"[id='"+k+"']";while(h--)r[h]=l+" "+qa(r[h]);s=r.join(","),w=_.test(a)&&oa(b.parentNode)||b}if(s)try{return H.apply(d,w.querySelectorAll(s)),d}catch(y){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(Q,"$1"),b,d,e)}function ga(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ha(a){return a[u]=!0,a}function ia(a){var b=n.createElement("div");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ja(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function ka(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&(~b.sourceIndex||C)-(~a.sourceIndex||C);if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function la(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function na(a){return ha(function(b){return b=+b,ha(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function oa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=fa.support={},f=fa.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return b?"HTML"!==b.nodeName:!1},m=fa.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ia(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ia(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Z.test(n.getElementsByClassName),c.getById=ia(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}},d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){return a.getAttribute("id")===b}}):(delete d.find.ID,d.filter.ID=function(a){var b=a.replace(ba,ca);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){return"undefined"!=typeof b.getElementsByClassName&&p?b.getElementsByClassName(a):void 0},r=[],q=[],(c.qsa=Z.test(n.querySelectorAll))&&(ia(function(a){o.appendChild(a).innerHTML="",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+L+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+L+"*(?:value|"+K+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ia(function(a){var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+L+"*[*^$|!~]?="),a.querySelectorAll(":enabled").length||q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Z.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ia(function(a){c.disconnectedMatch=s.call(a,"div"),s.call(a,"[s!='']:x"),r.push("!=",O)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Z.test(o.compareDocumentPosition),t=b||Z.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?J(k,a)-J(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?J(k,a)-J(k,b):0;if(e===f)return ka(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?ka(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},fa.matches=function(a,b){return fa(a,null,null,b)},fa.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(T,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return fa(b,n,null,[a]).length>0},fa.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},fa.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&D.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},fa.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},fa.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=fa.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=fa.selectors={cacheLength:50,createPseudo:ha,match:W,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(ba,ca),a[3]=(a[3]||a[4]||a[5]||"").replace(ba,ca),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||fa.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&fa.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return W.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&U.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(ba,ca).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+L+")"+a+"("+L+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=fa.attr(d,a);return null==e?"!="===b:b?(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(P," ")+" ").indexOf(c)>-1:"|="===b?e===c||e.slice(0,c.length+1)===c+"-":!1):!0}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||fa.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ha(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=J(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ha(function(a){var b=[],c=[],d=h(a.replace(Q,"$1"));return d[u]?ha(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ha(function(a){return function(b){return fa(a,b).length>0}}),contains:ha(function(a){return a=a.replace(ba,ca),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ha(function(a){return V.test(a||"")||fa.error("unsupported lang: "+a),a=a.replace(ba,ca).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:function(a){return a.disabled===!1},disabled:function(a){return a.disabled===!0},checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return Y.test(a.nodeName)},input:function(a){return X.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:na(function(){return[0]}),last:na(function(a,b){return[b-1]}),eq:na(function(a,b,c){return[0>c?c+b:c]}),even:na(function(a,b){for(var c=0;b>c;c+=2)a.push(c);return a}),odd:na(function(a,b){for(var c=1;b>c;c+=2)a.push(c);return a}),lt:na(function(a,b,c){for(var d=0>c?c+b:c;--d>=0;)a.push(d);return a}),gt:na(function(a,b,c){for(var d=0>c?c+b:c;++db;b++)d+=a[b].value;return d}function ra(a,b,c){var d=b.dir,e=c&&"parentNode"===d,f=x++;return b.first?function(b,c,f){while(b=b[d])if(1===b.nodeType||e)return a(b,c,f)}:function(b,c,g){var h,i,j,k=[w,f];if(g){while(b=b[d])if((1===b.nodeType||e)&&a(b,c,g))return!0}else while(b=b[d])if(1===b.nodeType||e){if(j=b[u]||(b[u]={}),i=j[b.uniqueID]||(j[b.uniqueID]={}),(h=i[d])&&h[0]===w&&h[1]===f)return k[2]=h[2];if(i[d]=k,k[2]=a(b,c,g))return!0}}}function sa(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function ta(a,b,c){for(var d=0,e=b.length;e>d;d++)fa(a,b[d],c);return c}function ua(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;i>h;h++)(f=a[h])&&(!c||c(f,d,e))&&(g.push(f),j&&b.push(h));return g}function va(a,b,c,d,e,f){return d&&!d[u]&&(d=va(d)),e&&!e[u]&&(e=va(e,f)),ha(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||ta(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:ua(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=ua(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?J(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=ua(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):H.apply(g,r)})}function wa(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ra(function(a){return a===b},h,!0),l=ra(function(a){return J(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];f>i;i++)if(c=d.relative[a[i].type])m=[ra(sa(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;f>e;e++)if(d.relative[a[e].type])break;return va(i>1&&sa(m),i>1&&qa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(Q,"$1"),c,e>i&&wa(a.slice(i,e)),f>e&&wa(a=a.slice(e)),f>e&&qa(a))}m.push(c)}return sa(m)}function xa(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=F.call(i));u=ua(u)}H.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&fa.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ha(f):f}return h=fa.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=wa(b[c]),f[u]?d.push(f):e.push(f);f=A(a,xa(e,d)),f.selector=a}return f},i=fa.select=function(a,b,e,f){var i,j,k,l,m,n="function"==typeof a&&a,o=!f&&g(a=n.selector||a);if(e=e||[],1===o.length){if(j=o[0]=o[0].slice(0),j.length>2&&"ID"===(k=j[0]).type&&c.getById&&9===b.nodeType&&p&&d.relative[j[1].type]){if(b=(d.find.ID(k.matches[0].replace(ba,ca),b)||[])[0],!b)return e;n&&(b=b.parentNode),a=a.slice(j.shift().value.length)}i=W.needsContext.test(a)?0:j.length;while(i--){if(k=j[i],d.relative[l=k.type])break;if((m=d.find[l])&&(f=m(k.matches[0].replace(ba,ca),_.test(j[0].type)&&oa(b.parentNode)||b))){if(j.splice(i,1),a=f.length&&qa(j),!a)return H.apply(e,f),e;break}}}return(n||h(a,o))(f,b,!p,e,!b||_.test(a)&&oa(b.parentNode)||b),e},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ia(function(a){return 1&a.compareDocumentPosition(n.createElement("div"))}),ia(function(a){return a.innerHTML="","#"===a.firstChild.getAttribute("href")})||ja("type|href|height|width",function(a,b,c){return c?void 0:a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ia(function(a){return a.innerHTML="",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ja("value",function(a,b,c){return c||"input"!==a.nodeName.toLowerCase()?void 0:a.defaultValue}),ia(function(a){return null==a.getAttribute("disabled")})||ja(K,function(a,b,c){var d;return c?void 0:a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),fa}(a);n.find=t,n.expr=t.selectors,n.expr[":"]=n.expr.pseudos,n.uniqueSort=n.unique=t.uniqueSort,n.text=t.getText,n.isXMLDoc=t.isXML,n.contains=t.contains;var u=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&n(a).is(c))break;d.push(a)}return d},v=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},w=n.expr.match.needsContext,x=/^<([\w-]+)\s*\/?>(?:<\/\1>|)$/,y=/^.[^:#\[\.,]*$/;function z(a,b,c){if(n.isFunction(b))return n.grep(a,function(a,d){return!!b.call(a,d,a)!==c});if(b.nodeType)return n.grep(a,function(a){return a===b!==c});if("string"==typeof b){if(y.test(b))return n.filter(b,a,c);b=n.filter(b,a)}return n.grep(a,function(a){return h.call(b,a)>-1!==c})}n.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?n.find.matchesSelector(d,a)?[d]:[]:n.find.matches(a,n.grep(b,function(a){return 1===a.nodeType}))},n.fn.extend({find:function(a){var b,c=this.length,d=[],e=this;if("string"!=typeof a)return this.pushStack(n(a).filter(function(){for(b=0;c>b;b++)if(n.contains(e[b],this))return!0}));for(b=0;c>b;b++)n.find(a,e[b],d);return d=this.pushStack(c>1?n.unique(d):d),d.selector=this.selector?this.selector+" "+a:a,d},filter:function(a){return this.pushStack(z(this,a||[],!1))},not:function(a){return this.pushStack(z(this,a||[],!0))},is:function(a){return!!z(this,"string"==typeof a&&w.test(a)?n(a):a||[],!1).length}});var A,B=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,C=n.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||A,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:B.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof n?b[0]:b,n.merge(this,n.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),x.test(e[1])&&n.isPlainObject(b))for(e in b)n.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&f.parentNode&&(this.length=1,this[0]=f),this.context=d,this.selector=a,this}return a.nodeType?(this.context=this[0]=a,this.length=1,this):n.isFunction(a)?void 0!==c.ready?c.ready(a):a(n):(void 0!==a.selector&&(this.selector=a.selector,this.context=a.context),n.makeArray(a,this))};C.prototype=n.fn,A=n(d);var D=/^(?:parents|prev(?:Until|All))/,E={children:!0,contents:!0,next:!0,prev:!0};n.fn.extend({has:function(a){var b=n(a,this),c=b.length;return this.filter(function(){for(var a=0;c>a;a++)if(n.contains(this,b[a]))return!0})},closest:function(a,b){for(var c,d=0,e=this.length,f=[],g=w.test(a)||"string"!=typeof a?n(a,b||this.context):0;e>d;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&n.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?n.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?h.call(n(a),this[0]):h.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(n.uniqueSort(n.merge(this.get(),n(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function F(a,b){while((a=a[b])&&1!==a.nodeType);return a}n.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return u(a,"parentNode")},parentsUntil:function(a,b,c){return u(a,"parentNode",c)},next:function(a){return F(a,"nextSibling")},prev:function(a){return F(a,"previousSibling")},nextAll:function(a){return u(a,"nextSibling")},prevAll:function(a){return u(a,"previousSibling")},nextUntil:function(a,b,c){return u(a,"nextSibling",c)},prevUntil:function(a,b,c){return u(a,"previousSibling",c)},siblings:function(a){return v((a.parentNode||{}).firstChild,a)},children:function(a){return v(a.firstChild)},contents:function(a){return a.contentDocument||n.merge([],a.childNodes)}},function(a,b){n.fn[a]=function(c,d){var e=n.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=n.filter(d,e)),this.length>1&&(E[a]||n.uniqueSort(e),D.test(a)&&e.reverse()),this.pushStack(e)}});var G=/\S+/g;function H(a){var b={};return n.each(a.match(G)||[],function(a,c){b[c]=!0}),b}n.Callbacks=function(a){a="string"==typeof a?H(a):n.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h-1)f.splice(c,1),h>=c&&h--}),this},has:function(a){return a?n.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j},n.extend({Deferred:function(a){var b=[["resolve","done",n.Callbacks("once memory"),"resolved"],["reject","fail",n.Callbacks("once memory"),"rejected"],["notify","progress",n.Callbacks("memory")]],c="pending",d={state:function(){return c},always:function(){return e.done(arguments).fail(arguments),this},then:function(){var a=arguments;return n.Deferred(function(c){n.each(b,function(b,f){var g=n.isFunction(a[b])&&a[b];e[f[1]](function(){var a=g&&g.apply(this,arguments);a&&n.isFunction(a.promise)?a.promise().progress(c.notify).done(c.resolve).fail(c.reject):c[f[0]+"With"](this===d?c.promise():this,g?[a]:arguments)})}),a=null}).promise()},promise:function(a){return null!=a?n.extend(a,d):d}},e={};return d.pipe=d.then,n.each(b,function(a,f){var g=f[2],h=f[3];d[f[1]]=g.add,h&&g.add(function(){c=h},b[1^a][2].disable,b[2][2].lock),e[f[0]]=function(){return e[f[0]+"With"](this===e?d:this,arguments),this},e[f[0]+"With"]=g.fireWith}),d.promise(e),a&&a.call(e,e),e},when:function(a){var b=0,c=e.call(arguments),d=c.length,f=1!==d||a&&n.isFunction(a.promise)?d:0,g=1===f?a:n.Deferred(),h=function(a,b,c){return function(d){b[a]=this,c[a]=arguments.length>1?e.call(arguments):d,c===i?g.notifyWith(b,c):--f||g.resolveWith(b,c)}},i,j,k;if(d>1)for(i=new Array(d),j=new Array(d),k=new Array(d);d>b;b++)c[b]&&n.isFunction(c[b].promise)?c[b].promise().progress(h(b,j,i)).done(h(b,k,c)).fail(g.reject):--f;return f||g.resolveWith(k,c),g.promise()}});var I;n.fn.ready=function(a){return n.ready.promise().done(a),this},n.extend({isReady:!1,readyWait:1,holdReady:function(a){a?n.readyWait++:n.ready(!0)},ready:function(a){(a===!0?--n.readyWait:n.isReady)||(n.isReady=!0,a!==!0&&--n.readyWait>0||(I.resolveWith(d,[n]),n.fn.triggerHandler&&(n(d).triggerHandler("ready"),n(d).off("ready"))))}});function J(){d.removeEventListener("DOMContentLoaded",J),a.removeEventListener("load",J),n.ready()}n.ready.promise=function(b){return I||(I=n.Deferred(),"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(n.ready):(d.addEventListener("DOMContentLoaded",J),a.addEventListener("load",J))),I.promise(b)},n.ready.promise();var K=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===n.type(c)){e=!0;for(h in c)K(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,n.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(n(a),c)})),b))for(;i>h;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},L=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function M(){this.expando=n.expando+M.uid++}M.uid=1,M.prototype={register:function(a,b){var c=b||{};return a.nodeType?a[this.expando]=c:Object.defineProperty(a,this.expando,{value:c,writable:!0,configurable:!0}),a[this.expando]},cache:function(a){if(!L(a))return{};var b=a[this.expando];return b||(b={},L(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[b]=c;else for(d in b)e[d]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][b]},access:function(a,b,c){var d;return void 0===b||b&&"string"==typeof b&&void 0===c?(d=this.get(a,b),void 0!==d?d:this.get(a,n.camelCase(b))):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d,e,f=a[this.expando];if(void 0!==f){if(void 0===b)this.register(a);else{n.isArray(b)?d=b.concat(b.map(n.camelCase)):(e=n.camelCase(b),b in f?d=[b,e]:(d=e,d=d in f?[d]:d.match(G)||[])),c=d.length;while(c--)delete f[d[c]]}(void 0===b||n.isEmptyObject(f))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!n.isEmptyObject(b)}};var N=new M,O=new M,P=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Q=/[A-Z]/g;function R(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Q,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c="true"===c?!0:"false"===c?!1:"null"===c?null:+c+""===c?+c:P.test(c)?n.parseJSON(c):c}catch(e){}O.set(a,b,c); +}else c=void 0;return c}n.extend({hasData:function(a){return O.hasData(a)||N.hasData(a)},data:function(a,b,c){return O.access(a,b,c)},removeData:function(a,b){O.remove(a,b)},_data:function(a,b,c){return N.access(a,b,c)},_removeData:function(a,b){N.remove(a,b)}}),n.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=O.get(f),1===f.nodeType&&!N.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=n.camelCase(d.slice(5)),R(f,d,e[d])));N.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){O.set(this,a)}):K(this,function(b){var c,d;if(f&&void 0===b){if(c=O.get(f,a)||O.get(f,a.replace(Q,"-$&").toLowerCase()),void 0!==c)return c;if(d=n.camelCase(a),c=O.get(f,d),void 0!==c)return c;if(c=R(f,d,void 0),void 0!==c)return c}else d=n.camelCase(a),this.each(function(){var c=O.get(this,d);O.set(this,d,b),a.indexOf("-")>-1&&void 0!==c&&O.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){O.remove(this,a)})}}),n.extend({queue:function(a,b,c){var d;return a?(b=(b||"fx")+"queue",d=N.get(a,b),c&&(!d||n.isArray(c)?d=N.access(a,b,n.makeArray(c)):d.push(c)),d||[]):void 0},dequeue:function(a,b){b=b||"fx";var c=n.queue(a,b),d=c.length,e=c.shift(),f=n._queueHooks(a,b),g=function(){n.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return N.get(a,c)||N.access(a,c,{empty:n.Callbacks("once memory").add(function(){N.remove(a,[b+"queue",c])})})}}),n.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length",""],thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};$.optgroup=$.option,$.tbody=$.tfoot=$.colgroup=$.caption=$.thead,$.th=$.td;function _(a,b){var c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[];return void 0===b||b&&n.nodeName(a,b)?n.merge([a],c):c}function aa(a,b){for(var c=0,d=a.length;d>c;c++)N.set(a[c],"globalEval",!b||N.get(b[c],"globalEval"))}var ba=/<|&#?\w+;/;function ca(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],o=0,p=a.length;p>o;o++)if(f=a[o],f||0===f)if("object"===n.type(f))n.merge(m,f.nodeType?[f]:f);else if(ba.test(f)){g=g||l.appendChild(b.createElement("div")),h=(Y.exec(f)||["",""])[1].toLowerCase(),i=$[h]||$._default,g.innerHTML=i[1]+n.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;n.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",o=0;while(f=m[o++])if(d&&n.inArray(f,d)>-1)e&&e.push(f);else if(j=n.contains(f.ownerDocument,f),g=_(l.appendChild(f),"script"),j&&aa(g),c){k=0;while(f=g[k++])Z.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),l.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="",l.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var da=/^key/,ea=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,fa=/^([^.]*)(?:\.(.+)|)/;function ga(){return!0}function ha(){return!1}function ia(){try{return d.activeElement}catch(a){}}function ja(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ja(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=ha;else if(!e)return a;return 1===f&&(g=e,e=function(a){return n().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=n.guid++)),a.each(function(){n.event.add(this,b,e,d,c)})}n.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.get(a);if(r){c.handler&&(f=c,c=f.handler,e=f.selector),c.guid||(c.guid=n.guid++),(i=r.events)||(i=r.events={}),(g=r.handle)||(g=r.handle=function(b){return"undefined"!=typeof n&&n.event.triggered!==b.type?n.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(G)||[""],j=b.length;while(j--)h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o&&(l=n.event.special[o]||{},o=(e?l.delegateType:l.bindType)||o,l=n.event.special[o]||{},k=n.extend({type:o,origType:q,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&n.expr.match.needsContext.test(e),namespace:p.join(".")},f),(m=i[o])||(m=i[o]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,p,g)!==!1||a.addEventListener&&a.addEventListener(o,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),n.event.global[o]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,o,p,q,r=N.hasData(a)&&N.get(a);if(r&&(i=r.events)){b=(b||"").match(G)||[""],j=b.length;while(j--)if(h=fa.exec(b[j])||[],o=q=h[1],p=(h[2]||"").split(".").sort(),o){l=n.event.special[o]||{},o=(d?l.delegateType:l.bindType)||o,m=i[o]||[],h=h[2]&&new RegExp("(^|\\.)"+p.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&q!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,p,r.handle)!==!1||n.removeEvent(a,o,r.handle),delete i[o])}else for(o in i)n.event.remove(a,o+b[j],c,d,!0);n.isEmptyObject(i)&&N.remove(a,"handle events")}},dispatch:function(a){a=n.event.fix(a);var b,c,d,f,g,h=[],i=e.call(arguments),j=(N.get(this,"events")||{})[a.type]||[],k=n.event.special[a.type]||{};if(i[0]=a,a.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,a)!==!1){h=n.event.handlers.call(this,a,j),b=0;while((f=h[b++])&&!a.isPropagationStopped()){a.currentTarget=f.elem,c=0;while((g=f.handlers[c++])&&!a.isImmediatePropagationStopped())(!a.rnamespace||a.rnamespace.test(g.namespace))&&(a.handleObj=g,a.data=g.data,d=((n.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==d&&(a.result=d)===!1&&(a.preventDefault(),a.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,a),a.result}},handlers:function(a,b){var c,d,e,f,g=[],h=b.delegateCount,i=a.target;if(h&&i.nodeType&&("click"!==a.type||isNaN(a.button)||a.button<1))for(;i!==this;i=i.parentNode||this)if(1===i.nodeType&&(i.disabled!==!0||"click"!==a.type)){for(d=[],c=0;h>c;c++)f=b[c],e=f.selector+" ",void 0===d[e]&&(d[e]=f.needsContext?n(e,this).index(i)>-1:n.find(e,this,null,[i]).length),d[e]&&d.push(f);d.length&&g.push({elem:i,handlers:d})}return h]*)\/>/gi,la=/\s*$/g;function pa(a,b){return n.nodeName(a,"table")&&n.nodeName(11!==b.nodeType?b:b.firstChild,"tr")?a.getElementsByTagName("tbody")[0]||a.appendChild(a.ownerDocument.createElement("tbody")):a}function qa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function ra(a){var b=na.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function sa(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(N.hasData(a)&&(f=N.access(a),g=N.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;d>c;c++)n.event.add(b,e,j[e][c])}O.hasData(a)&&(h=O.access(a),i=n.extend({},h),O.set(b,i))}}function ta(a,b){var c=b.nodeName.toLowerCase();"input"===c&&X.test(a.type)?b.checked=a.checked:("input"===c||"textarea"===c)&&(b.defaultValue=a.defaultValue)}function ua(a,b,c,d){b=f.apply([],b);var e,g,h,i,j,k,m=0,o=a.length,p=o-1,q=b[0],r=n.isFunction(q);if(r||o>1&&"string"==typeof q&&!l.checkClone&&ma.test(q))return a.each(function(e){var f=a.eq(e);r&&(b[0]=q.call(this,e,f.html())),ua(f,b,c,d)});if(o&&(e=ca(b,a[0].ownerDocument,!1,a,d),g=e.firstChild,1===e.childNodes.length&&(e=g),g||d)){for(h=n.map(_(e,"script"),qa),i=h.length;o>m;m++)j=e,m!==p&&(j=n.clone(j,!0,!0),i&&n.merge(h,_(j,"script"))),c.call(a[m],j,m);if(i)for(k=h[h.length-1].ownerDocument,n.map(h,ra),m=0;i>m;m++)j=h[m],Z.test(j.type||"")&&!N.access(j,"globalEval")&&n.contains(k,j)&&(j.src?n._evalUrl&&n._evalUrl(j.src):n.globalEval(j.textContent.replace(oa,"")))}return a}function va(a,b,c){for(var d,e=b?n.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||n.cleanData(_(d)),d.parentNode&&(c&&n.contains(d.ownerDocument,d)&&aa(_(d,"script")),d.parentNode.removeChild(d));return a}n.extend({htmlPrefilter:function(a){return a.replace(ka,"<$1>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=n.contains(a.ownerDocument,a);if(!(l.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||n.isXMLDoc(a)))for(g=_(h),f=_(a),d=0,e=f.length;e>d;d++)ta(f[d],g[d]);if(b)if(c)for(f=f||_(a),g=g||_(h),d=0,e=f.length;e>d;d++)sa(f[d],g[d]);else sa(a,h);return g=_(h,"script"),g.length>0&&aa(g,!i&&_(a,"script")),h},cleanData:function(a){for(var b,c,d,e=n.event.special,f=0;void 0!==(c=a[f]);f++)if(L(c)){if(b=c[N.expando]){if(b.events)for(d in b.events)e[d]?n.event.remove(c,d):n.removeEvent(c,d,b.handle);c[N.expando]=void 0}c[O.expando]&&(c[O.expando]=void 0)}}}),n.fn.extend({domManip:ua,detach:function(a){return va(this,a,!0)},remove:function(a){return va(this,a)},text:function(a){return K(this,function(a){return void 0===a?n.text(this):this.empty().each(function(){(1===this.nodeType||11===this.nodeType||9===this.nodeType)&&(this.textContent=a)})},null,a,arguments.length)},append:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.appendChild(a)}})},prepend:function(){return ua(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=pa(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return ua(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(n.cleanData(_(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null==a?!1:a,b=null==b?a:b,this.map(function(){return n.clone(this,a,b)})},html:function(a){return K(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!la.test(a)&&!$[(Y.exec(a)||["",""])[1].toLowerCase()]){a=n.htmlPrefilter(a);try{for(;d>c;c++)b=this[c]||{},1===b.nodeType&&(n.cleanData(_(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return ua(this,arguments,function(b){var c=this.parentNode;n.inArray(this,a)<0&&(n.cleanData(_(this)),c&&c.replaceChild(b,this))},a)}}),n.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){n.fn[a]=function(a){for(var c,d=[],e=n(a),f=e.length-1,h=0;f>=h;h++)c=h===f?this:this.clone(!0),n(e[h])[b](c),g.apply(d,c.get());return this.pushStack(d)}});var wa,xa={HTML:"block",BODY:"block"};function ya(a,b){var c=n(b.createElement(a)).appendTo(b.body),d=n.css(c[0],"display");return c.detach(),d}function za(a){var b=d,c=xa[a];return c||(c=ya(a,b),"none"!==c&&c||(wa=(wa||n("