@vue-skuilder/courseware 0.1.33 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/dist/CourseWare-BTFRjgBR.js +305 -0
  2. package/dist/CourseWare-BTFRjgBR.js.map +1 -0
  3. package/dist/CourseWare-DSeyTAtH.cjs +2 -0
  4. package/dist/CourseWare-DSeyTAtH.cjs.map +1 -0
  5. package/dist/assets/CourseWare.css +1 -0
  6. package/dist/assets/chess.css +1 -0
  7. package/dist/assets/index.css +1 -1
  8. package/dist/assets/math.css +1 -0
  9. package/dist/assets/piano.css +1 -0
  10. package/dist/assets/sightsing.css +1 -0
  11. package/dist/assets/typing.css +1 -0
  12. package/dist/backend.cjs.js +1 -1
  13. package/dist/backend.cjs.js.map +1 -1
  14. package/dist/backend.mjs +4 -3
  15. package/dist/backend.mjs.map +1 -1
  16. package/dist/chess/components/ChessBoard.vue.d.ts.map +1 -1
  17. package/dist/chess/composables/useChessgroundBounds.d.ts +24 -0
  18. package/dist/chess/composables/useChessgroundBounds.d.ts.map +1 -0
  19. package/dist/chess/questions/puzzle/puzzle.vue.d.ts.map +1 -1
  20. package/dist/chess-BbHATAzk.js +2949 -0
  21. package/dist/chess-BbHATAzk.js.map +1 -0
  22. package/dist/chess-BsgVZARV.cjs +7 -0
  23. package/dist/chess-BsgVZARV.cjs.map +1 -0
  24. package/dist/chess-C_2RQEuq.cjs +1 -0
  25. package/dist/chess-X1bmWmh3.js +3 -0
  26. package/dist/french-Bxet7hJm.cjs +2 -0
  27. package/dist/french-Bxet7hJm.cjs.map +1 -0
  28. package/dist/french-Dk7YG8Td.js +140 -0
  29. package/dist/french-Dk7YG8Td.js.map +1 -0
  30. package/dist/french-evUMlbbq.js +3 -0
  31. package/dist/french-x9P8RRn8.cjs +1 -0
  32. package/dist/index.cjs.js +2 -170
  33. package/dist/index.cjs.js.map +1 -1
  34. package/dist/index.d.ts +23 -0
  35. package/dist/index.d.ts.map +1 -1
  36. package/dist/index.mjs +172 -62021
  37. package/dist/index.mjs.map +1 -1
  38. package/dist/math-B1oDAkOy.cjs +34 -0
  39. package/dist/math-B1oDAkOy.cjs.map +1 -0
  40. package/dist/math-B4HbgYf6.js +13391 -0
  41. package/dist/math-B4HbgYf6.js.map +1 -0
  42. package/dist/math-BWlIa6-l.cjs +1 -0
  43. package/dist/math-DYni7rRl.js +3 -0
  44. package/dist/piano-BN5Btq91.js +3 -0
  45. package/dist/piano-Btvkzjfz.cjs +1 -0
  46. package/dist/piano-CefQUc72.cjs +2 -0
  47. package/dist/piano-CefQUc72.cjs.map +1 -0
  48. package/dist/piano-DF1g6yaX.js +3603 -0
  49. package/dist/piano-DF1g6yaX.js.map +1 -0
  50. package/dist/pitch-C-lh9ezH.cjs +2 -0
  51. package/dist/pitch-C-lh9ezH.cjs.map +1 -0
  52. package/dist/pitch-CgGJFkZ1.js +106 -0
  53. package/dist/pitch-CgGJFkZ1.js.map +1 -0
  54. package/dist/pitch-Dn0iNqiS.js +3 -0
  55. package/dist/pitch-DsopN5IR.cjs +1 -0
  56. package/dist/{shapes-nszfsx3o.js → shapes-BQUVJdp5.js} +3 -21
  57. package/dist/shapes-BQUVJdp5.js.map +1 -0
  58. package/dist/shapes-C_-mvrCc.cjs +2 -0
  59. package/dist/shapes-C_-mvrCc.cjs.map +1 -0
  60. package/dist/shapes-DRq8J94A.cjs +2 -0
  61. package/dist/shapes-DRq8J94A.cjs.map +1 -0
  62. package/dist/shapes-ICeg46lr.js +25 -0
  63. package/dist/shapes-ICeg46lr.js.map +1 -0
  64. package/dist/sightsing-BFQ7HRig.js +41061 -0
  65. package/dist/sightsing-BFQ7HRig.js.map +1 -0
  66. package/dist/sightsing-CJX3k0Fd.js +3 -0
  67. package/dist/sightsing-Cr_SJ5Vc.cjs +133 -0
  68. package/dist/sightsing-Cr_SJ5Vc.cjs.map +1 -0
  69. package/dist/sightsing-CtagQ0FJ.cjs +1 -0
  70. package/dist/typing-BevtfWlp.js +184 -0
  71. package/dist/typing-BevtfWlp.js.map +1 -0
  72. package/dist/typing-CBPjtwrg.cjs +1 -0
  73. package/dist/typing-CK-glKhm.cjs +2 -0
  74. package/dist/typing-CK-glKhm.cjs.map +1 -0
  75. package/dist/typing-k-ojjO7G.js +3 -0
  76. package/dist/word-work-BOnRlZgd.js +108 -0
  77. package/dist/word-work-BOnRlZgd.js.map +1 -0
  78. package/dist/word-work-C5MTSapy.cjs +1 -0
  79. package/dist/word-work-Dd6tIKrt.js +3 -0
  80. package/dist/word-work-fNbCLNuN.cjs +2 -0
  81. package/dist/word-work-fNbCLNuN.cjs.map +1 -0
  82. package/package.json +6 -5
  83. package/dist/shapes-DJ-ujuDr.cjs +0 -2
  84. package/dist/shapes-DJ-ujuDr.cjs.map +0 -1
  85. package/dist/shapes-nszfsx3o.js.map +0 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math-B4HbgYf6.js","names":["exports","exports","module"],"sources":["../src/math/questions/addition/horizontal.vue","../src/math/questions/addition/horizontal.vue","../src/math/questions/addition/verbal.vue","../src/math/questions/addition/verbal.vue","../src/math/questions/addition/index.ts","../src/math/questions/division/horizontal.vue","../src/math/questions/division/horizontal.vue","../src/math/questions/division/index.ts","../src/math/questions/multiplication/blorizontal.vue","../src/math/questions/multiplication/blorizontal.vue","../src/math/questions/multiplication/verbal.vue","../src/math/questions/multiplication/verbal.vue","../src/math/questions/multiplication/index.ts","../src/math/questions/equalityTest/trueFalse.vue","../src/math/questions/equalityTest/trueFalse.vue","../src/math/questions/equalityTest/index.ts","../src/math/questions/oneStepEqn/solve.vue","../src/math/questions/oneStepEqn/solve.vue","../src/math/questions/oneStepEqn/index.ts","../src/math/questions/angleCategorize/angleCategorize.vue","../src/math/questions/angleCategorize/angleCategorize.vue","../src/math/questions/angleCategorize/index.ts","../__vite-browser-external","../../../node_modules/acorn/dist/acorn.js","../../../node_modules/paper/dist/paper-full.js","../src/math/questions/supplementaryAngles/supplementaryAngles.vue","../src/math/questions/supplementaryAngles/supplementaryAngles.vue","../src/math/questions/supplementaryAngles/index.ts","../src/math/questions/countBy/default.vue","../src/math/questions/countBy/default.vue","../src/math/questions/countBy/index.ts","../src/math/index.ts"],"sourcesContent":["<template>\n <div data-viewable=\"AdditionHorizontal\">\n <template v-if=\"question\">\n {{ question.a }} + {{ question.b }} =\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitAdditionQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'AdditionHorizontal',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'AdditionHorizontal');\n const questionUtils = useQuestionView<SingleDigitAdditionQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitAdditionQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question, // expose the computed question directly\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"AdditionHorizontal\">\n <template v-if=\"question\">\n {{ question.a }} + {{ question.b }} =\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitAdditionQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'AdditionHorizontal',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'AdditionHorizontal');\n const questionUtils = useQuestionView<SingleDigitAdditionQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitAdditionQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question, // expose the computed question directly\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"VerbalAddition\">\n <template v-if=\"question\">\n {{ question.a }} plus {{ question.b }} is\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitAdditionQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'VerbalAddition',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'VerbalAddition');\n const questionUtils = useQuestionView<SingleDigitAdditionQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitAdditionQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"VerbalAddition\">\n <template v-if=\"question\">\n {{ question.a }} plus {{ question.b }} is\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitAdditionQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'VerbalAddition',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'VerbalAddition');\n const questionUtils = useQuestionView<SingleDigitAdditionQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitAdditionQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","import { Question, ViewComponent } from '@vue-skuilder/common-ui';\nimport { Answer, ViewData } from '@vue-skuilder/common';\nimport HorizontalAddition from './horizontal.vue';\nimport VerbalAddition from './verbal.vue';\nimport { SingleDigitAdditionDataShape } from './shapes.js';\n\nconst data = function () {\n const ret: { a: number; b: number }[] = [];\n for (let i = 0; i < 10; i++) {\n for (let j = 0; j < 10; j++) {\n ret.push({\n a: i,\n b: j,\n });\n }\n }\n return ret;\n};\n\nexport class SingleDigitAdditionQuestion extends Question {\n public static dataShapes = [SingleDigitAdditionDataShape];\n\n public static views: ViewComponent[] = [HorizontalAddition, VerbalAddition];\n\n public a: number;\n public b: number;\n\n public static seedData = data();\n public static acceptsUserData = false;\n\n constructor(data: ViewData[]) {\n super(data);\n this.a = data[0].a as number;\n this.b = data[0].b as number;\n }\n\n public isCorrect(answer: Answer) {\n return 1 * this.a + this.b === answer;\n }\n\n public dataShapes() {\n return SingleDigitAdditionQuestion.dataShapes;\n }\n\n public views() {\n return SingleDigitAdditionQuestion.views;\n }\n}\n","<template>\n <div data-viewable=\"DivisionHorizontal\">\n <template v-if=\"question\">\n {{ question.a * question.b }} &divide; {{ question.b }} =\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitDivisionQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'DivisionHorizontal',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'DivisionHorizontal');\n const questionUtils = useQuestionView<SingleDigitDivisionQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitDivisionQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"DivisionHorizontal\">\n <template v-if=\"question\">\n {{ question.a * question.b }} &divide; {{ question.b }} =\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitDivisionQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'DivisionHorizontal',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'DivisionHorizontal');\n const questionUtils = useQuestionView<SingleDigitDivisionQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitDivisionQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","import { Question } from '@vue-skuilder/common-ui';\nimport {\n FieldDefinition,\n Answer,\n ViewData,\n DataShapeName,\n FieldType,\n Status,\n} from '@vue-skuilder/common';\nimport HorizontalDivision from './horizontal.vue';\n\nconst fields: FieldDefinition[] = [\n {\n name: 'a',\n type: FieldType.INT,\n },\n {\n name: 'b',\n type: FieldType.INT,\n validator: {\n instructions: 'An integer between 1 and 10, inclusive.',\n test: (value: string) => {\n const input = parseInt(value, 10);\n if (0 < input && input < 11) {\n return {\n status: Status.ok,\n msg: '',\n };\n } else if (input === 0) {\n return {\n status: Status.error,\n msg: 'Thou shalt not divide by zero.',\n };\n } else {\n return {\n status: Status.error,\n msg: 'Single digit division problem divisors must be between 1 and 10, inclusive.',\n };\n }\n },\n },\n },\n];\n\nexport class SingleDigitDivisionQuestion extends Question {\n public static dataShapes = [\n {\n name: DataShapeName.MATH_SingleDigitDivision,\n fields,\n },\n ];\n\n public static views = [HorizontalDivision];\n\n public a: number;\n public b: number;\n\n /**\n * @param data a and b are seed props that will pop a question of\n * the form [(a*b) / b = ___]. So, b must be non-zero.\n */\n constructor(data: ViewData[]) {\n super(data);\n this.a = data[0].a as number;\n this.b = data[0].b as number;\n }\n\n public isCorrect(answer: Answer) {\n return this.a * this.b === answer;\n }\n\n public dataShapes() {\n return SingleDigitDivisionQuestion.dataShapes;\n }\n\n public views() {\n return SingleDigitDivisionQuestion.views;\n }\n}\n","<template>\n <div data-viewable=\"MultiplicationHorizontal\">\n <template v-if=\"question\">\n {{ question.a }} &times; {{ question.b }} =\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitMultiplicationQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'MultiplicationHorizontal',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'MultiplicationHorizontal');\n const questionUtils = useQuestionView<SingleDigitMultiplicationQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitMultiplicationQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"MultiplicationHorizontal\">\n <template v-if=\"question\">\n {{ question.a }} &times; {{ question.b }} =\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitMultiplicationQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'MultiplicationHorizontal',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'MultiplicationHorizontal');\n const questionUtils = useQuestionView<SingleDigitMultiplicationQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitMultiplicationQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"VerbalMultiplication\">\n <template v-if=\"question\">\n {{ question.a }} times {{ question.b }} is\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitMultiplicationQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'VerbalMultiplication',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'VerbalMultiplication');\n const questionUtils = useQuestionView<SingleDigitMultiplicationQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitMultiplicationQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"VerbalMultiplication\">\n <template v-if=\"question\">\n {{ question.a }} times {{ question.b }} is\n <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { SingleDigitMultiplicationQuestion } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'VerbalMultiplication',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'VerbalMultiplication');\n const questionUtils = useQuestionView<SingleDigitMultiplicationQuestion>(viewableUtils);\n\n const answer = ref('');\n\n // Initialize question immediately\n questionUtils.question.value = new SingleDigitMultiplicationQuestion(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n submit,\n };\n },\n});\n</script>\n","import { Question } from '@vue-skuilder/common-ui';\nimport {\n FieldDefinition,\n Answer,\n ViewData,\n DataShapeName,\n FieldType,\n Status,\n} from '@vue-skuilder/common';\nimport MultiplicationHorizontal from './blorizontal.vue';\nimport VerbalMultiplication from './verbal.vue';\n\nconst validator = {\n instructions: 'An integer between 0 and 10, inclusive.',\n test: (value: string) => {\n const input = parseInt(value, 10);\n if (0 <= input && input <= 10) {\n return {\n status: Status.ok,\n msg: '',\n };\n } else {\n return {\n status: Status.error,\n msg: 'Single digit multiplication problem inputs must be between 0 and 10, inclusive.',\n };\n }\n },\n};\n\nconst fields: FieldDefinition[] = [\n {\n name: 'a',\n type: FieldType.INT,\n validator,\n },\n {\n name: 'b',\n type: FieldType.INT,\n validator,\n },\n];\n\nexport class SingleDigitMultiplicationQuestion extends Question {\n public static dataShapes = [\n {\n name: DataShapeName.MATH_SingleDigitMultiplication,\n fields,\n },\n ];\n\n public static views = [VerbalMultiplication, MultiplicationHorizontal];\n\n public a: number;\n public b: number;\n\n constructor(data: ViewData[]) {\n super(data);\n this.a = data[0].a as number;\n this.b = data[0].b as number;\n }\n\n public isCorrect(answer: Answer) {\n return this.a * this.b === answer;\n }\n\n public dataShapes() {\n return SingleDigitMultiplicationQuestion.dataShapes;\n }\n\n public views() {\n return SingleDigitMultiplicationQuestion.views;\n }\n}\n","<template>\n <div data-viewable=\"TrueFalse\">\n {{ question.a }} &equals; {{ question.b }}\n\n <TFSelect :submit=\"submit\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, PropType } from 'vue';\nimport { TFSelect, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { EqualityTest } from './index';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'TrueFalse',\n\n components: {\n TFSelect,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'TrueFalse');\n const questionUtils = useQuestionView<EqualityTest>(viewableUtils);\n\n // Initialize question\n questionUtils.question.value = new EqualityTest(props.data);\n\n const question = computed(() => new EqualityTest(props.data));\n\n const submit = (selection: number) => {\n alert(question.value.isCorrect(selection === 0));\n };\n\n return {\n question,\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"TrueFalse\">\n {{ question.a }} &equals; {{ question.b }}\n\n <TFSelect :submit=\"submit\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, computed, PropType } from 'vue';\nimport { TFSelect, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { EqualityTest } from './index';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'TrueFalse',\n\n components: {\n TFSelect,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'TrueFalse');\n const questionUtils = useQuestionView<EqualityTest>(viewableUtils);\n\n // Initialize question\n questionUtils.question.value = new EqualityTest(props.data);\n\n const question = computed(() => new EqualityTest(props.data));\n\n const submit = (selection: number) => {\n alert(question.value.isCorrect(selection === 0));\n };\n\n return {\n question,\n submit,\n };\n },\n});\n</script>\n","import { Question } from '@vue-skuilder/common-ui';\nimport { Answer, ViewData } from '@vue-skuilder/common';\nimport TrueFalse from './trueFalse.vue';\nimport { EqualityTestDataShape } from './shapes.js';\n\nexport class EqualityTest extends Question {\n public static dataShapes = [EqualityTestDataShape];\n\n public static views = [TrueFalse];\n\n public a: string; // vueComponent / \"MathJax expression\" or something\n public b: string;\n\n /**\n * @param data a and b are seed props that will pop a question of\n * the form [(a*b) / b = ___]. So, b must be non-zero.\n */\n constructor(data: ViewData[]) {\n super(data);\n this.a = data[0].a as string;\n this.b = data[0].b as string;\n }\n\n public isCorrect(answer: Answer) {\n return (this.a === this.b) === answer;\n }\n\n public dataShapes() {\n return EqualityTest.dataShapes;\n }\n\n public views() {\n return EqualityTest.views;\n }\n}\n","<template>\n <div data-viewable=\"Solve\">\n <template v-if=\"question\">\n <h4>Solve the Equation</h4>\n <br /><br />\n <div v-if=\"question.operation.valueOf() === 'ADDITION'\">{{ variable }} - {{ question.a }} = {{ question.b }}</div>\n <div v-else-if=\"question.operation.valueOf() === 'SUBTRACTION'\">\n {{ variable }} + {{ question.a }} = {{ question.b }}\n </div>\n <div v-else-if=\"question.operation.valueOf() === 'MULTIPLICATION'\">\n {{ variable }} &#247; {{ question.a }} = {{ question.b }}\n </div>\n <div v-else-if=\"question.operation.valueOf() === 'DIVISION'\">\n {{ variable }} * {{ question.a }} = {{ question.b * question.a }}\n </div>\n <div v-else>No operation!? (This should never show)</div>\n\n <br /><br />\n\n {{ variable }} = <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { OneStepEquation } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\nimport { randomInt } from '../../utility';\n\nexport default defineComponent({\n name: 'SolveView',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'Solve');\n const questionUtils = useQuestionView<OneStepEquation>(viewableUtils);\n\n const answer = ref('');\n const vars = ['a', 'b', 'd', 'A', 'z', 'B', 'd', 'y'];\n const variable = ref(vars[randomInt(0, vars.length)]);\n\n // Initialize question immediately\n questionUtils.question.value = new OneStepEquation(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n variable,\n submit,\n };\n },\n});\n</script>\n","<template>\n <div data-viewable=\"Solve\">\n <template v-if=\"question\">\n <h4>Solve the Equation</h4>\n <br /><br />\n <div v-if=\"question.operation.valueOf() === 'ADDITION'\">{{ variable }} - {{ question.a }} = {{ question.b }}</div>\n <div v-else-if=\"question.operation.valueOf() === 'SUBTRACTION'\">\n {{ variable }} + {{ question.a }} = {{ question.b }}\n </div>\n <div v-else-if=\"question.operation.valueOf() === 'MULTIPLICATION'\">\n {{ variable }} &#247; {{ question.a }} = {{ question.b }}\n </div>\n <div v-else-if=\"question.operation.valueOf() === 'DIVISION'\">\n {{ variable }} * {{ question.a }} = {{ question.b * question.a }}\n </div>\n <div v-else>No operation!? (This should never show)</div>\n\n <br /><br />\n\n {{ variable }} = <UserInputNumber v-model=\"answer\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType } from 'vue';\nimport { OneStepEquation } from './index';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\nimport { randomInt } from '../../utility';\n\nexport default defineComponent({\n name: 'SolveView',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'Solve');\n const questionUtils = useQuestionView<OneStepEquation>(viewableUtils);\n\n const answer = ref('');\n const vars = ['a', 'b', 'd', 'A', 'z', 'B', 'd', 'y'];\n const variable = ref(vars[randomInt(0, vars.length)]);\n\n // Initialize question immediately\n questionUtils.question.value = new OneStepEquation(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const submit = () => {\n if (question.value) {\n const isCorrect = question.value.isCorrect(parseInt(answer.value, 10));\n alert(isCorrect);\n }\n };\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n variable,\n submit,\n };\n },\n});\n</script>\n","import { Question } from '@vue-skuilder/common-ui';\nimport {\n ViewData,\n DataShapeName,\n FieldType,\n Status,\n Validator,\n FieldDefinition,\n Answer,\n} from '@vue-skuilder/common';\nimport Solve from './solve.vue';\nimport { log } from '@vue-skuilder/common';\n\nconst validator = {\n instructions: 'An integer between 0 and 10, inclusive.',\n test: (value: string) => {\n const input = parseInt(value, 10);\n if (0 <= input && input <= 100) {\n return {\n status: Status.ok,\n msg: '',\n };\n } else {\n return {\n status: Status.error,\n msg: 'Single-step equation problem inputs must be between 0 and 100, inclusive.',\n };\n }\n },\n};\n\nconst operationValidator: Validator = {\n test: (val: string) => {\n if (\n val === Operation.ADDITION ||\n val === Operation.SUBTRACTION ||\n val === Operation.MULTIPLICATION ||\n val === Operation.DIVISION\n ) {\n return {\n status: Status.ok,\n msg: '',\n };\n } else {\n return {\n status: Status.error,\n msg: `Operation must be ADDITION, SUBTRACTION, MULTIPLICATION, or DIVISION`,\n };\n }\n },\n};\n\nconst fields: FieldDefinition[] = [\n {\n name: 'a',\n type: FieldType.INT,\n validator,\n },\n {\n name: 'b',\n type: FieldType.INT,\n validator,\n },\n {\n name: 'operation',\n type: FieldType.STRING,\n validator: operationValidator,\n },\n];\n\nenum Operation {\n ADDITION = 'ADDITION',\n SUBTRACTION = 'SUBTRACTION',\n MULTIPLICATION = 'MULTIPLICATION',\n DIVISION = 'DIVISION',\n}\n\nexport class OneStepEquation extends Question {\n public static dataShapes = [\n {\n name: DataShapeName.MATH_OneStepEquation,\n fields,\n },\n ];\n\n public static views = [Solve];\n\n public a: number;\n public b: number;\n public operation: Operation;\n\n constructor(data: ViewData[]) {\n super(data);\n this.a = data[0].a as number;\n this.b = data[0].b as number;\n this.operation = data[0].operation as Operation;\n }\n\n public answer(): number {\n let answer: number = 0;\n\n if (this.operation === Operation.ADDITION) {\n // x - a = b\n answer = this.a + this.b;\n } else if (this.operation === Operation.SUBTRACTION) {\n // x + a = b\n answer = this.b - this.a;\n } else if (this.operation === Operation.MULTIPLICATION) {\n // x / a = b\n answer = this.a * this.b;\n } else if (this.operation === Operation.DIVISION) {\n // ax = ab\n answer = this.b;\n }\n\n log(\n `The answer is ${answer}\nThe operation is ${this.operation.valueOf()}\nthis.a = ${this.a}\nthis.b = ${this.b}\n`\n );\n return answer;\n }\n\n public isCorrect(userAnswer: Answer) {\n return userAnswer === this.answer();\n }\n\n public dataShapes() {\n return OneStepEquation.dataShapes;\n }\n\n public views() {\n return OneStepEquation.views;\n }\n}\n","<template>\n <div data-viewable=\"AngleCategorizeV\">\n <template v-if=\"question\">\n <h2>What kind of angle is this?</h2>\n <canvas ref=\"canvasRef\" width=\"300\" height=\"300\"> </canvas>\n\n <radio-multiple-choice :choice-list=\"question.answers\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, PropType } from 'vue';\nimport { RadioMultipleChoice, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { AngleCategorize, AngleCategories } from './index';\nimport { ViewData } from '@vue-skuilder/common';\nimport { randomInt } from '../../utility';\n\nexport default defineComponent({\n name: 'AngleCategorizeV',\n\n components: {\n RadioMultipleChoice,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'AngleCategorizeV');\n const questionUtils = useQuestionView<AngleCategorize>(viewableUtils);\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n\n // Initialize question immediately\n questionUtils.question.value = new AngleCategorize(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const angle = computed(() => {\n if (!question.value) return 0;\n\n const category = question.value.angleCategory;\n if (category === AngleCategories.ACUTE) {\n return randomInt(10, 83);\n } else if (category === AngleCategories.RIGHT) {\n return 90;\n } else if (category === AngleCategories.OBTUSE) {\n return randomInt(97, 173);\n } else if (category === AngleCategories.STRAIGHT) {\n return 180;\n } else if (category === AngleCategories.REFLEX) {\n return randomInt(190, 350);\n } else {\n throw new Error('Unknown Angle type on AngleCategorize question');\n }\n });\n\n onMounted(() => {\n if (!canvasRef.value) return;\n\n const width = canvasRef.value.width;\n const height = canvasRef.value.height;\n const ctx = canvasRef.value.getContext('2d');\n if (!ctx) return;\n\n const baseArm = randomInt(0, 360);\n const otherArm = baseArm + angle.value;\n\n ctx.moveTo(width / 2, height / 2);\n const x = width / 2 + width * Math.cos((baseArm / 360) * 2 * Math.PI);\n const y = height / 2 + width * Math.sin((baseArm / 360) * 2 * Math.PI);\n ctx.lineTo(x, y);\n ctx.stroke();\n\n ctx.moveTo(width / 2, height / 2);\n const x2 = width / 2 + width * Math.cos((otherArm / 360) * 2 * Math.PI);\n const y2 = height / 2 + width * Math.sin((otherArm / 360) * 2 * Math.PI);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.moveTo(width / 2, height / 2);\n ctx.beginPath();\n ctx.arc(width / 2, height / 2, 25, (baseArm / 360) * 2 * Math.PI, (otherArm / 360) * 2 * Math.PI);\n ctx.stroke();\n });\n\n return {\n ...viewableUtils,\n ...questionUtils,\n canvasRef,\n question,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped>\n#canvas {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n</style>\n","<template>\n <div data-viewable=\"AngleCategorizeV\">\n <template v-if=\"question\">\n <h2>What kind of angle is this?</h2>\n <canvas ref=\"canvasRef\" width=\"300\" height=\"300\"> </canvas>\n\n <radio-multiple-choice :choice-list=\"question.answers\" />\n </template>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, onMounted, PropType } from 'vue';\nimport { RadioMultipleChoice, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { AngleCategorize, AngleCategories } from './index';\nimport { ViewData } from '@vue-skuilder/common';\nimport { randomInt } from '../../utility';\n\nexport default defineComponent({\n name: 'AngleCategorizeV',\n\n components: {\n RadioMultipleChoice,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'AngleCategorizeV');\n const questionUtils = useQuestionView<AngleCategorize>(viewableUtils);\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n\n // Initialize question immediately\n questionUtils.question.value = new AngleCategorize(props.data);\n\n // Expose the question directly for template access\n const question = computed(() => questionUtils.question.value);\n\n const angle = computed(() => {\n if (!question.value) return 0;\n\n const category = question.value.angleCategory;\n if (category === AngleCategories.ACUTE) {\n return randomInt(10, 83);\n } else if (category === AngleCategories.RIGHT) {\n return 90;\n } else if (category === AngleCategories.OBTUSE) {\n return randomInt(97, 173);\n } else if (category === AngleCategories.STRAIGHT) {\n return 180;\n } else if (category === AngleCategories.REFLEX) {\n return randomInt(190, 350);\n } else {\n throw new Error('Unknown Angle type on AngleCategorize question');\n }\n });\n\n onMounted(() => {\n if (!canvasRef.value) return;\n\n const width = canvasRef.value.width;\n const height = canvasRef.value.height;\n const ctx = canvasRef.value.getContext('2d');\n if (!ctx) return;\n\n const baseArm = randomInt(0, 360);\n const otherArm = baseArm + angle.value;\n\n ctx.moveTo(width / 2, height / 2);\n const x = width / 2 + width * Math.cos((baseArm / 360) * 2 * Math.PI);\n const y = height / 2 + width * Math.sin((baseArm / 360) * 2 * Math.PI);\n ctx.lineTo(x, y);\n ctx.stroke();\n\n ctx.moveTo(width / 2, height / 2);\n const x2 = width / 2 + width * Math.cos((otherArm / 360) * 2 * Math.PI);\n const y2 = height / 2 + width * Math.sin((otherArm / 360) * 2 * Math.PI);\n ctx.lineTo(x2, y2);\n ctx.stroke();\n\n ctx.moveTo(width / 2, height / 2);\n ctx.beginPath();\n ctx.arc(width / 2, height / 2, 25, (baseArm / 360) * 2 * Math.PI, (otherArm / 360) * 2 * Math.PI);\n ctx.stroke();\n });\n\n return {\n ...viewableUtils,\n ...questionUtils,\n canvasRef,\n question,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped>\n#canvas {\n display: block;\n margin-left: auto;\n margin-right: auto;\n}\n</style>\n","import { Question } from '@vue-skuilder/common-ui';\nimport { RadioMultipleChoiceAnswer, FieldDefinition } from '@vue-skuilder/common';\nimport { ViewData, DataShapeName, FieldType, Status } from '@vue-skuilder/common';\nimport { shuffle } from '../../utility';\nimport AngleCategorizeV from './angleCategorize.vue';\n\nconst validator = {\n instructions: 'Must be \"ACUTE\", \"RIGHT\", \"OBTUSE\", \"STRAIGHT\", or \"REFLEX\".',\n test: (value: string) => {\n if (\n value === AngleCategories.ACUTE ||\n value === AngleCategories.OBTUSE ||\n value === AngleCategories.REFLEX ||\n value === AngleCategories.RIGHT ||\n value === AngleCategories.STRAIGHT\n ) {\n return {\n status: Status.ok,\n msg: '',\n };\n } else {\n return {\n status: Status.error,\n msg: 'Must be \"ACUTE\", \"RIGHT\", \"OBTUSE\", \"STRAIGHT\", or \"REFLEX\".',\n };\n }\n },\n};\n\nexport enum AngleCategories {\n ACUTE = 'ACUTE',\n RIGHT = 'RIGHT',\n OBTUSE = 'OBTUSE',\n STRAIGHT = 'STRAIGHT',\n REFLEX = 'REFLEX',\n}\n\nconst fields: FieldDefinition[] = [\n {\n name: 'Category',\n type: FieldType.STRING,\n validator,\n },\n];\n\nexport class AngleCategorize extends Question {\n public static dataShapes = [\n {\n name: DataShapeName.MATH_AngleCategorize,\n fields,\n },\n ];\n\n public static views = [AngleCategorizeV];\n\n public angleCategory: AngleCategories;\n public answers: string[];\n\n constructor(data: ViewData[]) {\n super(data);\n this.angleCategory = data[0].Category as AngleCategories;\n this.answers = shuffle([\n AngleCategories.ACUTE,\n AngleCategories.OBTUSE,\n AngleCategories.REFLEX,\n AngleCategories.RIGHT,\n AngleCategories.STRAIGHT,\n ]);\n }\n\n public isCorrect(answer: RadioMultipleChoiceAnswer) {\n return this.angleCategory.valueOf() === answer.choiceList[answer.selection];\n }\n\n public dataShapes() {\n return AngleCategorize.dataShapes;\n }\n\n public views() {\n return AngleCategorize.views;\n }\n}\n","module.exports = {}","(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.acorn = {}));\n})(this, (function (exports) { 'use strict';\n\n // This file was generated. Do not modify manually!\n var astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 7, 9, 32, 4, 318, 1, 80, 3, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 68, 8, 2, 0, 3, 0, 2, 3, 2, 4, 2, 0, 15, 1, 83, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 7, 19, 58, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 343, 9, 54, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 10, 5350, 0, 7, 14, 11465, 27, 2343, 9, 87, 9, 39, 4, 60, 6, 26, 9, 535, 9, 470, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4178, 9, 519, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 245, 1, 2, 9, 726, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];\n\n // This file was generated. Do not modify manually!\n var astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 4, 51, 13, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 39, 27, 10, 22, 251, 41, 7, 1, 17, 2, 60, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 31, 9, 2, 0, 3, 0, 2, 37, 2, 0, 26, 0, 2, 0, 45, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 200, 32, 32, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 26, 3994, 6, 582, 6842, 29, 1763, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 433, 44, 212, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 42, 9, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 229, 29, 3, 0, 496, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierChars = \"\\u200c\\u200d\\xb7\\u0300-\\u036f\\u0387\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u064b-\\u0669\\u0670\\u06d6-\\u06dc\\u06df-\\u06e4\\u06e7\\u06e8\\u06ea-\\u06ed\\u06f0-\\u06f9\\u0711\\u0730-\\u074a\\u07a6-\\u07b0\\u07c0-\\u07c9\\u07eb-\\u07f3\\u07fd\\u0816-\\u0819\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0859-\\u085b\\u0897-\\u089f\\u08ca-\\u08e1\\u08e3-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09cb-\\u09cd\\u09d7\\u09e2\\u09e3\\u09e6-\\u09ef\\u09fe\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2\\u0ae3\\u0ae6-\\u0aef\\u0afa-\\u0aff\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b55-\\u0b57\\u0b62\\u0b63\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c00-\\u0c04\\u0c3c\\u0c3e-\\u0c44\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62\\u0c63\\u0c66-\\u0c6f\\u0c81-\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2\\u0ce3\\u0ce6-\\u0cef\\u0cf3\\u0d00-\\u0d03\\u0d3b\\u0d3c\\u0d3e-\\u0d44\\u0d46-\\u0d48\\u0d4a-\\u0d4d\\u0d57\\u0d62\\u0d63\\u0d66-\\u0d6f\\u0d81-\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0de6-\\u0def\\u0df2\\u0df3\\u0e31\\u0e34-\\u0e3a\\u0e47-\\u0e4e\\u0e50-\\u0e59\\u0eb1\\u0eb4-\\u0ebc\\u0ec8-\\u0ece\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f3e\\u0f3f\\u0f71-\\u0f84\\u0f86\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u102b-\\u103e\\u1040-\\u1049\\u1056-\\u1059\\u105e-\\u1060\\u1062-\\u1064\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u1369-\\u1371\\u1712-\\u1715\\u1732-\\u1734\\u1752\\u1753\\u1772\\u1773\\u17b4-\\u17d3\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u180f-\\u1819\\u18a9\\u1920-\\u192b\\u1930-\\u193b\\u1946-\\u194f\\u19d0-\\u19da\\u1a17-\\u1a1b\\u1a55-\\u1a5e\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1ab0-\\u1abd\\u1abf-\\u1ace\\u1b00-\\u1b04\\u1b34-\\u1b44\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1b80-\\u1b82\\u1ba1-\\u1bad\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c24-\\u1c37\\u1c40-\\u1c49\\u1c50-\\u1c59\\u1cd0-\\u1cd2\\u1cd4-\\u1ce8\\u1ced\\u1cf4\\u1cf7-\\u1cf9\\u1dc0-\\u1dff\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2cef-\\u2cf1\\u2d7f\\u2de0-\\u2dff\\u302a-\\u302f\\u3099\\u309a\\u30fb\\ua620-\\ua629\\ua66f\\ua674-\\ua67d\\ua69e\\ua69f\\ua6f0\\ua6f1\\ua802\\ua806\\ua80b\\ua823-\\ua827\\ua82c\\ua880\\ua881\\ua8b4-\\ua8c5\\ua8d0-\\ua8d9\\ua8e0-\\ua8f1\\ua8ff-\\ua909\\ua926-\\ua92d\\ua947-\\ua953\\ua980-\\ua983\\ua9b3-\\ua9c0\\ua9d0-\\ua9d9\\ua9e5\\ua9f0-\\ua9f9\\uaa29-\\uaa36\\uaa43\\uaa4c\\uaa4d\\uaa50-\\uaa59\\uaa7b-\\uaa7d\\uaab0\\uaab2-\\uaab4\\uaab7\\uaab8\\uaabe\\uaabf\\uaac1\\uaaeb-\\uaaef\\uaaf5\\uaaf6\\uabe3-\\uabea\\uabec\\uabed\\uabf0-\\uabf9\\ufb1e\\ufe00-\\ufe0f\\ufe20-\\ufe2f\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\\uff65\";\n\n // This file was generated. Do not modify manually!\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u037f\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u052f\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05d0-\\u05ea\\u05ef-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086a\\u0870-\\u0887\\u0889-\\u088e\\u08a0-\\u08c9\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0980\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u09fc\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0af9\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c39\\u0c3d\\u0c58-\\u0c5a\\u0c5d\\u0c60\\u0c61\\u0c80\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cdd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d04-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d54-\\u0d56\\u0d5f-\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e86-\\u0e8a\\u0e8c-\\u0ea3\\u0ea5\\u0ea7-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f5\\u13f8-\\u13fd\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f8\\u1700-\\u1711\\u171f-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1878\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191e\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19b0-\\u19c9\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4c\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1c80-\\u1c8a\\u1c90-\\u1cba\\u1cbd-\\u1cbf\\u1ce9-\\u1cec\\u1cee-\\u1cf3\\u1cf5\\u1cf6\\u1cfa\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2118-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309b-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312f\\u3131-\\u318e\\u31a0-\\u31bf\\u31f0-\\u31ff\\u3400-\\u4dbf\\u4e00-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua69d\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua7cd\\ua7d0\\ua7d1\\ua7d3\\ua7d5-\\ua7dc\\ua7f2-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua8fd\\ua8fe\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\ua9e0-\\ua9e4\\ua9e6-\\ua9ef\\ua9fa-\\ua9fe\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa7e-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uab30-\\uab5a\\uab5c-\\uab69\\uab70-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n\n // These are a run-length and offset encoded representation of the\n // >0xffff code points that are a valid part of identifiers. The\n // offset starts at 0x10000, and each pair of numbers represents an\n // offset to the next range, and then a size of the range.\n\n // Reserved word lists for various dialects of the language\n\n var reservedWords = {\n 3: \"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\",\n 5: \"class enum extends super const export import\",\n 6: \"enum\",\n strict: \"implements interface let package private protected public static yield\",\n strictBind: \"eval arguments\"\n };\n\n // And the keywords\n\n var ecma5AndLessKeywords = \"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\";\n\n var keywords$1 = {\n 5: ecma5AndLessKeywords,\n \"5module\": ecma5AndLessKeywords + \" export import\",\n 6: ecma5AndLessKeywords + \" const class extends export import super\"\n };\n\n var keywordRelationalOperator = /^in(stanceof)?$/;\n\n // ## Character categories\n\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n // This has a complexity linear to the value of the code. The\n // assumption is that looking up astral identifier characters is\n // rare.\n function isInAstralSet(code, set) {\n var pos = 0x10000;\n for (var i = 0; i < set.length; i += 2) {\n pos += set[i];\n if (pos > code) { return false }\n pos += set[i + 1];\n if (pos >= code) { return true }\n }\n return false\n }\n\n // Test whether a given character code starts an identifier.\n\n function isIdentifierStart(code, astral) {\n if (code < 65) { return code === 36 }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes)\n }\n\n // Test whether a given character is part of an identifier.\n\n function isIdentifierChar(code, astral) {\n if (code < 48) { return code === 36 }\n if (code < 58) { return true }\n if (code < 65) { return false }\n if (code < 91) { return true }\n if (code < 97) { return code === 95 }\n if (code < 123) { return true }\n if (code <= 0xffff) { return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code)) }\n if (astral === false) { return false }\n return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes)\n }\n\n // ## Token types\n\n // The assignment of fine-grained, information-carrying type objects\n // allows the tokenizer to store the information it has about a\n // token in a way that is very cheap for the parser to look up.\n\n // All token type variables start with an underscore, to make them\n // easy to recognize.\n\n // The `beforeExpr` property is used to disambiguate between regular\n // expressions and divisions. It is set on all token types that can\n // be followed by an expression (thus, a slash after them would be a\n // regular expression).\n //\n // The `startsExpr` property is used to check if the token ends a\n // `yield` expression. It is set on all token types that either can\n // directly start an expression (like a quotation mark) or can\n // continue an expression (like the body of a string).\n //\n // `isLoop` marks a keyword as starting a loop, which is important\n // to know when parsing a label, in order to allow or disallow\n // continue jumps to that label.\n\n var TokenType = function TokenType(label, conf) {\n if ( conf === void 0 ) conf = {};\n\n this.label = label;\n this.keyword = conf.keyword;\n this.beforeExpr = !!conf.beforeExpr;\n this.startsExpr = !!conf.startsExpr;\n this.isLoop = !!conf.isLoop;\n this.isAssign = !!conf.isAssign;\n this.prefix = !!conf.prefix;\n this.postfix = !!conf.postfix;\n this.binop = conf.binop || null;\n this.updateContext = null;\n };\n\n function binop(name, prec) {\n return new TokenType(name, {beforeExpr: true, binop: prec})\n }\n var beforeExpr = {beforeExpr: true}, startsExpr = {startsExpr: true};\n\n // Map keyword names to token types.\n\n var keywords = {};\n\n // Succinct definitions of keyword token types\n function kw(name, options) {\n if ( options === void 0 ) options = {};\n\n options.keyword = name;\n return keywords[name] = new TokenType(name, options)\n }\n\n var types$1 = {\n num: new TokenType(\"num\", startsExpr),\n regexp: new TokenType(\"regexp\", startsExpr),\n string: new TokenType(\"string\", startsExpr),\n name: new TokenType(\"name\", startsExpr),\n privateId: new TokenType(\"privateId\", startsExpr),\n eof: new TokenType(\"eof\"),\n\n // Punctuation token types.\n bracketL: new TokenType(\"[\", {beforeExpr: true, startsExpr: true}),\n bracketR: new TokenType(\"]\"),\n braceL: new TokenType(\"{\", {beforeExpr: true, startsExpr: true}),\n braceR: new TokenType(\"}\"),\n parenL: new TokenType(\"(\", {beforeExpr: true, startsExpr: true}),\n parenR: new TokenType(\")\"),\n comma: new TokenType(\",\", beforeExpr),\n semi: new TokenType(\";\", beforeExpr),\n colon: new TokenType(\":\", beforeExpr),\n dot: new TokenType(\".\"),\n question: new TokenType(\"?\", beforeExpr),\n questionDot: new TokenType(\"?.\"),\n arrow: new TokenType(\"=>\", beforeExpr),\n template: new TokenType(\"template\"),\n invalidTemplate: new TokenType(\"invalidTemplate\"),\n ellipsis: new TokenType(\"...\", beforeExpr),\n backQuote: new TokenType(\"`\", startsExpr),\n dollarBraceL: new TokenType(\"${\", {beforeExpr: true, startsExpr: true}),\n\n // Operators. These carry several kinds of properties to help the\n // parser use them properly (the presence of these properties is\n // what categorizes them as operators).\n //\n // `binop`, when present, specifies that this operator is a binary\n // operator, and will refer to its precedence.\n //\n // `prefix` and `postfix` mark the operator as a prefix or postfix\n // unary operator.\n //\n // `isAssign` marks all of `=`, `+=`, `-=` etcetera, which act as\n // binary operators with a very low precedence, that should result\n // in AssignmentExpression nodes.\n\n eq: new TokenType(\"=\", {beforeExpr: true, isAssign: true}),\n assign: new TokenType(\"_=\", {beforeExpr: true, isAssign: true}),\n incDec: new TokenType(\"++/--\", {prefix: true, postfix: true, startsExpr: true}),\n prefix: new TokenType(\"!/~\", {beforeExpr: true, prefix: true, startsExpr: true}),\n logicalOR: binop(\"||\", 1),\n logicalAND: binop(\"&&\", 2),\n bitwiseOR: binop(\"|\", 3),\n bitwiseXOR: binop(\"^\", 4),\n bitwiseAND: binop(\"&\", 5),\n equality: binop(\"==/!=/===/!==\", 6),\n relational: binop(\"</>/<=/>=\", 7),\n bitShift: binop(\"<</>>/>>>\", 8),\n plusMin: new TokenType(\"+/-\", {beforeExpr: true, binop: 9, prefix: true, startsExpr: true}),\n modulo: binop(\"%\", 10),\n star: binop(\"*\", 10),\n slash: binop(\"/\", 10),\n starstar: new TokenType(\"**\", {beforeExpr: true}),\n coalesce: binop(\"??\", 1),\n\n // Keyword token types.\n _break: kw(\"break\"),\n _case: kw(\"case\", beforeExpr),\n _catch: kw(\"catch\"),\n _continue: kw(\"continue\"),\n _debugger: kw(\"debugger\"),\n _default: kw(\"default\", beforeExpr),\n _do: kw(\"do\", {isLoop: true, beforeExpr: true}),\n _else: kw(\"else\", beforeExpr),\n _finally: kw(\"finally\"),\n _for: kw(\"for\", {isLoop: true}),\n _function: kw(\"function\", startsExpr),\n _if: kw(\"if\"),\n _return: kw(\"return\", beforeExpr),\n _switch: kw(\"switch\"),\n _throw: kw(\"throw\", beforeExpr),\n _try: kw(\"try\"),\n _var: kw(\"var\"),\n _const: kw(\"const\"),\n _while: kw(\"while\", {isLoop: true}),\n _with: kw(\"with\"),\n _new: kw(\"new\", {beforeExpr: true, startsExpr: true}),\n _this: kw(\"this\", startsExpr),\n _super: kw(\"super\", startsExpr),\n _class: kw(\"class\", startsExpr),\n _extends: kw(\"extends\", beforeExpr),\n _export: kw(\"export\"),\n _import: kw(\"import\", startsExpr),\n _null: kw(\"null\", startsExpr),\n _true: kw(\"true\", startsExpr),\n _false: kw(\"false\", startsExpr),\n _in: kw(\"in\", {beforeExpr: true, binop: 7}),\n _instanceof: kw(\"instanceof\", {beforeExpr: true, binop: 7}),\n _typeof: kw(\"typeof\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _void: kw(\"void\", {beforeExpr: true, prefix: true, startsExpr: true}),\n _delete: kw(\"delete\", {beforeExpr: true, prefix: true, startsExpr: true})\n };\n\n // Matches a whole line break (where CRLF is considered a single\n // line break). Used to count lines.\n\n var lineBreak = /\\r\\n?|\\n|\\u2028|\\u2029/;\n var lineBreakG = new RegExp(lineBreak.source, \"g\");\n\n function isNewLine(code) {\n return code === 10 || code === 13 || code === 0x2028 || code === 0x2029\n }\n\n function nextLineBreak(code, from, end) {\n if ( end === void 0 ) end = code.length;\n\n for (var i = from; i < end; i++) {\n var next = code.charCodeAt(i);\n if (isNewLine(next))\n { return i < end - 1 && next === 13 && code.charCodeAt(i + 1) === 10 ? i + 2 : i + 1 }\n }\n return -1\n }\n\n var nonASCIIwhitespace = /[\\u1680\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n\n var skipWhiteSpace = /(?:\\s|\\/\\/.*|\\/\\*[^]*?\\*\\/)*/g;\n\n var ref = Object.prototype;\n var hasOwnProperty = ref.hasOwnProperty;\n var toString = ref.toString;\n\n var hasOwn = Object.hasOwn || (function (obj, propName) { return (\n hasOwnProperty.call(obj, propName)\n ); });\n\n var isArray = Array.isArray || (function (obj) { return (\n toString.call(obj) === \"[object Array]\"\n ); });\n\n var regexpCache = Object.create(null);\n\n function wordsRegexp(words) {\n return regexpCache[words] || (regexpCache[words] = new RegExp(\"^(?:\" + words.replace(/ /g, \"|\") + \")$\"))\n }\n\n function codePointToString(code) {\n // UTF-16 Decoding\n if (code <= 0xFFFF) { return String.fromCharCode(code) }\n code -= 0x10000;\n return String.fromCharCode((code >> 10) + 0xD800, (code & 1023) + 0xDC00)\n }\n\n var loneSurrogate = /(?:[\\uD800-\\uDBFF](?![\\uDC00-\\uDFFF])|(?:[^\\uD800-\\uDBFF]|^)[\\uDC00-\\uDFFF])/;\n\n // These are used when `options.locations` is on, for the\n // `startLoc` and `endLoc` properties.\n\n var Position = function Position(line, col) {\n this.line = line;\n this.column = col;\n };\n\n Position.prototype.offset = function offset (n) {\n return new Position(this.line, this.column + n)\n };\n\n var SourceLocation = function SourceLocation(p, start, end) {\n this.start = start;\n this.end = end;\n if (p.sourceFile !== null) { this.source = p.sourceFile; }\n };\n\n // The `getLineInfo` function is mostly useful when the\n // `locations` option is off (for performance reasons) and you\n // want to find the line/column position for a given character\n // offset. `input` should be the code string that the offset refers\n // into.\n\n function getLineInfo(input, offset) {\n for (var line = 1, cur = 0;;) {\n var nextBreak = nextLineBreak(input, cur, offset);\n if (nextBreak < 0) { return new Position(line, offset - cur) }\n ++line;\n cur = nextBreak;\n }\n }\n\n // A second argument must be given to configure the parser process.\n // These options are recognized (only `ecmaVersion` is required):\n\n var defaultOptions = {\n // `ecmaVersion` indicates the ECMAScript version to parse. Must be\n // either 3, 5, 6 (or 2015), 7 (2016), 8 (2017), 9 (2018), 10\n // (2019), 11 (2020), 12 (2021), 13 (2022), 14 (2023), or `\"latest\"`\n // (the latest version the library supports). This influences\n // support for strict mode, the set of reserved words, and support\n // for new syntax features.\n ecmaVersion: null,\n // `sourceType` indicates the mode the code should be parsed in.\n // Can be either `\"script\"` or `\"module\"`. This influences global\n // strict mode and parsing of `import` and `export` declarations.\n sourceType: \"script\",\n // `onInsertedSemicolon` can be a callback that will be called when\n // a semicolon is automatically inserted. It will be passed the\n // position of the inserted semicolon as an offset, and if\n // `locations` is enabled, it is given the location as a `{line,\n // column}` object as second argument.\n onInsertedSemicolon: null,\n // `onTrailingComma` is similar to `onInsertedSemicolon`, but for\n // trailing commas.\n onTrailingComma: null,\n // By default, reserved words are only enforced if ecmaVersion >= 5.\n // Set `allowReserved` to a boolean value to explicitly turn this on\n // an off. When this option has the value \"never\", reserved words\n // and keywords can also not be used as property names.\n allowReserved: null,\n // When enabled, a return at the top level is not considered an\n // error.\n allowReturnOutsideFunction: false,\n // When enabled, import/export statements are not constrained to\n // appearing at the top of the program, and an import.meta expression\n // in a script isn't considered an error.\n allowImportExportEverywhere: false,\n // By default, await identifiers are allowed to appear at the top-level scope only if ecmaVersion >= 2022.\n // When enabled, await identifiers are allowed to appear at the top-level scope,\n // but they are still not allowed in non-async functions.\n allowAwaitOutsideFunction: null,\n // When enabled, super identifiers are not constrained to\n // appearing in methods and do not raise an error when they appear elsewhere.\n allowSuperOutsideMethod: null,\n // When enabled, hashbang directive in the beginning of file is\n // allowed and treated as a line comment. Enabled by default when\n // `ecmaVersion` >= 2023.\n allowHashBang: false,\n // By default, the parser will verify that private properties are\n // only used in places where they are valid and have been declared.\n // Set this to false to turn such checks off.\n checkPrivateFields: true,\n // When `locations` is on, `loc` properties holding objects with\n // `start` and `end` properties in `{line, column}` form (with\n // line being 1-based and column 0-based) will be attached to the\n // nodes.\n locations: false,\n // A function can be passed as `onToken` option, which will\n // cause Acorn to call that function with object in the same\n // format as tokens returned from `tokenizer().getToken()`. Note\n // that you are not allowed to call the parser from the\n // callback—that will corrupt its internal state.\n onToken: null,\n // A function can be passed as `onComment` option, which will\n // cause Acorn to call that function with `(block, text, start,\n // end)` parameters whenever a comment is skipped. `block` is a\n // boolean indicating whether this is a block (`/* */`) comment,\n // `text` is the content of the comment, and `start` and `end` are\n // character offsets that denote the start and end of the comment.\n // When the `locations` option is on, two more parameters are\n // passed, the full `{line, column}` locations of the start and\n // end of the comments. Note that you are not allowed to call the\n // parser from the callback—that will corrupt its internal state.\n // When this option has an array as value, objects representing the\n // comments are pushed to it.\n onComment: null,\n // Nodes have their start and end characters offsets recorded in\n // `start` and `end` properties (directly on the node, rather than\n // the `loc` object, which holds line/column data. To also add a\n // [semi-standardized][range] `range` property holding a `[start,\n // end]` array with the same numbers, set the `ranges` option to\n // `true`.\n //\n // [range]: https://bugzilla.mozilla.org/show_bug.cgi?id=745678\n ranges: false,\n // It is possible to parse multiple files into a single AST by\n // passing the tree produced by parsing the first file as\n // `program` option in subsequent parses. This will add the\n // toplevel forms of the parsed file to the `Program` (top) node\n // of an existing parse tree.\n program: null,\n // When `locations` is on, you can pass this to record the source\n // file in every node's `loc` object.\n sourceFile: null,\n // This value, if given, is stored in every node, whether\n // `locations` is on or off.\n directSourceFile: null,\n // When enabled, parenthesized expressions are represented by\n // (non-standard) ParenthesizedExpression nodes\n preserveParens: false\n };\n\n // Interpret and default an options object\n\n var warnedAboutEcmaVersion = false;\n\n function getOptions(opts) {\n var options = {};\n\n for (var opt in defaultOptions)\n { options[opt] = opts && hasOwn(opts, opt) ? opts[opt] : defaultOptions[opt]; }\n\n if (options.ecmaVersion === \"latest\") {\n options.ecmaVersion = 1e8;\n } else if (options.ecmaVersion == null) {\n if (!warnedAboutEcmaVersion && typeof console === \"object\" && console.warn) {\n warnedAboutEcmaVersion = true;\n console.warn(\"Since Acorn 8.0.0, options.ecmaVersion is required.\\nDefaulting to 2020, but this will stop working in the future.\");\n }\n options.ecmaVersion = 11;\n } else if (options.ecmaVersion >= 2015) {\n options.ecmaVersion -= 2009;\n }\n\n if (options.allowReserved == null)\n { options.allowReserved = options.ecmaVersion < 5; }\n\n if (!opts || opts.allowHashBang == null)\n { options.allowHashBang = options.ecmaVersion >= 14; }\n\n if (isArray(options.onToken)) {\n var tokens = options.onToken;\n options.onToken = function (token) { return tokens.push(token); };\n }\n if (isArray(options.onComment))\n { options.onComment = pushComment(options, options.onComment); }\n\n return options\n }\n\n function pushComment(options, array) {\n return function(block, text, start, end, startLoc, endLoc) {\n var comment = {\n type: block ? \"Block\" : \"Line\",\n value: text,\n start: start,\n end: end\n };\n if (options.locations)\n { comment.loc = new SourceLocation(this, startLoc, endLoc); }\n if (options.ranges)\n { comment.range = [start, end]; }\n array.push(comment);\n }\n }\n\n // Each scope gets a bitset that may contain these flags\n var\n SCOPE_TOP = 1,\n SCOPE_FUNCTION = 2,\n SCOPE_ASYNC = 4,\n SCOPE_GENERATOR = 8,\n SCOPE_ARROW = 16,\n SCOPE_SIMPLE_CATCH = 32,\n SCOPE_SUPER = 64,\n SCOPE_DIRECT_SUPER = 128,\n SCOPE_CLASS_STATIC_BLOCK = 256,\n SCOPE_VAR = SCOPE_TOP | SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK;\n\n function functionFlags(async, generator) {\n return SCOPE_FUNCTION | (async ? SCOPE_ASYNC : 0) | (generator ? SCOPE_GENERATOR : 0)\n }\n\n // Used in checkLVal* and declareName to determine the type of a binding\n var\n BIND_NONE = 0, // Not a binding\n BIND_VAR = 1, // Var-style binding\n BIND_LEXICAL = 2, // Let- or const-style binding\n BIND_FUNCTION = 3, // Function declaration\n BIND_SIMPLE_CATCH = 4, // Simple (identifier pattern) catch binding\n BIND_OUTSIDE = 5; // Special case for function names as bound inside the function\n\n var Parser = function Parser(options, input, startPos) {\n this.options = options = getOptions(options);\n this.sourceFile = options.sourceFile;\n this.keywords = wordsRegexp(keywords$1[options.ecmaVersion >= 6 ? 6 : options.sourceType === \"module\" ? \"5module\" : 5]);\n var reserved = \"\";\n if (options.allowReserved !== true) {\n reserved = reservedWords[options.ecmaVersion >= 6 ? 6 : options.ecmaVersion === 5 ? 5 : 3];\n if (options.sourceType === \"module\") { reserved += \" await\"; }\n }\n this.reservedWords = wordsRegexp(reserved);\n var reservedStrict = (reserved ? reserved + \" \" : \"\") + reservedWords.strict;\n this.reservedWordsStrict = wordsRegexp(reservedStrict);\n this.reservedWordsStrictBind = wordsRegexp(reservedStrict + \" \" + reservedWords.strictBind);\n this.input = String(input);\n\n // Used to signal to callers of `readWord1` whether the word\n // contained any escape sequences. This is needed because words with\n // escape sequences must not be interpreted as keywords.\n this.containsEsc = false;\n\n // Set up token state\n\n // The current position of the tokenizer in the input.\n if (startPos) {\n this.pos = startPos;\n this.lineStart = this.input.lastIndexOf(\"\\n\", startPos - 1) + 1;\n this.curLine = this.input.slice(0, this.lineStart).split(lineBreak).length;\n } else {\n this.pos = this.lineStart = 0;\n this.curLine = 1;\n }\n\n // Properties of the current token:\n // Its type\n this.type = types$1.eof;\n // For tokens that include more information than their type, the value\n this.value = null;\n // Its start and end offset\n this.start = this.end = this.pos;\n // And, if locations are used, the {line, column} object\n // corresponding to those offsets\n this.startLoc = this.endLoc = this.curPosition();\n\n // Position information for the previous token\n this.lastTokEndLoc = this.lastTokStartLoc = null;\n this.lastTokStart = this.lastTokEnd = this.pos;\n\n // The context stack is used to superficially track syntactic\n // context to predict whether a regular expression is allowed in a\n // given position.\n this.context = this.initialContext();\n this.exprAllowed = true;\n\n // Figure out if it's a module code.\n this.inModule = options.sourceType === \"module\";\n this.strict = this.inModule || this.strictDirective(this.pos);\n\n // Used to signify the start of a potential arrow function\n this.potentialArrowAt = -1;\n this.potentialArrowInForAwait = false;\n\n // Positions to delayed-check that yield/await does not exist in default parameters.\n this.yieldPos = this.awaitPos = this.awaitIdentPos = 0;\n // Labels in scope.\n this.labels = [];\n // Thus-far undefined exports.\n this.undefinedExports = Object.create(null);\n\n // If enabled, skip leading hashbang line.\n if (this.pos === 0 && options.allowHashBang && this.input.slice(0, 2) === \"#!\")\n { this.skipLineComment(2); }\n\n // Scope tracking for duplicate variable names (see scope.js)\n this.scopeStack = [];\n this.enterScope(SCOPE_TOP);\n\n // For RegExp validation\n this.regexpState = null;\n\n // The stack of private names.\n // Each element has two properties: 'declared' and 'used'.\n // When it exited from the outermost class definition, all used private names must be declared.\n this.privateNameStack = [];\n };\n\n var prototypeAccessors = { inFunction: { configurable: true },inGenerator: { configurable: true },inAsync: { configurable: true },canAwait: { configurable: true },allowSuper: { configurable: true },allowDirectSuper: { configurable: true },treatFunctionsAsVar: { configurable: true },allowNewDotTarget: { configurable: true },inClassStaticBlock: { configurable: true } };\n\n Parser.prototype.parse = function parse () {\n var node = this.options.program || this.startNode();\n this.nextToken();\n return this.parseTopLevel(node)\n };\n\n prototypeAccessors.inFunction.get = function () { return (this.currentVarScope().flags & SCOPE_FUNCTION) > 0 };\n\n prototypeAccessors.inGenerator.get = function () { return (this.currentVarScope().flags & SCOPE_GENERATOR) > 0 && !this.currentVarScope().inClassFieldInit };\n\n prototypeAccessors.inAsync.get = function () { return (this.currentVarScope().flags & SCOPE_ASYNC) > 0 && !this.currentVarScope().inClassFieldInit };\n\n prototypeAccessors.canAwait.get = function () {\n for (var i = this.scopeStack.length - 1; i >= 0; i--) {\n var scope = this.scopeStack[i];\n if (scope.inClassFieldInit || scope.flags & SCOPE_CLASS_STATIC_BLOCK) { return false }\n if (scope.flags & SCOPE_FUNCTION) { return (scope.flags & SCOPE_ASYNC) > 0 }\n }\n return (this.inModule && this.options.ecmaVersion >= 13) || this.options.allowAwaitOutsideFunction\n };\n\n prototypeAccessors.allowSuper.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & SCOPE_SUPER) > 0 || inClassFieldInit || this.options.allowSuperOutsideMethod\n };\n\n prototypeAccessors.allowDirectSuper.get = function () { return (this.currentThisScope().flags & SCOPE_DIRECT_SUPER) > 0 };\n\n prototypeAccessors.treatFunctionsAsVar.get = function () { return this.treatFunctionsAsVarInScope(this.currentScope()) };\n\n prototypeAccessors.allowNewDotTarget.get = function () {\n var ref = this.currentThisScope();\n var flags = ref.flags;\n var inClassFieldInit = ref.inClassFieldInit;\n return (flags & (SCOPE_FUNCTION | SCOPE_CLASS_STATIC_BLOCK)) > 0 || inClassFieldInit\n };\n\n prototypeAccessors.inClassStaticBlock.get = function () {\n return (this.currentVarScope().flags & SCOPE_CLASS_STATIC_BLOCK) > 0\n };\n\n Parser.extend = function extend () {\n var plugins = [], len = arguments.length;\n while ( len-- ) plugins[ len ] = arguments[ len ];\n\n var cls = this;\n for (var i = 0; i < plugins.length; i++) { cls = plugins[i](cls); }\n return cls\n };\n\n Parser.parse = function parse (input, options) {\n return new this(options, input).parse()\n };\n\n Parser.parseExpressionAt = function parseExpressionAt (input, pos, options) {\n var parser = new this(options, input, pos);\n parser.nextToken();\n return parser.parseExpression()\n };\n\n Parser.tokenizer = function tokenizer (input, options) {\n return new this(options, input)\n };\n\n Object.defineProperties( Parser.prototype, prototypeAccessors );\n\n var pp$9 = Parser.prototype;\n\n // ## Parser utilities\n\n var literal = /^(?:'((?:\\\\[^]|[^'\\\\])*?)'|\"((?:\\\\[^]|[^\"\\\\])*?)\")/;\n pp$9.strictDirective = function(start) {\n if (this.options.ecmaVersion < 5) { return false }\n for (;;) {\n // Try to find string literal.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n var match = literal.exec(this.input.slice(start));\n if (!match) { return false }\n if ((match[1] || match[2]) === \"use strict\") {\n skipWhiteSpace.lastIndex = start + match[0].length;\n var spaceAfter = skipWhiteSpace.exec(this.input), end = spaceAfter.index + spaceAfter[0].length;\n var next = this.input.charAt(end);\n return next === \";\" || next === \"}\" ||\n (lineBreak.test(spaceAfter[0]) &&\n !(/[(`.[+\\-/*%<>=,?^&]/.test(next) || next === \"!\" && this.input.charAt(end + 1) === \"=\"))\n }\n start += match[0].length;\n\n // Skip semicolon, if any.\n skipWhiteSpace.lastIndex = start;\n start += skipWhiteSpace.exec(this.input)[0].length;\n if (this.input[start] === \";\")\n { start++; }\n }\n };\n\n // Predicate that tests whether the next token is of the given\n // type, and if yes, consumes it as a side effect.\n\n pp$9.eat = function(type) {\n if (this.type === type) {\n this.next();\n return true\n } else {\n return false\n }\n };\n\n // Tests whether parsed token is a contextual keyword.\n\n pp$9.isContextual = function(name) {\n return this.type === types$1.name && this.value === name && !this.containsEsc\n };\n\n // Consumes contextual keyword if possible.\n\n pp$9.eatContextual = function(name) {\n if (!this.isContextual(name)) { return false }\n this.next();\n return true\n };\n\n // Asserts that following token is given contextual keyword.\n\n pp$9.expectContextual = function(name) {\n if (!this.eatContextual(name)) { this.unexpected(); }\n };\n\n // Test whether a semicolon can be inserted at the current position.\n\n pp$9.canInsertSemicolon = function() {\n return this.type === types$1.eof ||\n this.type === types$1.braceR ||\n lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n pp$9.insertSemicolon = function() {\n if (this.canInsertSemicolon()) {\n if (this.options.onInsertedSemicolon)\n { this.options.onInsertedSemicolon(this.lastTokEnd, this.lastTokEndLoc); }\n return true\n }\n };\n\n // Consume a semicolon, or, failing that, see if we are allowed to\n // pretend that there is a semicolon at this position.\n\n pp$9.semicolon = function() {\n if (!this.eat(types$1.semi) && !this.insertSemicolon()) { this.unexpected(); }\n };\n\n pp$9.afterTrailingComma = function(tokType, notNext) {\n if (this.type === tokType) {\n if (this.options.onTrailingComma)\n { this.options.onTrailingComma(this.lastTokStart, this.lastTokStartLoc); }\n if (!notNext)\n { this.next(); }\n return true\n }\n };\n\n // Expect a token of a given type. If found, consume it, otherwise,\n // raise an unexpected token error.\n\n pp$9.expect = function(type) {\n this.eat(type) || this.unexpected();\n };\n\n // Raise an unexpected token error.\n\n pp$9.unexpected = function(pos) {\n this.raise(pos != null ? pos : this.start, \"Unexpected token\");\n };\n\n var DestructuringErrors = function DestructuringErrors() {\n this.shorthandAssign =\n this.trailingComma =\n this.parenthesizedAssign =\n this.parenthesizedBind =\n this.doubleProto =\n -1;\n };\n\n pp$9.checkPatternErrors = function(refDestructuringErrors, isAssign) {\n if (!refDestructuringErrors) { return }\n if (refDestructuringErrors.trailingComma > -1)\n { this.raiseRecoverable(refDestructuringErrors.trailingComma, \"Comma is not permitted after the rest element\"); }\n var parens = isAssign ? refDestructuringErrors.parenthesizedAssign : refDestructuringErrors.parenthesizedBind;\n if (parens > -1) { this.raiseRecoverable(parens, isAssign ? \"Assigning to rvalue\" : \"Parenthesized pattern\"); }\n };\n\n pp$9.checkExpressionErrors = function(refDestructuringErrors, andThrow) {\n if (!refDestructuringErrors) { return false }\n var shorthandAssign = refDestructuringErrors.shorthandAssign;\n var doubleProto = refDestructuringErrors.doubleProto;\n if (!andThrow) { return shorthandAssign >= 0 || doubleProto >= 0 }\n if (shorthandAssign >= 0)\n { this.raise(shorthandAssign, \"Shorthand property assignments are valid only in destructuring patterns\"); }\n if (doubleProto >= 0)\n { this.raiseRecoverable(doubleProto, \"Redefinition of __proto__ property\"); }\n };\n\n pp$9.checkYieldAwaitInDefaultParams = function() {\n if (this.yieldPos && (!this.awaitPos || this.yieldPos < this.awaitPos))\n { this.raise(this.yieldPos, \"Yield expression cannot be a default value\"); }\n if (this.awaitPos)\n { this.raise(this.awaitPos, \"Await expression cannot be a default value\"); }\n };\n\n pp$9.isSimpleAssignTarget = function(expr) {\n if (expr.type === \"ParenthesizedExpression\")\n { return this.isSimpleAssignTarget(expr.expression) }\n return expr.type === \"Identifier\" || expr.type === \"MemberExpression\"\n };\n\n var pp$8 = Parser.prototype;\n\n // ### Statement parsing\n\n // Parse a program. Initializes the parser, reads any number of\n // statements, and wraps them in a Program node. Optionally takes a\n // `program` argument. If present, the statements will be appended\n // to its body instead of creating a new node.\n\n pp$8.parseTopLevel = function(node) {\n var exports = Object.create(null);\n if (!node.body) { node.body = []; }\n while (this.type !== types$1.eof) {\n var stmt = this.parseStatement(null, true, exports);\n node.body.push(stmt);\n }\n if (this.inModule)\n { for (var i = 0, list = Object.keys(this.undefinedExports); i < list.length; i += 1)\n {\n var name = list[i];\n\n this.raiseRecoverable(this.undefinedExports[name].start, (\"Export '\" + name + \"' is not defined\"));\n } }\n this.adaptDirectivePrologue(node.body);\n this.next();\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, \"Program\")\n };\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n pp$8.isLet = function(context) {\n if (this.options.ecmaVersion < 6 || !this.isContextual(\"let\")) { return false }\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n // For ambiguous cases, determine if a LexicalDeclaration (or only a\n // Statement) is allowed here. If context is not empty then only a Statement\n // is allowed. However, `let [` is an explicit negative lookahead for\n // ExpressionStatement, so special-case it first.\n if (nextCh === 91 || nextCh === 92) { return true } // '[', '\\'\n if (context) { return false }\n\n if (nextCh === 123 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true } // '{', astral\n if (isIdentifierStart(nextCh, true)) {\n var pos = next + 1;\n while (isIdentifierChar(nextCh = this.input.charCodeAt(pos), true)) { ++pos; }\n if (nextCh === 92 || nextCh > 0xd7ff && nextCh < 0xdc00) { return true }\n var ident = this.input.slice(next, pos);\n if (!keywordRelationalOperator.test(ident)) { return true }\n }\n return false\n };\n\n // check 'async [no LineTerminator here] function'\n // - 'async /*foo*/ function' is OK.\n // - 'async /*\\n*/ function' is invalid.\n pp$8.isAsyncFunction = function() {\n if (this.options.ecmaVersion < 8 || !this.isContextual(\"async\"))\n { return false }\n\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, after;\n return !lineBreak.test(this.input.slice(this.pos, next)) &&\n this.input.slice(next, next + 8) === \"function\" &&\n (next + 8 === this.input.length ||\n !(isIdentifierChar(after = this.input.charCodeAt(next + 8)) || after > 0xd7ff && after < 0xdc00))\n };\n\n // Parse a single statement.\n //\n // If expecting a statement and finding a slash operator, parse a\n // regular expression literal. This is to handle cases like\n // `if (foo) /blah/.exec(foo)`, where looking at the previous token\n // does not help.\n\n pp$8.parseStatement = function(context, topLevel, exports) {\n var starttype = this.type, node = this.startNode(), kind;\n\n if (this.isLet(context)) {\n starttype = types$1._var;\n kind = \"let\";\n }\n\n // Most types of statements are recognized by the keyword they\n // start with. Many are trivial to parse, some require a bit of\n // complexity.\n\n switch (starttype) {\n case types$1._break: case types$1._continue: return this.parseBreakContinueStatement(node, starttype.keyword)\n case types$1._debugger: return this.parseDebuggerStatement(node)\n case types$1._do: return this.parseDoStatement(node)\n case types$1._for: return this.parseForStatement(node)\n case types$1._function:\n // Function as sole body of either an if statement or a labeled statement\n // works, but not when it is part of a labeled statement that is the sole\n // body of an if statement.\n if ((context && (this.strict || context !== \"if\" && context !== \"label\")) && this.options.ecmaVersion >= 6) { this.unexpected(); }\n return this.parseFunctionStatement(node, false, !context)\n case types$1._class:\n if (context) { this.unexpected(); }\n return this.parseClass(node, true)\n case types$1._if: return this.parseIfStatement(node)\n case types$1._return: return this.parseReturnStatement(node)\n case types$1._switch: return this.parseSwitchStatement(node)\n case types$1._throw: return this.parseThrowStatement(node)\n case types$1._try: return this.parseTryStatement(node)\n case types$1._const: case types$1._var:\n kind = kind || this.value;\n if (context && kind !== \"var\") { this.unexpected(); }\n return this.parseVarStatement(node, kind)\n case types$1._while: return this.parseWhileStatement(node)\n case types$1._with: return this.parseWithStatement(node)\n case types$1.braceL: return this.parseBlock(true, node)\n case types$1.semi: return this.parseEmptyStatement(node)\n case types$1._export:\n case types$1._import:\n if (this.options.ecmaVersion > 10 && starttype === types$1._import) {\n skipWhiteSpace.lastIndex = this.pos;\n var skip = skipWhiteSpace.exec(this.input);\n var next = this.pos + skip[0].length, nextCh = this.input.charCodeAt(next);\n if (nextCh === 40 || nextCh === 46) // '(' or '.'\n { return this.parseExpressionStatement(node, this.parseExpression()) }\n }\n\n if (!this.options.allowImportExportEverywhere) {\n if (!topLevel)\n { this.raise(this.start, \"'import' and 'export' may only appear at the top level\"); }\n if (!this.inModule)\n { this.raise(this.start, \"'import' and 'export' may appear only with 'sourceType: module'\"); }\n }\n return starttype === types$1._import ? this.parseImport(node) : this.parseExport(node, exports)\n\n // If the statement does not start with a statement keyword or a\n // brace, it's an ExpressionStatement or LabeledStatement. We\n // simply start parsing an expression, and afterwards, if the\n // next token is a colon and the expression was a simple\n // Identifier node, we switch to interpreting it as a label.\n default:\n if (this.isAsyncFunction()) {\n if (context) { this.unexpected(); }\n this.next();\n return this.parseFunctionStatement(node, true, !context)\n }\n\n var maybeName = this.value, expr = this.parseExpression();\n if (starttype === types$1.name && expr.type === \"Identifier\" && this.eat(types$1.colon))\n { return this.parseLabeledStatement(node, maybeName, expr, context) }\n else { return this.parseExpressionStatement(node, expr) }\n }\n };\n\n pp$8.parseBreakContinueStatement = function(node, keyword) {\n var isBreak = keyword === \"break\";\n this.next();\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.label = null; }\n else if (this.type !== types$1.name) { this.unexpected(); }\n else {\n node.label = this.parseIdent();\n this.semicolon();\n }\n\n // Verify that there is an actual destination to break or\n // continue to.\n var i = 0;\n for (; i < this.labels.length; ++i) {\n var lab = this.labels[i];\n if (node.label == null || lab.name === node.label.name) {\n if (lab.kind != null && (isBreak || lab.kind === \"loop\")) { break }\n if (node.label && isBreak) { break }\n }\n }\n if (i === this.labels.length) { this.raise(node.start, \"Unsyntactic \" + keyword); }\n return this.finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\")\n };\n\n pp$8.parseDebuggerStatement = function(node) {\n this.next();\n this.semicolon();\n return this.finishNode(node, \"DebuggerStatement\")\n };\n\n pp$8.parseDoStatement = function(node) {\n this.next();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"do\");\n this.labels.pop();\n this.expect(types$1._while);\n node.test = this.parseParenExpression();\n if (this.options.ecmaVersion >= 6)\n { this.eat(types$1.semi); }\n else\n { this.semicolon(); }\n return this.finishNode(node, \"DoWhileStatement\")\n };\n\n // Disambiguating between a `for` and a `for`/`in` or `for`/`of`\n // loop is non-trivial. Basically, we have to parse the init `var`\n // statement or expression, disallowing the `in` operator (see\n // the second parameter to `parseExpression`), and then check\n // whether the next token is `in` or `of`. When there is no init\n // part (semicolon immediately after the opening parenthesis), it\n // is a regular `for` loop.\n\n pp$8.parseForStatement = function(node) {\n this.next();\n var awaitAt = (this.options.ecmaVersion >= 9 && this.canAwait && this.eatContextual(\"await\")) ? this.lastTokStart : -1;\n this.labels.push(loopLabel);\n this.enterScope(0);\n this.expect(types$1.parenL);\n if (this.type === types$1.semi) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, null)\n }\n var isLet = this.isLet();\n if (this.type === types$1._var || this.type === types$1._const || isLet) {\n var init$1 = this.startNode(), kind = isLet ? \"let\" : this.value;\n this.next();\n this.parseVar(init$1, true, kind);\n this.finishNode(init$1, \"VariableDeclaration\");\n if ((this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) && init$1.declarations.length === 1) {\n if (this.options.ecmaVersion >= 9) {\n if (this.type === types$1._in) {\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n } else { node.await = awaitAt > -1; }\n }\n return this.parseForIn(node, init$1)\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init$1)\n }\n var startsWithLet = this.isContextual(\"let\"), isForOf = false;\n var containsEsc = this.containsEsc;\n var refDestructuringErrors = new DestructuringErrors;\n var initPos = this.start;\n var init = awaitAt > -1\n ? this.parseExprSubscripts(refDestructuringErrors, \"await\")\n : this.parseExpression(true, refDestructuringErrors);\n if (this.type === types$1._in || (isForOf = this.options.ecmaVersion >= 6 && this.isContextual(\"of\"))) {\n if (awaitAt > -1) { // implies `ecmaVersion >= 9` (see declaration of awaitAt)\n if (this.type === types$1._in) { this.unexpected(awaitAt); }\n node.await = true;\n } else if (isForOf && this.options.ecmaVersion >= 8) {\n if (init.start === initPos && !containsEsc && init.type === \"Identifier\" && init.name === \"async\") { this.unexpected(); }\n else if (this.options.ecmaVersion >= 9) { node.await = false; }\n }\n if (startsWithLet && isForOf) { this.raise(init.start, \"The left-hand side of a for-of loop may not start with 'let'.\"); }\n this.toAssignable(init, false, refDestructuringErrors);\n this.checkLValPattern(init);\n return this.parseForIn(node, init)\n } else {\n this.checkExpressionErrors(refDestructuringErrors, true);\n }\n if (awaitAt > -1) { this.unexpected(awaitAt); }\n return this.parseFor(node, init)\n };\n\n pp$8.parseFunctionStatement = function(node, isAsync, declarationPosition) {\n this.next();\n return this.parseFunction(node, FUNC_STATEMENT | (declarationPosition ? 0 : FUNC_HANGING_STATEMENT), false, isAsync)\n };\n\n pp$8.parseIfStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n // allow function declarations in branches, but only in non-strict mode\n node.consequent = this.parseStatement(\"if\");\n node.alternate = this.eat(types$1._else) ? this.parseStatement(\"if\") : null;\n return this.finishNode(node, \"IfStatement\")\n };\n\n pp$8.parseReturnStatement = function(node) {\n if (!this.inFunction && !this.options.allowReturnOutsideFunction)\n { this.raise(this.start, \"'return' outside of function\"); }\n this.next();\n\n // In `return` (and `break`/`continue`), the keywords with\n // optional arguments, we eagerly look for a semicolon or the\n // possibility to insert one.\n\n if (this.eat(types$1.semi) || this.insertSemicolon()) { node.argument = null; }\n else { node.argument = this.parseExpression(); this.semicolon(); }\n return this.finishNode(node, \"ReturnStatement\")\n };\n\n pp$8.parseSwitchStatement = function(node) {\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.expect(types$1.braceL);\n this.labels.push(switchLabel);\n this.enterScope(0);\n\n // Statements under must be grouped (by label) in SwitchCase\n // nodes. `cur` is used to keep the node that we are currently\n // adding statements to.\n\n var cur;\n for (var sawDefault = false; this.type !== types$1.braceR;) {\n if (this.type === types$1._case || this.type === types$1._default) {\n var isCase = this.type === types$1._case;\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n if (sawDefault) { this.raiseRecoverable(this.lastTokStart, \"Multiple default clauses\"); }\n sawDefault = true;\n cur.test = null;\n }\n this.expect(types$1.colon);\n } else {\n if (!cur) { this.unexpected(); }\n cur.consequent.push(this.parseStatement(null));\n }\n }\n this.exitScope();\n if (cur) { this.finishNode(cur, \"SwitchCase\"); }\n this.next(); // Closing brace\n this.labels.pop();\n return this.finishNode(node, \"SwitchStatement\")\n };\n\n pp$8.parseThrowStatement = function(node) {\n this.next();\n if (lineBreak.test(this.input.slice(this.lastTokEnd, this.start)))\n { this.raise(this.lastTokEnd, \"Illegal newline after throw\"); }\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, \"ThrowStatement\")\n };\n\n // Reused empty array added for node fields that are always empty.\n\n var empty$1 = [];\n\n pp$8.parseCatchClauseParam = function() {\n var param = this.parseBindingAtom();\n var simple = param.type === \"Identifier\";\n this.enterScope(simple ? SCOPE_SIMPLE_CATCH : 0);\n this.checkLValPattern(param, simple ? BIND_SIMPLE_CATCH : BIND_LEXICAL);\n this.expect(types$1.parenR);\n\n return param\n };\n\n pp$8.parseTryStatement = function(node) {\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n if (this.type === types$1._catch) {\n var clause = this.startNode();\n this.next();\n if (this.eat(types$1.parenL)) {\n clause.param = this.parseCatchClauseParam();\n } else {\n if (this.options.ecmaVersion < 10) { this.unexpected(); }\n clause.param = null;\n this.enterScope(0);\n }\n clause.body = this.parseBlock(false);\n this.exitScope();\n node.handler = this.finishNode(clause, \"CatchClause\");\n }\n node.finalizer = this.eat(types$1._finally) ? this.parseBlock() : null;\n if (!node.handler && !node.finalizer)\n { this.raise(node.start, \"Missing catch or finally clause\"); }\n return this.finishNode(node, \"TryStatement\")\n };\n\n pp$8.parseVarStatement = function(node, kind, allowMissingInitializer) {\n this.next();\n this.parseVar(node, false, kind, allowMissingInitializer);\n this.semicolon();\n return this.finishNode(node, \"VariableDeclaration\")\n };\n\n pp$8.parseWhileStatement = function(node) {\n this.next();\n node.test = this.parseParenExpression();\n this.labels.push(loopLabel);\n node.body = this.parseStatement(\"while\");\n this.labels.pop();\n return this.finishNode(node, \"WhileStatement\")\n };\n\n pp$8.parseWithStatement = function(node) {\n if (this.strict) { this.raise(this.start, \"'with' in strict mode\"); }\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement(\"with\");\n return this.finishNode(node, \"WithStatement\")\n };\n\n pp$8.parseEmptyStatement = function(node) {\n this.next();\n return this.finishNode(node, \"EmptyStatement\")\n };\n\n pp$8.parseLabeledStatement = function(node, maybeName, expr, context) {\n for (var i$1 = 0, list = this.labels; i$1 < list.length; i$1 += 1)\n {\n var label = list[i$1];\n\n if (label.name === maybeName)\n { this.raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n } }\n var kind = this.type.isLoop ? \"loop\" : this.type === types$1._switch ? \"switch\" : null;\n for (var i = this.labels.length - 1; i >= 0; i--) {\n var label$1 = this.labels[i];\n if (label$1.statementStart === node.start) {\n // Update information about previous labels on this node\n label$1.statementStart = this.start;\n label$1.kind = kind;\n } else { break }\n }\n this.labels.push({name: maybeName, kind: kind, statementStart: this.start});\n node.body = this.parseStatement(context ? context.indexOf(\"label\") === -1 ? context + \"label\" : context : \"label\");\n this.labels.pop();\n node.label = expr;\n return this.finishNode(node, \"LabeledStatement\")\n };\n\n pp$8.parseExpressionStatement = function(node, expr) {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, \"ExpressionStatement\")\n };\n\n // Parse a semicolon-enclosed block of statements, handling `\"use\n // strict\"` declarations when `allowStrict` is true (used for\n // function bodies).\n\n pp$8.parseBlock = function(createNewLexicalScope, node, exitStrict) {\n if ( createNewLexicalScope === void 0 ) createNewLexicalScope = true;\n if ( node === void 0 ) node = this.startNode();\n\n node.body = [];\n this.expect(types$1.braceL);\n if (createNewLexicalScope) { this.enterScope(0); }\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n if (exitStrict) { this.strict = false; }\n this.next();\n if (createNewLexicalScope) { this.exitScope(); }\n return this.finishNode(node, \"BlockStatement\")\n };\n\n // Parse a regular `for` loop. The disambiguation code in\n // `parseStatement` will already have parsed the init statement or\n // expression.\n\n pp$8.parseFor = function(node, init) {\n node.init = init;\n this.expect(types$1.semi);\n node.test = this.type === types$1.semi ? null : this.parseExpression();\n this.expect(types$1.semi);\n node.update = this.type === types$1.parenR ? null : this.parseExpression();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, \"ForStatement\")\n };\n\n // Parse a `for`/`in` and `for`/`of` loop, which are almost\n // same from parser's perspective.\n\n pp$8.parseForIn = function(node, init) {\n var isForIn = this.type === types$1._in;\n this.next();\n\n if (\n init.type === \"VariableDeclaration\" &&\n init.declarations[0].init != null &&\n (\n !isForIn ||\n this.options.ecmaVersion < 8 ||\n this.strict ||\n init.kind !== \"var\" ||\n init.declarations[0].id.type !== \"Identifier\"\n )\n ) {\n this.raise(\n init.start,\n ((isForIn ? \"for-in\" : \"for-of\") + \" loop variable declaration may not have an initializer\")\n );\n }\n node.left = init;\n node.right = isForIn ? this.parseExpression() : this.parseMaybeAssign();\n this.expect(types$1.parenR);\n node.body = this.parseStatement(\"for\");\n this.exitScope();\n this.labels.pop();\n return this.finishNode(node, isForIn ? \"ForInStatement\" : \"ForOfStatement\")\n };\n\n // Parse a list of variable declarations.\n\n pp$8.parseVar = function(node, isFor, kind, allowMissingInitializer) {\n node.declarations = [];\n node.kind = kind;\n for (;;) {\n var decl = this.startNode();\n this.parseVarId(decl, kind);\n if (this.eat(types$1.eq)) {\n decl.init = this.parseMaybeAssign(isFor);\n } else if (!allowMissingInitializer && kind === \"const\" && !(this.type === types$1._in || (this.options.ecmaVersion >= 6 && this.isContextual(\"of\")))) {\n this.unexpected();\n } else if (!allowMissingInitializer && decl.id.type !== \"Identifier\" && !(isFor && (this.type === types$1._in || this.isContextual(\"of\")))) {\n this.raise(this.lastTokEnd, \"Complex binding patterns require an initialization value\");\n } else {\n decl.init = null;\n }\n node.declarations.push(this.finishNode(decl, \"VariableDeclarator\"));\n if (!this.eat(types$1.comma)) { break }\n }\n return node\n };\n\n pp$8.parseVarId = function(decl, kind) {\n decl.id = this.parseBindingAtom();\n this.checkLValPattern(decl.id, kind === \"var\" ? BIND_VAR : BIND_LEXICAL, false);\n };\n\n var FUNC_STATEMENT = 1, FUNC_HANGING_STATEMENT = 2, FUNC_NULLABLE_ID = 4;\n\n // Parse a function declaration or literal (depending on the\n // `statement & FUNC_STATEMENT`).\n\n // Remove `allowExpressionBody` for 7.0.0, as it is only called with false\n pp$8.parseFunction = function(node, statement, allowExpressionBody, isAsync, forInit) {\n this.initFunction(node);\n if (this.options.ecmaVersion >= 9 || this.options.ecmaVersion >= 6 && !isAsync) {\n if (this.type === types$1.star && (statement & FUNC_HANGING_STATEMENT))\n { this.unexpected(); }\n node.generator = this.eat(types$1.star);\n }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n if (statement & FUNC_STATEMENT) {\n node.id = (statement & FUNC_NULLABLE_ID) && this.type !== types$1.name ? null : this.parseIdent();\n if (node.id && !(statement & FUNC_HANGING_STATEMENT))\n // If it is a regular function declaration in sloppy mode, then it is\n // subject to Annex B semantics (BIND_FUNCTION). Otherwise, the binding\n // mode depends on properties of the current scope (see\n // treatFunctionsAsVar).\n { this.checkLValSimple(node.id, (this.strict || node.generator || node.async) ? this.treatFunctionsAsVar ? BIND_VAR : BIND_LEXICAL : BIND_FUNCTION); }\n }\n\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(node.async, node.generator));\n\n if (!(statement & FUNC_STATEMENT))\n { node.id = this.type === types$1.name ? this.parseIdent() : null; }\n\n this.parseFunctionParams(node);\n this.parseFunctionBody(node, allowExpressionBody, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, (statement & FUNC_STATEMENT) ? \"FunctionDeclaration\" : \"FunctionExpression\")\n };\n\n pp$8.parseFunctionParams = function(node) {\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n };\n\n // Parse a class declaration or literal (depending on the\n // `isStatement` parameter).\n\n pp$8.parseClass = function(node, isStatement) {\n this.next();\n\n // ecma-262 14.6 Class Definitions\n // A class definition is always strict mode code.\n var oldStrict = this.strict;\n this.strict = true;\n\n this.parseClassId(node, isStatement);\n this.parseClassSuper(node);\n var privateNameMap = this.enterClassBody();\n var classBody = this.startNode();\n var hadConstructor = false;\n classBody.body = [];\n this.expect(types$1.braceL);\n while (this.type !== types$1.braceR) {\n var element = this.parseClassElement(node.superClass !== null);\n if (element) {\n classBody.body.push(element);\n if (element.type === \"MethodDefinition\" && element.kind === \"constructor\") {\n if (hadConstructor) { this.raiseRecoverable(element.start, \"Duplicate constructor in the same class\"); }\n hadConstructor = true;\n } else if (element.key && element.key.type === \"PrivateIdentifier\" && isPrivateNameConflicted(privateNameMap, element)) {\n this.raiseRecoverable(element.key.start, (\"Identifier '#\" + (element.key.name) + \"' has already been declared\"));\n }\n }\n }\n this.strict = oldStrict;\n this.next();\n node.body = this.finishNode(classBody, \"ClassBody\");\n this.exitClassBody();\n return this.finishNode(node, isStatement ? \"ClassDeclaration\" : \"ClassExpression\")\n };\n\n pp$8.parseClassElement = function(constructorAllowsSuper) {\n if (this.eat(types$1.semi)) { return null }\n\n var ecmaVersion = this.options.ecmaVersion;\n var node = this.startNode();\n var keyName = \"\";\n var isGenerator = false;\n var isAsync = false;\n var kind = \"method\";\n var isStatic = false;\n\n if (this.eatContextual(\"static\")) {\n // Parse static init block\n if (ecmaVersion >= 13 && this.eat(types$1.braceL)) {\n this.parseClassStaticBlock(node);\n return node\n }\n if (this.isClassElementNameStart() || this.type === types$1.star) {\n isStatic = true;\n } else {\n keyName = \"static\";\n }\n }\n node.static = isStatic;\n if (!keyName && ecmaVersion >= 8 && this.eatContextual(\"async\")) {\n if ((this.isClassElementNameStart() || this.type === types$1.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = \"async\";\n }\n }\n if (!keyName && (ecmaVersion >= 9 || !isAsync) && this.eat(types$1.star)) {\n isGenerator = true;\n }\n if (!keyName && !isAsync && !isGenerator) {\n var lastValue = this.value;\n if (this.eatContextual(\"get\") || this.eatContextual(\"set\")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n }\n\n // Parse element name\n if (keyName) {\n // 'async', 'get', 'set', or 'static' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(this.lastTokStart, this.lastTokStartLoc);\n node.key.name = keyName;\n this.finishNode(node.key, \"Identifier\");\n } else {\n this.parseClassElementName(node);\n }\n\n // Parse element value\n if (ecmaVersion < 13 || this.type === types$1.parenL || kind !== \"method\" || isGenerator || isAsync) {\n var isConstructor = !node.static && checkKeyName(node, \"constructor\");\n var allowsDirectSuper = isConstructor && constructorAllowsSuper;\n // Couldn't move this check into the 'parseClassMethod' method for backward compatibility.\n if (isConstructor && kind !== \"method\") { this.raise(node.key.start, \"Constructor can't have get/set modifier\"); }\n node.kind = isConstructor ? \"constructor\" : kind;\n this.parseClassMethod(node, isGenerator, isAsync, allowsDirectSuper);\n } else {\n this.parseClassField(node);\n }\n\n return node\n };\n\n pp$8.isClassElementNameStart = function() {\n return (\n this.type === types$1.name ||\n this.type === types$1.privateId ||\n this.type === types$1.num ||\n this.type === types$1.string ||\n this.type === types$1.bracketL ||\n this.type.keyword\n )\n };\n\n pp$8.parseClassElementName = function(element) {\n if (this.type === types$1.privateId) {\n if (this.value === \"constructor\") {\n this.raise(this.start, \"Classes can't have an element named '#constructor'\");\n }\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n };\n\n pp$8.parseClassMethod = function(method, isGenerator, isAsync, allowsDirectSuper) {\n // Check key and flags\n var key = method.key;\n if (method.kind === \"constructor\") {\n if (isGenerator) { this.raise(key.start, \"Constructor can't be a generator\"); }\n if (isAsync) { this.raise(key.start, \"Constructor can't be an async method\"); }\n } else if (method.static && checkKeyName(method, \"prototype\")) {\n this.raise(key.start, \"Classes may not have a static property named prototype\");\n }\n\n // Parse value\n var value = method.value = this.parseMethod(isGenerator, isAsync, allowsDirectSuper);\n\n // Check value\n if (method.kind === \"get\" && value.params.length !== 0)\n { this.raiseRecoverable(value.start, \"getter should have no params\"); }\n if (method.kind === \"set\" && value.params.length !== 1)\n { this.raiseRecoverable(value.start, \"setter should have exactly one param\"); }\n if (method.kind === \"set\" && value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(value.params[0].start, \"Setter cannot use rest params\"); }\n\n return this.finishNode(method, \"MethodDefinition\")\n };\n\n pp$8.parseClassField = function(field) {\n if (checkKeyName(field, \"constructor\")) {\n this.raise(field.key.start, \"Classes can't have a field named 'constructor'\");\n } else if (field.static && checkKeyName(field, \"prototype\")) {\n this.raise(field.key.start, \"Classes can't have a static field named 'prototype'\");\n }\n\n if (this.eat(types$1.eq)) {\n // To raise SyntaxError if 'arguments' exists in the initializer.\n var scope = this.currentThisScope();\n var inClassFieldInit = scope.inClassFieldInit;\n scope.inClassFieldInit = true;\n field.value = this.parseMaybeAssign();\n scope.inClassFieldInit = inClassFieldInit;\n } else {\n field.value = null;\n }\n this.semicolon();\n\n return this.finishNode(field, \"PropertyDefinition\")\n };\n\n pp$8.parseClassStaticBlock = function(node) {\n node.body = [];\n\n var oldLabels = this.labels;\n this.labels = [];\n this.enterScope(SCOPE_CLASS_STATIC_BLOCK | SCOPE_SUPER);\n while (this.type !== types$1.braceR) {\n var stmt = this.parseStatement(null);\n node.body.push(stmt);\n }\n this.next();\n this.exitScope();\n this.labels = oldLabels;\n\n return this.finishNode(node, \"StaticBlock\")\n };\n\n pp$8.parseClassId = function(node, isStatement) {\n if (this.type === types$1.name) {\n node.id = this.parseIdent();\n if (isStatement)\n { this.checkLValSimple(node.id, BIND_LEXICAL, false); }\n } else {\n if (isStatement === true)\n { this.unexpected(); }\n node.id = null;\n }\n };\n\n pp$8.parseClassSuper = function(node) {\n node.superClass = this.eat(types$1._extends) ? this.parseExprSubscripts(null, false) : null;\n };\n\n pp$8.enterClassBody = function() {\n var element = {declared: Object.create(null), used: []};\n this.privateNameStack.push(element);\n return element.declared\n };\n\n pp$8.exitClassBody = function() {\n var ref = this.privateNameStack.pop();\n var declared = ref.declared;\n var used = ref.used;\n if (!this.options.checkPrivateFields) { return }\n var len = this.privateNameStack.length;\n var parent = len === 0 ? null : this.privateNameStack[len - 1];\n for (var i = 0; i < used.length; ++i) {\n var id = used[i];\n if (!hasOwn(declared, id.name)) {\n if (parent) {\n parent.used.push(id);\n } else {\n this.raiseRecoverable(id.start, (\"Private field '#\" + (id.name) + \"' must be declared in an enclosing class\"));\n }\n }\n }\n };\n\n function isPrivateNameConflicted(privateNameMap, element) {\n var name = element.key.name;\n var curr = privateNameMap[name];\n\n var next = \"true\";\n if (element.type === \"MethodDefinition\" && (element.kind === \"get\" || element.kind === \"set\")) {\n next = (element.static ? \"s\" : \"i\") + element.kind;\n }\n\n // `class { get #a(){}; static set #a(_){} }` is also conflict.\n if (\n curr === \"iget\" && next === \"iset\" ||\n curr === \"iset\" && next === \"iget\" ||\n curr === \"sget\" && next === \"sset\" ||\n curr === \"sset\" && next === \"sget\"\n ) {\n privateNameMap[name] = \"true\";\n return false\n } else if (!curr) {\n privateNameMap[name] = next;\n return false\n } else {\n return true\n }\n }\n\n function checkKeyName(node, name) {\n var computed = node.computed;\n var key = node.key;\n return !computed && (\n key.type === \"Identifier\" && key.name === name ||\n key.type === \"Literal\" && key.value === name\n )\n }\n\n // Parses module export declaration.\n\n pp$8.parseExportAllDeclaration = function(node, exports) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual(\"as\")) {\n node.exported = this.parseModuleExportName();\n this.checkExport(exports, node.exported, this.lastTokStart);\n } else {\n node.exported = null;\n }\n }\n this.expectContextual(\"from\");\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ExportAllDeclaration\")\n };\n\n pp$8.parseExport = function(node, exports) {\n this.next();\n // export * from '...'\n if (this.eat(types$1.star)) {\n return this.parseExportAllDeclaration(node, exports)\n }\n if (this.eat(types$1._default)) { // export default ...\n this.checkExport(exports, \"default\", this.lastTokStart);\n node.declaration = this.parseExportDefaultDeclaration();\n return this.finishNode(node, \"ExportDefaultDeclaration\")\n }\n // export var|const|let|function|class ...\n if (this.shouldParseExportStatement()) {\n node.declaration = this.parseExportDeclaration(node);\n if (node.declaration.type === \"VariableDeclaration\")\n { this.checkVariableExport(exports, node.declaration.declarations); }\n else\n { this.checkExport(exports, node.declaration.id, node.declaration.id.start); }\n node.specifiers = [];\n node.source = null;\n } else { // export { x, y as z } [from '...']\n node.declaration = null;\n node.specifiers = this.parseExportSpecifiers(exports);\n if (this.eatContextual(\"from\")) {\n if (this.type !== types$1.string) { this.unexpected(); }\n node.source = this.parseExprAtom();\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n } else {\n for (var i = 0, list = node.specifiers; i < list.length; i += 1) {\n // check for keywords used as local names\n var spec = list[i];\n\n this.checkUnreserved(spec.local);\n // check if export is defined\n this.checkLocalExport(spec.local);\n\n if (spec.local.type === \"Literal\") {\n this.raise(spec.local.start, \"A string literal cannot be used as an exported binding without `from`.\");\n }\n }\n\n node.source = null;\n }\n this.semicolon();\n }\n return this.finishNode(node, \"ExportNamedDeclaration\")\n };\n\n pp$8.parseExportDeclaration = function(node) {\n return this.parseStatement(null)\n };\n\n pp$8.parseExportDefaultDeclaration = function() {\n var isAsync;\n if (this.type === types$1._function || (isAsync = this.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n if (isAsync) { this.next(); }\n return this.parseFunction(fNode, FUNC_STATEMENT | FUNC_NULLABLE_ID, false, isAsync)\n } else if (this.type === types$1._class) {\n var cNode = this.startNode();\n return this.parseClass(cNode, \"nullableID\")\n } else {\n var declaration = this.parseMaybeAssign();\n this.semicolon();\n return declaration\n }\n };\n\n pp$8.checkExport = function(exports, name, pos) {\n if (!exports) { return }\n if (typeof name !== \"string\")\n { name = name.type === \"Identifier\" ? name.name : name.value; }\n if (hasOwn(exports, name))\n { this.raiseRecoverable(pos, \"Duplicate export '\" + name + \"'\"); }\n exports[name] = true;\n };\n\n pp$8.checkPatternExport = function(exports, pat) {\n var type = pat.type;\n if (type === \"Identifier\")\n { this.checkExport(exports, pat, pat.start); }\n else if (type === \"ObjectPattern\")\n { for (var i = 0, list = pat.properties; i < list.length; i += 1)\n {\n var prop = list[i];\n\n this.checkPatternExport(exports, prop);\n } }\n else if (type === \"ArrayPattern\")\n { for (var i$1 = 0, list$1 = pat.elements; i$1 < list$1.length; i$1 += 1) {\n var elt = list$1[i$1];\n\n if (elt) { this.checkPatternExport(exports, elt); }\n } }\n else if (type === \"Property\")\n { this.checkPatternExport(exports, pat.value); }\n else if (type === \"AssignmentPattern\")\n { this.checkPatternExport(exports, pat.left); }\n else if (type === \"RestElement\")\n { this.checkPatternExport(exports, pat.argument); }\n };\n\n pp$8.checkVariableExport = function(exports, decls) {\n if (!exports) { return }\n for (var i = 0, list = decls; i < list.length; i += 1)\n {\n var decl = list[i];\n\n this.checkPatternExport(exports, decl.id);\n }\n };\n\n pp$8.shouldParseExportStatement = function() {\n return this.type.keyword === \"var\" ||\n this.type.keyword === \"const\" ||\n this.type.keyword === \"class\" ||\n this.type.keyword === \"function\" ||\n this.isLet() ||\n this.isAsyncFunction()\n };\n\n // Parses a comma-separated list of module exports.\n\n pp$8.parseExportSpecifier = function(exports) {\n var node = this.startNode();\n node.local = this.parseModuleExportName();\n\n node.exported = this.eatContextual(\"as\") ? this.parseModuleExportName() : node.local;\n this.checkExport(\n exports,\n node.exported,\n node.exported.start\n );\n\n return this.finishNode(node, \"ExportSpecifier\")\n };\n\n pp$8.parseExportSpecifiers = function(exports) {\n var nodes = [], first = true;\n // export { x, y as z } [from '...']\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseExportSpecifier(exports));\n }\n return nodes\n };\n\n // Parses import declaration.\n\n pp$8.parseImport = function(node) {\n this.next();\n\n // import '...'\n if (this.type === types$1.string) {\n node.specifiers = empty$1;\n node.source = this.parseExprAtom();\n } else {\n node.specifiers = this.parseImportSpecifiers();\n this.expectContextual(\"from\");\n node.source = this.type === types$1.string ? this.parseExprAtom() : this.unexpected();\n }\n if (this.options.ecmaVersion >= 16)\n { node.attributes = this.parseWithClause(); }\n this.semicolon();\n return this.finishNode(node, \"ImportDeclaration\")\n };\n\n // Parses a comma-separated list of module imports.\n\n pp$8.parseImportSpecifier = function() {\n var node = this.startNode();\n node.imported = this.parseModuleExportName();\n\n if (this.eatContextual(\"as\")) {\n node.local = this.parseIdent();\n } else {\n this.checkUnreserved(node.imported);\n node.local = node.imported;\n }\n this.checkLValSimple(node.local, BIND_LEXICAL);\n\n return this.finishNode(node, \"ImportSpecifier\")\n };\n\n pp$8.parseImportDefaultSpecifier = function() {\n // import defaultObj, { x, y as z } from '...'\n var node = this.startNode();\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportDefaultSpecifier\")\n };\n\n pp$8.parseImportNamespaceSpecifier = function() {\n var node = this.startNode();\n this.next();\n this.expectContextual(\"as\");\n node.local = this.parseIdent();\n this.checkLValSimple(node.local, BIND_LEXICAL);\n return this.finishNode(node, \"ImportNamespaceSpecifier\")\n };\n\n pp$8.parseImportSpecifiers = function() {\n var nodes = [], first = true;\n if (this.type === types$1.name) {\n nodes.push(this.parseImportDefaultSpecifier());\n if (!this.eat(types$1.comma)) { return nodes }\n }\n if (this.type === types$1.star) {\n nodes.push(this.parseImportNamespaceSpecifier());\n return nodes\n }\n this.expect(types$1.braceL);\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n nodes.push(this.parseImportSpecifier());\n }\n return nodes\n };\n\n pp$8.parseWithClause = function() {\n var nodes = [];\n if (!this.eat(types$1._with)) {\n return nodes\n }\n this.expect(types$1.braceL);\n var attributeKeys = {};\n var first = true;\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var attr = this.parseImportAttribute();\n var keyName = attr.key.type === \"Identifier\" ? attr.key.name : attr.key.value;\n if (hasOwn(attributeKeys, keyName))\n { this.raiseRecoverable(attr.key.start, \"Duplicate attribute key '\" + keyName + \"'\"); }\n attributeKeys[keyName] = true;\n nodes.push(attr);\n }\n return nodes\n };\n\n pp$8.parseImportAttribute = function() {\n var node = this.startNode();\n node.key = this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\");\n this.expect(types$1.colon);\n if (this.type !== types$1.string) {\n this.unexpected();\n }\n node.value = this.parseExprAtom();\n return this.finishNode(node, \"ImportAttribute\")\n };\n\n pp$8.parseModuleExportName = function() {\n if (this.options.ecmaVersion >= 13 && this.type === types$1.string) {\n var stringLiteral = this.parseLiteral(this.value);\n if (loneSurrogate.test(stringLiteral.value)) {\n this.raise(stringLiteral.start, \"An export name cannot include a lone surrogate.\");\n }\n return stringLiteral\n }\n return this.parseIdent(true)\n };\n\n // Set `ExpressionStatement#directive` property for directive prologues.\n pp$8.adaptDirectivePrologue = function(statements) {\n for (var i = 0; i < statements.length && this.isDirectiveCandidate(statements[i]); ++i) {\n statements[i].directive = statements[i].expression.raw.slice(1, -1);\n }\n };\n pp$8.isDirectiveCandidate = function(statement) {\n return (\n this.options.ecmaVersion >= 5 &&\n statement.type === \"ExpressionStatement\" &&\n statement.expression.type === \"Literal\" &&\n typeof statement.expression.value === \"string\" &&\n // Reject parenthesized strings.\n (this.input[statement.start] === \"\\\"\" || this.input[statement.start] === \"'\")\n )\n };\n\n var pp$7 = Parser.prototype;\n\n // Convert existing expression atom to assignable pattern\n // if possible.\n\n pp$7.toAssignable = function(node, isBinding, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 6 && node) {\n switch (node.type) {\n case \"Identifier\":\n if (this.inAsync && node.name === \"await\")\n { this.raise(node.start, \"Cannot use 'await' as identifier inside an async function\"); }\n break\n\n case \"ObjectPattern\":\n case \"ArrayPattern\":\n case \"AssignmentPattern\":\n case \"RestElement\":\n break\n\n case \"ObjectExpression\":\n node.type = \"ObjectPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n for (var i = 0, list = node.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.toAssignable(prop, isBinding);\n // Early error:\n // AssignmentRestProperty[Yield, Await] :\n // `...` DestructuringAssignmentTarget[Yield, Await]\n //\n // It is a Syntax Error if |DestructuringAssignmentTarget| is an |ArrayLiteral| or an |ObjectLiteral|.\n if (\n prop.type === \"RestElement\" &&\n (prop.argument.type === \"ArrayPattern\" || prop.argument.type === \"ObjectPattern\")\n ) {\n this.raise(prop.argument.start, \"Unexpected token\");\n }\n }\n break\n\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n if (node.kind !== \"init\") { this.raise(node.key.start, \"Object pattern can't contain getter or setter\"); }\n this.toAssignable(node.value, isBinding);\n break\n\n case \"ArrayExpression\":\n node.type = \"ArrayPattern\";\n if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n this.toAssignableList(node.elements, isBinding);\n break\n\n case \"SpreadElement\":\n node.type = \"RestElement\";\n this.toAssignable(node.argument, isBinding);\n if (node.argument.type === \"AssignmentPattern\")\n { this.raise(node.argument.start, \"Rest elements cannot have a default value\"); }\n break\n\n case \"AssignmentExpression\":\n if (node.operator !== \"=\") { this.raise(node.left.end, \"Only '=' operator can be used for specifying default value.\"); }\n node.type = \"AssignmentPattern\";\n delete node.operator;\n this.toAssignable(node.left, isBinding);\n break\n\n case \"ParenthesizedExpression\":\n this.toAssignable(node.expression, isBinding, refDestructuringErrors);\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(node.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (!isBinding) { break }\n\n default:\n this.raise(node.start, \"Assigning to rvalue\");\n }\n } else if (refDestructuringErrors) { this.checkPatternErrors(refDestructuringErrors, true); }\n return node\n };\n\n // Convert list of expression atoms to binding list.\n\n pp$7.toAssignableList = function(exprList, isBinding) {\n var end = exprList.length;\n for (var i = 0; i < end; i++) {\n var elt = exprList[i];\n if (elt) { this.toAssignable(elt, isBinding); }\n }\n if (end) {\n var last = exprList[end - 1];\n if (this.options.ecmaVersion === 6 && isBinding && last && last.type === \"RestElement\" && last.argument.type !== \"Identifier\")\n { this.unexpected(last.argument.start); }\n }\n return exprList\n };\n\n // Parses spread element.\n\n pp$7.parseSpread = function(refDestructuringErrors) {\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n return this.finishNode(node, \"SpreadElement\")\n };\n\n pp$7.parseRestBinding = function() {\n var node = this.startNode();\n this.next();\n\n // RestElement inside of a function parameter must be an identifier\n if (this.options.ecmaVersion === 6 && this.type !== types$1.name)\n { this.unexpected(); }\n\n node.argument = this.parseBindingAtom();\n\n return this.finishNode(node, \"RestElement\")\n };\n\n // Parses lvalue (assignable) atom.\n\n pp$7.parseBindingAtom = function() {\n if (this.options.ecmaVersion >= 6) {\n switch (this.type) {\n case types$1.bracketL:\n var node = this.startNode();\n this.next();\n node.elements = this.parseBindingList(types$1.bracketR, true, true);\n return this.finishNode(node, \"ArrayPattern\")\n\n case types$1.braceL:\n return this.parseObj(true)\n }\n }\n return this.parseIdent()\n };\n\n pp$7.parseBindingList = function(close, allowEmpty, allowTrailingComma, allowModifiers) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (first) { first = false; }\n else { this.expect(types$1.comma); }\n if (allowEmpty && this.type === types$1.comma) {\n elts.push(null);\n } else if (allowTrailingComma && this.afterTrailingComma(close)) {\n break\n } else if (this.type === types$1.ellipsis) {\n var rest = this.parseRestBinding();\n this.parseBindingListItem(rest);\n elts.push(rest);\n if (this.type === types$1.comma) { this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\"); }\n this.expect(close);\n break\n } else {\n elts.push(this.parseAssignableListItem(allowModifiers));\n }\n }\n return elts\n };\n\n pp$7.parseAssignableListItem = function(allowModifiers) {\n var elem = this.parseMaybeDefault(this.start, this.startLoc);\n this.parseBindingListItem(elem);\n return elem\n };\n\n pp$7.parseBindingListItem = function(param) {\n return param\n };\n\n // Parses assignment pattern around given atom if possible.\n\n pp$7.parseMaybeDefault = function(startPos, startLoc, left) {\n left = left || this.parseBindingAtom();\n if (this.options.ecmaVersion < 6 || !this.eat(types$1.eq)) { return left }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.right = this.parseMaybeAssign();\n return this.finishNode(node, \"AssignmentPattern\")\n };\n\n // The following three functions all verify that a node is an lvalue —\n // something that can be bound, or assigned to. In order to do so, they perform\n // a variety of checks:\n //\n // - Check that none of the bound/assigned-to identifiers are reserved words.\n // - Record name declarations for bindings in the appropriate scope.\n // - Check duplicate argument names, if checkClashes is set.\n //\n // If a complex binding pattern is encountered (e.g., object and array\n // destructuring), the entire pattern is recursively checked.\n //\n // There are three versions of checkLVal*() appropriate for different\n // circumstances:\n //\n // - checkLValSimple() shall be used if the syntactic construct supports\n // nothing other than identifiers and member expressions. Parenthesized\n // expressions are also correctly handled. This is generally appropriate for\n // constructs for which the spec says\n //\n // > It is a Syntax Error if AssignmentTargetType of [the production] is not\n // > simple.\n //\n // It is also appropriate for checking if an identifier is valid and not\n // defined elsewhere, like import declarations or function/class identifiers.\n //\n // Examples where this is used include:\n // a += …;\n // import a from '…';\n // where a is the node to be checked.\n //\n // - checkLValPattern() shall be used if the syntactic construct supports\n // anything checkLValSimple() supports, as well as object and array\n // destructuring patterns. This is generally appropriate for constructs for\n // which the spec says\n //\n // > It is a Syntax Error if [the production] is neither an ObjectLiteral nor\n // > an ArrayLiteral and AssignmentTargetType of [the production] is not\n // > simple.\n //\n // Examples where this is used include:\n // (a = …);\n // const a = …;\n // try { … } catch (a) { … }\n // where a is the node to be checked.\n //\n // - checkLValInnerPattern() shall be used if the syntactic construct supports\n // anything checkLValPattern() supports, as well as default assignment\n // patterns, rest elements, and other constructs that may appear within an\n // object or array destructuring pattern.\n //\n // As a special case, function parameters also use checkLValInnerPattern(),\n // as they also support defaults and rest constructs.\n //\n // These functions deliberately support both assignment and binding constructs,\n // as the logic for both is exceedingly similar. If the node is the target of\n // an assignment, then bindingType should be set to BIND_NONE. Otherwise, it\n // should be set to the appropriate BIND_* constant, like BIND_VAR or\n // BIND_LEXICAL.\n //\n // If the function is called with a non-BIND_NONE bindingType, then\n // additionally a checkClashes object may be specified to allow checking for\n // duplicate argument names. checkClashes is ignored if the provided construct\n // is an assignment (i.e., bindingType is BIND_NONE).\n\n pp$7.checkLValSimple = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n var isBind = bindingType !== BIND_NONE;\n\n switch (expr.type) {\n case \"Identifier\":\n if (this.strict && this.reservedWordsStrictBind.test(expr.name))\n { this.raiseRecoverable(expr.start, (isBind ? \"Binding \" : \"Assigning to \") + expr.name + \" in strict mode\"); }\n if (isBind) {\n if (bindingType === BIND_LEXICAL && expr.name === \"let\")\n { this.raiseRecoverable(expr.start, \"let is disallowed as a lexically bound name\"); }\n if (checkClashes) {\n if (hasOwn(checkClashes, expr.name))\n { this.raiseRecoverable(expr.start, \"Argument name clash\"); }\n checkClashes[expr.name] = true;\n }\n if (bindingType !== BIND_OUTSIDE) { this.declareName(expr.name, bindingType, expr.start); }\n }\n break\n\n case \"ChainExpression\":\n this.raiseRecoverable(expr.start, \"Optional chaining cannot appear in left-hand side\");\n break\n\n case \"MemberExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding member expression\"); }\n break\n\n case \"ParenthesizedExpression\":\n if (isBind) { this.raiseRecoverable(expr.start, \"Binding parenthesized expression\"); }\n return this.checkLValSimple(expr.expression, bindingType, checkClashes)\n\n default:\n this.raise(expr.start, (isBind ? \"Binding\" : \"Assigning to\") + \" rvalue\");\n }\n };\n\n pp$7.checkLValPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"ObjectPattern\":\n for (var i = 0, list = expr.properties; i < list.length; i += 1) {\n var prop = list[i];\n\n this.checkLValInnerPattern(prop, bindingType, checkClashes);\n }\n break\n\n case \"ArrayPattern\":\n for (var i$1 = 0, list$1 = expr.elements; i$1 < list$1.length; i$1 += 1) {\n var elem = list$1[i$1];\n\n if (elem) { this.checkLValInnerPattern(elem, bindingType, checkClashes); }\n }\n break\n\n default:\n this.checkLValSimple(expr, bindingType, checkClashes);\n }\n };\n\n pp$7.checkLValInnerPattern = function(expr, bindingType, checkClashes) {\n if ( bindingType === void 0 ) bindingType = BIND_NONE;\n\n switch (expr.type) {\n case \"Property\":\n // AssignmentProperty has type === \"Property\"\n this.checkLValInnerPattern(expr.value, bindingType, checkClashes);\n break\n\n case \"AssignmentPattern\":\n this.checkLValPattern(expr.left, bindingType, checkClashes);\n break\n\n case \"RestElement\":\n this.checkLValPattern(expr.argument, bindingType, checkClashes);\n break\n\n default:\n this.checkLValPattern(expr, bindingType, checkClashes);\n }\n };\n\n // The algorithm used to determine whether a regexp can appear at a\n // given point in the program is loosely based on sweet.js' approach.\n // See https://github.com/mozilla/sweet.js/wiki/design\n\n\n var TokContext = function TokContext(token, isExpr, preserveSpace, override, generator) {\n this.token = token;\n this.isExpr = !!isExpr;\n this.preserveSpace = !!preserveSpace;\n this.override = override;\n this.generator = !!generator;\n };\n\n var types = {\n b_stat: new TokContext(\"{\", false),\n b_expr: new TokContext(\"{\", true),\n b_tmpl: new TokContext(\"${\", false),\n p_stat: new TokContext(\"(\", false),\n p_expr: new TokContext(\"(\", true),\n q_tmpl: new TokContext(\"`\", true, true, function (p) { return p.tryReadTemplateToken(); }),\n f_stat: new TokContext(\"function\", false),\n f_expr: new TokContext(\"function\", true),\n f_expr_gen: new TokContext(\"function\", true, false, null, true),\n f_gen: new TokContext(\"function\", false, false, null, true)\n };\n\n var pp$6 = Parser.prototype;\n\n pp$6.initialContext = function() {\n return [types.b_stat]\n };\n\n pp$6.curContext = function() {\n return this.context[this.context.length - 1]\n };\n\n pp$6.braceIsBlock = function(prevType) {\n var parent = this.curContext();\n if (parent === types.f_expr || parent === types.f_stat)\n { return true }\n if (prevType === types$1.colon && (parent === types.b_stat || parent === types.b_expr))\n { return !parent.isExpr }\n\n // The check for `tt.name && exprAllowed` detects whether we are\n // after a `yield` or `of` construct. See the `updateContext` for\n // `tt.name`.\n if (prevType === types$1._return || prevType === types$1.name && this.exprAllowed)\n { return lineBreak.test(this.input.slice(this.lastTokEnd, this.start)) }\n if (prevType === types$1._else || prevType === types$1.semi || prevType === types$1.eof || prevType === types$1.parenR || prevType === types$1.arrow)\n { return true }\n if (prevType === types$1.braceL)\n { return parent === types.b_stat }\n if (prevType === types$1._var || prevType === types$1._const || prevType === types$1.name)\n { return false }\n return !this.exprAllowed\n };\n\n pp$6.inGeneratorContext = function() {\n for (var i = this.context.length - 1; i >= 1; i--) {\n var context = this.context[i];\n if (context.token === \"function\")\n { return context.generator }\n }\n return false\n };\n\n pp$6.updateContext = function(prevType) {\n var update, type = this.type;\n if (type.keyword && prevType === types$1.dot)\n { this.exprAllowed = false; }\n else if (update = type.updateContext)\n { update.call(this, prevType); }\n else\n { this.exprAllowed = type.beforeExpr; }\n };\n\n // Used to handle edge cases when token context could not be inferred correctly during tokenization phase\n\n pp$6.overrideContext = function(tokenCtx) {\n if (this.curContext() !== tokenCtx) {\n this.context[this.context.length - 1] = tokenCtx;\n }\n };\n\n // Token-specific context update code\n\n types$1.parenR.updateContext = types$1.braceR.updateContext = function() {\n if (this.context.length === 1) {\n this.exprAllowed = true;\n return\n }\n var out = this.context.pop();\n if (out === types.b_stat && this.curContext().token === \"function\") {\n out = this.context.pop();\n }\n this.exprAllowed = !out.isExpr;\n };\n\n types$1.braceL.updateContext = function(prevType) {\n this.context.push(this.braceIsBlock(prevType) ? types.b_stat : types.b_expr);\n this.exprAllowed = true;\n };\n\n types$1.dollarBraceL.updateContext = function() {\n this.context.push(types.b_tmpl);\n this.exprAllowed = true;\n };\n\n types$1.parenL.updateContext = function(prevType) {\n var statementParens = prevType === types$1._if || prevType === types$1._for || prevType === types$1._with || prevType === types$1._while;\n this.context.push(statementParens ? types.p_stat : types.p_expr);\n this.exprAllowed = true;\n };\n\n types$1.incDec.updateContext = function() {\n // tokExprAllowed stays unchanged\n };\n\n types$1._function.updateContext = types$1._class.updateContext = function(prevType) {\n if (prevType.beforeExpr && prevType !== types$1._else &&\n !(prevType === types$1.semi && this.curContext() !== types.p_stat) &&\n !(prevType === types$1._return && lineBreak.test(this.input.slice(this.lastTokEnd, this.start))) &&\n !((prevType === types$1.colon || prevType === types$1.braceL) && this.curContext() === types.b_stat))\n { this.context.push(types.f_expr); }\n else\n { this.context.push(types.f_stat); }\n this.exprAllowed = false;\n };\n\n types$1.colon.updateContext = function() {\n if (this.curContext().token === \"function\") { this.context.pop(); }\n this.exprAllowed = true;\n };\n\n types$1.backQuote.updateContext = function() {\n if (this.curContext() === types.q_tmpl)\n { this.context.pop(); }\n else\n { this.context.push(types.q_tmpl); }\n this.exprAllowed = false;\n };\n\n types$1.star.updateContext = function(prevType) {\n if (prevType === types$1._function) {\n var index = this.context.length - 1;\n if (this.context[index] === types.f_expr)\n { this.context[index] = types.f_expr_gen; }\n else\n { this.context[index] = types.f_gen; }\n }\n this.exprAllowed = true;\n };\n\n types$1.name.updateContext = function(prevType) {\n var allowed = false;\n if (this.options.ecmaVersion >= 6 && prevType !== types$1.dot) {\n if (this.value === \"of\" && !this.exprAllowed ||\n this.value === \"yield\" && this.inGeneratorContext())\n { allowed = true; }\n }\n this.exprAllowed = allowed;\n };\n\n // A recursive descent parser operates by defining functions for all\n // syntactic elements, and recursively calling those, each function\n // advancing the input stream and returning an AST node. Precedence\n // of constructs (for example, the fact that `!x[1]` means `!(x[1])`\n // instead of `(!x)[1]` is handled by the fact that the parser\n // function that parses unary prefix operators is called first, and\n // in turn calls the function that parses `[]` subscripts — that\n // way, it'll receive the node for `x[1]` already parsed, and wraps\n // *that* in the unary operator node.\n //\n // Acorn uses an [operator precedence parser][opp] to handle binary\n // operator precedence, because it is much more compact than using\n // the technique outlined above, which uses different, nesting\n // functions to specify precedence, for all of the ten binary\n // precedence levels that JavaScript defines.\n //\n // [opp]: http://en.wikipedia.org/wiki/Operator-precedence_parser\n\n\n var pp$5 = Parser.prototype;\n\n // Check if property name clashes with already added.\n // Object/class getters and setters are not allowed to clash —\n // either with each other or with an init property — and in\n // strict mode, init properties are also not allowed to be repeated.\n\n pp$5.checkPropClash = function(prop, propHash, refDestructuringErrors) {\n if (this.options.ecmaVersion >= 9 && prop.type === \"SpreadElement\")\n { return }\n if (this.options.ecmaVersion >= 6 && (prop.computed || prop.method || prop.shorthand))\n { return }\n var key = prop.key;\n var name;\n switch (key.type) {\n case \"Identifier\": name = key.name; break\n case \"Literal\": name = String(key.value); break\n default: return\n }\n var kind = prop.kind;\n if (this.options.ecmaVersion >= 6) {\n if (name === \"__proto__\" && kind === \"init\") {\n if (propHash.proto) {\n if (refDestructuringErrors) {\n if (refDestructuringErrors.doubleProto < 0) {\n refDestructuringErrors.doubleProto = key.start;\n }\n } else {\n this.raiseRecoverable(key.start, \"Redefinition of __proto__ property\");\n }\n }\n propHash.proto = true;\n }\n return\n }\n name = \"$\" + name;\n var other = propHash[name];\n if (other) {\n var redefinition;\n if (kind === \"init\") {\n redefinition = this.strict && other.init || other.get || other.set;\n } else {\n redefinition = other.init || other[kind];\n }\n if (redefinition)\n { this.raiseRecoverable(key.start, \"Redefinition of property\"); }\n } else {\n other = propHash[name] = {\n init: false,\n get: false,\n set: false\n };\n }\n other[kind] = true;\n };\n\n // ### Expression parsing\n\n // These nest, from the most general expression type at the top to\n // 'atomic', nondivisible expression types at the bottom. Most of\n // the functions will simply let the function(s) below them parse,\n // and, *if* the syntactic construct they handle is present, wrap\n // the AST node that the inner parser gave them in another node.\n\n // Parse a full expression. The optional arguments are used to\n // forbid the `in` operator (in for loops initalization expressions)\n // and provide reference for storing '=' operator inside shorthand\n // property assignment in contexts where both object expression\n // and object pattern might appear (so it's possible to raise\n // delayed syntax error at correct position).\n\n pp$5.parseExpression = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeAssign(forInit, refDestructuringErrors);\n if (this.type === types$1.comma) {\n var node = this.startNodeAt(startPos, startLoc);\n node.expressions = [expr];\n while (this.eat(types$1.comma)) { node.expressions.push(this.parseMaybeAssign(forInit, refDestructuringErrors)); }\n return this.finishNode(node, \"SequenceExpression\")\n }\n return expr\n };\n\n // Parse an assignment expression. This includes applications of\n // operators like `+=`.\n\n pp$5.parseMaybeAssign = function(forInit, refDestructuringErrors, afterLeftParse) {\n if (this.isContextual(\"yield\")) {\n if (this.inGenerator) { return this.parseYield(forInit) }\n // The tokenizer will assume an expression is allowed after\n // `yield`, but this isn't that kind of yield\n else { this.exprAllowed = false; }\n }\n\n var ownDestructuringErrors = false, oldParenAssign = -1, oldTrailingComma = -1, oldDoubleProto = -1;\n if (refDestructuringErrors) {\n oldParenAssign = refDestructuringErrors.parenthesizedAssign;\n oldTrailingComma = refDestructuringErrors.trailingComma;\n oldDoubleProto = refDestructuringErrors.doubleProto;\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = -1;\n } else {\n refDestructuringErrors = new DestructuringErrors;\n ownDestructuringErrors = true;\n }\n\n var startPos = this.start, startLoc = this.startLoc;\n if (this.type === types$1.parenL || this.type === types$1.name) {\n this.potentialArrowAt = this.start;\n this.potentialArrowInForAwait = forInit === \"await\";\n }\n var left = this.parseMaybeConditional(forInit, refDestructuringErrors);\n if (afterLeftParse) { left = afterLeftParse.call(this, left, startPos, startLoc); }\n if (this.type.isAssign) {\n var node = this.startNodeAt(startPos, startLoc);\n node.operator = this.value;\n if (this.type === types$1.eq)\n { left = this.toAssignable(left, false, refDestructuringErrors); }\n if (!ownDestructuringErrors) {\n refDestructuringErrors.parenthesizedAssign = refDestructuringErrors.trailingComma = refDestructuringErrors.doubleProto = -1;\n }\n if (refDestructuringErrors.shorthandAssign >= left.start)\n { refDestructuringErrors.shorthandAssign = -1; } // reset because shorthand default was used correctly\n if (this.type === types$1.eq)\n { this.checkLValPattern(left); }\n else\n { this.checkLValSimple(left); }\n node.left = left;\n this.next();\n node.right = this.parseMaybeAssign(forInit);\n if (oldDoubleProto > -1) { refDestructuringErrors.doubleProto = oldDoubleProto; }\n return this.finishNode(node, \"AssignmentExpression\")\n } else {\n if (ownDestructuringErrors) { this.checkExpressionErrors(refDestructuringErrors, true); }\n }\n if (oldParenAssign > -1) { refDestructuringErrors.parenthesizedAssign = oldParenAssign; }\n if (oldTrailingComma > -1) { refDestructuringErrors.trailingComma = oldTrailingComma; }\n return left\n };\n\n // Parse a ternary conditional (`?:`) operator.\n\n pp$5.parseMaybeConditional = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprOps(forInit, refDestructuringErrors);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n if (this.eat(types$1.question)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.test = expr;\n node.consequent = this.parseMaybeAssign();\n this.expect(types$1.colon);\n node.alternate = this.parseMaybeAssign(forInit);\n return this.finishNode(node, \"ConditionalExpression\")\n }\n return expr\n };\n\n // Start the precedence parser.\n\n pp$5.parseExprOps = function(forInit, refDestructuringErrors) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseMaybeUnary(refDestructuringErrors, false, false, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n return expr.start === startPos && expr.type === \"ArrowFunctionExpression\" ? expr : this.parseExprOp(expr, startPos, startLoc, -1, forInit)\n };\n\n // Parse binary operators with the operator precedence parsing\n // algorithm. `left` is the left-hand side of the operator.\n // `minPrec` provides context that allows the function to stop and\n // defer further parser to one of its callers when it encounters an\n // operator that has a lower precedence than the set it is parsing.\n\n pp$5.parseExprOp = function(left, leftStartPos, leftStartLoc, minPrec, forInit) {\n var prec = this.type.binop;\n if (prec != null && (!forInit || this.type !== types$1._in)) {\n if (prec > minPrec) {\n var logical = this.type === types$1.logicalOR || this.type === types$1.logicalAND;\n var coalesce = this.type === types$1.coalesce;\n if (coalesce) {\n // Handle the precedence of `tt.coalesce` as equal to the range of logical expressions.\n // In other words, `node.right` shouldn't contain logical expressions in order to check the mixed error.\n prec = types$1.logicalAND.binop;\n }\n var op = this.value;\n this.next();\n var startPos = this.start, startLoc = this.startLoc;\n var right = this.parseExprOp(this.parseMaybeUnary(null, false, false, forInit), startPos, startLoc, prec, forInit);\n var node = this.buildBinary(leftStartPos, leftStartLoc, left, right, op, logical || coalesce);\n if ((logical && this.type === types$1.coalesce) || (coalesce && (this.type === types$1.logicalOR || this.type === types$1.logicalAND))) {\n this.raiseRecoverable(this.start, \"Logical expressions and coalesce expressions cannot be mixed. Wrap either by parentheses\");\n }\n return this.parseExprOp(node, leftStartPos, leftStartLoc, minPrec, forInit)\n }\n }\n return left\n };\n\n pp$5.buildBinary = function(startPos, startLoc, left, right, op, logical) {\n if (right.type === \"PrivateIdentifier\") { this.raise(right.start, \"Private identifier can only be left side of binary expression\"); }\n var node = this.startNodeAt(startPos, startLoc);\n node.left = left;\n node.operator = op;\n node.right = right;\n return this.finishNode(node, logical ? \"LogicalExpression\" : \"BinaryExpression\")\n };\n\n // Parse unary operators, both prefix and postfix.\n\n pp$5.parseMaybeUnary = function(refDestructuringErrors, sawUnary, incDec, forInit) {\n var startPos = this.start, startLoc = this.startLoc, expr;\n if (this.isContextual(\"await\") && this.canAwait) {\n expr = this.parseAwait(forInit);\n sawUnary = true;\n } else if (this.type.prefix) {\n var node = this.startNode(), update = this.type === types$1.incDec;\n node.operator = this.value;\n node.prefix = true;\n this.next();\n node.argument = this.parseMaybeUnary(null, true, update, forInit);\n this.checkExpressionErrors(refDestructuringErrors, true);\n if (update) { this.checkLValSimple(node.argument); }\n else if (this.strict && node.operator === \"delete\" && isLocalVariableAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Deleting local variable in strict mode\"); }\n else if (node.operator === \"delete\" && isPrivateFieldAccess(node.argument))\n { this.raiseRecoverable(node.start, \"Private fields can not be deleted\"); }\n else { sawUnary = true; }\n expr = this.finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n } else if (!sawUnary && this.type === types$1.privateId) {\n if ((forInit || this.privateNameStack.length === 0) && this.options.checkPrivateFields) { this.unexpected(); }\n expr = this.parsePrivateIdent();\n // only could be private fields in 'in', such as #x in obj\n if (this.type !== types$1._in) { this.unexpected(); }\n } else {\n expr = this.parseExprSubscripts(refDestructuringErrors, forInit);\n if (this.checkExpressionErrors(refDestructuringErrors)) { return expr }\n while (this.type.postfix && !this.canInsertSemicolon()) {\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.operator = this.value;\n node$1.prefix = false;\n node$1.argument = expr;\n this.checkLValSimple(expr);\n this.next();\n expr = this.finishNode(node$1, \"UpdateExpression\");\n }\n }\n\n if (!incDec && this.eat(types$1.starstar)) {\n if (sawUnary)\n { this.unexpected(this.lastTokStart); }\n else\n { return this.buildBinary(startPos, startLoc, expr, this.parseMaybeUnary(null, false, false, forInit), \"**\", false) }\n } else {\n return expr\n }\n };\n\n function isLocalVariableAccess(node) {\n return (\n node.type === \"Identifier\" ||\n node.type === \"ParenthesizedExpression\" && isLocalVariableAccess(node.expression)\n )\n }\n\n function isPrivateFieldAccess(node) {\n return (\n node.type === \"MemberExpression\" && node.property.type === \"PrivateIdentifier\" ||\n node.type === \"ChainExpression\" && isPrivateFieldAccess(node.expression) ||\n node.type === \"ParenthesizedExpression\" && isPrivateFieldAccess(node.expression)\n )\n }\n\n // Parse call, dot, and `[]`-subscript expressions.\n\n pp$5.parseExprSubscripts = function(refDestructuringErrors, forInit) {\n var startPos = this.start, startLoc = this.startLoc;\n var expr = this.parseExprAtom(refDestructuringErrors, forInit);\n if (expr.type === \"ArrowFunctionExpression\" && this.input.slice(this.lastTokStart, this.lastTokEnd) !== \")\")\n { return expr }\n var result = this.parseSubscripts(expr, startPos, startLoc, false, forInit);\n if (refDestructuringErrors && result.type === \"MemberExpression\") {\n if (refDestructuringErrors.parenthesizedAssign >= result.start) { refDestructuringErrors.parenthesizedAssign = -1; }\n if (refDestructuringErrors.parenthesizedBind >= result.start) { refDestructuringErrors.parenthesizedBind = -1; }\n if (refDestructuringErrors.trailingComma >= result.start) { refDestructuringErrors.trailingComma = -1; }\n }\n return result\n };\n\n pp$5.parseSubscripts = function(base, startPos, startLoc, noCalls, forInit) {\n var maybeAsyncArrow = this.options.ecmaVersion >= 8 && base.type === \"Identifier\" && base.name === \"async\" &&\n this.lastTokEnd === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 &&\n this.potentialArrowAt === base.start;\n var optionalChained = false;\n\n while (true) {\n var element = this.parseSubscript(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit);\n\n if (element.optional) { optionalChained = true; }\n if (element === base || element.type === \"ArrowFunctionExpression\") {\n if (optionalChained) {\n var chainNode = this.startNodeAt(startPos, startLoc);\n chainNode.expression = element;\n element = this.finishNode(chainNode, \"ChainExpression\");\n }\n return element\n }\n\n base = element;\n }\n };\n\n pp$5.shouldParseAsyncArrow = function() {\n return !this.canInsertSemicolon() && this.eat(types$1.arrow)\n };\n\n pp$5.parseSubscriptAsyncArrow = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, true, forInit)\n };\n\n pp$5.parseSubscript = function(base, startPos, startLoc, noCalls, maybeAsyncArrow, optionalChained, forInit) {\n var optionalSupported = this.options.ecmaVersion >= 11;\n var optional = optionalSupported && this.eat(types$1.questionDot);\n if (noCalls && optional) { this.raise(this.lastTokStart, \"Optional chaining cannot appear in the callee of new expressions\"); }\n\n var computed = this.eat(types$1.bracketL);\n if (computed || (optional && this.type !== types$1.parenL && this.type !== types$1.backQuote) || this.eat(types$1.dot)) {\n var node = this.startNodeAt(startPos, startLoc);\n node.object = base;\n if (computed) {\n node.property = this.parseExpression();\n this.expect(types$1.bracketR);\n } else if (this.type === types$1.privateId && base.type !== \"Super\") {\n node.property = this.parsePrivateIdent();\n } else {\n node.property = this.parseIdent(this.options.allowReserved !== \"never\");\n }\n node.computed = !!computed;\n if (optionalSupported) {\n node.optional = optional;\n }\n base = this.finishNode(node, \"MemberExpression\");\n } else if (!noCalls && this.eat(types$1.parenL)) {\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n var exprList = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false, refDestructuringErrors);\n if (maybeAsyncArrow && !optional && this.shouldParseAsyncArrow()) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n if (this.awaitIdentPos > 0)\n { this.raise(this.awaitIdentPos, \"Cannot use 'await' as identifier inside an async function\"); }\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.parseSubscriptAsyncArrow(startPos, startLoc, exprList, forInit)\n }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n this.awaitIdentPos = oldAwaitIdentPos || this.awaitIdentPos;\n var node$1 = this.startNodeAt(startPos, startLoc);\n node$1.callee = base;\n node$1.arguments = exprList;\n if (optionalSupported) {\n node$1.optional = optional;\n }\n base = this.finishNode(node$1, \"CallExpression\");\n } else if (this.type === types$1.backQuote) {\n if (optional || optionalChained) {\n this.raise(this.start, \"Optional chaining cannot appear in the tag of tagged template expressions\");\n }\n var node$2 = this.startNodeAt(startPos, startLoc);\n node$2.tag = base;\n node$2.quasi = this.parseTemplate({isTagged: true});\n base = this.finishNode(node$2, \"TaggedTemplateExpression\");\n }\n return base\n };\n\n // Parse an atomic expression — either a single token that is an\n // expression, an expression started by a keyword like `function` or\n // `new`, or an expression wrapped in punctuation like `()`, `[]`,\n // or `{}`.\n\n pp$5.parseExprAtom = function(refDestructuringErrors, forInit, forNew) {\n // If a division operator appears in an expression position, the\n // tokenizer got confused, and we force it to read a regexp instead.\n if (this.type === types$1.slash) { this.readRegexp(); }\n\n var node, canBeArrow = this.potentialArrowAt === this.start;\n switch (this.type) {\n case types$1._super:\n if (!this.allowSuper)\n { this.raise(this.start, \"'super' keyword outside a method\"); }\n node = this.startNode();\n this.next();\n if (this.type === types$1.parenL && !this.allowDirectSuper)\n { this.raise(node.start, \"super() call outside constructor of a subclass\"); }\n // The `super` keyword can appear at below:\n // SuperProperty:\n // super [ Expression ]\n // super . IdentifierName\n // SuperCall:\n // super ( Arguments )\n if (this.type !== types$1.dot && this.type !== types$1.bracketL && this.type !== types$1.parenL)\n { this.unexpected(); }\n return this.finishNode(node, \"Super\")\n\n case types$1._this:\n node = this.startNode();\n this.next();\n return this.finishNode(node, \"ThisExpression\")\n\n case types$1.name:\n var startPos = this.start, startLoc = this.startLoc, containsEsc = this.containsEsc;\n var id = this.parseIdent(false);\n if (this.options.ecmaVersion >= 8 && !containsEsc && id.name === \"async\" && !this.canInsertSemicolon() && this.eat(types$1._function)) {\n this.overrideContext(types.f_expr);\n return this.parseFunction(this.startNodeAt(startPos, startLoc), 0, false, true, forInit)\n }\n if (canBeArrow && !this.canInsertSemicolon()) {\n if (this.eat(types$1.arrow))\n { return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], false, forInit) }\n if (this.options.ecmaVersion >= 8 && id.name === \"async\" && this.type === types$1.name && !containsEsc &&\n (!this.potentialArrowInForAwait || this.value !== \"of\" || this.containsEsc)) {\n id = this.parseIdent(false);\n if (this.canInsertSemicolon() || !this.eat(types$1.arrow))\n { this.unexpected(); }\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), [id], true, forInit)\n }\n }\n return id\n\n case types$1.regexp:\n var value = this.value;\n node = this.parseLiteral(value.value);\n node.regex = {pattern: value.pattern, flags: value.flags};\n return node\n\n case types$1.num: case types$1.string:\n return this.parseLiteral(this.value)\n\n case types$1._null: case types$1._true: case types$1._false:\n node = this.startNode();\n node.value = this.type === types$1._null ? null : this.type === types$1._true;\n node.raw = this.type.keyword;\n this.next();\n return this.finishNode(node, \"Literal\")\n\n case types$1.parenL:\n var start = this.start, expr = this.parseParenAndDistinguishExpression(canBeArrow, forInit);\n if (refDestructuringErrors) {\n if (refDestructuringErrors.parenthesizedAssign < 0 && !this.isSimpleAssignTarget(expr))\n { refDestructuringErrors.parenthesizedAssign = start; }\n if (refDestructuringErrors.parenthesizedBind < 0)\n { refDestructuringErrors.parenthesizedBind = start; }\n }\n return expr\n\n case types$1.bracketL:\n node = this.startNode();\n this.next();\n node.elements = this.parseExprList(types$1.bracketR, true, true, refDestructuringErrors);\n return this.finishNode(node, \"ArrayExpression\")\n\n case types$1.braceL:\n this.overrideContext(types.b_expr);\n return this.parseObj(false, refDestructuringErrors)\n\n case types$1._function:\n node = this.startNode();\n this.next();\n return this.parseFunction(node, 0)\n\n case types$1._class:\n return this.parseClass(this.startNode(), false)\n\n case types$1._new:\n return this.parseNew()\n\n case types$1.backQuote:\n return this.parseTemplate()\n\n case types$1._import:\n if (this.options.ecmaVersion >= 11) {\n return this.parseExprImport(forNew)\n } else {\n return this.unexpected()\n }\n\n default:\n return this.parseExprAtomDefault()\n }\n };\n\n pp$5.parseExprAtomDefault = function() {\n this.unexpected();\n };\n\n pp$5.parseExprImport = function(forNew) {\n var node = this.startNode();\n\n // Consume `import` as an identifier for `import.meta`.\n // Because `this.parseIdent(true)` doesn't check escape sequences, it needs the check of `this.containsEsc`.\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword import\"); }\n this.next();\n\n if (this.type === types$1.parenL && !forNew) {\n return this.parseDynamicImport(node)\n } else if (this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"import\";\n node.meta = this.finishNode(meta, \"Identifier\");\n return this.parseImportMeta(node)\n } else {\n this.unexpected();\n }\n };\n\n pp$5.parseDynamicImport = function(node) {\n this.next(); // skip `(`\n\n // Parse node.source.\n node.source = this.parseMaybeAssign();\n\n if (this.options.ecmaVersion >= 16) {\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n node.options = this.parseMaybeAssign();\n if (!this.eat(types$1.parenR)) {\n this.expect(types$1.comma);\n if (!this.afterTrailingComma(types$1.parenR)) {\n this.unexpected();\n }\n }\n } else {\n node.options = null;\n }\n } else {\n node.options = null;\n }\n } else {\n // Verify ending.\n if (!this.eat(types$1.parenR)) {\n var errorPos = this.start;\n if (this.eat(types$1.comma) && this.eat(types$1.parenR)) {\n this.raiseRecoverable(errorPos, \"Trailing comma is not allowed in import()\");\n } else {\n this.unexpected(errorPos);\n }\n }\n }\n\n return this.finishNode(node, \"ImportExpression\")\n };\n\n pp$5.parseImportMeta = function(node) {\n this.next(); // skip `.`\n\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n\n if (node.property.name !== \"meta\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for import is 'import.meta'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'import.meta' must not contain escaped characters\"); }\n if (this.options.sourceType !== \"module\" && !this.options.allowImportExportEverywhere)\n { this.raiseRecoverable(node.start, \"Cannot use 'import.meta' outside a module\"); }\n\n return this.finishNode(node, \"MetaProperty\")\n };\n\n pp$5.parseLiteral = function(value) {\n var node = this.startNode();\n node.value = value;\n node.raw = this.input.slice(this.start, this.end);\n if (node.raw.charCodeAt(node.raw.length - 1) === 110) { node.bigint = node.raw.slice(0, -1).replace(/_/g, \"\"); }\n this.next();\n return this.finishNode(node, \"Literal\")\n };\n\n pp$5.parseParenExpression = function() {\n this.expect(types$1.parenL);\n var val = this.parseExpression();\n this.expect(types$1.parenR);\n return val\n };\n\n pp$5.shouldParseArrow = function(exprList) {\n return !this.canInsertSemicolon()\n };\n\n pp$5.parseParenAndDistinguishExpression = function(canBeArrow, forInit) {\n var startPos = this.start, startLoc = this.startLoc, val, allowTrailingComma = this.options.ecmaVersion >= 8;\n if (this.options.ecmaVersion >= 6) {\n this.next();\n\n var innerStartPos = this.start, innerStartLoc = this.startLoc;\n var exprList = [], first = true, lastIsComma = false;\n var refDestructuringErrors = new DestructuringErrors, oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, spreadStart;\n this.yieldPos = 0;\n this.awaitPos = 0;\n // Do not save awaitIdentPos to allow checking awaits nested in parameters\n while (this.type !== types$1.parenR) {\n first ? first = false : this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(types$1.parenR, true)) {\n lastIsComma = true;\n break\n } else if (this.type === types$1.ellipsis) {\n spreadStart = this.start;\n exprList.push(this.parseParenItem(this.parseRestBinding()));\n if (this.type === types$1.comma) {\n this.raiseRecoverable(\n this.start,\n \"Comma is not permitted after the rest element\"\n );\n }\n break\n } else {\n exprList.push(this.parseMaybeAssign(false, refDestructuringErrors, this.parseParenItem));\n }\n }\n var innerEndPos = this.lastTokEnd, innerEndLoc = this.lastTokEndLoc;\n this.expect(types$1.parenR);\n\n if (canBeArrow && this.shouldParseArrow(exprList) && this.eat(types$1.arrow)) {\n this.checkPatternErrors(refDestructuringErrors, false);\n this.checkYieldAwaitInDefaultParams();\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n return this.parseParenArrowList(startPos, startLoc, exprList, forInit)\n }\n\n if (!exprList.length || lastIsComma) { this.unexpected(this.lastTokStart); }\n if (spreadStart) { this.unexpected(spreadStart); }\n this.checkExpressionErrors(refDestructuringErrors, true);\n this.yieldPos = oldYieldPos || this.yieldPos;\n this.awaitPos = oldAwaitPos || this.awaitPos;\n\n if (exprList.length > 1) {\n val = this.startNodeAt(innerStartPos, innerStartLoc);\n val.expressions = exprList;\n this.finishNodeAt(val, \"SequenceExpression\", innerEndPos, innerEndLoc);\n } else {\n val = exprList[0];\n }\n } else {\n val = this.parseParenExpression();\n }\n\n if (this.options.preserveParens) {\n var par = this.startNodeAt(startPos, startLoc);\n par.expression = val;\n return this.finishNode(par, \"ParenthesizedExpression\")\n } else {\n return val\n }\n };\n\n pp$5.parseParenItem = function(item) {\n return item\n };\n\n pp$5.parseParenArrowList = function(startPos, startLoc, exprList, forInit) {\n return this.parseArrowExpression(this.startNodeAt(startPos, startLoc), exprList, false, forInit)\n };\n\n // New's precedence is slightly tricky. It must allow its argument to\n // be a `[]` or dot subscript expression, but not a call — at least,\n // not without wrapping it in parentheses. Thus, it uses the noCalls\n // argument to parseSubscripts to prevent it from consuming the\n // argument list.\n\n var empty = [];\n\n pp$5.parseNew = function() {\n if (this.containsEsc) { this.raiseRecoverable(this.start, \"Escape sequence in keyword new\"); }\n var node = this.startNode();\n this.next();\n if (this.options.ecmaVersion >= 6 && this.type === types$1.dot) {\n var meta = this.startNodeAt(node.start, node.loc && node.loc.start);\n meta.name = \"new\";\n node.meta = this.finishNode(meta, \"Identifier\");\n this.next();\n var containsEsc = this.containsEsc;\n node.property = this.parseIdent(true);\n if (node.property.name !== \"target\")\n { this.raiseRecoverable(node.property.start, \"The only valid meta property for new is 'new.target'\"); }\n if (containsEsc)\n { this.raiseRecoverable(node.start, \"'new.target' must not contain escaped characters\"); }\n if (!this.allowNewDotTarget)\n { this.raiseRecoverable(node.start, \"'new.target' can only be used in functions and class static block\"); }\n return this.finishNode(node, \"MetaProperty\")\n }\n var startPos = this.start, startLoc = this.startLoc;\n node.callee = this.parseSubscripts(this.parseExprAtom(null, false, true), startPos, startLoc, true, false);\n if (this.eat(types$1.parenL)) { node.arguments = this.parseExprList(types$1.parenR, this.options.ecmaVersion >= 8, false); }\n else { node.arguments = empty; }\n return this.finishNode(node, \"NewExpression\")\n };\n\n // Parse template expression.\n\n pp$5.parseTemplateElement = function(ref) {\n var isTagged = ref.isTagged;\n\n var elem = this.startNode();\n if (this.type === types$1.invalidTemplate) {\n if (!isTagged) {\n this.raiseRecoverable(this.start, \"Bad escape sequence in untagged template literal\");\n }\n elem.value = {\n raw: this.value.replace(/\\r\\n?/g, \"\\n\"),\n cooked: null\n };\n } else {\n elem.value = {\n raw: this.input.slice(this.start, this.end).replace(/\\r\\n?/g, \"\\n\"),\n cooked: this.value\n };\n }\n this.next();\n elem.tail = this.type === types$1.backQuote;\n return this.finishNode(elem, \"TemplateElement\")\n };\n\n pp$5.parseTemplate = function(ref) {\n if ( ref === void 0 ) ref = {};\n var isTagged = ref.isTagged; if ( isTagged === void 0 ) isTagged = false;\n\n var node = this.startNode();\n this.next();\n node.expressions = [];\n var curElt = this.parseTemplateElement({isTagged: isTagged});\n node.quasis = [curElt];\n while (!curElt.tail) {\n if (this.type === types$1.eof) { this.raise(this.pos, \"Unterminated template literal\"); }\n this.expect(types$1.dollarBraceL);\n node.expressions.push(this.parseExpression());\n this.expect(types$1.braceR);\n node.quasis.push(curElt = this.parseTemplateElement({isTagged: isTagged}));\n }\n this.next();\n return this.finishNode(node, \"TemplateLiteral\")\n };\n\n pp$5.isAsyncProp = function(prop) {\n return !prop.computed && prop.key.type === \"Identifier\" && prop.key.name === \"async\" &&\n (this.type === types$1.name || this.type === types$1.num || this.type === types$1.string || this.type === types$1.bracketL || this.type.keyword || (this.options.ecmaVersion >= 9 && this.type === types$1.star)) &&\n !lineBreak.test(this.input.slice(this.lastTokEnd, this.start))\n };\n\n // Parse an object literal or binding pattern.\n\n pp$5.parseObj = function(isPattern, refDestructuringErrors) {\n var node = this.startNode(), first = true, propHash = {};\n node.properties = [];\n this.next();\n while (!this.eat(types$1.braceR)) {\n if (!first) {\n this.expect(types$1.comma);\n if (this.options.ecmaVersion >= 5 && this.afterTrailingComma(types$1.braceR)) { break }\n } else { first = false; }\n\n var prop = this.parseProperty(isPattern, refDestructuringErrors);\n if (!isPattern) { this.checkPropClash(prop, propHash, refDestructuringErrors); }\n node.properties.push(prop);\n }\n return this.finishNode(node, isPattern ? \"ObjectPattern\" : \"ObjectExpression\")\n };\n\n pp$5.parseProperty = function(isPattern, refDestructuringErrors) {\n var prop = this.startNode(), isGenerator, isAsync, startPos, startLoc;\n if (this.options.ecmaVersion >= 9 && this.eat(types$1.ellipsis)) {\n if (isPattern) {\n prop.argument = this.parseIdent(false);\n if (this.type === types$1.comma) {\n this.raiseRecoverable(this.start, \"Comma is not permitted after the rest element\");\n }\n return this.finishNode(prop, \"RestElement\")\n }\n // Parse argument.\n prop.argument = this.parseMaybeAssign(false, refDestructuringErrors);\n // To disallow trailing comma via `this.toAssignable()`.\n if (this.type === types$1.comma && refDestructuringErrors && refDestructuringErrors.trailingComma < 0) {\n refDestructuringErrors.trailingComma = this.start;\n }\n // Finish\n return this.finishNode(prop, \"SpreadElement\")\n }\n if (this.options.ecmaVersion >= 6) {\n prop.method = false;\n prop.shorthand = false;\n if (isPattern || refDestructuringErrors) {\n startPos = this.start;\n startLoc = this.startLoc;\n }\n if (!isPattern)\n { isGenerator = this.eat(types$1.star); }\n }\n var containsEsc = this.containsEsc;\n this.parsePropertyName(prop);\n if (!isPattern && !containsEsc && this.options.ecmaVersion >= 8 && !isGenerator && this.isAsyncProp(prop)) {\n isAsync = true;\n isGenerator = this.options.ecmaVersion >= 9 && this.eat(types$1.star);\n this.parsePropertyName(prop);\n } else {\n isAsync = false;\n }\n this.parsePropertyValue(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc);\n return this.finishNode(prop, \"Property\")\n };\n\n pp$5.parseGetterSetter = function(prop) {\n prop.kind = prop.key.name;\n this.parsePropertyName(prop);\n prop.value = this.parseMethod(false);\n var paramCount = prop.kind === \"get\" ? 0 : 1;\n if (prop.value.params.length !== paramCount) {\n var start = prop.value.start;\n if (prop.kind === \"get\")\n { this.raiseRecoverable(start, \"getter should have no params\"); }\n else\n { this.raiseRecoverable(start, \"setter should have exactly one param\"); }\n } else {\n if (prop.kind === \"set\" && prop.value.params[0].type === \"RestElement\")\n { this.raiseRecoverable(prop.value.params[0].start, \"Setter cannot use rest params\"); }\n }\n };\n\n pp$5.parsePropertyValue = function(prop, isPattern, isGenerator, isAsync, startPos, startLoc, refDestructuringErrors, containsEsc) {\n if ((isGenerator || isAsync) && this.type === types$1.colon)\n { this.unexpected(); }\n\n if (this.eat(types$1.colon)) {\n prop.value = isPattern ? this.parseMaybeDefault(this.start, this.startLoc) : this.parseMaybeAssign(false, refDestructuringErrors);\n prop.kind = \"init\";\n } else if (this.options.ecmaVersion >= 6 && this.type === types$1.parenL) {\n if (isPattern) { this.unexpected(); }\n prop.kind = \"init\";\n prop.method = true;\n prop.value = this.parseMethod(isGenerator, isAsync);\n } else if (!isPattern && !containsEsc &&\n this.options.ecmaVersion >= 5 && !prop.computed && prop.key.type === \"Identifier\" &&\n (prop.key.name === \"get\" || prop.key.name === \"set\") &&\n (this.type !== types$1.comma && this.type !== types$1.braceR && this.type !== types$1.eq)) {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.parseGetterSetter(prop);\n } else if (this.options.ecmaVersion >= 6 && !prop.computed && prop.key.type === \"Identifier\") {\n if (isGenerator || isAsync) { this.unexpected(); }\n this.checkUnreserved(prop.key);\n if (prop.key.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = startPos; }\n prop.kind = \"init\";\n if (isPattern) {\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else if (this.type === types$1.eq && refDestructuringErrors) {\n if (refDestructuringErrors.shorthandAssign < 0)\n { refDestructuringErrors.shorthandAssign = this.start; }\n prop.value = this.parseMaybeDefault(startPos, startLoc, this.copyNode(prop.key));\n } else {\n prop.value = this.copyNode(prop.key);\n }\n prop.shorthand = true;\n } else { this.unexpected(); }\n };\n\n pp$5.parsePropertyName = function(prop) {\n if (this.options.ecmaVersion >= 6) {\n if (this.eat(types$1.bracketL)) {\n prop.computed = true;\n prop.key = this.parseMaybeAssign();\n this.expect(types$1.bracketR);\n return prop.key\n } else {\n prop.computed = false;\n }\n }\n return prop.key = this.type === types$1.num || this.type === types$1.string ? this.parseExprAtom() : this.parseIdent(this.options.allowReserved !== \"never\")\n };\n\n // Initialize empty function node.\n\n pp$5.initFunction = function(node) {\n node.id = null;\n if (this.options.ecmaVersion >= 6) { node.generator = node.expression = false; }\n if (this.options.ecmaVersion >= 8) { node.async = false; }\n };\n\n // Parse object or class method.\n\n pp$5.parseMethod = function(isGenerator, isAsync, allowDirectSuper) {\n var node = this.startNode(), oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.initFunction(node);\n if (this.options.ecmaVersion >= 6)\n { node.generator = isGenerator; }\n if (this.options.ecmaVersion >= 8)\n { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n this.enterScope(functionFlags(isAsync, node.generator) | SCOPE_SUPER | (allowDirectSuper ? SCOPE_DIRECT_SUPER : 0));\n\n this.expect(types$1.parenL);\n node.params = this.parseBindingList(types$1.parenR, false, this.options.ecmaVersion >= 8);\n this.checkYieldAwaitInDefaultParams();\n this.parseFunctionBody(node, false, true, false);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"FunctionExpression\")\n };\n\n // Parse arrow function expression with given parameters.\n\n pp$5.parseArrowExpression = function(node, params, isAsync, forInit) {\n var oldYieldPos = this.yieldPos, oldAwaitPos = this.awaitPos, oldAwaitIdentPos = this.awaitIdentPos;\n\n this.enterScope(functionFlags(isAsync, false) | SCOPE_ARROW);\n this.initFunction(node);\n if (this.options.ecmaVersion >= 8) { node.async = !!isAsync; }\n\n this.yieldPos = 0;\n this.awaitPos = 0;\n this.awaitIdentPos = 0;\n\n node.params = this.toAssignableList(params, true);\n this.parseFunctionBody(node, true, false, forInit);\n\n this.yieldPos = oldYieldPos;\n this.awaitPos = oldAwaitPos;\n this.awaitIdentPos = oldAwaitIdentPos;\n return this.finishNode(node, \"ArrowFunctionExpression\")\n };\n\n // Parse function body and check parameters.\n\n pp$5.parseFunctionBody = function(node, isArrowFunction, isMethod, forInit) {\n var isExpression = isArrowFunction && this.type !== types$1.braceL;\n var oldStrict = this.strict, useStrict = false;\n\n if (isExpression) {\n node.body = this.parseMaybeAssign(forInit);\n node.expression = true;\n this.checkParams(node, false);\n } else {\n var nonSimple = this.options.ecmaVersion >= 7 && !this.isSimpleParamList(node.params);\n if (!oldStrict || nonSimple) {\n useStrict = this.strictDirective(this.end);\n // If this is a strict mode function, verify that argument names\n // are not repeated, and it does not try to bind the words `eval`\n // or `arguments`.\n if (useStrict && nonSimple)\n { this.raiseRecoverable(node.start, \"Illegal 'use strict' directive in function with non-simple parameter list\"); }\n }\n // Start a new scope with regard to labels and the `inFunction`\n // flag (restore them to their old value afterwards).\n var oldLabels = this.labels;\n this.labels = [];\n if (useStrict) { this.strict = true; }\n\n // Add the params to varDeclaredNames to ensure that an error is thrown\n // if a let/const declaration in the function clashes with one of the params.\n this.checkParams(node, !oldStrict && !useStrict && !isArrowFunction && !isMethod && this.isSimpleParamList(node.params));\n // Ensure the function name isn't a forbidden identifier in strict mode, e.g. 'eval'\n if (this.strict && node.id) { this.checkLValSimple(node.id, BIND_OUTSIDE); }\n node.body = this.parseBlock(false, undefined, useStrict && !oldStrict);\n node.expression = false;\n this.adaptDirectivePrologue(node.body.body);\n this.labels = oldLabels;\n }\n this.exitScope();\n };\n\n pp$5.isSimpleParamList = function(params) {\n for (var i = 0, list = params; i < list.length; i += 1)\n {\n var param = list[i];\n\n if (param.type !== \"Identifier\") { return false\n } }\n return true\n };\n\n // Checks function params for various disallowed patterns such as using \"eval\"\n // or \"arguments\" and duplicate parameters.\n\n pp$5.checkParams = function(node, allowDuplicates) {\n var nameHash = Object.create(null);\n for (var i = 0, list = node.params; i < list.length; i += 1)\n {\n var param = list[i];\n\n this.checkLValInnerPattern(param, BIND_VAR, allowDuplicates ? null : nameHash);\n }\n };\n\n // Parses a comma-separated list of expressions, and returns them as\n // an array. `close` is the token type that ends the list, and\n // `allowEmpty` can be turned on to allow subsequent commas with\n // nothing in between them to be parsed as `null` (which is needed\n // for array literals).\n\n pp$5.parseExprList = function(close, allowTrailingComma, allowEmpty, refDestructuringErrors) {\n var elts = [], first = true;\n while (!this.eat(close)) {\n if (!first) {\n this.expect(types$1.comma);\n if (allowTrailingComma && this.afterTrailingComma(close)) { break }\n } else { first = false; }\n\n var elt = (void 0);\n if (allowEmpty && this.type === types$1.comma)\n { elt = null; }\n else if (this.type === types$1.ellipsis) {\n elt = this.parseSpread(refDestructuringErrors);\n if (refDestructuringErrors && this.type === types$1.comma && refDestructuringErrors.trailingComma < 0)\n { refDestructuringErrors.trailingComma = this.start; }\n } else {\n elt = this.parseMaybeAssign(false, refDestructuringErrors);\n }\n elts.push(elt);\n }\n return elts\n };\n\n pp$5.checkUnreserved = function(ref) {\n var start = ref.start;\n var end = ref.end;\n var name = ref.name;\n\n if (this.inGenerator && name === \"yield\")\n { this.raiseRecoverable(start, \"Cannot use 'yield' as identifier inside a generator\"); }\n if (this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use 'await' as identifier inside an async function\"); }\n if (this.currentThisScope().inClassFieldInit && name === \"arguments\")\n { this.raiseRecoverable(start, \"Cannot use 'arguments' in class field initializer\"); }\n if (this.inClassStaticBlock && (name === \"arguments\" || name === \"await\"))\n { this.raise(start, (\"Cannot use \" + name + \" in class static initialization block\")); }\n if (this.keywords.test(name))\n { this.raise(start, (\"Unexpected keyword '\" + name + \"'\")); }\n if (this.options.ecmaVersion < 6 &&\n this.input.slice(start, end).indexOf(\"\\\\\") !== -1) { return }\n var re = this.strict ? this.reservedWordsStrict : this.reservedWords;\n if (re.test(name)) {\n if (!this.inAsync && name === \"await\")\n { this.raiseRecoverable(start, \"Cannot use keyword 'await' outside an async function\"); }\n this.raiseRecoverable(start, (\"The keyword '\" + name + \"' is reserved\"));\n }\n };\n\n // Parse the next token as an identifier. If `liberal` is true (used\n // when parsing properties), it will also convert keywords into\n // identifiers.\n\n pp$5.parseIdent = function(liberal) {\n var node = this.parseIdentNode();\n this.next(!!liberal);\n this.finishNode(node, \"Identifier\");\n if (!liberal) {\n this.checkUnreserved(node);\n if (node.name === \"await\" && !this.awaitIdentPos)\n { this.awaitIdentPos = node.start; }\n }\n return node\n };\n\n pp$5.parseIdentNode = function() {\n var node = this.startNode();\n if (this.type === types$1.name) {\n node.name = this.value;\n } else if (this.type.keyword) {\n node.name = this.type.keyword;\n\n // To fix https://github.com/acornjs/acorn/issues/575\n // `class` and `function` keywords push new context into this.context.\n // But there is no chance to pop the context if the keyword is consumed as an identifier such as a property name.\n // If the previous token is a dot, this does not apply because the context-managing code already ignored the keyword\n if ((node.name === \"class\" || node.name === \"function\") &&\n (this.lastTokEnd !== this.lastTokStart + 1 || this.input.charCodeAt(this.lastTokStart) !== 46)) {\n this.context.pop();\n }\n this.type = types$1.name;\n } else {\n this.unexpected();\n }\n return node\n };\n\n pp$5.parsePrivateIdent = function() {\n var node = this.startNode();\n if (this.type === types$1.privateId) {\n node.name = this.value;\n } else {\n this.unexpected();\n }\n this.next();\n this.finishNode(node, \"PrivateIdentifier\");\n\n // For validating existence\n if (this.options.checkPrivateFields) {\n if (this.privateNameStack.length === 0) {\n this.raise(node.start, (\"Private field '#\" + (node.name) + \"' must be declared in an enclosing class\"));\n } else {\n this.privateNameStack[this.privateNameStack.length - 1].used.push(node);\n }\n }\n\n return node\n };\n\n // Parses yield expression inside generator.\n\n pp$5.parseYield = function(forInit) {\n if (!this.yieldPos) { this.yieldPos = this.start; }\n\n var node = this.startNode();\n this.next();\n if (this.type === types$1.semi || this.canInsertSemicolon() || (this.type !== types$1.star && !this.type.startsExpr)) {\n node.delegate = false;\n node.argument = null;\n } else {\n node.delegate = this.eat(types$1.star);\n node.argument = this.parseMaybeAssign(forInit);\n }\n return this.finishNode(node, \"YieldExpression\")\n };\n\n pp$5.parseAwait = function(forInit) {\n if (!this.awaitPos) { this.awaitPos = this.start; }\n\n var node = this.startNode();\n this.next();\n node.argument = this.parseMaybeUnary(null, true, false, forInit);\n return this.finishNode(node, \"AwaitExpression\")\n };\n\n var pp$4 = Parser.prototype;\n\n // This function is used to raise exceptions on parse errors. It\n // takes an offset integer (into the current `input`) to indicate\n // the location of the error, attaches the position to the end\n // of the error message, and then raises a `SyntaxError` with that\n // message.\n\n pp$4.raise = function(pos, message) {\n var loc = getLineInfo(this.input, pos);\n message += \" (\" + loc.line + \":\" + loc.column + \")\";\n var err = new SyntaxError(message);\n err.pos = pos; err.loc = loc; err.raisedAt = this.pos;\n throw err\n };\n\n pp$4.raiseRecoverable = pp$4.raise;\n\n pp$4.curPosition = function() {\n if (this.options.locations) {\n return new Position(this.curLine, this.pos - this.lineStart)\n }\n };\n\n var pp$3 = Parser.prototype;\n\n var Scope = function Scope(flags) {\n this.flags = flags;\n // A list of var-declared names in the current lexical scope\n this.var = [];\n // A list of lexically-declared names in the current lexical scope\n this.lexical = [];\n // A list of lexically-declared FunctionDeclaration names in the current lexical scope\n this.functions = [];\n // A switch to disallow the identifier reference 'arguments'\n this.inClassFieldInit = false;\n };\n\n // The functions in this module keep track of declared variables in the current scope in order to detect duplicate variable names.\n\n pp$3.enterScope = function(flags) {\n this.scopeStack.push(new Scope(flags));\n };\n\n pp$3.exitScope = function() {\n this.scopeStack.pop();\n };\n\n // The spec says:\n // > At the top level of a function, or script, function declarations are\n // > treated like var declarations rather than like lexical declarations.\n pp$3.treatFunctionsAsVarInScope = function(scope) {\n return (scope.flags & SCOPE_FUNCTION) || !this.inModule && (scope.flags & SCOPE_TOP)\n };\n\n pp$3.declareName = function(name, bindingType, pos) {\n var redeclared = false;\n if (bindingType === BIND_LEXICAL) {\n var scope = this.currentScope();\n redeclared = scope.lexical.indexOf(name) > -1 || scope.functions.indexOf(name) > -1 || scope.var.indexOf(name) > -1;\n scope.lexical.push(name);\n if (this.inModule && (scope.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n } else if (bindingType === BIND_SIMPLE_CATCH) {\n var scope$1 = this.currentScope();\n scope$1.lexical.push(name);\n } else if (bindingType === BIND_FUNCTION) {\n var scope$2 = this.currentScope();\n if (this.treatFunctionsAsVar)\n { redeclared = scope$2.lexical.indexOf(name) > -1; }\n else\n { redeclared = scope$2.lexical.indexOf(name) > -1 || scope$2.var.indexOf(name) > -1; }\n scope$2.functions.push(name);\n } else {\n for (var i = this.scopeStack.length - 1; i >= 0; --i) {\n var scope$3 = this.scopeStack[i];\n if (scope$3.lexical.indexOf(name) > -1 && !((scope$3.flags & SCOPE_SIMPLE_CATCH) && scope$3.lexical[0] === name) ||\n !this.treatFunctionsAsVarInScope(scope$3) && scope$3.functions.indexOf(name) > -1) {\n redeclared = true;\n break\n }\n scope$3.var.push(name);\n if (this.inModule && (scope$3.flags & SCOPE_TOP))\n { delete this.undefinedExports[name]; }\n if (scope$3.flags & SCOPE_VAR) { break }\n }\n }\n if (redeclared) { this.raiseRecoverable(pos, (\"Identifier '\" + name + \"' has already been declared\")); }\n };\n\n pp$3.checkLocalExport = function(id) {\n // scope.functions must be empty as Module code is always strict.\n if (this.scopeStack[0].lexical.indexOf(id.name) === -1 &&\n this.scopeStack[0].var.indexOf(id.name) === -1) {\n this.undefinedExports[id.name] = id;\n }\n };\n\n pp$3.currentScope = function() {\n return this.scopeStack[this.scopeStack.length - 1]\n };\n\n pp$3.currentVarScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR) { return scope }\n }\n };\n\n // Could be useful for `this`, `new.target`, `super()`, `super.property`, and `super[property]`.\n pp$3.currentThisScope = function() {\n for (var i = this.scopeStack.length - 1;; i--) {\n var scope = this.scopeStack[i];\n if (scope.flags & SCOPE_VAR && !(scope.flags & SCOPE_ARROW)) { return scope }\n }\n };\n\n var Node = function Node(parser, pos, loc) {\n this.type = \"\";\n this.start = pos;\n this.end = 0;\n if (parser.options.locations)\n { this.loc = new SourceLocation(parser, loc); }\n if (parser.options.directSourceFile)\n { this.sourceFile = parser.options.directSourceFile; }\n if (parser.options.ranges)\n { this.range = [pos, 0]; }\n };\n\n // Start an AST node, attaching a start offset.\n\n var pp$2 = Parser.prototype;\n\n pp$2.startNode = function() {\n return new Node(this, this.start, this.startLoc)\n };\n\n pp$2.startNodeAt = function(pos, loc) {\n return new Node(this, pos, loc)\n };\n\n // Finish an AST node, adding `type` and `end` properties.\n\n function finishNodeAt(node, type, pos, loc) {\n node.type = type;\n node.end = pos;\n if (this.options.locations)\n { node.loc.end = loc; }\n if (this.options.ranges)\n { node.range[1] = pos; }\n return node\n }\n\n pp$2.finishNode = function(node, type) {\n return finishNodeAt.call(this, node, type, this.lastTokEnd, this.lastTokEndLoc)\n };\n\n // Finish node at given position\n\n pp$2.finishNodeAt = function(node, type, pos, loc) {\n return finishNodeAt.call(this, node, type, pos, loc)\n };\n\n pp$2.copyNode = function(node) {\n var newNode = new Node(this, node.start, this.startLoc);\n for (var prop in node) { newNode[prop] = node[prop]; }\n return newNode\n };\n\n // This file was generated by \"bin/generate-unicode-script-values.js\". Do not modify manually!\n var scriptValuesAddedInUnicode = \"Gara Garay Gukh Gurung_Khema Hrkt Katakana_Or_Hiragana Kawi Kirat_Rai Krai Nag_Mundari Nagm Ol_Onal Onao Sunu Sunuwar Todhri Todr Tulu_Tigalari Tutg Unknown Zzzz\";\n\n // This file contains Unicode properties extracted from the ECMAScript specification.\n // The lists are extracted like so:\n // $$('#table-binary-unicode-properties > figure > table > tbody > tr > td:nth-child(1) code').map(el => el.innerText)\n\n // #table-binary-unicode-properties\n var ecma9BinaryProperties = \"ASCII ASCII_Hex_Digit AHex Alphabetic Alpha Any Assigned Bidi_Control Bidi_C Bidi_Mirrored Bidi_M Case_Ignorable CI Cased Changes_When_Casefolded CWCF Changes_When_Casemapped CWCM Changes_When_Lowercased CWL Changes_When_NFKC_Casefolded CWKCF Changes_When_Titlecased CWT Changes_When_Uppercased CWU Dash Default_Ignorable_Code_Point DI Deprecated Dep Diacritic Dia Emoji Emoji_Component Emoji_Modifier Emoji_Modifier_Base Emoji_Presentation Extender Ext Grapheme_Base Gr_Base Grapheme_Extend Gr_Ext Hex_Digit Hex IDS_Binary_Operator IDSB IDS_Trinary_Operator IDST ID_Continue IDC ID_Start IDS Ideographic Ideo Join_Control Join_C Logical_Order_Exception LOE Lowercase Lower Math Noncharacter_Code_Point NChar Pattern_Syntax Pat_Syn Pattern_White_Space Pat_WS Quotation_Mark QMark Radical Regional_Indicator RI Sentence_Terminal STerm Soft_Dotted SD Terminal_Punctuation Term Unified_Ideograph UIdeo Uppercase Upper Variation_Selector VS White_Space space XID_Continue XIDC XID_Start XIDS\";\n var ecma10BinaryProperties = ecma9BinaryProperties + \" Extended_Pictographic\";\n var ecma11BinaryProperties = ecma10BinaryProperties;\n var ecma12BinaryProperties = ecma11BinaryProperties + \" EBase EComp EMod EPres ExtPict\";\n var ecma13BinaryProperties = ecma12BinaryProperties;\n var ecma14BinaryProperties = ecma13BinaryProperties;\n\n var unicodeBinaryProperties = {\n 9: ecma9BinaryProperties,\n 10: ecma10BinaryProperties,\n 11: ecma11BinaryProperties,\n 12: ecma12BinaryProperties,\n 13: ecma13BinaryProperties,\n 14: ecma14BinaryProperties\n };\n\n // #table-binary-unicode-properties-of-strings\n var ecma14BinaryPropertiesOfStrings = \"Basic_Emoji Emoji_Keycap_Sequence RGI_Emoji_Modifier_Sequence RGI_Emoji_Flag_Sequence RGI_Emoji_Tag_Sequence RGI_Emoji_ZWJ_Sequence RGI_Emoji\";\n\n var unicodeBinaryPropertiesOfStrings = {\n 9: \"\",\n 10: \"\",\n 11: \"\",\n 12: \"\",\n 13: \"\",\n 14: ecma14BinaryPropertiesOfStrings\n };\n\n // #table-unicode-general-category-values\n var unicodeGeneralCategoryValues = \"Cased_Letter LC Close_Punctuation Pe Connector_Punctuation Pc Control Cc cntrl Currency_Symbol Sc Dash_Punctuation Pd Decimal_Number Nd digit Enclosing_Mark Me Final_Punctuation Pf Format Cf Initial_Punctuation Pi Letter L Letter_Number Nl Line_Separator Zl Lowercase_Letter Ll Mark M Combining_Mark Math_Symbol Sm Modifier_Letter Lm Modifier_Symbol Sk Nonspacing_Mark Mn Number N Open_Punctuation Ps Other C Other_Letter Lo Other_Number No Other_Punctuation Po Other_Symbol So Paragraph_Separator Zp Private_Use Co Punctuation P punct Separator Z Space_Separator Zs Spacing_Mark Mc Surrogate Cs Symbol S Titlecase_Letter Lt Unassigned Cn Uppercase_Letter Lu\";\n\n // #table-unicode-script-values\n var ecma9ScriptValues = \"Adlam Adlm Ahom Anatolian_Hieroglyphs Hluw Arabic Arab Armenian Armn Avestan Avst Balinese Bali Bamum Bamu Bassa_Vah Bass Batak Batk Bengali Beng Bhaiksuki Bhks Bopomofo Bopo Brahmi Brah Braille Brai Buginese Bugi Buhid Buhd Canadian_Aboriginal Cans Carian Cari Caucasian_Albanian Aghb Chakma Cakm Cham Cham Cherokee Cher Common Zyyy Coptic Copt Qaac Cuneiform Xsux Cypriot Cprt Cyrillic Cyrl Deseret Dsrt Devanagari Deva Duployan Dupl Egyptian_Hieroglyphs Egyp Elbasan Elba Ethiopic Ethi Georgian Geor Glagolitic Glag Gothic Goth Grantha Gran Greek Grek Gujarati Gujr Gurmukhi Guru Han Hani Hangul Hang Hanunoo Hano Hatran Hatr Hebrew Hebr Hiragana Hira Imperial_Aramaic Armi Inherited Zinh Qaai Inscriptional_Pahlavi Phli Inscriptional_Parthian Prti Javanese Java Kaithi Kthi Kannada Knda Katakana Kana Kayah_Li Kali Kharoshthi Khar Khmer Khmr Khojki Khoj Khudawadi Sind Lao Laoo Latin Latn Lepcha Lepc Limbu Limb Linear_A Lina Linear_B Linb Lisu Lisu Lycian Lyci Lydian Lydi Mahajani Mahj Malayalam Mlym Mandaic Mand Manichaean Mani Marchen Marc Masaram_Gondi Gonm Meetei_Mayek Mtei Mende_Kikakui Mend Meroitic_Cursive Merc Meroitic_Hieroglyphs Mero Miao Plrd Modi Mongolian Mong Mro Mroo Multani Mult Myanmar Mymr Nabataean Nbat New_Tai_Lue Talu Newa Newa Nko Nkoo Nushu Nshu Ogham Ogam Ol_Chiki Olck Old_Hungarian Hung Old_Italic Ital Old_North_Arabian Narb Old_Permic Perm Old_Persian Xpeo Old_South_Arabian Sarb Old_Turkic Orkh Oriya Orya Osage Osge Osmanya Osma Pahawh_Hmong Hmng Palmyrene Palm Pau_Cin_Hau Pauc Phags_Pa Phag Phoenician Phnx Psalter_Pahlavi Phlp Rejang Rjng Runic Runr Samaritan Samr Saurashtra Saur Sharada Shrd Shavian Shaw Siddham Sidd SignWriting Sgnw Sinhala Sinh Sora_Sompeng Sora Soyombo Soyo Sundanese Sund Syloti_Nagri Sylo Syriac Syrc Tagalog Tglg Tagbanwa Tagb Tai_Le Tale Tai_Tham Lana Tai_Viet Tavt Takri Takr Tamil Taml Tangut Tang Telugu Telu Thaana Thaa Thai Thai Tibetan Tibt Tifinagh Tfng Tirhuta Tirh Ugaritic Ugar Vai Vaii Warang_Citi Wara Yi Yiii Zanabazar_Square Zanb\";\n var ecma10ScriptValues = ecma9ScriptValues + \" Dogra Dogr Gunjala_Gondi Gong Hanifi_Rohingya Rohg Makasar Maka Medefaidrin Medf Old_Sogdian Sogo Sogdian Sogd\";\n var ecma11ScriptValues = ecma10ScriptValues + \" Elymaic Elym Nandinagari Nand Nyiakeng_Puachue_Hmong Hmnp Wancho Wcho\";\n var ecma12ScriptValues = ecma11ScriptValues + \" Chorasmian Chrs Diak Dives_Akuru Khitan_Small_Script Kits Yezi Yezidi\";\n var ecma13ScriptValues = ecma12ScriptValues + \" Cypro_Minoan Cpmn Old_Uyghur Ougr Tangsa Tnsa Toto Vithkuqi Vith\";\n var ecma14ScriptValues = ecma13ScriptValues + \" \" + scriptValuesAddedInUnicode;\n\n var unicodeScriptValues = {\n 9: ecma9ScriptValues,\n 10: ecma10ScriptValues,\n 11: ecma11ScriptValues,\n 12: ecma12ScriptValues,\n 13: ecma13ScriptValues,\n 14: ecma14ScriptValues\n };\n\n var data = {};\n function buildUnicodeData(ecmaVersion) {\n var d = data[ecmaVersion] = {\n binary: wordsRegexp(unicodeBinaryProperties[ecmaVersion] + \" \" + unicodeGeneralCategoryValues),\n binaryOfStrings: wordsRegexp(unicodeBinaryPropertiesOfStrings[ecmaVersion]),\n nonBinary: {\n General_Category: wordsRegexp(unicodeGeneralCategoryValues),\n Script: wordsRegexp(unicodeScriptValues[ecmaVersion])\n }\n };\n d.nonBinary.Script_Extensions = d.nonBinary.Script;\n\n d.nonBinary.gc = d.nonBinary.General_Category;\n d.nonBinary.sc = d.nonBinary.Script;\n d.nonBinary.scx = d.nonBinary.Script_Extensions;\n }\n\n for (var i = 0, list = [9, 10, 11, 12, 13, 14]; i < list.length; i += 1) {\n var ecmaVersion = list[i];\n\n buildUnicodeData(ecmaVersion);\n }\n\n var pp$1 = Parser.prototype;\n\n // Track disjunction structure to determine whether a duplicate\n // capture group name is allowed because it is in a separate branch.\n var BranchID = function BranchID(parent, base) {\n // Parent disjunction branch\n this.parent = parent;\n // Identifies this set of sibling branches\n this.base = base || this;\n };\n\n BranchID.prototype.separatedFrom = function separatedFrom (alt) {\n // A branch is separate from another branch if they or any of\n // their parents are siblings in a given disjunction\n for (var self = this; self; self = self.parent) {\n for (var other = alt; other; other = other.parent) {\n if (self.base === other.base && self !== other) { return true }\n }\n }\n return false\n };\n\n BranchID.prototype.sibling = function sibling () {\n return new BranchID(this.parent, this.base)\n };\n\n var RegExpValidationState = function RegExpValidationState(parser) {\n this.parser = parser;\n this.validFlags = \"gim\" + (parser.options.ecmaVersion >= 6 ? \"uy\" : \"\") + (parser.options.ecmaVersion >= 9 ? \"s\" : \"\") + (parser.options.ecmaVersion >= 13 ? \"d\" : \"\") + (parser.options.ecmaVersion >= 15 ? \"v\" : \"\");\n this.unicodeProperties = data[parser.options.ecmaVersion >= 14 ? 14 : parser.options.ecmaVersion];\n this.source = \"\";\n this.flags = \"\";\n this.start = 0;\n this.switchU = false;\n this.switchV = false;\n this.switchN = false;\n this.pos = 0;\n this.lastIntValue = 0;\n this.lastStringValue = \"\";\n this.lastAssertionIsQuantifiable = false;\n this.numCapturingParens = 0;\n this.maxBackReference = 0;\n this.groupNames = Object.create(null);\n this.backReferenceNames = [];\n this.branchID = null;\n };\n\n RegExpValidationState.prototype.reset = function reset (start, pattern, flags) {\n var unicodeSets = flags.indexOf(\"v\") !== -1;\n var unicode = flags.indexOf(\"u\") !== -1;\n this.start = start | 0;\n this.source = pattern + \"\";\n this.flags = flags;\n if (unicodeSets && this.parser.options.ecmaVersion >= 15) {\n this.switchU = true;\n this.switchV = true;\n this.switchN = true;\n } else {\n this.switchU = unicode && this.parser.options.ecmaVersion >= 6;\n this.switchV = false;\n this.switchN = unicode && this.parser.options.ecmaVersion >= 9;\n }\n };\n\n RegExpValidationState.prototype.raise = function raise (message) {\n this.parser.raiseRecoverable(this.start, (\"Invalid regular expression: /\" + (this.source) + \"/: \" + message));\n };\n\n // If u flag is given, this returns the code point at the index (it combines a surrogate pair).\n // Otherwise, this returns the code unit of the index (can be a part of a surrogate pair).\n RegExpValidationState.prototype.at = function at (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return -1\n }\n var c = s.charCodeAt(i);\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l) {\n return c\n }\n var next = s.charCodeAt(i + 1);\n return next >= 0xDC00 && next <= 0xDFFF ? (c << 10) + next - 0x35FDC00 : c\n };\n\n RegExpValidationState.prototype.nextIndex = function nextIndex (i, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var s = this.source;\n var l = s.length;\n if (i >= l) {\n return l\n }\n var c = s.charCodeAt(i), next;\n if (!(forceU || this.switchU) || c <= 0xD7FF || c >= 0xE000 || i + 1 >= l ||\n (next = s.charCodeAt(i + 1)) < 0xDC00 || next > 0xDFFF) {\n return i + 1\n }\n return i + 2\n };\n\n RegExpValidationState.prototype.current = function current (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.pos, forceU)\n };\n\n RegExpValidationState.prototype.lookahead = function lookahead (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n return this.at(this.nextIndex(this.pos, forceU), forceU)\n };\n\n RegExpValidationState.prototype.advance = function advance (forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n this.pos = this.nextIndex(this.pos, forceU);\n };\n\n RegExpValidationState.prototype.eat = function eat (ch, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n if (this.current(forceU) === ch) {\n this.advance(forceU);\n return true\n }\n return false\n };\n\n RegExpValidationState.prototype.eatChars = function eatChars (chs, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var pos = this.pos;\n for (var i = 0, list = chs; i < list.length; i += 1) {\n var ch = list[i];\n\n var current = this.at(pos, forceU);\n if (current === -1 || current !== ch) {\n return false\n }\n pos = this.nextIndex(pos, forceU);\n }\n this.pos = pos;\n return true\n };\n\n /**\n * Validate the flags part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpFlags = function(state) {\n var validFlags = state.validFlags;\n var flags = state.flags;\n\n var u = false;\n var v = false;\n\n for (var i = 0; i < flags.length; i++) {\n var flag = flags.charAt(i);\n if (validFlags.indexOf(flag) === -1) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n if (flags.indexOf(flag, i + 1) > -1) {\n this.raise(state.start, \"Duplicate regular expression flag\");\n }\n if (flag === \"u\") { u = true; }\n if (flag === \"v\") { v = true; }\n }\n if (this.options.ecmaVersion >= 15 && u && v) {\n this.raise(state.start, \"Invalid regular expression flag\");\n }\n };\n\n function hasProp(obj) {\n for (var _ in obj) { return true }\n return false\n }\n\n /**\n * Validate the pattern part of a given RegExpLiteral.\n *\n * @param {RegExpValidationState} state The state to validate RegExp.\n * @returns {void}\n */\n pp$1.validateRegExpPattern = function(state) {\n this.regexp_pattern(state);\n\n // The goal symbol for the parse is |Pattern[~U, ~N]|. If the result of\n // parsing contains a |GroupName|, reparse with the goal symbol\n // |Pattern[~U, +N]| and use this result instead. Throw a *SyntaxError*\n // exception if _P_ did not conform to the grammar, if any elements of _P_\n // were not matched by the parse, or if any Early Error conditions exist.\n if (!state.switchN && this.options.ecmaVersion >= 9 && hasProp(state.groupNames)) {\n state.switchN = true;\n this.regexp_pattern(state);\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Pattern\n pp$1.regexp_pattern = function(state) {\n state.pos = 0;\n state.lastIntValue = 0;\n state.lastStringValue = \"\";\n state.lastAssertionIsQuantifiable = false;\n state.numCapturingParens = 0;\n state.maxBackReference = 0;\n state.groupNames = Object.create(null);\n state.backReferenceNames.length = 0;\n state.branchID = null;\n\n this.regexp_disjunction(state);\n\n if (state.pos !== state.source.length) {\n // Make the same messages as V8.\n if (state.eat(0x29 /* ) */)) {\n state.raise(\"Unmatched ')'\");\n }\n if (state.eat(0x5D /* ] */) || state.eat(0x7D /* } */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n }\n if (state.maxBackReference > state.numCapturingParens) {\n state.raise(\"Invalid escape\");\n }\n for (var i = 0, list = state.backReferenceNames; i < list.length; i += 1) {\n var name = list[i];\n\n if (!state.groupNames[name]) {\n state.raise(\"Invalid named capture referenced\");\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Disjunction\n pp$1.regexp_disjunction = function(state) {\n var trackDisjunction = this.options.ecmaVersion >= 16;\n if (trackDisjunction) { state.branchID = new BranchID(state.branchID, null); }\n this.regexp_alternative(state);\n while (state.eat(0x7C /* | */)) {\n if (trackDisjunction) { state.branchID = state.branchID.sibling(); }\n this.regexp_alternative(state);\n }\n if (trackDisjunction) { state.branchID = state.branchID.parent; }\n\n // Make the same message as V8.\n if (this.regexp_eatQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n if (state.eat(0x7B /* { */)) {\n state.raise(\"Lone quantifier brackets\");\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Alternative\n pp$1.regexp_alternative = function(state) {\n while (state.pos < state.source.length && this.regexp_eatTerm(state)) {}\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Term\n pp$1.regexp_eatTerm = function(state) {\n if (this.regexp_eatAssertion(state)) {\n // Handle `QuantifiableAssertion Quantifier` alternative.\n // `state.lastAssertionIsQuantifiable` is true if the last eaten Assertion\n // is a QuantifiableAssertion.\n if (state.lastAssertionIsQuantifiable && this.regexp_eatQuantifier(state)) {\n // Make the same message as V8.\n if (state.switchU) {\n state.raise(\"Invalid quantifier\");\n }\n }\n return true\n }\n\n if (state.switchU ? this.regexp_eatAtom(state) : this.regexp_eatExtendedAtom(state)) {\n this.regexp_eatQuantifier(state);\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-Assertion\n pp$1.regexp_eatAssertion = function(state) {\n var start = state.pos;\n state.lastAssertionIsQuantifiable = false;\n\n // ^, $\n if (state.eat(0x5E /* ^ */) || state.eat(0x24 /* $ */)) {\n return true\n }\n\n // \\b \\B\n if (state.eat(0x5C /* \\ */)) {\n if (state.eat(0x42 /* B */) || state.eat(0x62 /* b */)) {\n return true\n }\n state.pos = start;\n }\n\n // Lookahead / Lookbehind\n if (state.eat(0x28 /* ( */) && state.eat(0x3F /* ? */)) {\n var lookbehind = false;\n if (this.options.ecmaVersion >= 9) {\n lookbehind = state.eat(0x3C /* < */);\n }\n if (state.eat(0x3D /* = */) || state.eat(0x21 /* ! */)) {\n this.regexp_disjunction(state);\n if (!state.eat(0x29 /* ) */)) {\n state.raise(\"Unterminated group\");\n }\n state.lastAssertionIsQuantifiable = !lookbehind;\n return true\n }\n }\n\n state.pos = start;\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Quantifier\n pp$1.regexp_eatQuantifier = function(state, noError) {\n if ( noError === void 0 ) noError = false;\n\n if (this.regexp_eatQuantifierPrefix(state, noError)) {\n state.eat(0x3F /* ? */);\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-QuantifierPrefix\n pp$1.regexp_eatQuantifierPrefix = function(state, noError) {\n return (\n state.eat(0x2A /* * */) ||\n state.eat(0x2B /* + */) ||\n state.eat(0x3F /* ? */) ||\n this.regexp_eatBracedQuantifier(state, noError)\n )\n };\n pp$1.regexp_eatBracedQuantifier = function(state, noError) {\n var start = state.pos;\n if (state.eat(0x7B /* { */)) {\n var min = 0, max = -1;\n if (this.regexp_eatDecimalDigits(state)) {\n min = state.lastIntValue;\n if (state.eat(0x2C /* , */) && this.regexp_eatDecimalDigits(state)) {\n max = state.lastIntValue;\n }\n if (state.eat(0x7D /* } */)) {\n // SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-term\n if (max !== -1 && max < min && !noError) {\n state.raise(\"numbers out of order in {} quantifier\");\n }\n return true\n }\n }\n if (state.switchU && !noError) {\n state.raise(\"Incomplete quantifier\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Atom\n pp$1.regexp_eatAtom = function(state) {\n return (\n this.regexp_eatPatternCharacters(state) ||\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state)\n )\n };\n pp$1.regexp_eatReverseSolidusAtomEscape = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatAtomEscape(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatUncapturingGroup = function(state) {\n var start = state.pos;\n if (state.eat(0x28 /* ( */)) {\n if (state.eat(0x3F /* ? */)) {\n if (this.options.ecmaVersion >= 16) {\n var addModifiers = this.regexp_eatModifiers(state);\n var hasHyphen = state.eat(0x2D /* - */);\n if (addModifiers || hasHyphen) {\n for (var i = 0; i < addModifiers.length; i++) {\n var modifier = addModifiers.charAt(i);\n if (addModifiers.indexOf(modifier, i + 1) > -1) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n if (hasHyphen) {\n var removeModifiers = this.regexp_eatModifiers(state);\n if (!addModifiers && !removeModifiers && state.current() === 0x3A /* : */) {\n state.raise(\"Invalid regular expression modifiers\");\n }\n for (var i$1 = 0; i$1 < removeModifiers.length; i$1++) {\n var modifier$1 = removeModifiers.charAt(i$1);\n if (\n removeModifiers.indexOf(modifier$1, i$1 + 1) > -1 ||\n addModifiers.indexOf(modifier$1) > -1\n ) {\n state.raise(\"Duplicate regular expression modifiers\");\n }\n }\n }\n }\n }\n if (state.eat(0x3A /* : */)) {\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n return true\n }\n state.raise(\"Unterminated group\");\n }\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatCapturingGroup = function(state) {\n if (state.eat(0x28 /* ( */)) {\n if (this.options.ecmaVersion >= 9) {\n this.regexp_groupSpecifier(state);\n } else if (state.current() === 0x3F /* ? */) {\n state.raise(\"Invalid group\");\n }\n this.regexp_disjunction(state);\n if (state.eat(0x29 /* ) */)) {\n state.numCapturingParens += 1;\n return true\n }\n state.raise(\"Unterminated group\");\n }\n return false\n };\n // RegularExpressionModifiers ::\n // [empty]\n // RegularExpressionModifiers RegularExpressionModifier\n pp$1.regexp_eatModifiers = function(state) {\n var modifiers = \"\";\n var ch = 0;\n while ((ch = state.current()) !== -1 && isRegularExpressionModifier(ch)) {\n modifiers += codePointToString(ch);\n state.advance();\n }\n return modifiers\n };\n // RegularExpressionModifier :: one of\n // `i` `m` `s`\n function isRegularExpressionModifier(ch) {\n return ch === 0x69 /* i */ || ch === 0x6d /* m */ || ch === 0x73 /* s */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedAtom\n pp$1.regexp_eatExtendedAtom = function(state) {\n return (\n state.eat(0x2E /* . */) ||\n this.regexp_eatReverseSolidusAtomEscape(state) ||\n this.regexp_eatCharacterClass(state) ||\n this.regexp_eatUncapturingGroup(state) ||\n this.regexp_eatCapturingGroup(state) ||\n this.regexp_eatInvalidBracedQuantifier(state) ||\n this.regexp_eatExtendedPatternCharacter(state)\n )\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-InvalidBracedQuantifier\n pp$1.regexp_eatInvalidBracedQuantifier = function(state) {\n if (this.regexp_eatBracedQuantifier(state, true)) {\n state.raise(\"Nothing to repeat\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-SyntaxCharacter\n pp$1.regexp_eatSyntaxCharacter = function(state) {\n var ch = state.current();\n if (isSyntaxCharacter(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n function isSyntaxCharacter(ch) {\n return (\n ch === 0x24 /* $ */ ||\n ch >= 0x28 /* ( */ && ch <= 0x2B /* + */ ||\n ch === 0x2E /* . */ ||\n ch === 0x3F /* ? */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5E /* ^ */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-PatternCharacter\n // But eat eager.\n pp$1.regexp_eatPatternCharacters = function(state) {\n var start = state.pos;\n var ch = 0;\n while ((ch = state.current()) !== -1 && !isSyntaxCharacter(ch)) {\n state.advance();\n }\n return state.pos !== start\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ExtendedPatternCharacter\n pp$1.regexp_eatExtendedPatternCharacter = function(state) {\n var ch = state.current();\n if (\n ch !== -1 &&\n ch !== 0x24 /* $ */ &&\n !(ch >= 0x28 /* ( */ && ch <= 0x2B /* + */) &&\n ch !== 0x2E /* . */ &&\n ch !== 0x3F /* ? */ &&\n ch !== 0x5B /* [ */ &&\n ch !== 0x5E /* ^ */ &&\n ch !== 0x7C /* | */\n ) {\n state.advance();\n return true\n }\n return false\n };\n\n // GroupSpecifier ::\n // [empty]\n // `?` GroupName\n pp$1.regexp_groupSpecifier = function(state) {\n if (state.eat(0x3F /* ? */)) {\n if (!this.regexp_eatGroupName(state)) { state.raise(\"Invalid group\"); }\n var trackDisjunction = this.options.ecmaVersion >= 16;\n var known = state.groupNames[state.lastStringValue];\n if (known) {\n if (trackDisjunction) {\n for (var i = 0, list = known; i < list.length; i += 1) {\n var altID = list[i];\n\n if (!altID.separatedFrom(state.branchID))\n { state.raise(\"Duplicate capture group name\"); }\n }\n } else {\n state.raise(\"Duplicate capture group name\");\n }\n }\n if (trackDisjunction) {\n (known || (state.groupNames[state.lastStringValue] = [])).push(state.branchID);\n } else {\n state.groupNames[state.lastStringValue] = true;\n }\n }\n };\n\n // GroupName ::\n // `<` RegExpIdentifierName `>`\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatGroupName = function(state) {\n state.lastStringValue = \"\";\n if (state.eat(0x3C /* < */)) {\n if (this.regexp_eatRegExpIdentifierName(state) && state.eat(0x3E /* > */)) {\n return true\n }\n state.raise(\"Invalid capture group name\");\n }\n return false\n };\n\n // RegExpIdentifierName ::\n // RegExpIdentifierStart\n // RegExpIdentifierName RegExpIdentifierPart\n // Note: this updates `state.lastStringValue` property with the eaten name.\n pp$1.regexp_eatRegExpIdentifierName = function(state) {\n state.lastStringValue = \"\";\n if (this.regexp_eatRegExpIdentifierStart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n while (this.regexp_eatRegExpIdentifierPart(state)) {\n state.lastStringValue += codePointToString(state.lastIntValue);\n }\n return true\n }\n return false\n };\n\n // RegExpIdentifierStart ::\n // UnicodeIDStart\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n pp$1.regexp_eatRegExpIdentifierStart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierStart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierStart(ch) {\n return isIdentifierStart(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */\n }\n\n // RegExpIdentifierPart ::\n // UnicodeIDContinue\n // `$`\n // `_`\n // `\\` RegExpUnicodeEscapeSequence[+U]\n // <ZWNJ>\n // <ZWJ>\n pp$1.regexp_eatRegExpIdentifierPart = function(state) {\n var start = state.pos;\n var forceU = this.options.ecmaVersion >= 11;\n var ch = state.current(forceU);\n state.advance(forceU);\n\n if (ch === 0x5C /* \\ */ && this.regexp_eatRegExpUnicodeEscapeSequence(state, forceU)) {\n ch = state.lastIntValue;\n }\n if (isRegExpIdentifierPart(ch)) {\n state.lastIntValue = ch;\n return true\n }\n\n state.pos = start;\n return false\n };\n function isRegExpIdentifierPart(ch) {\n return isIdentifierChar(ch, true) || ch === 0x24 /* $ */ || ch === 0x5F /* _ */ || ch === 0x200C /* <ZWNJ> */ || ch === 0x200D /* <ZWJ> */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-AtomEscape\n pp$1.regexp_eatAtomEscape = function(state) {\n if (\n this.regexp_eatBackReference(state) ||\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state) ||\n (state.switchN && this.regexp_eatKGroupName(state))\n ) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n if (state.current() === 0x63 /* c */) {\n state.raise(\"Invalid unicode escape\");\n }\n state.raise(\"Invalid escape\");\n }\n return false\n };\n pp$1.regexp_eatBackReference = function(state) {\n var start = state.pos;\n if (this.regexp_eatDecimalEscape(state)) {\n var n = state.lastIntValue;\n if (state.switchU) {\n // For SyntaxError in https://www.ecma-international.org/ecma-262/8.0/#sec-atomescape\n if (n > state.maxBackReference) {\n state.maxBackReference = n;\n }\n return true\n }\n if (n <= state.numCapturingParens) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatKGroupName = function(state) {\n if (state.eat(0x6B /* k */)) {\n if (this.regexp_eatGroupName(state)) {\n state.backReferenceNames.push(state.lastStringValue);\n return true\n }\n state.raise(\"Invalid named reference\");\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-CharacterEscape\n pp$1.regexp_eatCharacterEscape = function(state) {\n return (\n this.regexp_eatControlEscape(state) ||\n this.regexp_eatCControlLetter(state) ||\n this.regexp_eatZero(state) ||\n this.regexp_eatHexEscapeSequence(state) ||\n this.regexp_eatRegExpUnicodeEscapeSequence(state, false) ||\n (!state.switchU && this.regexp_eatLegacyOctalEscapeSequence(state)) ||\n this.regexp_eatIdentityEscape(state)\n )\n };\n pp$1.regexp_eatCControlLetter = function(state) {\n var start = state.pos;\n if (state.eat(0x63 /* c */)) {\n if (this.regexp_eatControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n return false\n };\n pp$1.regexp_eatZero = function(state) {\n if (state.current() === 0x30 /* 0 */ && !isDecimalDigit(state.lookahead())) {\n state.lastIntValue = 0;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlEscape\n pp$1.regexp_eatControlEscape = function(state) {\n var ch = state.current();\n if (ch === 0x74 /* t */) {\n state.lastIntValue = 0x09; /* \\t */\n state.advance();\n return true\n }\n if (ch === 0x6E /* n */) {\n state.lastIntValue = 0x0A; /* \\n */\n state.advance();\n return true\n }\n if (ch === 0x76 /* v */) {\n state.lastIntValue = 0x0B; /* \\v */\n state.advance();\n return true\n }\n if (ch === 0x66 /* f */) {\n state.lastIntValue = 0x0C; /* \\f */\n state.advance();\n return true\n }\n if (ch === 0x72 /* r */) {\n state.lastIntValue = 0x0D; /* \\r */\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ControlLetter\n pp$1.regexp_eatControlLetter = function(state) {\n var ch = state.current();\n if (isControlLetter(ch)) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n function isControlLetter(ch) {\n return (\n (ch >= 0x41 /* A */ && ch <= 0x5A /* Z */) ||\n (ch >= 0x61 /* a */ && ch <= 0x7A /* z */)\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-RegExpUnicodeEscapeSequence\n pp$1.regexp_eatRegExpUnicodeEscapeSequence = function(state, forceU) {\n if ( forceU === void 0 ) forceU = false;\n\n var start = state.pos;\n var switchU = forceU || state.switchU;\n\n if (state.eat(0x75 /* u */)) {\n if (this.regexp_eatFixedHexDigits(state, 4)) {\n var lead = state.lastIntValue;\n if (switchU && lead >= 0xD800 && lead <= 0xDBFF) {\n var leadSurrogateEnd = state.pos;\n if (state.eat(0x5C /* \\ */) && state.eat(0x75 /* u */) && this.regexp_eatFixedHexDigits(state, 4)) {\n var trail = state.lastIntValue;\n if (trail >= 0xDC00 && trail <= 0xDFFF) {\n state.lastIntValue = (lead - 0xD800) * 0x400 + (trail - 0xDC00) + 0x10000;\n return true\n }\n }\n state.pos = leadSurrogateEnd;\n state.lastIntValue = lead;\n }\n return true\n }\n if (\n switchU &&\n state.eat(0x7B /* { */) &&\n this.regexp_eatHexDigits(state) &&\n state.eat(0x7D /* } */) &&\n isValidUnicode(state.lastIntValue)\n ) {\n return true\n }\n if (switchU) {\n state.raise(\"Invalid unicode escape\");\n }\n state.pos = start;\n }\n\n return false\n };\n function isValidUnicode(ch) {\n return ch >= 0 && ch <= 0x10FFFF\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-IdentityEscape\n pp$1.regexp_eatIdentityEscape = function(state) {\n if (state.switchU) {\n if (this.regexp_eatSyntaxCharacter(state)) {\n return true\n }\n if (state.eat(0x2F /* / */)) {\n state.lastIntValue = 0x2F; /* / */\n return true\n }\n return false\n }\n\n var ch = state.current();\n if (ch !== 0x63 /* c */ && (!state.switchN || ch !== 0x6B /* k */)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalEscape\n pp$1.regexp_eatDecimalEscape = function(state) {\n state.lastIntValue = 0;\n var ch = state.current();\n if (ch >= 0x31 /* 1 */ && ch <= 0x39 /* 9 */) {\n do {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n } while ((ch = state.current()) >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */)\n return true\n }\n return false\n };\n\n // Return values used by character set parsing methods, needed to\n // forbid negation of sets that can match strings.\n var CharSetNone = 0; // Nothing parsed\n var CharSetOk = 1; // Construct parsed, cannot contain strings\n var CharSetString = 2; // Construct parsed, can contain strings\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClassEscape\n pp$1.regexp_eatCharacterClassEscape = function(state) {\n var ch = state.current();\n\n if (isCharacterClassEscape(ch)) {\n state.lastIntValue = -1;\n state.advance();\n return CharSetOk\n }\n\n var negate = false;\n if (\n state.switchU &&\n this.options.ecmaVersion >= 9 &&\n ((negate = ch === 0x50 /* P */) || ch === 0x70 /* p */)\n ) {\n state.lastIntValue = -1;\n state.advance();\n var result;\n if (\n state.eat(0x7B /* { */) &&\n (result = this.regexp_eatUnicodePropertyValueExpression(state)) &&\n state.eat(0x7D /* } */)\n ) {\n if (negate && result === CharSetString) { state.raise(\"Invalid property name\"); }\n return result\n }\n state.raise(\"Invalid property name\");\n }\n\n return CharSetNone\n };\n\n function isCharacterClassEscape(ch) {\n return (\n ch === 0x64 /* d */ ||\n ch === 0x44 /* D */ ||\n ch === 0x73 /* s */ ||\n ch === 0x53 /* S */ ||\n ch === 0x77 /* w */ ||\n ch === 0x57 /* W */\n )\n }\n\n // UnicodePropertyValueExpression ::\n // UnicodePropertyName `=` UnicodePropertyValue\n // LoneUnicodePropertyNameOrValue\n pp$1.regexp_eatUnicodePropertyValueExpression = function(state) {\n var start = state.pos;\n\n // UnicodePropertyName `=` UnicodePropertyValue\n if (this.regexp_eatUnicodePropertyName(state) && state.eat(0x3D /* = */)) {\n var name = state.lastStringValue;\n if (this.regexp_eatUnicodePropertyValue(state)) {\n var value = state.lastStringValue;\n this.regexp_validateUnicodePropertyNameAndValue(state, name, value);\n return CharSetOk\n }\n }\n state.pos = start;\n\n // LoneUnicodePropertyNameOrValue\n if (this.regexp_eatLoneUnicodePropertyNameOrValue(state)) {\n var nameOrValue = state.lastStringValue;\n return this.regexp_validateUnicodePropertyNameOrValue(state, nameOrValue)\n }\n return CharSetNone\n };\n\n pp$1.regexp_validateUnicodePropertyNameAndValue = function(state, name, value) {\n if (!hasOwn(state.unicodeProperties.nonBinary, name))\n { state.raise(\"Invalid property name\"); }\n if (!state.unicodeProperties.nonBinary[name].test(value))\n { state.raise(\"Invalid property value\"); }\n };\n\n pp$1.regexp_validateUnicodePropertyNameOrValue = function(state, nameOrValue) {\n if (state.unicodeProperties.binary.test(nameOrValue)) { return CharSetOk }\n if (state.switchV && state.unicodeProperties.binaryOfStrings.test(nameOrValue)) { return CharSetString }\n state.raise(\"Invalid property name\");\n };\n\n // UnicodePropertyName ::\n // UnicodePropertyNameCharacters\n pp$1.regexp_eatUnicodePropertyName = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyNameCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n\n function isUnicodePropertyNameCharacter(ch) {\n return isControlLetter(ch) || ch === 0x5F /* _ */\n }\n\n // UnicodePropertyValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatUnicodePropertyValue = function(state) {\n var ch = 0;\n state.lastStringValue = \"\";\n while (isUnicodePropertyValueCharacter(ch = state.current())) {\n state.lastStringValue += codePointToString(ch);\n state.advance();\n }\n return state.lastStringValue !== \"\"\n };\n function isUnicodePropertyValueCharacter(ch) {\n return isUnicodePropertyNameCharacter(ch) || isDecimalDigit(ch)\n }\n\n // LoneUnicodePropertyNameOrValue ::\n // UnicodePropertyValueCharacters\n pp$1.regexp_eatLoneUnicodePropertyNameOrValue = function(state) {\n return this.regexp_eatUnicodePropertyValue(state)\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-CharacterClass\n pp$1.regexp_eatCharacterClass = function(state) {\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (!state.eat(0x5D /* ] */))\n { state.raise(\"Unterminated character class\"); }\n if (negate && result === CharSetString)\n { state.raise(\"Negated character class may contain strings\"); }\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassContents\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassRanges\n pp$1.regexp_classContents = function(state) {\n if (state.current() === 0x5D /* ] */) { return CharSetOk }\n if (state.switchV) { return this.regexp_classSetExpression(state) }\n this.regexp_nonEmptyClassRanges(state);\n return CharSetOk\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRanges\n // https://www.ecma-international.org/ecma-262/8.0/#prod-NonemptyClassRangesNoDash\n pp$1.regexp_nonEmptyClassRanges = function(state) {\n while (this.regexp_eatClassAtom(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassAtom(state)) {\n var right = state.lastIntValue;\n if (state.switchU && (left === -1 || right === -1)) {\n state.raise(\"Invalid character class\");\n }\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n }\n }\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtom\n // https://www.ecma-international.org/ecma-262/8.0/#prod-ClassAtomNoDash\n pp$1.regexp_eatClassAtom = function(state) {\n var start = state.pos;\n\n if (state.eat(0x5C /* \\ */)) {\n if (this.regexp_eatClassEscape(state)) {\n return true\n }\n if (state.switchU) {\n // Make the same message as V8.\n var ch$1 = state.current();\n if (ch$1 === 0x63 /* c */ || isOctalDigit(ch$1)) {\n state.raise(\"Invalid class escape\");\n }\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n\n var ch = state.current();\n if (ch !== 0x5D /* ] */) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassEscape\n pp$1.regexp_eatClassEscape = function(state) {\n var start = state.pos;\n\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n\n if (state.switchU && state.eat(0x2D /* - */)) {\n state.lastIntValue = 0x2D; /* - */\n return true\n }\n\n if (!state.switchU && state.eat(0x63 /* c */)) {\n if (this.regexp_eatClassControlLetter(state)) {\n return true\n }\n state.pos = start;\n }\n\n return (\n this.regexp_eatCharacterClassEscape(state) ||\n this.regexp_eatCharacterEscape(state)\n )\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetExpression\n // https://tc39.es/ecma262/#prod-ClassUnion\n // https://tc39.es/ecma262/#prod-ClassIntersection\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n pp$1.regexp_classSetExpression = function(state) {\n var result = CharSetOk, subResult;\n if (this.regexp_eatClassSetRange(state)) ; else if (subResult = this.regexp_eatClassSetOperand(state)) {\n if (subResult === CharSetString) { result = CharSetString; }\n // https://tc39.es/ecma262/#prod-ClassIntersection\n var start = state.pos;\n while (state.eatChars([0x26, 0x26] /* && */)) {\n if (\n state.current() !== 0x26 /* & */ &&\n (subResult = this.regexp_eatClassSetOperand(state))\n ) {\n if (subResult !== CharSetString) { result = CharSetOk; }\n continue\n }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n // https://tc39.es/ecma262/#prod-ClassSubtraction\n while (state.eatChars([0x2D, 0x2D] /* -- */)) {\n if (this.regexp_eatClassSetOperand(state)) { continue }\n state.raise(\"Invalid character in character class\");\n }\n if (start !== state.pos) { return result }\n } else {\n state.raise(\"Invalid character in character class\");\n }\n // https://tc39.es/ecma262/#prod-ClassUnion\n for (;;) {\n if (this.regexp_eatClassSetRange(state)) { continue }\n subResult = this.regexp_eatClassSetOperand(state);\n if (!subResult) { return result }\n if (subResult === CharSetString) { result = CharSetString; }\n }\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetRange\n pp$1.regexp_eatClassSetRange = function(state) {\n var start = state.pos;\n if (this.regexp_eatClassSetCharacter(state)) {\n var left = state.lastIntValue;\n if (state.eat(0x2D /* - */) && this.regexp_eatClassSetCharacter(state)) {\n var right = state.lastIntValue;\n if (left !== -1 && right !== -1 && left > right) {\n state.raise(\"Range out of order in character class\");\n }\n return true\n }\n state.pos = start;\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetOperand\n pp$1.regexp_eatClassSetOperand = function(state) {\n if (this.regexp_eatClassSetCharacter(state)) { return CharSetOk }\n return this.regexp_eatClassStringDisjunction(state) || this.regexp_eatNestedClass(state)\n };\n\n // https://tc39.es/ecma262/#prod-NestedClass\n pp$1.regexp_eatNestedClass = function(state) {\n var start = state.pos;\n if (state.eat(0x5B /* [ */)) {\n var negate = state.eat(0x5E /* ^ */);\n var result = this.regexp_classContents(state);\n if (state.eat(0x5D /* ] */)) {\n if (negate && result === CharSetString) {\n state.raise(\"Negated character class may contain strings\");\n }\n return result\n }\n state.pos = start;\n }\n if (state.eat(0x5C /* \\ */)) {\n var result$1 = this.regexp_eatCharacterClassEscape(state);\n if (result$1) {\n return result$1\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunction\n pp$1.regexp_eatClassStringDisjunction = function(state) {\n var start = state.pos;\n if (state.eatChars([0x5C, 0x71] /* \\q */)) {\n if (state.eat(0x7B /* { */)) {\n var result = this.regexp_classStringDisjunctionContents(state);\n if (state.eat(0x7D /* } */)) {\n return result\n }\n } else {\n // Make the same message as V8.\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return null\n };\n\n // https://tc39.es/ecma262/#prod-ClassStringDisjunctionContents\n pp$1.regexp_classStringDisjunctionContents = function(state) {\n var result = this.regexp_classString(state);\n while (state.eat(0x7C /* | */)) {\n if (this.regexp_classString(state) === CharSetString) { result = CharSetString; }\n }\n return result\n };\n\n // https://tc39.es/ecma262/#prod-ClassString\n // https://tc39.es/ecma262/#prod-NonEmptyClassString\n pp$1.regexp_classString = function(state) {\n var count = 0;\n while (this.regexp_eatClassSetCharacter(state)) { count++; }\n return count === 1 ? CharSetOk : CharSetString\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetCharacter\n pp$1.regexp_eatClassSetCharacter = function(state) {\n var start = state.pos;\n if (state.eat(0x5C /* \\ */)) {\n if (\n this.regexp_eatCharacterEscape(state) ||\n this.regexp_eatClassSetReservedPunctuator(state)\n ) {\n return true\n }\n if (state.eat(0x62 /* b */)) {\n state.lastIntValue = 0x08; /* <BS> */\n return true\n }\n state.pos = start;\n return false\n }\n var ch = state.current();\n if (ch < 0 || ch === state.lookahead() && isClassSetReservedDoublePunctuatorCharacter(ch)) { return false }\n if (isClassSetSyntaxCharacter(ch)) { return false }\n state.advance();\n state.lastIntValue = ch;\n return true\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedDoublePunctuator\n function isClassSetReservedDoublePunctuatorCharacter(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch >= 0x23 /* # */ && ch <= 0x26 /* & */ ||\n ch >= 0x2A /* * */ && ch <= 0x2C /* , */ ||\n ch === 0x2E /* . */ ||\n ch >= 0x3A /* : */ && ch <= 0x40 /* @ */ ||\n ch === 0x5E /* ^ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetSyntaxCharacter\n function isClassSetSyntaxCharacter(ch) {\n return (\n ch === 0x28 /* ( */ ||\n ch === 0x29 /* ) */ ||\n ch === 0x2D /* - */ ||\n ch === 0x2F /* / */ ||\n ch >= 0x5B /* [ */ && ch <= 0x5D /* ] */ ||\n ch >= 0x7B /* { */ && ch <= 0x7D /* } */\n )\n }\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n pp$1.regexp_eatClassSetReservedPunctuator = function(state) {\n var ch = state.current();\n if (isClassSetReservedPunctuator(ch)) {\n state.lastIntValue = ch;\n state.advance();\n return true\n }\n return false\n };\n\n // https://tc39.es/ecma262/#prod-ClassSetReservedPunctuator\n function isClassSetReservedPunctuator(ch) {\n return (\n ch === 0x21 /* ! */ ||\n ch === 0x23 /* # */ ||\n ch === 0x25 /* % */ ||\n ch === 0x26 /* & */ ||\n ch === 0x2C /* , */ ||\n ch === 0x2D /* - */ ||\n ch >= 0x3A /* : */ && ch <= 0x3E /* > */ ||\n ch === 0x40 /* @ */ ||\n ch === 0x60 /* ` */ ||\n ch === 0x7E /* ~ */\n )\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-ClassControlLetter\n pp$1.regexp_eatClassControlLetter = function(state) {\n var ch = state.current();\n if (isDecimalDigit(ch) || ch === 0x5F /* _ */) {\n state.lastIntValue = ch % 0x20;\n state.advance();\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatHexEscapeSequence = function(state) {\n var start = state.pos;\n if (state.eat(0x78 /* x */)) {\n if (this.regexp_eatFixedHexDigits(state, 2)) {\n return true\n }\n if (state.switchU) {\n state.raise(\"Invalid escape\");\n }\n state.pos = start;\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-DecimalDigits\n pp$1.regexp_eatDecimalDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isDecimalDigit(ch = state.current())) {\n state.lastIntValue = 10 * state.lastIntValue + (ch - 0x30 /* 0 */);\n state.advance();\n }\n return state.pos !== start\n };\n function isDecimalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigits\n pp$1.regexp_eatHexDigits = function(state) {\n var start = state.pos;\n var ch = 0;\n state.lastIntValue = 0;\n while (isHexDigit(ch = state.current())) {\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return state.pos !== start\n };\n function isHexDigit(ch) {\n return (\n (ch >= 0x30 /* 0 */ && ch <= 0x39 /* 9 */) ||\n (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) ||\n (ch >= 0x61 /* a */ && ch <= 0x66 /* f */)\n )\n }\n function hexToInt(ch) {\n if (ch >= 0x41 /* A */ && ch <= 0x46 /* F */) {\n return 10 + (ch - 0x41 /* A */)\n }\n if (ch >= 0x61 /* a */ && ch <= 0x66 /* f */) {\n return 10 + (ch - 0x61 /* a */)\n }\n return ch - 0x30 /* 0 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-annexB-LegacyOctalEscapeSequence\n // Allows only 0-377(octal) i.e. 0-255(decimal).\n pp$1.regexp_eatLegacyOctalEscapeSequence = function(state) {\n if (this.regexp_eatOctalDigit(state)) {\n var n1 = state.lastIntValue;\n if (this.regexp_eatOctalDigit(state)) {\n var n2 = state.lastIntValue;\n if (n1 <= 3 && this.regexp_eatOctalDigit(state)) {\n state.lastIntValue = n1 * 64 + n2 * 8 + state.lastIntValue;\n } else {\n state.lastIntValue = n1 * 8 + n2;\n }\n } else {\n state.lastIntValue = n1;\n }\n return true\n }\n return false\n };\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-OctalDigit\n pp$1.regexp_eatOctalDigit = function(state) {\n var ch = state.current();\n if (isOctalDigit(ch)) {\n state.lastIntValue = ch - 0x30; /* 0 */\n state.advance();\n return true\n }\n state.lastIntValue = 0;\n return false\n };\n function isOctalDigit(ch) {\n return ch >= 0x30 /* 0 */ && ch <= 0x37 /* 7 */\n }\n\n // https://www.ecma-international.org/ecma-262/8.0/#prod-Hex4Digits\n // https://www.ecma-international.org/ecma-262/8.0/#prod-HexDigit\n // And HexDigit HexDigit in https://www.ecma-international.org/ecma-262/8.0/#prod-HexEscapeSequence\n pp$1.regexp_eatFixedHexDigits = function(state, length) {\n var start = state.pos;\n state.lastIntValue = 0;\n for (var i = 0; i < length; ++i) {\n var ch = state.current();\n if (!isHexDigit(ch)) {\n state.pos = start;\n return false\n }\n state.lastIntValue = 16 * state.lastIntValue + hexToInt(ch);\n state.advance();\n }\n return true\n };\n\n // Object type used to represent tokens. Note that normally, tokens\n // simply exist as properties on the parser object. This is only\n // used for the onToken callback and the external tokenizer.\n\n var Token = function Token(p) {\n this.type = p.type;\n this.value = p.value;\n this.start = p.start;\n this.end = p.end;\n if (p.options.locations)\n { this.loc = new SourceLocation(p, p.startLoc, p.endLoc); }\n if (p.options.ranges)\n { this.range = [p.start, p.end]; }\n };\n\n // ## Tokenizer\n\n var pp = Parser.prototype;\n\n // Move to the next token\n\n pp.next = function(ignoreEscapeSequenceInKeyword) {\n if (!ignoreEscapeSequenceInKeyword && this.type.keyword && this.containsEsc)\n { this.raiseRecoverable(this.start, \"Escape sequence in keyword \" + this.type.keyword); }\n if (this.options.onToken)\n { this.options.onToken(new Token(this)); }\n\n this.lastTokEnd = this.end;\n this.lastTokStart = this.start;\n this.lastTokEndLoc = this.endLoc;\n this.lastTokStartLoc = this.startLoc;\n this.nextToken();\n };\n\n pp.getToken = function() {\n this.next();\n return new Token(this)\n };\n\n // If we're in an ES6 environment, make parsers iterable\n if (typeof Symbol !== \"undefined\")\n { pp[Symbol.iterator] = function() {\n var this$1$1 = this;\n\n return {\n next: function () {\n var token = this$1$1.getToken();\n return {\n done: token.type === types$1.eof,\n value: token\n }\n }\n }\n }; }\n\n // Toggle strict mode. Re-reads the next number or string to please\n // pedantic tests (`\"use strict\"; 010;` should fail).\n\n // Read a single token, updating the parser object's token-related\n // properties.\n\n pp.nextToken = function() {\n var curContext = this.curContext();\n if (!curContext || !curContext.preserveSpace) { this.skipSpace(); }\n\n this.start = this.pos;\n if (this.options.locations) { this.startLoc = this.curPosition(); }\n if (this.pos >= this.input.length) { return this.finishToken(types$1.eof) }\n\n if (curContext.override) { return curContext.override(this) }\n else { this.readToken(this.fullCharCodeAtPos()); }\n };\n\n pp.readToken = function(code) {\n // Identifier or keyword. '\\uXXXX' sequences are allowed in\n // identifiers, so '\\' also dispatches to that.\n if (isIdentifierStart(code, this.options.ecmaVersion >= 6) || code === 92 /* '\\' */)\n { return this.readWord() }\n\n return this.getTokenFromCode(code)\n };\n\n pp.fullCharCodeAtPos = function() {\n var code = this.input.charCodeAt(this.pos);\n if (code <= 0xd7ff || code >= 0xdc00) { return code }\n var next = this.input.charCodeAt(this.pos + 1);\n return next <= 0xdbff || next >= 0xe000 ? code : (code << 10) + next - 0x35fdc00\n };\n\n pp.skipBlockComment = function() {\n var startLoc = this.options.onComment && this.curPosition();\n var start = this.pos, end = this.input.indexOf(\"*/\", this.pos += 2);\n if (end === -1) { this.raise(this.pos - 2, \"Unterminated comment\"); }\n this.pos = end + 2;\n if (this.options.locations) {\n for (var nextBreak = (void 0), pos = start; (nextBreak = nextLineBreak(this.input, pos, this.pos)) > -1;) {\n ++this.curLine;\n pos = this.lineStart = nextBreak;\n }\n }\n if (this.options.onComment)\n { this.options.onComment(true, this.input.slice(start + 2, end), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n pp.skipLineComment = function(startSkip) {\n var start = this.pos;\n var startLoc = this.options.onComment && this.curPosition();\n var ch = this.input.charCodeAt(this.pos += startSkip);\n while (this.pos < this.input.length && !isNewLine(ch)) {\n ch = this.input.charCodeAt(++this.pos);\n }\n if (this.options.onComment)\n { this.options.onComment(false, this.input.slice(start + startSkip, this.pos), start, this.pos,\n startLoc, this.curPosition()); }\n };\n\n // Called at the start of the parse and after every token. Skips\n // whitespace and comments, and.\n\n pp.skipSpace = function() {\n loop: while (this.pos < this.input.length) {\n var ch = this.input.charCodeAt(this.pos);\n switch (ch) {\n case 32: case 160: // ' '\n ++this.pos;\n break\n case 13:\n if (this.input.charCodeAt(this.pos + 1) === 10) {\n ++this.pos;\n }\n case 10: case 8232: case 8233:\n ++this.pos;\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n break\n case 47: // '/'\n switch (this.input.charCodeAt(this.pos + 1)) {\n case 42: // '*'\n this.skipBlockComment();\n break\n case 47:\n this.skipLineComment(2);\n break\n default:\n break loop\n }\n break\n default:\n if (ch > 8 && ch < 14 || ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n ++this.pos;\n } else {\n break loop\n }\n }\n }\n };\n\n // Called at the end of every token. Sets `end`, `val`, and\n // maintains `context` and `exprAllowed`, and skips the space after\n // the token, so that the next one's `start` will point at the\n // right position.\n\n pp.finishToken = function(type, val) {\n this.end = this.pos;\n if (this.options.locations) { this.endLoc = this.curPosition(); }\n var prevType = this.type;\n this.type = type;\n this.value = val;\n\n this.updateContext(prevType);\n };\n\n // ### Token reading\n\n // This is the function that is called to fetch the next token. It\n // is somewhat obscure, because it works in character codes rather\n // than characters, and because operator parsing has been inlined\n // into it.\n //\n // All in the name of speed.\n //\n pp.readToken_dot = function() {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next >= 48 && next <= 57) { return this.readNumber(true) }\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (this.options.ecmaVersion >= 6 && next === 46 && next2 === 46) { // 46 = dot '.'\n this.pos += 3;\n return this.finishToken(types$1.ellipsis)\n } else {\n ++this.pos;\n return this.finishToken(types$1.dot)\n }\n };\n\n pp.readToken_slash = function() { // '/'\n var next = this.input.charCodeAt(this.pos + 1);\n if (this.exprAllowed) { ++this.pos; return this.readRegexp() }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.slash, 1)\n };\n\n pp.readToken_mult_modulo_exp = function(code) { // '%*'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n var tokentype = code === 42 ? types$1.star : types$1.modulo;\n\n // exponentiation operator ** and **=\n if (this.options.ecmaVersion >= 7 && code === 42 && next === 42) {\n ++size;\n tokentype = types$1.starstar;\n next = this.input.charCodeAt(this.pos + 2);\n }\n\n if (next === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(tokentype, size)\n };\n\n pp.readToken_pipe_amp = function(code) { // '|&'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (this.options.ecmaVersion >= 12) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(code === 124 ? types$1.logicalOR : types$1.logicalAND, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(code === 124 ? types$1.bitwiseOR : types$1.bitwiseAND, 1)\n };\n\n pp.readToken_caret = function() { // '^'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.bitwiseXOR, 1)\n };\n\n pp.readToken_plus_min = function(code) { // '+-'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === code) {\n if (next === 45 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 62 &&\n (this.lastTokEnd === 0 || lineBreak.test(this.input.slice(this.lastTokEnd, this.pos)))) {\n // A `-->` line comment\n this.skipLineComment(3);\n this.skipSpace();\n return this.nextToken()\n }\n return this.finishOp(types$1.incDec, 2)\n }\n if (next === 61) { return this.finishOp(types$1.assign, 2) }\n return this.finishOp(types$1.plusMin, 1)\n };\n\n pp.readToken_lt_gt = function(code) { // '<>'\n var next = this.input.charCodeAt(this.pos + 1);\n var size = 1;\n if (next === code) {\n size = code === 62 && this.input.charCodeAt(this.pos + 2) === 62 ? 3 : 2;\n if (this.input.charCodeAt(this.pos + size) === 61) { return this.finishOp(types$1.assign, size + 1) }\n return this.finishOp(types$1.bitShift, size)\n }\n if (next === 33 && code === 60 && !this.inModule && this.input.charCodeAt(this.pos + 2) === 45 &&\n this.input.charCodeAt(this.pos + 3) === 45) {\n // `<!--`, an XML-style comment that should be interpreted as a line comment\n this.skipLineComment(4);\n this.skipSpace();\n return this.nextToken()\n }\n if (next === 61) { size = 2; }\n return this.finishOp(types$1.relational, size)\n };\n\n pp.readToken_eq_excl = function(code) { // '=!'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 61) { return this.finishOp(types$1.equality, this.input.charCodeAt(this.pos + 2) === 61 ? 3 : 2) }\n if (code === 61 && next === 62 && this.options.ecmaVersion >= 6) { // '=>'\n this.pos += 2;\n return this.finishToken(types$1.arrow)\n }\n return this.finishOp(code === 61 ? types$1.eq : types$1.prefix, 1)\n };\n\n pp.readToken_question = function() { // '?'\n var ecmaVersion = this.options.ecmaVersion;\n if (ecmaVersion >= 11) {\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 46) {\n var next2 = this.input.charCodeAt(this.pos + 2);\n if (next2 < 48 || next2 > 57) { return this.finishOp(types$1.questionDot, 2) }\n }\n if (next === 63) {\n if (ecmaVersion >= 12) {\n var next2$1 = this.input.charCodeAt(this.pos + 2);\n if (next2$1 === 61) { return this.finishOp(types$1.assign, 3) }\n }\n return this.finishOp(types$1.coalesce, 2)\n }\n }\n return this.finishOp(types$1.question, 1)\n };\n\n pp.readToken_numberSign = function() { // '#'\n var ecmaVersion = this.options.ecmaVersion;\n var code = 35; // '#'\n if (ecmaVersion >= 13) {\n ++this.pos;\n code = this.fullCharCodeAtPos();\n if (isIdentifierStart(code, true) || code === 92 /* '\\' */) {\n return this.finishToken(types$1.privateId, this.readWord1())\n }\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n };\n\n pp.getTokenFromCode = function(code) {\n switch (code) {\n // The interpretation of a dot depends on whether it is followed\n // by a digit or another two dots.\n case 46: // '.'\n return this.readToken_dot()\n\n // Punctuation tokens.\n case 40: ++this.pos; return this.finishToken(types$1.parenL)\n case 41: ++this.pos; return this.finishToken(types$1.parenR)\n case 59: ++this.pos; return this.finishToken(types$1.semi)\n case 44: ++this.pos; return this.finishToken(types$1.comma)\n case 91: ++this.pos; return this.finishToken(types$1.bracketL)\n case 93: ++this.pos; return this.finishToken(types$1.bracketR)\n case 123: ++this.pos; return this.finishToken(types$1.braceL)\n case 125: ++this.pos; return this.finishToken(types$1.braceR)\n case 58: ++this.pos; return this.finishToken(types$1.colon)\n\n case 96: // '`'\n if (this.options.ecmaVersion < 6) { break }\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n\n case 48: // '0'\n var next = this.input.charCodeAt(this.pos + 1);\n if (next === 120 || next === 88) { return this.readRadixNumber(16) } // '0x', '0X' - hex number\n if (this.options.ecmaVersion >= 6) {\n if (next === 111 || next === 79) { return this.readRadixNumber(8) } // '0o', '0O' - octal number\n if (next === 98 || next === 66) { return this.readRadixNumber(2) } // '0b', '0B' - binary number\n }\n\n // Anything else beginning with a digit is an integer, octal\n // number, or float.\n case 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57: // 1-9\n return this.readNumber(false)\n\n // Quotes produce strings.\n case 34: case 39: // '\"', \"'\"\n return this.readString(code)\n\n // Operators are parsed inline in tiny state machines. '=' (61) is\n // often referred to. `finishOp` simply skips the amount of\n // characters it is given as second argument, and returns a token\n // of the type given by its first argument.\n case 47: // '/'\n return this.readToken_slash()\n\n case 37: case 42: // '%*'\n return this.readToken_mult_modulo_exp(code)\n\n case 124: case 38: // '|&'\n return this.readToken_pipe_amp(code)\n\n case 94: // '^'\n return this.readToken_caret()\n\n case 43: case 45: // '+-'\n return this.readToken_plus_min(code)\n\n case 60: case 62: // '<>'\n return this.readToken_lt_gt(code)\n\n case 61: case 33: // '=!'\n return this.readToken_eq_excl(code)\n\n case 63: // '?'\n return this.readToken_question()\n\n case 126: // '~'\n return this.finishOp(types$1.prefix, 1)\n\n case 35: // '#'\n return this.readToken_numberSign()\n }\n\n this.raise(this.pos, \"Unexpected character '\" + codePointToString(code) + \"'\");\n };\n\n pp.finishOp = function(type, size) {\n var str = this.input.slice(this.pos, this.pos + size);\n this.pos += size;\n return this.finishToken(type, str)\n };\n\n pp.readRegexp = function() {\n var escaped, inClass, start = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(start, \"Unterminated regular expression\"); }\n var ch = this.input.charAt(this.pos);\n if (lineBreak.test(ch)) { this.raise(start, \"Unterminated regular expression\"); }\n if (!escaped) {\n if (ch === \"[\") { inClass = true; }\n else if (ch === \"]\" && inClass) { inClass = false; }\n else if (ch === \"/\" && !inClass) { break }\n escaped = ch === \"\\\\\";\n } else { escaped = false; }\n ++this.pos;\n }\n var pattern = this.input.slice(start, this.pos);\n ++this.pos;\n var flagsStart = this.pos;\n var flags = this.readWord1();\n if (this.containsEsc) { this.unexpected(flagsStart); }\n\n // Validate pattern\n var state = this.regexpState || (this.regexpState = new RegExpValidationState(this));\n state.reset(start, pattern, flags);\n this.validateRegExpFlags(state);\n this.validateRegExpPattern(state);\n\n // Create Literal#value property value.\n var value = null;\n try {\n value = new RegExp(pattern, flags);\n } catch (e) {\n // ESTree requires null if it failed to instantiate RegExp object.\n // https://github.com/estree/estree/blob/a27003adf4fd7bfad44de9cef372a2eacd527b1c/es5.md#regexpliteral\n }\n\n return this.finishToken(types$1.regexp, {pattern: pattern, flags: flags, value: value})\n };\n\n // Read an integer in the given radix. Return null if zero digits\n // were read, the integer value otherwise. When `len` is given, this\n // will return `null` unless the integer has exactly `len` digits.\n\n pp.readInt = function(radix, len, maybeLegacyOctalNumericLiteral) {\n // `len` is used for character escape sequences. In that case, disallow separators.\n var allowSeparators = this.options.ecmaVersion >= 12 && len === undefined;\n\n // `maybeLegacyOctalNumericLiteral` is true if it doesn't have prefix (0x,0o,0b)\n // and isn't fraction part nor exponent part. In that case, if the first digit\n // is zero then disallow separators.\n var isLegacyOctalNumericLiteral = maybeLegacyOctalNumericLiteral && this.input.charCodeAt(this.pos) === 48;\n\n var start = this.pos, total = 0, lastCode = 0;\n for (var i = 0, e = len == null ? Infinity : len; i < e; ++i, ++this.pos) {\n var code = this.input.charCodeAt(this.pos), val = (void 0);\n\n if (allowSeparators && code === 95) {\n if (isLegacyOctalNumericLiteral) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed in legacy octal numeric literals\"); }\n if (lastCode === 95) { this.raiseRecoverable(this.pos, \"Numeric separator must be exactly one underscore\"); }\n if (i === 0) { this.raiseRecoverable(this.pos, \"Numeric separator is not allowed at the first of digits\"); }\n lastCode = code;\n continue\n }\n\n if (code >= 97) { val = code - 97 + 10; } // a\n else if (code >= 65) { val = code - 65 + 10; } // A\n else if (code >= 48 && code <= 57) { val = code - 48; } // 0-9\n else { val = Infinity; }\n if (val >= radix) { break }\n lastCode = code;\n total = total * radix + val;\n }\n\n if (allowSeparators && lastCode === 95) { this.raiseRecoverable(this.pos - 1, \"Numeric separator is not allowed at the last of digits\"); }\n if (this.pos === start || len != null && this.pos - start !== len) { return null }\n\n return total\n };\n\n function stringToNumber(str, isLegacyOctalNumericLiteral) {\n if (isLegacyOctalNumericLiteral) {\n return parseInt(str, 8)\n }\n\n // `parseFloat(value)` stops parsing at the first numeric separator then returns a wrong value.\n return parseFloat(str.replace(/_/g, \"\"))\n }\n\n function stringToBigInt(str) {\n if (typeof BigInt !== \"function\") {\n return null\n }\n\n // `BigInt(value)` throws syntax error if the string contains numeric separators.\n return BigInt(str.replace(/_/g, \"\"))\n }\n\n pp.readRadixNumber = function(radix) {\n var start = this.pos;\n this.pos += 2; // 0x\n var val = this.readInt(radix);\n if (val == null) { this.raise(this.start + 2, \"Expected number in radix \" + radix); }\n if (this.options.ecmaVersion >= 11 && this.input.charCodeAt(this.pos) === 110) {\n val = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n } else if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val)\n };\n\n // Read an integer, octal integer, or floating-point number.\n\n pp.readNumber = function(startsWithDot) {\n var start = this.pos;\n if (!startsWithDot && this.readInt(10, undefined, true) === null) { this.raise(start, \"Invalid number\"); }\n var octal = this.pos - start >= 2 && this.input.charCodeAt(start) === 48;\n if (octal && this.strict) { this.raise(start, \"Invalid number\"); }\n var next = this.input.charCodeAt(this.pos);\n if (!octal && !startsWithDot && this.options.ecmaVersion >= 11 && next === 110) {\n var val$1 = stringToBigInt(this.input.slice(start, this.pos));\n ++this.pos;\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n return this.finishToken(types$1.num, val$1)\n }\n if (octal && /[89]/.test(this.input.slice(start, this.pos))) { octal = false; }\n if (next === 46 && !octal) { // '.'\n ++this.pos;\n this.readInt(10);\n next = this.input.charCodeAt(this.pos);\n }\n if ((next === 69 || next === 101) && !octal) { // 'eE'\n next = this.input.charCodeAt(++this.pos);\n if (next === 43 || next === 45) { ++this.pos; } // '+-'\n if (this.readInt(10) === null) { this.raise(start, \"Invalid number\"); }\n }\n if (isIdentifierStart(this.fullCharCodeAtPos())) { this.raise(this.pos, \"Identifier directly after number\"); }\n\n var val = stringToNumber(this.input.slice(start, this.pos), octal);\n return this.finishToken(types$1.num, val)\n };\n\n // Read a string value, interpreting backslash-escapes.\n\n pp.readCodePoint = function() {\n var ch = this.input.charCodeAt(this.pos), code;\n\n if (ch === 123) { // '{'\n if (this.options.ecmaVersion < 6) { this.unexpected(); }\n var codePos = ++this.pos;\n code = this.readHexChar(this.input.indexOf(\"}\", this.pos) - this.pos);\n ++this.pos;\n if (code > 0x10FFFF) { this.invalidStringToken(codePos, \"Code point out of bounds\"); }\n } else {\n code = this.readHexChar(4);\n }\n return code\n };\n\n pp.readString = function(quote) {\n var out = \"\", chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated string constant\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === quote) { break }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(false);\n chunkStart = this.pos;\n } else if (ch === 0x2028 || ch === 0x2029) {\n if (this.options.ecmaVersion < 10) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n if (this.options.locations) {\n this.curLine++;\n this.lineStart = this.pos;\n }\n } else {\n if (isNewLine(ch)) { this.raise(this.start, \"Unterminated string constant\"); }\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(types$1.string, out)\n };\n\n // Reads template string tokens.\n\n var INVALID_TEMPLATE_ESCAPE_ERROR = {};\n\n pp.tryReadTemplateToken = function() {\n this.inTemplateElement = true;\n try {\n this.readTmplToken();\n } catch (err) {\n if (err === INVALID_TEMPLATE_ESCAPE_ERROR) {\n this.readInvalidTemplateToken();\n } else {\n throw err\n }\n }\n\n this.inTemplateElement = false;\n };\n\n pp.invalidStringToken = function(position, message) {\n if (this.inTemplateElement && this.options.ecmaVersion >= 9) {\n throw INVALID_TEMPLATE_ESCAPE_ERROR\n } else {\n this.raise(position, message);\n }\n };\n\n pp.readTmplToken = function() {\n var out = \"\", chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length) { this.raise(this.start, \"Unterminated template\"); }\n var ch = this.input.charCodeAt(this.pos);\n if (ch === 96 || ch === 36 && this.input.charCodeAt(this.pos + 1) === 123) { // '`', '${'\n if (this.pos === this.start && (this.type === types$1.template || this.type === types$1.invalidTemplate)) {\n if (ch === 36) {\n this.pos += 2;\n return this.finishToken(types$1.dollarBraceL)\n } else {\n ++this.pos;\n return this.finishToken(types$1.backQuote)\n }\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(types$1.template, out)\n }\n if (ch === 92) { // '\\'\n out += this.input.slice(chunkStart, this.pos);\n out += this.readEscapedChar(true);\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n ++this.pos;\n switch (ch) {\n case 13:\n if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; }\n case 10:\n out += \"\\n\";\n break\n default:\n out += String.fromCharCode(ch);\n break\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n };\n\n // Reads a template token to search for the end, without validating any escape sequences\n pp.readInvalidTemplateToken = function() {\n for (; this.pos < this.input.length; this.pos++) {\n switch (this.input[this.pos]) {\n case \"\\\\\":\n ++this.pos;\n break\n\n case \"$\":\n if (this.input[this.pos + 1] !== \"{\") { break }\n // fall through\n case \"`\":\n return this.finishToken(types$1.invalidTemplate, this.input.slice(this.start, this.pos))\n\n case \"\\r\":\n if (this.input[this.pos + 1] === \"\\n\") { ++this.pos; }\n // fall through\n case \"\\n\": case \"\\u2028\": case \"\\u2029\":\n ++this.curLine;\n this.lineStart = this.pos + 1;\n break\n }\n }\n this.raise(this.start, \"Unterminated template\");\n };\n\n // Used to read escaped characters\n\n pp.readEscapedChar = function(inTemplate) {\n var ch = this.input.charCodeAt(++this.pos);\n ++this.pos;\n switch (ch) {\n case 110: return \"\\n\" // 'n' -> '\\n'\n case 114: return \"\\r\" // 'r' -> '\\r'\n case 120: return String.fromCharCode(this.readHexChar(2)) // 'x'\n case 117: return codePointToString(this.readCodePoint()) // 'u'\n case 116: return \"\\t\" // 't' -> '\\t'\n case 98: return \"\\b\" // 'b' -> '\\b'\n case 118: return \"\\u000b\" // 'v' -> '\\u000b'\n case 102: return \"\\f\" // 'f' -> '\\f'\n case 13: if (this.input.charCodeAt(this.pos) === 10) { ++this.pos; } // '\\r\\n'\n case 10: // ' \\n'\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n case 56:\n case 57:\n if (this.strict) {\n this.invalidStringToken(\n this.pos - 1,\n \"Invalid escape sequence\"\n );\n }\n if (inTemplate) {\n var codePos = this.pos - 1;\n\n this.invalidStringToken(\n codePos,\n \"Invalid escape sequence in template string\"\n );\n }\n default:\n if (ch >= 48 && ch <= 55) {\n var octalStr = this.input.substr(this.pos - 1, 3).match(/^[0-7]+/)[0];\n var octal = parseInt(octalStr, 8);\n if (octal > 255) {\n octalStr = octalStr.slice(0, -1);\n octal = parseInt(octalStr, 8);\n }\n this.pos += octalStr.length - 1;\n ch = this.input.charCodeAt(this.pos);\n if ((octalStr !== \"0\" || ch === 56 || ch === 57) && (this.strict || inTemplate)) {\n this.invalidStringToken(\n this.pos - 1 - octalStr.length,\n inTemplate\n ? \"Octal literal in template string\"\n : \"Octal literal in strict mode\"\n );\n }\n return String.fromCharCode(octal)\n }\n if (isNewLine(ch)) {\n // Unicode new line characters after \\ get removed from output in both\n // template literals and strings\n if (this.options.locations) { this.lineStart = this.pos; ++this.curLine; }\n return \"\"\n }\n return String.fromCharCode(ch)\n }\n };\n\n // Used to read character escape sequences ('\\x', '\\u', '\\U').\n\n pp.readHexChar = function(len) {\n var codePos = this.pos;\n var n = this.readInt(16, len);\n if (n === null) { this.invalidStringToken(codePos, \"Bad character escape sequence\"); }\n return n\n };\n\n // Read an identifier, and return it as a string. Sets `this.containsEsc`\n // to whether the word contained a '\\u' escape.\n //\n // Incrementally adds only escaped chars, adding other chunks as-is\n // as a micro-optimization.\n\n pp.readWord1 = function() {\n this.containsEsc = false;\n var word = \"\", first = true, chunkStart = this.pos;\n var astral = this.options.ecmaVersion >= 6;\n while (this.pos < this.input.length) {\n var ch = this.fullCharCodeAtPos();\n if (isIdentifierChar(ch, astral)) {\n this.pos += ch <= 0xffff ? 1 : 2;\n } else if (ch === 92) { // \"\\\"\n this.containsEsc = true;\n word += this.input.slice(chunkStart, this.pos);\n var escStart = this.pos;\n if (this.input.charCodeAt(++this.pos) !== 117) // \"u\"\n { this.invalidStringToken(this.pos, \"Expecting Unicode escape sequence \\\\uXXXX\"); }\n ++this.pos;\n var esc = this.readCodePoint();\n if (!(first ? isIdentifierStart : isIdentifierChar)(esc, astral))\n { this.invalidStringToken(escStart, \"Invalid Unicode escape\"); }\n word += codePointToString(esc);\n chunkStart = this.pos;\n } else {\n break\n }\n first = false;\n }\n return word + this.input.slice(chunkStart, this.pos)\n };\n\n // Read an identifier or keyword token. Will check for reserved\n // words when necessary.\n\n pp.readWord = function() {\n var word = this.readWord1();\n var type = types$1.name;\n if (this.keywords.test(word)) {\n type = keywords[word];\n }\n return this.finishToken(type, word)\n };\n\n // Acorn is a tiny, fast JavaScript parser written in JavaScript.\n //\n // Acorn was written by Marijn Haverbeke, Ingvar Stepanyan, and\n // various contributors and released under an MIT license.\n //\n // Git repositories for Acorn are available at\n //\n // http://marijnhaverbeke.nl/git/acorn\n // https://github.com/acornjs/acorn.git\n //\n // Please use the [github bug tracker][ghbt] to report issues.\n //\n // [ghbt]: https://github.com/acornjs/acorn/issues\n //\n // [walk]: util/walk.js\n\n\n var version = \"8.14.0\";\n\n Parser.acorn = {\n Parser: Parser,\n version: version,\n defaultOptions: defaultOptions,\n Position: Position,\n SourceLocation: SourceLocation,\n getLineInfo: getLineInfo,\n Node: Node,\n TokenType: TokenType,\n tokTypes: types$1,\n keywordTypes: keywords,\n TokContext: TokContext,\n tokContexts: types,\n isIdentifierChar: isIdentifierChar,\n isIdentifierStart: isIdentifierStart,\n Token: Token,\n isNewLine: isNewLine,\n lineBreak: lineBreak,\n lineBreakG: lineBreakG,\n nonASCIIwhitespace: nonASCIIwhitespace\n };\n\n // The main exported interface (under `self.acorn` when in the\n // browser) is a `parse` function that takes a code string and returns\n // an abstract syntax tree as specified by the [ESTree spec][estree].\n //\n // [estree]: https://github.com/estree/estree\n\n function parse(input, options) {\n return Parser.parse(input, options)\n }\n\n // This function tries to parse a single expression at a given\n // offset in a string. Useful for parsing mixed-language formats\n // that embed JavaScript expressions.\n\n function parseExpressionAt(input, pos, options) {\n return Parser.parseExpressionAt(input, pos, options)\n }\n\n // Acorn is organized as a tokenizer and a recursive-descent parser.\n // The `tokenizer` export provides an interface to the tokenizer.\n\n function tokenizer(input, options) {\n return Parser.tokenizer(input, options)\n }\n\n exports.Node = Node;\n exports.Parser = Parser;\n exports.Position = Position;\n exports.SourceLocation = SourceLocation;\n exports.TokContext = TokContext;\n exports.Token = Token;\n exports.TokenType = TokenType;\n exports.defaultOptions = defaultOptions;\n exports.getLineInfo = getLineInfo;\n exports.isIdentifierChar = isIdentifierChar;\n exports.isIdentifierStart = isIdentifierStart;\n exports.isNewLine = isNewLine;\n exports.keywordTypes = keywords;\n exports.lineBreak = lineBreak;\n exports.lineBreakG = lineBreakG;\n exports.nonASCIIwhitespace = nonASCIIwhitespace;\n exports.parse = parse;\n exports.parseExpressionAt = parseExpressionAt;\n exports.tokContexts = types;\n exports.tokTypes = types$1;\n exports.tokenizer = tokenizer;\n exports.version = version;\n\n}));\n","/*!\n * Paper.js v0.12.18 - The Swiss Army Knife of Vector Graphics Scripting.\n * http://paperjs.org/\n *\n * Copyright (c) 2011 - 2020, Jürg Lehni & Jonathan Puckey\n * http://juerglehni.com/ & https://puckey.studio/\n *\n * Distributed under the MIT license. See LICENSE file for details.\n *\n * All rights reserved.\n *\n * Date: Wed Jul 17 14:57:24 2024 +0200\n *\n ***\n *\n * Straps.js - Class inheritance library with support for bean-style accessors\n *\n * Copyright (c) 2006 - 2020 Jürg Lehni\n * http://juerglehni.com/\n *\n * Distributed under the MIT license.\n *\n ***\n *\n * Acorn.js\n * https://marijnhaverbeke.nl/acorn/\n *\n * Acorn is a tiny, fast JavaScript parser written in JavaScript,\n * created by Marijn Haverbeke and released under an MIT license.\n *\n */\n\nvar paper = function(self, undefined) {\n\nself = self || require('./node/self.js');\nvar window = self.window,\n\tdocument = self.document;\n\nvar Base = new function() {\n\tvar hidden = /^(statics|enumerable|beans|preserve)$/,\n\t\tarray = [],\n\t\tslice = array.slice,\n\t\tcreate = Object.create,\n\t\tdescribe = Object.getOwnPropertyDescriptor,\n\t\tdefine = Object.defineProperty,\n\n\t\tforEach = array.forEach || function(iter, bind) {\n\t\t\tfor (var i = 0, l = this.length; i < l; i++) {\n\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tforIn = function(iter, bind) {\n\t\t\tfor (var i in this) {\n\t\t\t\tif (this.hasOwnProperty(i))\n\t\t\t\t\titer.call(bind, this[i], i, this);\n\t\t\t}\n\t\t},\n\n\t\tset = Object.assign || function(dst) {\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tfor (var key in src) {\n\t\t\t\t\tif (src.hasOwnProperty(key))\n\t\t\t\t\t\tdst[key] = src[key];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn dst;\n\t\t},\n\n\t\teach = function(obj, iter, bind) {\n\t\t\tif (obj) {\n\t\t\t\tvar desc = describe(obj, 'length');\n\t\t\t\t(desc && typeof desc.value === 'number' ? forEach : forIn)\n\t\t\t\t\t.call(obj, iter, bind = bind || obj);\n\t\t\t}\n\t\t\treturn bind;\n\t\t};\n\n\tfunction inject(dest, src, enumerable, beans, preserve) {\n\t\tvar beansNames = {};\n\n\t\tfunction field(name, val) {\n\t\t\tval = val || (val = describe(src, name))\n\t\t\t\t\t&& (val.get ? val : val.value);\n\t\t\tif (typeof val === 'string' && val[0] === '#')\n\t\t\t\tval = dest[val.substring(1)] || val;\n\t\t\tvar isFunc = typeof val === 'function',\n\t\t\t\tres = val,\n\t\t\t\tprev = preserve || isFunc && !val.base\n\t\t\t\t\t\t? (val && val.get ? name in dest : dest[name])\n\t\t\t\t\t\t: null,\n\t\t\t\tbean;\n\t\t\tif (!preserve || !prev) {\n\t\t\t\tif (isFunc && prev)\n\t\t\t\t\tval.base = prev;\n\t\t\t\tif (isFunc && beans !== false\n\t\t\t\t\t\t&& (bean = name.match(/^([gs]et|is)(([A-Z])(.*))$/)))\n\t\t\t\t\tbeansNames[bean[3].toLowerCase() + bean[4]] = bean[2];\n\t\t\t\tif (!res || isFunc || !res.get || typeof res.get !== 'function'\n\t\t\t\t\t\t|| !Base.isPlainObject(res)) {\n\t\t\t\t\tres = { value: res, writable: true };\n\t\t\t\t}\n\t\t\t\tif ((describe(dest, name)\n\t\t\t\t\t\t|| { configurable: true }).configurable) {\n\t\t\t\t\tres.configurable = true;\n\t\t\t\t\tres.enumerable = enumerable != null ? enumerable : !bean;\n\t\t\t\t}\n\t\t\t\tdefine(dest, name, res);\n\t\t\t}\n\t\t}\n\t\tif (src) {\n\t\t\tfor (var name in src) {\n\t\t\t\tif (src.hasOwnProperty(name) && !hidden.test(name))\n\t\t\t\t\tfield(name);\n\t\t\t}\n\t\t\tfor (var name in beansNames) {\n\t\t\t\tvar part = beansNames[name],\n\t\t\t\t\tset = dest['set' + part],\n\t\t\t\t\tget = dest['get' + part] || set && dest['is' + part];\n\t\t\t\tif (get && (beans === true || get.length === 0))\n\t\t\t\t\tfield(name, { get: get, set: set });\n\t\t\t}\n\t\t}\n\t\treturn dest;\n\t}\n\n\tfunction Base() {\n\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\tvar src = arguments[i];\n\t\t\tif (src)\n\t\t\t\tset(this, src);\n\t\t}\n\t\treturn this;\n\t}\n\n\treturn inject(Base, {\n\t\tinject: function(src) {\n\t\t\tif (src) {\n\t\t\t\tvar statics = src.statics === true ? src : src.statics,\n\t\t\t\t\tbeans = src.beans,\n\t\t\t\t\tpreserve = src.preserve;\n\t\t\t\tif (statics !== src)\n\t\t\t\t\tinject(this.prototype, src, src.enumerable, beans, preserve);\n\t\t\t\tinject(this, statics, null, beans, preserve);\n\t\t\t}\n\t\t\tfor (var i = 1, l = arguments.length; i < l; i++)\n\t\t\t\tthis.inject(arguments[i]);\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar base = this,\n\t\t\t\tctor,\n\t\t\t\tproto;\n\t\t\tfor (var i = 0, obj, l = arguments.length;\n\t\t\t\t\ti < l && !(ctor && proto); i++) {\n\t\t\t\tobj = arguments[i];\n\t\t\t\tctor = ctor || obj.initialize;\n\t\t\t\tproto = proto || obj.prototype;\n\t\t\t}\n\t\t\tctor = ctor || function() {\n\t\t\t\tbase.apply(this, arguments);\n\t\t\t};\n\t\t\tproto = ctor.prototype = proto || create(this.prototype);\n\t\t\tdefine(proto, 'constructor',\n\t\t\t\t\t{ value: ctor, writable: true, configurable: true });\n\t\t\tinject(ctor, this);\n\t\t\tif (arguments.length)\n\t\t\t\tthis.inject.apply(ctor, arguments);\n\t\t\tctor.base = base;\n\t\t\treturn ctor;\n\t\t}\n\t}).inject({\n\t\tenumerable: false,\n\n\t\tinitialize: Base,\n\n\t\tset: Base,\n\n\t\tinject: function() {\n\t\t\tfor (var i = 0, l = arguments.length; i < l; i++) {\n\t\t\t\tvar src = arguments[i];\n\t\t\t\tif (src) {\n\t\t\t\t\tinject(this, src, src.enumerable, src.beans, src.preserve);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\textend: function() {\n\t\t\tvar res = create(this);\n\t\t\treturn res.inject.apply(res, arguments);\n\t\t},\n\n\t\teach: function(iter, bind) {\n\t\t\treturn each(this, iter, bind);\n\t\t},\n\n\t\tclone: function() {\n\t\t\treturn new this.constructor(this);\n\t\t},\n\n\t\tstatics: {\n\t\t\tset: set,\n\t\t\teach: each,\n\t\t\tcreate: create,\n\t\t\tdefine: define,\n\t\t\tdescribe: describe,\n\n\t\t\tclone: function(obj) {\n\t\t\t\treturn set(new obj.constructor(), obj);\n\t\t\t},\n\n\t\t\tisPlainObject: function(obj) {\n\t\t\t\tvar ctor = obj != null && obj.constructor;\n\t\t\t\treturn ctor && (ctor === Object || ctor === Base\n\t\t\t\t\t\t|| ctor.name === 'Object');\n\t\t\t},\n\n\t\t\tpick: function(a, b) {\n\t\t\t\treturn a !== undefined ? a : b;\n\t\t\t},\n\n\t\t\tslice: function(list, begin, end) {\n\t\t\t\treturn slice.call(list, begin, end);\n\t\t\t}\n\t\t}\n\t});\n};\n\nif (typeof module !== 'undefined')\n\tmodule.exports = Base;\n\nBase.inject({\n\tenumerable: false,\n\n\ttoString: function() {\n\t\treturn this._id != null\n\t\t\t? (this._class || 'Object') + (this._name\n\t\t\t\t? \" '\" + this._name + \"'\"\n\t\t\t\t: ' @' + this._id)\n\t\t\t: '{ ' + Base.each(this, function(value, key) {\n\t\t\t\tif (!/^_/.test(key)) {\n\t\t\t\t\tvar type = typeof value;\n\t\t\t\t\tthis.push(key + ': ' + (type === 'number'\n\t\t\t\t\t\t\t? Formatter.instance.number(value)\n\t\t\t\t\t\t\t: type === 'string' ? \"'\" + value + \"'\" : value));\n\t\t\t\t}\n\t\t\t}, []).join(', ') + ' }';\n\t},\n\n\tgetClassName: function() {\n\t\treturn this._class || '';\n\t},\n\n\timportJSON: function(json) {\n\t\treturn Base.importJSON(json, this);\n\t},\n\n\texportJSON: function(options) {\n\t\treturn Base.exportJSON(this, options);\n\t},\n\n\ttoJSON: function() {\n\t\treturn Base.serialize(this);\n\t},\n\n\tset: function(props, exclude) {\n\t\tif (props)\n\t\t\tBase.filter(this, props, exclude, this._prioritize);\n\t\treturn this;\n\t}\n}, {\n\nbeans: false,\nstatics: {\n\texports: {},\n\n\textend: function extend() {\n\t\tvar res = extend.base.apply(this, arguments),\n\t\t\tname = res.prototype._class;\n\t\tif (name && !Base.exports[name])\n\t\t\tBase.exports[name] = res;\n\t\treturn res;\n\t},\n\n\tequals: function(obj1, obj2) {\n\t\tif (obj1 === obj2)\n\t\t\treturn true;\n\t\tif (obj1 && obj1.equals)\n\t\t\treturn obj1.equals(obj2);\n\t\tif (obj2 && obj2.equals)\n\t\t\treturn obj2.equals(obj1);\n\t\tif (obj1 && obj2\n\t\t\t\t&& typeof obj1 === 'object' && typeof obj2 === 'object') {\n\t\t\tif (Array.isArray(obj1) && Array.isArray(obj2)) {\n\t\t\t\tvar length = obj1.length;\n\t\t\t\tif (length !== obj2.length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tif (!Base.equals(obj1[length], obj2[length]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar keys = Object.keys(obj1),\n\t\t\t\t\tlength = keys.length;\n\t\t\t\tif (length !== Object.keys(obj2).length)\n\t\t\t\t\treturn false;\n\t\t\t\twhile (length--) {\n\t\t\t\t\tvar key = keys[length];\n\t\t\t\t\tif (!(obj2.hasOwnProperty(key)\n\t\t\t\t\t\t\t&& Base.equals(obj1[key], obj2[key])))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tread: function(list, start, options, amount) {\n\t\tif (this === Base) {\n\t\t\tvar value = this.peek(list, start);\n\t\t\tlist.__index++;\n\t\t\treturn value;\n\t\t}\n\t\tvar proto = this.prototype,\n\t\t\treadIndex = proto._readIndex,\n\t\t\tbegin = start || readIndex && list.__index || 0,\n\t\t\tlength = list.length,\n\t\t\tobj = list[begin];\n\t\tamount = amount || length - begin;\n\t\tif (obj instanceof this\n\t\t\t|| options && options.readNull && obj == null && amount <= 1) {\n\t\t\tif (readIndex)\n\t\t\t\tlist.__index = begin + 1;\n\t\t\treturn obj && options && options.clone ? obj.clone() : obj;\n\t\t}\n\t\tobj = Base.create(proto);\n\t\tif (readIndex)\n\t\t\tobj.__read = true;\n\t\tobj = obj.initialize.apply(obj, begin > 0 || begin + amount < length\n\t\t\t\t? Base.slice(list, begin, begin + amount)\n\t\t\t\t: list) || obj;\n\t\tif (readIndex) {\n\t\t\tlist.__index = begin + obj.__read;\n\t\t\tvar filtered = obj.__filtered;\n\t\t\tif (filtered) {\n\t\t\t\tlist.__filtered = filtered;\n\t\t\t\tobj.__filtered = undefined;\n\t\t\t}\n\t\t\tobj.__read = undefined;\n\t\t}\n\t\treturn obj;\n\t},\n\n\tpeek: function(list, start) {\n\t\treturn list[list.__index = start || list.__index || 0];\n\t},\n\n\tremain: function(list) {\n\t\treturn list.length - (list.__index || 0);\n\t},\n\n\treadList: function(list, start, options, amount) {\n\t\tvar res = [],\n\t\t\tentry,\n\t\t\tbegin = start || 0,\n\t\t\tend = amount ? begin + amount : list.length;\n\t\tfor (var i = begin; i < end; i++) {\n\t\t\tres.push(Array.isArray(entry = list[i])\n\t\t\t\t\t? this.read(entry, 0, options)\n\t\t\t\t\t: this.read(list, i, options, 1));\n\t\t}\n\t\treturn res;\n\t},\n\n\treadNamed: function(list, name, start, options, amount) {\n\t\tvar value = this.getNamed(list, name),\n\t\t\thasValue = value !== undefined;\n\t\tif (hasValue) {\n\t\t\tvar filtered = list.__filtered;\n\t\t\tif (!filtered) {\n\t\t\t\tvar source = this.getSource(list);\n\t\t\t\tfiltered = list.__filtered = Base.create(source);\n\t\t\t\tfiltered.__unfiltered = source;\n\t\t\t}\n\t\t\tfiltered[name] = undefined;\n\t\t}\n\t\treturn this.read(hasValue ? [value] : list, start, options, amount);\n\t},\n\n\treadSupported: function(list, dest) {\n\t\tvar source = this.getSource(list),\n\t\t\tthat = this,\n\t\t\tread = false;\n\t\tif (source) {\n\t\t\tObject.keys(source).forEach(function(key) {\n\t\t\t\tif (key in dest) {\n\t\t\t\t\tvar value = that.readNamed(list, key);\n\t\t\t\t\tif (value !== undefined) {\n\t\t\t\t\t\tdest[key] = value;\n\t\t\t\t\t}\n\t\t\t\t\tread = true;\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t\treturn read;\n\t},\n\n\tgetSource: function(list) {\n\t\tvar source = list.__source;\n\t\tif (source === undefined) {\n\t\t\tvar arg = list.length === 1 && list[0];\n\t\t\tsource = list.__source = arg && Base.isPlainObject(arg)\n\t\t\t\t? arg : null;\n\t\t}\n\t\treturn source;\n\t},\n\n\tgetNamed: function(list, name) {\n\t\tvar source = this.getSource(list);\n\t\tif (source) {\n\t\t\treturn name ? source[name] : list.__filtered || source;\n\t\t}\n\t},\n\n\thasNamed: function(list, name) {\n\t\treturn !!this.getNamed(list, name);\n\t},\n\n\tfilter: function(dest, source, exclude, prioritize) {\n\t\tvar processed;\n\n\t\tfunction handleKey(key) {\n\t\t\tif (!(exclude && key in exclude) &&\n\t\t\t\t!(processed && key in processed)) {\n\t\t\t\tvar value = source[key];\n\t\t\t\tif (value !== undefined)\n\t\t\t\t\tdest[key] = value;\n\t\t\t}\n\t\t}\n\n\t\tif (prioritize) {\n\t\t\tvar keys = {};\n\t\t\tfor (var i = 0, key, l = prioritize.length; i < l; i++) {\n\t\t\t\tif ((key = prioritize[i]) in source) {\n\t\t\t\t\thandleKey(key);\n\t\t\t\t\tkeys[key] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tprocessed = keys;\n\t\t}\n\n\t\tObject.keys(source.__unfiltered || source).forEach(handleKey);\n\t\treturn dest;\n\t},\n\n\tisPlainValue: function(obj, asString) {\n\t\treturn Base.isPlainObject(obj) || Array.isArray(obj)\n\t\t\t\t|| asString && typeof obj === 'string';\n\t},\n\n\tserialize: function(obj, options, compact, dictionary) {\n\t\toptions = options || {};\n\n\t\tvar isRoot = !dictionary,\n\t\t\tres;\n\t\tif (isRoot) {\n\t\t\toptions.formatter = new Formatter(options.precision);\n\t\t\tdictionary = {\n\t\t\t\tlength: 0,\n\t\t\t\tdefinitions: {},\n\t\t\t\treferences: {},\n\t\t\t\tadd: function(item, create) {\n\t\t\t\t\tvar id = '#' + item._id,\n\t\t\t\t\t\tref = this.references[id];\n\t\t\t\t\tif (!ref) {\n\t\t\t\t\t\tthis.length++;\n\t\t\t\t\t\tvar res = create.call(item),\n\t\t\t\t\t\t\tname = item._class;\n\t\t\t\t\t\tif (name && res[0] !== name)\n\t\t\t\t\t\t\tres.unshift(name);\n\t\t\t\t\t\tthis.definitions[id] = res;\n\t\t\t\t\t\tref = this.references[id] = [id];\n\t\t\t\t\t}\n\t\t\t\t\treturn ref;\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t\tif (obj && obj._serialize) {\n\t\t\tres = obj._serialize(options, dictionary);\n\t\t\tvar name = obj._class;\n\t\t\tif (name && !obj._compactSerialize && (isRoot || !compact)\n\t\t\t\t\t&& res[0] !== name) {\n\t\t\t\tres.unshift(name);\n\t\t\t}\n\t\t} else if (Array.isArray(obj)) {\n\t\t\tres = [];\n\t\t\tfor (var i = 0, l = obj.length; i < l; i++)\n\t\t\t\tres[i] = Base.serialize(obj[i], options, compact, dictionary);\n\t\t} else if (Base.isPlainObject(obj)) {\n\t\t\tres = {};\n\t\t\tvar keys = Object.keys(obj);\n\t\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i];\n\t\t\t\tres[key] = Base.serialize(obj[key], options, compact,\n\t\t\t\t\t\tdictionary);\n\t\t\t}\n\t\t} else if (typeof obj === 'number') {\n\t\t\tres = options.formatter.number(obj, options.precision);\n\t\t} else {\n\t\t\tres = obj;\n\t\t}\n\t\treturn isRoot && dictionary.length > 0\n\t\t\t\t? [['dictionary', dictionary.definitions], res]\n\t\t\t\t: res;\n\t},\n\n\tdeserialize: function(json, create, _data, _setDictionary, _isRoot) {\n\t\tvar res = json,\n\t\t\tisFirst = !_data,\n\t\t\thasDictionary = isFirst && json && json.length\n\t\t\t\t&& json[0][0] === 'dictionary';\n\t\t_data = _data || {};\n\t\tif (Array.isArray(json)) {\n\t\t\tvar type = json[0],\n\t\t\t\tisDictionary = type === 'dictionary';\n\t\t\tif (json.length == 1 && /^#/.test(type)) {\n\t\t\t\treturn _data.dictionary[type];\n\t\t\t}\n\t\t\ttype = Base.exports[type];\n\t\t\tres = [];\n\t\t\tfor (var i = type ? 1 : 0, l = json.length; i < l; i++) {\n\t\t\t\tres.push(Base.deserialize(json[i], create, _data,\n\t\t\t\t\t\tisDictionary, hasDictionary));\n\t\t\t}\n\t\t\tif (type) {\n\t\t\t\tvar args = res;\n\t\t\t\tif (create) {\n\t\t\t\t\tres = create(type, args, isFirst || _isRoot);\n\t\t\t\t} else {\n\t\t\t\t\tres = new type(args);\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (Base.isPlainObject(json)) {\n\t\t\tres = {};\n\t\t\tif (_setDictionary)\n\t\t\t\t_data.dictionary = res;\n\t\t\tfor (var key in json)\n\t\t\t\tres[key] = Base.deserialize(json[key], create, _data);\n\t\t}\n\t\treturn hasDictionary ? res[1] : res;\n\t},\n\n\texportJSON: function(obj, options) {\n\t\tvar json = Base.serialize(obj, options);\n\t\treturn options && options.asString == false\n\t\t\t\t? json\n\t\t\t\t: JSON.stringify(json);\n\t},\n\n\timportJSON: function(json, target) {\n\t\treturn Base.deserialize(\n\t\t\t\ttypeof json === 'string' ? JSON.parse(json) : json,\n\t\t\t\tfunction(ctor, args, isRoot) {\n\t\t\t\t\tvar useTarget = isRoot && target\n\t\t\t\t\t\t\t&& target.constructor === ctor,\n\t\t\t\t\t\tobj = useTarget ? target\n\t\t\t\t\t\t\t: Base.create(ctor.prototype);\n\t\t\t\t\tif (args.length === 1 && obj instanceof Item\n\t\t\t\t\t\t\t&& (useTarget || !(obj instanceof Layer))) {\n\t\t\t\t\t\tvar arg = args[0];\n\t\t\t\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\t\t\t\targ.insert = false;\n\t\t\t\t\t\t\tif (useTarget) {\n\t\t\t\t\t\t\t\targs = args.concat([Item.INSERT]);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\t(useTarget ? obj.set : ctor).apply(obj, args);\n\t\t\t\t\tif (useTarget)\n\t\t\t\t\t\ttarget = null;\n\t\t\t\t\treturn obj;\n\t\t\t\t});\n\t},\n\n\tpush: function(list, items) {\n\t\tvar itemsLength = items.length;\n\t\tif (itemsLength < 4096) {\n\t\t\tlist.push.apply(list, items);\n\t\t} else {\n\t\t\tvar startLength = list.length;\n\t\t\tlist.length += itemsLength;\n\t\t\tfor (var i = 0; i < itemsLength; i++) {\n\t\t\t\tlist[startLength + i] = items[i];\n\t\t\t}\n\t\t}\n\t\treturn list;\n\t},\n\n\tsplice: function(list, items, index, remove) {\n\t\tvar amount = items && items.length,\n\t\t\tappend = index === undefined;\n\t\tindex = append ? list.length : index;\n\t\tif (index > list.length)\n\t\t\tindex = list.length;\n\t\tfor (var i = 0; i < amount; i++)\n\t\t\titems[i]._index = index + i;\n\t\tif (append) {\n\t\t\tBase.push(list, items);\n\t\t\treturn [];\n\t\t} else {\n\t\t\tvar args = [index, remove];\n\t\t\tif (items)\n\t\t\t\tBase.push(args, items);\n\t\t\tvar removed = list.splice.apply(list, args);\n\t\t\tfor (var i = 0, l = removed.length; i < l; i++)\n\t\t\t\tremoved[i]._index = undefined;\n\t\t\tfor (var i = index + amount, l = list.length; i < l; i++)\n\t\t\t\tlist[i]._index = i;\n\t\t\treturn removed;\n\t\t}\n\t},\n\n\tcapitalize: function(str) {\n\t\treturn str.replace(/\\b[a-z]/g, function(match) {\n\t\t\treturn match.toUpperCase();\n\t\t});\n\t},\n\n\tcamelize: function(str) {\n\t\treturn str.replace(/-(.)/g, function(match, chr) {\n\t\t\treturn chr.toUpperCase();\n\t\t});\n\t},\n\n\thyphenate: function(str) {\n\t\treturn str.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n\t}\n}});\n\nvar Emitter = {\n\ton: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.on(key, value);\n\t\t\t}, this);\n\t\t} else {\n\t\t\tvar types = this._eventTypes,\n\t\t\t\tentry = types && types[type],\n\t\t\t\thandlers = this._callbacks = this._callbacks || {};\n\t\t\thandlers = handlers[type] = handlers[type] || [];\n\t\t\tif (handlers.indexOf(func) === -1) {\n\t\t\t\thandlers.push(func);\n\t\t\t\tif (entry && entry.install && handlers.length === 1)\n\t\t\t\t\tentry.install.call(this, type);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\toff: function(type, func) {\n\t\tif (typeof type !== 'string') {\n\t\t\tBase.each(type, function(value, key) {\n\t\t\t\tthis.off(key, value);\n\t\t\t}, this);\n\t\t\treturn;\n\t\t}\n\t\tvar types = this._eventTypes,\n\t\t\tentry = types && types[type],\n\t\t\thandlers = this._callbacks && this._callbacks[type],\n\t\t\tindex;\n\t\tif (handlers) {\n\t\t\tif (!func || (index = handlers.indexOf(func)) !== -1\n\t\t\t\t\t&& handlers.length === 1) {\n\t\t\t\tif (entry && entry.uninstall)\n\t\t\t\t\tentry.uninstall.call(this, type);\n\t\t\t\tdelete this._callbacks[type];\n\t\t\t} else if (index !== -1) {\n\t\t\t\thandlers.splice(index, 1);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\tonce: function(type, func) {\n\t\treturn this.on(type, function handler() {\n\t\t\tfunc.apply(this, arguments);\n\t\t\tthis.off(type, handler);\n\t\t});\n\t},\n\n\temit: function(type, event) {\n\t\tvar handlers = this._callbacks && this._callbacks[type];\n\t\tif (!handlers)\n\t\t\treturn false;\n\t\tvar args = Base.slice(arguments, 1),\n\t\t\tsetTarget = event && event.target && !event.currentTarget;\n\t\thandlers = handlers.slice();\n\t\tif (setTarget)\n\t\t\tevent.currentTarget = this;\n\t\tfor (var i = 0, l = handlers.length; i < l; i++) {\n\t\t\tif (handlers[i].apply(this, args) == false) {\n\t\t\t\tif (event && event.stop)\n\t\t\t\t\tevent.stop();\n\t\t\t\tbreak;\n\t\t }\n\t\t}\n\t\tif (setTarget)\n\t\t\tdelete event.currentTarget;\n\t\treturn true;\n\t},\n\n\tresponds: function(type) {\n\t\treturn !!(this._callbacks && this._callbacks[type]);\n\t},\n\n\tattach: '#on',\n\tdetach: '#off',\n\tfire: '#emit',\n\n\t_installEvents: function(install) {\n\t\tvar types = this._eventTypes,\n\t\t\thandlers = this._callbacks,\n\t\t\tkey = install ? 'install' : 'uninstall';\n\t\tif (types) {\n\t\t\tfor (var type in handlers) {\n\t\t\t\tif (handlers[type].length > 0) {\n\t\t\t\t\tvar entry = types[type],\n\t\t\t\t\t\tfunc = entry && entry[key];\n\t\t\t\t\tif (func)\n\t\t\t\t\t\tfunc.call(this, type);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tstatics: {\n\t\tinject: function inject(src) {\n\t\t\tvar events = src._events;\n\t\t\tif (events) {\n\t\t\t\tvar types = {};\n\t\t\t\tBase.each(events, function(entry, key) {\n\t\t\t\t\tvar isString = typeof entry === 'string',\n\t\t\t\t\t\tname = isString ? entry : key,\n\t\t\t\t\t\tpart = Base.capitalize(name),\n\t\t\t\t\t\ttype = name.substring(2).toLowerCase();\n\t\t\t\t\ttypes[type] = isString ? {} : entry;\n\t\t\t\t\tname = '_' + name;\n\t\t\t\t\tsrc['get' + part] = function() {\n\t\t\t\t\t\treturn this[name];\n\t\t\t\t\t};\n\t\t\t\t\tsrc['set' + part] = function(func) {\n\t\t\t\t\t\tvar prev = this[name];\n\t\t\t\t\t\tif (prev)\n\t\t\t\t\t\t\tthis.off(type, prev);\n\t\t\t\t\t\tif (func)\n\t\t\t\t\t\t\tthis.on(type, func);\n\t\t\t\t\t\tthis[name] = func;\n\t\t\t\t\t};\n\t\t\t\t});\n\t\t\t\tsrc._eventTypes = types;\n\t\t\t}\n\t\t\treturn inject.base.apply(this, arguments);\n\t\t}\n\t}\n};\n\nvar PaperScope = Base.extend({\n\t_class: 'PaperScope',\n\n\tinitialize: function PaperScope() {\n\t\tpaper = this;\n\t\tthis.settings = new Base({\n\t\t\tapplyMatrix: true,\n\t\t\tinsertItems: true,\n\t\t\thandleSize: 4,\n\t\t\thitTolerance: 0\n\t\t});\n\t\tthis.project = null;\n\t\tthis.projects = [];\n\t\tthis.tools = [];\n\t\tthis._id = PaperScope._id++;\n\t\tPaperScope._scopes[this._id] = this;\n\t\tvar proto = PaperScope.prototype;\n\t\tif (!this.support) {\n\t\t\tvar ctx = CanvasProvider.getContext(1, 1) || {};\n\t\t\tproto.support = {\n\t\t\t\tnativeDash: 'setLineDash' in ctx || 'mozDash' in ctx,\n\t\t\t\tnativeBlendModes: BlendMode.nativeModes\n\t\t\t};\n\t\t\tCanvasProvider.release(ctx);\n\t\t}\n\t\tif (!this.agent) {\n\t\t\tvar user = self.navigator.userAgent.toLowerCase(),\n\t\t\t\tos = (/(darwin|win|mac|linux|freebsd|sunos)/.exec(user)||[])[0],\n\t\t\t\tplatform = os === 'darwin' ? 'mac' : os,\n\t\t\t\tagent = proto.agent = proto.browser = { platform: platform };\n\t\t\tif (platform)\n\t\t\t\tagent[platform] = true;\n\t\t\tuser.replace(\n\t\t\t\t/(opera|chrome|safari|webkit|firefox|msie|trident|atom|node|jsdom)\\/?\\s*([.\\d]+)(?:.*version\\/([.\\d]+))?(?:.*rv\\:v?([.\\d]+))?/g,\n\t\t\t\tfunction(match, n, v1, v2, rv) {\n\t\t\t\t\tif (!agent.chrome) {\n\t\t\t\t\t\tvar v = n === 'opera' ? v2 :\n\t\t\t\t\t\t\t\t/^(node|trident)$/.test(n) ? rv : v1;\n\t\t\t\t\t\tagent.version = v;\n\t\t\t\t\t\tagent.versionNumber = parseFloat(v);\n\t\t\t\t\t\tn = { trident: 'msie', jsdom: 'node' }[n] || n;\n\t\t\t\t\t\tagent.name = n;\n\t\t\t\t\t\tagent[n] = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t);\n\t\t\tif (agent.chrome)\n\t\t\t\tdelete agent.webkit;\n\t\t\tif (agent.atom)\n\t\t\t\tdelete agent.chrome;\n\t\t}\n\t},\n\n\tversion: \"0.12.18\",\n\n\tgetView: function() {\n\t\tvar project = this.project;\n\t\treturn project && project._view;\n\t},\n\n\tgetPaper: function() {\n\t\treturn this;\n\t},\n\n\texecute: function(code, options) {\n\t\t\tvar exports = paper.PaperScript.execute(code, this, options);\n\t\t\tView.updateFocus();\n\t\t\treturn exports;\n\t},\n\n\tinstall: function(scope) {\n\t\tvar that = this;\n\t\tBase.each(['project', 'view', 'tool'], function(key) {\n\t\t\tBase.define(scope, key, {\n\t\t\t\tconfigurable: true,\n\t\t\t\tget: function() {\n\t\t\t\t\treturn that[key];\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\tfor (var key in this)\n\t\t\tif (!/^_/.test(key) && this[key])\n\t\t\t\tscope[key] = this[key];\n\t},\n\n\tsetup: function(element) {\n\t\tpaper = this;\n\t\tthis.project = new Project(element);\n\t\treturn this;\n\t},\n\n\tcreateCanvas: function(width, height) {\n\t\treturn CanvasProvider.getCanvas(width, height);\n\t},\n\n\tactivate: function() {\n\t\tpaper = this;\n\t},\n\n\tclear: function() {\n\t\tvar projects = this.projects,\n\t\t\ttools = this.tools;\n\t\tfor (var i = projects.length - 1; i >= 0; i--)\n\t\t\tprojects[i].remove();\n\t\tfor (var i = tools.length - 1; i >= 0; i--)\n\t\t\ttools[i].remove();\n\t},\n\n\tremove: function() {\n\t\tthis.clear();\n\t\tdelete PaperScope._scopes[this._id];\n\t},\n\n\tstatics: new function() {\n\t\tfunction handleAttribute(name) {\n\t\t\tname += 'Attribute';\n\t\t\treturn function(el, attr) {\n\t\t\t\treturn el[name](attr) || el[name]('data-paper-' + attr);\n\t\t\t};\n\t\t}\n\n\t\treturn {\n\t\t\t_scopes: {},\n\t\t\t_id: 0,\n\n\t\t\tget: function(id) {\n\t\t\t\treturn this._scopes[id] || null;\n\t\t\t},\n\n\t\t\tgetAttribute: handleAttribute('get'),\n\t\t\thasAttribute: handleAttribute('has')\n\t\t};\n\t}\n});\n\nvar PaperScopeItem = Base.extend(Emitter, {\n\n\tinitialize: function(activate) {\n\t\tthis._scope = paper;\n\t\tthis._index = this._scope[this._list].push(this) - 1;\n\t\tif (activate || !this._scope[this._reference])\n\t\t\tthis.activate();\n\t},\n\n\tactivate: function() {\n\t\tif (!this._scope)\n\t\t\treturn false;\n\t\tvar prev = this._scope[this._reference];\n\t\tif (prev && prev !== this)\n\t\t\tprev.emit('deactivate');\n\t\tthis._scope[this._reference] = this;\n\t\tthis.emit('activate', prev);\n\t\treturn true;\n\t},\n\n\tisActive: function() {\n\t\treturn this._scope[this._reference] === this;\n\t},\n\n\tremove: function() {\n\t\tif (this._index == null)\n\t\t\treturn false;\n\t\tBase.splice(this._scope[this._list], null, this._index, 1);\n\t\tif (this._scope[this._reference] == this)\n\t\t\tthis._scope[this._reference] = null;\n\t\tthis._scope = null;\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._scope.getView();\n\t}\n});\n\nvar CollisionDetection = {\n\tfindItemBoundsCollisions: function(items1, items2, tolerance) {\n\t\tfunction getBounds(items) {\n\t\t\tvar bounds = new Array(items.length);\n\t\t\tfor (var i = 0; i < items.length; i++) {\n\t\t\t\tvar rect = items[i].getBounds();\n\t\t\t\tbounds[i] = [rect.left, rect.top, rect.right, rect.bottom];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(items1),\n\t\t\tbounds2 = !items2 || items2 === items1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(items2);\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindCurveBoundsCollisions: function(curves1, curves2, tolerance, bothAxis) {\n\t\tfunction getBounds(curves) {\n\t\t\tvar min = Math.min,\n\t\t\t\tmax = Math.max,\n\t\t\t\tbounds = new Array(curves.length);\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar v = curves[i];\n\t\t\t\tbounds[i] = [\n\t\t\t\t\tmin(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmin(v[1], v[3], v[5], v[7]),\n\t\t\t\t\tmax(v[0], v[2], v[4], v[6]),\n\t\t\t\t\tmax(v[1], v[3], v[5], v[7])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn bounds;\n\t\t}\n\n\t\tvar bounds1 = getBounds(curves1),\n\t\t\tbounds2 = !curves2 || curves2 === curves1\n\t\t\t\t? bounds1\n\t\t\t\t: getBounds(curves2);\n\t\tif (bothAxis) {\n\t\t\tvar hor = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, false, true),\n\t\t\t\tver = this.findBoundsCollisions(\n\t\t\t\t\tbounds1, bounds2, tolerance || 0, true, true),\n\t\t\t\tlist = [];\n\t\t\tfor (var i = 0, l = hor.length; i < l; i++) {\n\t\t\t\tlist[i] = { hor: hor[i], ver: ver[i] };\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\t\treturn this.findBoundsCollisions(bounds1, bounds2, tolerance || 0);\n\t},\n\n\tfindBoundsCollisions: function(boundsA, boundsB, tolerance,\n\t\tsweepVertical, onlySweepAxisCollisions) {\n\t\tvar self = !boundsB || boundsA === boundsB,\n\t\t\tallBounds = self ? boundsA : boundsA.concat(boundsB),\n\t\t\tlengthA = boundsA.length,\n\t\t\tlengthAll = allBounds.length;\n\n\t\tfunction binarySearch(indices, coord, value) {\n\t\t\tvar lo = 0,\n\t\t\t\thi = indices.length;\n\t\t\twhile (lo < hi) {\n\t\t\t\tvar mid = (hi + lo) >>> 1;\n\t\t\t\tif (allBounds[indices[mid]][coord] < value) {\n\t\t\t\t\tlo = mid + 1;\n\t\t\t\t} else {\n\t\t\t\t\thi = mid;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn lo - 1;\n\t\t}\n\n\t\tvar pri0 = sweepVertical ? 1 : 0,\n\t\t\tpri1 = pri0 + 2,\n\t\t\tsec0 = sweepVertical ? 0 : 1,\n\t\t\tsec1 = sec0 + 2;\n\t\tvar allIndicesByPri0 = new Array(lengthAll);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tallIndicesByPri0[i] = i;\n\t\t}\n\t\tallIndicesByPri0.sort(function(i1, i2) {\n\t\t\treturn allBounds[i1][pri0] - allBounds[i2][pri0];\n\t\t});\n\t\tvar activeIndicesByPri1 = [],\n\t\t\tallCollisions = new Array(lengthA);\n\t\tfor (var i = 0; i < lengthAll; i++) {\n\t\t\tvar curIndex = allIndicesByPri0[i],\n\t\t\t\tcurBounds = allBounds[curIndex],\n\t\t\t\torigIndex = self ? curIndex : curIndex - lengthA,\n\t\t\t\tisCurrentA = curIndex < lengthA,\n\t\t\t\tisCurrentB = self || !isCurrentA,\n\t\t\t\tcurCollisions = isCurrentA ? [] : null;\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar pruneCount = binarySearch(activeIndicesByPri1, pri1,\n\t\t\t\t\t\tcurBounds[pri0] - tolerance) + 1;\n\t\t\t\tactiveIndicesByPri1.splice(0, pruneCount);\n\t\t\t\tif (self && onlySweepAxisCollisions) {\n\t\t\t\t\tcurCollisions = curCollisions.concat(activeIndicesByPri1);\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j];\n\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar curSec1 = curBounds[sec1],\n\t\t\t\t\t\tcurSec0 = curBounds[sec0];\n\t\t\t\t\tfor (var j = 0; j < activeIndicesByPri1.length; j++) {\n\t\t\t\t\t\tvar activeIndex = activeIndicesByPri1[j],\n\t\t\t\t\t\t\tactiveBounds = allBounds[activeIndex],\n\t\t\t\t\t\t\tisActiveA = activeIndex < lengthA,\n\t\t\t\t\t\t\tisActiveB = self || activeIndex >= lengthA;\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\tonlySweepAxisCollisions ||\n\t\t\t\t\t\t\t(\n\t\t\t\t\t\t\t\tisCurrentA && isActiveB ||\n\t\t\t\t\t\t\t\tisCurrentB && isActiveA\n\t\t\t\t\t\t\t) && (\n\t\t\t\t\t\t\t\tcurSec1 >= activeBounds[sec0] - tolerance &&\n\t\t\t\t\t\t\t\tcurSec0 <= activeBounds[sec1] + tolerance\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (isCurrentA && isActiveB) {\n\t\t\t\t\t\t\t\tcurCollisions.push(\n\t\t\t\t\t\t\t\t\tself ? activeIndex : activeIndex - lengthA);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (isCurrentB && isActiveA) {\n\t\t\t\t\t\t\t\tallCollisions[activeIndex].push(origIndex);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (isCurrentA) {\n\t\t\t\tif (boundsA === boundsB) {\n\t\t\t\t\tcurCollisions.push(curIndex);\n\t\t\t\t}\n\t\t\t\tallCollisions[curIndex] = curCollisions;\n\t\t\t}\n\t\t\tif (activeIndicesByPri1.length) {\n\t\t\t\tvar curPri1 = curBounds[pri1],\n\t\t\t\t\tindex = binarySearch(activeIndicesByPri1, pri1, curPri1);\n\t\t\t\tactiveIndicesByPri1.splice(index + 1, 0, curIndex);\n\t\t\t} else {\n\t\t\t\tactiveIndicesByPri1.push(curIndex);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0; i < allCollisions.length; i++) {\n\t\t\tvar collisions = allCollisions[i];\n\t\t\tif (collisions) {\n\t\t\t\tcollisions.sort(function(i1, i2) { return i1 - i2; });\n\t\t\t}\n\t\t}\n\t\treturn allCollisions;\n\t}\n};\n\nvar Formatter = Base.extend({\n\tinitialize: function(precision) {\n\t\tthis.precision = Base.pick(precision, 5);\n\t\tthis.multiplier = Math.pow(10, this.precision);\n\t},\n\n\tnumber: function(val) {\n\t\treturn this.precision < 16\n\t\t\t\t? Math.round(val * this.multiplier) / this.multiplier : val;\n\t},\n\n\tpair: function(val1, val2, separator) {\n\t\treturn this.number(val1) + (separator || ',') + this.number(val2);\n\t},\n\n\tpoint: function(val, separator) {\n\t\treturn this.number(val.x) + (separator || ',') + this.number(val.y);\n\t},\n\n\tsize: function(val, separator) {\n\t\treturn this.number(val.width) + (separator || ',')\n\t\t\t\t+ this.number(val.height);\n\t},\n\n\trectangle: function(val, separator) {\n\t\treturn this.point(val, separator) + (separator || ',')\n\t\t\t\t+ this.size(val, separator);\n\t}\n});\n\nFormatter.instance = new Formatter();\n\nvar Numerical = new function() {\n\n\tvar abscissas = [\n\t\t[ 0.5773502691896257645091488],\n\t\t[0,0.7745966692414833770358531],\n\t\t[ 0.3399810435848562648026658,0.8611363115940525752239465],\n\t\t[0,0.5384693101056830910363144,0.9061798459386639927976269],\n\t\t[ 0.2386191860831969086305017,0.6612093864662645136613996,0.9324695142031520278123016],\n\t\t[0,0.4058451513773971669066064,0.7415311855993944398638648,0.9491079123427585245261897],\n\t\t[ 0.1834346424956498049394761,0.5255324099163289858177390,0.7966664774136267395915539,0.9602898564975362316835609],\n\t\t[0,0.3242534234038089290385380,0.6133714327005903973087020,0.8360311073266357942994298,0.9681602395076260898355762],\n\t\t[ 0.1488743389816312108848260,0.4333953941292471907992659,0.6794095682990244062343274,0.8650633666889845107320967,0.9739065285171717200779640],\n\t\t[0,0.2695431559523449723315320,0.5190961292068118159257257,0.7301520055740493240934163,0.8870625997680952990751578,0.9782286581460569928039380],\n\t\t[ 0.1252334085114689154724414,0.3678314989981801937526915,0.5873179542866174472967024,0.7699026741943046870368938,0.9041172563704748566784659,0.9815606342467192506905491],\n\t\t[0,0.2304583159551347940655281,0.4484927510364468528779129,0.6423493394403402206439846,0.8015780907333099127942065,0.9175983992229779652065478,0.9841830547185881494728294],\n\t\t[ 0.1080549487073436620662447,0.3191123689278897604356718,0.5152486363581540919652907,0.6872929048116854701480198,0.8272013150697649931897947,0.9284348836635735173363911,0.9862838086968123388415973],\n\t\t[0,0.2011940939974345223006283,0.3941513470775633698972074,0.5709721726085388475372267,0.7244177313601700474161861,0.8482065834104272162006483,0.9372733924007059043077589,0.9879925180204854284895657],\n\t\t[ 0.0950125098376374401853193,0.2816035507792589132304605,0.4580167776572273863424194,0.6178762444026437484466718,0.7554044083550030338951012,0.8656312023878317438804679,0.9445750230732325760779884,0.9894009349916499325961542]\n\t];\n\n\tvar weights = [\n\t\t[1],\n\t\t[0.8888888888888888888888889,0.5555555555555555555555556],\n\t\t[0.6521451548625461426269361,0.3478548451374538573730639],\n\t\t[0.5688888888888888888888889,0.4786286704993664680412915,0.2369268850561890875142640],\n\t\t[0.4679139345726910473898703,0.3607615730481386075698335,0.1713244923791703450402961],\n\t\t[0.4179591836734693877551020,0.3818300505051189449503698,0.2797053914892766679014678,0.1294849661688696932706114],\n\t\t[0.3626837833783619829651504,0.3137066458778872873379622,0.2223810344533744705443560,0.1012285362903762591525314],\n\t\t[0.3302393550012597631645251,0.3123470770400028400686304,0.2606106964029354623187429,0.1806481606948574040584720,0.0812743883615744119718922],\n\t\t[0.2955242247147528701738930,0.2692667193099963550912269,0.2190863625159820439955349,0.1494513491505805931457763,0.0666713443086881375935688],\n\t\t[0.2729250867779006307144835,0.2628045445102466621806889,0.2331937645919904799185237,0.1862902109277342514260976,0.1255803694649046246346943,0.0556685671161736664827537],\n\t\t[0.2491470458134027850005624,0.2334925365383548087608499,0.2031674267230659217490645,0.1600783285433462263346525,0.1069393259953184309602547,0.0471753363865118271946160],\n\t\t[0.2325515532308739101945895,0.2262831802628972384120902,0.2078160475368885023125232,0.1781459807619457382800467,0.1388735102197872384636018,0.0921214998377284479144218,0.0404840047653158795200216],\n\t\t[0.2152638534631577901958764,0.2051984637212956039659241,0.1855383974779378137417166,0.1572031671581935345696019,0.1215185706879031846894148,0.0801580871597602098056333,0.0351194603317518630318329],\n\t\t[0.2025782419255612728806202,0.1984314853271115764561183,0.1861610000155622110268006,0.1662692058169939335532009,0.1395706779261543144478048,0.1071592204671719350118695,0.0703660474881081247092674,0.0307532419961172683546284],\n\t\t[0.1894506104550684962853967,0.1826034150449235888667637,0.1691565193950025381893121,0.1495959888165767320815017,0.1246289712555338720524763,0.0951585116824927848099251,0.0622535239386478928628438,0.0271524594117540948517806]\n\t];\n\n\tvar abs = Math.abs,\n\t\tsqrt = Math.sqrt,\n\t\tpow = Math.pow,\n\t\tlog2 = Math.log2 || function(x) {\n\t\t\treturn Math.log(x) * Math.LOG2E;\n\t\t},\n\t\tEPSILON = 1e-12,\n\t\tMACHINE_EPSILON = 1.12e-16;\n\n\tfunction clamp(value, min, max) {\n\t\treturn value < min ? min : value > max ? max : value;\n\t}\n\n\tfunction getDiscriminant(a, b, c) {\n\t\tfunction split(v) {\n\t\t\tvar x = v * 134217729,\n\t\t\t\ty = v - x,\n\t\t\t\thi = y + x,\n\t\t\t\tlo = v - hi;\n\t\t\treturn [hi, lo];\n\t\t}\n\n\t\tvar D = b * b - a * c,\n\t\t\tE = b * b + a * c;\n\t\tif (abs(D) * 3 < E) {\n\t\t\tvar ad = split(a),\n\t\t\t\tbd = split(b),\n\t\t\t\tcd = split(c),\n\t\t\t\tp = b * b,\n\t\t\t\tdp = (bd[0] * bd[0] - p + 2 * bd[0] * bd[1]) + bd[1] * bd[1],\n\t\t\t\tq = a * c,\n\t\t\t\tdq = (ad[0] * cd[0] - q + ad[0] * cd[1] + ad[1] * cd[0])\n\t\t\t\t\t\t+ ad[1] * cd[1];\n\t\t\tD = (p - q) + (dp - dq);\n\t\t}\n\t\treturn D;\n\t}\n\n\tfunction getNormalizationFactor() {\n\t\tvar norm = Math.max.apply(Math, arguments);\n\t\treturn norm && (norm < 1e-8 || norm > 1e8)\n\t\t\t\t? pow(2, -Math.round(log2(norm)))\n\t\t\t\t: 0;\n\t}\n\n\treturn {\n\t\tEPSILON: EPSILON,\n\t\tMACHINE_EPSILON: MACHINE_EPSILON,\n\t\tCURVETIME_EPSILON: 1e-8,\n\t\tGEOMETRIC_EPSILON: 1e-7,\n\t\tTRIGONOMETRIC_EPSILON: 1e-8,\n\t\tANGULAR_EPSILON: 1e-5,\n\t\tKAPPA: 4 * (sqrt(2) - 1) / 3,\n\n\t\tisZero: function(val) {\n\t\t\treturn val >= -EPSILON && val <= EPSILON;\n\t\t},\n\n\t\tisMachineZero: function(val) {\n\t\t\treturn val >= -MACHINE_EPSILON && val <= MACHINE_EPSILON;\n\t\t},\n\n\t\tclamp: clamp,\n\n\t\tintegrate: function(f, a, b, n) {\n\t\t\tvar x = abscissas[n - 2],\n\t\t\t\tw = weights[n - 2],\n\t\t\t\tA = (b - a) * 0.5,\n\t\t\t\tB = A + a,\n\t\t\t\ti = 0,\n\t\t\t\tm = (n + 1) >> 1,\n\t\t\t\tsum = n & 1 ? w[i++] * f(B) : 0;\n\t\t\twhile (i < m) {\n\t\t\t\tvar Ax = A * x[i];\n\t\t\t\tsum += w[i++] * (f(B + Ax) + f(B - Ax));\n\t\t\t}\n\t\t\treturn A * sum;\n\t\t},\n\n\t\tfindRoot: function(f, df, x, a, b, n, tolerance) {\n\t\t\tfor (var i = 0; i < n; i++) {\n\t\t\t\tvar fx = f(x),\n\t\t\t\t\tdx = fx / df(x),\n\t\t\t\t\tnx = x - dx;\n\t\t\t\tif (abs(dx) < tolerance) {\n\t\t\t\t\tx = nx;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (fx > 0) {\n\t\t\t\t\tb = x;\n\t\t\t\t\tx = nx <= a ? (a + b) * 0.5 : nx;\n\t\t\t\t} else {\n\t\t\t\t\ta = x;\n\t\t\t\t\tx = nx >= b ? (a + b) * 0.5 : nx;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn clamp(x, a, b);\n\t\t},\n\n\t\tsolveQuadratic: function(a, b, c, roots, min, max) {\n\t\t\tvar x1, x2 = Infinity;\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\tif (abs(b) < EPSILON)\n\t\t\t\t\treturn abs(c) < EPSILON ? -1 : 0;\n\t\t\t\tx1 = -c / b;\n\t\t\t} else {\n\t\t\t\tb *= -0.5;\n\t\t\t\tvar D = getDiscriminant(a, b, c);\n\t\t\t\tif (D && abs(D) < MACHINE_EPSILON) {\n\t\t\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c));\n\t\t\t\t\tif (f) {\n\t\t\t\t\t\ta *= f;\n\t\t\t\t\t\tb *= f;\n\t\t\t\t\t\tc *= f;\n\t\t\t\t\t\tD = getDiscriminant(a, b, c);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (D >= -MACHINE_EPSILON) {\n\t\t\t\t\tvar Q = D < 0 ? 0 : sqrt(D),\n\t\t\t\t\t\tR = b + (b < 0 ? -Q : Q);\n\t\t\t\t\tif (R === 0) {\n\t\t\t\t\t\tx1 = c / a;\n\t\t\t\t\t\tx2 = -x1;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tx1 = R / a;\n\t\t\t\t\t\tx2 = c / R;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = 0,\n\t\t\t\tboundless = min == null,\n\t\t\t\tminB = min - EPSILON,\n\t\t\t\tmaxB = max + EPSILON;\n\t\t\tif (isFinite(x1) && (boundless || x1 > minB && x1 < maxB))\n\t\t\t\troots[count++] = boundless ? x1 : clamp(x1, min, max);\n\t\t\tif (x2 !== x1\n\t\t\t\t\t&& isFinite(x2) && (boundless || x2 > minB && x2 < maxB))\n\t\t\t\troots[count++] = boundless ? x2 : clamp(x2, min, max);\n\t\t\treturn count;\n\t\t},\n\n\t\tsolveCubic: function(a, b, c, d, roots, min, max) {\n\t\t\tvar f = getNormalizationFactor(abs(a), abs(b), abs(c), abs(d)),\n\t\t\t\tx, b1, c2, qd, q;\n\t\t\tif (f) {\n\t\t\t\ta *= f;\n\t\t\t\tb *= f;\n\t\t\t\tc *= f;\n\t\t\t\td *= f;\n\t\t\t}\n\n\t\t\tfunction evaluate(x0) {\n\t\t\t\tx = x0;\n\t\t\t\tvar tmp = a * x;\n\t\t\t\tb1 = tmp + b;\n\t\t\t\tc2 = b1 * x + c;\n\t\t\t\tqd = (tmp + b1) * x + c2;\n\t\t\t\tq = c2 * x + d;\n\t\t\t}\n\n\t\t\tif (abs(a) < EPSILON) {\n\t\t\t\ta = b;\n\t\t\t\tb1 = c;\n\t\t\t\tc2 = d;\n\t\t\t\tx = Infinity;\n\t\t\t} else if (abs(d) < EPSILON) {\n\t\t\t\tb1 = b;\n\t\t\t\tc2 = c;\n\t\t\t\tx = 0;\n\t\t\t} else {\n\t\t\t\tevaluate(-(b / a) / 3);\n\t\t\t\tvar t = q / a,\n\t\t\t\t\tr = pow(abs(t), 1/3),\n\t\t\t\t\ts = t < 0 ? -1 : 1,\n\t\t\t\t\ttd = -qd / a,\n\t\t\t\t\trd = td > 0 ? 1.324717957244746 * Math.max(r, sqrt(td)) : r,\n\t\t\t\t\tx0 = x - s * rd;\n\t\t\t\tif (x0 !== x) {\n\t\t\t\t\tdo {\n\t\t\t\t\t\tevaluate(x0);\n\t\t\t\t\t\tx0 = qd === 0 ? x : x - q / qd / (1 + MACHINE_EPSILON);\n\t\t\t\t\t} while (s * x0 > s * x);\n\t\t\t\t\tif (abs(a) * x * x > abs(d / x)) {\n\t\t\t\t\t\tc2 = -d / x;\n\t\t\t\t\t\tb1 = (c2 - c) / x;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar count = Numerical.solveQuadratic(a, b1, c2, roots, min, max),\n\t\t\t\tboundless = min == null;\n\t\t\tif (isFinite(x) && (count === 0\n\t\t\t\t\t|| count > 0 && x !== roots[0] && x !== roots[1])\n\t\t\t\t\t&& (boundless || x > min - EPSILON && x < max + EPSILON))\n\t\t\t\troots[count++] = boundless ? x : clamp(x, min, max);\n\t\t\treturn count;\n\t\t}\n\t};\n};\n\nvar UID = {\n\t_id: 1,\n\t_pools: {},\n\n\tget: function(name) {\n\t\tif (name) {\n\t\t\tvar pool = this._pools[name];\n\t\t\tif (!pool)\n\t\t\t\tpool = this._pools[name] = { _id: 1 };\n\t\t\treturn pool._id++;\n\t\t} else {\n\t\t\treturn this._id++;\n\t\t}\n\t}\n};\n\nvar Point = Base.extend({\n\t_class: 'Point',\n\t_readIndex: true,\n\n\tinitialize: function Point(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasY = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasY ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasY ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('angle' in obj) {\n\t\t\t\tthis._set(obj.length || 0, 0);\n\t\t\t\tthis.setAngle(obj.angle || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\treturn this;\n\t},\n\n\tequals: function(point) {\n\t\treturn this === point || point\n\t\t\t\t&& (this.x === point.x && this.y === point.y\n\t\t\t\t\t|| Array.isArray(point)\n\t\t\t\t\t\t&& this.x === point[0] && this.y === point[1])\n\t\t\t\t|| false;\n\t},\n\n\tclone: function() {\n\t\treturn new Point(this.x, this.y);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x) + ', y: ' + f.number(this.y) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x), f.number(this.y)];\n\t},\n\n\tgetLength: function() {\n\t\treturn Math.sqrt(this.x * this.x + this.y * this.y);\n\t},\n\n\tsetLength: function(length) {\n\t\tif (this.isZero()) {\n\t\t\tvar angle = this._angle || 0;\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t} else {\n\t\t\tvar scale = length / this.getLength();\n\t\t\tif (Numerical.isZero(scale))\n\t\t\t\tthis.getAngle();\n\t\t\tthis._set(\n\t\t\t\tthis.x * scale,\n\t\t\t\tthis.y * scale\n\t\t\t);\n\t\t}\n\t},\n\tgetAngle: function() {\n\t\treturn this.getAngleInRadians.apply(this, arguments) * 180 / Math.PI;\n\t},\n\n\tsetAngle: function(angle) {\n\t\tthis.setAngleInRadians.call(this, angle * Math.PI / 180);\n\t},\n\n\tgetAngleInDegrees: '#getAngle',\n\tsetAngleInDegrees: '#setAngle',\n\n\tgetAngleInRadians: function() {\n\t\tif (!arguments.length) {\n\t\t\treturn this.isZero()\n\t\t\t\t\t? this._angle || 0\n\t\t\t\t\t: this._angle = Math.atan2(this.y, this.x);\n\t\t} else {\n\t\t\tvar point = Point.read(arguments),\n\t\t\t\tdiv = this.getLength() * point.getLength();\n\t\t\tif (Numerical.isZero(div)) {\n\t\t\t\treturn NaN;\n\t\t\t} else {\n\t\t\t\tvar a = this.dot(point) / div;\n\t\t\t\treturn Math.acos(a < -1 ? -1 : a > 1 ? 1 : a);\n\t\t\t}\n\t\t}\n\t},\n\n\tsetAngleInRadians: function(angle) {\n\t\tthis._angle = angle;\n\t\tif (!this.isZero()) {\n\t\t\tvar length = this.getLength();\n\t\t\tthis._set(\n\t\t\t\tMath.cos(angle) * length,\n\t\t\t\tMath.sin(angle) * length\n\t\t\t);\n\t\t}\n\t},\n\n\tgetQuadrant: function() {\n\t\treturn this.x >= 0 ? this.y >= 0 ? 1 : 4 : this.y >= 0 ? 2 : 3;\n\t}\n}, {\n\tbeans: false,\n\n\tgetDirectedAngle: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Math.atan2(this.cross(point), this.dot(point)) * 180 / Math.PI;\n\t},\n\n\tgetDistance: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tx = point.x - this.x,\n\t\t\ty = point.y - this.y,\n\t\t\td = x * x + y * y,\n\t\t\tsquared = Base.read(args);\n\t\treturn squared ? d : Math.sqrt(d);\n\t},\n\n\tnormalize: function(length) {\n\t\tif (length === undefined)\n\t\t\tlength = 1;\n\t\tvar current = this.getLength(),\n\t\t\tscale = current !== 0 ? length / current : 0,\n\t\t\tpoint = new Point(this.x * scale, this.y * scale);\n\t\tif (scale >= 0)\n\t\t\tpoint._angle = this._angle;\n\t\treturn point;\n\t},\n\n\trotate: function(angle, center) {\n\t\tif (angle === 0)\n\t\t\treturn this.clone();\n\t\tangle = angle * Math.PI / 180;\n\t\tvar point = center ? this.subtract(center) : this,\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle);\n\t\tpoint = new Point(\n\t\t\tpoint.x * cos - point.y * sin,\n\t\t\tpoint.x * sin + point.y * cos\n\t\t);\n\t\treturn center ? point.add(center) : point;\n\t},\n\n\ttransform: function(matrix) {\n\t\treturn matrix ? matrix._transformPoint(this) : this;\n\t},\n\n\tadd: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x + point.x, this.y + point.y);\n\t},\n\n\tsubtract: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x - point.x, this.y - point.y);\n\t},\n\n\tmultiply: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x * point.x, this.y * point.y);\n\t},\n\n\tdivide: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x / point.x, this.y / point.y);\n\t},\n\n\tmodulo: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn new Point(this.x % point.x, this.y % point.y);\n\t},\n\n\tnegate: function() {\n\t\treturn new Point(-this.x, -this.y);\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this);\n\t},\n\n\tisClose: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\ttolerance = Base.read(args);\n\t\treturn this.getDistance(point) <= tolerance;\n\t},\n\n\tisCollinear: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isCollinear(this.x, this.y, point.x, point.y);\n\t},\n\n\tisColinear: '#isCollinear',\n\n\tisOrthogonal: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn Point.isOrthogonal(this.x, this.y, point.x, point.y);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.x) && isZero(this.y);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.x) || isNaN(this.y);\n\t},\n\n\tisInQuadrant: function(q) {\n\t\treturn this.x * (q > 1 && q < 4 ? -1 : 1) >= 0\n\t\t\t&& this.y * (q > 2 ? -1 : 1) >= 0;\n\t},\n\n\tdot: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.x + this.y * point.y;\n\t},\n\n\tcross: function() {\n\t\tvar point = Point.read(arguments);\n\t\treturn this.x * point.y - this.y * point.x;\n\t},\n\n\tproject: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tscale = point.isZero() ? 0 : this.dot(point) / point.dot(point);\n\t\treturn new Point(\n\t\t\tpoint.x * scale,\n\t\t\tpoint.y * scale\n\t\t);\n\t},\n\n\tstatics: {\n\t\tmin: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.min(point1.x, point2.x),\n\t\t\t\tMath.min(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\tmax: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tpoint1 = Point.read(args),\n\t\t\t\tpoint2 = Point.read(args);\n\t\t\treturn new Point(\n\t\t\t\tMath.max(point1.x, point2.x),\n\t\t\t\tMath.max(point1.y, point2.y)\n\t\t\t);\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Point(Math.random(), Math.random());\n\t\t},\n\n\t\tisCollinear: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * y2 - y1 * x2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t},\n\n\t\tisOrthogonal: function(x1, y1, x2, y2) {\n\t\t\treturn Math.abs(x1 * x2 + y1 * y2)\n\t\t\t\t\t<= Math.sqrt((x1 * x1 + y1 * y1) * (x2 * x2 + y2 * y2))\n\t\t\t\t\t\t* 1e-8;\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Point(op(this.x), op(this.y));\n\t};\n}, {}));\n\nvar LinkedPoint = Point.extend({\n\tinitialize: function Point(x, y, owner, setter) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\treturn this._setter === 'setPosition' ? 4 : 0;\n\t}\n});\n\nvar Size = Base.extend({\n\t_class: 'Size',\n\t_readIndex: true,\n\n\tinitialize: function Size(arg0, arg1) {\n\t\tvar type = typeof arg0,\n\t\t\treading = this.__read,\n\t\t\tread = 0;\n\t\tif (type === 'number') {\n\t\t\tvar hasHeight = typeof arg1 === 'number';\n\t\t\tthis._set(arg0, hasHeight ? arg1 : arg0);\n\t\t\tif (reading)\n\t\t\t\tread = hasHeight ? 2 : 1;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0);\n\t\t\tif (reading)\n\t\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else {\n\t\t\tvar obj = type === 'string' ? arg0.split(/[\\s,]+/) || [] : arg0;\n\t\t\tread = 1;\n\t\t\tif (Array.isArray(obj)) {\n\t\t\t\tthis._set(+obj[0], +(obj.length > 1 ? obj[1] : obj[0]));\n\t\t\t} else if ('width' in obj) {\n\t\t\t\tthis._set(obj.width || 0, obj.height || 0);\n\t\t\t} else if ('x' in obj) {\n\t\t\t\tthis._set(obj.x || 0, obj.y || 0);\n\t\t\t} else {\n\t\t\t\tthis._set(0, 0);\n\t\t\t\tread = 0;\n\t\t\t}\n\t\t}\n\t\tif (reading)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(width, height) {\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tequals: function(size) {\n\t\treturn size === this || size && (this.width === size.width\n\t\t\t\t&& this.height === size.height\n\t\t\t\t|| Array.isArray(size) && this.width === size[0]\n\t\t\t\t\t&& this.height === size[1]) || false;\n\t},\n\n\tclone: function() {\n\t\treturn new Size(this.width, this.height);\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height) + ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tadd: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width + size.width, this.height + size.height);\n\t},\n\n\tsubtract: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width - size.width, this.height - size.height);\n\t},\n\n\tmultiply: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width * size.width, this.height * size.height);\n\t},\n\n\tdivide: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width / size.width, this.height / size.height);\n\t},\n\n\tmodulo: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn new Size(this.width % size.width, this.height % size.height);\n\t},\n\n\tnegate: function() {\n\t\treturn new Size(-this.width, -this.height);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this.width) && isZero(this.height);\n\t},\n\n\tisNaN: function() {\n\t\treturn isNaN(this.width) || isNaN(this.height);\n\t},\n\n\tstatics: {\n\t\tmin: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.min(size1.width, size2.width),\n\t\t\t\tMath.min(size1.height, size2.height));\n\t\t},\n\n\t\tmax: function(size1, size2) {\n\t\t\treturn new Size(\n\t\t\t\tMath.max(size1.width, size2.width),\n\t\t\t\tMath.max(size1.height, size2.height));\n\t\t},\n\n\t\trandom: function() {\n\t\t\treturn new Size(Math.random(), Math.random());\n\t\t}\n\t}\n}, Base.each(['round', 'ceil', 'floor', 'abs'], function(key) {\n\tvar op = Math[key];\n\tthis[key] = function() {\n\t\treturn new Size(op(this.width), op(this.height));\n\t};\n}, {}));\n\nvar LinkedSize = Size.extend({\n\tinitialize: function Size(width, height, owner, setter) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(width, height, _dontNotify) {\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._width;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis._width = width;\n\t\tthis._owner[this._setter](this);\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._height;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis._height = height;\n\t\tthis._owner[this._setter](this);\n\t}\n});\n\nvar Rectangle = Base.extend({\n\t_class: 'Rectangle',\n\t_readIndex: true,\n\tbeans: true,\n\n\tinitialize: function Rectangle(arg0, arg1, arg2, arg3) {\n\t\tvar args = arguments,\n\t\t\ttype = typeof arg0,\n\t\t\tread;\n\t\tif (type === 'number') {\n\t\t\tthis._set(arg0, arg1, arg2, arg3);\n\t\t\tread = 4;\n\t\t} else if (type === 'undefined' || arg0 === null) {\n\t\t\tthis._set(0, 0, 0, 0);\n\t\t\tread = arg0 === null ? 1 : 0;\n\t\t} else if (args.length === 1) {\n\t\t\tif (Array.isArray(arg0)) {\n\t\t\t\tthis._set.apply(this, arg0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.x !== undefined || arg0.width !== undefined) {\n\t\t\t\tthis._set(arg0.x || 0, arg0.y || 0,\n\t\t\t\t\t\targ0.width || 0, arg0.height || 0);\n\t\t\t\tread = 1;\n\t\t\t} else if (arg0.from === undefined && arg0.to === undefined) {\n\t\t\t\tthis._set(0, 0, 0, 0);\n\t\t\t\tif (Base.readSupported(args, this)) {\n\t\t\t\t\tread = 1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (read === undefined) {\n\t\t\tvar frm = Point.readNamed(args, 'from'),\n\t\t\t\tnext = Base.peek(args),\n\t\t\t\tx = frm.x,\n\t\t\t\ty = frm.y,\n\t\t\t\twidth,\n\t\t\t\theight;\n\t\t\tif (next && next.x !== undefined || Base.hasNamed(args, 'to')) {\n\t\t\t\tvar to = Point.readNamed(args, 'to');\n\t\t\t\twidth = to.x - x;\n\t\t\t\theight = to.y - y;\n\t\t\t\tif (width < 0) {\n\t\t\t\t\tx = to.x;\n\t\t\t\t\twidth = -width;\n\t\t\t\t}\n\t\t\t\tif (height < 0) {\n\t\t\t\t\ty = to.y;\n\t\t\t\t\theight = -height;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar size = Size.read(args);\n\t\t\t\twidth = size.width;\n\t\t\t\theight = size.height;\n\t\t\t}\n\t\t\tthis._set(x, y, width, height);\n\t\t\tread = args.__index;\n\t\t}\n\t\tvar filtered = args.__filtered;\n\t\tif (filtered)\n\t\t\tthis.__filtered = filtered;\n\t\tif (this.__read)\n\t\t\tthis.__read = read;\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(x, y, width, height) {\n\t\tthis.x = x;\n\t\tthis.y = y;\n\t\tthis.width = width;\n\t\tthis.height = height;\n\t\treturn this;\n\t},\n\n\tclone: function() {\n\t\treturn new Rectangle(this.x, this.y, this.width, this.height);\n\t},\n\n\tequals: function(rect) {\n\t\tvar rt = Base.isPlainValue(rect)\n\t\t\t\t? Rectangle.read(arguments)\n\t\t\t\t: rect;\n\t\treturn rt === this\n\t\t\t\t|| rt && this.x === rt.x && this.y === rt.y\n\t\t\t\t\t&& this.width === rt.width && this.height === rt.height\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '{ x: ' + f.number(this.x)\n\t\t\t\t+ ', y: ' + f.number(this.y)\n\t\t\t\t+ ', width: ' + f.number(this.width)\n\t\t\t\t+ ', height: ' + f.number(this.height)\n\t\t\t\t+ ' }';\n\t},\n\n\t_serialize: function(options) {\n\t\tvar f = options.formatter;\n\t\treturn [f.number(this.x),\n\t\t\t\tf.number(this.y),\n\t\t\t\tf.number(this.width),\n\t\t\t\tf.number(this.height)];\n\t},\n\n\tgetPoint: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.x, this.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.x = point.x;\n\t\tthis.y = point.y;\n\t},\n\n\tgetSize: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Size : LinkedSize;\n\t\treturn new ctor(this.width, this.height, this, 'setSize');\n\t},\n\n\t_fw: 1,\n\t_fh: 1,\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tsx = this._sx,\n\t\t\tsy = this._sy,\n\t\t\tw = size.width,\n\t\t\th = size.height;\n\t\tif (sx) {\n\t\t\tthis.x += (this.width - w) * sx;\n\t\t}\n\t\tif (sy) {\n\t\t\tthis.y += (this.height - h) * sy;\n\t\t}\n\t\tthis.width = w;\n\t\tthis.height = h;\n\t\tthis._fw = this._fh = 1;\n\t},\n\n\tgetLeft: function() {\n\t\treturn this.x;\n\t},\n\n\tsetLeft: function(left) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = left - this.x;\n\t\t\tthis.width -= this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = left;\n\t\tthis._sx = this._fw = 0;\n\t},\n\n\tgetTop: function() {\n\t\treturn this.y;\n\t},\n\n\tsetTop: function(top) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = top - this.y;\n\t\t\tthis.height -= this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = top;\n\t\tthis._sy = this._fh = 0;\n\t},\n\n\tgetRight: function() {\n\t\treturn this.x + this.width;\n\t},\n\n\tsetRight: function(right) {\n\t\tif (!this._fw) {\n\t\t\tvar amount = right - this.x;\n\t\t\tthis.width = this._sx === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.x = right - this.width;\n\t\tthis._sx = 1;\n\t\tthis._fw = 0;\n\t},\n\n\tgetBottom: function() {\n\t\treturn this.y + this.height;\n\t},\n\n\tsetBottom: function(bottom) {\n\t\tif (!this._fh) {\n\t\t\tvar amount = bottom - this.y;\n\t\t\tthis.height = this._sy === 0.5 ? amount * 2 : amount;\n\t\t}\n\t\tthis.y = bottom - this.height;\n\t\tthis._sy = 1;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenterX: function() {\n\t\treturn this.x + this.width / 2;\n\t},\n\n\tsetCenterX: function(x) {\n\t\tif (this._fw || this._sx === 0.5) {\n\t\t\tthis.x = x - this.width / 2;\n\t\t} else {\n\t\t\tif (this._sx) {\n\t\t\t\tthis.x += (x - this.x) * 2 * this._sx;\n\t\t\t}\n\t\t\tthis.width = (x - this.x) * 2;\n\t\t}\n\t\tthis._sx = 0.5;\n\t\tthis._fw = 0;\n\t},\n\n\tgetCenterY: function() {\n\t\treturn this.y + this.height / 2;\n\t},\n\n\tsetCenterY: function(y) {\n\t\tif (this._fh || this._sy === 0.5) {\n\t\t\tthis.y = y - this.height / 2;\n\t\t} else {\n\t\t\tif (this._sy) {\n\t\t\t\tthis.y += (y - this.y) * 2 * this._sy;\n\t\t\t}\n\t\t\tthis.height = (y - this.y) * 2;\n\t\t}\n\t\tthis._sy = 0.5;\n\t\tthis._fh = 0;\n\t},\n\n\tgetCenter: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\treturn new ctor(this.getCenterX(), this.getCenterY(), this, 'setCenter');\n\t},\n\n\tsetCenter: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.setCenterX(point.x);\n\t\tthis.setCenterY(point.y);\n\t\treturn this;\n\t},\n\n\tgetArea: function() {\n\t\treturn this.width * this.height;\n\t},\n\n\tisEmpty: function() {\n\t\treturn this.width === 0 || this.height === 0;\n\t},\n\n\tcontains: function(arg) {\n\t\treturn arg && arg.width !== undefined\n\t\t\t\t|| (Array.isArray(arg) ? arg : arguments).length === 4\n\t\t\t\t? this._containsRectangle(Rectangle.read(arguments))\n\t\t\t\t: this._containsPoint(Point.read(arguments));\n\t},\n\n\t_containsPoint: function(point) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x <= this.x + this.width\n\t\t\t\t&& y <= this.y + this.height;\n\t},\n\n\t_containsRectangle: function(rect) {\n\t\tvar x = rect.x,\n\t\t\ty = rect.y;\n\t\treturn x >= this.x && y >= this.y\n\t\t\t\t&& x + rect.width <= this.x + this.width\n\t\t\t\t&& y + rect.height <= this.y + this.height;\n\t},\n\n\tintersects: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tepsilon = Base.read(arguments) || 0;\n\t\treturn rect.x + rect.width > this.x - epsilon\n\t\t\t\t&& rect.y + rect.height > this.y - epsilon\n\t\t\t\t&& rect.x < this.x + this.width + epsilon\n\t\t\t\t&& rect.y < this.y + this.height + epsilon;\n\t},\n\n\tintersect: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.max(this.x, rect.x),\n\t\t\ty1 = Math.max(this.y, rect.y),\n\t\t\tx2 = Math.min(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.min(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tunite: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tx1 = Math.min(this.x, rect.x),\n\t\t\ty1 = Math.min(this.y, rect.y),\n\t\t\tx2 = Math.max(this.x + this.width, rect.x + rect.width),\n\t\t\ty2 = Math.max(this.y + this.height, rect.y + rect.height);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\tinclude: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar x1 = Math.min(this.x, point.x),\n\t\t\ty1 = Math.min(this.y, point.y),\n\t\t\tx2 = Math.max(this.x + this.width, point.x),\n\t\t\ty2 = Math.max(this.y + this.height, point.y);\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t},\n\n\texpand: function() {\n\t\tvar amount = Size.read(arguments),\n\t\t\thor = amount.width,\n\t\t\tver = amount.height;\n\t\treturn new Rectangle(this.x - hor / 2, this.y - ver / 2,\n\t\t\t\tthis.width + hor, this.height + ver);\n\t},\n\n\tscale: function(hor, ver) {\n\t\treturn this.expand(this.width * hor - this.width,\n\t\t\t\tthis.height * (ver === undefined ? hor : ver) - this.height);\n\t}\n}, Base.each([\n\t\t['Top', 'Left'], ['Top', 'Right'],\n\t\t['Bottom', 'Left'], ['Bottom', 'Right'],\n\t\t['Left', 'Center'], ['Top', 'Center'],\n\t\t['Right', 'Center'], ['Bottom', 'Center']\n\t],\n\tfunction(parts, index) {\n\t\tvar part = parts.join(''),\n\t\t\txFirst = /^[RL]/.test(part);\n\t\tif (index >= 4)\n\t\t\tparts[1] += xFirst ? 'Y' : 'X';\n\t\tvar x = parts[xFirst ? 0 : 1],\n\t\t\ty = parts[xFirst ? 1 : 0],\n\t\t\tgetX = 'get' + x,\n\t\t\tgetY = 'get' + y,\n\t\t\tsetX = 'set' + x,\n\t\t\tsetY = 'set' + y,\n\t\t\tget = 'get' + part,\n\t\t\tset = 'set' + part;\n\t\tthis[get] = function(_dontLink) {\n\t\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\t\treturn new ctor(this[getX](), this[getY](), this, set);\n\t\t};\n\t\tthis[set] = function() {\n\t\t\tvar point = Point.read(arguments);\n\t\t\tthis[setX](point.x);\n\t\t\tthis[setY](point.y);\n\t\t};\n\t}, {\n\t\tbeans: true\n\t}\n));\n\nvar LinkedRectangle = Rectangle.extend({\n\tinitialize: function Rectangle(x, y, width, height, owner, setter) {\n\t\tthis._set(x, y, width, height, true);\n\t\tthis._owner = owner;\n\t\tthis._setter = setter;\n\t},\n\n\t_set: function(x, y, width, height, _dontNotify) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._width = width;\n\t\tthis._height = height;\n\t\tif (!_dontNotify)\n\t\t\tthis._owner[this._setter](this);\n\t\treturn this;\n\t}\n},\nnew function() {\n\tvar proto = Rectangle.prototype;\n\n\treturn Base.each(['x', 'y', 'width', 'height'], function(key) {\n\t\tvar part = Base.capitalize(key),\n\t\t\tinternal = '_' + key;\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[internal];\n\t\t};\n\n\t\tthis['set' + part] = function(value) {\n\t\t\tthis[internal] = value;\n\t\t\tif (!this._dontNotify)\n\t\t\t\tthis._owner[this._setter](this);\n\t\t};\n\t}, Base.each(['Point', 'Size', 'Center',\n\t\t\t'Left', 'Top', 'Right', 'Bottom', 'CenterX', 'CenterY',\n\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'],\n\t\tfunction(key) {\n\t\t\tvar name = 'set' + key;\n\t\t\tthis[name] = function() {\n\t\t\t\tthis._dontNotify = true;\n\t\t\t\tproto[name].apply(this, arguments);\n\t\t\t\tthis._dontNotify = false;\n\t\t\t\tthis._owner[this._setter](this);\n\t\t\t};\n\t\t}, {\n\t\t\tisSelected: function() {\n\t\t\t\treturn !!(this._owner._selection & 2);\n\t\t\t},\n\n\t\t\tsetSelected: function(selected) {\n\t\t\t\tvar owner = this._owner;\n\t\t\t\tif (owner._changeSelection) {\n\t\t\t\t\towner._changeSelection(2, selected);\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t);\n});\n\nvar Matrix = Base.extend({\n\t_class: 'Matrix',\n\n\tinitialize: function Matrix(arg, _dontNotify) {\n\t\tvar args = arguments,\n\t\t\tcount = args.length,\n\t\t\tok = true;\n\t\tif (count >= 6) {\n\t\t\tthis._set.apply(this, args);\n\t\t} else if (count === 1 || count === 2) {\n\t\t\tif (arg instanceof Matrix) {\n\t\t\t\tthis._set(arg._a, arg._b, arg._c, arg._d, arg._tx, arg._ty,\n\t\t\t\t\t\t_dontNotify);\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tthis._set.apply(this,\n\t\t\t\t\t\t_dontNotify ? arg.concat([_dontNotify]) : arg);\n\t\t\t} else {\n\t\t\t\tok = false;\n\t\t\t}\n\t\t} else if (!count) {\n\t\t\tthis.reset();\n\t\t} else {\n\t\t\tok = false;\n\t\t}\n\t\tif (!ok) {\n\t\t\tthrow new Error('Unsupported matrix parameters');\n\t\t}\n\t\treturn this;\n\t},\n\n\tset: '#initialize',\n\n\t_set: function(a, b, c, d, tx, ty, _dontNotify) {\n\t\tthis._a = a;\n\t\tthis._b = b;\n\t\tthis._c = c;\n\t\tthis._d = d;\n\t\tthis._tx = tx;\n\t\tthis._ty = ty;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.getValues(), options, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\tif (owner._applyMatrix) {\n\t\t\t\towner.transform(null, true);\n\t\t\t} else {\n\t\t\t\towner._changed(25);\n\t\t\t}\n\t\t}\n\t},\n\n\tclone: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d,\n\t\t\t\tthis._tx, this._ty);\n\t},\n\n\tequals: function(mx) {\n\t\treturn mx === this || mx && this._a === mx._a && this._b === mx._b\n\t\t\t\t&& this._c === mx._c && this._d === mx._d\n\t\t\t\t&& this._tx === mx._tx && this._ty === mx._ty;\n\t},\n\n\ttoString: function() {\n\t\tvar f = Formatter.instance;\n\t\treturn '[[' + [f.number(this._a), f.number(this._c),\n\t\t\t\t\tf.number(this._tx)].join(', ') + '], ['\n\t\t\t\t+ [f.number(this._b), f.number(this._d),\n\t\t\t\t\tf.number(this._ty)].join(', ') + ']]';\n\t},\n\n\treset: function(_dontNotify) {\n\t\tthis._a = this._d = 1;\n\t\tthis._b = this._c = this._tx = this._ty = 0;\n\t\tif (!_dontNotify)\n\t\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tapply: function(recursively, _setApplyMatrix) {\n\t\tvar owner = this._owner;\n\t\tif (owner) {\n\t\t\towner.transform(null, Base.pick(recursively, true), _setApplyMatrix);\n\t\t\treturn this.isIdentity();\n\t\t}\n\t\treturn false;\n\t},\n\n\ttranslate: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tx = point.x,\n\t\t\ty = point.y;\n\t\tthis._tx += x * this._a + y * this._c;\n\t\tthis._ty += x * this._b + y * this._d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tscale: function() {\n\t\tvar args = arguments,\n\t\t\tscale = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tthis._a *= scale.x;\n\t\tthis._b *= scale.x;\n\t\tthis._c *= scale.y;\n\t\tthis._d *= scale.y;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\trotate: function(angle ) {\n\t\tangle *= Math.PI / 180;\n\t\tvar center = Point.read(arguments, 1),\n\t\t\tx = center.x,\n\t\t\ty = center.y,\n\t\t\tcos = Math.cos(angle),\n\t\t\tsin = Math.sin(angle),\n\t\t\ttx = x - x * cos + y * sin,\n\t\t\tty = y - x * sin - y * cos,\n\t\t\ta = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d;\n\t\tthis._a = cos * a + sin * c;\n\t\tthis._b = cos * b + sin * d;\n\t\tthis._c = -sin * a + cos * c;\n\t\tthis._d = -sin * b + cos * d;\n\t\tthis._tx += tx * a + ty * c;\n\t\tthis._ty += tx * b + ty * d;\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tshear: function() {\n\t\tvar args = arguments,\n\t\t\tshear = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\tif (center)\n\t\t\tthis.translate(center);\n\t\tvar a = this._a,\n\t\t\tb = this._b;\n\t\tthis._a += shear.y * this._c;\n\t\tthis._b += shear.y * this._d;\n\t\tthis._c += shear.x * a;\n\t\tthis._d += shear.x * b;\n\t\tif (center)\n\t\t\tthis.translate(center.negate());\n\t\tthis._changed();\n\t\treturn this;\n\t},\n\n\tskew: function() {\n\t\tvar args = arguments,\n\t\t\tskew = Point.read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true }),\n\t\t\ttoRadians = Math.PI / 180,\n\t\t\tshear = new Point(Math.tan(skew.x * toRadians),\n\t\t\t\tMath.tan(skew.y * toRadians));\n\t\treturn this.shear(shear, center);\n\t},\n\n\tappend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + c2 * c1;\n\t\t\tthis._c = b2 * a1 + d2 * c1;\n\t\t\tthis._b = a2 * b1 + c2 * d1;\n\t\t\tthis._d = b2 * b1 + d2 * d1;\n\t\t\tthis._tx += tx2 * a1 + ty2 * c1;\n\t\t\tthis._ty += tx2 * b1 + ty2 * d1;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tprepend: function(mx, _dontNotify) {\n\t\tif (mx) {\n\t\t\tvar a1 = this._a,\n\t\t\t\tb1 = this._b,\n\t\t\t\tc1 = this._c,\n\t\t\t\td1 = this._d,\n\t\t\t\ttx1 = this._tx,\n\t\t\t\tty1 = this._ty,\n\t\t\t\ta2 = mx._a,\n\t\t\t\tb2 = mx._c,\n\t\t\t\tc2 = mx._b,\n\t\t\t\td2 = mx._d,\n\t\t\t\ttx2 = mx._tx,\n\t\t\t\tty2 = mx._ty;\n\t\t\tthis._a = a2 * a1 + b2 * b1;\n\t\t\tthis._c = a2 * c1 + b2 * d1;\n\t\t\tthis._b = c2 * a1 + d2 * b1;\n\t\t\tthis._d = c2 * c1 + d2 * d1;\n\t\t\tthis._tx = a2 * tx1 + b2 * ty1 + tx2;\n\t\t\tthis._ty = c2 * tx1 + d2 * ty1 + ty2;\n\t\t\tif (!_dontNotify)\n\t\t\t\tthis._changed();\n\t\t}\n\t\treturn this;\n\t},\n\n\tappended: function(mx) {\n\t\treturn this.clone().append(mx);\n\t},\n\n\tprepended: function(mx) {\n\t\treturn this.clone().prepend(mx);\n\t},\n\n\tinvert: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tthis._a = d / det;\n\t\t\tthis._b = -b / det;\n\t\t\tthis._c = -c / det;\n\t\t\tthis._d = a / det;\n\t\t\tthis._tx = (c * ty - d * tx) / det;\n\t\t\tthis._ty = (b * tx - a * ty) / det;\n\t\t\tres = this;\n\t\t}\n\t\treturn res;\n\t},\n\n\tinverted: function() {\n\t\treturn this.clone().invert();\n\t},\n\n\tconcatenate: '#append',\n\tpreConcatenate: '#prepend',\n\tchain: '#appended',\n\n\t_shiftless: function() {\n\t\treturn new Matrix(this._a, this._b, this._c, this._d, 0, 0);\n\t},\n\n\t_orNullIfIdentity: function() {\n\t\treturn this.isIdentity() ? null : this;\n\t},\n\n\tisIdentity: function() {\n\t\treturn this._a === 1 && this._b === 0 && this._c === 0 && this._d === 1\n\t\t\t\t&& this._tx === 0 && this._ty === 0;\n\t},\n\n\tisInvertible: function() {\n\t\tvar det = this._a * this._d - this._c * this._b;\n\t\treturn det && !isNaN(det) && isFinite(this._tx) && isFinite(this._ty);\n\t},\n\n\tisSingular: function() {\n\t\treturn !this.isInvertible();\n\t},\n\n\ttransform: function( src, dst, count) {\n\t\treturn arguments.length < 3\n\t\t\t? this._transformPoint(Point.read(arguments))\n\t\t\t: this._transformCoordinates(src, dst, count);\n\t},\n\n\t_transformPoint: function(point, dest, _dontNotify) {\n\t\tvar x = point.x,\n\t\t\ty = point.y;\n\t\tif (!dest)\n\t\t\tdest = new Point();\n\t\treturn dest._set(\n\t\t\t\tx * this._a + y * this._c + this._tx,\n\t\t\t\tx * this._b + y * this._d + this._ty,\n\t\t\t\t_dontNotify);\n\t},\n\n\t_transformCoordinates: function(src, dst, count) {\n\t\tfor (var i = 0, max = 2 * count; i < max; i += 2) {\n\t\t\tvar x = src[i],\n\t\t\t\ty = src[i + 1];\n\t\t\tdst[i] = x * this._a + y * this._c + this._tx;\n\t\t\tdst[i + 1] = x * this._b + y * this._d + this._ty;\n\t\t}\n\t\treturn dst;\n\t},\n\n\t_transformCorners: function(rect) {\n\t\tvar x1 = rect.x,\n\t\t\ty1 = rect.y,\n\t\t\tx2 = x1 + rect.width,\n\t\t\ty2 = y1 + rect.height,\n\t\t\tcoords = [ x1, y1, x2, y1, x2, y2, x1, y2 ];\n\t\treturn this._transformCoordinates(coords, coords, 4);\n\t},\n\n\t_transformBounds: function(bounds, dest, _dontNotify) {\n\t\tvar coords = this._transformCorners(bounds),\n\t\t\tmin = coords.slice(0, 2),\n\t\t\tmax = min.slice();\n\t\tfor (var i = 2; i < 8; i++) {\n\t\t\tvar val = coords[i],\n\t\t\t\tj = i & 1;\n\t\t\tif (val < min[j]) {\n\t\t\t\tmin[j] = val;\n\t\t\t} else if (val > max[j]) {\n\t\t\t\tmax[j] = val;\n\t\t\t}\n\t\t}\n\t\tif (!dest)\n\t\t\tdest = new Rectangle();\n\t\treturn dest._set(min[0], min[1], max[0] - min[0], max[1] - min[1],\n\t\t\t\t_dontNotify);\n\t},\n\n\tinverseTransform: function() {\n\t\treturn this._inverseTransform(Point.read(arguments));\n\t},\n\n\t_inverseTransform: function(point, dest, _dontNotify) {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\ttx = this._tx,\n\t\t\tty = this._ty,\n\t\t\tdet = a * d - b * c,\n\t\t\tres = null;\n\t\tif (det && !isNaN(det) && isFinite(tx) && isFinite(ty)) {\n\t\t\tvar x = point.x - this._tx,\n\t\t\t\ty = point.y - this._ty;\n\t\t\tif (!dest)\n\t\t\t\tdest = new Point();\n\t\t\tres = dest._set(\n\t\t\t\t\t(x * d - y * c) / det,\n\t\t\t\t\t(y * a - x * b) / det,\n\t\t\t\t\t_dontNotify);\n\t\t}\n\t\treturn res;\n\t},\n\n\tdecompose: function() {\n\t\tvar a = this._a,\n\t\t\tb = this._b,\n\t\t\tc = this._c,\n\t\t\td = this._d,\n\t\t\tdet = a * d - b * c,\n\t\t\tsqrt = Math.sqrt,\n\t\t\tatan2 = Math.atan2,\n\t\t\tdegrees = 180 / Math.PI,\n\t\t\trotate,\n\t\t\tscale,\n\t\t\tskew;\n\t\tif (a !== 0 || b !== 0) {\n\t\t\tvar r = sqrt(a * a + b * b);\n\t\t\trotate = Math.acos(a / r) * (b > 0 ? 1 : -1);\n\t\t\tscale = [r, det / r];\n\t\t\tskew = [atan2(a * c + b * d, r * r), 0];\n\t\t} else if (c !== 0 || d !== 0) {\n\t\t\tvar s = sqrt(c * c + d * d);\n\t\t\trotate = Math.asin(c / s) * (d > 0 ? 1 : -1);\n\t\t\tscale = [det / s, s];\n\t\t\tskew = [0, atan2(a * c + b * d, s * s)];\n\t\t} else {\n\t\t\trotate = 0;\n\t\t\tskew = scale = [0, 0];\n\t\t}\n\t\treturn {\n\t\t\ttranslation: this.getTranslation(),\n\t\t\trotation: rotate * degrees,\n\t\t\tscaling: new Point(scale),\n\t\t\tskewing: new Point(skew[0] * degrees, skew[1] * degrees)\n\t\t};\n\t},\n\n\tgetValues: function() {\n\t\treturn [ this._a, this._b, this._c, this._d, this._tx, this._ty ];\n\t},\n\n\tgetTranslation: function() {\n\t\treturn new Point(this._tx, this._ty);\n\t},\n\n\tgetScaling: function() {\n\t\treturn this.decompose().scaling;\n\t},\n\n\tgetRotation: function() {\n\t\treturn this.decompose().rotation;\n\t},\n\n\tapplyToContext: function(ctx) {\n\t\tif (!this.isIdentity()) {\n\t\t\tctx.transform(this._a, this._b, this._c, this._d,\n\t\t\t\t\tthis._tx, this._ty);\n\t\t}\n\t}\n}, Base.each(['a', 'b', 'c', 'd', 'tx', 'ty'], function(key) {\n\tvar part = Base.capitalize(key),\n\t\tprop = '_' + key;\n\tthis['get' + part] = function() {\n\t\treturn this[prop];\n\t};\n\tthis['set' + part] = function(value) {\n\t\tthis[prop] = value;\n\t\tthis._changed();\n\t};\n}, {}));\n\nvar Line = Base.extend({\n\t_class: 'Line',\n\n\tinitialize: function Line(arg0, arg1, arg2, arg3, arg4) {\n\t\tvar asVector = false;\n\t\tif (arguments.length >= 4) {\n\t\t\tthis._px = arg0;\n\t\t\tthis._py = arg1;\n\t\t\tthis._vx = arg2;\n\t\t\tthis._vy = arg3;\n\t\t\tasVector = arg4;\n\t\t} else {\n\t\t\tthis._px = arg0.x;\n\t\t\tthis._py = arg0.y;\n\t\t\tthis._vx = arg1.x;\n\t\t\tthis._vy = arg1.y;\n\t\t\tasVector = arg2;\n\t\t}\n\t\tif (!asVector) {\n\t\t\tthis._vx -= this._px;\n\t\t\tthis._vy -= this._py;\n\t\t}\n\t},\n\n\tgetPoint: function() {\n\t\treturn new Point(this._px, this._py);\n\t},\n\n\tgetVector: function() {\n\t\treturn new Point(this._vx, this._vy);\n\t},\n\n\tgetLength: function() {\n\t\treturn this.getVector().getLength();\n\t},\n\n\tintersect: function(line, isInfinite) {\n\t\treturn Line.intersect(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tline._px, line._py, line._vx, line._vy,\n\t\t\t\ttrue, isInfinite);\n\t},\n\n\tgetSide: function(point, isInfinite) {\n\t\treturn Line.getSide(\n\t\t\t\tthis._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true, isInfinite);\n\t},\n\n\tgetDistance: function(point) {\n\t\treturn Math.abs(this.getSignedDistance(point));\n\t},\n\n\tgetSignedDistance: function(point) {\n\t\treturn Line.getSignedDistance(this._px, this._py, this._vx, this._vy,\n\t\t\t\tpoint.x, point.y, true);\n\t},\n\n\tisCollinear: function(line) {\n\t\treturn Point.isCollinear(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tisOrthogonal: function(line) {\n\t\treturn Point.isOrthogonal(this._vx, this._vy, line._vx, line._vy);\n\t},\n\n\tstatics: {\n\t\tintersect: function(p1x, p1y, v1x, v1y, p2x, p2y, v2x, v2y, asVector,\n\t\t\t\tisInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tv1x -= p1x;\n\t\t\t\tv1y -= p1y;\n\t\t\t\tv2x -= p2x;\n\t\t\t\tv2y -= p2y;\n\t\t\t}\n\t\t\tvar cross = v1x * v2y - v1y * v2x;\n\t\t\tif (!Numerical.isMachineZero(cross)) {\n\t\t\t\tvar dx = p1x - p2x,\n\t\t\t\t\tdy = p1y - p2y,\n\t\t\t\t\tu1 = (v2x * dy - v2y * dx) / cross,\n\t\t\t\t\tu2 = (v1x * dy - v1y * dx) / cross,\n\t\t\t\t\tepsilon = 1e-12,\n\t\t\t\t\tuMin = -epsilon,\n\t\t\t\t\tuMax = 1 + epsilon;\n\t\t\t\tif (isInfinite\n\t\t\t\t\t\t|| uMin < u1 && u1 < uMax && uMin < u2 && u2 < uMax) {\n\t\t\t\t\tif (!isInfinite) {\n\t\t\t\t\t\tu1 = u1 <= 0 ? 0 : u1 >= 1 ? 1 : u1;\n\t\t\t\t\t}\n\t\t\t\t\treturn new Point(\n\t\t\t\t\t\t\tp1x + u1 * v1x,\n\t\t\t\t\t\t\tp1y + u1 * v1y);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgetSide: function(px, py, vx, vy, x, y, asVector, isInfinite) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\tvar v2x = x - px,\n\t\t\t\tv2y = y - py,\n\t\t\t\tccw = v2x * vy - v2y * vx;\n\t\t\tif (!isInfinite && Numerical.isMachineZero(ccw)) {\n\t\t\t\tccw = (v2x * vx + v2x * vx) / (vx * vx + vy * vy);\n\t\t\t\tif (ccw >= 0 && ccw <= 1)\n\t\t\t\t\tccw = 0;\n\t\t\t}\n\t\t\treturn ccw < 0 ? -1 : ccw > 0 ? 1 : 0;\n\t\t},\n\n\t\tgetSignedDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\tif (!asVector) {\n\t\t\t\tvx -= px;\n\t\t\t\tvy -= py;\n\t\t\t}\n\t\t\t return vx === 0 ? (vy > 0 ? x - px : px - x)\n\t\t\t\t\t: vy === 0 ? (vx < 0 ? y - py : py - y)\n\t\t\t\t\t: ((x - px) * vy - (y - py) * vx) / (\n\t\t\t\t\t\tvy > vx\n\t\t\t\t\t\t\t? vy * Math.sqrt(1 + (vx * vx) / (vy * vy))\n\t\t\t\t\t\t\t: vx * Math.sqrt(1 + (vy * vy) / (vx * vx))\n\t\t\t\t\t);\n\t\t},\n\n\t\tgetDistance: function(px, py, vx, vy, x, y, asVector) {\n\t\t\treturn Math.abs(\n\t\t\t\t\tLine.getSignedDistance(px, py, vx, vy, x, y, asVector));\n\t\t}\n\t}\n});\n\nvar Project = PaperScopeItem.extend({\n\t_class: 'Project',\n\t_list: 'projects',\n\t_reference: 'project',\n\t_compactSerialize: true,\n\n\tinitialize: function Project(element) {\n\t\tPaperScopeItem.call(this, true);\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tthis._activeLayer = null;\n\t\tthis._currentStyle = new Style(null, null, this);\n\t\tthis._view = View.create(this,\n\t\t\t\telement || CanvasProvider.getCanvas(1, 1));\n\t\tthis._selectionItems = {};\n\t\tthis._selectionCount = 0;\n\t\tthis._updateVersion = 0;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this._children, options, true, dictionary);\n\t},\n\n\t_changed: function(flags, item) {\n\t\tif (flags & 1) {\n\t\t\tvar view = this._view;\n\t\t\tif (view) {\n\t\t\t\tview._needsUpdate = true;\n\t\t\t\tif (!view._requested && view._autoUpdate)\n\t\t\t\t\tview.requestUpdate();\n\t\t\t}\n\t\t}\n\t\tvar changes = this._changes;\n\t\tif (changes && item) {\n\t\t\tvar changesById = this._changesById,\n\t\t\t\tid = item._id,\n\t\t\t\tentry = changesById[id];\n\t\t\tif (entry) {\n\t\t\t\tentry.flags |= flags;\n\t\t\t} else {\n\t\t\t\tchanges.push(changesById[id] = { item: item, flags: flags });\n\t\t\t}\n\t\t}\n\t},\n\n\tclear: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--)\n\t\t\tchildren[i].remove();\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._children.length;\n\t},\n\n\tremove: function remove() {\n\t\tif (!remove.base.call(this))\n\t\t\treturn false;\n\t\tif (this._view)\n\t\t\tthis._view.remove();\n\t\treturn true;\n\t},\n\n\tgetView: function() {\n\t\treturn this._view;\n\t},\n\n\tgetCurrentStyle: function() {\n\t\treturn this._currentStyle;\n\t},\n\n\tsetCurrentStyle: function(style) {\n\t\tthis._currentStyle.set(style);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tgetOptions: function() {\n\t\treturn this._scope.settings;\n\t},\n\n\tgetLayers: function() {\n\t\treturn this._children;\n\t},\n\n\tgetActiveLayer: function() {\n\t\treturn this._activeLayer || new Layer({ project: this, insert: true });\n\t},\n\n\tgetSymbolDefinitions: function() {\n\t\tvar definitions = [],\n\t\t\tids = {};\n\t\tthis.getItems({\n\t\t\tclass: SymbolItem,\n\t\t\tmatch: function(item) {\n\t\t\t\tvar definition = item._definition,\n\t\t\t\t\tid = definition._id;\n\t\t\t\tif (!ids[id]) {\n\t\t\t\t\tids[id] = true;\n\t\t\t\t\tdefinitions.push(definition);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\treturn definitions;\n\t},\n\n\tgetSymbols: 'getSymbolDefinitions',\n\n\tgetSelectedItems: function() {\n\t\tvar selectionItems = this._selectionItems,\n\t\t\titems = [];\n\t\tfor (var id in selectionItems) {\n\t\t\tvar item = selectionItems[id],\n\t\t\t\tselection = item._selection;\n\t\t\tif ((selection & 1) && item.isInserted()) {\n\t\t\t\titems.push(item);\n\t\t\t} else if (!selection) {\n\t\t\t\tthis._updateSelection(item);\n\t\t\t}\n\t\t}\n\t\treturn items;\n\t},\n\n\t_updateSelection: function(item) {\n\t\tvar id = item._id,\n\t\t\tselectionItems = this._selectionItems;\n\t\tif (item._selection) {\n\t\t\tif (selectionItems[id] !== item) {\n\t\t\t\tthis._selectionCount++;\n\t\t\t\tselectionItems[id] = item;\n\t\t\t}\n\t\t} else if (selectionItems[id] === item) {\n\t\t\tthis._selectionCount--;\n\t\t\tdelete selectionItems[id];\n\t\t}\n\t},\n\n\tselectAll: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].setFullySelected(true);\n\t},\n\n\tdeselectAll: function() {\n\t\tvar selectionItems = this._selectionItems;\n\t\tfor (var i in selectionItems)\n\t\t\tselectionItems[i].setFullySelected(false);\n\t},\n\n\taddLayer: function(layer) {\n\t\treturn this.insertLayer(undefined, layer);\n\t},\n\n\tinsertLayer: function(index, layer) {\n\t\tif (layer instanceof Layer) {\n\t\t\tlayer._remove(false, true);\n\t\t\tBase.splice(this._children, [layer], index, 0);\n\t\t\tlayer._setProject(this, true);\n\t\t\tvar name = layer._name;\n\t\t\tif (name)\n\t\t\t\tlayer.setName(name);\n\t\t\tif (this._changes)\n\t\t\t\tlayer._changed(5);\n\t\t\tif (!this._activeLayer)\n\t\t\t\tthis._activeLayer = layer;\n\t\t} else {\n\t\t\tlayer = null;\n\t\t}\n\t\treturn layer;\n\t},\n\n\t_insertItem: function(index, item, _created) {\n\t\titem = this.insertLayer(index, item)\n\t\t\t\t|| (this._activeLayer || this._insertItem(undefined,\n\t\t\t\t\t\tnew Layer(Item.NO_INSERT), true))\n\t\t\t\t\t\t.insertChild(index, item);\n\t\tif (_created && item.activate)\n\t\t\titem.activate();\n\t\treturn item;\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, null, null, true)[0] || null;\n\t},\n\n\timportJSON: function(json) {\n\t\tthis.activate();\n\t\tvar layer = this._activeLayer;\n\t\treturn Base.importJSON(json, layer && layer.isEmpty() && layer);\n\t},\n\n\tremoveOn: function(type) {\n\t\tvar sets = this._removeSets;\n\t\tif (sets) {\n\t\t\tif (type === 'mouseup')\n\t\t\t\tsets.mousedrag = null;\n\t\t\tvar set = sets[type];\n\t\t\tif (set) {\n\t\t\t\tfor (var id in set) {\n\t\t\t\t\tvar item = set[id];\n\t\t\t\t\tfor (var key in sets) {\n\t\t\t\t\t\tvar other = sets[key];\n\t\t\t\t\t\tif (other && other != set)\n\t\t\t\t\t\t\tdelete other[item._id];\n\t\t\t\t\t}\n\t\t\t\t\titem.remove();\n\t\t\t\t}\n\t\t\t\tsets[type] = null;\n\t\t\t}\n\t\t}\n\t},\n\n\tdraw: function(ctx, matrix, pixelRatio) {\n\t\tthis._updateVersion++;\n\t\tctx.save();\n\t\tmatrix.applyToContext(ctx);\n\t\tvar children = this._children,\n\t\t\tparam = new Base({\n\t\t\t\toffset: new Point(0, 0),\n\t\t\t\tpixelRatio: pixelRatio,\n\t\t\t\tviewMatrix: matrix.isIdentity() ? null : matrix,\n\t\t\t\tmatrices: [new Matrix()],\n\t\t\t\tupdateMatrix: true\n\t\t\t});\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].draw(ctx, param);\n\t\t}\n\t\tctx.restore();\n\n\t\tif (this._selectionCount > 0) {\n\t\t\tctx.save();\n\t\t\tctx.strokeWidth = 1;\n\t\t\tvar items = this._selectionItems,\n\t\t\t\tsize = this._scope.settings.handleSize,\n\t\t\t\tversion = this._updateVersion;\n\t\t\tfor (var id in items) {\n\t\t\t\titems[id]._drawSelection(ctx, matrix, size, items, version);\n\t\t\t}\n\t\t\tctx.restore();\n\t\t}\n\t}\n});\n\nvar Item = Base.extend(Emitter, {\n\tstatics: {\n\t\textend: function extend(src) {\n\t\t\tif (src._serializeFields)\n\t\t\t\tsrc._serializeFields = Base.set({},\n\t\t\t\t\tthis.prototype._serializeFields, src._serializeFields);\n\t\t\treturn extend.base.apply(this, arguments);\n\t\t},\n\n\t\tINSERT: { insert: true },\n\t\tNO_INSERT: { insert: false }\n\t},\n\n\t_class: 'Item',\n\t_name: null,\n\t_applyMatrix: true,\n\t_canApplyMatrix: true,\n\t_canScaleStroke: false,\n\t_pivot: null,\n\t_visible: true,\n\t_blendMode: 'normal',\n\t_opacity: 1,\n\t_locked: false,\n\t_guide: false,\n\t_clipMask: false,\n\t_selection: 0,\n\t_selectBounds: true,\n\t_selectChildren: false,\n\t_serializeFields: {\n\t\tname: null,\n\t\tapplyMatrix: null,\n\t\tmatrix: new Matrix(),\n\t\tpivot: null,\n\t\tvisible: true,\n\t\tblendMode: 'normal',\n\t\topacity: 1,\n\t\tlocked: false,\n\t\tguide: false,\n\t\tclipMask: false,\n\t\tselected: false,\n\t\tdata: {}\n\t},\n\t_prioritize: ['applyMatrix']\n},\nnew function() {\n\tvar handlers = ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onClick',\n\t\t\t'onDoubleClick', 'onMouseMove', 'onMouseEnter', 'onMouseLeave'];\n\treturn Base.each(handlers,\n\t\tfunction(name) {\n\t\t\tthis._events[name] = {\n\t\t\t\tinstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, 1);\n\t\t\t\t},\n\n\t\t\t\tuninstall: function(type) {\n\t\t\t\t\tthis.getView()._countItemEvent(type, -1);\n\t\t\t\t}\n\t\t\t};\n\t\t}, {\n\t\t\t_events: {\n\t\t\t\tonFrame: {\n\t\t\t\t\tinstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, true);\n\t\t\t\t\t},\n\n\t\t\t\t\tuninstall: function() {\n\t\t\t\t\t\tthis.getView()._animateItem(this, false);\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tonLoad: {},\n\t\t\t\tonError: {}\n\t\t\t},\n\t\t\tstatics: {\n\t\t\t\t_itemHandlers: handlers\n\t\t\t}\n\t\t}\n\t);\n}, {\n\tinitialize: function Item() {\n\t},\n\n\t_initialize: function(props, point) {\n\t\tvar hasProps = props && Base.isPlainObject(props),\n\t\t\tinternal = hasProps && props.internal === true,\n\t\t\tmatrix = this._matrix = new Matrix(),\n\t\t\tproject = hasProps && props.project || paper.project,\n\t\t\tsettings = paper.settings;\n\t\tthis._id = internal ? null : UID.get();\n\t\tthis._parent = this._index = null;\n\t\tthis._applyMatrix = this._canApplyMatrix && settings.applyMatrix;\n\t\tif (point)\n\t\t\tmatrix.translate(point);\n\t\tmatrix._owner = this;\n\t\tthis._style = new Style(project._currentStyle, this, project);\n\t\tif (internal || hasProps && props.insert == false\n\t\t\t|| !settings.insertItems && !(hasProps && props.insert == true)) {\n\t\t\tthis._setProject(project);\n\t\t} else {\n\t\t\t(hasProps && props.parent || project)\n\t\t\t\t\t._insertItem(undefined, this, true);\n\t\t}\n\t\tif (hasProps && props !== Item.NO_INSERT && props !== Item.INSERT) {\n\t\t\tthis.set(props, {\n\t\t\t\tinternal: true, insert: true, project: true, parent: true\n\t\t\t});\n\t\t}\n\t\treturn hasProps;\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar props = {},\n\t\t\tthat = this;\n\n\t\tfunction serialize(fields) {\n\t\t\tfor (var key in fields) {\n\t\t\t\tvar value = that[key];\n\t\t\t\tif (!Base.equals(value, key === 'leading'\n\t\t\t\t\t\t? fields.fontSize * 1.2 : fields[key])) {\n\t\t\t\t\tprops[key] = Base.serialize(value, options,\n\t\t\t\t\t\t\tkey !== 'data', dictionary);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tserialize(this._serializeFields);\n\t\tif (!(this instanceof Group))\n\t\t\tserialize(this._style._defaults);\n\t\treturn [ this._class, props ];\n\t},\n\n\t_changed: function(flags) {\n\t\tvar symbol = this._symbol,\n\t\t\tcacheParent = this._parent || symbol,\n\t\t\tproject = this._project;\n\t\tif (flags & 8) {\n\t\t\tthis._bounds = this._position = this._decomposed = undefined;\n\t\t}\n\t\tif (flags & 16) {\n\t\t\tthis._globalMatrix = undefined;\n\t\t}\n\t\tif (cacheParent\n\t\t\t\t&& (flags & 72)) {\n\t\t\tItem._clearBoundsCache(cacheParent);\n\t\t}\n\t\tif (flags & 2) {\n\t\t\tItem._clearBoundsCache(this);\n\t\t}\n\t\tif (project)\n\t\t\tproject._changed(flags, this);\n\t\tif (symbol)\n\t\t\tsymbol._changed(flags);\n\t},\n\n\tgetId: function() {\n\t\treturn this._id;\n\t},\n\n\tgetName: function() {\n\t\treturn this._name;\n\t},\n\n\tsetName: function(name) {\n\n\t\tif (this._name)\n\t\t\tthis._removeNamed();\n\t\tif (name === (+name) + '')\n\t\t\tthrow new Error(\n\t\t\t\t\t'Names consisting only of numbers are not supported.');\n\t\tvar owner = this._getOwner();\n\t\tif (name && owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren;\n\t\t\t(namedChildren[name] = namedChildren[name] || []).push(this);\n\t\t\tif (!(name in children))\n\t\t\t\tchildren[name] = this;\n\t\t}\n\t\tthis._name = name || undefined;\n\t\tthis._changed(256);\n\t},\n\n\tgetStyle: function() {\n\t\treturn this._style;\n\t},\n\n\tsetStyle: function(style) {\n\t\tthis.getStyle().set(style);\n\t}\n}, Base.each(['locked', 'visible', 'blendMode', 'opacity', 'guide'],\n\tfunction(name) {\n\t\tvar part = Base.capitalize(name),\n\t\t\tkey = '_' + name,\n\t\t\tflags = {\n\t\t\t\tlocked: 256,\n\t\t\t\tvisible: 265\n\t\t\t};\n\t\tthis['get' + part] = function() {\n\t\t\treturn this[key];\n\t\t};\n\t\tthis['set' + part] = function(value) {\n\t\t\tif (value != this[key]) {\n\t\t\t\tthis[key] = value;\n\t\t\t\tthis._changed(flags[name] || 257);\n\t\t\t}\n\t\t};\n\t},\n{}), {\n\tbeans: true,\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tif (selection !== this._selection) {\n\t\t\tthis._selection = selection;\n\t\t\tvar project = this._project;\n\t\t\tif (project) {\n\t\t\t\tproject._updateSelection(this);\n\t\t\t\tthis._changed(257);\n\t\t\t}\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (children[i].isSelected())\n\t\t\t\t\treturn true;\n\t\t}\n\t\treturn !!(this._selection & 1);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tif (this._selectChildren) {\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setSelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisFullySelected: function() {\n\t\tvar children = this._children,\n\t\t\tselected = !!(this._selection & 1);\n\t\tif (children && selected) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tif (!children[i].isFullySelected())\n\t\t\t\t\treturn false;\n\t\t\treturn true;\n\t\t}\n\t\treturn selected;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\tchildren[i].setFullySelected(selected);\n\t\t}\n\t\tthis._changeSelection(1, selected);\n\t},\n\n\tisClipMask: function() {\n\t\treturn this._clipMask;\n\t},\n\n\tsetClipMask: function(clipMask) {\n\t\tif (this._clipMask != (clipMask = !!clipMask)) {\n\t\t\tthis._clipMask = clipMask;\n\t\t\tif (clipMask) {\n\t\t\t\tthis.setFillColor(null);\n\t\t\t\tthis.setStrokeColor(null);\n\t\t\t}\n\t\t\tthis._changed(257);\n\t\t\tif (this._parent)\n\t\t\t\tthis._parent._changed(2048);\n\t\t}\n\t},\n\n\tgetData: function() {\n\t\tif (!this._data)\n\t\t\tthis._data = {};\n\t\treturn this._data;\n\t},\n\n\tsetData: function(data) {\n\t\tthis._data = data;\n\t},\n\n\tgetPosition: function(_dontLink) {\n\t\tvar ctor = _dontLink ? Point : LinkedPoint;\n\t\tvar position = this._position ||\n\t\t\t(this._position = this._getPositionFromBounds());\n\t\treturn new ctor(position.x, position.y, this, 'setPosition');\n\t},\n\n\tsetPosition: function() {\n\t\tthis.translate(Point.read(arguments).subtract(this.getPosition(true)));\n\t},\n\n\t_getPositionFromBounds: function(bounds) {\n\t\treturn this._pivot\n\t\t\t\t? this._matrix._transformPoint(this._pivot)\n\t\t\t\t: (bounds || this.getBounds()).getCenter(true);\n\t},\n\n\tgetPivot: function() {\n\t\tvar pivot = this._pivot;\n\t\treturn pivot\n\t\t\t\t? new LinkedPoint(pivot.x, pivot.y, this, 'setPivot')\n\t\t\t\t: null;\n\t},\n\n\tsetPivot: function() {\n\t\tthis._pivot = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tthis._position = undefined;\n\t}\n}, Base.each({\n\t\tgetStrokeBounds: { stroke: true },\n\t\tgetHandleBounds: { handle: true },\n\t\tgetInternalBounds: { internal: true }\n\t},\n\tfunction(options, key) {\n\t\tthis[key] = function(matrix) {\n\t\t\treturn this.getBounds(matrix, options);\n\t\t};\n\t},\n{\n\tbeans: true,\n\n\tgetBounds: function(matrix, options) {\n\t\tvar hasMatrix = options || matrix instanceof Matrix,\n\t\t\topts = Base.set({}, hasMatrix ? options : matrix,\n\t\t\t\t\tthis._boundsOptions);\n\t\tif (!opts.stroke || this.getStrokeScaling())\n\t\t\topts.cacheItem = this;\n\t\tvar rect = this._getCachedBounds(hasMatrix && matrix, opts).rect;\n\t\treturn !arguments.length\n\t\t\t\t? new LinkedRectangle(rect.x, rect.y, rect.width, rect.height,\n\t\t\t\t\tthis, 'setBounds')\n\t\t\t\t: rect;\n\t},\n\n\tsetBounds: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tbounds = this.getBounds(),\n\t\t\t_matrix = this._matrix,\n\t\t\tmatrix = new Matrix(),\n\t\t\tcenter = rect.getCenter();\n\t\tmatrix.translate(center);\n\t\tif (rect.width != bounds.width || rect.height != bounds.height) {\n\t\t\tif (!_matrix.isInvertible()) {\n\t\t\t\t_matrix.set(_matrix._backup\n\t\t\t\t\t\t|| new Matrix().translate(_matrix.getTranslation()));\n\t\t\t\tbounds = this.getBounds();\n\t\t\t}\n\t\t\tmatrix.scale(\n\t\t\t\t\tbounds.width !== 0 ? rect.width / bounds.width : 0,\n\t\t\t\t\tbounds.height !== 0 ? rect.height / bounds.height : 0);\n\t\t}\n\t\tcenter = bounds.getCenter();\n\t\tmatrix.translate(-center.x, -center.y);\n\t\tthis.transform(matrix);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar children = this._children;\n\t\tif (!children || !children.length)\n\t\t\treturn new Rectangle();\n\t\tItem._updateBoundsCache(this, options.cacheItem);\n\t\treturn Item._getBounds(children, matrix, options);\n\t},\n\n\t_getBoundsCacheKey: function(options, internal) {\n\t\treturn [\n\t\t\toptions.stroke ? 1 : 0,\n\t\t\toptions.handle ? 1 : 0,\n\t\t\tinternal ? 1 : 0\n\t\t].join('');\n\t},\n\n\t_getCachedBounds: function(matrix, options, noInternal) {\n\t\tmatrix = matrix && matrix._orNullIfIdentity();\n\t\tvar internal = options.internal && !noInternal,\n\t\t\tcacheItem = options.cacheItem,\n\t\t\t_matrix = internal ? null : this._matrix._orNullIfIdentity(),\n\t\t\tcacheKey = cacheItem && (!matrix || matrix.equals(_matrix))\n\t\t\t\t&& this._getBoundsCacheKey(options, internal),\n\t\t\tbounds = this._bounds;\n\t\tItem._updateBoundsCache(this._parent || this._symbol, cacheItem);\n\t\tif (cacheKey && bounds && cacheKey in bounds) {\n\t\t\tvar cached = bounds[cacheKey];\n\t\t\treturn {\n\t\t\t\trect: cached.rect.clone(),\n\t\t\t\tnonscaling: cached.nonscaling\n\t\t\t};\n\t\t}\n\t\tvar res = this._getBounds(matrix || _matrix, options),\n\t\t\trect = res.rect || res,\n\t\t\tstyle = this._style,\n\t\t\tnonscaling = res.nonscaling || style.hasStroke()\n\t\t\t\t&& !style.getStrokeScaling();\n\t\tif (cacheKey) {\n\t\t\tif (!bounds) {\n\t\t\t\tthis._bounds = bounds = {};\n\t\t\t}\n\t\t\tvar cached = bounds[cacheKey] = {\n\t\t\t\trect: rect.clone(),\n\t\t\t\tnonscaling: nonscaling,\n\t\t\t\tinternal: internal\n\t\t\t};\n\t\t}\n\t\treturn {\n\t\t\trect: rect,\n\t\t\tnonscaling: nonscaling\n\t\t};\n\t},\n\n\t_getStrokeMatrix: function(matrix, options) {\n\t\tvar parent = this.getStrokeScaling() ? null\n\t\t\t\t: options && options.internal ? this\n\t\t\t\t\t: this._parent || this._symbol && this._symbol._item,\n\t\t\tmx = parent ? parent.getViewMatrix().invert() : matrix;\n\t\treturn mx && mx._shiftless();\n\t},\n\n\tstatics: {\n\t\t_updateBoundsCache: function(parent, item) {\n\t\t\tif (parent && item) {\n\t\t\t\tvar id = item._id,\n\t\t\t\t\tref = parent._boundsCache = parent._boundsCache || {\n\t\t\t\t\t\tids: {},\n\t\t\t\t\t\tlist: []\n\t\t\t\t\t};\n\t\t\t\tif (!ref.ids[id]) {\n\t\t\t\t\tref.list.push(item);\n\t\t\t\t\tref.ids[id] = item;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_clearBoundsCache: function(item) {\n\t\t\tvar cache = item._boundsCache;\n\t\t\tif (cache) {\n\t\t\t\titem._bounds = item._position = item._boundsCache = undefined;\n\t\t\t\tfor (var i = 0, list = cache.list, l = list.length; i < l; i++){\n\t\t\t\t\tvar other = list[i];\n\t\t\t\t\tif (other !== item) {\n\t\t\t\t\t\tother._bounds = other._position = undefined;\n\t\t\t\t\t\tif (other._boundsCache)\n\t\t\t\t\t\t\tItem._clearBoundsCache(other);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_getBounds: function(items, matrix, options) {\n\t\t\tvar x1 = Infinity,\n\t\t\t\tx2 = -x1,\n\t\t\t\ty1 = x1,\n\t\t\t\ty2 = x2,\n\t\t\t\tnonscaling = false;\n\t\t\toptions = options || {};\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i];\n\t\t\t\tif (item._visible && !item.isEmpty(true)) {\n\t\t\t\t\tvar bounds = item._getCachedBounds(\n\t\t\t\t\t\tmatrix && matrix.appended(item._matrix), options, true),\n\t\t\t\t\t\trect = bounds.rect;\n\t\t\t\t\tx1 = Math.min(rect.x, x1);\n\t\t\t\t\ty1 = Math.min(rect.y, y1);\n\t\t\t\t\tx2 = Math.max(rect.x + rect.width, x2);\n\t\t\t\t\ty2 = Math.max(rect.y + rect.height, y2);\n\t\t\t\t\tif (bounds.nonscaling)\n\t\t\t\t\t\tnonscaling = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn {\n\t\t\t\trect: isFinite(x1)\n\t\t\t\t\t? new Rectangle(x1, y1, x2 - x1, y2 - y1)\n\t\t\t\t\t: new Rectangle(),\n\t\t\t\tnonscaling: nonscaling\n\t\t\t};\n\t\t}\n\t}\n\n}), {\n\tbeans: true,\n\n\t_decompose: function() {\n\t\treturn this._applyMatrix\n\t\t\t? null\n\t\t\t: this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\tgetRotation: function() {\n\t\tvar decomposed = this._decompose();\n\t\treturn decomposed ? decomposed.rotation : 0;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tvar decomposed = this._decomposed;\n\t\t\tthis.rotate(rotation - current);\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.rotation = rotation;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar decomposed = this._decompose(),\n\t\t\ts = decomposed && decomposed.scaling;\n\t\treturn new LinkedPoint(s ? s.x : 1, s ? s.y : 1, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling && !current.equals(scaling)) {\n\t\t\tvar rotation = this.getRotation(),\n\t\t\t\tdecomposed = this._decomposed,\n\t\t\t\tmatrix = new Matrix(),\n\t\t\t\tisZero = Numerical.isZero;\n\t\t\tif (isZero(current.x) || isZero(current.y)) {\n\t\t\t\tmatrix.translate(decomposed.translation);\n\t\t\t\tif (rotation) {\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\t}\n\t\t\t\tmatrix.scale(scaling.x, scaling.y);\n\t\t\t\tthis._matrix.set(matrix);\n\t\t\t} else {\n\t\t\t\tvar center = this.getPosition(true);\n\t\t\t\tmatrix.translate(center);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(rotation);\n\t\t\t\tmatrix.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t\t\tif (rotation)\n\t\t\t\t\tmatrix.rotate(-rotation);\n\t\t\t\tmatrix.translate(center.negate());\n\t\t\t\tthis.transform(matrix);\n\t\t\t}\n\t\t\tif (decomposed) {\n\t\t\t\tdecomposed.scaling = scaling;\n\t\t\t\tthis._decomposed = decomposed;\n\t\t\t}\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\tgetGlobalMatrix: function(_dontClone) {\n\t\tvar matrix = this._globalMatrix;\n\t\tif (matrix) {\n\t\t\tvar parent = this._parent;\n\t\t\tvar parents = [];\n\t\t\twhile (parent) {\n\t\t\t\tif (!parent._globalMatrix) {\n\t\t\t\t\tmatrix = null;\n\t\t\t\t\tfor (var i = 0, l = parents.length; i < l; i++) {\n\t\t\t\t\t\tparents[i]._globalMatrix = null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tparents.push(parent);\n\t\t\t\tparent = parent._parent;\n\t\t\t}\n\t\t}\n\t\tif (!matrix) {\n\t\t\tmatrix = this._globalMatrix = this._matrix.clone();\n\t\t\tvar parent = this._parent;\n\t\t\tif (parent)\n\t\t\t\tmatrix.prepend(parent.getGlobalMatrix(true));\n\t\t}\n\t\treturn _dontClone ? matrix : matrix.clone();\n\t},\n\n\tgetViewMatrix: function() {\n\t\treturn this.getGlobalMatrix().prepend(this.getView()._matrix);\n\t},\n\n\tgetApplyMatrix: function() {\n\t\treturn this._applyMatrix;\n\t},\n\n\tsetApplyMatrix: function(apply) {\n\t\tif (this._applyMatrix = this._canApplyMatrix && !!apply)\n\t\t\tthis.transform(null, true);\n\t},\n\n\tgetTransformContent: '#getApplyMatrix',\n\tsetTransformContent: '#setApplyMatrix',\n}, {\n\tgetProject: function() {\n\t\treturn this._project;\n\t},\n\n\t_setProject: function(project, installEvents) {\n\t\tif (this._project !== project) {\n\t\t\tif (this._project)\n\t\t\t\tthis._installEvents(false);\n\t\t\tthis._project = project;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\t\tchildren[i]._setProject(project);\n\t\t\tinstallEvents = true;\n\t\t}\n\t\tif (installEvents)\n\t\t\tthis._installEvents(true);\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\t_installEvents: function _installEvents(install) {\n\t\t_installEvents.base.call(this, install);\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++)\n\t\t\tchildren[i]._installEvents(install);\n\t},\n\n\tgetLayer: function() {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent instanceof Layer)\n\t\t\t\treturn parent;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetParent: function() {\n\t\treturn this._parent;\n\t},\n\n\tsetParent: function(item) {\n\t\treturn item.addChild(this);\n\t},\n\n\t_getOwner: '#getParent',\n\n\tgetChildren: function() {\n\t\treturn this._children;\n\t},\n\n\tsetChildren: function(items) {\n\t\tthis.removeChildren();\n\t\tthis.addChildren(items);\n\t},\n\n\tgetFirstChild: function() {\n\t\treturn this._children && this._children[0] || null;\n\t},\n\n\tgetLastChild: function() {\n\t\treturn this._children && this._children[this._children.length - 1]\n\t\t\t\t|| null;\n\t},\n\n\tgetNextSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index + 1] || null;\n\t},\n\n\tgetPreviousSibling: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner && owner._children[this._index - 1] || null;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index;\n\t},\n\n\tsetIndex: function(index) {\n\t\tvar parent = this._parent,\n\t\t\tchildren = parent && parent._children;\n\t\tif (children) {\n\t\t\tparent.insertChildren(index in children ? index : undefined,\n\t\t\t\t\t\t\t\t [this]);\n\t\t}\n\t},\n\n\tequals: function(item) {\n\t\treturn item === this || item && this._class === item._class\n\t\t\t\t&& this._style.equals(item._style)\n\t\t\t\t&& this._matrix.equals(item._matrix)\n\t\t\t\t&& this._locked === item._locked\n\t\t\t\t&& this._visible === item._visible\n\t\t\t\t&& this._blendMode === item._blendMode\n\t\t\t\t&& this._opacity === item._opacity\n\t\t\t\t&& this._clipMask === item._clipMask\n\t\t\t\t&& this._guide === item._guide\n\t\t\t\t&& this._equals(item)\n\t\t\t\t|| false;\n\t},\n\n\t_equals: function(item) {\n\t\treturn Base.equals(this._children, item._children);\n\t},\n\n\tclone: function(options) {\n\t\tvar copy = new this.constructor(Item.NO_INSERT),\n\t\t\tchildren = this._children,\n\t\t\tinsert = Base.pick(options ? options.insert : undefined,\n\t\t\t\t\toptions === undefined || options === true),\n\t\t\tdeep = Base.pick(options ? options.deep : undefined, true);\n\t\tif (children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (!children || deep)\n\t\t\tcopy.copyContent(this);\n\t\tif (!children)\n\t\t\tcopy.copyAttributes(this);\n\t\tif (insert)\n\t\t\tcopy.insertAbove(this);\n\t\tvar name = this._name,\n\t\t\tparent = this._parent;\n\t\tif (name && parent) {\n\t\t\tvar children = parent._children,\n\t\t\t\torig = name,\n\t\t\t\ti = 1;\n\t\t\twhile (children[name])\n\t\t\t\tname = orig + ' ' + (i++);\n\t\t\tif (name !== orig)\n\t\t\t\tcopy.setName(name);\n\t\t}\n\t\treturn copy;\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar children = source._children;\n\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\tthis.addChild(children[i].clone(false), true);\n\t\t}\n\t},\n\n\tcopyAttributes: function(source, excludeMatrix) {\n\t\tthis.setStyle(source._style);\n\t\tvar keys = ['_locked', '_visible', '_blendMode', '_opacity',\n\t\t\t\t'_clipMask', '_guide'];\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i];\n\t\t\tif (source.hasOwnProperty(key))\n\t\t\t\tthis[key] = source[key];\n\t\t}\n\t\tif (!excludeMatrix)\n\t\t\tthis._matrix.set(source._matrix, true);\n\t\tthis.setApplyMatrix(source._applyMatrix);\n\t\tthis.setPivot(source._pivot);\n\t\tthis.setSelection(source._selection);\n\t\tvar data = source._data,\n\t\t\tname = source._name;\n\t\tthis._data = data ? Base.clone(data) : null;\n\t\tif (name)\n\t\t\tthis.setName(name);\n\t},\n\n\trasterize: function(arg0, arg1) {\n\t\tvar resolution,\n\t\t\tinsert,\n\t\t\traster;\n\t\tif (Base.isPlainObject(arg0)) {\n\t\t\tresolution = arg0.resolution;\n\t\t\tinsert = arg0.insert;\n\t\t\traster = arg0.raster;\n\t\t} else {\n\t\t\tresolution = arg0;\n\t\t\tinsert = arg1;\n\t\t}\n\t\tif (!raster) {\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\t}\n\t\tvar bounds = this.getStrokeBounds(),\n\t\t\tscale = (resolution || this.getView().getResolution()) / 72,\n\t\t\ttopLeft = bounds.getTopLeft().floor(),\n\t\t\tbottomRight = bounds.getBottomRight().ceil(),\n\t\t\tboundsSize = new Size(bottomRight.subtract(topLeft)),\n\t\t\trasterSize = boundsSize.multiply(scale);\n\t\traster.setSize(rasterSize, true);\n\n\t\tif (!rasterSize.isZero()) {\n\t\t\tvar ctx = raster.getContext(true),\n\t\t\t\tmatrix = new Matrix().scale(scale).translate(topLeft.negate());\n\t\t\tctx.save();\n\t\t\tmatrix.applyToContext(ctx);\n\t\t\tthis.draw(ctx, new Base({ matrices: [matrix] }));\n\t\t\tctx.restore();\n\t\t}\n\t\traster._matrix.set(\n\t\t\tnew Matrix()\n\t\t\t\t.translate(topLeft.add(boundsSize.divide(2)))\n\t\t\t\t.scale(1 / scale)\n\t\t);\n\t\tif (insert === undefined || insert) {\n\t\t\traster.insertAbove(this);\n\t\t}\n\t\treturn raster;\n\t},\n\n\tcontains: function() {\n\t\tvar matrix = this._matrix;\n\t\treturn (\n\t\t\tmatrix.isInvertible() &&\n\t\t\t!!this._contains(matrix._inverseTransform(Point.read(arguments)))\n\t\t);\n\t},\n\n\t_contains: function(point) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tif (children[i].contains(point))\n\t\t\t\t\treturn true;\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t\treturn point.isInside(this.getInternalBounds());\n\t},\n\n\tisInside: function() {\n\t\treturn Rectangle.read(arguments).contains(this.getBounds());\n\t},\n\n\t_asPathItem: function() {\n\t\treturn new Path.Rectangle({\n\t\t\trectangle: this.getInternalBounds(),\n\t\t\tmatrix: this._matrix,\n\t\t\tinsert: false,\n\t\t});\n\t},\n\n\tintersects: function(item, _matrix) {\n\t\tif (!(item instanceof Item))\n\t\t\treturn false;\n\t\treturn this._asPathItem().getIntersections(item._asPathItem(), null,\n\t\t\t\t_matrix, true).length > 0;\n\t}\n},\nnew function() {\n\tfunction hitTest() {\n\t\tvar args = arguments;\n\t\treturn this._hitTest(\n\t\t\t\tPoint.read(args),\n\t\t\t\tHitResult.getOptions(args));\n\t}\n\n\tfunction hitTestAll() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\toptions = HitResult.getOptions(args),\n\t\t\tall = [];\n\t\tthis._hitTest(point, new Base({ all: all }, options));\n\t\treturn all;\n\t}\n\n\tfunction hitTestChildren(point, options, viewMatrix, _exclude) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\t\tvar child = children[i];\n\t\t\t\tvar res = child !== _exclude && child._hitTest(point, options,\n\t\t\t\t\t\tviewMatrix);\n\t\t\t\tif (res && !options.all)\n\t\t\t\t\treturn res;\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tProject.inject({\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTest: hitTestChildren\n\t});\n\n\treturn {\n\t\thitTest: hitTest,\n\t\thitTestAll: hitTestAll,\n\t\t_hitTestChildren: hitTestChildren,\n\t};\n}, {\n\n\t_hitTest: function(point, options, parentViewMatrix) {\n\t\tif (this._locked || !this._visible || this._guide && !options.guides\n\t\t\t\t|| this.isEmpty()) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar matrix = this._matrix,\n\t\t\tviewMatrix = parentViewMatrix\n\t\t\t\t\t? parentViewMatrix.appended(matrix)\n\t\t\t\t\t: this.getGlobalMatrix().prepend(this.getView()._matrix),\n\t\t\ttolerance = Math.max(options.tolerance, 1e-12),\n\t\t\ttolerancePadding = options._tolerancePadding = new Size(\n\t\t\t\t\tPath._getStrokePadding(tolerance,\n\t\t\t\t\t\tmatrix._shiftless().invert()));\n\t\tpoint = matrix._inverseTransform(point);\n\t\tif (!point || !this._children &&\n\t\t\t!this.getBounds({ internal: true, stroke: true, handle: true })\n\t\t\t\t.expand(tolerancePadding.multiply(2))._containsPoint(point)) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar checkSelf = !(options.guides && !this._guide\n\t\t\t\t|| options.selected && !this.isSelected()\n\t\t\t\t|| options.type && options.type !== Base.hyphenate(this._class)\n\t\t\t\t|| options.class && !(this instanceof options.class)),\n\t\t\tmatch = options.match,\n\t\t\tthat = this,\n\t\t\tbounds,\n\t\t\tres;\n\n\t\tfunction filter(hit) {\n\t\t\tif (hit && match && !match(hit))\n\t\t\t\thit = null;\n\t\t\tif (hit && options.all)\n\t\t\t\toptions.all.push(hit);\n\t\t\treturn hit;\n\t\t}\n\n\t\tfunction checkPoint(type, part) {\n\t\t\tvar pt = part ? bounds['get' + part]() : that.getPosition();\n\t\t\tif (point.subtract(pt).divide(tolerancePadding).length <= 1) {\n\t\t\t\treturn new HitResult(type, that, {\n\t\t\t\t\tname: part ? Base.hyphenate(part) : type,\n\t\t\t\t\tpoint: pt\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\n\t\tvar checkPosition = options.position,\n\t\t\tcheckCenter = options.center,\n\t\t\tcheckBounds = options.bounds;\n\t\tif (checkSelf && this._parent\n\t\t\t\t&& (checkPosition || checkCenter || checkBounds)) {\n\t\t\tif (checkCenter || checkBounds) {\n\t\t\t\tbounds = this.getInternalBounds();\n\t\t\t}\n\t\t\tres = checkPosition && checkPoint('position') ||\n\t\t\t\t\tcheckCenter && checkPoint('center', 'Center');\n\t\t\tif (!res && checkBounds) {\n\t\t\t\tvar points = [\n\t\t\t\t\t'TopLeft', 'TopRight', 'BottomLeft', 'BottomRight',\n\t\t\t\t\t'LeftCenter', 'TopCenter', 'RightCenter', 'BottomCenter'\n\t\t\t\t];\n\t\t\t\tfor (var i = 0; i < 8 && !res; i++) {\n\t\t\t\t\tres = checkPoint('bounds', points[i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = filter(res);\n\t\t}\n\n\t\tif (!res) {\n\t\t\tres = this._hitTestChildren(point, options, viewMatrix)\n\t\t\t\t|| checkSelf\n\t\t\t\t\t&& filter(this._hitTestSelf(point, options, viewMatrix,\n\t\t\t\t\t\tthis.getStrokeScaling() ? null\n\t\t\t\t\t\t\t: viewMatrix._shiftless().invert()))\n\t\t\t\t|| null;\n\t\t}\n\t\tif (res && res.point) {\n\t\t\tres.point = matrix.transform(res.point);\n\t\t}\n\t\treturn res;\n\t},\n\n\t_hitTestSelf: function(point, options) {\n\t\tif (options.fill && this.hasFill() && this._contains(point))\n\t\t\treturn new HitResult('fill', this);\n\t},\n\n\tmatches: function(name, compare) {\n\t\tfunction matchObject(obj1, obj2) {\n\t\t\tfor (var i in obj1) {\n\t\t\t\tif (obj1.hasOwnProperty(i)) {\n\t\t\t\t\tvar val1 = obj1[i],\n\t\t\t\t\t\tval2 = obj2[i];\n\t\t\t\t\tif (Base.isPlainObject(val1) && Base.isPlainObject(val2)) {\n\t\t\t\t\t\tif (!matchObject(val1, val2))\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t} else if (!Base.equals(val1, val2)) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar type = typeof name;\n\t\tif (type === 'object') {\n\t\t\tfor (var key in name) {\n\t\t\t\tif (name.hasOwnProperty(key) && !this.matches(key, name[key]))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t} else if (type === 'function') {\n\t\t\treturn name(this);\n\t\t} else if (name === 'match') {\n\t\t\treturn compare(this);\n\t\t} else {\n\t\t\tvar value = /^(empty|editable)$/.test(name)\n\t\t\t\t\t? this['is' + Base.capitalize(name)]()\n\t\t\t\t\t: name === 'type'\n\t\t\t\t\t\t? Base.hyphenate(this._class)\n\t\t\t\t\t\t: this[name];\n\t\t\tif (name === 'class') {\n\t\t\t\tif (typeof compare === 'function')\n\t\t\t\t\treturn this instanceof compare;\n\t\t\t\tvalue = this._class;\n\t\t\t}\n\t\t\tif (typeof compare === 'function') {\n\t\t\t\treturn !!compare(value);\n\t\t\t} else if (compare) {\n\t\t\t\tif (compare.test) {\n\t\t\t\t\treturn compare.test(value);\n\t\t\t\t} else if (Base.isPlainObject(compare)) {\n\t\t\t\t\treturn matchObject(compare, value);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn Base.equals(value, compare);\n\t\t}\n\t},\n\n\tgetItems: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix);\n\t},\n\n\tgetItem: function(options) {\n\t\treturn Item._getItems(this, options, this._matrix, null, true)[0]\n\t\t\t\t|| null;\n\t},\n\n\tstatics: {\n\t\t_getItems: function _getItems(item, options, matrix, param, firstOnly) {\n\t\t\tif (!param) {\n\t\t\t\tvar obj = typeof options === 'object' && options,\n\t\t\t\t\toverlapping = obj && obj.overlapping,\n\t\t\t\t\tinside = obj && obj.inside,\n\t\t\t\t\tbounds = overlapping || inside,\n\t\t\t\t\trect = bounds && Rectangle.read([bounds]);\n\t\t\t\tparam = {\n\t\t\t\t\titems: [],\n\t\t\t\t\trecursive: obj && obj.recursive !== false,\n\t\t\t\t\tinside: !!inside,\n\t\t\t\t\toverlapping: !!overlapping,\n\t\t\t\t\trect: rect,\n\t\t\t\t\tpath: overlapping && new Path.Rectangle({\n\t\t\t\t\t\trectangle: rect,\n\t\t\t\t\t\tinsert: false\n\t\t\t\t\t})\n\t\t\t\t};\n\t\t\t\tif (obj) {\n\t\t\t\t\toptions = Base.filter({}, options, {\n\t\t\t\t\t\trecursive: true, inside: true, overlapping: true\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tvar children = item._children,\n\t\t\t\titems = param.items,\n\t\t\t\trect = param.rect;\n\t\t\tmatrix = rect && (matrix || new Matrix());\n\t\t\tfor (var i = 0, l = children && children.length; i < l; i++) {\n\t\t\t\tvar child = children[i],\n\t\t\t\t\tchildMatrix = matrix && matrix.appended(child._matrix),\n\t\t\t\t\tadd = true;\n\t\t\t\tif (rect) {\n\t\t\t\t\tvar bounds = child.getBounds(childMatrix);\n\t\t\t\t\tif (!rect.intersects(bounds))\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\tif (!(rect.contains(bounds)\n\t\t\t\t\t\t\t|| param.overlapping && (bounds.contains(rect)\n\t\t\t\t\t\t\t\t|| param.path.intersects(child, childMatrix))))\n\t\t\t\t\t\tadd = false;\n\t\t\t\t}\n\t\t\t\tif (add && child.matches(options)) {\n\t\t\t\t\titems.push(child);\n\t\t\t\t\tif (firstOnly)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (param.recursive !== false) {\n\t\t\t\t\t_getItems(child, options, childMatrix, param, firstOnly);\n\t\t\t\t}\n\t\t\t\tif (firstOnly && items.length > 0)\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn items;\n\t\t}\n\t}\n}, {\n\n\timportJSON: function(json) {\n\t\tvar res = Base.importJSON(json, this);\n\t\treturn res !== this ? this.addChild(res) : res;\n\t},\n\n\taddChild: function(item) {\n\t\treturn this.insertChild(undefined, item);\n\t},\n\n\tinsertChild: function(index, item) {\n\t\tvar res = item ? this.insertChildren(index, [item]) : null;\n\t\treturn res && res[0];\n\t},\n\n\taddChildren: function(items) {\n\t\treturn this.insertChildren(this._children.length, items);\n\t},\n\n\tinsertChildren: function(index, items) {\n\t\tvar children = this._children;\n\t\tif (children && items && items.length > 0) {\n\t\t\titems = Base.slice(items);\n\t\t\tvar inserted = {};\n\t\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tid = item && item._id;\n\t\t\t\tif (!item || inserted[id]) {\n\t\t\t\t\titems.splice(i, 1);\n\t\t\t\t} else {\n\t\t\t\t\titem._remove(false, true);\n\t\t\t\t\tinserted[id] = true;\n\t\t\t\t}\n\t\t\t}\n\t\t\tBase.splice(children, items, index, 0);\n\t\t\tvar project = this._project,\n\t\t\t\tnotifySelf = project._changes;\n\t\t\tfor (var i = 0, l = items.length; i < l; i++) {\n\t\t\t\tvar item = items[i],\n\t\t\t\t\tname = item._name;\n\t\t\t\titem._parent = this;\n\t\t\t\titem._setProject(project, true);\n\t\t\t\tif (name)\n\t\t\t\t\titem.setName(name);\n\t\t\t\tif (notifySelf)\n\t\t\t\t\titem._changed(5);\n\t\t\t}\n\t\t\tthis._changed(11);\n\t\t} else {\n\t\t\titems = null;\n\t\t}\n\t\treturn items;\n\t},\n\n\t_insertItem: '#insertChild',\n\n\t_insertAt: function(item, offset) {\n\t\tvar owner = item && item._getOwner(),\n\t\t\tres = item !== this && owner ? this : null;\n\t\tif (res) {\n\t\t\tres._remove(false, true);\n\t\t\towner._insertItem(item._index + offset, res);\n\t\t}\n\t\treturn res;\n\t},\n\n\tinsertAbove: function(item) {\n\t\treturn this._insertAt(item, 1);\n\t},\n\n\tinsertBelow: function(item) {\n\t\treturn this._insertAt(item, 0);\n\t},\n\n\tsendToBack: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(0, this) : null;\n\t},\n\n\tbringToFront: function() {\n\t\tvar owner = this._getOwner();\n\t\treturn owner ? owner._insertItem(undefined, this) : null;\n\t},\n\n\tappendTop: '#addChild',\n\n\tappendBottom: function(item) {\n\t\treturn this.insertChild(0, item);\n\t},\n\n\tmoveAbove: '#insertAbove',\n\n\tmoveBelow: '#insertBelow',\n\n\taddTo: function(owner) {\n\t\treturn owner._insertItem(undefined, this);\n\t},\n\n\tcopyTo: function(owner) {\n\t\treturn this.clone(false).addTo(owner);\n\t},\n\n\treduce: function(options) {\n\t\tvar children = this._children;\n\t\tif (children && children.length === 1) {\n\t\t\tvar child = children[0].reduce(options);\n\t\t\tif (this._parent) {\n\t\t\t\tchild.insertAbove(this);\n\t\t\t\tthis.remove();\n\t\t\t} else {\n\t\t\t\tchild.remove();\n\t\t\t}\n\t\t\treturn child;\n\t\t}\n\t\treturn this;\n\t},\n\n\t_removeNamed: function() {\n\t\tvar owner = this._getOwner();\n\t\tif (owner) {\n\t\t\tvar children = owner._children,\n\t\t\t\tnamedChildren = owner._namedChildren,\n\t\t\t\tname = this._name,\n\t\t\t\tnamedArray = namedChildren[name],\n\t\t\t\tindex = namedArray ? namedArray.indexOf(this) : -1;\n\t\t\tif (index !== -1) {\n\t\t\t\tif (children[name] == this)\n\t\t\t\t\tdelete children[name];\n\t\t\t\tnamedArray.splice(index, 1);\n\t\t\t\tif (namedArray.length) {\n\t\t\t\t\tchildren[name] = namedArray[0];\n\t\t\t\t} else {\n\t\t\t\t\tdelete namedChildren[name];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_remove: function(notifySelf, notifyParent) {\n\t\tvar owner = this._getOwner(),\n\t\t\tproject = this._project,\n\t\t\tindex = this._index;\n\t\tif (this._style)\n\t\t\tthis._style._dispose();\n\t\tif (owner) {\n\t\t\tif (this._name)\n\t\t\t\tthis._removeNamed();\n\t\t\tif (index != null) {\n\t\t\t\tif (project._activeLayer === this)\n\t\t\t\t\tproject._activeLayer = this.getNextSibling()\n\t\t\t\t\t\t\t|| this.getPreviousSibling();\n\t\t\t\tBase.splice(owner._children, null, index, 1);\n\t\t\t}\n\t\t\tthis._installEvents(false);\n\t\t\tif (notifySelf && project._changes)\n\t\t\t\tthis._changed(5);\n\t\t\tif (notifyParent)\n\t\t\t\towner._changed(11, this);\n\t\t\tthis._parent = null;\n\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tremove: function() {\n\t\treturn this._remove(true, true);\n\t},\n\n\treplaceWith: function(item) {\n\t\tvar ok = item && item.insertBelow(this);\n\t\tif (ok)\n\t\t\tthis.remove();\n\t\treturn ok;\n\t},\n\n\tremoveChildren: function(start, end) {\n\t\tif (!this._children)\n\t\t\treturn null;\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._children.length);\n\t\tvar removed = Base.splice(this._children, null, start, end - start);\n\t\tfor (var i = removed.length - 1; i >= 0; i--) {\n\t\t\tremoved[i]._remove(true, false);\n\t\t}\n\t\tif (removed.length > 0)\n\t\t\tthis._changed(11);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeChildren',\n\n\treverseChildren: function() {\n\t\tif (this._children) {\n\t\t\tthis._children.reverse();\n\t\t\tfor (var i = 0, l = this._children.length; i < l; i++)\n\t\t\t\tthis._children[i]._index = i;\n\t\t\tthis._changed(11);\n\t\t}\n\t},\n\n\tisEmpty: function(recursively) {\n\t\tvar children = this._children;\n\t\tvar numChildren = children ? children.length : 0;\n\t\tif (recursively) {\n\t\t\tfor (var i = 0; i < numChildren; i++) {\n\t\t\t\tif (!children[i].isEmpty(recursively)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\treturn !numChildren;\n\t},\n\n\tisEditable: function() {\n\t\tvar item = this;\n\t\twhile (item) {\n\t\t\tif (!item._visible || item._locked)\n\t\t\t\treturn false;\n\t\t\titem = item._parent;\n\t\t}\n\t\treturn true;\n\t},\n\n\thasFill: function() {\n\t\treturn this.getStyle().hasFill();\n\t},\n\n\thasStroke: function() {\n\t\treturn this.getStyle().hasStroke();\n\t},\n\n\thasShadow: function() {\n\t\treturn this.getStyle().hasShadow();\n\t},\n\n\t_getOrder: function(item) {\n\t\tfunction getList(item) {\n\t\t\tvar list = [];\n\t\t\tdo {\n\t\t\t\tlist.unshift(item);\n\t\t\t} while (item = item._parent);\n\t\t\treturn list;\n\t\t}\n\t\tvar list1 = getList(this),\n\t\t\tlist2 = getList(item);\n\t\tfor (var i = 0, l = Math.min(list1.length, list2.length); i < l; i++) {\n\t\t\tif (list1[i] != list2[i]) {\n\t\t\t\treturn list1[i]._index < list2[i]._index ? 1 : -1;\n\t\t\t}\n\t\t}\n\t\treturn 0;\n\t},\n\n\thasChildren: function() {\n\t\treturn this._children && this._children.length > 0;\n\t},\n\n\tisInserted: function() {\n\t\treturn this._parent ? this._parent.isInserted() : false;\n\t},\n\n\tisAbove: function(item) {\n\t\treturn this._getOrder(item) === -1;\n\t},\n\n\tisBelow: function(item) {\n\t\treturn this._getOrder(item) === 1;\n\t},\n\n\tisParent: function(item) {\n\t\treturn this._parent === item;\n\t},\n\n\tisChild: function(item) {\n\t\treturn item && item._parent === this;\n\t},\n\n\tisDescendant: function(item) {\n\t\tvar parent = this;\n\t\twhile (parent = parent._parent) {\n\t\t\tif (parent === item)\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tisAncestor: function(item) {\n\t\treturn item ? item.isDescendant(this) : false;\n\t},\n\n\tisSibling: function(item) {\n\t\treturn this._parent === item._parent;\n\t},\n\n\tisGroupedWith: function(item) {\n\t\tvar parent = this._parent;\n\t\twhile (parent) {\n\t\t\tif (parent._parent\n\t\t\t\t&& /^(Group|Layer|CompoundPath)$/.test(parent._class)\n\t\t\t\t&& item.isDescendant(parent))\n\t\t\t\t\treturn true;\n\t\t\tparent = parent._parent;\n\t\t}\n\t\treturn false;\n\t},\n\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getPosition(true)));\n\t};\n}, {\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\ttransform: function(matrix, _applyRecursively, _setApplyMatrix) {\n\t\tvar _matrix = this._matrix,\n\t\t\ttransformMatrix = matrix && !matrix.isIdentity(),\n\t\t\tapplyMatrix = (\n\t\t\t\t_setApplyMatrix && this._canApplyMatrix ||\n\t\t\t\tthis._applyMatrix && (\n\t\t\t\t\ttransformMatrix || !_matrix.isIdentity() ||\n\t\t\t\t\t_applyRecursively && this._children\n\t\t\t\t)\n\t\t\t);\n\t\tif (!transformMatrix && !applyMatrix)\n\t\t\treturn this;\n\t\tif (transformMatrix) {\n\t\t\tif (!matrix.isInvertible() && _matrix.isInvertible())\n\t\t\t\t_matrix._backup = _matrix.getValues();\n\t\t\t_matrix.prepend(matrix, true);\n\t\t\tvar style = this._style,\n\t\t\t\tfillColor = style.getFillColor(true),\n\t\t\t\tstrokeColor = style.getStrokeColor(true);\n\t\t\tif (fillColor)\n\t\t\t\tfillColor.transform(matrix);\n\t\t\tif (strokeColor)\n\t\t\t\tstrokeColor.transform(matrix);\n\t\t}\n\n\t\tif (applyMatrix && (applyMatrix = this._transformContent(\n\t\t\t\t_matrix, _applyRecursively, _setApplyMatrix))) {\n\t\t\tvar pivot = this._pivot;\n\t\t\tif (pivot)\n\t\t\t\t_matrix._transformPoint(pivot, pivot, true);\n\t\t\t_matrix.reset(true);\n\t\t\tif (_setApplyMatrix && this._canApplyMatrix)\n\t\t\t\tthis._applyMatrix = true;\n\t\t}\n\t\tvar bounds = this._bounds,\n\t\t\tposition = this._position;\n\t\tif (transformMatrix || applyMatrix) {\n\t\t\tthis._changed(25);\n\t\t}\n\t\tvar decomp = transformMatrix && bounds && matrix.decompose();\n\t\tif (decomp && decomp.skewing.isZero() && decomp.rotation % 90 === 0) {\n\t\t\tfor (var key in bounds) {\n\t\t\t\tvar cache = bounds[key];\n\t\t\t\tif (cache.nonscaling) {\n\t\t\t\t\tdelete bounds[key];\n\t\t\t\t} else if (applyMatrix || !cache.internal) {\n\t\t\t\t\tvar rect = cache.rect;\n\t\t\t\t\tmatrix._transformBounds(rect, rect);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._bounds = bounds;\n\t\t\tvar cached = bounds[this._getBoundsCacheKey(\n\t\t\t\tthis._boundsOptions || {})];\n\t\t\tif (cached) {\n\t\t\t\tthis._position = this._getPositionFromBounds(cached.rect);\n\t\t\t}\n\t\t} else if (transformMatrix && position && this._pivot) {\n\t\t\tthis._position = matrix._transformPoint(position, position);\n\t\t}\n\t\treturn this;\n\t},\n\n\t_transformContent: function(matrix, applyRecursively, setApplyMatrix) {\n\t\tvar children = this._children;\n\t\tif (children) {\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tchildren[i].transform(matrix, applyRecursively, setApplyMatrix);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\n\tglobalToLocal: function() {\n\t\treturn this.getGlobalMatrix(true)._inverseTransform(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tlocalToGlobal: function() {\n\t\treturn this.getGlobalMatrix(true)._transformPoint(\n\t\t\t\tPoint.read(arguments));\n\t},\n\n\tparentToLocal: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tlocalToParent: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tfitBounds: function(rectangle, fill) {\n\t\trectangle = Rectangle.read(arguments);\n\t\tvar bounds = this.getBounds(),\n\t\t\titemRatio = bounds.height / bounds.width,\n\t\t\trectRatio = rectangle.height / rectangle.width,\n\t\t\tscale = (fill ? itemRatio > rectRatio : itemRatio < rectRatio)\n\t\t\t\t\t? rectangle.width / bounds.width\n\t\t\t\t\t: rectangle.height / bounds.height,\n\t\t\tnewBounds = new Rectangle(new Point(),\n\t\t\t\t\tnew Size(bounds.width * scale, bounds.height * scale));\n\t\tnewBounds.setCenter(rectangle.getCenter());\n\t\tthis.setBounds(newBounds);\n\t}\n}), {\n\n\t_setStyles: function(ctx, param, viewMatrix) {\n\t\tvar style = this._style,\n\t\t\tmatrix = this._matrix;\n\t\tif (style.hasFill()) {\n\t\t\tctx.fillStyle = style.getFillColor().toCanvasStyle(ctx, matrix);\n\t\t}\n\t\tif (style.hasStroke()) {\n\t\t\tctx.strokeStyle = style.getStrokeColor().toCanvasStyle(ctx, matrix);\n\t\t\tctx.lineWidth = style.getStrokeWidth();\n\t\t\tvar strokeJoin = style.getStrokeJoin(),\n\t\t\t\tstrokeCap = style.getStrokeCap(),\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\tif (strokeJoin)\n\t\t\t\tctx.lineJoin = strokeJoin;\n\t\t\tif (strokeCap)\n\t\t\t\tctx.lineCap = strokeCap;\n\t\t\tif (miterLimit)\n\t\t\t\tctx.miterLimit = miterLimit;\n\t\t\tif (paper.support.nativeDash) {\n\t\t\t\tvar dashArray = style.getDashArray(),\n\t\t\t\t\tdashOffset = style.getDashOffset();\n\t\t\t\tif (dashArray && dashArray.length) {\n\t\t\t\t\tif ('setLineDash' in ctx) {\n\t\t\t\t\t\tctx.setLineDash(dashArray);\n\t\t\t\t\t\tctx.lineDashOffset = dashOffset;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tctx.mozDash = dashArray;\n\t\t\t\t\t\tctx.mozDashOffset = dashOffset;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (style.hasShadow()) {\n\t\t\tvar pixelRatio = param.pixelRatio || 1,\n\t\t\t\tmx = viewMatrix._shiftless().prepend(\n\t\t\t\t\tnew Matrix().scale(pixelRatio, pixelRatio)),\n\t\t\t\tblur = mx.transform(new Point(style.getShadowBlur(), 0)),\n\t\t\t\toffset = mx.transform(this.getShadowOffset());\n\t\t\tctx.shadowColor = style.getShadowColor().toCanvasStyle(ctx);\n\t\t\tctx.shadowBlur = blur.getLength();\n\t\t\tctx.shadowOffsetX = offset.x;\n\t\t\tctx.shadowOffsetY = offset.y;\n\t\t}\n\t},\n\n\tdraw: function(ctx, param, parentStrokeMatrix) {\n\t\tvar updateVersion = this._updateVersion = this._project._updateVersion;\n\t\tif (!this._visible || this._opacity === 0)\n\t\t\treturn;\n\t\tvar matrices = param.matrices,\n\t\t\tviewMatrix = param.viewMatrix,\n\t\t\tmatrix = this._matrix,\n\t\t\tglobalMatrix = matrices[matrices.length - 1].appended(matrix);\n\t\tif (!globalMatrix.isInvertible())\n\t\t\treturn;\n\n\t\tviewMatrix = viewMatrix ? viewMatrix.appended(globalMatrix)\n\t\t\t\t: globalMatrix;\n\n\t\tmatrices.push(globalMatrix);\n\t\tif (param.updateMatrix) {\n\t\t\tthis._globalMatrix = globalMatrix;\n\t\t}\n\n\t\tvar blendMode = this._blendMode,\n\t\t\topacity = Numerical.clamp(this._opacity, 0, 1),\n\t\t\tnormalBlend = blendMode === 'normal',\n\t\t\tnativeBlend = BlendMode.nativeModes[blendMode],\n\t\t\tdirect = normalBlend && opacity === 1\n\t\t\t\t\t|| param.dontStart\n\t\t\t\t\t|| param.clip\n\t\t\t\t\t|| (nativeBlend || normalBlend && opacity < 1)\n\t\t\t\t\t\t&& this._canComposite(),\n\t\t\tpixelRatio = param.pixelRatio || 1,\n\t\t\tmainCtx, itemOffset, prevOffset;\n\t\tif (!direct) {\n\t\t\tvar bounds = this.getStrokeBounds(viewMatrix);\n\t\t\tif (!bounds.width || !bounds.height) {\n\t\t\t\tmatrices.pop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tprevOffset = param.offset;\n\t\t\titemOffset = param.offset = bounds.getTopLeft().floor();\n\t\t\tmainCtx = ctx;\n\t\t\tctx = CanvasProvider.getContext(bounds.getSize().ceil().add(1)\n\t\t\t\t\t.multiply(pixelRatio));\n\t\t\tif (pixelRatio !== 1)\n\t\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t\tctx.save();\n\t\tvar strokeMatrix = parentStrokeMatrix\n\t\t\t\t? parentStrokeMatrix.appended(matrix)\n\t\t\t\t: this._canScaleStroke && !this.getStrokeScaling(true)\n\t\t\t\t\t&& viewMatrix,\n\t\t\tclip = !direct && param.clipItem,\n\t\t\ttransform = !strokeMatrix || clip;\n\t\tif (direct) {\n\t\t\tctx.globalAlpha = opacity;\n\t\t\tif (nativeBlend)\n\t\t\t\tctx.globalCompositeOperation = blendMode;\n\t\t} else if (transform) {\n\t\t\tctx.translate(-itemOffset.x, -itemOffset.y);\n\t\t}\n\t\tif (transform) {\n\t\t\t(direct ? matrix : viewMatrix).applyToContext(ctx);\n\t\t}\n\t\tif (clip) {\n\t\t\tparam.clipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tif (strokeMatrix) {\n\t\t\tctx.setTransform(pixelRatio, 0, 0, pixelRatio, 0, 0);\n\t\t\tvar offset = param.offset;\n\t\t\tif (offset)\n\t\t\t\tctx.translate(-offset.x, -offset.y);\n\t\t}\n\t\tthis._draw(ctx, param, viewMatrix, strokeMatrix);\n\t\tctx.restore();\n\t\tmatrices.pop();\n\t\tif (param.clip && !param.dontFinish) {\n\t\t\tctx.clip(this.getFillRule());\n\t\t}\n\t\tif (!direct) {\n\t\t\tBlendMode.process(blendMode, ctx, mainCtx, opacity,\n\t\t\t\t\titemOffset.subtract(prevOffset).multiply(pixelRatio));\n\t\t\tCanvasProvider.release(ctx);\n\t\t\tparam.offset = prevOffset;\n\t\t}\n\t},\n\n\t_isUpdated: function(updateVersion) {\n\t\tvar parent = this._parent;\n\t\tif (parent instanceof CompoundPath)\n\t\t\treturn parent._isUpdated(updateVersion);\n\t\tvar updated = this._updateVersion === updateVersion;\n\t\tif (!updated && parent && parent._visible\n\t\t\t\t&& parent._isUpdated(updateVersion)) {\n\t\t\tthis._updateVersion = updateVersion;\n\t\t\tupdated = true;\n\t\t}\n\t\treturn updated;\n\t},\n\n\t_drawSelection: function(ctx, matrix, size, selectionItems, updateVersion) {\n\t\tvar selection = this._selection,\n\t\t\titemSelected = selection & 1,\n\t\t\tboundsSelected = selection & 2\n\t\t\t\t\t|| itemSelected && this._selectBounds,\n\t\t\tpositionSelected = selection & 4;\n\t\tif (!this._drawSelected)\n\t\t\titemSelected = false;\n\t\tif ((itemSelected || boundsSelected || positionSelected)\n\t\t\t\t&& this._isUpdated(updateVersion)) {\n\t\t\tvar layer,\n\t\t\t\tcolor = this.getSelectedColor(true) || (layer = this.getLayer())\n\t\t\t\t\t&& layer.getSelectedColor(true),\n\t\t\t\tmx = matrix.appended(this.getGlobalMatrix(true)),\n\t\t\t\thalf = size / 2;\n\t\t\tctx.strokeStyle = ctx.fillStyle = color\n\t\t\t\t\t? color.toCanvasStyle(ctx) : '#009dec';\n\t\t\tif (itemSelected)\n\t\t\t\tthis._drawSelected(ctx, mx, selectionItems);\n\t\t\tif (positionSelected) {\n\t\t\t\tvar pos = this.getPosition(true),\n\t\t\t\t\tparent = this._parent,\n\t\t\t\t\tpoint = parent ? parent.localToGlobal(pos) : pos,\n\t\t\t\t\tx = point.x,\n\t\t\t\t\ty = point.y;\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(x, y, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.stroke();\n\t\t\t\tvar deltas = [[0, -1], [1, 0], [0, 1], [-1, 0]],\n\t\t\t\t\tstart = half,\n\t\t\t\t\tend = size + 1;\n\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\tvar delta = deltas[i],\n\t\t\t\t\t\tdx = delta[0],\n\t\t\t\t\t\tdy = delta[1];\n\t\t\t\t\tctx.moveTo(x + dx * start, y + dy * start);\n\t\t\t\t\tctx.lineTo(x + dx * end, y + dy * end);\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (boundsSelected) {\n\t\t\t\tvar coords = mx._transformCorners(this.getInternalBounds());\n\t\t\t\tctx.beginPath();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx[!i ? 'moveTo' : 'lineTo'](coords[i], coords[++i]);\n\t\t\t\t}\n\t\t\t\tctx.closePath();\n\t\t\t\tctx.stroke();\n\t\t\t\tfor (var i = 0; i < 8; i++) {\n\t\t\t\t\tctx.fillRect(coords[i] - half, coords[++i] - half,\n\t\t\t\t\t\t\tsize, size);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn false;\n\t}\n}, Base.each(['down', 'drag', 'up', 'move'], function(key) {\n\tthis['removeOn' + Base.capitalize(key)] = function() {\n\t\tvar hash = {};\n\t\thash[key] = true;\n\t\treturn this.removeOn(hash);\n\t};\n}, {\n\n\tremoveOn: function(obj) {\n\t\tfor (var name in obj) {\n\t\t\tif (obj[name]) {\n\t\t\t\tvar key = 'mouse' + name,\n\t\t\t\t\tproject = this._project,\n\t\t\t\t\tsets = project._removeSets = project._removeSets || {};\n\t\t\t\tsets[key] = sets[key] || {};\n\t\t\t\tsets[key][this._id] = this;\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t}\n}), {\n\ttween: function(from, to, options) {\n\t\tif (!options) {\n\t\t\toptions = to;\n\t\t\tto = from;\n\t\t\tfrom = null;\n\t\t\tif (!options) {\n\t\t\t\toptions = to;\n\t\t\t\tto = null;\n\t\t\t}\n\t\t}\n\t\tvar easing = options && options.easing,\n\t\t\tstart = options && options.start,\n\t\t\tduration = options != null && (\n\t\t\t\ttypeof options === 'number' ? options : options.duration\n\t\t\t),\n\t\t\ttween = new Tween(this, from, to, duration, easing, start);\n\t\tfunction onFrame(event) {\n\t\t\ttween._handleFrame(event.time * 1000);\n\t\t\tif (!tween.running) {\n\t\t\t\tthis.off('frame', onFrame);\n\t\t\t}\n\t\t}\n\t\tif (duration) {\n\t\t\tthis.on('frame', onFrame);\n\t\t}\n\t\treturn tween;\n\t},\n\n\ttweenTo: function(to, options) {\n\t\treturn this.tween(null, to, options);\n\t},\n\n\ttweenFrom: function(from, options) {\n\t\treturn this.tween(from, null, options);\n\t}\n});\n\nvar Group = Item.extend({\n\t_class: 'Group',\n\t_selectBounds: false,\n\t_selectChildren: true,\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\n\tinitialize: function Group(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg))\n\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 2050) {\n\t\t\tthis._clipItem = undefined;\n\t\t}\n\t},\n\n\t_getClipItem: function() {\n\t\tvar clipItem = this._clipItem;\n\t\tif (clipItem === undefined) {\n\t\t\tclipItem = null;\n\t\t\tvar children = this._children;\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tif (children[i]._clipMask) {\n\t\t\t\t\tclipItem = children[i];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._clipItem = clipItem;\n\t\t}\n\t\treturn clipItem;\n\t},\n\n\tisClipped: function() {\n\t\treturn !!this._getClipItem();\n\t},\n\n\tsetClipped: function(clipped) {\n\t\tvar child = this.getFirstChild();\n\t\tif (child)\n\t\t\tchild.setClipMask(clipped);\n\t},\n\n\t_getBounds: function _getBounds(matrix, options) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn clipItem\n\t\t\t? clipItem._getCachedBounds(clipItem._matrix.prepended(matrix),\n\t\t\t\tBase.set({}, options, { stroke: false }))\n\t\t\t: _getBounds.base.call(this, matrix, options);\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\tvar clipItem = this._getClipItem();\n\t\treturn (!clipItem || clipItem.contains(point))\n\t\t\t\t&& _hitTestChildren.base.call(this, point, options, viewMatrix,\n\t\t\t\t\tclipItem);\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tvar clip = param.clip,\n\t\t\tclipItem = !clip && this._getClipItem();\n\t\tparam = param.extend({ clipItem: clipItem, clip: false });\n\t\tif (clip) {\n\t\t\tctx.beginPath();\n\t\t\tparam.dontStart = param.dontFinish = true;\n\t\t} else if (clipItem) {\n\t\t\tclipItem.draw(ctx, param.extend({ clip: true }));\n\t\t}\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar item = children[i];\n\t\t\tif (item !== clipItem)\n\t\t\t\titem.draw(ctx, param);\n\t\t}\n\t}\n});\n\nvar Layer = Group.extend({\n\t_class: 'Layer',\n\n\tinitialize: function Layer() {\n\t\tGroup.apply(this, arguments);\n\t},\n\n\t_getOwner: function() {\n\t\treturn this._parent || this._index != null && this._project;\n\t},\n\n\tisInserted: function isInserted() {\n\t\treturn this._parent ? isInserted.base.call(this) : this._index != null;\n\t},\n\n\tactivate: function() {\n\t\tthis._project._activeLayer = this;\n\t},\n\n\t_hitTestSelf: function() {\n\t}\n});\n\nvar Shape = Item.extend({\n\t_class: 'Shape',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_canScaleStroke: true,\n\t_serializeFields: {\n\t\ttype: null,\n\t\tsize: null,\n\t\tradius: null\n\t},\n\n\tinitialize: function Shape(props, point) {\n\t\tthis._initialize(props, point);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._type === item._type\n\t\t\t&& this._size.equals(item._size)\n\t\t\t&& Base.equals(this._radius, item._radius);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setType(source._type);\n\t\tthis.setSize(source._size);\n\t\tthis.setRadius(source._radius);\n\t},\n\n\tgetType: function() {\n\t\treturn this._type;\n\t},\n\n\tsetType: function(type) {\n\t\tthis._type = type;\n\t},\n\n\tgetShape: '#getType',\n\tsetShape: '#setType',\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setSize');\n\t},\n\n\tsetSize: function() {\n\t\tvar size = Size.read(arguments);\n\t\tif (!this._size) {\n\t\t\tthis._size = size.clone();\n\t\t} else if (!this._size.equals(size)) {\n\t\t\tvar type = this._type,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tif (type === 'rectangle') {\n\t\t\t\tthis._radius.set(Size.min(this._radius, size.divide(2).abs()));\n\t\t\t} else if (type === 'circle') {\n\t\t\t\twidth = height = (width + height) / 2;\n\t\t\t\tthis._radius = width / 2;\n\t\t\t} else if (type === 'ellipse') {\n\t\t\t\tthis._radius._set(width / 2, height / 2);\n\t\t\t}\n\t\t\tthis._size._set(width, height);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tgetRadius: function() {\n\t\tvar rad = this._radius;\n\t\treturn this._type === 'circle'\n\t\t\t\t? rad\n\t\t\t\t: new LinkedSize(rad.width, rad.height, this, 'setRadius');\n\t},\n\n\tsetRadius: function(radius) {\n\t\tvar type = this._type;\n\t\tif (type === 'circle') {\n\t\t\tif (radius === this._radius)\n\t\t\t\treturn;\n\t\t\tvar size = radius * 2;\n\t\t\tthis._radius = radius;\n\t\t\tthis._size._set(size, size);\n\t\t} else {\n\t\t\tradius = Size.read(arguments);\n\t\t\tif (!this._radius) {\n\t\t\t\tthis._radius = radius.clone();\n\t\t\t} else {\n\t\t\t\tif (this._radius.equals(radius))\n\t\t\t\t\treturn;\n\t\t\t\tthis._radius.set(radius);\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar size = Size.max(this._size, radius.multiply(2));\n\t\t\t\t\tthis._size.set(size);\n\t\t\t\t} else if (type === 'ellipse') {\n\t\t\t\t\tthis._size._set(radius.width * 2, radius.height * 2);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis._changed(9);\n\t},\n\n\tisEmpty: function() {\n\t\treturn false;\n\t},\n\n\ttoPath: function(insert) {\n\t\tvar path = new Path[Base.capitalize(this._type)]({\n\t\t\tcenter: new Point(),\n\t\t\tsize: this._size,\n\t\t\tradius: this._radius,\n\t\t\tinsert: false\n\t\t});\n\t\tpath.copyAttributes(this);\n\t\tif (paper.settings.applyMatrix)\n\t\t\tpath.setApplyMatrix(true);\n\t\tif (insert === undefined || insert)\n\t\t\tpath.insertAbove(this);\n\t\treturn path;\n\t},\n\n\ttoShape: '#clone',\n\n\t_asPathItem: function() {\n\t\treturn this.toPath(false);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar style = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\tuntransformed = !strokeMatrix;\n\t\tif (hasFill || hasStroke || dontPaint) {\n\t\t\tvar type = this._type,\n\t\t\t\tradius = this._radius,\n\t\t\t\tisCircle = type === 'circle';\n\t\t\tif (!param.dontStart)\n\t\t\t\tctx.beginPath();\n\t\t\tif (untransformed && isCircle) {\n\t\t\t\tctx.arc(0, 0, radius, 0, Math.PI * 2, true);\n\t\t\t} else {\n\t\t\t\tvar rx = isCircle ? radius : radius.width,\n\t\t\t\t\try = isCircle ? radius : radius.height,\n\t\t\t\t\tsize = this._size,\n\t\t\t\t\twidth = size.width,\n\t\t\t\t\theight = size.height;\n\t\t\t\tif (untransformed && type === 'rectangle' && rx === 0 && ry === 0) {\n\t\t\t\t\tctx.rect(-width / 2, -height / 2, width, height);\n\t\t\t\t} else {\n\t\t\t\t\tvar x = width / 2,\n\t\t\t\t\t\ty = height / 2,\n\t\t\t\t\t\tkappa = 1 - 0.5522847498307936,\n\t\t\t\t\t\tcx = rx * kappa,\n\t\t\t\t\t\tcy = ry * kappa,\n\t\t\t\t\t\tc = [\n\t\t\t\t\t\t\t-x, -y + ry,\n\t\t\t\t\t\t\t-x, -y + cy,\n\t\t\t\t\t\t\t-x + cx, -y,\n\t\t\t\t\t\t\t-x + rx, -y,\n\t\t\t\t\t\t\tx - rx, -y,\n\t\t\t\t\t\t\tx - cx, -y,\n\t\t\t\t\t\t\tx, -y + cy,\n\t\t\t\t\t\t\tx, -y + ry,\n\t\t\t\t\t\t\tx, y - ry,\n\t\t\t\t\t\t\tx, y - cy,\n\t\t\t\t\t\t\tx - cx, y,\n\t\t\t\t\t\t\tx - rx, y,\n\t\t\t\t\t\t\t-x + rx, y,\n\t\t\t\t\t\t\t-x + cx, y,\n\t\t\t\t\t\t\t-x, y - cy,\n\t\t\t\t\t\t\t-x, y - ry\n\t\t\t\t\t\t];\n\t\t\t\t\tif (strokeMatrix)\n\t\t\t\t\t\tstrokeMatrix.transform(c, c, 32);\n\t\t\t\t\tctx.moveTo(c[0], c[1]);\n\t\t\t\t\tctx.bezierCurveTo(c[2], c[3], c[4], c[5], c[6], c[7]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[8], c[9]);\n\t\t\t\t\tctx.bezierCurveTo(c[10], c[11], c[12], c[13], c[14], c[15]);\n\t\t\t\t\tif (y !== ry)\n\t\t\t\t\t\tctx.lineTo(c[16], c[17]);\n\t\t\t\t\tctx.bezierCurveTo(c[18], c[19], c[20], c[21], c[22], c[23]);\n\t\t\t\t\tif (x !== rx)\n\t\t\t\t\t\tctx.lineTo(c[24], c[25]);\n\t\t\t\t\tctx.bezierCurveTo(c[26], c[27], c[28], c[29], c[30], c[31]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tctx.closePath();\n\t\t}\n\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\tstyle = this._style,\n\t\t\tstrokeWidth = options.stroke && style.hasStroke()\n\t\t\t\t\t&& style.getStrokeWidth();\n\t\tif (matrix)\n\t\t\trect = matrix._transformBounds(rect);\n\t\treturn strokeWidth\n\t\t\t\t? rect.expand(Path._getStrokePadding(strokeWidth,\n\t\t\t\t\tthis._getStrokeMatrix(matrix, options)))\n\t\t\t\t: rect;\n\t}\n},\nnew function() {\n\tfunction getCornerCenter(that, point, expand) {\n\t\tvar radius = that._radius;\n\t\tif (!radius.isZero()) {\n\t\t\tvar halfSize = that._size.divide(2);\n\t\t\tfor (var q = 1; q <= 4; q++) {\n\t\t\t\tvar dir = new Point(q > 1 && q < 4 ? -1 : 1, q > 2 ? -1 : 1),\n\t\t\t\t\tcorner = dir.multiply(halfSize),\n\t\t\t\t\tcenter = corner.subtract(dir.multiply(radius)),\n\t\t\t\t\trect = new Rectangle(\n\t\t\t\t\t\t\texpand ? corner.add(dir.multiply(expand)) : corner,\n\t\t\t\t\t\t\tcenter);\n\t\t\t\tif (rect.contains(point))\n\t\t\t\t\treturn { point: center, quadrant: q };\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction isOnEllipseStroke(point, radius, padding, quadrant) {\n\t\tvar vector = point.divide(radius);\n\t\treturn (!quadrant || vector.isInQuadrant(quadrant)) &&\n\t\t\t\tvector.subtract(vector.normalize()).multiply(radius)\n\t\t\t\t\t.divide(padding).length <= 1;\n\t}\n\n\treturn {\n\t\t_contains: function _contains(point) {\n\t\t\tif (this._type === 'rectangle') {\n\t\t\t\tvar center = getCornerCenter(this, point);\n\t\t\t\treturn center\n\t\t\t\t\t\t? point.subtract(center.point).divide(this._radius)\n\t\t\t\t\t\t\t.getLength() <= 1\n\t\t\t\t\t\t: _contains.base.call(this, point);\n\t\t\t} else {\n\t\t\t\treturn point.divide(this.size).getLength() <= 0.5;\n\t\t\t}\n\t\t},\n\n\t\t_hitTestSelf: function _hitTestSelf(point, options, viewMatrix,\n\t\t\t\tstrokeMatrix) {\n\t\t\tvar hit = false,\n\t\t\t\tstyle = this._style,\n\t\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\t\thitFill = options.fill && style.hasFill();\n\t\t\tif (hitStroke || hitFill) {\n\t\t\t\tvar type = this._type,\n\t\t\t\t\tradius = this._radius,\n\t\t\t\t\tstrokeRadius = hitStroke ? style.getStrokeWidth() / 2 : 0,\n\t\t\t\t\tstrokePadding = options._tolerancePadding.add(\n\t\t\t\t\t\tPath._getStrokePadding(strokeRadius,\n\t\t\t\t\t\t\t!style.getStrokeScaling() && strokeMatrix));\n\t\t\t\tif (type === 'rectangle') {\n\t\t\t\t\tvar padding = strokePadding.multiply(2),\n\t\t\t\t\t\tcenter = getCornerCenter(this, point, padding);\n\t\t\t\t\tif (center) {\n\t\t\t\t\t\thit = isOnEllipseStroke(point.subtract(center.point),\n\t\t\t\t\t\t\t\tradius, strokePadding, center.quadrant);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar rect = new Rectangle(this._size).setCenter(0, 0),\n\t\t\t\t\t\t\touter = rect.expand(padding),\n\t\t\t\t\t\t\tinner = rect.expand(padding.negate());\n\t\t\t\t\t\thit = outer._containsPoint(point)\n\t\t\t\t\t\t\t\t&& !inner._containsPoint(point);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\thit = isOnEllipseStroke(point, radius, strokePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn hit ? new HitResult(hitStroke ? 'stroke' : 'fill', this)\n\t\t\t\t\t: _hitTestSelf.base.apply(this, arguments);\n\t\t}\n\t};\n}, {\n\nstatics: new function() {\n\tfunction createShape(type, point, size, radius, args) {\n\t\tvar item = Base.create(Shape.prototype);\n\t\titem._type = type;\n\t\titem._size = size;\n\t\titem._radius = radius;\n\t\titem._initialize(Base.getNamed(args), point);\n\t\treturn item;\n\t}\n\n\treturn {\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createShape('circle', center, new Size(radius * 2), radius,\n\t\t\t\t\targs);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.min(Size.readNamed(args, 'radius'),\n\t\t\t\t\t\trect.getSize(true).divide(2));\n\t\t\treturn createShape('rectangle', rect.getCenter(true),\n\t\t\t\t\trect.getSize(true), radius, args);\n\t\t},\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args),\n\t\t\t\tradius = ellipse.radius;\n\t\t\treturn createShape('ellipse', ellipse.center, radius.multiply(2),\n\t\t\t\t\tradius, args);\n\t\t},\n\n\t\t_readEllipse: function(args) {\n\t\t\tvar center,\n\t\t\t\tradius;\n\t\t\tif (Base.hasNamed(args, 'radius')) {\n\t\t\t\tcenter = Point.readNamed(args, 'center');\n\t\t\t\tradius = Size.readNamed(args, 'radius');\n\t\t\t} else {\n\t\t\t\tvar rect = Rectangle.readNamed(args, 'rectangle');\n\t\t\t\tcenter = rect.getCenter(true);\n\t\t\t\tradius = rect.getSize(true).divide(2);\n\t\t\t}\n\t\t\treturn { center: center, radius: radius };\n\t\t}\n\t};\n}});\n\nvar Raster = Item.extend({\n\t_class: 'Raster',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: false, handle: false },\n\t_serializeFields: {\n\t\tcrossOrigin: null,\n\t\tsource: null\n\t},\n\t_prioritize: ['crossOrigin'],\n\t_smoothing: 'low',\n\tbeans: true,\n\n\tinitialize: function Raster(source, position) {\n\t\tif (!this._initialize(source,\n\t\t\t\tposition !== undefined && Point.read(arguments))) {\n\t\t\tvar image,\n\t\t\t\ttype = typeof source,\n\t\t\t\tobject = type === 'string'\n\t\t\t\t\t? document.getElementById(source)\n\t\t\t\t\t: type === 'object'\n\t\t\t\t\t\t? source\n\t\t\t\t\t\t: null;\n\t\t\tif (object && object !== Item.NO_INSERT) {\n\t\t\t\tif (object.getContext || object.naturalHeight != null) {\n\t\t\t\t\timage = object;\n\t\t\t\t} else if (object) {\n\t\t\t\t\tvar size = Size.read(arguments);\n\t\t\t\t\tif (!size.isZero()) {\n\t\t\t\t\t\timage = CanvasProvider.getCanvas(size);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (image) {\n\t\t\t\tthis.setImage(image);\n\t\t\t} else {\n\t\t\t\tthis.setSource(source);\n\t\t\t}\n\t\t}\n\t\tif (!this._size) {\n\t\t\tthis._size = new Size();\n\t\t\tthis._loaded = false;\n\t\t}\n\t},\n\n\t_equals: function(item) {\n\t\treturn this.getSource() === item.getSource();\n\t},\n\n\tcopyContent: function(source) {\n\t\tvar image = source._image,\n\t\t\tcanvas = source._canvas;\n\t\tif (image) {\n\t\t\tthis._setImage(image);\n\t\t} else if (canvas) {\n\t\t\tvar copyCanvas = CanvasProvider.getCanvas(source._size);\n\t\t\tcopyCanvas.getContext('2d').drawImage(canvas, 0, 0);\n\t\t\tthis._setImage(copyCanvas);\n\t\t}\n\t\tthis._crossOrigin = source._crossOrigin;\n\t},\n\n\tgetSize: function() {\n\t\tvar size = this._size;\n\t\treturn new LinkedSize(size ? size.width : 0, size ? size.height : 0,\n\t\t\t\tthis, 'setSize');\n\t},\n\n\tsetSize: function(_size, _clear) {\n\t\tvar size = Size.read(arguments);\n\t\tif (!size.equals(this._size)) {\n\t\t\tif (size.width > 0 && size.height > 0) {\n\t\t\t\tvar element = !_clear && this.getElement();\n\t\t\t\tthis._setImage(CanvasProvider.getCanvas(size));\n\t\t\t\tif (element) {\n\t\t\t\t\tthis.getContext(true).drawImage(element, 0, 0,\n\t\t\t\t\t\t\tsize.width, size.height);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this._canvas)\n\t\t\t\t\tCanvasProvider.release(this._canvas);\n\t\t\t\tthis._size = size.clone();\n\t\t\t}\n\t\t} else if (_clear) {\n\t\t\tthis.clear();\n\t\t}\n\t},\n\n\tgetWidth: function() {\n\t\treturn this._size ? this._size.width : 0;\n\t},\n\n\tsetWidth: function(width) {\n\t\tthis.setSize(width, this.getHeight());\n\t},\n\n\tgetHeight: function() {\n\t\treturn this._size ? this._size.height : 0;\n\t},\n\n\tsetHeight: function(height) {\n\t\tthis.setSize(this.getWidth(), height);\n\t},\n\n\tgetLoaded: function() {\n\t\treturn this._loaded;\n\t},\n\n\tisEmpty: function() {\n\t\tvar size = this._size;\n\t\treturn !size || size.width === 0 && size.height === 0;\n\t},\n\n\tgetResolution: function() {\n\t\tvar matrix = this._matrix,\n\t\t\torig = new Point(0, 0).transform(matrix),\n\t\t\tu = new Point(1, 0).transform(matrix).subtract(orig),\n\t\t\tv = new Point(0, 1).transform(matrix).subtract(orig);\n\t\treturn new Size(\n\t\t\t72 / u.getLength(),\n\t\t\t72 / v.getLength()\n\t\t);\n\t},\n\n\tgetPpi: '#getResolution',\n\n\tgetImage: function() {\n\t\treturn this._image;\n\t},\n\n\tsetImage: function(image) {\n\t\tvar that = this;\n\n\t\tfunction emit(event) {\n\t\t\tvar view = that.getView(),\n\t\t\t\ttype = event && event.type || 'load';\n\t\t\tif (view && that.responds(type)) {\n\t\t\t\tpaper = view._scope;\n\t\t\t\tthat.emit(type, new Event(event));\n\t\t\t}\n\t\t}\n\n\t\tthis._setImage(image);\n\t\tif (this._loaded) {\n\t\t\tsetTimeout(emit, 0);\n\t\t} else if (image) {\n\t\t\tDomEvent.add(image, {\n\t\t\t\tload: function(event) {\n\t\t\t\t\tthat._setImage(image);\n\t\t\t\t\temit(event);\n\t\t\t\t},\n\t\t\t\terror: emit\n\t\t\t});\n\t\t}\n\t},\n\n\t_setImage: function(image) {\n\t\tif (this._canvas)\n\t\t\tCanvasProvider.release(this._canvas);\n\t\tif (image && image.getContext) {\n\t\t\tthis._image = null;\n\t\t\tthis._canvas = image;\n\t\t\tthis._loaded = true;\n\t\t} else {\n\t\t\tthis._image = image;\n\t\t\tthis._canvas = null;\n\t\t\tthis._loaded = !!(image && image.src && image.complete);\n\t\t}\n\t\tthis._size = new Size(\n\t\t\t\timage ? image.naturalWidth || image.width : 0,\n\t\t\t\timage ? image.naturalHeight || image.height : 0);\n\t\tthis._context = null;\n\t\tthis._changed(1033);\n\t},\n\n\tgetCanvas: function() {\n\t\tif (!this._canvas) {\n\t\t\tvar ctx = CanvasProvider.getContext(this._size);\n\t\t\ttry {\n\t\t\t\tif (this._image)\n\t\t\t\t\tctx.drawImage(this._image, 0, 0);\n\t\t\t\tthis._canvas = ctx.canvas;\n\t\t\t} catch (e) {\n\t\t\t\tCanvasProvider.release(ctx);\n\t\t\t}\n\t\t}\n\t\treturn this._canvas;\n\t},\n\n\tsetCanvas: '#setImage',\n\n\tgetContext: function(_change) {\n\t\tif (!this._context)\n\t\t\tthis._context = this.getCanvas().getContext('2d');\n\t\tif (_change) {\n\t\t\tthis._image = null;\n\t\t\tthis._changed(1025);\n\t\t}\n\t\treturn this._context;\n\t},\n\n\tsetContext: function(context) {\n\t\tthis._context = context;\n\t},\n\n\tgetSource: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.src || this.toDataURL();\n\t},\n\n\tsetSource: function(src) {\n\t\tvar image = new self.Image(),\n\t\t\tcrossOrigin = this._crossOrigin;\n\t\tif (crossOrigin)\n\t\t\timage.crossOrigin = crossOrigin;\n\t\tif (src)\n\t\t\timage.src = src;\n\t\tthis.setImage(image);\n\t},\n\n\tgetCrossOrigin: function() {\n\t\tvar image = this._image;\n\t\treturn image && image.crossOrigin || this._crossOrigin || '';\n\t},\n\n\tsetCrossOrigin: function(crossOrigin) {\n\t\tthis._crossOrigin = crossOrigin;\n\t\tvar image = this._image;\n\t\tif (image)\n\t\t\timage.crossOrigin = crossOrigin;\n\t},\n\n\tgetSmoothing: function() {\n\t\treturn this._smoothing;\n\t},\n\n\tsetSmoothing: function(smoothing) {\n\t\tthis._smoothing = typeof smoothing === 'string'\n\t\t\t? smoothing\n\t\t\t: smoothing ? 'low' : 'off';\n\t\tthis._changed(257);\n\t},\n\n\tgetElement: function() {\n\t\treturn this._canvas || this._loaded && this._image;\n\t}\n}, {\n\tbeans: false,\n\n\tgetSubCanvas: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\tctx = CanvasProvider.getContext(rect.getSize());\n\t\tctx.drawImage(this.getCanvas(), rect.x, rect.y,\n\t\t\t\trect.width, rect.height, 0, 0, rect.width, rect.height);\n\t\treturn ctx.canvas;\n\t},\n\n\tgetSubRaster: function() {\n\t\tvar rect = Rectangle.read(arguments),\n\t\t\traster = new Raster(Item.NO_INSERT);\n\t\traster._setImage(this.getSubCanvas(rect));\n\t\traster.translate(rect.getCenter().subtract(this.getSize().divide(2)));\n\t\traster._matrix.prepend(this._matrix);\n\t\traster.insertAbove(this);\n\t\treturn raster;\n\t},\n\n\ttoDataURL: function() {\n\t\tvar image = this._image,\n\t\t\tsrc = image && image.src;\n\t\tif (/^data:/.test(src))\n\t\t\treturn src;\n\t\tvar canvas = this.getCanvas();\n\t\treturn canvas ? canvas.toDataURL.apply(canvas, arguments) : null;\n\t},\n\n\tdrawImage: function(image ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).drawImage(image, point.x, point.y);\n\t},\n\n\tgetAverageColor: function(object) {\n\t\tvar bounds, path;\n\t\tif (!object) {\n\t\t\tbounds = this.getBounds();\n\t\t} else if (object instanceof PathItem) {\n\t\t\tpath = object;\n\t\t\tbounds = object.getBounds();\n\t\t} else if (typeof object === 'object') {\n\t\t\tif ('width' in object) {\n\t\t\t\tbounds = new Rectangle(object);\n\t\t\t} else if ('x' in object) {\n\t\t\t\tbounds = new Rectangle(object.x - 0.5, object.y - 0.5, 1, 1);\n\t\t\t}\n\t\t}\n\t\tif (!bounds)\n\t\t\treturn null;\n\t\tvar sampleSize = 32,\n\t\t\twidth = Math.min(bounds.width, sampleSize),\n\t\t\theight = Math.min(bounds.height, sampleSize);\n\t\tvar ctx = Raster._sampleContext;\n\t\tif (!ctx) {\n\t\t\tctx = Raster._sampleContext = CanvasProvider.getContext(\n\t\t\t\t\tnew Size(sampleSize));\n\t\t} else {\n\t\t\tctx.clearRect(0, 0, sampleSize + 1, sampleSize + 1);\n\t\t}\n\t\tctx.save();\n\t\tvar matrix = new Matrix()\n\t\t\t\t.scale(width / bounds.width, height / bounds.height)\n\t\t\t\t.translate(-bounds.x, -bounds.y);\n\t\tmatrix.applyToContext(ctx);\n\t\tif (path)\n\t\t\tpath.draw(ctx, new Base({ clip: true, matrices: [matrix] }));\n\t\tthis._matrix.applyToContext(ctx);\n\t\tvar element = this.getElement(),\n\t\t\tsize = this._size;\n\t\tif (element)\n\t\t\tctx.drawImage(element, -size.width / 2, -size.height / 2);\n\t\tctx.restore();\n\t\tvar pixels = ctx.getImageData(0.5, 0.5, Math.ceil(width),\n\t\t\t\tMath.ceil(height)).data,\n\t\t\tchannels = [0, 0, 0],\n\t\t\ttotal = 0;\n\t\tfor (var i = 0, l = pixels.length; i < l; i += 4) {\n\t\t\tvar alpha = pixels[i + 3];\n\t\t\ttotal += alpha;\n\t\t\talpha /= 255;\n\t\t\tchannels[0] += pixels[i] * alpha;\n\t\t\tchannels[1] += pixels[i + 1] * alpha;\n\t\t\tchannels[2] += pixels[i + 2] * alpha;\n\t\t}\n\t\tfor (var i = 0; i < 3; i++)\n\t\t\tchannels[i] /= total;\n\t\treturn total ? Color.read(channels) : null;\n\t},\n\n\tgetPixel: function() {\n\t\tvar point = Point.read(arguments);\n\t\tvar data = this.getContext().getImageData(point.x, point.y, 1, 1).data;\n\t\treturn new Color('rgb', [data[0] / 255, data[1] / 255, data[2] / 255],\n\t\t\t\tdata[3] / 255);\n\t},\n\n\tsetPixel: function() {\n\t\tvar args = arguments,\n\t\t\tpoint = Point.read(args),\n\t\t\tcolor = Color.read(args),\n\t\t\tcomponents = color._convert('rgb'),\n\t\t\talpha = color._alpha,\n\t\t\tctx = this.getContext(true),\n\t\t\timageData = ctx.createImageData(1, 1),\n\t\t\tdata = imageData.data;\n\t\tdata[0] = components[0] * 255;\n\t\tdata[1] = components[1] * 255;\n\t\tdata[2] = components[2] * 255;\n\t\tdata[3] = alpha != null ? alpha * 255 : 255;\n\t\tctx.putImageData(imageData, point.x, point.y);\n\t},\n\n\tclear: function() {\n\t\tvar size = this._size;\n\t\tthis.getContext(true).clearRect(0, 0, size.width + 1, size.height + 1);\n\t},\n\n\tcreateImageData: function() {\n\t\tvar size = Size.read(arguments);\n\t\treturn this.getContext().createImageData(size.width, size.height);\n\t},\n\n\tgetImageData: function() {\n\t\tvar rect = Rectangle.read(arguments);\n\t\tif (rect.isEmpty())\n\t\t\trect = new Rectangle(this._size);\n\t\treturn this.getContext().getImageData(rect.x, rect.y,\n\t\t\t\trect.width, rect.height);\n\t},\n\n\tputImageData: function(data ) {\n\t\tvar point = Point.read(arguments, 1);\n\t\tthis.getContext(true).putImageData(data, point.x, point.y);\n\t},\n\n\tsetImageData: function(data) {\n\t\tthis.setSize(data);\n\t\tthis.getContext(true).putImageData(data, 0, 0);\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar rect = new Rectangle(this._size).setCenter(0, 0);\n\t\treturn matrix ? matrix._transformBounds(rect) : rect;\n\t},\n\n\t_hitTestSelf: function(point) {\n\t\tif (this._contains(point)) {\n\t\t\tvar that = this;\n\t\t\treturn new HitResult('pixel', that, {\n\t\t\t\toffset: point.add(that._size.divide(2)).round(),\n\t\t\t\tcolor: {\n\t\t\t\t\tget: function() {\n\t\t\t\t\t\treturn that.getPixel(this.offset);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tvar element = this.getElement();\n\t\tif (element && element.width > 0 && element.height > 0) {\n\t\t\tctx.globalAlpha = Numerical.clamp(this._opacity, 0, 1);\n\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\n\t\t\tvar smoothing = this._smoothing,\n\t\t\t\tdisabled = smoothing === 'off';\n\t\t\tDomElement.setPrefixed(\n\t\t\t\tctx,\n\t\t\t\tdisabled ? 'imageSmoothingEnabled' : 'imageSmoothingQuality',\n\t\t\t\tdisabled ? false : smoothing\n\t\t\t);\n\n\t\t\tctx.drawImage(element,\n\t\t\t\t\t-this._size.width / 2, -this._size.height / 2);\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn true;\n\t}\n});\n\nvar SymbolItem = Item.extend({\n\t_class: 'SymbolItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_boundsOptions: { stroke: true },\n\t_serializeFields: {\n\t\tsymbol: null\n\t},\n\n\tinitialize: function SymbolItem(arg0, arg1) {\n\t\tif (!this._initialize(arg0,\n\t\t\t\targ1 !== undefined && Point.read(arguments, 1)))\n\t\t\tthis.setDefinition(arg0 instanceof SymbolDefinition ?\n\t\t\t\t\targ0 : new SymbolDefinition(arg0));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._definition === item._definition;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setDefinition(source._definition);\n\t},\n\n\tgetDefinition: function() {\n\t\treturn this._definition;\n\t},\n\n\tsetDefinition: function(definition) {\n\t\tthis._definition = definition;\n\t\tthis._changed(9);\n\t},\n\n\tgetSymbol: '#getDefinition',\n\tsetSymbol: '#setDefinition',\n\n\tisEmpty: function() {\n\t\treturn this._definition._item.isEmpty();\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar item = this._definition._item;\n\t\treturn item._getCachedBounds(item._matrix.prepended(matrix), options);\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix) {\n\t\tvar opts = options.extend({ all: false });\n\t\tvar res = this._definition._item._hitTest(point, opts, viewMatrix);\n\t\tif (res)\n\t\t\tres.item = this;\n\t\treturn res;\n\t},\n\n\t_draw: function(ctx, param) {\n\t\tthis._definition._item.draw(ctx, param);\n\t}\n\n});\n\nvar SymbolDefinition = Base.extend({\n\t_class: 'SymbolDefinition',\n\n\tinitialize: function SymbolDefinition(item, dontCenter) {\n\t\tthis._id = UID.get();\n\t\tthis.project = paper.project;\n\t\tif (item)\n\t\t\tthis.setItem(item, dontCenter);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._class, this._item],\n\t\t\t\t\toptions, false, dictionary);\n\t\t});\n\t},\n\n\t_changed: function(flags) {\n\t\tif (flags & 8)\n\t\t\tItem._clearBoundsCache(this);\n\t\tif (flags & 1)\n\t\t\tthis.project._changed(flags);\n\t},\n\n\tgetItem: function() {\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item, _dontCenter) {\n\t\tif (item._symbol)\n\t\t\titem = item.clone();\n\t\tif (this._item)\n\t\t\tthis._item._symbol = null;\n\t\tthis._item = item;\n\t\titem.remove();\n\t\titem.setSelected(false);\n\t\tif (!_dontCenter)\n\t\t\titem.setPosition(new Point());\n\t\titem._symbol = this;\n\t\tthis._changed(9);\n\t},\n\n\tgetDefinition: '#getItem',\n\tsetDefinition: '#setItem',\n\n\tplace: function(position) {\n\t\treturn new SymbolItem(this, position);\n\t},\n\n\tclone: function() {\n\t\treturn new SymbolDefinition(this._item.clone(false));\n\t},\n\n\tequals: function(symbol) {\n\t\treturn symbol === this\n\t\t\t\t|| symbol && this._item.equals(symbol._item)\n\t\t\t\t|| false;\n\t}\n});\n\nvar HitResult = Base.extend({\n\t_class: 'HitResult',\n\n\tinitialize: function HitResult(type, item, values) {\n\t\tthis.type = type;\n\t\tthis.item = item;\n\t\tif (values)\n\t\t\tthis.inject(values);\n\t},\n\n\tstatics: {\n\t\tgetOptions: function(args) {\n\t\t\tvar options = args && Base.read(args);\n\t\t\treturn new Base({\n\t\t\t\ttype: null,\n\t\t\t\ttolerance: paper.settings.hitTolerance,\n\t\t\t\tfill: !options,\n\t\t\t\tstroke: !options,\n\t\t\t\tsegments: !options,\n\t\t\t\thandles: false,\n\t\t\t\tends: false,\n\t\t\t\tposition: false,\n\t\t\t\tcenter: false,\n\t\t\t\tbounds: false,\n\t\t\t\tguides: false,\n\t\t\t\tselected: false\n\t\t\t}, options);\n\t\t}\n\t}\n});\n\nvar Segment = Base.extend({\n\t_class: 'Segment',\n\tbeans: true,\n\t_selection: 0,\n\n\tinitialize: function Segment(arg0, arg1, arg2, arg3, arg4, arg5) {\n\t\tvar count = arguments.length,\n\t\t\tpoint, handleIn, handleOut, selection;\n\t\tif (count > 0) {\n\t\t\tif (arg0 == null || typeof arg0 === 'object') {\n\t\t\t\tif (count === 1 && arg0 && 'point' in arg0) {\n\t\t\t\t\tpoint = arg0.point;\n\t\t\t\t\thandleIn = arg0.handleIn;\n\t\t\t\t\thandleOut = arg0.handleOut;\n\t\t\t\t\tselection = arg0.selection;\n\t\t\t\t} else {\n\t\t\t\t\tpoint = arg0;\n\t\t\t\t\thandleIn = arg1;\n\t\t\t\t\thandleOut = arg2;\n\t\t\t\t\tselection = arg3;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tpoint = [ arg0, arg1 ];\n\t\t\t\thandleIn = arg2 !== undefined ? [ arg2, arg3 ] : null;\n\t\t\t\thandleOut = arg4 !== undefined ? [ arg4, arg5 ] : null;\n\t\t\t}\n\t\t}\n\t\tnew SegmentPoint(point, this, '_point');\n\t\tnew SegmentPoint(handleIn, this, '_handleIn');\n\t\tnew SegmentPoint(handleOut, this, '_handleOut');\n\t\tif (selection)\n\t\t\tthis.setSelection(selection);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar point = this._point,\n\t\t\tselection = this._selection,\n\t\t\tobj = selection || this.hasHandles()\n\t\t\t\t\t? [point, this._handleIn, this._handleOut]\n\t\t\t\t\t: point;\n\t\tif (selection)\n\t\t\tobj.push(selection);\n\t\treturn Base.serialize(obj, options, true, dictionary);\n\t},\n\n\t_changed: function(point) {\n\t\tvar path = this._path;\n\t\tif (!path)\n\t\t\treturn;\n\t\tvar curves = path._curves,\n\t\t\tindex = this._index,\n\t\t\tcurve;\n\t\tif (curves) {\n\t\t\tif ((!point || point === this._point || point === this._handleIn)\n\t\t\t\t\t&& (curve = index > 0 ? curves[index - 1] : path._closed\n\t\t\t\t\t\t? curves[curves.length - 1] : null))\n\t\t\t\tcurve._changed();\n\t\t\tif ((!point || point === this._point || point === this._handleOut)\n\t\t\t\t\t&& (curve = curves[index]))\n\t\t\t\tcurve._changed();\n\t\t}\n\t\tpath._changed(41);\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tsetPoint: function() {\n\t\tthis._point.set(Point.read(arguments));\n\t},\n\n\tgetHandleIn: function() {\n\t\treturn this._handleIn;\n\t},\n\n\tsetHandleIn: function() {\n\t\tthis._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetHandleOut: function() {\n\t\treturn this._handleOut;\n\t},\n\n\tsetHandleOut: function() {\n\t\tthis._handleOut.set(Point.read(arguments));\n\t},\n\n\thasHandles: function() {\n\t\treturn !this._handleIn.isZero() || !this._handleOut.isZero();\n\t},\n\n\tisSmooth: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut;\n\t\treturn !handleIn.isZero() && !handleOut.isZero()\n\t\t\t\t&& handleIn.isCollinear(handleOut);\n\t},\n\n\tclearHandles: function() {\n\t\tthis._handleIn._set(0, 0);\n\t\tthis._handleOut._set(0, 0);\n\t},\n\n\tgetSelection: function() {\n\t\treturn this._selection;\n\t},\n\n\tsetSelection: function(selection) {\n\t\tvar oldSelection = this._selection,\n\t\t\tpath = this._path;\n\t\tthis._selection = selection = selection || 0;\n\t\tif (path && selection !== oldSelection) {\n\t\t\tpath._updateSelection(this, oldSelection, selection);\n\t\t\tpath._changed(257);\n\t\t}\n\t},\n\n\t_changeSelection: function(flag, selected) {\n\t\tvar selection = this._selection;\n\t\tthis.setSelection(selected ? selection | flag : selection & ~flag);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._selection & 7);\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._changeSelection(7, selected);\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._index !== undefined ? this._index : null;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path || null;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tindex = this._index;\n\t\tif (path) {\n\t\t\tif (index > 0 && !path._closed\n\t\t\t\t\t&& index === path._segments.length - 1)\n\t\t\t\tindex--;\n\t\t\treturn path.getCurves()[index] || null;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetLocation: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve\n\t\t\t\t? new CurveLocation(curve, this === curve._segment1 ? 0 : 1)\n\t\t\t\t: null;\n\t},\n\n\tgetNext: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index + 1]\n\t\t\t\t|| this._path._closed && segments[0]) || null;\n\t},\n\n\tsmooth: function(options, _first, _last) {\n\t\tvar opts = options || {},\n\t\t\ttype = opts.type,\n\t\t\tfactor = opts.factor,\n\t\t\tprev = this.getPrevious(),\n\t\t\tnext = this.getNext(),\n\t\t\tp0 = (prev || this)._point,\n\t\t\tp1 = this._point,\n\t\t\tp2 = (next || this)._point,\n\t\t\td1 = p0.getDistance(p1),\n\t\t\td2 = p1.getDistance(p2);\n\t\tif (!type || type === 'catmull-rom') {\n\t\t\tvar a = factor === undefined ? 0.5 : factor,\n\t\t\t\td1_a = Math.pow(d1, a),\n\t\t\t\td1_2a = d1_a * d1_a,\n\t\t\t\td2_a = Math.pow(d2, a),\n\t\t\t\td2_2a = d2_a * d2_a;\n\t\t\tif (!_first && prev) {\n\t\t\t\tvar A = 2 * d2_2a + 3 * d2_a * d1_a + d1_2a,\n\t\t\t\t\tN = 3 * d2_a * (d2_a + d1_a);\n\t\t\t\tthis.setHandleIn(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d2_2a * p0._x + A * p1._x - d1_2a * p2._x) / N - p1._x,\n\t\t\t\t\t\t(d2_2a * p0._y + A * p1._y - d1_2a * p2._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t\tif (!_last && next) {\n\t\t\t\tvar A = 2 * d1_2a + 3 * d1_a * d2_a + d2_2a,\n\t\t\t\t\tN = 3 * d1_a * (d1_a + d2_a);\n\t\t\t\tthis.setHandleOut(N !== 0\n\t\t\t\t\t? new Point(\n\t\t\t\t\t\t(d1_2a * p2._x + A * p1._x - d2_2a * p0._x) / N - p1._x,\n\t\t\t\t\t\t(d1_2a * p2._y + A * p1._y - d2_2a * p0._y) / N - p1._y)\n\t\t\t\t\t: new Point());\n\t\t\t}\n\t\t} else if (type === 'geometric') {\n\t\t\tif (prev && next) {\n\t\t\t\tvar vector = p0.subtract(p2),\n\t\t\t\t\tt = factor === undefined ? 0.4 : factor,\n\t\t\t\t\tk = t * d1 / (d1 + d2);\n\t\t\t\tif (!_first)\n\t\t\t\t\tthis.setHandleIn(vector.multiply(k));\n\t\t\t\tif (!_last)\n\t\t\t\t\tthis.setHandleOut(vector.multiply(k - t));\n\t\t\t}\n\t\t} else {\n\t\t\tthrow new Error('Smoothing method \\'' + type + '\\' not supported.');\n\t\t}\n\t},\n\n\tgetPrevious: function() {\n\t\tvar segments = this._path && this._path._segments;\n\t\treturn segments && (segments[this._index - 1]\n\t\t\t\t|| this._path._closed && segments[segments.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._index === path._segments.length - 1 || false;\n\t},\n\n\treverse: function() {\n\t\tvar handleIn = this._handleIn,\n\t\t\thandleOut = this._handleOut,\n\t\t\ttmp = handleIn.clone();\n\t\thandleIn.set(handleOut);\n\t\thandleOut.set(tmp);\n\t},\n\n\treversed: function() {\n\t\treturn new Segment(this._point, this._handleOut, this._handleIn);\n\t},\n\n\tremove: function() {\n\t\treturn this._path ? !!this._path.removeSegment(this._index) : false;\n\t},\n\n\tclone: function() {\n\t\treturn new Segment(this._point, this._handleIn, this._handleOut);\n\t},\n\n\tequals: function(segment) {\n\t\treturn segment === this || segment && this._class === segment._class\n\t\t\t\t&& this._point.equals(segment._point)\n\t\t\t\t&& this._handleIn.equals(segment._handleIn)\n\t\t\t\t&& this._handleOut.equals(segment._handleOut)\n\t\t\t\t|| false;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point: ' + this._point ];\n\t\tif (!this._handleIn.isZero())\n\t\t\tparts.push('handleIn: ' + this._handleIn);\n\t\tif (!this._handleOut.isZero())\n\t\t\tparts.push('handleOut: ' + this._handleOut);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._transformCoordinates(matrix, new Array(6), true);\n\t\tthis._changed();\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar u = 1 - factor,\n\t\t\tv = factor,\n\t\t\tpoint1 = from._point,\n\t\t\tpoint2 = to._point,\n\t\t\thandleIn1 = from._handleIn,\n\t\t\thandleIn2 = to._handleIn,\n\t\t\thandleOut2 = to._handleOut,\n\t\t\thandleOut1 = from._handleOut;\n\t\tthis._point._set(\n\t\t\t\tu * point1._x + v * point2._x,\n\t\t\t\tu * point1._y + v * point2._y, true);\n\t\tthis._handleIn._set(\n\t\t\t\tu * handleIn1._x + v * handleIn2._x,\n\t\t\t\tu * handleIn1._y + v * handleIn2._y, true);\n\t\tthis._handleOut._set(\n\t\t\t\tu * handleOut1._x + v * handleOut2._x,\n\t\t\t\tu * handleOut1._y + v * handleOut2._y, true);\n\t\tthis._changed();\n\t},\n\n\t_transformCoordinates: function(matrix, coords, change) {\n\t\tvar point = this._point,\n\t\t\thandleIn = !change || !this._handleIn.isZero()\n\t\t\t\t\t? this._handleIn : null,\n\t\t\thandleOut = !change || !this._handleOut.isZero()\n\t\t\t\t\t? this._handleOut : null,\n\t\t\tx = point._x,\n\t\t\ty = point._y,\n\t\t\ti = 2;\n\t\tcoords[0] = x;\n\t\tcoords[1] = y;\n\t\tif (handleIn) {\n\t\t\tcoords[i++] = handleIn._x + x;\n\t\t\tcoords[i++] = handleIn._y + y;\n\t\t}\n\t\tif (handleOut) {\n\t\t\tcoords[i++] = handleOut._x + x;\n\t\t\tcoords[i++] = handleOut._y + y;\n\t\t}\n\t\tif (matrix) {\n\t\t\tmatrix._transformCoordinates(coords, coords, i / 2);\n\t\t\tx = coords[0];\n\t\t\ty = coords[1];\n\t\t\tif (change) {\n\t\t\t\tpoint._x = x;\n\t\t\t\tpoint._y = y;\n\t\t\t\ti = 2;\n\t\t\t\tif (handleIn) {\n\t\t\t\t\thandleIn._x = coords[i++] - x;\n\t\t\t\t\thandleIn._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t\tif (handleOut) {\n\t\t\t\t\thandleOut._x = coords[i++] - x;\n\t\t\t\t\thandleOut._y = coords[i++] - y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (!handleIn) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t\tif (!handleOut) {\n\t\t\t\t\tcoords[i++] = x;\n\t\t\t\t\tcoords[i++] = y;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn coords;\n\t}\n});\n\nvar SegmentPoint = Point.extend({\n\tinitialize: function SegmentPoint(point, owner, key) {\n\t\tvar x, y,\n\t\t\tselected;\n\t\tif (!point) {\n\t\t\tx = y = 0;\n\t\t} else if ((x = point[0]) !== undefined) {\n\t\t\ty = point[1];\n\t\t} else {\n\t\t\tvar pt = point;\n\t\t\tif ((x = pt.x) === undefined) {\n\t\t\t\tpt = Point.read(arguments);\n\t\t\t\tx = pt.x;\n\t\t\t}\n\t\t\ty = pt.y;\n\t\t\tselected = pt.selected;\n\t\t}\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner = owner;\n\t\towner[key] = this;\n\t\tif (selected)\n\t\t\tthis.setSelected(true);\n\t},\n\n\t_set: function(x, y) {\n\t\tthis._x = x;\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t\treturn this;\n\t},\n\n\tgetX: function() {\n\t\treturn this._x;\n\t},\n\n\tsetX: function(x) {\n\t\tthis._x = x;\n\t\tthis._owner._changed(this);\n\t},\n\n\tgetY: function() {\n\t\treturn this._y;\n\t},\n\n\tsetY: function(y) {\n\t\tthis._y = y;\n\t\tthis._owner._changed(this);\n\t},\n\n\tisZero: function() {\n\t\tvar isZero = Numerical.isZero;\n\t\treturn isZero(this._x) && isZero(this._y);\n\t},\n\n\tisSelected: function() {\n\t\treturn !!(this._owner._selection & this._getSelection());\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis._owner._changeSelection(this._getSelection(), selected);\n\t},\n\n\t_getSelection: function() {\n\t\tvar owner = this._owner;\n\t\treturn this === owner._point ? 1\n\t\t\t: this === owner._handleIn ? 2\n\t\t\t: this === owner._handleOut ? 4\n\t\t\t: 0;\n\t}\n});\n\nvar Curve = Base.extend({\n\t_class: 'Curve',\n\tbeans: true,\n\n\tinitialize: function Curve(arg0, arg1, arg2, arg3, arg4, arg5, arg6, arg7) {\n\t\tvar count = arguments.length,\n\t\t\tseg1, seg2,\n\t\t\tpoint1, point2,\n\t\t\thandle1, handle2;\n\t\tif (count === 3) {\n\t\t\tthis._path = arg0;\n\t\t\tseg1 = arg1;\n\t\t\tseg2 = arg2;\n\t\t} else if (!count) {\n\t\t\tseg1 = new Segment();\n\t\t\tseg2 = new Segment();\n\t\t} else if (count === 1) {\n\t\t\tif ('segment1' in arg0) {\n\t\t\t\tseg1 = new Segment(arg0.segment1);\n\t\t\t\tseg2 = new Segment(arg0.segment2);\n\t\t\t} else if ('point1' in arg0) {\n\t\t\t\tpoint1 = arg0.point1;\n\t\t\t\thandle1 = arg0.handle1;\n\t\t\t\thandle2 = arg0.handle2;\n\t\t\t\tpoint2 = arg0.point2;\n\t\t\t} else if (Array.isArray(arg0)) {\n\t\t\t\tpoint1 = [arg0[0], arg0[1]];\n\t\t\t\tpoint2 = [arg0[6], arg0[7]];\n\t\t\t\thandle1 = [arg0[2] - arg0[0], arg0[3] - arg0[1]];\n\t\t\t\thandle2 = [arg0[4] - arg0[6], arg0[5] - arg0[7]];\n\t\t\t}\n\t\t} else if (count === 2) {\n\t\t\tseg1 = new Segment(arg0);\n\t\t\tseg2 = new Segment(arg1);\n\t\t} else if (count === 4) {\n\t\t\tpoint1 = arg0;\n\t\t\thandle1 = arg1;\n\t\t\thandle2 = arg2;\n\t\t\tpoint2 = arg3;\n\t\t} else if (count === 8) {\n\t\t\tpoint1 = [arg0, arg1];\n\t\t\tpoint2 = [arg6, arg7];\n\t\t\thandle1 = [arg2 - arg0, arg3 - arg1];\n\t\t\thandle2 = [arg4 - arg6, arg5 - arg7];\n\t\t}\n\t\tthis._segment1 = seg1 || new Segment(point1, null, handle1);\n\t\tthis._segment2 = seg2 || new Segment(point2, handle2, null);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn Base.serialize(this.hasHandles()\n\t\t\t\t? [this.getPoint1(), this.getHandle1(), this.getHandle2(),\n\t\t\t\t\tthis.getPoint2()]\n\t\t\t\t: [this.getPoint1(), this.getPoint2()],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tthis._length = this._bounds = undefined;\n\t},\n\n\tclone: function() {\n\t\treturn new Curve(this._segment1, this._segment2);\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [ 'point1: ' + this._segment1._point ];\n\t\tif (!this._segment1._handleOut.isZero())\n\t\t\tparts.push('handle1: ' + this._segment1._handleOut);\n\t\tif (!this._segment2._handleIn.isZero())\n\t\t\tparts.push('handle2: ' + this._segment2._handleIn);\n\t\tparts.push('point2: ' + this._segment2._point);\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tclassify: function() {\n\t\treturn Curve.classify(this.getValues());\n\t},\n\n\tremove: function() {\n\t\tvar removed = false;\n\t\tif (this._path) {\n\t\t\tvar segment2 = this._segment2,\n\t\t\t\thandleOut = segment2._handleOut;\n\t\t\tremoved = segment2.remove();\n\t\t\tif (removed)\n\t\t\t\tthis._segment1._handleOut.set(handleOut);\n\t\t}\n\t\treturn removed;\n\t},\n\n\tgetPoint1: function() {\n\t\treturn this._segment1._point;\n\t},\n\n\tsetPoint1: function() {\n\t\tthis._segment1._point.set(Point.read(arguments));\n\t},\n\n\tgetPoint2: function() {\n\t\treturn this._segment2._point;\n\t},\n\n\tsetPoint2: function() {\n\t\tthis._segment2._point.set(Point.read(arguments));\n\t},\n\n\tgetHandle1: function() {\n\t\treturn this._segment1._handleOut;\n\t},\n\n\tsetHandle1: function() {\n\t\tthis._segment1._handleOut.set(Point.read(arguments));\n\t},\n\n\tgetHandle2: function() {\n\t\treturn this._segment2._handleIn;\n\t},\n\n\tsetHandle2: function() {\n\t\tthis._segment2._handleIn.set(Point.read(arguments));\n\t},\n\n\tgetSegment1: function() {\n\t\treturn this._segment1;\n\t},\n\n\tgetSegment2: function() {\n\t\treturn this._segment2;\n\t},\n\n\tgetPath: function() {\n\t\treturn this._path;\n\t},\n\n\tgetIndex: function() {\n\t\treturn this._segment1._index;\n\t},\n\n\tgetNext: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index + 1]\n\t\t\t\t|| this._path._closed && curves[0]) || null;\n\t},\n\n\tgetPrevious: function() {\n\t\tvar curves = this._path && this._path._curves;\n\t\treturn curves && (curves[this._segment1._index - 1]\n\t\t\t\t|| this._path._closed && curves[curves.length - 1]) || null;\n\t},\n\n\tisFirst: function() {\n\t\treturn !this._segment1._index;\n\t},\n\n\tisLast: function() {\n\t\tvar path = this._path;\n\t\treturn path && this._segment1._index === path._curves.length - 1\n\t\t\t\t|| false;\n\t},\n\n\tisSelected: function() {\n\t\treturn this.getPoint1().isSelected()\n\t\t\t\t&& this.getHandle1().isSelected()\n\t\t\t\t&& this.getHandle2().isSelected()\n\t\t\t\t&& this.getPoint2().isSelected();\n\t},\n\n\tsetSelected: function(selected) {\n\t\tthis.getPoint1().setSelected(selected);\n\t\tthis.getHandle1().setSelected(selected);\n\t\tthis.getHandle2().setSelected(selected);\n\t\tthis.getPoint2().setSelected(selected);\n\t},\n\n\tgetValues: function(matrix) {\n\t\treturn Curve.getValues(this._segment1, this._segment2, matrix);\n\t},\n\n\tgetPoints: function() {\n\t\tvar coords = this.getValues(),\n\t\t\tpoints = [];\n\t\tfor (var i = 0; i < 8; i += 2)\n\t\t\tpoints.push(new Point(coords[i], coords[i + 1]));\n\t\treturn points;\n\t}\n}, {\n\tgetLength: function() {\n\t\tif (this._length == null)\n\t\t\tthis._length = Curve.getLength(this.getValues(), 0, 1);\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\treturn Curve.getArea(this.getValues());\n\t},\n\n\tgetLine: function() {\n\t\treturn new Line(this._segment1._point, this._segment2._point);\n\t},\n\n\tgetPart: function(from, to) {\n\t\treturn new Curve(Curve.getPart(this.getValues(), from, to));\n\t},\n\n\tgetPartLength: function(from, to) {\n\t\treturn Curve.getLength(this.getValues(), from, to);\n\t},\n\n\tdivideAt: function(location) {\n\t\treturn this.divideAtTime(location && location.curve === this\n\t\t\t\t? location.time : this.getTimeAt(location));\n\t},\n\n\tdivideAtTime: function(time, _setHandles) {\n\t\tvar tMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tres = null;\n\t\tif (time >= tMin && time <= tMax) {\n\t\t\tvar parts = Curve.subdivide(this.getValues(), time),\n\t\t\t\tleft = parts[0],\n\t\t\t\tright = parts[1],\n\t\t\t\tsetHandles = _setHandles || this.hasHandles(),\n\t\t\t\tseg1 = this._segment1,\n\t\t\t\tseg2 = this._segment2,\n\t\t\t\tpath = this._path;\n\t\t\tif (setHandles) {\n\t\t\t\tseg1._handleOut._set(left[2] - left[0], left[3] - left[1]);\n\t\t\t\tseg2._handleIn._set(right[4] - right[6],right[5] - right[7]);\n\t\t\t}\n\t\t\tvar x = left[6], y = left[7],\n\t\t\t\tsegment = new Segment(new Point(x, y),\n\t\t\t\t\t\tsetHandles && new Point(left[4] - x, left[5] - y),\n\t\t\t\t\t\tsetHandles && new Point(right[2] - x, right[3] - y));\n\t\t\tif (path) {\n\t\t\t\tpath.insert(seg1._index + 1, segment);\n\t\t\t\tres = this.getNext();\n\t\t\t} else {\n\t\t\t\tthis._segment2 = segment;\n\t\t\t\tthis._changed();\n\t\t\t\tres = new Curve(segment, seg2);\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar path = this._path;\n\t\treturn path ? path.splitAt(location) : null;\n\t},\n\n\tsplitAtTime: function(time) {\n\t\treturn this.splitAt(this.getLocationAtTime(time));\n\t},\n\n\tdivide: function(offset, isTime) {\n\t\treturn this.divideAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\tsplit: function(offset, isTime) {\n\t\treturn this.splitAtTime(offset === undefined ? 0.5 : isTime ? offset\n\t\t\t\t: this.getTimeAt(offset));\n\t},\n\n\treversed: function() {\n\t\treturn new Curve(this._segment2.reversed(), this._segment1.reversed());\n\t},\n\n\tclearHandles: function() {\n\t\tthis._segment1._handleOut._set(0, 0);\n\t\tthis._segment2._handleIn._set(0, 0);\n\t},\n\nstatics: {\n\tgetValues: function(segment1, segment2, matrix, straight) {\n\t\tvar p1 = segment1._point,\n\t\t\th1 = segment1._handleOut,\n\t\t\th2 = segment2._handleIn,\n\t\t\tp2 = segment2._point,\n\t\t\tx1 = p1.x, y1 = p1.y,\n\t\t\tx2 = p2.x, y2 = p2.y,\n\t\t\tvalues = straight\n\t\t\t\t? [ x1, y1, x1, y1, x2, y2, x2, y2 ]\n\t\t\t\t: [\n\t\t\t\t\tx1, y1,\n\t\t\t\t\tx1 + h1._x, y1 + h1._y,\n\t\t\t\t\tx2 + h2._x, y2 + h2._y,\n\t\t\t\t\tx2, y2\n\t\t\t\t];\n\t\tif (matrix)\n\t\t\tmatrix._transformCoordinates(values, values, 4);\n\t\treturn values;\n\t},\n\n\tsubdivide: function(v, t) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\tif (t === undefined)\n\t\t\tt = 0.5;\n\t\tvar u = 1 - t,\n\t\t\tx4 = u * x0 + t * x1, y4 = u * y0 + t * y1,\n\t\t\tx5 = u * x1 + t * x2, y5 = u * y1 + t * y2,\n\t\t\tx6 = u * x2 + t * x3, y6 = u * y2 + t * y3,\n\t\t\tx7 = u * x4 + t * x5, y7 = u * y4 + t * y5,\n\t\t\tx8 = u * x5 + t * x6, y8 = u * y5 + t * y6,\n\t\t\tx9 = u * x7 + t * x8, y9 = u * y7 + t * y8;\n\t\treturn [\n\t\t\t[x0, y0, x4, y4, x7, y7, x9, y9],\n\t\t\t[x9, y9, x8, y8, x6, y6, x3, y3]\n\t\t];\n\t},\n\n\tgetMonoCurves: function(v, dir) {\n\t\tvar curves = [],\n\t\t\tio = dir ? 0 : 1,\n\t\t\to0 = v[io + 0],\n\t\t\to1 = v[io + 2],\n\t\t\to2 = v[io + 4],\n\t\t\to3 = v[io + 6];\n\t\tif ((o0 >= o1) === (o1 >= o2) && (o1 >= o2) === (o2 >= o3)\n\t\t\t\t|| Curve.isStraight(v)) {\n\t\t\tcurves.push(v);\n\t\t} else {\n\t\t\tvar a = 3 * (o1 - o2) - o0 + o3,\n\t\t\t\tb = 2 * (o0 + o2) - 4 * o1,\n\t\t\t\tc = o1 - o0,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [],\n\t\t\t\tn = Numerical.solveQuadratic(a, b, c, roots, tMin, tMax);\n\t\t\tif (!n) {\n\t\t\t\tcurves.push(v);\n\t\t\t} else {\n\t\t\t\troots.sort();\n\t\t\t\tvar t = roots[0],\n\t\t\t\t\tparts = Curve.subdivide(v, t);\n\t\t\t\tcurves.push(parts[0]);\n\t\t\t\tif (n > 1) {\n\t\t\t\t\tt = (roots[1] - t) / (1 - t);\n\t\t\t\t\tparts = Curve.subdivide(parts[1], t);\n\t\t\t\t\tcurves.push(parts[0]);\n\t\t\t\t}\n\t\t\t\tcurves.push(parts[1]);\n\t\t\t}\n\t\t}\n\t\treturn curves;\n\t},\n\n\tsolveCubic: function (v, coord, val, roots, min, max) {\n\t\tvar v0 = v[coord],\n\t\t\tv1 = v[coord + 2],\n\t\t\tv2 = v[coord + 4],\n\t\t\tv3 = v[coord + 6],\n\t\t\tres = 0;\n\t\tif ( !(v0 < val && v3 < val && v1 < val && v2 < val ||\n\t\t\t\tv0 > val && v3 > val && v1 > val && v2 > val)) {\n\t\t\tvar c = 3 * (v1 - v0),\n\t\t\t\tb = 3 * (v2 - v1) - c,\n\t\t\t\ta = v3 - v0 - c - b;\n\t\t\tres = Numerical.solveCubic(a, b, c, v0 - val, roots, min, max);\n\t\t}\n\t\treturn res;\n\t},\n\n\tgetTimeOf: function(v, point) {\n\t\tvar p0 = new Point(v[0], v[1]),\n\t\t\tp3 = new Point(v[6], v[7]),\n\t\t\tepsilon = 1e-12,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tt = point.isClose(p0, epsilon) ? 0\n\t\t\t : point.isClose(p3, epsilon) ? 1\n\t\t\t : null;\n\t\tif (t === null) {\n\t\t\tvar coords = [point.x, point.y],\n\t\t\t\troots = [];\n\t\t\tfor (var c = 0; c < 2; c++) {\n\t\t\t\tvar count = Curve.solveCubic(v, c, coords[c], roots, 0, 1);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar u = roots[i];\n\t\t\t\t\tif (point.isClose(Curve.getPoint(v, u), geomEpsilon))\n\t\t\t\t\t\treturn u;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn point.isClose(p0, geomEpsilon) ? 0\n\t\t\t : point.isClose(p3, geomEpsilon) ? 1\n\t\t\t : null;\n\t},\n\n\tgetNearestTime: function(v, point) {\n\t\tif (Curve.isStraight(v)) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tvx = x3 - x0, vy = y3 - y0,\n\t\t\t\tdet = vx * vx + vy * vy;\n\t\t\tif (det === 0)\n\t\t\t\treturn 0;\n\t\t\tvar u = ((point.x - x0) * vx + (point.y - y0) * vy) / det;\n\t\t\treturn u < 1e-12 ? 0\n\t\t\t\t : u > 0.999999999999 ? 1\n\t\t\t\t : Curve.getTimeOf(v,\n\t\t\t\t\tnew Point(x0 + u * vx, y0 + u * vy));\n\t\t}\n\n\t\tvar count = 100,\n\t\t\tminDist = Infinity,\n\t\t\tminT = 0;\n\n\t\tfunction refine(t) {\n\t\t\tif (t >= 0 && t <= 1) {\n\t\t\t\tvar dist = point.getDistance(Curve.getPoint(v, t), true);\n\t\t\t\tif (dist < minDist) {\n\t\t\t\t\tminDist = dist;\n\t\t\t\t\tminT = t;\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i <= count; i++)\n\t\t\trefine(i / count);\n\n\t\tvar step = 1 / (count * 2);\n\t\twhile (step > 1e-8) {\n\t\t\tif (!refine(minT - step) && !refine(minT + step))\n\t\t\t\tstep /= 2;\n\t\t}\n\t\treturn minT;\n\t},\n\n\tgetPart: function(v, from, to) {\n\t\tvar flip = from > to;\n\t\tif (flip) {\n\t\t\tvar tmp = from;\n\t\t\tfrom = to;\n\t\t\tto = tmp;\n\t\t}\n\t\tif (from > 0)\n\t\t\tv = Curve.subdivide(v, from)[1];\n\t\tif (to < 1)\n\t\t\tv = Curve.subdivide(v, (to - from) / (1 - from))[0];\n\t\treturn flip\n\t\t\t\t? [v[6], v[7], v[4], v[5], v[2], v[3], v[0], v[1]]\n\t\t\t\t: v;\n\t},\n\n\tisFlatEnough: function(v, flatness) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tux = 3 * x1 - 2 * x0 - x3,\n\t\t\tuy = 3 * y1 - 2 * y0 - y3,\n\t\t\tvx = 3 * x2 - 2 * x3 - x0,\n\t\t\tvy = 3 * y2 - 2 * y3 - y0;\n\t\treturn Math.max(ux * ux, vx * vx) + Math.max(uy * uy, vy * vy)\n\t\t\t\t<= 16 * flatness * flatness;\n\t},\n\n\tgetArea: function(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn 3 * ((y3 - y0) * (x1 + x2) - (x3 - x0) * (y1 + y2)\n\t\t\t\t+ y1 * (x0 - x2) - x1 * (y0 - y2)\n\t\t\t\t+ y3 * (x2 + x0 / 3) - x3 * (y2 + y0 / 3)) / 20;\n\t},\n\n\tgetBounds: function(v) {\n\t\tvar min = v.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = [0, 0];\n\t\tfor (var i = 0; i < 2; i++)\n\t\t\tCurve._addBounds(v[i], v[i + 2], v[i + 4], v[i + 6],\n\t\t\t\t\ti, 0, min, max, roots);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\t_addBounds: function(v0, v1, v2, v3, coord, padding, min, max, roots) {\n\t\tfunction add(value, padding) {\n\t\t\tvar left = value - padding,\n\t\t\t\tright = value + padding;\n\t\t\tif (left < min[coord])\n\t\t\t\tmin[coord] = left;\n\t\t\tif (right > max[coord])\n\t\t\t\tmax[coord] = right;\n\t\t}\n\n\t\tpadding /= 2;\n\t\tvar minPad = min[coord] + padding,\n\t\t\tmaxPad = max[coord] - padding;\n\t\tif ( v0 < minPad || v1 < minPad || v2 < minPad || v3 < minPad ||\n\t\t\t\tv0 > maxPad || v1 > maxPad || v2 > maxPad || v3 > maxPad) {\n\t\t\tif (v1 < v0 != v1 < v3 && v2 < v0 != v2 < v3) {\n\t\t\t\tadd(v0, 0);\n\t\t\t\tadd(v3, 0);\n\t\t\t} else {\n\t\t\t\tvar a = 3 * (v1 - v2) - v0 + v3,\n\t\t\t\t\tb = 2 * (v0 + v2) - 4 * v1,\n\t\t\t\t\tc = v1 - v0,\n\t\t\t\t\tcount = Numerical.solveQuadratic(a, b, c, roots),\n\t\t\t\t\ttMin = 1e-8,\n\t\t\t\t\ttMax = 1 - tMin;\n\t\t\t\tadd(v3, 0);\n\t\t\t\tfor (var i = 0; i < count; i++) {\n\t\t\t\t\tvar t = roots[i],\n\t\t\t\t\t\tu = 1 - t;\n\t\t\t\t\tif (tMin <= t && t <= tMax)\n\t\t\t\t\t\tadd(u * u * u * v0\n\t\t\t\t\t\t\t+ 3 * u * u * t * v1\n\t\t\t\t\t\t\t+ 3 * u * t * t * v2\n\t\t\t\t\t\t\t+ t * t * t * v3,\n\t\t\t\t\t\t\tpadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}}, Base.each(\n\t['getBounds', 'getStrokeBounds', 'getHandleBounds'],\n\tfunction(name) {\n\t\tthis[name] = function() {\n\t\t\tif (!this._bounds)\n\t\t\t\tthis._bounds = {};\n\t\t\tvar bounds = this._bounds[name];\n\t\t\tif (!bounds) {\n\t\t\t\tbounds = this._bounds[name] = Path[name](\n\t\t\t\t\t\t[this._segment1, this._segment2], false, this._path);\n\t\t\t}\n\t\t\treturn bounds.clone();\n\t\t};\n\t},\n{\n\n}), Base.each({\n\tisStraight: function(p1, h1, h2, p2) {\n\t\tif (h1.isZero() && h2.isZero()) {\n\t\t\treturn true;\n\t\t} else {\n\t\t\tvar v = p2.subtract(p1);\n\t\t\tif (v.isZero()) {\n\t\t\t\treturn false;\n\t\t\t} else if (v.isCollinear(h1) && v.isCollinear(h2)) {\n\t\t\t\tvar l = new Line(p1, p2),\n\t\t\t\t\tepsilon = 1e-7;\n\t\t\t\tif (l.getDistance(p1.add(h1)) < epsilon &&\n\t\t\t\t\tl.getDistance(p2.add(h2)) < epsilon) {\n\t\t\t\t\tvar div = v.dot(v),\n\t\t\t\t\t\ts1 = v.dot(h1) / div,\n\t\t\t\t\t\ts2 = v.dot(h2) / div;\n\t\t\t\t\treturn s1 >= 0 && s1 <= 1 && s2 <= 0 && s2 >= -1;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t},\n\n\tisLinear: function(p1, h1, h2, p2) {\n\t\tvar third = p2.subtract(p1).divide(3);\n\t\treturn h1.equals(third) && h2.negate().equals(third);\n\t}\n}, function(test, name) {\n\tthis[name] = function(epsilon) {\n\t\tvar seg1 = this._segment1,\n\t\t\tseg2 = this._segment2;\n\t\treturn test(seg1._point, seg1._handleOut, seg2._handleIn, seg2._point,\n\t\t\t\tepsilon);\n\t};\n\n\tthis.statics[name] = function(v, epsilon) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx3 = v[6], y3 = v[7];\n\t\treturn test(\n\t\t\t\tnew Point(x0, y0),\n\t\t\t\tnew Point(v[2] - x0, v[3] - y0),\n\t\t\t\tnew Point(v[4] - x3, v[5] - y3),\n\t\t\t\tnew Point(x3, y3), epsilon);\n\t};\n}, {\n\tstatics: {},\n\n\thasHandles: function() {\n\t\treturn !this._segment1._handleOut.isZero()\n\t\t\t\t|| !this._segment2._handleIn.isZero();\n\t},\n\n\thasLength: function(epsilon) {\n\t\treturn (!this.getPoint1().equals(this.getPoint2()) || this.hasHandles())\n\t\t\t\t&& this.getLength() > (epsilon || 0);\n\t},\n\n\tisCollinear: function(curve) {\n\t\treturn curve && this.isStraight() && curve.isStraight()\n\t\t\t\t&& this.getLine().isCollinear(curve.getLine());\n\t},\n\n\tisHorizontal: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).y)\n\t\t\t\t< 1e-8;\n\t},\n\n\tisVertical: function() {\n\t\treturn this.isStraight() && Math.abs(this.getTangentAtTime(0.5).x)\n\t\t\t\t< 1e-8;\n\t}\n}), {\n\tbeans: false,\n\n\tgetLocationAt: function(offset, _isTime) {\n\t\treturn this.getLocationAtTime(\n\t\t\t\t_isTime ? offset : this.getTimeAt(offset));\n\t},\n\n\tgetLocationAtTime: function(t) {\n\t\treturn t != null && t >= 0 && t <= 1\n\t\t\t\t? new CurveLocation(this, t)\n\t\t\t\t: null;\n\t},\n\n\tgetTimeAt: function(offset, start) {\n\t\treturn Curve.getTimeAt(this.getValues(), offset, start);\n\t},\n\n\tgetParameterAt: '#getTimeAt',\n\n\tgetTimesWithTangent: function () {\n\t\tvar tangent = Point.read(arguments);\n\t\treturn tangent.isZero()\n\t\t\t\t? []\n\t\t\t\t: Curve.getTimesWithTangent(this.getValues(), tangent);\n\t},\n\n\tgetOffsetAtTime: function(t) {\n\t\treturn this.getPartLength(0, t);\n\t},\n\n\tgetLocationOf: function() {\n\t\treturn this.getLocationAtTime(this.getTimeOf(Point.read(arguments)));\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetTimeOf: function() {\n\t\treturn Curve.getTimeOf(this.getValues(), Point.read(arguments));\n\t},\n\n\tgetParameterOf: '#getTimeOf',\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tvalues = this.getValues(),\n\t\t\tt = Curve.getNearestTime(values, point),\n\t\t\tpt = Curve.getPoint(values, t);\n\t\treturn new CurveLocation(this, t, pt, null, point.getDistance(pt));\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t}\n\n},\nnew function() {\n\tvar methods = ['getPoint', 'getTangent', 'getNormal', 'getWeightedTangent',\n\t\t'getWeightedNormal', 'getCurvature'];\n\treturn Base.each(methods,\n\t\tfunction(name) {\n\t\t\tthis[name + 'At'] = function(location, _isTime) {\n\t\t\t\tvar values = this.getValues();\n\t\t\t\treturn Curve[name](values, _isTime ? location\n\t\t\t\t\t\t: Curve.getTimeAt(values, location));\n\t\t\t};\n\n\t\t\tthis[name + 'AtTime'] = function(time) {\n\t\t\t\treturn Curve[name](this.getValues(), time);\n\t\t\t};\n\t\t}, {\n\t\t\tstatics: {\n\t\t\t\t_evaluateMethods: methods\n\t\t\t}\n\t\t}\n\t);\n},\nnew function() {\n\n\tfunction getLengthIntegrand(v) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\n\t\t\tax = 9 * (x1 - x2) + 3 * (x3 - x0),\n\t\t\tbx = 6 * (x0 + x2) - 12 * x1,\n\t\t\tcx = 3 * (x1 - x0),\n\n\t\t\tay = 9 * (y1 - y2) + 3 * (y3 - y0),\n\t\t\tby = 6 * (y0 + y2) - 12 * y1,\n\t\t\tcy = 3 * (y1 - y0);\n\n\t\treturn function(t) {\n\t\t\tvar dx = (ax * t + bx) * t + cx,\n\t\t\t\tdy = (ay * t + by) * t + cy;\n\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t};\n\t}\n\n\tfunction getIterations(a, b) {\n\t\treturn Math.max(2, Math.min(16, Math.ceil(Math.abs(b - a) * 32)));\n\t}\n\n\tfunction evaluate(v, t, type, normalized) {\n\t\tif (t == null || t < 0 || t > 1)\n\t\t\treturn null;\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tisZero = Numerical.isZero;\n\t\tif (isZero(x1 - x0) && isZero(y1 - y0)) {\n\t\t\tx1 = x0;\n\t\t\ty1 = y0;\n\t\t}\n\t\tif (isZero(x2 - x3) && isZero(y2 - y3)) {\n\t\t\tx2 = x3;\n\t\t\ty2 = y3;\n\t\t}\n\t\tvar cx = 3 * (x1 - x0),\n\t\t\tbx = 3 * (x2 - x1) - cx,\n\t\t\tax = x3 - x0 - cx - bx,\n\t\t\tcy = 3 * (y1 - y0),\n\t\t\tby = 3 * (y2 - y1) - cy,\n\t\t\tay = y3 - y0 - cy - by,\n\t\t\tx, y;\n\t\tif (type === 0) {\n\t\t\tx = t === 0 ? x0 : t === 1 ? x3\n\t\t\t\t\t: ((ax * t + bx) * t + cx) * t + x0;\n\t\t\ty = t === 0 ? y0 : t === 1 ? y3\n\t\t\t\t\t: ((ay * t + by) * t + cy) * t + y0;\n\t\t} else {\n\t\t\tvar tMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin;\n\t\t\tif (t < tMin) {\n\t\t\t\tx = cx;\n\t\t\t\ty = cy;\n\t\t\t} else if (t > tMax) {\n\t\t\t\tx = 3 * (x3 - x2);\n\t\t\t\ty = 3 * (y3 - y2);\n\t\t\t} else {\n\t\t\t\tx = (3 * ax * t + 2 * bx) * t + cx;\n\t\t\t\ty = (3 * ay * t + 2 * by) * t + cy;\n\t\t\t}\n\t\t\tif (normalized) {\n\t\t\t\tif (x === 0 && y === 0 && (t < tMin || t > tMax)) {\n\t\t\t\t\tx = x2 - x1;\n\t\t\t\t\ty = y2 - y1;\n\t\t\t\t}\n\t\t\t\tvar len = Math.sqrt(x * x + y * y);\n\t\t\t\tif (len) {\n\t\t\t\t\tx /= len;\n\t\t\t\t\ty /= len;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (type === 3) {\n\t\t\t\tvar x2 = 6 * ax * t + 2 * bx,\n\t\t\t\t\ty2 = 6 * ay * t + 2 * by,\n\t\t\t\t\td = Math.pow(x * x + y * y, 3 / 2);\n\t\t\t\tx = d !== 0 ? (x * y2 - y * x2) / d : 0;\n\t\t\t\ty = 0;\n\t\t\t}\n\t\t}\n\t\treturn type === 2 ? new Point(y, -x) : new Point(x, y);\n\t}\n\n\treturn { statics: {\n\n\t\tclassify: function(v) {\n\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\ta1 = x0 * (y3 - y2) + y0 * (x2 - x3) + x3 * y2 - y3 * x2,\n\t\t\t\ta2 = x1 * (y0 - y3) + y1 * (x3 - x0) + x0 * y3 - y0 * x3,\n\t\t\t\ta3 = x2 * (y1 - y0) + y2 * (x0 - x1) + x1 * y0 - y1 * x0,\n\t\t\t\td3 = 3 * a3,\n\t\t\t\td2 = d3 - a2,\n\t\t\t\td1 = d2 - a2 + a1,\n\t\t\t\tl = Math.sqrt(d1 * d1 + d2 * d2 + d3 * d3),\n\t\t\t\ts = l !== 0 ? 1 / l : 0,\n\t\t\t\tisZero = Numerical.isZero,\n\t\t\t\tserpentine = 'serpentine';\n\t\t\td1 *= s;\n\t\t\td2 *= s;\n\t\t\td3 *= s;\n\n\t\t\tfunction type(type, t1, t2) {\n\t\t\t\tvar hasRoots = t1 !== undefined,\n\t\t\t\t\tt1Ok = hasRoots && t1 > 0 && t1 < 1,\n\t\t\t\t\tt2Ok = hasRoots && t2 > 0 && t2 < 1;\n\t\t\t\tif (hasRoots && (!(t1Ok || t2Ok)\n\t\t\t\t\t\t|| type === 'loop' && !(t1Ok && t2Ok))) {\n\t\t\t\t\ttype = 'arch';\n\t\t\t\t\tt1Ok = t2Ok = false;\n\t\t\t\t}\n\t\t\t\treturn {\n\t\t\t\t\ttype: type,\n\t\t\t\t\troots: t1Ok || t2Ok\n\t\t\t\t\t\t\t? t1Ok && t2Ok\n\t\t\t\t\t\t\t\t? t1 < t2 ? [t1, t2] : [t2, t1]\n\t\t\t\t\t\t\t\t: [t1Ok ? t1 : t2]\n\t\t\t\t\t\t\t: null\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tif (isZero(d1)) {\n\t\t\t\treturn isZero(d2)\n\t\t\t\t\t\t? type(isZero(d3) ? 'line' : 'quadratic')\n\t\t\t\t\t\t: type(serpentine, d3 / (3 * d2));\n\t\t\t}\n\t\t\tvar d = 3 * d2 * d2 - 4 * d1 * d3;\n\t\t\tif (isZero(d)) {\n\t\t\t\treturn type('cusp', d2 / (2 * d1));\n\t\t\t}\n\t\t\tvar f1 = d > 0 ? Math.sqrt(d / 3) : Math.sqrt(-d),\n\t\t\t\tf2 = 2 * d1;\n\t\t\treturn type(d > 0 ? serpentine : 'loop',\n\t\t\t\t\t(d2 + f1) / f2,\n\t\t\t\t\t(d2 - f1) / f2);\n\t\t},\n\n\t\tgetLength: function(v, a, b, ds) {\n\t\t\tif (a === undefined)\n\t\t\t\ta = 0;\n\t\t\tif (b === undefined)\n\t\t\t\tb = 1;\n\t\t\tif (Curve.isStraight(v)) {\n\t\t\t\tvar c = v;\n\t\t\t\tif (b < 1) {\n\t\t\t\t\tc = Curve.subdivide(c, b)[0];\n\t\t\t\t\ta /= b;\n\t\t\t\t}\n\t\t\t\tif (a > 0) {\n\t\t\t\t\tc = Curve.subdivide(c, a)[1];\n\t\t\t\t}\n\t\t\t\tvar dx = c[6] - c[0],\n\t\t\t\t\tdy = c[7] - c[1];\n\t\t\t\treturn Math.sqrt(dx * dx + dy * dy);\n\t\t\t}\n\t\t\treturn Numerical.integrate(ds || getLengthIntegrand(v), a, b,\n\t\t\t\t\tgetIterations(a, b));\n\t\t},\n\n\t\tgetTimeAt: function(v, offset, start) {\n\t\t\tif (start === undefined)\n\t\t\t\tstart = offset < 0 ? 1 : 0;\n\t\t\tif (offset === 0)\n\t\t\t\treturn start;\n\t\t\tvar abs = Math.abs,\n\t\t\t\tepsilon = 1e-12,\n\t\t\t\tforward = offset > 0,\n\t\t\t\ta = forward ? start : 0,\n\t\t\t\tb = forward ? 1 : start,\n\t\t\t\tds = getLengthIntegrand(v),\n\t\t\t\trangeLength = Curve.getLength(v, a, b, ds),\n\t\t\t\tdiff = abs(offset) - rangeLength;\n\t\t\tif (abs(diff) < epsilon) {\n\t\t\t\treturn forward ? b : a;\n\t\t\t} else if (diff > epsilon) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar guess = offset / rangeLength,\n\t\t\t\tlength = 0;\n\t\t\tfunction f(t) {\n\t\t\t\tlength += Numerical.integrate(ds, start, t,\n\t\t\t\t\t\tgetIterations(start, t));\n\t\t\t\tstart = t;\n\t\t\t\treturn length - offset;\n\t\t\t}\n\t\t\treturn Numerical.findRoot(f, ds, start + guess, a, b, 32,\n\t\t\t\t\t1e-12);\n\t\t},\n\n\t\tgetPoint: function(v, t) {\n\t\t\treturn evaluate(v, t, 0, false);\n\t\t},\n\n\t\tgetTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, true);\n\t\t},\n\n\t\tgetWeightedTangent: function(v, t) {\n\t\t\treturn evaluate(v, t, 1, false);\n\t\t},\n\n\t\tgetNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, true);\n\t\t},\n\n\t\tgetWeightedNormal: function(v, t) {\n\t\t\treturn evaluate(v, t, 2, false);\n\t\t},\n\n\t\tgetCurvature: function(v, t) {\n\t\t\treturn evaluate(v, t, 3, false).x;\n\t\t},\n\n\t\tgetPeaks: function(v) {\n\t\t\tvar x0 = v[0], y0 = v[1],\n\t\t\t\tx1 = v[2], y1 = v[3],\n\t\t\t\tx2 = v[4], y2 = v[5],\n\t\t\t\tx3 = v[6], y3 = v[7],\n\t\t\t\tax = -x0 + 3 * x1 - 3 * x2 + x3,\n\t\t\t\tbx = 3 * x0 - 6 * x1 + 3 * x2,\n\t\t\t\tcx = -3 * x0 + 3 * x1,\n\t\t\t\tay = -y0 + 3 * y1 - 3 * y2 + y3,\n\t\t\t\tby = 3 * y0 - 6 * y1 + 3 * y2,\n\t\t\t\tcy = -3 * y0 + 3 * y1,\n\t\t\t\ttMin = 1e-8,\n\t\t\t\ttMax = 1 - tMin,\n\t\t\t\troots = [];\n\t\t\tNumerical.solveCubic(\n\t\t\t\t\t9 * (ax * ax + ay * ay),\n\t\t\t\t\t9 * (ax * bx + by * ay),\n\t\t\t\t\t2 * (bx * bx + by * by) + 3 * (cx * ax + cy * ay),\n\t\t\t\t\t(cx * bx + by * cy),\n\t\t\t\t\troots, tMin, tMax);\n\t\t\treturn roots.sort();\n\t\t}\n\t}};\n},\nnew function() {\n\n\tfunction addLocation(locations, include, c1, t1, c2, t2, overlap) {\n\t\tvar excludeStart = !overlap && c1.getPrevious() === c2,\n\t\t\texcludeEnd = !overlap && c1 !== c2 && c1.getNext() === c2,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (t1 !== null && t1 >= (excludeStart ? tMin : 0) &&\n\t\t\tt1 <= (excludeEnd ? tMax : 1)) {\n\t\t\tif (t2 !== null && t2 >= (excludeEnd ? tMin : 0) &&\n\t\t\t\tt2 <= (excludeStart ? tMax : 1)) {\n\t\t\t\tvar loc1 = new CurveLocation(c1, t1, null, overlap),\n\t\t\t\t\tloc2 = new CurveLocation(c2, t2, null, overlap);\n\t\t\t\tloc1._intersection = loc2;\n\t\t\t\tloc2._intersection = loc1;\n\t\t\t\tif (!include || include(loc1)) {\n\t\t\t\t\tCurveLocation.insert(locations, loc1, true);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addCurveIntersections(v1, v2, c1, c2, locations, include, flip,\n\t\t\trecursion, calls, tMin, tMax, uMin, uMax) {\n\t\tif (++calls >= 4096 || ++recursion >= 40)\n\t\t\treturn calls;\n\t\tvar fatLineEpsilon = 1e-9,\n\t\t\tq0x = v2[0], q0y = v2[1], q3x = v2[6], q3y = v2[7],\n\t\t\tgetSignedDistance = Line.getSignedDistance,\n\t\t\td1 = getSignedDistance(q0x, q0y, q3x, q3y, v2[2], v2[3]),\n\t\t\td2 = getSignedDistance(q0x, q0y, q3x, q3y, v2[4], v2[5]),\n\t\t\tfactor = d1 * d2 > 0 ? 3 / 4 : 4 / 9,\n\t\t\tdMin = factor * Math.min(0, d1, d2),\n\t\t\tdMax = factor * Math.max(0, d1, d2),\n\t\t\tdp0 = getSignedDistance(q0x, q0y, q3x, q3y, v1[0], v1[1]),\n\t\t\tdp1 = getSignedDistance(q0x, q0y, q3x, q3y, v1[2], v1[3]),\n\t\t\tdp2 = getSignedDistance(q0x, q0y, q3x, q3y, v1[4], v1[5]),\n\t\t\tdp3 = getSignedDistance(q0x, q0y, q3x, q3y, v1[6], v1[7]),\n\t\t\thull = getConvexHull(dp0, dp1, dp2, dp3),\n\t\t\ttop = hull[0],\n\t\t\tbottom = hull[1],\n\t\t\ttMinClip,\n\t\t\ttMaxClip;\n\t\tif (d1 === 0 && d2 === 0\n\t\t\t\t&& dp0 === 0 && dp1 === 0 && dp2 === 0 && dp3 === 0\n\t\t\t|| (tMinClip = clipConvexHull(top, bottom, dMin, dMax)) == null\n\t\t\t|| (tMaxClip = clipConvexHull(top.reverse(), bottom.reverse(),\n\t\t\t\tdMin, dMax)) == null)\n\t\t\treturn calls;\n\t\tvar tMinNew = tMin + (tMax - tMin) * tMinClip,\n\t\t\ttMaxNew = tMin + (tMax - tMin) * tMaxClip;\n\t\tif (Math.max(uMax - uMin, tMaxNew - tMinNew) < fatLineEpsilon) {\n\t\t\tvar t = (tMinNew + tMaxNew) / 2,\n\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tflip ? c2 : c1, flip ? u : t,\n\t\t\t\t\tflip ? c1 : c2, flip ? t : u);\n\t\t} else {\n\t\t\tv1 = Curve.getPart(v1, tMinClip, tMaxClip);\n\t\t\tvar uDiff = uMax - uMin;\n\t\t\tif (tMaxClip - tMinClip > 0.8) {\n\t\t\t\tif (tMaxNew - tMinNew > uDiff) {\n\t\t\t\t\tvar parts = Curve.subdivide(v1, 0.5),\n\t\t\t\t\t\tt = (tMinNew + tMaxNew) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[0], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, t);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, parts[1], c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, t, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tvar parts = Curve.subdivide(v2, 0.5),\n\t\t\t\t\t\tu = (uMin + uMax) / 2;\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[0], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, u, tMinNew, tMaxNew);\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tparts[1], v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, u, uMax, tMinNew, tMaxNew);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (uDiff === 0 || uDiff >= fatLineEpsilon) {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv2, v1, c2, c1, locations, include, !flip,\n\t\t\t\t\t\t\trecursion, calls, uMin, uMax, tMinNew, tMaxNew);\n\t\t\t\t} else {\n\t\t\t\t\tcalls = addCurveIntersections(\n\t\t\t\t\t\t\tv1, v2, c1, c2, locations, include, flip,\n\t\t\t\t\t\t\trecursion, calls, tMinNew, tMaxNew, uMin, uMax);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn calls;\n\t}\n\n\tfunction getConvexHull(dq0, dq1, dq2, dq3) {\n\t\tvar p0 = [ 0, dq0 ],\n\t\t\tp1 = [ 1 / 3, dq1 ],\n\t\t\tp2 = [ 2 / 3, dq2 ],\n\t\t\tp3 = [ 1, dq3 ],\n\t\t\tdist1 = dq1 - (2 * dq0 + dq3) / 3,\n\t\t\tdist2 = dq2 - (dq0 + 2 * dq3) / 3,\n\t\t\thull;\n\t\tif (dist1 * dist2 < 0) {\n\t\t\thull = [[p0, p1, p3], [p0, p2, p3]];\n\t\t} else {\n\t\t\tvar distRatio = dist1 / dist2;\n\t\t\thull = [\n\t\t\t\tdistRatio >= 2 ? [p0, p1, p3]\n\t\t\t\t: distRatio <= 0.5 ? [p0, p2, p3]\n\t\t\t\t: [p0, p1, p2, p3],\n\t\t\t\t[p0, p3]\n\t\t\t];\n\t\t}\n\t\treturn (dist1 || dist2) < 0 ? hull.reverse() : hull;\n\t}\n\n\tfunction clipConvexHull(hullTop, hullBottom, dMin, dMax) {\n\t\tif (hullTop[0][1] < dMin) {\n\t\t\treturn clipConvexHullPart(hullTop, true, dMin);\n\t\t} else if (hullBottom[0][1] > dMax) {\n\t\t\treturn clipConvexHullPart(hullBottom, false, dMax);\n\t\t} else {\n\t\t\treturn hullTop[0][0];\n\t\t}\n\t}\n\n\tfunction clipConvexHullPart(part, top, threshold) {\n\t\tvar px = part[0][0],\n\t\t\tpy = part[0][1];\n\t\tfor (var i = 1, l = part.length; i < l; i++) {\n\t\t\tvar qx = part[i][0],\n\t\t\t\tqy = part[i][1];\n\t\t\tif (top ? qy >= threshold : qy <= threshold) {\n\t\t\t\treturn qy === threshold ? qx\n\t\t\t\t\t\t: px + (threshold - py) * (qx - px) / (qy - py);\n\t\t\t}\n\t\t\tpx = qx;\n\t\t\tpy = qy;\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction getCurveLineIntersections(v, px, py, vx, vy) {\n\t\tvar isZero = Numerical.isZero;\n\t\tif (isZero(vx) && isZero(vy)) {\n\t\t\tvar t = Curve.getTimeOf(v, new Point(px, py));\n\t\t\treturn t === null ? [] : [t];\n\t\t}\n\t\tvar angle = Math.atan2(-vy, vx),\n\t\t\tsin = Math.sin(angle),\n\t\t\tcos = Math.cos(angle),\n\t\t\trv = [],\n\t\t\troots = [];\n\t\tfor (var i = 0; i < 8; i += 2) {\n\t\t\tvar x = v[i] - px,\n\t\t\t\ty = v[i + 1] - py;\n\t\t\trv.push(\n\t\t\t\tx * cos - y * sin,\n\t\t\t\tx * sin + y * cos);\n\t\t}\n\t\tCurve.solveCubic(rv, 1, 0, roots, 0, 1);\n\t\treturn roots;\n\t}\n\n\tfunction addCurveLineIntersections(v1, v2, c1, c2, locations, include,\n\t\t\tflip) {\n\t\tvar x1 = v2[0], y1 = v2[1],\n\t\t\tx2 = v2[6], y2 = v2[7],\n\t\t\troots = getCurveLineIntersections(v1, x1, y1, x2 - x1, y2 - y1);\n\t\tfor (var i = 0, l = roots.length; i < l; i++) {\n\t\t\tvar t1 = roots[i],\n\t\t\t\tp1 = Curve.getPoint(v1, t1),\n\t\t\t\tt2 = Curve.getTimeOf(v2, p1);\n\t\t\tif (t2 !== null) {\n\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\tflip ? c2 : c1, flip ? t2 : t1,\n\t\t\t\t\t\tflip ? c1 : c2, flip ? t1 : t2);\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction addLineIntersection(v1, v2, c1, c2, locations, include) {\n\t\tvar pt = Line.intersect(\n\t\t\t\tv1[0], v1[1], v1[6], v1[7],\n\t\t\t\tv2[0], v2[1], v2[6], v2[7]);\n\t\tif (pt) {\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, Curve.getTimeOf(v1, pt),\n\t\t\t\t\tc2, Curve.getTimeOf(v2, pt));\n\t\t}\n\t}\n\n\tfunction getCurveIntersections(v1, v2, c1, c2, locations, include) {\n\t\tvar epsilon = 1e-12,\n\t\t\tmin = Math.min,\n\t\t\tmax = Math.max;\n\n\t\tif (max(v1[0], v1[2], v1[4], v1[6]) + epsilon >\n\t\t\tmin(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmin(v1[0], v1[2], v1[4], v1[6]) - epsilon <\n\t\t\tmax(v2[0], v2[2], v2[4], v2[6]) &&\n\t\t\tmax(v1[1], v1[3], v1[5], v1[7]) + epsilon >\n\t\t\tmin(v2[1], v2[3], v2[5], v2[7]) &&\n\t\t\tmin(v1[1], v1[3], v1[5], v1[7]) - epsilon <\n\t\t\tmax(v2[1], v2[3], v2[5], v2[7])) {\n\t\t\tvar overlaps = getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\t\tvar overlap = overlaps[i];\n\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\tc1, overlap[0],\n\t\t\t\t\t\t\tc2, overlap[1], true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar straight1 = Curve.isStraight(v1),\n\t\t\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\t\t\tstraight = straight1 && straight2,\n\t\t\t\t\tflip = straight1 && !straight2,\n\t\t\t\t\tbefore = locations.length;\n\t\t\t\t(straight\n\t\t\t\t\t? addLineIntersection\n\t\t\t\t\t: straight1 || straight2\n\t\t\t\t\t\t? addCurveLineIntersections\n\t\t\t\t\t\t: addCurveIntersections)(\n\t\t\t\t\t\t\tflip ? v2 : v1, flip ? v1 : v2,\n\t\t\t\t\t\t\tflip ? c2 : c1, flip ? c1 : c2,\n\t\t\t\t\t\t\tlocations, include, flip,\n\t\t\t\t\t\t\t0, 0, 0, 1, 0, 1);\n\t\t\t\tif (!straight || locations.length === before) {\n\t\t\t\t\tfor (var i = 0; i < 4; i++) {\n\t\t\t\t\t\tvar t1 = i >> 1,\n\t\t\t\t\t\t\tt2 = i & 1,\n\t\t\t\t\t\t\ti1 = t1 * 6,\n\t\t\t\t\t\t\ti2 = t2 * 6,\n\t\t\t\t\t\t\tp1 = new Point(v1[i1], v1[i1 + 1]),\n\t\t\t\t\t\t\tp2 = new Point(v2[i2], v2[i2 + 1]);\n\t\t\t\t\t\tif (p1.isClose(p2, epsilon)) {\n\t\t\t\t\t\t\taddLocation(locations, include,\n\t\t\t\t\t\t\t\t\tc1, t1,\n\t\t\t\t\t\t\t\t\tc2, t2);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getSelfIntersection(v1, c1, locations, include) {\n\t\tvar info = Curve.classify(v1);\n\t\tif (info.type === 'loop') {\n\t\t\tvar roots = info.roots;\n\t\t\taddLocation(locations, include,\n\t\t\t\t\tc1, roots[0],\n\t\t\t\t\tc1, roots[1]);\n\t\t}\n\t return locations;\n\t}\n\n\tfunction getIntersections(curves1, curves2, include, matrix1, matrix2,\n\t\t\t_returnFirst) {\n\t\tvar epsilon = 1e-7,\n\t\t\tself = !curves2;\n\t\tif (self)\n\t\t\tcurves2 = curves1;\n\t\tvar length1 = curves1.length,\n\t\t\tlength2 = curves2.length,\n\t\t\tvalues1 = new Array(length1),\n\t\t\tvalues2 = self ? values1 : new Array(length2),\n\t\t\tlocations = [];\n\n\t\tfor (var i = 0; i < length1; i++) {\n\t\t\tvalues1[i] = curves1[i].getValues(matrix1);\n\t\t}\n\t\tif (!self) {\n\t\t\tfor (var i = 0; i < length2; i++) {\n\t\t\t\tvalues2[i] = curves2[i].getValues(matrix2);\n\t\t\t}\n\t\t}\n\t\tvar boundsCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\tvalues1, values2, epsilon);\n\t\tfor (var index1 = 0; index1 < length1; index1++) {\n\t\t\tvar curve1 = curves1[index1],\n\t\t\t\tv1 = values1[index1];\n\t\t\tif (self) {\n\t\t\t\tgetSelfIntersection(v1, curve1, locations, include);\n\t\t\t}\n\t\t\tvar collisions1 = boundsCollisions[index1];\n\t\t\tif (collisions1) {\n\t\t\t\tfor (var j = 0; j < collisions1.length; j++) {\n\t\t\t\t\tif (_returnFirst && locations.length)\n\t\t\t\t\t\treturn locations;\n\t\t\t\t\tvar index2 = collisions1[j];\n\t\t\t\t\tif (!self || index2 > index1) {\n\t\t\t\t\t\tvar curve2 = curves2[index2],\n\t\t\t\t\t\t\tv2 = values2[index2];\n\t\t\t\t\t\tgetCurveIntersections(\n\t\t\t\t\t\t\t\tv1, v2, curve1, curve2, locations, include);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn locations;\n\t}\n\n\tfunction getOverlaps(v1, v2) {\n\n\t\tfunction getSquaredLineLength(v) {\n\t\t\tvar x = v[6] - v[0],\n\t\t\t\ty = v[7] - v[1];\n\t\t\treturn x * x + y * y;\n\t\t}\n\n\t\tvar abs = Math.abs,\n\t\t\tgetDistance = Line.getDistance,\n\t\t\ttimeEpsilon = 1e-8,\n\t\t\tgeomEpsilon = 1e-7,\n\t\t\tstraight1 = Curve.isStraight(v1),\n\t\t\tstraight2 = Curve.isStraight(v2),\n\t\t\tstraightBoth = straight1 && straight2,\n\t\t\tflip = getSquaredLineLength(v1) < getSquaredLineLength(v2),\n\t\t\tl1 = flip ? v2 : v1,\n\t\t\tl2 = flip ? v1 : v2,\n\t\t\tpx = l1[0], py = l1[1],\n\t\t\tvx = l1[6] - px, vy = l1[7] - py;\n\t\tif (getDistance(px, py, vx, vy, l2[0], l2[1], true) < geomEpsilon &&\n\t\t\tgetDistance(px, py, vx, vy, l2[6], l2[7], true) < geomEpsilon) {\n\t\t\tif (!straightBoth &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[2], l1[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l1[4], l1[5], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[2], l2[3], true) < geomEpsilon &&\n\t\t\t\tgetDistance(px, py, vx, vy, l2[4], l2[5], true) < geomEpsilon) {\n\t\t\t\tstraight1 = straight2 = straightBoth = true;\n\t\t\t}\n\t\t} else if (straightBoth) {\n\t\t\treturn null;\n\t\t}\n\t\tif (straight1 ^ straight2) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar v = [v1, v2],\n\t\t\tpairs = [];\n\t\tfor (var i = 0; i < 4 && pairs.length < 2; i++) {\n\t\t\tvar i1 = i & 1,\n\t\t\t\ti2 = i1 ^ 1,\n\t\t\t\tt1 = i >> 1,\n\t\t\t\tt2 = Curve.getTimeOf(v[i1], new Point(\n\t\t\t\t\tv[i2][t1 ? 6 : 0],\n\t\t\t\t\tv[i2][t1 ? 7 : 1]));\n\t\t\tif (t2 != null) {\n\t\t\t\tvar pair = i1 ? [t1, t2] : [t2, t1];\n\t\t\t\tif (!pairs.length ||\n\t\t\t\t\tabs(pair[0] - pairs[0][0]) > timeEpsilon &&\n\t\t\t\t\tabs(pair[1] - pairs[0][1]) > timeEpsilon) {\n\t\t\t\t\tpairs.push(pair);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (i > 2 && !pairs.length)\n\t\t\t\tbreak;\n\t\t}\n\t\tif (pairs.length !== 2) {\n\t\t\tpairs = null;\n\t\t} else if (!straightBoth) {\n\t\t\tvar o1 = Curve.getPart(v1, pairs[0][0], pairs[1][0]),\n\t\t\t\to2 = Curve.getPart(v2, pairs[0][1], pairs[1][1]);\n\t\t\tif (abs(o2[2] - o1[2]) > geomEpsilon ||\n\t\t\t\tabs(o2[3] - o1[3]) > geomEpsilon ||\n\t\t\t\tabs(o2[4] - o1[4]) > geomEpsilon ||\n\t\t\t\tabs(o2[5] - o1[5]) > geomEpsilon)\n\t\t\t\tpairs = null;\n\t\t}\n\t\treturn pairs;\n\t}\n\n\tfunction getTimesWithTangent(v, tangent) {\n\t\tvar x0 = v[0], y0 = v[1],\n\t\t\tx1 = v[2], y1 = v[3],\n\t\t\tx2 = v[4], y2 = v[5],\n\t\t\tx3 = v[6], y3 = v[7],\n\t\t\tnormalized = tangent.normalize(),\n\t\t\ttx = normalized.x,\n\t\t\tty = normalized.y,\n\t\t\tax = 3 * x3 - 9 * x2 + 9 * x1 - 3 * x0,\n\t\t\tay = 3 * y3 - 9 * y2 + 9 * y1 - 3 * y0,\n\t\t\tbx = 6 * x2 - 12 * x1 + 6 * x0,\n\t\t\tby = 6 * y2 - 12 * y1 + 6 * y0,\n\t\t\tcx = 3 * x1 - 3 * x0,\n\t\t\tcy = 3 * y1 - 3 * y0,\n\t\t\tden = 2 * ax * ty - 2 * ay * tx,\n\t\t\ttimes = [];\n\t\tif (Math.abs(den) < Numerical.CURVETIME_EPSILON) {\n\t\t\tvar num = ax * cy - ay * cx,\n\t\t\t\tden = ax * by - ay * bx;\n\t\t\tif (den != 0) {\n\t\t\t\tvar t = -num / den;\n\t\t\t\tif (t >= 0 && t <= 1) times.push(t);\n\t\t\t}\n\t\t} else {\n\t\t\tvar delta = (bx * bx - 4 * ax * cx) * ty * ty +\n\t\t\t\t(-2 * bx * by + 4 * ay * cx + 4 * ax * cy) * tx * ty +\n\t\t\t\t(by * by - 4 * ay * cy) * tx * tx,\n\t\t\t\tk = bx * ty - by * tx;\n\t\t\tif (delta >= 0 && den != 0) {\n\t\t\t\tvar d = Math.sqrt(delta),\n\t\t\t\t\tt0 = -(k + d) / den,\n\t\t\t\t\tt1 = (-k + d) / den;\n\t\t\t\tif (t0 >= 0 && t0 <= 1) times.push(t0);\n\t\t\t\tif (t1 >= 0 && t1 <= 1) times.push(t1);\n\t\t\t}\n\t\t}\n\t\treturn times;\n\t}\n\n\treturn {\n\t\tgetIntersections: function(curve) {\n\t\t\tvar v1 = this.getValues(),\n\t\t\t\tv2 = curve && curve !== this && curve.getValues();\n\t\t\treturn v2 ? getCurveIntersections(v1, v2, this, curve, [])\n\t\t\t\t\t : getSelfIntersection(v1, this, []);\n\t\t},\n\n\t\tstatics: {\n\t\t\tgetOverlaps: getOverlaps,\n\t\t\tgetIntersections: getIntersections,\n\t\t\tgetCurveLineIntersections: getCurveLineIntersections,\n\t\t\tgetTimesWithTangent: getTimesWithTangent\n\t\t}\n\t};\n});\n\nvar CurveLocation = Base.extend({\n\t_class: 'CurveLocation',\n\n\tinitialize: function CurveLocation(curve, time, point, _overlap, _distance) {\n\t\tif (time >= 0.99999999) {\n\t\t\tvar next = curve.getNext();\n\t\t\tif (next) {\n\t\t\t\ttime = 0;\n\t\t\t\tcurve = next;\n\t\t\t}\n\t\t}\n\t\tthis._setCurve(curve);\n\t\tthis._time = time;\n\t\tthis._point = point || curve.getPointAtTime(time);\n\t\tthis._overlap = _overlap;\n\t\tthis._distance = _distance;\n\t\tthis._intersection = this._next = this._previous = null;\n\t},\n\n\t_setPath: function(path) {\n\t\tthis._path = path;\n\t\tthis._version = path ? path._version : 0;\n\t},\n\n\t_setCurve: function(curve) {\n\t\tthis._setPath(curve._path);\n\t\tthis._curve = curve;\n\t\tthis._segment = null;\n\t\tthis._segment1 = curve._segment1;\n\t\tthis._segment2 = curve._segment2;\n\t},\n\n\t_setSegment: function(segment) {\n\t\tvar curve = segment.getCurve();\n\t\tif (curve) {\n\t\t\tthis._setCurve(curve);\n\t\t} else {\n\t\t\tthis._setPath(segment._path);\n\t\t\tthis._segment1 = segment;\n\t\t\tthis._segment2 = null;\n\t\t}\n\t\tthis._segment = segment;\n\t\tthis._time = segment === this._segment1 ? 0 : 1;\n\t\tthis._point = segment._point.clone();\n\t},\n\n\tgetSegment: function() {\n\t\tvar segment = this._segment;\n\t\tif (!segment) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tif (time === 0) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time === 1) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else if (time != null) {\n\t\t\t\tsegment = curve.getPartLength(0, time)\n\t\t\t\t\t< curve.getPartLength(time, 1)\n\t\t\t\t\t\t? curve._segment1\n\t\t\t\t\t\t: curve._segment2;\n\t\t\t}\n\t\t\tthis._segment = segment;\n\t\t}\n\t\treturn segment;\n\t},\n\n\tgetCurve: function() {\n\t\tvar path = this._path,\n\t\t\tthat = this;\n\t\tif (path && path._version !== this._version) {\n\t\t\tthis._time = this._offset = this._curveOffset = this._curve = null;\n\t\t}\n\n\t\tfunction trySegment(segment) {\n\t\t\tvar curve = segment && segment.getCurve();\n\t\t\tif (curve && (that._time = curve.getTimeOf(that._point)) != null) {\n\t\t\t\tthat._setCurve(curve);\n\t\t\t\treturn curve;\n\t\t\t}\n\t\t}\n\n\t\treturn this._curve\n\t\t\t|| trySegment(this._segment)\n\t\t\t|| trySegment(this._segment1)\n\t\t\t|| trySegment(this._segment2.getPrevious());\n\t},\n\n\tgetPath: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve._path;\n\t},\n\n\tgetIndex: function() {\n\t\tvar curve = this.getCurve();\n\t\treturn curve && curve.getIndex();\n\t},\n\n\tgetTime: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this._time;\n\t\treturn curve && time == null\n\t\t\t? this._time = curve.getTimeOf(this._point)\n\t\t\t: time;\n\t},\n\n\tgetParameter: '#getTime',\n\n\tgetPoint: function() {\n\t\treturn this._point;\n\t},\n\n\tgetOffset: function() {\n\t\tvar offset = this._offset;\n\t\tif (offset == null) {\n\t\t\toffset = 0;\n\t\t\tvar path = this.getPath(),\n\t\t\t\tindex = this.getIndex();\n\t\t\tif (path && index != null) {\n\t\t\t\tvar curves = path.getCurves();\n\t\t\t\tfor (var i = 0; i < index; i++)\n\t\t\t\t\toffset += curves[i].getLength();\n\t\t\t}\n\t\t\tthis._offset = offset += this.getCurveOffset();\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetCurveOffset: function() {\n\t\tvar offset = this._curveOffset;\n\t\tif (offset == null) {\n\t\t\tvar curve = this.getCurve(),\n\t\t\t\ttime = this.getTime();\n\t\t\tthis._curveOffset = offset = time != null && curve\n\t\t\t\t\t&& curve.getPartLength(0, time);\n\t\t}\n\t\treturn offset;\n\t},\n\n\tgetIntersection: function() {\n\t\treturn this._intersection;\n\t},\n\n\tgetDistance: function() {\n\t\treturn this._distance;\n\t},\n\n\tdivide: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tres = curve && curve.divideAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(res._segment1);\n\t\t}\n\t\treturn res;\n\t},\n\n\tsplit: function() {\n\t\tvar curve = this.getCurve(),\n\t\t\tpath = curve._path,\n\t\t\tres = curve && curve.splitAtTime(this.getTime());\n\t\tif (res) {\n\t\t\tthis._setSegment(path.getLastSegment());\n\t\t}\n\t\treturn res;\n\t},\n\n\tequals: function(loc, _ignoreOther) {\n\t\tvar res = this === loc;\n\t\tif (!res && loc instanceof CurveLocation) {\n\t\t\tvar c1 = this.getCurve(),\n\t\t\t\tc2 = loc.getCurve(),\n\t\t\t\tp1 = c1._path,\n\t\t\t\tp2 = c2._path;\n\t\t\tif (p1 === p2) {\n\t\t\t\tvar abs = Math.abs,\n\t\t\t\t\tepsilon = 1e-7,\n\t\t\t\t\tdiff = abs(this.getOffset() - loc.getOffset()),\n\t\t\t\t\ti1 = !_ignoreOther && this._intersection,\n\t\t\t\t\ti2 = !_ignoreOther && loc._intersection;\n\t\t\t\tres = (diff < epsilon\n\t\t\t\t\t\t|| p1 && abs(p1.getLength() - diff) < epsilon)\n\t\t\t\t\t&& (!i1 && !i2 || i1 && i2 && i1.equals(i2, true));\n\t\t\t}\n\t\t}\n\t\treturn res;\n\t},\n\n\ttoString: function() {\n\t\tvar parts = [],\n\t\t\tpoint = this.getPoint(),\n\t\t\tf = Formatter.instance;\n\t\tif (point)\n\t\t\tparts.push('point: ' + point);\n\t\tvar index = this.getIndex();\n\t\tif (index != null)\n\t\t\tparts.push('index: ' + index);\n\t\tvar time = this.getTime();\n\t\tif (time != null)\n\t\t\tparts.push('time: ' + f.number(time));\n\t\tif (this._distance != null)\n\t\t\tparts.push('distance: ' + f.number(this._distance));\n\t\treturn '{ ' + parts.join(', ') + ' }';\n\t},\n\n\tisTouching: function() {\n\t\tvar inter = this._intersection;\n\t\tif (inter && this.getTangent().isCollinear(inter.getTangent())) {\n\t\t\tvar curve1 = this.getCurve(),\n\t\t\t\tcurve2 = inter.getCurve();\n\t\t\treturn !(curve1.isStraight() && curve2.isStraight()\n\t\t\t\t\t&& curve1.getLine().intersect(curve2.getLine()));\n\t\t}\n\t\treturn false;\n\t},\n\n\tisCrossing: function() {\n\t\tvar inter = this._intersection;\n\t\tif (!inter)\n\t\t\treturn false;\n\t\tvar t1 = this.getTime(),\n\t\t\tt2 = inter.getTime(),\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tt1Inside = t1 >= tMin && t1 <= tMax,\n\t\t\tt2Inside = t2 >= tMin && t2 <= tMax;\n\t\tif (t1Inside && t2Inside)\n\t\t\treturn !this.isTouching();\n\t\tvar c2 = this.getCurve(),\n\t\t\tc1 = c2 && t1 < tMin ? c2.getPrevious() : c2,\n\t\t\tc4 = inter.getCurve(),\n\t\t\tc3 = c4 && t2 < tMin ? c4.getPrevious() : c4;\n\t\tif (t1 > tMax)\n\t\t\tc2 = c2.getNext();\n\t\tif (t2 > tMax)\n\t\t\tc4 = c4.getNext();\n\t\tif (!c1 || !c2 || !c3 || !c4)\n\t\t\treturn false;\n\n\t\tvar offsets = [];\n\n\t\tfunction addOffsets(curve, end) {\n\t\t\tvar v = curve.getValues(),\n\t\t\t\troots = Curve.classify(v).roots || Curve.getPeaks(v),\n\t\t\t\tcount = roots.length,\n\t\t\t\toffset = Curve.getLength(v,\n\t\t\t\t\tend && count ? roots[count - 1] : 0,\n\t\t\t\t\t!end && count ? roots[0] : 1);\n\t\t\toffsets.push(count ? offset : offset / 32);\n\t\t}\n\n\t\tfunction isInRange(angle, min, max) {\n\t\t\treturn min < max\n\t\t\t\t\t? angle > min && angle < max\n\t\t\t\t\t: angle > min || angle < max;\n\t\t}\n\n\t\tif (!t1Inside) {\n\t\t\taddOffsets(c1, true);\n\t\t\taddOffsets(c2, false);\n\t\t}\n\t\tif (!t2Inside) {\n\t\t\taddOffsets(c3, true);\n\t\t\taddOffsets(c4, false);\n\t\t}\n\t\tvar pt = this.getPoint(),\n\t\t\toffset = Math.min.apply(Math, offsets),\n\t\t\tv2 = t1Inside ? c2.getTangentAtTime(t1)\n\t\t\t\t\t: c2.getPointAt(offset).subtract(pt),\n\t\t\tv1 = t1Inside ? v2.negate()\n\t\t\t\t\t: c1.getPointAt(-offset).subtract(pt),\n\t\t\tv4 = t2Inside ? c4.getTangentAtTime(t2)\n\t\t\t\t\t: c4.getPointAt(offset).subtract(pt),\n\t\t\tv3 = t2Inside ? v4.negate()\n\t\t\t\t\t: c3.getPointAt(-offset).subtract(pt),\n\t\t\ta1 = v1.getAngle(),\n\t\t\ta2 = v2.getAngle(),\n\t\t\ta3 = v3.getAngle(),\n\t\t\ta4 = v4.getAngle();\n\t\treturn !!(t1Inside\n\t\t\t\t? (isInRange(a1, a3, a4) ^ isInRange(a2, a3, a4)) &&\n\t\t\t\t (isInRange(a1, a4, a3) ^ isInRange(a2, a4, a3))\n\t\t\t\t: (isInRange(a3, a1, a2) ^ isInRange(a4, a1, a2)) &&\n\t\t\t\t (isInRange(a3, a2, a1) ^ isInRange(a4, a2, a1)));\n\t},\n\n\thasOverlap: function() {\n\t\treturn !!this._overlap;\n\t}\n}, Base.each(Curve._evaluateMethods, function(name) {\n\tvar get = name + 'At';\n\tthis[name] = function() {\n\t\tvar curve = this.getCurve(),\n\t\t\ttime = this.getTime();\n\t\treturn time != null && curve && curve[get](time, true);\n\t};\n}, {\n\tpreserve: true\n}),\nnew function() {\n\n\tfunction insert(locations, loc, merge) {\n\t\tvar length = locations.length,\n\t\t\tl = 0,\n\t\t\tr = length - 1;\n\n\t\tfunction search(index, dir) {\n\t\t\tfor (var i = index + dir; i >= -1 && i <= length; i += dir) {\n\t\t\t\tvar loc2 = locations[((i % length) + length) % length];\n\t\t\t\tif (!loc.getPoint().isClose(loc2.getPoint(),\n\t\t\t\t\t\t1e-7))\n\t\t\t\t\tbreak;\n\t\t\t\tif (loc.equals(loc2))\n\t\t\t\t\treturn loc2;\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\n\t\twhile (l <= r) {\n\t\t\tvar m = (l + r) >>> 1,\n\t\t\t\tloc2 = locations[m],\n\t\t\t\tfound;\n\t\t\tif (merge && (found = loc.equals(loc2) ? loc2\n\t\t\t\t\t: (search(m, -1) || search(m, 1)))) {\n\t\t\t\tif (loc._overlap) {\n\t\t\t\t\tfound._overlap = found._intersection._overlap = true;\n\t\t\t\t}\n\t\t\t\treturn found;\n\t\t\t}\n\t\tvar path1 = loc.getPath(),\n\t\t\tpath2 = loc2.getPath(),\n\t\t\tdiff = path1 !== path2\n\t\t\t\t? path1._id - path2._id\n\t\t\t\t: (loc.getIndex() + loc.getTime())\n\t\t\t\t- (loc2.getIndex() + loc2.getTime());\n\t\t\tif (diff < 0) {\n\t\t\t\tr = m - 1;\n\t\t\t} else {\n\t\t\t\tl = m + 1;\n\t\t\t}\n\t\t}\n\t\tlocations.splice(l, 0, loc);\n\t\treturn loc;\n\t}\n\n\treturn { statics: {\n\t\tinsert: insert,\n\n\t\texpand: function(locations) {\n\t\t\tvar expanded = locations.slice();\n\t\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\t\tinsert(expanded, locations[i]._intersection, false);\n\t\t\t}\n\t\t\treturn expanded;\n\t\t}\n\t}};\n});\n\nvar PathItem = Item.extend({\n\t_class: 'PathItem',\n\t_selectBounds: false,\n\t_canScaleStroke: true,\n\tbeans: true,\n\n\tinitialize: function PathItem() {\n\t},\n\n\tstatics: {\n\t\tcreate: function(arg) {\n\t\t\tvar data,\n\t\t\t\tsegments,\n\t\t\t\tcompound;\n\t\t\tif (Base.isPlainObject(arg)) {\n\t\t\t\tsegments = arg.segments;\n\t\t\t\tdata = arg.pathData;\n\t\t\t} else if (Array.isArray(arg)) {\n\t\t\t\tsegments = arg;\n\t\t\t} else if (typeof arg === 'string') {\n\t\t\t\tdata = arg;\n\t\t\t}\n\t\t\tif (segments) {\n\t\t\t\tvar first = segments[0];\n\t\t\t\tcompound = first && Array.isArray(first[0]);\n\t\t\t} else if (data) {\n\t\t\t\tcompound = (data.match(/m/gi) || []).length > 1\n\t\t\t\t\t\t|| /z\\s*\\S+/i.test(data);\n\t\t\t}\n\t\t\tvar ctor = compound ? CompoundPath : Path;\n\t\t\treturn new ctor(arg);\n\t\t}\n\t},\n\n\t_asPathItem: function() {\n\t\treturn this;\n\t},\n\n\tisClockwise: function() {\n\t\treturn this.getArea() >= 0;\n\t},\n\n\tsetClockwise: function(clockwise) {\n\t\tif (this.isClockwise() != (clockwise = !!clockwise))\n\t\t\tthis.reverse();\n\t},\n\n\tsetPathData: function(data) {\n\n\t\tvar parts = data && data.match(/[mlhvcsqtaz][^mlhvcsqtaz]*/ig),\n\t\t\tcoords,\n\t\t\trelative = false,\n\t\t\tprevious,\n\t\t\tcontrol,\n\t\t\tcurrent = new Point(),\n\t\t\tstart = new Point();\n\n\t\tfunction getCoord(index, coord) {\n\t\t\tvar val = +coords[index];\n\t\t\tif (relative)\n\t\t\t\tval += current[coord];\n\t\t\treturn val;\n\t\t}\n\n\t\tfunction getPoint(index) {\n\t\t\treturn new Point(\n\t\t\t\tgetCoord(index, 'x'),\n\t\t\t\tgetCoord(index + 1, 'y')\n\t\t\t);\n\t\t}\n\n\t\tthis.clear();\n\n\t\tfor (var i = 0, l = parts && parts.length; i < l; i++) {\n\t\t\tvar part = parts[i],\n\t\t\t\tcommand = part[0],\n\t\t\t\tlower = command.toLowerCase();\n\t\t\tcoords = part.match(/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g);\n\t\t\tvar length = coords && coords.length;\n\t\t\trelative = command === lower;\n\t\t\tif (previous === 'z' && !/[mz]/.test(lower))\n\t\t\t\tthis.moveTo(current);\n\t\t\tswitch (lower) {\n\t\t\tcase 'm':\n\t\t\tcase 'l':\n\t\t\t\tvar move = lower === 'm';\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis[move ? 'moveTo' : 'lineTo'](current = getPoint(j));\n\t\t\t\t\tif (move) {\n\t\t\t\t\t\tstart = current;\n\t\t\t\t\t\tmove = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'h':\n\t\t\tcase 'v':\n\t\t\t\tvar coord = lower === 'h' ? 'x' : 'y';\n\t\t\t\tcurrent = current.clone();\n\t\t\t\tfor (var j = 0; j < length; j++) {\n\t\t\t\t\tcurrent[coord] = getCoord(j, coord);\n\t\t\t\t\tthis.lineTo(current);\n\t\t\t\t}\n\t\t\t\tcontrol = current;\n\t\t\t\tbreak;\n\t\t\tcase 'c':\n\t\t\t\tfor (var j = 0; j < length; j += 6) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\tgetPoint(j),\n\t\t\t\t\t\t\tcontrol = getPoint(j + 2),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 4));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 's':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.cubicCurveTo(\n\t\t\t\t\t\t\t/[cs]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current,\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'q':\n\t\t\t\tfor (var j = 0; j < length; j += 4) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = getPoint(j),\n\t\t\t\t\t\t\tcurrent = getPoint(j + 2));\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 't':\n\t\t\t\tfor (var j = 0; j < length; j += 2) {\n\t\t\t\t\tthis.quadraticCurveTo(\n\t\t\t\t\t\t\tcontrol = (/[qt]/.test(previous)\n\t\t\t\t\t\t\t\t\t? current.multiply(2).subtract(control)\n\t\t\t\t\t\t\t\t\t: current),\n\t\t\t\t\t\t\tcurrent = getPoint(j));\n\t\t\t\t\tprevious = lower;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'a':\n\t\t\t\tfor (var j = 0; j < length; j += 7) {\n\t\t\t\t\tthis.arcTo(current = getPoint(j + 5),\n\t\t\t\t\t\t\tnew Size(+coords[j], +coords[j + 1]),\n\t\t\t\t\t\t\t+coords[j + 2], +coords[j + 4], +coords[j + 3]);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'z':\n\t\t\t\tthis.closePath(1e-12);\n\t\t\t\tcurrent = start;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tprevious = lower;\n\t\t}\n\t},\n\n\t_canComposite: function() {\n\t\treturn !(this.hasFill() && this.hasStroke());\n\t},\n\n\t_contains: function(point) {\n\t\tvar winding = point.isInside(\n\t\t\t\tthis.getBounds({ internal: true, handle: true }))\n\t\t\t\t\t? this._getWinding(point)\n\t\t\t\t\t: {};\n\t\treturn winding.onPath || !!(this.getFillRule() === 'evenodd'\n\t\t\t\t? winding.windingL & 1 || winding.windingR & 1\n\t\t\t\t: winding.winding);\n\t},\n\n\tgetIntersections: function(path, include, _matrix, _returnFirst) {\n\t\tvar self = this === path || !path,\n\t\t\tmatrix1 = this._matrix._orNullIfIdentity(),\n\t\t\tmatrix2 = self ? matrix1\n\t\t\t\t: (_matrix || path._matrix)._orNullIfIdentity();\n\t\treturn self || this.getBounds(matrix1).intersects(\n\t\t\t\tpath.getBounds(matrix2), 1e-12)\n\t\t\t\t? Curve.getIntersections(\n\t\t\t\t\t\tthis.getCurves(), !self && path.getCurves(), include,\n\t\t\t\t\t\tmatrix1, matrix2, _returnFirst)\n\t\t\t\t: [];\n\t},\n\n\tgetCrossings: function(path) {\n\t\treturn this.getIntersections(path, function(inter) {\n\t\t\treturn inter.isCrossing();\n\t\t});\n\t},\n\n\tgetNearestLocation: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves(),\n\t\t\tminDist = Infinity,\n\t\t\tminLoc = null;\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getNearestLocation(point);\n\t\t\tif (loc._distance < minDist) {\n\t\t\t\tminDist = loc._distance;\n\t\t\t\tminLoc = loc;\n\t\t\t}\n\t\t}\n\t\treturn minLoc;\n\t},\n\n\tgetNearestPoint: function() {\n\t\tvar loc = this.getNearestLocation.apply(this, arguments);\n\t\treturn loc ? loc.getPoint() : loc;\n\t},\n\n\tinterpolate: function(from, to, factor) {\n\t\tvar isPath = !this._children,\n\t\t\tname = isPath ? '_segments' : '_children',\n\t\t\titemsFrom = from[name],\n\t\t\titemsTo = to[name],\n\t\t\titems = this[name];\n\t\tif (!itemsFrom || !itemsTo || itemsFrom.length !== itemsTo.length) {\n\t\t\tthrow new Error('Invalid operands in interpolate() call: ' +\n\t\t\t\t\tfrom + ', ' + to);\n\t\t}\n\t\tvar current = items.length,\n\t\t\tlength = itemsTo.length;\n\t\tif (current < length) {\n\t\t\tvar ctor = isPath ? Segment : Path;\n\t\t\tfor (var i = current; i < length; i++) {\n\t\t\t\tthis.add(new ctor());\n\t\t\t}\n\t\t} else if (current > length) {\n\t\t\tthis[isPath ? 'removeSegments' : 'removeChildren'](length, current);\n\t\t}\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\titems[i].interpolate(itemsFrom[i], itemsTo[i], factor);\n\t\t}\n\t\tif (isPath) {\n\t\t\tthis.setClosed(from._closed);\n\t\t\tthis._changed(9);\n\t\t}\n\t},\n\n\tcompare: function(path) {\n\t\tvar ok = false;\n\t\tif (path) {\n\t\t\tvar paths1 = this._children || [this],\n\t\t\t\tpaths2 = path._children ? path._children.slice() : [path],\n\t\t\t\tlength1 = paths1.length,\n\t\t\t\tlength2 = paths2.length,\n\t\t\t\tmatched = [],\n\t\t\t\tcount = 0;\n\t\t\tok = true;\n\t\t\tvar boundsOverlaps = CollisionDetection.findItemBoundsCollisions(paths1, paths2, Numerical.GEOMETRIC_EPSILON);\n\t\t\tfor (var i1 = length1 - 1; i1 >= 0 && ok; i1--) {\n\t\t\t\tvar path1 = paths1[i1];\n\t\t\t\tok = false;\n\t\t\t\tvar pathBoundsOverlaps = boundsOverlaps[i1];\n\t\t\t\tif (pathBoundsOverlaps) {\n\t\t\t\t\tfor (var i2 = pathBoundsOverlaps.length - 1; i2 >= 0 && !ok; i2--) {\n\t\t\t\t\t\tif (path1.compare(paths2[pathBoundsOverlaps[i2]])) {\n\t\t\t\t\t\t\tif (!matched[pathBoundsOverlaps[i2]]) {\n\t\t\t\t\t\t\t\tmatched[pathBoundsOverlaps[i2]] = true;\n\t\t\t\t\t\t\t\tcount++;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tok = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tok = ok && count === length2;\n\t\t}\n\t\treturn ok;\n\t},\n\n});\n\nvar Path = PathItem.extend({\n\t_class: 'Path',\n\t_serializeFields: {\n\t\tsegments: [],\n\t\tclosed: false\n\t},\n\n\tinitialize: function Path(arg) {\n\t\tthis._closed = false;\n\t\tthis._segments = [];\n\t\tthis._version = 0;\n\t\tvar args = arguments,\n\t\t\tsegments = Array.isArray(arg)\n\t\t\t? typeof arg[0] === 'object'\n\t\t\t\t? arg\n\t\t\t\t: args\n\t\t\t: arg && (arg.size === undefined && (arg.x !== undefined\n\t\t\t\t\t|| arg.point !== undefined))\n\t\t\t\t? args\n\t\t\t\t: null;\n\t\tif (segments && segments.length > 0) {\n\t\t\tthis.setSegments(segments);\n\t\t} else {\n\t\t\tthis._curves = undefined;\n\t\t\tthis._segmentSelection = 0;\n\t\t\tif (!segments && typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t\targ = null;\n\t\t\t}\n\t\t}\n\t\tthis._initialize(!segments && arg);\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._closed === item._closed\n\t\t\t\t&& Base.equals(this._segments, item._segments);\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setSegments(source._segments);\n\t\tthis._closed = source._closed;\n\t},\n\n\t_changed: function _changed(flags) {\n\t\t_changed.base.call(this, flags);\n\t\tif (flags & 8) {\n\t\t\tthis._length = this._area = undefined;\n\t\t\tif (flags & 32) {\n\t\t\t\tthis._version++;\n\t\t\t} else if (this._curves) {\n\t\t\t for (var i = 0, l = this._curves.length; i < l; i++)\n\t\t\t\t\tthis._curves[i]._changed();\n\t\t\t}\n\t\t} else if (flags & 64) {\n\t\t\tthis._bounds = undefined;\n\t\t}\n\t},\n\n\tgetStyle: function() {\n\t\tvar parent = this._parent;\n\t\treturn (parent instanceof CompoundPath ? parent : this)._style;\n\t},\n\n\tgetSegments: function() {\n\t\treturn this._segments;\n\t},\n\n\tsetSegments: function(segments) {\n\t\tvar fullySelected = this.isFullySelected(),\n\t\t\tlength = segments && segments.length;\n\t\tthis._segments.length = 0;\n\t\tthis._segmentSelection = 0;\n\t\tthis._curves = undefined;\n\t\tif (length) {\n\t\t\tvar last = segments[length - 1];\n\t\t\tif (typeof last === 'boolean') {\n\t\t\t\tthis.setClosed(last);\n\t\t\t\tlength--;\n\t\t\t}\n\t\t\tthis._add(Segment.readList(segments, 0, {}, length));\n\t\t}\n\t\tif (fullySelected)\n\t\t\tthis.setFullySelected(true);\n\t},\n\n\tgetFirstSegment: function() {\n\t\treturn this._segments[0];\n\t},\n\n\tgetLastSegment: function() {\n\t\treturn this._segments[this._segments.length - 1];\n\t},\n\n\tgetCurves: function() {\n\t\tvar curves = this._curves,\n\t\t\tsegments = this._segments;\n\t\tif (!curves) {\n\t\t\tvar length = this._countCurves();\n\t\t\tcurves = this._curves = new Array(length);\n\t\t\tfor (var i = 0; i < length; i++)\n\t\t\t\tcurves[i] = new Curve(this, segments[i],\n\t\t\t\t\tsegments[i + 1] || segments[0]);\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\treturn this.getCurves()[0];\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar curves = this.getCurves();\n\t\treturn curves[curves.length - 1];\n\t},\n\n\tisClosed: function() {\n\t\treturn this._closed;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tif (this._closed != (closed = !!closed)) {\n\t\t\tthis._closed = closed;\n\t\t\tif (this._curves) {\n\t\t\t\tvar length = this._curves.length = this._countCurves();\n\t\t\t\tif (closed)\n\t\t\t\t\tthis._curves[length - 1] = new Curve(this,\n\t\t\t\t\t\tthis._segments[length - 1], this._segments[0]);\n\t\t\t}\n\t\t\tthis._changed(41);\n\t\t}\n\t}\n}, {\n\tbeans: true,\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tf = new Formatter(_precision),\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY,\n\t\t\tparts = [];\n\n\t\tfunction addSegment(segment, skipLine) {\n\t\t\tsegment._transformCoordinates(_matrix, coords);\n\t\t\tcurX = coords[0];\n\t\t\tcurY = coords[1];\n\t\t\tif (first) {\n\t\t\t\tparts.push('M' + f.pair(curX, curY));\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tinX = coords[2];\n\t\t\t\tinY = coords[3];\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tif (!skipLine) {\n\t\t\t\t\t\tvar dx = curX - prevX,\n\t\t\t\t\t\t\tdy = curY - prevY;\n\t\t\t\t\t\tparts.push(\n\t\t\t\t\t\t\t dx === 0 ? 'v' + f.number(dy)\n\t\t\t\t\t\t\t: dy === 0 ? 'h' + f.number(dx)\n\t\t\t\t\t\t\t: 'l' + f.pair(dx, dy));\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tparts.push('c' + f.pair(outX - prevX, outY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair( inX - prevX, inY - prevY)\n\t\t\t\t\t\t\t + ' ' + f.pair(curX - prevX, curY - prevY));\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\toutX = coords[4];\n\t\t\toutY = coords[5];\n\t\t}\n\n\t\tif (!length)\n\t\t\treturn '';\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\taddSegment(segments[i]);\n\t\tif (this._closed && length > 0) {\n\t\t\taddSegment(segments[0], true);\n\t\t\tparts.push('z');\n\t\t}\n\t\treturn parts.join('');\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._segments.length;\n\t},\n\n\t_transformContent: function(matrix) {\n\t\tvar segments = this._segments,\n\t\t\tcoords = new Array(6);\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._transformCoordinates(matrix, coords, true);\n\t\treturn true;\n\t},\n\n\t_add: function(segs, index) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tamount = segs.length,\n\t\t\tappend = index == null,\n\t\t\tindex = append ? segments.length : index;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = segs[i];\n\t\t\tif (segment._path)\n\t\t\t\tsegment = segs[i] = segment.clone();\n\t\t\tsegment._path = this;\n\t\t\tsegment._index = index + i;\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, 0, segment._selection);\n\t\t}\n\t\tif (append) {\n\t\t\tBase.push(segments, segs);\n\t\t} else {\n\t\t\tsegments.splice.apply(segments, [index, 0].concat(segs));\n\t\t\tfor (var i = index + amount, l = segments.length; i < l; i++)\n\t\t\t\tsegments[i]._index = i;\n\t\t}\n\t\tif (curves) {\n\t\t\tvar total = this._countCurves(),\n\t\t\t\tstart = index > 0 && index + amount - 1 === total ? index - 1\n\t\t\t\t\t: index,\n\t\t\t\tinsert = start,\n\t\t\t\tend = Math.min(start + amount, total);\n\t\t\tif (segs._curves) {\n\t\t\t\tcurves.splice.apply(curves, [start, 0].concat(segs._curves));\n\t\t\t\tinsert += segs._curves.length;\n\t\t\t}\n\t\t\tfor (var i = insert; i < end; i++)\n\t\t\t\tcurves.splice(i, 0, new Curve(this, null, null));\n\t\t\tthis._adjustCurves(start, end);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn segs;\n\t},\n\n\t_adjustCurves: function(start, end) {\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcurve;\n\t\tfor (var i = start; i < end; i++) {\n\t\t\tcurve = curves[i];\n\t\t\tcurve._path = this;\n\t\t\tcurve._segment1 = segments[i];\n\t\t\tcurve._segment2 = segments[i + 1] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[this._closed && !start ? segments.length - 1\n\t\t\t\t: start - 1]) {\n\t\t\tcurve._segment2 = segments[start] || segments[0];\n\t\t\tcurve._changed();\n\t\t}\n\t\tif (curve = curves[end]) {\n\t\t\tcurve._segment1 = segments[end];\n\t\t\tcurve._changed();\n\t\t}\n\t},\n\n\t_countCurves: function() {\n\t\tvar length = this._segments.length;\n\t\treturn !this._closed && length > 0 ? length - 1 : length;\n\t},\n\n\tadd: function(segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 1 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args))\n\t\t\t: this._add([ Segment.read(args) ])[0];\n\t},\n\n\tinsert: function(index, segment1 ) {\n\t\tvar args = arguments;\n\t\treturn args.length > 2 && typeof segment1 !== 'number'\n\t\t\t? this._add(Segment.readList(args, 1), index)\n\t\t\t: this._add([ Segment.read(args, 1) ], index)[0];\n\t},\n\n\taddSegment: function() {\n\t\treturn this._add([ Segment.read(arguments) ])[0];\n\t},\n\n\tinsertSegment: function(index ) {\n\t\treturn this._add([ Segment.read(arguments, 1) ], index)[0];\n\t},\n\n\taddSegments: function(segments) {\n\t\treturn this._add(Segment.readList(segments));\n\t},\n\n\tinsertSegments: function(index, segments) {\n\t\treturn this._add(Segment.readList(segments), index);\n\t},\n\n\tremoveSegment: function(index) {\n\t\treturn this.removeSegments(index, index + 1)[0] || null;\n\t},\n\n\tremoveSegments: function(start, end, _includeCurves) {\n\t\tstart = start || 0;\n\t\tend = Base.pick(end, this._segments.length);\n\t\tvar segments = this._segments,\n\t\t\tcurves = this._curves,\n\t\t\tcount = segments.length,\n\t\t\tremoved = segments.splice(start, end - start),\n\t\t\tamount = removed.length;\n\t\tif (!amount)\n\t\t\treturn removed;\n\t\tfor (var i = 0; i < amount; i++) {\n\t\t\tvar segment = removed[i];\n\t\t\tif (segment._selection)\n\t\t\t\tthis._updateSelection(segment, segment._selection, 0);\n\t\t\tsegment._index = segment._path = null;\n\t\t}\n\t\tfor (var i = start, l = segments.length; i < l; i++)\n\t\t\tsegments[i]._index = i;\n\t\tif (curves) {\n\t\t\tvar index = start > 0 && end === count + (this._closed ? 1 : 0)\n\t\t\t\t\t? start - 1\n\t\t\t\t\t: start,\n\t\t\t\tcurves = curves.splice(index, amount);\n\t\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\t\tcurves[i]._path = null;\n\t\t\tif (_includeCurves)\n\t\t\t\tremoved._curves = curves.slice(1);\n\t\t\tthis._adjustCurves(index, index);\n\t\t}\n\t\tthis._changed(41);\n\t\treturn removed;\n\t},\n\n\tclear: '#removeSegments',\n\n\thasHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tif (segments[i].hasHandles())\n\t\t\t\treturn true;\n\t\t}\n\t\treturn false;\n\t},\n\n\tclearHandles: function() {\n\t\tvar segments = this._segments;\n\t\tfor (var i = 0, l = segments.length; i < l; i++)\n\t\t\tsegments[i].clearHandles();\n\t},\n\n\tgetLength: function() {\n\t\tif (this._length == null) {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++)\n\t\t\t\tlength += curves[i].getLength();\n\t\t\tthis._length = length;\n\t\t}\n\t\treturn this._length;\n\t},\n\n\tgetArea: function() {\n\t\tvar area = this._area;\n\t\tif (area == null) {\n\t\t\tvar segments = this._segments,\n\t\t\t\tclosed = this._closed;\n\t\t\tarea = 0;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar last = i + 1 === l;\n\t\t\t\tarea += Curve.getArea(Curve.getValues(\n\t\t\t\t\t\tsegments[i], segments[last ? 0 : i + 1],\n\t\t\t\t\t\tnull, last && !closed));\n\t\t\t}\n\t\t\tthis._area = area;\n\t\t}\n\t\treturn area;\n\t},\n\n\tisFullySelected: function() {\n\t\tvar length = this._segments.length;\n\t\treturn this.isSelected() && length > 0 && this._segmentSelection\n\t\t\t\t=== length * 7;\n\t},\n\n\tsetFullySelected: function(selected) {\n\t\tif (selected)\n\t\t\tthis._selectSegments(true);\n\t\tthis.setSelected(selected);\n\t},\n\n\tsetSelection: function setSelection(selection) {\n\t\tif (!(selection & 1))\n\t\t\tthis._selectSegments(false);\n\t\tsetSelection.base.call(this, selection);\n\t},\n\n\t_selectSegments: function(selected) {\n\t\tvar segments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tselection = selected ? 7 : 0;\n\t\tthis._segmentSelection = selection * length;\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tsegments[i]._selection = selection;\n\t},\n\n\t_updateSelection: function(segment, oldSelection, newSelection) {\n\t\tsegment._selection = newSelection;\n\t\tvar selection = this._segmentSelection += newSelection - oldSelection;\n\t\tif (selection > 0)\n\t\t\tthis.setSelected(true);\n\t},\n\n\tdivideAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tcurve;\n\t\treturn loc && (curve = loc.getCurve().divideAt(loc.getCurveOffset()))\n\t\t\t\t? curve._segment1\n\t\t\t\t: null;\n\t},\n\n\tsplitAt: function(location) {\n\t\tvar loc = this.getLocationAt(location),\n\t\t\tindex = loc && loc.index,\n\t\t\ttime = loc && loc.time,\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin;\n\t\tif (time > tMax) {\n\t\t\tindex++;\n\t\t\ttime = 0;\n\t\t}\n\t\tvar curves = this.getCurves();\n\t\tif (index >= 0 && index < curves.length) {\n\t\t\tif (time >= tMin) {\n\t\t\t\tcurves[index++].divideAtTime(time);\n\t\t\t}\n\t\t\tvar segs = this.removeSegments(index, this._segments.length, true),\n\t\t\t\tpath;\n\t\t\tif (this._closed) {\n\t\t\t\tthis.setClosed(false);\n\t\t\t\tpath = this;\n\t\t\t} else {\n\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\tpath.insertAbove(this);\n\t\t\t\tpath.copyAttributes(this);\n\t\t\t}\n\t\t\tpath._add(segs, 0);\n\t\t\tthis.addSegment(segs[0]);\n\t\t\treturn path;\n\t\t}\n\t\treturn null;\n\t},\n\n\tsplit: function(index, time) {\n\t\tvar curve,\n\t\t\tlocation = time === undefined ? index\n\t\t\t\t: (curve = this.getCurves()[index])\n\t\t\t\t\t&& curve.getLocationAtTime(time);\n\t\treturn location != null ? this.splitAt(location) : null;\n\t},\n\n\tjoin: function(path, tolerance) {\n\t\tvar epsilon = tolerance || 0;\n\t\tif (path && path !== this) {\n\t\t\tvar segments = path._segments,\n\t\t\t\tlast1 = this.getLastSegment(),\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\tif (!last2)\n\t\t\t\treturn this;\n\t\t\tif (last1 && last1._point.isClose(last2._point, epsilon))\n\t\t\t\tpath.reverse();\n\t\t\tvar first2 = path.getFirstSegment();\n\t\t\tif (last1 && last1._point.isClose(first2._point, epsilon)) {\n\t\t\t\tlast1.setHandleOut(first2._handleOut);\n\t\t\t\tthis._add(segments.slice(1));\n\t\t\t} else {\n\t\t\t\tvar first1 = this.getFirstSegment();\n\t\t\t\tif (first1 && first1._point.isClose(first2._point, epsilon))\n\t\t\t\t\tpath.reverse();\n\t\t\t\tlast2 = path.getLastSegment();\n\t\t\t\tif (first1 && first1._point.isClose(last2._point, epsilon)) {\n\t\t\t\t\tfirst1.setHandleIn(last2._handleIn);\n\t\t\t\t\tthis._add(segments.slice(0, segments.length - 1), 0);\n\t\t\t\t} else {\n\t\t\t\t\tthis._add(segments.slice());\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (path._closed)\n\t\t\t\tthis._add([segments[0]]);\n\t\t\tpath.remove();\n\t\t}\n\t\tvar first = this.getFirstSegment(),\n\t\t\tlast = this.getLastSegment();\n\t\tif (first !== last && first._point.isClose(last._point, epsilon)) {\n\t\t\tfirst.setHandleIn(last._handleIn);\n\t\t\tlast.remove();\n\t\t\tthis.setClosed(true);\n\t\t}\n\t\treturn this;\n\t},\n\n\treduce: function(options) {\n\t\tvar curves = this.getCurves(),\n\t\t\tsimplify = options && options.simplify,\n\t\t\ttolerance = simplify ? 1e-7 : 0;\n\t\tfor (var i = curves.length - 1; i >= 0; i--) {\n\t\t\tvar curve = curves[i];\n\t\t\tif (!curve.hasHandles() && (!curve.hasLength(tolerance)\n\t\t\t\t\t|| simplify && curve.isCollinear(curve.getNext())))\n\t\t\t\tcurve.remove();\n\t\t}\n\t\treturn this;\n\t},\n\n\treverse: function() {\n\t\tthis._segments.reverse();\n\t\tfor (var i = 0, l = this._segments.length; i < l; i++) {\n\t\t\tvar segment = this._segments[i];\n\t\t\tvar handleIn = segment._handleIn;\n\t\t\tsegment._handleIn = segment._handleOut;\n\t\t\tsegment._handleOut = handleIn;\n\t\t\tsegment._index = i;\n\t\t}\n\t\tthis._curves = null;\n\t\tthis._changed(9);\n\t},\n\n\tflatten: function(flatness) {\n\t\tvar flattener = new PathFlattener(this, flatness || 0.25, 256, true),\n\t\t\tparts = flattener.parts,\n\t\t\tlength = parts.length,\n\t\t\tsegments = [];\n\t\tfor (var i = 0; i < length; i++) {\n\t\t\tsegments.push(new Segment(parts[i].curve.slice(0, 2)));\n\t\t}\n\t\tif (!this._closed && length > 0) {\n\t\t\tsegments.push(new Segment(parts[length - 1].curve.slice(6)));\n\t\t}\n\t\tthis.setSegments(segments);\n\t},\n\n\tsimplify: function(tolerance) {\n\t\tvar segments = new PathFitter(this).fit(tolerance || 2.5);\n\t\tif (segments)\n\t\t\tthis.setSegments(segments);\n\t\treturn !!segments;\n\t},\n\n\tsmooth: function(options) {\n\t\tvar that = this,\n\t\t\topts = options || {},\n\t\t\ttype = opts.type || 'asymmetric',\n\t\t\tsegments = this._segments,\n\t\t\tlength = segments.length,\n\t\t\tclosed = this._closed;\n\n\t\tfunction getIndex(value, _default) {\n\t\t\tvar index = value && value.index;\n\t\t\tif (index != null) {\n\t\t\t\tvar path = value.path;\n\t\t\t\tif (path && path !== that)\n\t\t\t\t\tthrow new Error(value._class + ' ' + index + ' of ' + path\n\t\t\t\t\t\t\t+ ' is not part of ' + that);\n\t\t\t\tif (_default && value instanceof Curve)\n\t\t\t\t\tindex++;\n\t\t\t} else {\n\t\t\t\tindex = typeof value === 'number' ? value : _default;\n\t\t\t}\n\t\t\treturn Math.min(index < 0 && closed\n\t\t\t\t\t? index % length\n\t\t\t\t\t: index < 0 ? index + length : index, length - 1);\n\t\t}\n\n\t\tvar loop = closed && opts.from === undefined && opts.to === undefined,\n\t\t\tfrom = getIndex(opts.from, 0),\n\t\t\tto = getIndex(opts.to, length - 1);\n\n\t\tif (from > to) {\n\t\t\tif (closed) {\n\t\t\t\tfrom -= length;\n\t\t\t} else {\n\t\t\t\tvar tmp = from;\n\t\t\t\tfrom = to;\n\t\t\t\tto = tmp;\n\t\t\t}\n\t\t}\n\t\tif (/^(?:asymmetric|continuous)$/.test(type)) {\n\t\t\tvar asymmetric = type === 'asymmetric',\n\t\t\t\tmin = Math.min,\n\t\t\t\tamount = to - from + 1,\n\t\t\t\tn = amount - 1,\n\t\t\t\tpadding = loop ? min(amount, 4) : 1,\n\t\t\t\tpaddingLeft = padding,\n\t\t\t\tpaddingRight = padding,\n\t\t\t\tknots = [];\n\t\t\tif (!closed) {\n\t\t\t\tpaddingLeft = min(1, from);\n\t\t\t\tpaddingRight = min(1, length - to - 1);\n\t\t\t}\n\t\t\tn += paddingLeft + paddingRight;\n\t\t\tif (n <= 1)\n\t\t\t\treturn;\n\t\t\tfor (var i = 0, j = from - paddingLeft; i <= n; i++, j++) {\n\t\t\t\tknots[i] = segments[(j < 0 ? j + length : j) % length]._point;\n\t\t\t}\n\n\t\t\tvar x = knots[0]._x + 2 * knots[1]._x,\n\t\t\t\ty = knots[0]._y + 2 * knots[1]._y,\n\t\t\t\tf = 2,\n\t\t\t\tn_1 = n - 1,\n\t\t\t\trx = [x],\n\t\t\t\try = [y],\n\t\t\t\trf = [f],\n\t\t\t\tpx = [],\n\t\t\t\tpy = [];\n\t\t\tfor (var i = 1; i < n; i++) {\n\t\t\t\tvar internal = i < n_1,\n\t\t\t\t\ta = internal ? 1 : asymmetric ? 1 : 2,\n\t\t\t\t\tb = internal ? 4 : asymmetric ? 2 : 7,\n\t\t\t\t\tu = internal ? 4 : asymmetric ? 3 : 8,\n\t\t\t\t\tv = internal ? 2 : asymmetric ? 0 : 1,\n\t\t\t\t\tm = a / f;\n\t\t\t\tf = rf[i] = b - m;\n\t\t\t\tx = rx[i] = u * knots[i]._x + v * knots[i + 1]._x - m * x;\n\t\t\t\ty = ry[i] = u * knots[i]._y + v * knots[i + 1]._y - m * y;\n\t\t\t}\n\n\t\t\tpx[n_1] = rx[n_1] / rf[n_1];\n\t\t\tpy[n_1] = ry[n_1] / rf[n_1];\n\t\t\tfor (var i = n - 2; i >= 0; i--) {\n\t\t\t\tpx[i] = (rx[i] - px[i + 1]) / rf[i];\n\t\t\t\tpy[i] = (ry[i] - py[i + 1]) / rf[i];\n\t\t\t}\n\t\t\tpx[n] = (3 * knots[n]._x - px[n_1]) / 2;\n\t\t\tpy[n] = (3 * knots[n]._y - py[n_1]) / 2;\n\n\t\t\tfor (var i = paddingLeft, max = n - paddingRight, j = from;\n\t\t\t\t\ti <= max; i++, j++) {\n\t\t\t\tvar segment = segments[j < 0 ? j + length : j],\n\t\t\t\t\tpt = segment._point,\n\t\t\t\t\thx = px[i] - pt._x,\n\t\t\t\t\thy = py[i] - pt._y;\n\t\t\t\tif (loop || i < max)\n\t\t\t\t\tsegment.setHandleOut(hx, hy);\n\t\t\t\tif (loop || i > paddingLeft)\n\t\t\t\t\tsegment.setHandleIn(-hx, -hy);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (var i = from; i <= to; i++) {\n\t\t\t\tsegments[i < 0 ? i + length : i].smooth(opts,\n\t\t\t\t\t\t!loop && i === from, !loop && i === to);\n\t\t\t}\n\t\t}\n\t},\n\n\ttoShape: function(insert) {\n\t\tif (!this._closed)\n\t\t\treturn null;\n\n\t\tvar segments = this._segments,\n\t\t\ttype,\n\t\t\tsize,\n\t\t\tradius,\n\t\t\ttopCenter;\n\n\t\tfunction isCollinear(i, j) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\tseg3 = segments[j],\n\t\t\t\tseg4 = seg3.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg3._handleOut.isZero() && seg4._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isCollinear(\n\t\t\t\t\t\tseg4._point.subtract(seg3._point));\n\t\t}\n\n\t\tfunction isOrthogonal(i) {\n\t\t\tvar seg2 = segments[i],\n\t\t\t\tseg1 = seg2.getPrevious(),\n\t\t\t\tseg3 = seg2.getNext();\n\t\t\treturn seg1._handleOut.isZero() && seg2._handleIn.isZero()\n\t\t\t\t\t&& seg2._handleOut.isZero() && seg3._handleIn.isZero()\n\t\t\t\t\t&& seg2._point.subtract(seg1._point).isOrthogonal(\n\t\t\t\t\t\tseg3._point.subtract(seg2._point));\n\t\t}\n\n\t\tfunction isArc(i) {\n\t\t\tvar seg1 = segments[i],\n\t\t\t\tseg2 = seg1.getNext(),\n\t\t\t\thandle1 = seg1._handleOut,\n\t\t\t\thandle2 = seg2._handleIn,\n\t\t\t\tkappa = 0.5522847498307936;\n\t\t\tif (handle1.isOrthogonal(handle2)) {\n\t\t\t\tvar pt1 = seg1._point,\n\t\t\t\t\tpt2 = seg2._point,\n\t\t\t\t\tcorner = new Line(pt1, handle1, true).intersect(\n\t\t\t\t\t\t\tnew Line(pt2, handle2, true), true);\n\t\t\t\treturn corner && Numerical.isZero(handle1.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt1).getLength() - kappa)\n\t\t\t\t\t&& Numerical.isZero(handle2.getLength() /\n\t\t\t\t\t\tcorner.subtract(pt2).getLength() - kappa);\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction getDistance(i, j) {\n\t\t\treturn segments[i]._point.getDistance(segments[j]._point);\n\t\t}\n\n\t\tif (!this.hasHandles() && segments.length === 4\n\t\t\t\t&& isCollinear(0, 2) && isCollinear(1, 3) && isOrthogonal(1)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(0, 3), getDistance(0, 1));\n\t\t\ttopCenter = segments[1]._point.add(segments[2]._point).divide(2);\n\t\t} else if (segments.length === 8 && isArc(0) && isArc(2) && isArc(4)\n\t\t\t\t&& isArc(6) && isCollinear(1, 5) && isCollinear(3, 7)) {\n\t\t\ttype = Shape.Rectangle;\n\t\t\tsize = new Size(getDistance(1, 6), getDistance(0, 3));\n\t\t\tradius = size.subtract(new Size(getDistance(0, 7),\n\t\t\t\t\tgetDistance(1, 2))).divide(2);\n\t\t\ttopCenter = segments[3]._point.add(segments[4]._point).divide(2);\n\t\t} else if (segments.length === 4\n\t\t\t\t&& isArc(0) && isArc(1) && isArc(2) && isArc(3)) {\n\t\t\tif (Numerical.isZero(getDistance(0, 2) - getDistance(1, 3))) {\n\t\t\t\ttype = Shape.Circle;\n\t\t\t\tradius = getDistance(0, 2) / 2;\n\t\t\t} else {\n\t\t\t\ttype = Shape.Ellipse;\n\t\t\t\tradius = new Size(getDistance(2, 0) / 2, getDistance(3, 1) / 2);\n\t\t\t}\n\t\t\ttopCenter = segments[1]._point;\n\t\t}\n\n\t\tif (type) {\n\t\t\tvar center = this.getPosition(true),\n\t\t\t\tshape = new type({\n\t\t\t\t\tcenter: center,\n\t\t\t\t\tsize: size,\n\t\t\t\t\tradius: radius,\n\t\t\t\t\tinsert: false\n\t\t\t\t});\n\t\t\tshape.copyAttributes(this, true);\n\t\t\tshape._matrix.prepend(this._matrix);\n\t\t\tshape.rotate(topCenter.subtract(center).getAngle() + 90);\n\t\t\tif (insert === undefined || insert)\n\t\t\t\tshape.insertAbove(this);\n\t\t\treturn shape;\n\t\t}\n\t\treturn null;\n\t},\n\n\ttoPath: '#clone',\n\n\tcompare: function compare(path) {\n\t\tif (!path || path instanceof CompoundPath)\n\t\t\treturn compare.base.call(this, path);\n\t\tvar curves1 = this.getCurves(),\n\t\t\tcurves2 = path.getCurves(),\n\t\t\tlength1 = curves1.length,\n\t\t\tlength2 = curves2.length;\n\t\tif (!length1 || !length2) {\n\t\t\treturn length1 == length2;\n\t\t}\n\t\tvar v1 = curves1[0].getValues(),\n\t\t\tvalues2 = [],\n\t\t\tpos1 = 0, pos2,\n\t\t\tend1 = 0, end2;\n\t\tfor (var i = 0; i < length2; i++) {\n\t\t\tvar v2 = curves2[i].getValues();\n\t\t\tvalues2.push(v2);\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tpos2 = !i && overlaps[0][0] > 0 ? length2 - 1 : i;\n\t\t\t\tend2 = overlaps[0][1];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar abs = Math.abs,\n\t\t\tepsilon = 1e-8,\n\t\t\tv2 = values2[pos2],\n\t\t\tstart2;\n\t\twhile (v1 && v2) {\n\t\t\tvar overlaps = Curve.getOverlaps(v1, v2);\n\t\t\tif (overlaps) {\n\t\t\t\tvar t1 = overlaps[0][0];\n\t\t\t\tif (abs(t1 - end1) < epsilon) {\n\t\t\t\t\tend1 = overlaps[1][0];\n\t\t\t\t\tif (end1 === 1) {\n\t\t\t\t\t\tv1 = ++pos1 < length1 ? curves1[pos1].getValues() : null;\n\t\t\t\t\t\tend1 = 0;\n\t\t\t\t\t}\n\t\t\t\t\tvar t2 = overlaps[0][1];\n\t\t\t\t\tif (abs(t2 - end2) < epsilon) {\n\t\t\t\t\t\tif (!start2)\n\t\t\t\t\t\t\tstart2 = [pos2, t2];\n\t\t\t\t\t\tend2 = overlaps[1][1];\n\t\t\t\t\t\tif (end2 === 1) {\n\t\t\t\t\t\t\tif (++pos2 >= length2)\n\t\t\t\t\t\t\t\tpos2 = 0;\n\t\t\t\t\t\t\tv2 = values2[pos2] || curves2[pos2].getValues();\n\t\t\t\t\t\t\tend2 = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (!v1) {\n\t\t\t\t\t\t\treturn start2[0] === pos2 && start2[1] === end2;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tbreak;\n\t\t}\n\t\treturn false;\n\t},\n\n\t_hitTestSelf: function(point, options, viewMatrix, strokeMatrix) {\n\t\tvar that = this,\n\t\t\tstyle = this.getStyle(),\n\t\t\tsegments = this._segments,\n\t\t\tnumSegments = segments.length,\n\t\t\tclosed = this._closed,\n\t\t\ttolerancePadding = options._tolerancePadding,\n\t\t\tstrokePadding = tolerancePadding,\n\t\t\tjoin, cap, miterLimit,\n\t\t\tarea, loc, res,\n\t\t\thitStroke = options.stroke && style.hasStroke(),\n\t\t\thitFill = options.fill && style.hasFill(),\n\t\t\thitCurves = options.curves,\n\t\t\tstrokeRadius = hitStroke\n\t\t\t\t\t? style.getStrokeWidth() / 2\n\t\t\t\t\t: hitFill && options.tolerance > 0 || hitCurves\n\t\t\t\t\t\t? 0 : null;\n\t\tif (strokeRadius !== null) {\n\t\t\tif (strokeRadius > 0) {\n\t\t\t\tjoin = style.getStrokeJoin();\n\t\t\t\tcap = style.getStrokeCap();\n\t\t\t\tmiterLimit = style.getMiterLimit();\n\t\t\t\tstrokePadding = strokePadding.add(\n\t\t\t\t\tPath._getStrokePadding(strokeRadius, strokeMatrix));\n\t\t\t} else {\n\t\t\t\tjoin = cap = 'round';\n\t\t\t}\n\t\t}\n\n\t\tfunction isCloseEnough(pt, padding) {\n\t\t\treturn point.subtract(pt).divide(padding).length <= 1;\n\t\t}\n\n\t\tfunction checkSegmentPoint(seg, pt, name) {\n\t\t\tif (!options.selected || pt.isSelected()) {\n\t\t\t\tvar anchor = seg._point;\n\t\t\t\tif (pt !== anchor)\n\t\t\t\t\tpt = pt.add(anchor);\n\t\t\t\tif (isCloseEnough(pt, strokePadding)) {\n\t\t\t\t\treturn new HitResult(name, that, {\n\t\t\t\t\t\tsegment: seg,\n\t\t\t\t\t\tpoint: pt\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction checkSegmentPoints(seg, ends) {\n\t\t\treturn (ends || options.segments)\n\t\t\t\t&& checkSegmentPoint(seg, seg._point, 'segment')\n\t\t\t\t|| (!ends && options.handles) && (\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleIn, 'handle-in') ||\n\t\t\t\t\tcheckSegmentPoint(seg, seg._handleOut, 'handle-out'));\n\t\t}\n\n\t\tfunction addToArea(point) {\n\t\t\tarea.add(point);\n\t\t}\n\n\t\tfunction checkSegmentStroke(segment) {\n\t\t\tvar isJoin = closed || segment._index > 0\n\t\t\t\t\t&& segment._index < numSegments - 1;\n\t\t\tif ((isJoin ? join : cap) === 'round') {\n\t\t\t\treturn isCloseEnough(segment._point, strokePadding);\n\t\t\t} else {\n\t\t\t\tarea = new Path({ internal: true, closed: true });\n\t\t\t\tif (isJoin) {\n\t\t\t\t\tif (!segment.isSmooth()) {\n\t\t\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius,\n\t\t\t\t\t\t\t miterLimit, null, strokeMatrix, addToArea, true);\n\t\t\t\t\t}\n\t\t\t\t} else if (cap === 'square') {\n\t\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, null,\n\t\t\t\t\t\t\tstrokeMatrix, addToArea, true);\n\t\t\t\t}\n\t\t\t\tif (!area.isEmpty()) {\n\t\t\t\t\tvar loc;\n\t\t\t\t\treturn area.contains(point)\n\t\t\t\t\t\t|| (loc = area.getNearestLocation(point))\n\t\t\t\t\t\t\t&& isCloseEnough(loc.getPoint(), tolerancePadding);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (options.ends && !options.segments && !closed) {\n\t\t\tif (res = checkSegmentPoints(segments[0], true)\n\t\t\t\t\t|| checkSegmentPoints(segments[numSegments - 1], true))\n\t\t\t\treturn res;\n\t\t} else if (options.segments || options.handles) {\n\t\t\tfor (var i = 0; i < numSegments; i++)\n\t\t\t\tif (res = checkSegmentPoints(segments[i]))\n\t\t\t\t\treturn res;\n\t\t}\n\t\tif (strokeRadius !== null) {\n\t\t\tloc = this.getNearestLocation(point);\n\t\t\tif (loc) {\n\t\t\t\tvar time = loc.getTime();\n\t\t\t\tif (time === 0 || time === 1 && numSegments > 1) {\n\t\t\t\t\tif (!checkSegmentStroke(loc.getSegment()))\n\t\t\t\t\t\tloc = null;\n\t\t\t\t} else if (!isCloseEnough(loc.getPoint(), strokePadding)) {\n\t\t\t\t\tloc = null;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!loc && join === 'miter' && numSegments > 1) {\n\t\t\t\tfor (var i = 0; i < numSegments; i++) {\n\t\t\t\t\tvar segment = segments[i];\n\t\t\t\t\tif (point.getDistance(segment._point)\n\t\t\t\t\t\t\t<= miterLimit * strokeRadius\n\t\t\t\t\t\t\t&& checkSegmentStroke(segment)) {\n\t\t\t\t\t\tloc = segment.getLocation();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn !loc && hitFill && this._contains(point)\n\t\t\t\t|| loc && !hitStroke && !hitCurves\n\t\t\t\t\t? new HitResult('fill', this)\n\t\t\t\t\t: loc\n\t\t\t\t\t\t? new HitResult(hitStroke ? 'stroke' : 'curve', this, {\n\t\t\t\t\t\t\tlocation: loc,\n\t\t\t\t\t\t\tpoint: loc.getPoint()\n\t\t\t\t\t\t})\n\t\t\t\t\t\t: null;\n\t}\n\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar loc = this.getLocationAt(offset);\n\t\t\treturn loc && loc[name]();\n\t\t};\n\t},\n{\n\tbeans: false,\n\n\tgetLocationOf: function() {\n\t\tvar point = Point.read(arguments),\n\t\t\tcurves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar loc = curves[i].getLocationOf(point);\n\t\t\tif (loc)\n\t\t\t\treturn loc;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetOf: function() {\n\t\tvar loc = this.getLocationOf.apply(this, arguments);\n\t\treturn loc ? loc.getOffset() : null;\n\t},\n\n\tgetLocationAt: function(offset) {\n\t\tif (typeof offset === 'number') {\n\t\t\tvar curves = this.getCurves(),\n\t\t\t\tlength = 0;\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tvar start = length,\n\t\t\t\t\tcurve = curves[i];\n\t\t\t\tlength += curve.getLength();\n\t\t\t\tif (length > offset) {\n\t\t\t\t\treturn curve.getLocationAt(offset - start);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (curves.length > 0 && offset <= this.getLength()) {\n\t\t\t\treturn new CurveLocation(curves[curves.length - 1], 1);\n\t\t\t}\n\t\t} else if (offset && offset.getPath && offset.getPath() === this) {\n\t\t\treturn offset;\n\t\t}\n\t\treturn null;\n\t},\n\n\tgetOffsetsWithTangent: function() {\n\t\tvar tangent = Point.read(arguments);\n\t\tif (tangent.isZero()) {\n\t\t\treturn [];\n\t\t}\n\n\t\tvar offsets = [];\n\t\tvar curveStart = 0;\n\t\tvar curves = this.getCurves();\n\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\tvar curve = curves[i];\n\t\t\tvar curveTimes = curve.getTimesWithTangent(tangent);\n\t\t\tfor (var j = 0, m = curveTimes.length; j < m; j++) {\n\t\t\t\tvar offset = curveStart + curve.getOffsetAtTime(curveTimes[j]);\n\t\t\t\tif (offsets.indexOf(offset) < 0) {\n\t\t\t\t\toffsets.push(offset);\n\t\t\t\t}\n\t\t\t}\n\t\t\tcurveStart += curve.length;\n\t\t}\n\t\treturn offsets;\n\t}\n}),\nnew function() {\n\n\tfunction drawHandles(ctx, segments, matrix, size) {\n\t\tif (size <= 0) return;\n\n\t\tvar half = size / 2,\n\t\t\tminiSize = size - 2,\n\t\t\tminiHalf = half - 1,\n\t\t\tcoords = new Array(6),\n\t\t\tpX, pY;\n\n\t\tfunction drawHandle(index) {\n\t\t\tvar hX = coords[index],\n\t\t\t\thY = coords[index + 1];\n\t\t\tif (pX != hX || pY != hY) {\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.moveTo(pX, pY);\n\t\t\t\tctx.lineTo(hX, hY);\n\t\t\t\tctx.stroke();\n\t\t\t\tctx.beginPath();\n\t\t\t\tctx.arc(hX, hY, half, 0, Math.PI * 2, true);\n\t\t\t\tctx.fill();\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i],\n\t\t\t\tselection = segment._selection;\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tpX = coords[0];\n\t\t\tpY = coords[1];\n\t\t\tif (selection & 2)\n\t\t\t\tdrawHandle(2);\n\t\t\tif (selection & 4)\n\t\t\t\tdrawHandle(4);\n\t\t\tctx.fillRect(pX - half, pY - half, size, size);\n\t\t\tif (miniSize > 0 && !(selection & 1)) {\n\t\t\t\tvar fillStyle = ctx.fillStyle;\n\t\t\t\tctx.fillStyle = '#ffffff';\n\t\t\t\tctx.fillRect(pX - miniHalf, pY - miniHalf, miniSize, miniSize);\n\t\t\t\tctx.fillStyle = fillStyle;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction drawSegments(ctx, path, matrix) {\n\t\tvar segments = path._segments,\n\t\t\tlength = segments.length,\n\t\t\tcoords = new Array(6),\n\t\t\tfirst = true,\n\t\t\tcurX, curY,\n\t\t\tprevX, prevY,\n\t\t\tinX, inY,\n\t\t\toutX, outY;\n\n\t\tfunction drawSegment(segment) {\n\t\t\tif (matrix) {\n\t\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\t\tcurX = coords[0];\n\t\t\t\tcurY = coords[1];\n\t\t\t} else {\n\t\t\t\tvar point = segment._point;\n\t\t\t\tcurX = point._x;\n\t\t\t\tcurY = point._y;\n\t\t\t}\n\t\t\tif (first) {\n\t\t\t\tctx.moveTo(curX, curY);\n\t\t\t\tfirst = false;\n\t\t\t} else {\n\t\t\t\tif (matrix) {\n\t\t\t\t\tinX = coords[2];\n\t\t\t\t\tinY = coords[3];\n\t\t\t\t} else {\n\t\t\t\t\tvar handle = segment._handleIn;\n\t\t\t\t\tinX = curX + handle._x;\n\t\t\t\t\tinY = curY + handle._y;\n\t\t\t\t}\n\t\t\t\tif (inX === curX && inY === curY\n\t\t\t\t\t\t&& outX === prevX && outY === prevY) {\n\t\t\t\t\tctx.lineTo(curX, curY);\n\t\t\t\t} else {\n\t\t\t\t\tctx.bezierCurveTo(outX, outY, inX, inY, curX, curY);\n\t\t\t\t}\n\t\t\t}\n\t\t\tprevX = curX;\n\t\t\tprevY = curY;\n\t\t\tif (matrix) {\n\t\t\t\toutX = coords[4];\n\t\t\t\toutY = coords[5];\n\t\t\t} else {\n\t\t\t\tvar handle = segment._handleOut;\n\t\t\t\toutX = prevX + handle._x;\n\t\t\t\toutY = prevY + handle._y;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0; i < length; i++)\n\t\t\tdrawSegment(segments[i]);\n\t\tif (path._closed && length > 0)\n\t\t\tdrawSegment(segments[0]);\n\t}\n\n\treturn {\n\t\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\t\tvar dontStart = param.dontStart,\n\t\t\t\tdontPaint = param.dontFinish || param.clip,\n\t\t\t\tstyle = this.getStyle(),\n\t\t\t\thasFill = style.hasFill(),\n\t\t\t\thasStroke = style.hasStroke(),\n\t\t\t\tdashArray = style.getDashArray(),\n\t\t\t\tdashLength = !paper.support.nativeDash && hasStroke\n\t\t\t\t\t\t&& dashArray && dashArray.length;\n\n\t\t\tif (!dontStart)\n\t\t\t\tctx.beginPath();\n\n\t\t\tif (hasFill || hasStroke && !dashLength || dontPaint) {\n\t\t\t\tdrawSegments(ctx, this, strokeMatrix);\n\t\t\t\tif (this._closed)\n\t\t\t\t\tctx.closePath();\n\t\t\t}\n\n\t\t\tfunction getOffset(i) {\n\t\t\t\treturn dashArray[((i % dashLength) + dashLength) % dashLength];\n\t\t\t}\n\n\t\t\tif (!dontPaint && (hasFill || hasStroke)) {\n\t\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\t\tif (hasFill) {\n\t\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t\t}\n\t\t\t\tif (hasStroke) {\n\t\t\t\t\tif (dashLength) {\n\t\t\t\t\t\tif (!dontStart)\n\t\t\t\t\t\t\tctx.beginPath();\n\t\t\t\t\t\tvar flattener = new PathFlattener(this, 0.25, 32, false,\n\t\t\t\t\t\t\t\tstrokeMatrix),\n\t\t\t\t\t\t\tlength = flattener.length,\n\t\t\t\t\t\t\tfrom = -style.getDashOffset(), to,\n\t\t\t\t\t\t\ti = 0;\n\t\t\t\t\t\twhile (from > 0) {\n\t\t\t\t\t\t\tfrom -= getOffset(i--) + getOffset(i--);\n\t\t\t\t\t\t}\n\t\t\t\t\t\twhile (from < length) {\n\t\t\t\t\t\t\tto = from + getOffset(i++);\n\t\t\t\t\t\t\tif (from > 0 || to > 0)\n\t\t\t\t\t\t\t\tflattener.drawPart(ctx,\n\t\t\t\t\t\t\t\t\t\tMath.max(from, 0), Math.max(to, 0));\n\t\t\t\t\t\t\tfrom = to + getOffset(i++);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_drawSelected: function(ctx, matrix) {\n\t\t\tctx.beginPath();\n\t\t\tdrawSegments(ctx, this, matrix);\n\t\t\tctx.stroke();\n\t\t\tdrawHandles(ctx, this._segments, matrix, paper.settings.handleSize);\n\t\t}\n\t};\n},\nnew function() {\n\tfunction getCurrentSegment(that) {\n\t\tvar segments = that._segments;\n\t\tif (!segments.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn segments[segments.length - 1];\n\t}\n\n\treturn {\n\t\tmoveTo: function() {\n\t\t\tvar segments = this._segments;\n\t\t\tif (segments.length === 1)\n\t\t\t\tthis.removeSegment(0);\n\t\t\tif (!segments.length)\n\t\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tmoveBy: function() {\n\t\t\tthrow new Error('moveBy() is unsupported on Path items.');\n\t\t},\n\n\t\tlineTo: function() {\n\t\t\tthis._add([ new Segment(Point.read(arguments)) ]);\n\t\t},\n\n\t\tcubicCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this);\n\t\t\tcurrent.setHandleOut(handle1.subtract(current._point));\n\t\t\tthis._add([ new Segment(to, handle2.subtract(to)) ]);\n\t\t},\n\n\t\tquadraticCurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(\n\t\t\t\thandle.add(current.subtract(handle).multiply(1 / 3)),\n\t\t\t\thandle.add(to.subtract(handle).multiply(1 / 3)),\n\t\t\t\tto\n\t\t\t);\n\t\t},\n\n\t\tcurveTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tt = Base.pick(Base.read(args), 0.5),\n\t\t\t\tt1 = 1 - t,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\thandle = through.subtract(current.multiply(t1 * t1))\n\t\t\t\t\t.subtract(to.multiply(t * t)).divide(2 * t * t1);\n\t\t\tif (handle.isNaN())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'Cannot put a curve through points with parameter = ' + t);\n\t\t\tthis.quadraticCurveTo(handle, to);\n\t\t},\n\n\t\tarcTo: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tabs = Math.abs,\n\t\t\t\tsqrt = Math.sqrt,\n\t\t\t\tcurrent = getCurrentSegment(this),\n\t\t\t\tfrom = current._point,\n\t\t\t\tto = Point.read(args),\n\t\t\t\tthrough,\n\t\t\t\tpeek = Base.peek(args),\n\t\t\t\tclockwise = Base.pick(peek, true),\n\t\t\t\tcenter, extent, vector, matrix;\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tvar middle = from.add(to).divide(2),\n\t\t\t\tthrough = middle.add(middle.subtract(from).rotate(\n\t\t\t\t\t\tclockwise ? -90 : 90));\n\t\t\t} else if (Base.remain(args) <= 2) {\n\t\t\t\tthrough = to;\n\t\t\t\tto = Point.read(args);\n\t\t\t} else if (!from.equals(to)) {\n\t\t\t\tvar radius = Size.read(args),\n\t\t\t\t\tisZero = Numerical.isZero;\n\t\t\t\tif (isZero(radius.width) || isZero(radius.height))\n\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\tvar rotation = Base.read(args),\n\t\t\t\t\tclockwise = !!Base.read(args),\n\t\t\t\t\tlarge = !!Base.read(args),\n\t\t\t\t\tmiddle = from.add(to).divide(2),\n\t\t\t\t\tpt = from.subtract(middle).rotate(-rotation),\n\t\t\t\t\tx = pt.x,\n\t\t\t\t\ty = pt.y,\n\t\t\t\t\trx = abs(radius.width),\n\t\t\t\t\try = abs(radius.height),\n\t\t\t\t\trxSq = rx * rx,\n\t\t\t\t\trySq = ry * ry,\n\t\t\t\t\txSq = x * x,\n\t\t\t\t\tySq = y * y;\n\t\t\t\tvar factor = sqrt(xSq / rxSq + ySq / rySq);\n\t\t\t\tif (factor > 1) {\n\t\t\t\t\trx *= factor;\n\t\t\t\t\try *= factor;\n\t\t\t\t\trxSq = rx * rx;\n\t\t\t\t\trySq = ry * ry;\n\t\t\t\t}\n\t\t\t\tfactor = (rxSq * rySq - rxSq * ySq - rySq * xSq) /\n\t\t\t\t\t\t(rxSq * ySq + rySq * xSq);\n\t\t\t\tif (abs(factor) < 1e-12)\n\t\t\t\t\tfactor = 0;\n\t\t\t\tif (factor < 0)\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\tcenter = new Point(rx * y / ry, -ry * x / rx)\n\t\t\t\t\t\t.multiply((large === clockwise ? -1 : 1) * sqrt(factor))\n\t\t\t\t\t\t.rotate(rotation).add(middle);\n\t\t\t\tmatrix = new Matrix().translate(center).rotate(rotation)\n\t\t\t\t\t\t.scale(rx, ry);\n\t\t\t\tvector = matrix._inverseTransform(from);\n\t\t\t\textent = vector.getDirectedAngle(matrix._inverseTransform(to));\n\t\t\t\tif (!clockwise && extent > 0)\n\t\t\t\t\textent -= 360;\n\t\t\t\telse if (clockwise && extent < 0)\n\t\t\t\t\textent += 360;\n\t\t\t}\n\t\t\tif (through) {\n\t\t\t\tvar l1 = new Line(from.add(through).divide(2),\n\t\t\t\t\t\t\tthrough.subtract(from).rotate(90), true),\n\t\t\t\t\tl2 = new Line(through.add(to).divide(2),\n\t\t\t\t\t\t\tto.subtract(through).rotate(90), true),\n\t\t\t\t\tline = new Line(from, to),\n\t\t\t\t\tthroughSide = line.getSide(through);\n\t\t\t\tcenter = l1.intersect(l2, true);\n\t\t\t\tif (!center) {\n\t\t\t\t\tif (!throughSide)\n\t\t\t\t\t\treturn this.lineTo(to);\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t\t'Cannot create an arc with the given arguments');\n\t\t\t\t}\n\t\t\t\tvector = from.subtract(center);\n\t\t\t\textent = vector.getDirectedAngle(to.subtract(center));\n\t\t\t\tvar centerSide = line.getSide(center, true);\n\t\t\t\tif (centerSide === 0) {\n\t\t\t\t\textent = throughSide * abs(extent);\n\t\t\t\t} else if (throughSide === centerSide) {\n\t\t\t\t\textent += extent < 0 ? 360 : -360;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (extent) {\n\t\t\t\tvar epsilon = 1e-5,\n\t\t\t\t\text = abs(extent),\n\t\t\t\t\tcount = ext >= 360\n\t\t\t\t\t\t? 4\n\t\t\t\t\t\t: Math.ceil((ext - epsilon) / 90),\n\t\t\t\t\tinc = extent / count,\n\t\t\t\t\thalf = inc * Math.PI / 360,\n\t\t\t\t\tz = 4 / 3 * Math.sin(half) / (1 + Math.cos(half)),\n\t\t\t\t\tsegments = [];\n\t\t\t\tfor (var i = 0; i <= count; i++) {\n\t\t\t\t\tvar pt = to,\n\t\t\t\t\t\tout = null;\n\t\t\t\t\tif (i < count) {\n\t\t\t\t\t\tout = vector.rotate(90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\tpt = matrix._transformPoint(vector);\n\t\t\t\t\t\t\tout = matrix._transformPoint(vector.add(out))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tpt = center.add(vector);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tcurrent.setHandleOut(out);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar _in = vector.rotate(-90).multiply(z);\n\t\t\t\t\t\tif (matrix) {\n\t\t\t\t\t\t\t_in = matrix._transformPoint(vector.add(_in))\n\t\t\t\t\t\t\t\t\t.subtract(pt);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsegments.push(new Segment(pt, _in, out));\n\t\t\t\t\t}\n\t\t\t\t\tvector = vector.rotate(inc);\n\t\t\t\t}\n\t\t\t\tthis._add(segments);\n\t\t\t}\n\t\t},\n\n\t\tlineBy: function() {\n\t\t\tvar to = Point.read(arguments),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.lineTo(current.add(to));\n\t\t},\n\n\t\tcurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tthrough = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tparameter = Base.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.curveTo(current.add(through), current.add(to), parameter);\n\t\t},\n\n\t\tcubicCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle1 = Point.read(args),\n\t\t\t\thandle2 = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.cubicCurveTo(current.add(handle1), current.add(handle2),\n\t\t\t\t\tcurrent.add(to));\n\t\t},\n\n\t\tquadraticCurveBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\thandle = Point.read(args),\n\t\t\t\tto = Point.read(args),\n\t\t\t\tcurrent = getCurrentSegment(this)._point;\n\t\t\tthis.quadraticCurveTo(current.add(handle), current.add(to));\n\t\t},\n\n\t\tarcBy: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcurrent = getCurrentSegment(this)._point,\n\t\t\t\tpoint = current.add(Point.read(args)),\n\t\t\t\tclockwise = Base.pick(Base.peek(args), true);\n\t\t\tif (typeof clockwise === 'boolean') {\n\t\t\t\tthis.arcTo(point, clockwise);\n\t\t\t} else {\n\t\t\t\tthis.arcTo(point, current.add(Point.read(args)));\n\t\t\t}\n\t\t},\n\n\t\tclosePath: function(tolerance) {\n\t\t\tthis.setClosed(true);\n\t\t\tthis.join(this, tolerance);\n\t\t}\n\t};\n}, {\n\n\t_getBounds: function(matrix, options) {\n\t\tvar method = options.handle\n\t\t\t\t? 'getHandleBounds'\n\t\t\t\t: options.stroke\n\t\t\t\t? 'getStrokeBounds'\n\t\t\t\t: 'getBounds';\n\t\treturn Path[method](this._segments, this._closed, this, matrix, options);\n\t},\n\nstatics: {\n\tgetBounds: function(segments, closed, path, matrix, options, strokePadding) {\n\t\tvar first = segments[0];\n\t\tif (!first)\n\t\t\treturn new Rectangle();\n\t\tvar coords = new Array(6),\n\t\t\tprevCoords = first._transformCoordinates(matrix, new Array(6)),\n\t\t\tmin = prevCoords.slice(0, 2),\n\t\t\tmax = min.slice(),\n\t\t\troots = new Array(2);\n\n\t\tfunction processSegment(segment) {\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var i = 0; i < 2; i++) {\n\t\t\t\tCurve._addBounds(\n\t\t\t\t\tprevCoords[i],\n\t\t\t\t\tprevCoords[i + 4],\n\t\t\t\t\tcoords[i + 2],\n\t\t\t\t\tcoords[i],\n\t\t\t\t\ti, strokePadding ? strokePadding[i] : 0, min, max, roots);\n\t\t\t}\n\t\t\tvar tmp = prevCoords;\n\t\t\tprevCoords = coords;\n\t\t\tcoords = tmp;\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++)\n\t\t\tprocessSegment(segments[i]);\n\t\tif (closed)\n\t\t\tprocessSegment(first);\n\t\treturn new Rectangle(min[0], min[1], max[0] - min[0], max[1] - min[1]);\n\t},\n\n\tgetStrokeBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = style.hasStroke(),\n\t\t\tstrokeWidth = style.getStrokeWidth(),\n\t\t\tstrokeMatrix = stroke && path._getStrokeMatrix(matrix, options),\n\t\t\tstrokePadding = stroke && Path._getStrokePadding(strokeWidth,\n\t\t\t\tstrokeMatrix),\n\t\t\tbounds = Path.getBounds(segments, closed, path, matrix, options,\n\t\t\t\tstrokePadding);\n\t\tif (!stroke)\n\t\t\treturn bounds;\n\t\tvar strokeRadius = strokeWidth / 2,\n\t\t\tjoin = style.getStrokeJoin(),\n\t\t\tcap = style.getStrokeCap(),\n\t\t\tmiterLimit = style.getMiterLimit(),\n\t\t\tjoinBounds = new Rectangle(new Size(strokePadding));\n\n\t\tfunction addPoint(point) {\n\t\t\tbounds = bounds.include(point);\n\t\t}\n\n\t\tfunction addRound(segment) {\n\t\t\tbounds = bounds.unite(\n\t\t\t\t\tjoinBounds.setCenter(segment._point.transform(matrix)));\n\t\t}\n\n\t\tfunction addJoin(segment, join) {\n\t\t\tif (join === 'round' || segment.isSmooth()) {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addBevelJoin(segment, join, strokeRadius, miterLimit,\n\t\t\t\t\t\tmatrix, strokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tfunction addCap(segment, cap) {\n\t\t\tif (cap === 'round') {\n\t\t\t\taddRound(segment);\n\t\t\t} else {\n\t\t\t\tPath._addSquareCap(segment, cap, strokeRadius, matrix,\n\t\t\t\t\t\tstrokeMatrix, addPoint);\n\t\t\t}\n\t\t}\n\n\t\tvar length = segments.length - (closed ? 0 : 1);\n\t\tif (length > 0) {\n\t\t\tfor (var i = 1; i < length; i++) {\n\t\t\t\taddJoin(segments[i], join);\n\t\t\t}\n\t\t\tif (closed) {\n\t\t\t\taddJoin(segments[0], join);\n\t\t\t} else {\n\t\t\t\taddCap(segments[0], cap);\n\t\t\t\taddCap(segments[segments.length - 1], cap);\n\t\t\t}\n\t\t}\n\t\treturn bounds;\n\t},\n\n\t_getStrokePadding: function(radius, matrix) {\n\t\tif (!matrix)\n\t\t\treturn [radius, radius];\n\t\tvar hor = new Point(radius, 0).transform(matrix),\n\t\t\tver = new Point(0, radius).transform(matrix),\n\t\t\tphi = hor.getAngleInRadians(),\n\t\t\ta = hor.getLength(),\n\t\t\tb = ver.getLength();\n\t\tvar sin = Math.sin(phi),\n\t\t\tcos = Math.cos(phi),\n\t\t\ttan = Math.tan(phi),\n\t\t\ttx = Math.atan2(b * tan, a),\n\t\t\tty = Math.atan2(b, tan * a);\n\t\treturn [Math.abs(a * Math.cos(tx) * cos + b * Math.sin(tx) * sin),\n\t\t\t\tMath.abs(b * Math.sin(ty) * cos + a * Math.cos(ty) * sin)];\n\t},\n\n\t_addBevelJoin: function(segment, join, radius, miterLimit, matrix,\n\t\t\tstrokeMatrix, addPoint, isArea) {\n\t\tvar curve2 = segment.getCurve(),\n\t\t\tcurve1 = curve2.getPrevious(),\n\t\t\tpoint = curve2.getPoint1().transform(matrix),\n\t\t\tnormal1 = curve1.getNormalAtTime(1).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\tnormal2 = curve2.getNormalAtTime(0).multiply(radius)\n\t\t\t\t.transform(strokeMatrix),\n\t\t\t\tangle = normal1.getDirectedAngle(normal2);\n\t\tif (angle < 0 || angle >= 180) {\n\t\t\tnormal1 = normal1.negate();\n\t\t\tnormal2 = normal2.negate();\n\t\t}\n\t\tif (isArea)\n\t\t\taddPoint(point);\n\t\taddPoint(point.add(normal1));\n\t\tif (join === 'miter') {\n\t\t\tvar corner = new Line(point.add(normal1),\n\t\t\t\t\tnew Point(-normal1.y, normal1.x), true\n\t\t\t\t).intersect(new Line(point.add(normal2),\n\t\t\t\t\tnew Point(-normal2.y, normal2.x), true\n\t\t\t\t), true);\n\t\t\tif (corner && point.getDistance(corner) <= miterLimit * radius) {\n\t\t\t\taddPoint(corner);\n\t\t\t}\n\t\t}\n\t\taddPoint(point.add(normal2));\n\t},\n\n\t_addSquareCap: function(segment, cap, radius, matrix, strokeMatrix,\n\t\t\taddPoint, isArea) {\n\t\tvar point = segment._point.transform(matrix),\n\t\t\tloc = segment.getLocation(),\n\t\t\tnormal = loc.getNormal()\n\t\t\t\t\t.multiply(loc.getTime() === 0 ? radius : -radius)\n\t\t\t\t\t.transform(strokeMatrix);\n\t\tif (cap === 'square') {\n\t\t\tif (isArea) {\n\t\t\t\taddPoint(point.subtract(normal));\n\t\t\t\taddPoint(point.add(normal));\n\t\t\t}\n\t\t\tpoint = point.add(normal.rotate(-90));\n\t\t}\n\t\taddPoint(point.add(normal));\n\t\taddPoint(point.subtract(normal));\n\t},\n\n\tgetHandleBounds: function(segments, closed, path, matrix, options) {\n\t\tvar style = path.getStyle(),\n\t\t\tstroke = options.stroke && style.hasStroke(),\n\t\t\tstrokePadding,\n\t\t\tjoinPadding;\n\t\tif (stroke) {\n\t\t\tvar strokeMatrix = path._getStrokeMatrix(matrix, options),\n\t\t\t\tstrokeRadius = style.getStrokeWidth() / 2,\n\t\t\t\tjoinRadius = strokeRadius;\n\t\t\tif (style.getStrokeJoin() === 'miter')\n\t\t\t\tjoinRadius = strokeRadius * style.getMiterLimit();\n\t\t\tif (style.getStrokeCap() === 'square')\n\t\t\t\tjoinRadius = Math.max(joinRadius, strokeRadius * Math.SQRT2);\n\t\t\tstrokePadding = Path._getStrokePadding(strokeRadius, strokeMatrix);\n\t\t\tjoinPadding = Path._getStrokePadding(joinRadius, strokeMatrix);\n\t\t}\n\t\tvar coords = new Array(6),\n\t\t\tx1 = Infinity,\n\t\t\tx2 = -x1,\n\t\t\ty1 = x1,\n\t\t\ty2 = x2;\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar segment = segments[i];\n\t\t\tsegment._transformCoordinates(matrix, coords);\n\t\t\tfor (var j = 0; j < 6; j += 2) {\n\t\t\t\tvar padding = !j ? joinPadding : strokePadding,\n\t\t\t\t\tpaddingX = padding ? padding[0] : 0,\n\t\t\t\t\tpaddingY = padding ? padding[1] : 0,\n\t\t\t\t\tx = coords[j],\n\t\t\t\t\ty = coords[j + 1],\n\t\t\t\t\txn = x - paddingX,\n\t\t\t\t\txx = x + paddingX,\n\t\t\t\t\tyn = y - paddingY,\n\t\t\t\t\tyx = y + paddingY;\n\t\t\t\tif (xn < x1) x1 = xn;\n\t\t\t\tif (xx > x2) x2 = xx;\n\t\t\t\tif (yn < y1) y1 = yn;\n\t\t\t\tif (yx > y2) y2 = yx;\n\t\t\t}\n\t\t}\n\t\treturn new Rectangle(x1, y1, x2 - x1, y2 - y1);\n\t}\n}});\n\nPath.inject({ statics: new function() {\n\n\tvar kappa = 0.5522847498307936,\n\t\tellipseSegments = [\n\t\t\tnew Segment([-1, 0], [0, kappa ], [0, -kappa]),\n\t\t\tnew Segment([0, -1], [-kappa, 0], [kappa, 0 ]),\n\t\t\tnew Segment([1, 0], [0, -kappa], [0, kappa ]),\n\t\t\tnew Segment([0, 1], [kappa, 0 ], [-kappa, 0])\n\t\t];\n\n\tfunction createPath(segments, closed, args) {\n\t\tvar props = Base.getNamed(args),\n\t\t\tpath = new Path(props && (\n\t\t\t\tprops.insert == true ? Item.INSERT\n\t\t\t\t: props.insert == false ? Item.NO_INSERT\n\t\t\t\t: null\n\t\t\t));\n\t\tpath._add(segments);\n\t\tpath._closed = closed;\n\t\treturn path.set(props, Item.INSERT);\n\t}\n\n\tfunction createEllipse(center, radius, args) {\n\t\tvar segments = new Array(4);\n\t\tfor (var i = 0; i < 4; i++) {\n\t\t\tvar segment = ellipseSegments[i];\n\t\t\tsegments[i] = new Segment(\n\t\t\t\tsegment._point.multiply(radius).add(center),\n\t\t\t\tsegment._handleIn.multiply(radius),\n\t\t\t\tsegment._handleOut.multiply(radius)\n\t\t\t);\n\t\t}\n\t\treturn createPath(segments, true, args);\n\t}\n\n\treturn {\n\t\tLine: function() {\n\t\t\tvar args = arguments;\n\t\t\treturn createPath([\n\t\t\t\tnew Segment(Point.readNamed(args, 'from')),\n\t\t\t\tnew Segment(Point.readNamed(args, 'to'))\n\t\t\t], false, args);\n\t\t},\n\n\t\tCircle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tradius = Base.readNamed(args, 'radius');\n\t\t\treturn createEllipse(center, new Size(radius), args);\n\t\t},\n\n\t\tRectangle: function() {\n\t\t\tvar args = arguments,\n\t\t\t\trect = Rectangle.readNamed(args, 'rectangle'),\n\t\t\t\tradius = Size.readNamed(args, 'radius', 0,\n\t\t\t\t\t\t{ readNull: true }),\n\t\t\t\tbl = rect.getBottomLeft(true),\n\t\t\t\ttl = rect.getTopLeft(true),\n\t\t\t\ttr = rect.getTopRight(true),\n\t\t\t\tbr = rect.getBottomRight(true),\n\t\t\t\tsegments;\n\t\t\tif (!radius || radius.isZero()) {\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl),\n\t\t\t\t\tnew Segment(tl),\n\t\t\t\t\tnew Segment(tr),\n\t\t\t\t\tnew Segment(br)\n\t\t\t\t];\n\t\t\t} else {\n\t\t\t\tradius = Size.min(radius, rect.getSize(true).divide(2));\n\t\t\t\tvar rx = radius.width,\n\t\t\t\t\try = radius.height,\n\t\t\t\t\thx = rx * kappa,\n\t\t\t\t\thy = ry * kappa;\n\t\t\t\tsegments = [\n\t\t\t\t\tnew Segment(bl.add(rx, 0), null, [-hx, 0]),\n\t\t\t\t\tnew Segment(bl.subtract(0, ry), [0, hy]),\n\t\t\t\t\tnew Segment(tl.add(0, ry), null, [0, -hy]),\n\t\t\t\t\tnew Segment(tl.add(rx, 0), [-hx, 0], null),\n\t\t\t\t\tnew Segment(tr.subtract(rx, 0), null, [hx, 0]),\n\t\t\t\t\tnew Segment(tr.add(0, ry), [0, -hy], null),\n\t\t\t\t\tnew Segment(br.subtract(0, ry), null, [0, hy]),\n\t\t\t\t\tnew Segment(br.subtract(rx, 0), [hx, 0])\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tRoundRectangle: '#Rectangle',\n\n\t\tEllipse: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tellipse = Shape._readEllipse(args);\n\t\t\treturn createEllipse(ellipse.center, ellipse.radius, args);\n\t\t},\n\n\t\tOval: '#Ellipse',\n\n\t\tArc: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tfrom = Point.readNamed(args, 'from'),\n\t\t\t\tthrough = Point.readNamed(args, 'through'),\n\t\t\t\tto = Point.readNamed(args, 'to'),\n\t\t\t\tprops = Base.getNamed(args),\n\t\t\t\tpath = new Path(props && props.insert == false\n\t\t\t\t\t\t&& Item.NO_INSERT);\n\t\t\tpath.moveTo(from);\n\t\t\tpath.arcTo(through, to);\n\t\t\treturn path.set(props);\n\t\t},\n\n\t\tRegularPolygon: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tsides = Base.readNamed(args, 'sides'),\n\t\t\t\tradius = Base.readNamed(args, 'radius'),\n\t\t\t\tstep = 360 / sides,\n\t\t\t\tthree = sides % 3 === 0,\n\t\t\t\tvector = new Point(0, three ? -radius : radius),\n\t\t\t\toffset = three ? -1 : 0.5,\n\t\t\t\tsegments = new Array(sides);\n\t\t\tfor (var i = 0; i < sides; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(\n\t\t\t\t\tvector.rotate((i + offset) * step)));\n\t\t\treturn createPath(segments, true, args);\n\t\t},\n\n\t\tStar: function() {\n\t\t\tvar args = arguments,\n\t\t\t\tcenter = Point.readNamed(args, 'center'),\n\t\t\t\tpoints = Base.readNamed(args, 'points') * 2,\n\t\t\t\tradius1 = Base.readNamed(args, 'radius1'),\n\t\t\t\tradius2 = Base.readNamed(args, 'radius2'),\n\t\t\t\tstep = 360 / points,\n\t\t\t\tvector = new Point(0, -1),\n\t\t\t\tsegments = new Array(points);\n\t\t\tfor (var i = 0; i < points; i++)\n\t\t\t\tsegments[i] = new Segment(center.add(vector.rotate(step * i)\n\t\t\t\t\t\t.multiply(i % 2 ? radius2 : radius1)));\n\t\t\treturn createPath(segments, true, args);\n\t\t}\n\t};\n}});\n\nvar CompoundPath = PathItem.extend({\n\t_class: 'CompoundPath',\n\t_serializeFields: {\n\t\tchildren: []\n\t},\n\tbeans: true,\n\n\tinitialize: function CompoundPath(arg) {\n\t\tthis._children = [];\n\t\tthis._namedChildren = {};\n\t\tif (!this._initialize(arg)) {\n\t\t\tif (typeof arg === 'string') {\n\t\t\t\tthis.setPathData(arg);\n\t\t\t} else {\n\t\t\t\tthis.addChildren(Array.isArray(arg) ? arg : arguments);\n\t\t\t}\n\t\t}\n\t},\n\n\tinsertChildren: function insertChildren(index, items) {\n\t\tvar list = items,\n\t\t\tfirst = list[0];\n\t\tif (first && typeof first[0] === 'number')\n\t\t\tlist = [list];\n\t\tfor (var i = items.length - 1; i >= 0; i--) {\n\t\t\tvar item = list[i];\n\t\t\tif (list === items && !(item instanceof Path))\n\t\t\t\tlist = Base.slice(list);\n\t\t\tif (Array.isArray(item)) {\n\t\t\t\tlist[i] = new Path({ segments: item, insert: false });\n\t\t\t} else if (item instanceof CompoundPath) {\n\t\t\t\tlist.splice.apply(list, [i, 1].concat(item.removeChildren()));\n\t\t\t\titem.remove();\n\t\t\t}\n\t\t}\n\t\treturn insertChildren.base.call(this, index, list);\n\t},\n\n\treduce: function reduce(options) {\n\t\tvar children = this._children;\n\t\tfor (var i = children.length - 1; i >= 0; i--) {\n\t\t\tvar path = children[i].reduce(options);\n\t\t\tif (path.isEmpty())\n\t\t\t\tpath.remove();\n\t\t}\n\t\tif (!children.length) {\n\t\t\tvar path = new Path(Item.NO_INSERT);\n\t\t\tpath.copyAttributes(this);\n\t\t\tpath.insertAbove(this);\n\t\t\tthis.remove();\n\t\t\treturn path;\n\t\t}\n\t\treturn reduce.base.call(this);\n\t},\n\n\tisClosed: function() {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tif (!children[i]._closed)\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tsetClosed: function(closed) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tchildren[i].setClosed(closed);\n\t\t}\n\t},\n\n\tgetFirstSegment: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstSegment();\n\t},\n\n\tgetLastSegment: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastSegment();\n\t},\n\n\tgetCurves: function() {\n\t\tvar children = this._children,\n\t\t\tcurves = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tBase.push(curves, children[i].getCurves());\n\t\t}\n\t\treturn curves;\n\t},\n\n\tgetFirstCurve: function() {\n\t\tvar first = this.getFirstChild();\n\t\treturn first && first.getFirstCurve();\n\t},\n\n\tgetLastCurve: function() {\n\t\tvar last = this.getLastChild();\n\t\treturn last && last.getLastCurve();\n\t},\n\n\tgetArea: function() {\n\t\tvar children = this._children,\n\t\t\tarea = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tarea += children[i].getArea();\n\t\treturn area;\n\t},\n\n\tgetLength: function() {\n\t\tvar children = this._children,\n\t\t\tlength = 0;\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tlength += children[i].getLength();\n\t\treturn length;\n\t},\n\n\tgetPathData: function(_matrix, _precision) {\n\t\tvar children = this._children,\n\t\t\tpaths = [];\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tpaths.push(child.getPathData(_matrix && !mx.isIdentity()\n\t\t\t\t\t? _matrix.appended(mx) : _matrix, _precision));\n\t\t}\n\t\treturn paths.join('');\n\t},\n\n\t_hitTestChildren: function _hitTestChildren(point, options, viewMatrix) {\n\t\treturn _hitTestChildren.base.call(this, point,\n\t\t\t\toptions.class === Path || options.type === 'path' ? options\n\t\t\t\t\t: Base.set({}, options, { fill: false }),\n\t\t\t\tviewMatrix);\n\t},\n\n\t_draw: function(ctx, param, viewMatrix, strokeMatrix) {\n\t\tvar children = this._children;\n\t\tif (!children.length)\n\t\t\treturn;\n\n\t\tparam = param.extend({ dontStart: true, dontFinish: true });\n\t\tctx.beginPath();\n\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\tchildren[i].draw(ctx, param, strokeMatrix);\n\n\t\tif (!param.clip) {\n\t\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\t\tvar style = this._style;\n\t\t\tif (style.hasFill()) {\n\t\t\t\tctx.fill(style.getFillRule());\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (style.hasStroke())\n\t\t\t\tctx.stroke();\n\t\t}\n\t},\n\n\t_drawSelected: function(ctx, matrix, selectionItems) {\n\t\tvar children = this._children;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i],\n\t\t\t\tmx = child._matrix;\n\t\t\tif (!selectionItems[child._id]) {\n\t\t\t\tchild._drawSelected(ctx, mx.isIdentity() ? matrix\n\t\t\t\t\t\t: matrix.appended(mx));\n\t\t\t}\n\t\t}\n\t}\n},\nnew function() {\n\tfunction getCurrentPath(that, check) {\n\t\tvar children = that._children;\n\t\tif (check && !children.length)\n\t\t\tthrow new Error('Use a moveTo() command first');\n\t\treturn children[children.length - 1];\n\t}\n\n\treturn Base.each(['lineTo', 'cubicCurveTo', 'quadraticCurveTo', 'curveTo',\n\t\t\t'arcTo', 'lineBy', 'cubicCurveBy', 'quadraticCurveBy', 'curveBy',\n\t\t\t'arcBy'],\n\t\tfunction(key) {\n\t\t\tthis[key] = function() {\n\t\t\t\tvar path = getCurrentPath(this, true);\n\t\t\t\tpath[key].apply(path, arguments);\n\t\t\t};\n\t\t}, {\n\t\t\tmoveTo: function() {\n\t\t\t\tvar current = getCurrentPath(this),\n\t\t\t\t\tpath = current && current.isEmpty() ? current\n\t\t\t\t\t\t\t: new Path(Item.NO_INSERT);\n\t\t\t\tif (path !== current)\n\t\t\t\t\tthis.addChild(path);\n\t\t\t\tpath.moveTo.apply(path, arguments);\n\t\t\t},\n\n\t\t\tmoveBy: function() {\n\t\t\t\tvar current = getCurrentPath(this, true),\n\t\t\t\t\tlast = current && current.getLastSegment(),\n\t\t\t\t\tpoint = Point.read(arguments);\n\t\t\t\tthis.moveTo(last ? point.add(last._point) : point);\n\t\t\t},\n\n\t\t\tclosePath: function(tolerance) {\n\t\t\t\tgetCurrentPath(this, true).closePath(tolerance);\n\t\t\t}\n\t\t}\n\t);\n}, Base.each(['reverse', 'flatten', 'simplify', 'smooth'], function(key) {\n\tthis[key] = function(param) {\n\t\tvar children = this._children,\n\t\t\tres;\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tres = children[i][key](param) || res;\n\t\t}\n\t\treturn res;\n\t};\n}, {}));\n\nPathItem.inject(new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\toperators = {\n\t\t\tunite: { '1': true, '2': true },\n\t\t\tintersect: { '2': true },\n\t\t\tsubtract: { '1': true },\n\t\t\texclude: { '1': true, '-1': true }\n\t\t};\n\n\tfunction getPaths(path) {\n\t\treturn path._children || [path];\n\t}\n\n\tfunction preparePath(path, resolve) {\n\t\tvar res = path\n\t\t\t.clone(false)\n\t\t\t.reduce({ simplify: true })\n\t\t\t.transform(null, true, true);\n\t\tif (resolve) {\n\t\t\tvar paths = getPaths(res);\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tif (!path._closed && !path.isEmpty()) {\n\t\t\t\t\tpath.closePath(1e-12);\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t\tpath.getLastSegment().setHandleOut(0, 0);\n\t\t\t\t}\n\t\t\t}\n\t\t\tres = res\n\t\t\t\t.resolveCrossings()\n\t\t\t\t.reorient(res.getFillRule() === 'nonzero', true);\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction createResult(paths, simplify, path1, path2, options) {\n\t\tvar result = new CompoundPath(Item.NO_INSERT);\n\t\tresult.addChildren(paths, true);\n\t\tresult = result.reduce({ simplify: simplify });\n\t\tif (!(options && options.insert == false)) {\n\t\t\tresult.insertAbove(path2 && path1.isSibling(path2)\n\t\t\t\t\t&& path1.getIndex() < path2.getIndex() ? path2 : path1);\n\t\t}\n\t\tresult.copyAttributes(path1, true);\n\t\treturn result;\n\t}\n\n\tfunction filterIntersection(inter) {\n\t\treturn inter.hasOverlap() || inter.isCrossing();\n\t}\n\n\tfunction traceBoolean(path1, path2, operation, options) {\n\t\tif (options && (options.trace == false || options.stroke) &&\n\t\t\t\t/^(subtract|intersect)$/.test(operation))\n\t\t\treturn splitBoolean(path1, path2, operation);\n\t\tvar _path1 = preparePath(path1, true),\n\t\t\t_path2 = path2 && path1 !== path2 && preparePath(path2, true),\n\t\t\toperator = operators[operation];\n\t\toperator[operation] = true;\n\t\tif (_path2 && (operator.subtract || operator.exclude)\n\t\t\t\t^ (_path2.isClockwise() ^ _path1.isClockwise()))\n\t\t\t_path2.reverse();\n\t\tvar crossings = divideLocations(CurveLocation.expand(\n\t\t\t\t_path1.getIntersections(_path2, filterIntersection))),\n\t\t\tpaths1 = getPaths(_path1),\n\t\t\tpaths2 = _path2 && getPaths(_path2),\n\t\t\tsegments = [],\n\t\t\tcurves = [],\n\t\t\tpaths;\n\n\t\tfunction collectPaths(paths) {\n\t\t\tfor (var i = 0, l = paths.length; i < l; i++) {\n\t\t\t\tvar path = paths[i];\n\t\t\t\tBase.push(segments, path._segments);\n\t\t\t\tBase.push(curves, path.getCurves());\n\t\t\t\tpath._overlapsOnly = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCurves(indices) {\n\t\t\tvar list = [];\n\t\t\tfor (var i = 0, l = indices && indices.length; i < l; i++) {\n\t\t\t\tlist.push(curves[indices[i]]);\n\t\t\t}\n\t\t\treturn list;\n\t\t}\n\n\t\tif (crossings.length) {\n\t\t\tcollectPaths(paths1);\n\t\t\tif (paths2)\n\t\t\t\tcollectPaths(paths2);\n\n\t\t\tvar curvesValues = new Array(curves.length);\n\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\tcurvesValues[i] = curves[i].getValues();\n\t\t\t}\n\t\t\tvar curveCollisions = CollisionDetection.findCurveBoundsCollisions(\n\t\t\t\t\tcurvesValues, curvesValues, 0, true);\n\t\t\tvar curveCollisionsMap = {};\n\t\t\tfor (var i = 0; i < curves.length; i++) {\n\t\t\t\tvar curve = curves[i],\n\t\t\t\t\tid = curve._path._id,\n\t\t\t\t\tmap = curveCollisionsMap[id] = curveCollisionsMap[id] || {};\n\t\t\t\tmap[curve.getIndex()] = {\n\t\t\t\t\thor: getCurves(curveCollisions[i].hor),\n\t\t\t\t\tver: getCurves(curveCollisions[i].ver)\n\t\t\t\t};\n\t\t\t}\n\n\t\t\tfor (var i = 0, l = crossings.length; i < l; i++) {\n\t\t\t\tpropagateWinding(crossings[i]._segment, _path1, _path2,\n\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t}\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tvar segment = segments[i],\n\t\t\t\t\tinter = segment._intersection;\n\t\t\t\tif (!segment._winding) {\n\t\t\t\t\tpropagateWinding(segment, _path1, _path2,\n\t\t\t\t\t\t\tcurveCollisionsMap, operator);\n\t\t\t\t}\n\t\t\t\tif (!(inter && inter._overlap))\n\t\t\t\t\tsegment._path._overlapsOnly = false;\n\t\t\t}\n\t\t\tpaths = tracePaths(segments, operator);\n\t\t} else {\n\t\t\tpaths = reorientPaths(\n\t\t\t\t\tpaths2 ? paths1.concat(paths2) : paths1.slice(),\n\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\treturn !!operator[w];\n\t\t\t\t\t});\n\t\t}\n\t\treturn createResult(paths, true, path1, path2, options);\n\t}\n\n\tfunction splitBoolean(path1, path2, operation) {\n\t\tvar _path1 = preparePath(path1),\n\t\t\t_path2 = preparePath(path2),\n\t\t\tcrossings = _path1.getIntersections(_path2, filterIntersection),\n\t\t\tsubtract = operation === 'subtract',\n\t\t\tdivide = operation === 'divide',\n\t\t\tadded = {},\n\t\t\tpaths = [];\n\n\t\tfunction addPath(path) {\n\t\t\tif (!added[path._id] && (divide ||\n\t\t\t\t\t_path2.contains(path.getPointAt(path.getLength() / 2))\n\t\t\t\t\t\t^ subtract)) {\n\t\t\t\tpaths.unshift(path);\n\t\t\t\treturn added[path._id] = true;\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = crossings.length - 1; i >= 0; i--) {\n\t\t\tvar path = crossings[i].split();\n\t\t\tif (path) {\n\t\t\t\tif (addPath(path))\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(0, 0);\n\t\t\t\t_path1.getLastSegment().setHandleOut(0, 0);\n\t\t\t}\n\t\t}\n\t\taddPath(_path1);\n\t\treturn createResult(paths, false, path1, path2);\n\t}\n\n\tfunction linkIntersections(from, to) {\n\t\tvar prev = from;\n\t\twhile (prev) {\n\t\t\tif (prev === to)\n\t\t\t\treturn;\n\t\t\tprev = prev._previous;\n\t\t}\n\t\twhile (from._next && from._next !== to)\n\t\t\tfrom = from._next;\n\t\tif (!from._next) {\n\t\t\twhile (to._previous)\n\t\t\t\tto = to._previous;\n\t\t\tfrom._next = to;\n\t\t\tto._previous = from;\n\t\t}\n\t}\n\n\tfunction clearCurveHandles(curves) {\n\t\tfor (var i = curves.length - 1; i >= 0; i--)\n\t\t\tcurves[i].clearHandles();\n\t}\n\n\tfunction reorientPaths(paths, isInside, clockwise) {\n\t\tvar length = paths && paths.length;\n\t\tif (length) {\n\t\t\tvar lookup = Base.each(paths, function (path, i) {\n\t\t\t\t\tthis[path._id] = {\n\t\t\t\t\t\tcontainer: null,\n\t\t\t\t\t\twinding: path.isClockwise() ? 1 : -1,\n\t\t\t\t\t\tindex: i\n\t\t\t\t\t};\n\t\t\t\t}, {}),\n\t\t\t\tsorted = paths.slice().sort(function (a, b) {\n\t\t\t\t\treturn abs(b.getArea()) - abs(a.getArea());\n\t\t\t\t}),\n\t\t\t\tfirst = sorted[0];\n\t\t\tvar collisions = CollisionDetection.findItemBoundsCollisions(sorted,\n\t\t\t\t\tnull, Numerical.GEOMETRIC_EPSILON);\n\t\t\tif (clockwise == null)\n\t\t\t\tclockwise = first.isClockwise();\n\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\tvar path1 = sorted[i],\n\t\t\t\t\tentry1 = lookup[path1._id],\n\t\t\t\t\tcontainerWinding = 0,\n\t\t\t\t\tindices = collisions[i];\n\t\t\t\tif (indices) {\n\t\t\t\t\tvar point = null;\n\t\t\t\t\tfor (var j = indices.length - 1; j >= 0; j--) {\n\t\t\t\t\t\tif (indices[j] < i) {\n\t\t\t\t\t\t\tpoint = point || path1.getInteriorPoint();\n\t\t\t\t\t\t\tvar path2 = sorted[indices[j]];\n\t\t\t\t\t\t\tif (path2.contains(point)) {\n\t\t\t\t\t\t\t\tvar entry2 = lookup[path2._id];\n\t\t\t\t\t\t\t\tcontainerWinding = entry2.winding;\n\t\t\t\t\t\t\t\tentry1.winding += containerWinding;\n\t\t\t\t\t\t\t\tentry1.container = entry2.exclude\n\t\t\t\t\t\t\t\t\t? entry2.container : path2;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (isInside(entry1.winding) === isInside(containerWinding)) {\n\t\t\t\t\tentry1.exclude = true;\n\t\t\t\t\tpaths[entry1.index] = null;\n\t\t\t\t} else {\n\t\t\t\t\tvar container = entry1.container;\n\t\t\t\t\tpath1.setClockwise(\n\t\t\t\t\t\t\tcontainer ? !container.isClockwise() : clockwise);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\tfunction divideLocations(locations, include, clearLater) {\n\t\tvar results = include && [],\n\t\t\ttMin = 1e-8,\n\t\t\ttMax = 1 - tMin,\n\t\t\tclearHandles = false,\n\t\t\tclearCurves = clearLater || [],\n\t\t\tclearLookup = clearLater && {},\n\t\t\trenormalizeLocs,\n\t\t\tprevCurve,\n\t\t\tprevTime;\n\n\t\tfunction getId(curve) {\n\t\t\treturn curve._path._id + '.' + curve._segment1._index;\n\t\t}\n\n\t\tfor (var i = (clearLater && clearLater.length) - 1; i >= 0; i--) {\n\t\t\tvar curve = clearLater[i];\n\t\t\tif (curve._path)\n\t\t\t\tclearLookup[getId(curve)] = true;\n\t\t}\n\n\t\tfor (var i = locations.length - 1; i >= 0; i--) {\n\t\t\tvar loc = locations[i],\n\t\t\t\ttime = loc._time,\n\t\t\t\torigTime = time,\n\t\t\t\texclude = include && !include(loc),\n\t\t\t\tcurve = loc._curve,\n\t\t\t\tsegment;\n\t\t\tif (curve) {\n\t\t\t\tif (curve !== prevCurve) {\n\t\t\t\t\tclearHandles = !curve.hasHandles()\n\t\t\t\t\t\t\t|| clearLookup && clearLookup[getId(curve)];\n\t\t\t\t\trenormalizeLocs = [];\n\t\t\t\t\tprevTime = null;\n\t\t\t\t\tprevCurve = curve;\n\t\t\t\t} else if (prevTime >= tMin) {\n\t\t\t\t\ttime /= prevTime;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (exclude) {\n\t\t\t\tif (renormalizeLocs)\n\t\t\t\t\trenormalizeLocs.push(loc);\n\t\t\t\tcontinue;\n\t\t\t} else if (include) {\n\t\t\t\tresults.unshift(loc);\n\t\t\t}\n\t\t\tprevTime = origTime;\n\t\t\tif (time < tMin) {\n\t\t\t\tsegment = curve._segment1;\n\t\t\t} else if (time > tMax) {\n\t\t\t\tsegment = curve._segment2;\n\t\t\t} else {\n\t\t\t\tvar newCurve = curve.divideAtTime(time, true);\n\t\t\t\tif (clearHandles)\n\t\t\t\t\tclearCurves.push(curve, newCurve);\n\t\t\t\tsegment = newCurve._segment1;\n\t\t\t\tfor (var j = renormalizeLocs.length - 1; j >= 0; j--) {\n\t\t\t\t\tvar l = renormalizeLocs[j];\n\t\t\t\t\tl._time = (l._time - time) / (1 - time);\n\t\t\t\t}\n\t\t\t}\n\t\t\tloc._setSegment(segment);\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tdest = loc._intersection;\n\t\t\tif (inter) {\n\t\t\t\tlinkIntersections(inter, dest);\n\t\t\t\tvar other = inter;\n\t\t\t\twhile (other) {\n\t\t\t\t\tlinkIntersections(other._intersection, inter);\n\t\t\t\t\tother = other._next;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tsegment._intersection = dest;\n\t\t\t}\n\t\t}\n\t\tif (!clearLater)\n\t\t\tclearCurveHandles(clearCurves);\n\t\treturn results || locations;\n\t}\n\n\tfunction getWinding(point, curves, dir, closed, dontFlip) {\n\t\tvar curvesList = Array.isArray(curves)\n\t\t\t? curves\n\t\t\t: curves[dir ? 'hor' : 'ver'];\n\t\tvar ia = dir ? 1 : 0,\n\t\t\tio = ia ^ 1,\n\t\t\tpv = [point.x, point.y],\n\t\t\tpa = pv[ia],\n\t\t\tpo = pv[io],\n\t\t\twindingEpsilon = 1e-9,\n\t\t\tqualityEpsilon = 1e-6,\n\t\t\tpaL = pa - windingEpsilon,\n\t\t\tpaR = pa + windingEpsilon,\n\t\t\twindingL = 0,\n\t\t\twindingR = 0,\n\t\t\tpathWindingL = 0,\n\t\t\tpathWindingR = 0,\n\t\t\tonPath = false,\n\t\t\tonAnyPath = false,\n\t\t\tquality = 1,\n\t\t\troots = [],\n\t\t\tvPrev,\n\t\t\tvClose;\n\n\t\tfunction addWinding(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po < min(o0, o3) || po > max(o0, o3)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar a0 = v[ia + 0],\n\t\t\t\ta1 = v[ia + 2],\n\t\t\t\ta2 = v[ia + 4],\n\t\t\t\ta3 = v[ia + 6];\n\t\t\tif (o0 === o3) {\n\t\t\t\tif (a0 < paR && a3 > paL || a3 < paR && a0 > paL) {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar t = po === o0 ? 0\n\t\t\t\t\t: po === o3 ? 1\n\t\t\t\t\t: paL > max(a0, a1, a2, a3) || paR < min(a0, a1, a2, a3)\n\t\t\t\t\t? 1\n\t\t\t\t\t: Curve.solveCubic(v, io, po, roots, 0, 1) > 0\n\t\t\t\t\t\t? roots[0]\n\t\t\t\t\t\t: 1,\n\t\t\t\ta = t === 0 ? a0\n\t\t\t\t\t: t === 1 ? a3\n\t\t\t\t\t: Curve.getPoint(v, t)[dir ? 'y' : 'x'],\n\t\t\t\twinding = o0 > o3 ? 1 : -1,\n\t\t\t\twindingPrev = vPrev[io] > vPrev[io + 6] ? 1 : -1,\n\t\t\t\ta3Prev = vPrev[ia + 6];\n\t\t\tif (po !== o0) {\n\t\t\t\tif (a < paL) {\n\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t} else if (a > paR) {\n\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t} else {\n\t\t\t\t\tonPath = true;\n\t\t\t\t}\n\t\t\t\tif (a > pa - qualityEpsilon && a < pa + qualityEpsilon)\n\t\t\t\t\tquality /= 2;\n\t\t\t} else {\n\t\t\t\tif (winding !== windingPrev) {\n\t\t\t\t\tif (a0 < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t} else if (a0 > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t}\n\t\t\t\t} else if (a0 != a3Prev) {\n\t\t\t\t\tif (a3Prev < paR && a > paR) {\n\t\t\t\t\t\tpathWindingR += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t} else if (a3Prev > paL && a < paL) {\n\t\t\t\t\t\tpathWindingL += winding;\n\t\t\t\t\t\tonPath = true;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tquality /= 4;\n\t\t\t}\n\t\t\tvPrev = v;\n\t\t\treturn !dontFlip && a > paL && a < paR\n\t\t\t\t\t&& Curve.getTangent(v, t)[dir ? 'x' : 'y'] === 0\n\t\t\t\t\t&& getWinding(point, curves, !dir, closed, true);\n\t\t}\n\n\t\tfunction handleCurve(v) {\n\t\t\tvar o0 = v[io + 0],\n\t\t\t\to1 = v[io + 2],\n\t\t\t\to2 = v[io + 4],\n\t\t\t\to3 = v[io + 6];\n\t\t\tif (po <= max(o0, o1, o2, o3) && po >= min(o0, o1, o2, o3)) {\n\t\t\t\tvar a0 = v[ia + 0],\n\t\t\t\t\ta1 = v[ia + 2],\n\t\t\t\t\ta2 = v[ia + 4],\n\t\t\t\t\ta3 = v[ia + 6],\n\t\t\t\t\tmonoCurves = paL > max(a0, a1, a2, a3) ||\n\t\t\t\t\t\t\t\t paR < min(a0, a1, a2, a3)\n\t\t\t\t\t\t\t? [v] : Curve.getMonoCurves(v, dir),\n\t\t\t\t\tres;\n\t\t\t\tfor (var i = 0, l = monoCurves.length; i < l; i++) {\n\t\t\t\t\tif (res = addWinding(monoCurves[i]))\n\t\t\t\t\t\treturn res;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 0, l = curvesList.length; i < l; i++) {\n\t\t\tvar curve = curvesList[i],\n\t\t\t\tpath = curve._path,\n\t\t\t\tv = curve.getValues(),\n\t\t\t\tres;\n\t\t\tif (!i || curvesList[i - 1]._path !== path) {\n\t\t\t\tvPrev = null;\n\t\t\t\tif (!path._closed) {\n\t\t\t\t\tvClose = Curve.getValues(\n\t\t\t\t\t\t\tpath.getLastCurve().getSegment2(),\n\t\t\t\t\t\t\tcurve.getSegment1(),\n\t\t\t\t\t\t\tnull, !closed);\n\t\t\t\t\tif (vClose[io] !== vClose[io + 6]) {\n\t\t\t\t\t\tvPrev = vClose;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!vPrev) {\n\t\t\t\t\tvPrev = v;\n\t\t\t\t\tvar prev = path.getLastCurve();\n\t\t\t\t\twhile (prev && prev !== curve) {\n\t\t\t\t\t\tvar v2 = prev.getValues();\n\t\t\t\t\t\tif (v2[io] !== v2[io + 6]) {\n\t\t\t\t\t\t\tvPrev = v2;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tprev = prev.getPrevious();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (res = handleCurve(v))\n\t\t\t\treturn res;\n\n\t\t\tif (i + 1 === l || curvesList[i + 1]._path !== path) {\n\t\t\t\tif (vClose && (res = handleCurve(vClose)))\n\t\t\t\t\treturn res;\n\t\t\t\tif (onPath && !pathWindingL && !pathWindingR) {\n\t\t\t\t\tpathWindingL = pathWindingR = path.isClockwise(closed) ^ dir\n\t\t\t\t\t\t\t? 1 : -1;\n\t\t\t\t}\n\t\t\t\twindingL += pathWindingL;\n\t\t\t\twindingR += pathWindingR;\n\t\t\t\tpathWindingL = pathWindingR = 0;\n\t\t\t\tif (onPath) {\n\t\t\t\t\tonAnyPath = true;\n\t\t\t\t\tonPath = false;\n\t\t\t\t}\n\t\t\t\tvClose = null;\n\t\t\t}\n\t\t}\n\t\twindingL = abs(windingL);\n\t\twindingR = abs(windingR);\n\t\treturn {\n\t\t\twinding: max(windingL, windingR),\n\t\t\twindingL: windingL,\n\t\t\twindingR: windingR,\n\t\t\tquality: quality,\n\t\t\tonPath: onAnyPath\n\t\t};\n\t}\n\n\tfunction propagateWinding(segment, path1, path2, curveCollisionsMap,\n\t\t\toperator) {\n\t\tvar chain = [],\n\t\t\tstart = segment,\n\t\t\ttotalLength = 0,\n\t\t\twinding;\n\t\tdo {\n\t\t\tvar curve = segment.getCurve();\n\t\t\tif (curve) {\n\t\t\t\tvar length = curve.getLength();\n\t\t\t\tchain.push({ segment: segment, curve: curve, length: length });\n\t\t\t\ttotalLength += length;\n\t\t\t}\n\t\t\tsegment = segment.getNext();\n\t\t} while (segment && !segment._intersection && segment !== start);\n\t\tvar offsets = [0.5, 0.25, 0.75],\n\t\t\twinding = { winding: 0, quality: -1 },\n\t\t\ttMin = 1e-3,\n\t\t\ttMax = 1 - tMin;\n\t\tfor (var i = 0; i < offsets.length && winding.quality < 0.5; i++) {\n\t\t\tvar length = totalLength * offsets[i];\n\t\t\tfor (var j = 0, l = chain.length; j < l; j++) {\n\t\t\t\tvar entry = chain[j],\n\t\t\t\t\tcurveLength = entry.length;\n\t\t\t\tif (length <= curveLength) {\n\t\t\t\t\tvar curve = entry.curve,\n\t\t\t\t\t\tpath = curve._path,\n\t\t\t\t\t\tparent = path._parent,\n\t\t\t\t\t\toperand = parent instanceof CompoundPath ? parent : path,\n\t\t\t\t\t\tt = Numerical.clamp(curve.getTimeAt(length), tMin, tMax),\n\t\t\t\t\t\tpt = curve.getPointAtTime(t),\n\t\t\t\t\t\tdir = abs(curve.getTangentAtTime(t).y) < Math.SQRT1_2;\n\t\t\t\t\tvar wind = null;\n\t\t\t\t\tif (operator.subtract && path2) {\n\t\t\t\t\t\tvar otherPath = operand === path1 ? path2 : path1,\n\t\t\t\t\t\t\tpathWinding = otherPath._getWinding(pt, dir, true);\n\t\t\t\t\t\tif (operand === path1 && pathWinding.winding ||\n\t\t\t\t\t\t\toperand === path2 && !pathWinding.winding) {\n\t\t\t\t\t\t\tif (pathWinding.quality < 1) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\twind = { winding: 0, quality: 1 };\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\twind = wind || getWinding(\n\t\t\t\t\t\t\tpt, curveCollisionsMap[path._id][curve.getIndex()],\n\t\t\t\t\t\t\tdir, true);\n\t\t\t\t\tif (wind.quality > winding.quality)\n\t\t\t\t\t\twinding = wind;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tlength -= curveLength;\n\t\t\t}\n\t\t}\n\t\tfor (var j = chain.length - 1; j >= 0; j--) {\n\t\t\tchain[j].segment._winding = winding;\n\t\t}\n\t}\n\n\tfunction tracePaths(segments, operator) {\n\t\tvar paths = [],\n\t\t\tstarts;\n\n\t\tfunction isValid(seg) {\n\t\t\tvar winding;\n\t\t\treturn !!(seg && !seg._visited && (!operator\n\t\t\t\t\t|| operator[(winding = seg._winding || {}).winding]\n\t\t\t\t\t\t&& !(operator.unite && winding.winding === 2\n\t\t\t\t\t\t\t&& winding.windingL && winding.windingR)));\n\t\t}\n\n\t\tfunction isStart(seg) {\n\t\t\tif (seg) {\n\t\t\t\tfor (var i = 0, l = starts.length; i < l; i++) {\n\t\t\t\t\tif (seg === starts[i])\n\t\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction visitPath(path) {\n\t\t\tvar segments = path._segments;\n\t\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\t\tsegments[i]._visited = true;\n\t\t\t}\n\t\t}\n\n\t\tfunction getCrossingSegments(segment, collectStarts) {\n\t\t\tvar inter = segment._intersection,\n\t\t\t\tstart = inter,\n\t\t\t\tcrossings = [];\n\t\t\tif (collectStarts)\n\t\t\t\tstarts = [segment];\n\n\t\t\tfunction collect(inter, end) {\n\t\t\t\twhile (inter && inter !== end) {\n\t\t\t\t\tvar other = inter._segment,\n\t\t\t\t\t\tpath = other && other._path;\n\t\t\t\t\tif (path) {\n\t\t\t\t\t\tvar next = other.getNext() || path.getFirstSegment(),\n\t\t\t\t\t\t\tnextInter = next._intersection;\n\t\t\t\t\t\tif (other !== segment && (isStart(other)\n\t\t\t\t\t\t\t|| isStart(next)\n\t\t\t\t\t\t\t|| next && (isValid(other) && (isValid(next)\n\t\t\t\t\t\t\t\t|| nextInter && isValid(nextInter._segment))))\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tcrossings.push(other);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (collectStarts)\n\t\t\t\t\t\t\tstarts.push(other);\n\t\t\t\t\t}\n\t\t\t\t\tinter = inter._next;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (inter) {\n\t\t\t\tcollect(inter);\n\t\t\t\twhile (inter && inter._previous)\n\t\t\t\t\tinter = inter._previous;\n\t\t\t\tcollect(inter, start);\n\t\t\t}\n\t\t\treturn crossings;\n\t\t}\n\n\t\tsegments.sort(function(seg1, seg2) {\n\t\t\tvar inter1 = seg1._intersection,\n\t\t\t\tinter2 = seg2._intersection,\n\t\t\t\tover1 = !!(inter1 && inter1._overlap),\n\t\t\t\tover2 = !!(inter2 && inter2._overlap),\n\t\t\t\tpath1 = seg1._path,\n\t\t\t\tpath2 = seg2._path;\n\t\t\treturn over1 ^ over2\n\t\t\t\t\t? over1 ? 1 : -1\n\t\t\t\t\t: !inter1 ^ !inter2\n\t\t\t\t\t\t? inter1 ? 1 : -1\n\t\t\t\t\t\t: path1 !== path2\n\t\t\t\t\t\t\t? path1._id - path2._id\n\t\t\t\t\t\t\t: seg1._index - seg2._index;\n\t\t});\n\n\t\tfor (var i = 0, l = segments.length; i < l; i++) {\n\t\t\tvar seg = segments[i],\n\t\t\t\tvalid = isValid(seg),\n\t\t\t\tpath = null,\n\t\t\t\tfinished = false,\n\t\t\t\tclosed = true,\n\t\t\t\tbranches = [],\n\t\t\t\tbranch,\n\t\t\t\tvisited,\n\t\t\t\thandleIn;\n\t\t\tif (valid && seg._path._overlapsOnly) {\n\t\t\t\tvar path1 = seg._path,\n\t\t\t\t\tpath2 = seg._intersection._segment._path;\n\t\t\t\tif (path1.compare(path2)) {\n\t\t\t\t\tif (path1.getArea())\n\t\t\t\t\t\tpaths.push(path1.clone(false));\n\t\t\t\t\tvisitPath(path1);\n\t\t\t\t\tvisitPath(path2);\n\t\t\t\t\tvalid = false;\n\t\t\t\t}\n\t\t\t}\n\t\t\twhile (valid) {\n\t\t\t\tvar first = !path,\n\t\t\t\t\tcrossings = getCrossingSegments(seg, first),\n\t\t\t\t\tother = crossings.shift(),\n\t\t\t\t\tfinished = !first && (isStart(seg) || isStart(other)),\n\t\t\t\t\tcross = !finished && other;\n\t\t\t\tif (first) {\n\t\t\t\t\tpath = new Path(Item.NO_INSERT);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (finished) {\n\t\t\t\t\tif (seg.isFirst() || seg.isLast())\n\t\t\t\t\t\tclosed = seg._path._closed;\n\t\t\t\t\tseg._visited = true;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (cross && branch) {\n\t\t\t\t\tbranches.push(branch);\n\t\t\t\t\tbranch = null;\n\t\t\t\t}\n\t\t\t\tif (!branch) {\n\t\t\t\t\tif (cross)\n\t\t\t\t\t\tcrossings.push(seg);\n\t\t\t\t\tbranch = {\n\t\t\t\t\t\tstart: path._segments.length,\n\t\t\t\t\t\tcrossings: crossings,\n\t\t\t\t\t\tvisited: visited = [],\n\t\t\t\t\t\thandleIn: handleIn\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t\tif (cross)\n\t\t\t\t\tseg = other;\n\t\t\t\tif (!isValid(seg)) {\n\t\t\t\t\tpath.removeSegments(branch.start);\n\t\t\t\t\tfor (var j = 0, k = visited.length; j < k; j++) {\n\t\t\t\t\t\tvisited[j]._visited = false;\n\t\t\t\t\t}\n\t\t\t\t\tvisited.length = 0;\n\t\t\t\t\tdo {\n\t\t\t\t\t\tseg = branch && branch.crossings.shift();\n\t\t\t\t\t\tif (!seg || !seg._path) {\n\t\t\t\t\t\t\tseg = null;\n\t\t\t\t\t\t\tbranch = branches.pop();\n\t\t\t\t\t\t\tif (branch) {\n\t\t\t\t\t\t\t\tvisited = branch.visited;\n\t\t\t\t\t\t\t\thandleIn = branch.handleIn;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} while (branch && !isValid(seg));\n\t\t\t\t\tif (!seg)\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tvar next = seg.getNext();\n\t\t\t\tpath.add(new Segment(seg._point, handleIn,\n\t\t\t\t\t\tnext && seg._handleOut));\n\t\t\t\tseg._visited = true;\n\t\t\t\tvisited.push(seg);\n\t\t\t\tseg = next || seg._path.getFirstSegment();\n\t\t\t\thandleIn = next && next._handleIn;\n\t\t\t}\n\t\t\tif (finished) {\n\t\t\t\tif (closed) {\n\t\t\t\t\tpath.getFirstSegment().setHandleIn(handleIn);\n\t\t\t\t\tpath.setClosed(closed);\n\t\t\t\t}\n\t\t\t\tif (path.getArea() !== 0) {\n\t\t\t\t\tpaths.push(path);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn paths;\n\t}\n\n\treturn {\n\t\t_getWinding: function(point, dir, closed) {\n\t\t\treturn getWinding(point, this.getCurves(), dir, closed);\n\t\t},\n\n\t\tunite: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'unite', options);\n\t\t},\n\n\t\tintersect: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'intersect', options);\n\t\t},\n\n\t\tsubtract: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'subtract', options);\n\t\t},\n\n\t\texclude: function(path, options) {\n\t\t\treturn traceBoolean(this, path, 'exclude', options);\n\t\t},\n\n\t\tdivide: function(path, options) {\n\t\t\treturn options && (options.trace == false || options.stroke)\n\t\t\t\t\t? splitBoolean(this, path, 'divide')\n\t\t\t\t\t: createResult([\n\t\t\t\t\t\tthis.subtract(path, options),\n\t\t\t\t\t\tthis.intersect(path, options)\n\t\t\t\t\t], true, this, path, options);\n\t\t},\n\n\t\tresolveCrossings: function() {\n\t\t\tvar children = this._children,\n\t\t\t\tpaths = children || [this];\n\n\t\t\tfunction hasOverlap(seg, path) {\n\t\t\t\tvar inter = seg && seg._intersection;\n\t\t\t\treturn inter && inter._overlap && inter._path === path;\n\t\t\t}\n\n\t\t\tvar hasOverlaps = false,\n\t\t\t\thasCrossings = false,\n\t\t\t\tintersections = this.getIntersections(null, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap() && (hasOverlaps = true) ||\n\t\t\t\t\t\t\tinter.isCrossing() && (hasCrossings = true);\n\t\t\t\t}),\n\t\t\t\tclearCurves = hasOverlaps && hasCrossings && [];\n\t\t\tintersections = CurveLocation.expand(intersections);\n\t\t\tif (hasOverlaps) {\n\t\t\t\tvar overlaps = divideLocations(intersections, function(inter) {\n\t\t\t\t\treturn inter.hasOverlap();\n\t\t\t\t}, clearCurves);\n\t\t\t\tfor (var i = overlaps.length - 1; i >= 0; i--) {\n\t\t\t\t\tvar overlap = overlaps[i],\n\t\t\t\t\t\tpath = overlap._path,\n\t\t\t\t\t\tseg = overlap._segment,\n\t\t\t\t\t\tprev = seg.getPrevious(),\n\t\t\t\t\t\tnext = seg.getNext();\n\t\t\t\t\tif (hasOverlap(prev, path) && hasOverlap(next, path)) {\n\t\t\t\t\t\tseg.remove();\n\t\t\t\t\t\tprev._handleOut._set(0, 0);\n\t\t\t\t\t\tnext._handleIn._set(0, 0);\n\t\t\t\t\t\tif (prev !== seg && !prev.getCurve().hasLength()) {\n\t\t\t\t\t\t\tnext._handleIn.set(prev._handleIn);\n\t\t\t\t\t\t\tprev.remove();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (hasCrossings) {\n\t\t\t\tdivideLocations(intersections, hasOverlaps && function(inter) {\n\t\t\t\t\tvar curve1 = inter.getCurve(),\n\t\t\t\t\t\tseg1 = inter.getSegment(),\n\t\t\t\t\t\tother = inter._intersection,\n\t\t\t\t\t\tcurve2 = other._curve,\n\t\t\t\t\t\tseg2 = other._segment;\n\t\t\t\t\tif (curve1 && curve2 && curve1._path && curve2._path)\n\t\t\t\t\t\treturn true;\n\t\t\t\t\tif (seg1)\n\t\t\t\t\t\tseg1._intersection = null;\n\t\t\t\t\tif (seg2)\n\t\t\t\t\t\tseg2._intersection = null;\n\t\t\t\t}, clearCurves);\n\t\t\t\tif (clearCurves)\n\t\t\t\t\tclearCurveHandles(clearCurves);\n\t\t\t\tpaths = tracePaths(Base.each(paths, function(path) {\n\t\t\t\t\tBase.push(this, path._segments);\n\t\t\t\t}, []));\n\t\t\t}\n\t\t\tvar length = paths.length,\n\t\t\t\titem;\n\t\t\tif (length > 1 && children) {\n\t\t\t\tif (paths !== children)\n\t\t\t\t\tthis.setChildren(paths);\n\t\t\t\titem = this;\n\t\t\t} else if (length === 1 && !children) {\n\t\t\t\tif (paths[0] !== this)\n\t\t\t\t\tthis.setSegments(paths[0].removeSegments());\n\t\t\t\titem = this;\n\t\t\t}\n\t\t\tif (!item) {\n\t\t\t\titem = new CompoundPath(Item.NO_INSERT);\n\t\t\t\titem.addChildren(paths);\n\t\t\t\titem = item.reduce();\n\t\t\t\titem.copyAttributes(this);\n\t\t\t\tthis.replaceWith(item);\n\t\t\t}\n\t\t\treturn item;\n\t\t},\n\n\t\treorient: function(nonZero, clockwise) {\n\t\t\tvar children = this._children;\n\t\t\tif (children && children.length) {\n\t\t\t\tthis.setChildren(reorientPaths(this.removeChildren(),\n\t\t\t\t\t\tfunction(w) {\n\t\t\t\t\t\t\treturn !!(nonZero ? w : w & 1);\n\t\t\t\t\t\t},\n\t\t\t\t\t\tclockwise));\n\t\t\t} else if (clockwise !== undefined) {\n\t\t\t\tthis.setClockwise(clockwise);\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\t\tgetInteriorPoint: function() {\n\t\t\tvar bounds = this.getBounds(),\n\t\t\t\tpoint = bounds.getCenter(true);\n\t\t\tif (!this.contains(point)) {\n\t\t\t\tvar curves = this.getCurves(),\n\t\t\t\t\ty = point.y,\n\t\t\t\t\tintercepts = [],\n\t\t\t\t\troots = [];\n\t\t\t\tfor (var i = 0, l = curves.length; i < l; i++) {\n\t\t\t\t\tvar v = curves[i].getValues(),\n\t\t\t\t\t\to0 = v[1],\n\t\t\t\t\t\to1 = v[3],\n\t\t\t\t\t\to2 = v[5],\n\t\t\t\t\t\to3 = v[7];\n\t\t\t\t\tif (y >= min(o0, o1, o2, o3) && y <= max(o0, o1, o2, o3)) {\n\t\t\t\t\t\tvar monoCurves = Curve.getMonoCurves(v);\n\t\t\t\t\t\tfor (var j = 0, m = monoCurves.length; j < m; j++) {\n\t\t\t\t\t\t\tvar mv = monoCurves[j],\n\t\t\t\t\t\t\t\tmo0 = mv[1],\n\t\t\t\t\t\t\t\tmo3 = mv[7];\n\t\t\t\t\t\t\tif ((mo0 !== mo3) &&\n\t\t\t\t\t\t\t\t(y >= mo0 && y <= mo3 || y >= mo3 && y <= mo0)){\n\t\t\t\t\t\t\t\tvar x = y === mo0 ? mv[0]\n\t\t\t\t\t\t\t\t\t: y === mo3 ? mv[6]\n\t\t\t\t\t\t\t\t\t: Curve.solveCubic(mv, 1, y, roots, 0, 1)\n\t\t\t\t\t\t\t\t\t\t=== 1\n\t\t\t\t\t\t\t\t\t\t? Curve.getPoint(mv, roots[0]).x\n\t\t\t\t\t\t\t\t\t\t: (mv[0] + mv[6]) / 2;\n\t\t\t\t\t\t\t\tintercepts.push(x);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (intercepts.length > 1) {\n\t\t\t\t\tintercepts.sort(function(a, b) { return a - b; });\n\t\t\t\t\tpoint.x = (intercepts[0] + intercepts[1]) / 2;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn point;\n\t\t}\n\t};\n});\n\nvar PathFlattener = Base.extend({\n\t_class: 'PathFlattener',\n\n\tinitialize: function(path, flatness, maxRecursion, ignoreStraight, matrix) {\n\t\tvar curves = [],\n\t\t\tparts = [],\n\t\t\tlength = 0,\n\t\t\tminSpan = 1 / (maxRecursion || 32),\n\t\t\tsegments = path._segments,\n\t\t\tsegment1 = segments[0],\n\t\t\tsegment2;\n\n\t\tfunction addCurve(segment1, segment2) {\n\t\t\tvar curve = Curve.getValues(segment1, segment2, matrix);\n\t\t\tcurves.push(curve);\n\t\t\tcomputeParts(curve, segment1._index, 0, 1);\n\t\t}\n\n\t\tfunction computeParts(curve, index, t1, t2) {\n\t\t\tif ((t2 - t1) > minSpan\n\t\t\t\t\t&& !(ignoreStraight && Curve.isStraight(curve))\n\t\t\t\t\t&& !Curve.isFlatEnough(curve, flatness || 0.25)) {\n\t\t\t\tvar halves = Curve.subdivide(curve, 0.5),\n\t\t\t\t\ttMid = (t1 + t2) / 2;\n\t\t\t\tcomputeParts(halves[0], index, t1, tMid);\n\t\t\t\tcomputeParts(halves[1], index, tMid, t2);\n\t\t\t} else {\n\t\t\t\tvar dx = curve[6] - curve[0],\n\t\t\t\t\tdy = curve[7] - curve[1],\n\t\t\t\t\tdist = Math.sqrt(dx * dx + dy * dy);\n\t\t\t\tif (dist > 0) {\n\t\t\t\t\tlength += dist;\n\t\t\t\t\tparts.push({\n\t\t\t\t\t\toffset: length,\n\t\t\t\t\t\tcurve: curve,\n\t\t\t\t\t\tindex: index,\n\t\t\t\t\t\ttime: t2,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (var i = 1, l = segments.length; i < l; i++) {\n\t\t\tsegment2 = segments[i];\n\t\t\taddCurve(segment1, segment2);\n\t\t\tsegment1 = segment2;\n\t\t}\n\t\tif (path._closed)\n\t\t\taddCurve(segment2 || segment1, segments[0]);\n\t\tthis.curves = curves;\n\t\tthis.parts = parts;\n\t\tthis.length = length;\n\t\tthis.index = 0;\n\t},\n\n\t_get: function(offset) {\n\t\tvar parts = this.parts,\n\t\t\tlength = parts.length,\n\t\t\tstart,\n\t\t\ti, j = this.index;\n\t\tfor (;;) {\n\t\t\ti = j;\n\t\t\tif (!j || parts[--j].offset < offset)\n\t\t\t\tbreak;\n\t\t}\n\t\tfor (; i < length; i++) {\n\t\t\tvar part = parts[i];\n\t\t\tif (part.offset >= offset) {\n\t\t\t\tthis.index = i;\n\t\t\t\tvar prev = parts[i - 1],\n\t\t\t\t\tprevTime = prev && prev.index === part.index ? prev.time : 0,\n\t\t\t\t\tprevOffset = prev ? prev.offset : 0;\n\t\t\t\treturn {\n\t\t\t\t\tindex: part.index,\n\t\t\t\t\ttime: prevTime + (part.time - prevTime)\n\t\t\t\t\t\t* (offset - prevOffset) / (part.offset - prevOffset)\n\t\t\t\t};\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\tindex: parts[length - 1].index,\n\t\t\ttime: 1\n\t\t};\n\t},\n\n\tdrawPart: function(ctx, from, to) {\n\t\tvar start = this._get(from),\n\t\t\tend = this._get(to);\n\t\tfor (var i = start.index, l = end.index; i <= l; i++) {\n\t\t\tvar curve = Curve.getPart(this.curves[i],\n\t\t\t\t\ti === start.index ? start.time : 0,\n\t\t\t\t\ti === end.index ? end.time : 1);\n\t\t\tif (i === start.index)\n\t\t\t\tctx.moveTo(curve[0], curve[1]);\n\t\t\tctx.bezierCurveTo.apply(ctx, curve.slice(2));\n\t\t}\n\t}\n}, Base.each(Curve._evaluateMethods,\n\tfunction(name) {\n\t\tthis[name + 'At'] = function(offset) {\n\t\t\tvar param = this._get(offset);\n\t\t\treturn Curve[name](this.curves[param.index], param.time);\n\t\t};\n\t}, {})\n);\n\nvar PathFitter = Base.extend({\n\tinitialize: function(path) {\n\t\tvar points = this.points = [],\n\t\t\tsegments = path._segments,\n\t\t\tclosed = path._closed;\n\t\tfor (var i = 0, prev, l = segments.length; i < l; i++) {\n\t\t\tvar point = segments[i].point;\n\t\t\tif (!prev || !prev.equals(point)) {\n\t\t\t\tpoints.push(prev = point.clone());\n\t\t\t}\n\t\t}\n\t\tif (closed) {\n\t\t\tpoints.unshift(points[points.length - 1]);\n\t\t\tpoints.push(points[1]);\n\t\t}\n\t\tthis.closed = closed;\n\t},\n\n\tfit: function(error) {\n\t\tvar points = this.points,\n\t\t\tlength = points.length,\n\t\t\tsegments = null;\n\t\tif (length > 0) {\n\t\t\tsegments = [new Segment(points[0])];\n\t\t\tif (length > 1) {\n\t\t\t\tthis.fitCubic(segments, error, 0, length - 1,\n\t\t\t\t\t\tpoints[1].subtract(points[0]),\n\t\t\t\t\t\tpoints[length - 2].subtract(points[length - 1]));\n\t\t\t\tif (this.closed) {\n\t\t\t\t\tsegments.shift();\n\t\t\t\t\tsegments.pop();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn segments;\n\t},\n\n\tfitCubic: function(segments, error, first, last, tan1, tan2) {\n\t\tvar points = this.points;\n\t\tif (last - first === 1) {\n\t\t\tvar pt1 = points[first],\n\t\t\t\tpt2 = points[last],\n\t\t\t\tdist = pt1.getDistance(pt2) / 3;\n\t\t\tthis.addCurve(segments, [pt1, pt1.add(tan1.normalize(dist)),\n\t\t\t\t\tpt2.add(tan2.normalize(dist)), pt2]);\n\t\t\treturn;\n\t\t}\n\t\tvar uPrime = this.chordLengthParameterize(first, last),\n\t\t\tmaxError = Math.max(error, error * error),\n\t\t\tsplit,\n\t\t\tparametersInOrder = true;\n\t\tfor (var i = 0; i <= 4; i++) {\n\t\t\tvar curve = this.generateBezier(first, last, uPrime, tan1, tan2);\n\t\t\tvar max = this.findMaxError(first, last, curve, uPrime);\n\t\t\tif (max.error < error && parametersInOrder) {\n\t\t\t\tthis.addCurve(segments, curve);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsplit = max.index;\n\t\t\tif (max.error >= maxError)\n\t\t\t\tbreak;\n\t\t\tparametersInOrder = this.reparameterize(first, last, uPrime, curve);\n\t\t\tmaxError = max.error;\n\t\t}\n\t\tvar tanCenter = points[split - 1].subtract(points[split + 1]);\n\t\tthis.fitCubic(segments, error, first, split, tan1, tanCenter);\n\t\tthis.fitCubic(segments, error, split, last, tanCenter.negate(), tan2);\n\t},\n\n\taddCurve: function(segments, curve) {\n\t\tvar prev = segments[segments.length - 1];\n\t\tprev.setHandleOut(curve[1].subtract(curve[0]));\n\t\tsegments.push(new Segment(curve[3], curve[2].subtract(curve[3])));\n\t},\n\n\tgenerateBezier: function(first, last, uPrime, tan1, tan2) {\n\t\tvar epsilon = 1e-12,\n\t\t\tabs = Math.abs,\n\t\t\tpoints = this.points,\n\t\t\tpt1 = points[first],\n\t\t\tpt2 = points[last],\n\t\t\tC = [[0, 0], [0, 0]],\n\t\t\tX = [0, 0];\n\n\t\tfor (var i = 0, l = last - first + 1; i < l; i++) {\n\t\t\tvar u = uPrime[i],\n\t\t\t\tt = 1 - u,\n\t\t\t\tb = 3 * u * t,\n\t\t\t\tb0 = t * t * t,\n\t\t\t\tb1 = b * t,\n\t\t\t\tb2 = b * u,\n\t\t\t\tb3 = u * u * u,\n\t\t\t\ta1 = tan1.normalize(b1),\n\t\t\t\ta2 = tan2.normalize(b2),\n\t\t\t\ttmp = points[first + i]\n\t\t\t\t\t.subtract(pt1.multiply(b0 + b1))\n\t\t\t\t\t.subtract(pt2.multiply(b2 + b3));\n\t\t\tC[0][0] += a1.dot(a1);\n\t\t\tC[0][1] += a1.dot(a2);\n\t\t\tC[1][0] = C[0][1];\n\t\t\tC[1][1] += a2.dot(a2);\n\t\t\tX[0] += a1.dot(tmp);\n\t\t\tX[1] += a2.dot(tmp);\n\t\t}\n\n\t\tvar detC0C1 = C[0][0] * C[1][1] - C[1][0] * C[0][1],\n\t\t\talpha1,\n\t\t\talpha2;\n\t\tif (abs(detC0C1) > epsilon) {\n\t\t\tvar detC0X = C[0][0] * X[1] - C[1][0] * X[0],\n\t\t\t\tdetXC1 = X[0] * C[1][1] - X[1] * C[0][1];\n\t\t\talpha1 = detXC1 / detC0C1;\n\t\t\talpha2 = detC0X / detC0C1;\n\t\t} else {\n\t\t\tvar c0 = C[0][0] + C[0][1],\n\t\t\t\tc1 = C[1][0] + C[1][1];\n\t\t\talpha1 = alpha2 = abs(c0) > epsilon ? X[0] / c0\n\t\t\t\t\t\t\t: abs(c1) > epsilon ? X[1] / c1\n\t\t\t\t\t\t\t: 0;\n\t\t}\n\n\t\tvar segLength = pt2.getDistance(pt1),\n\t\t\teps = epsilon * segLength,\n\t\t\thandle1,\n\t\t\thandle2;\n\t\tif (alpha1 < eps || alpha2 < eps) {\n\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t} else {\n\t\t\tvar line = pt2.subtract(pt1);\n\t\t\thandle1 = tan1.normalize(alpha1);\n\t\t\thandle2 = tan2.normalize(alpha2);\n\t\t\tif (handle1.dot(line) - handle2.dot(line) > segLength * segLength) {\n\t\t\t\talpha1 = alpha2 = segLength / 3;\n\t\t\t\thandle1 = handle2 = null;\n\t\t\t}\n\t\t}\n\n\t\treturn [pt1,\n\t\t\t\tpt1.add(handle1 || tan1.normalize(alpha1)),\n\t\t\t\tpt2.add(handle2 || tan2.normalize(alpha2)),\n\t\t\t\tpt2];\n\t},\n\n\treparameterize: function(first, last, u, curve) {\n\t\tfor (var i = first; i <= last; i++) {\n\t\t\tu[i - first] = this.findRoot(curve, this.points[i], u[i - first]);\n\t\t}\n\t\tfor (var i = 1, l = u.length; i < l; i++) {\n\t\t\tif (u[i] <= u[i - 1])\n\t\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t},\n\n\tfindRoot: function(curve, point, u) {\n\t\tvar curve1 = [],\n\t\t\tcurve2 = [];\n\t\tfor (var i = 0; i <= 2; i++) {\n\t\t\tcurve1[i] = curve[i + 1].subtract(curve[i]).multiply(3);\n\t\t}\n\t\tfor (var i = 0; i <= 1; i++) {\n\t\t\tcurve2[i] = curve1[i + 1].subtract(curve1[i]).multiply(2);\n\t\t}\n\t\tvar pt = this.evaluate(3, curve, u),\n\t\t\tpt1 = this.evaluate(2, curve1, u),\n\t\t\tpt2 = this.evaluate(1, curve2, u),\n\t\t\tdiff = pt.subtract(point),\n\t\t\tdf = pt1.dot(pt1) + diff.dot(pt2);\n\t\treturn Numerical.isMachineZero(df) ? u : u - diff.dot(pt1) / df;\n\t},\n\n\tevaluate: function(degree, curve, t) {\n\t\tvar tmp = curve.slice();\n\t\tfor (var i = 1; i <= degree; i++) {\n\t\t\tfor (var j = 0; j <= degree - i; j++) {\n\t\t\t\ttmp[j] = tmp[j].multiply(1 - t).add(tmp[j + 1].multiply(t));\n\t\t\t}\n\t\t}\n\t\treturn tmp[0];\n\t},\n\n\tchordLengthParameterize: function(first, last) {\n\t\tvar u = [0];\n\t\tfor (var i = first + 1; i <= last; i++) {\n\t\t\tu[i - first] = u[i - first - 1]\n\t\t\t\t\t+ this.points[i].getDistance(this.points[i - 1]);\n\t\t}\n\t\tfor (var i = 1, m = last - first; i <= m; i++) {\n\t\t\tu[i] /= u[m];\n\t\t}\n\t\treturn u;\n\t},\n\n\tfindMaxError: function(first, last, curve, u) {\n\t\tvar index = Math.floor((last - first + 1) / 2),\n\t\t\tmaxDist = 0;\n\t\tfor (var i = first + 1; i < last; i++) {\n\t\t\tvar P = this.evaluate(3, curve, u[i - first]);\n\t\t\tvar v = P.subtract(this.points[i]);\n\t\t\tvar dist = v.x * v.x + v.y * v.y;\n\t\t\tif (dist >= maxDist) {\n\t\t\t\tmaxDist = dist;\n\t\t\t\tindex = i;\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\terror: maxDist,\n\t\t\tindex: index\n\t\t};\n\t}\n});\n\nvar TextItem = Item.extend({\n\t_class: 'TextItem',\n\t_applyMatrix: false,\n\t_canApplyMatrix: false,\n\t_serializeFields: {\n\t\tcontent: null\n\t},\n\t_boundsOptions: { stroke: false, handle: false },\n\n\tinitialize: function TextItem(arg) {\n\t\tthis._content = '';\n\t\tthis._lines = [];\n\t\tvar hasProps = arg && Base.isPlainObject(arg)\n\t\t\t\t&& arg.x === undefined && arg.y === undefined;\n\t\tthis._initialize(hasProps && arg, !hasProps && Point.read(arguments));\n\t},\n\n\t_equals: function(item) {\n\t\treturn this._content === item._content;\n\t},\n\n\tcopyContent: function(source) {\n\t\tthis.setContent(source._content);\n\t},\n\n\tgetContent: function() {\n\t\treturn this._content;\n\t},\n\n\tsetContent: function(content) {\n\t\tthis._content = '' + content;\n\t\tthis._lines = this._content.split(/\\r\\n|\\n|\\r/mg);\n\t\tthis._changed(521);\n\t},\n\n\tisEmpty: function() {\n\t\treturn !this._content;\n\t},\n\n\tgetCharacterStyle: '#getStyle',\n\tsetCharacterStyle: '#setStyle',\n\n\tgetParagraphStyle: '#getStyle',\n\tsetParagraphStyle: '#setStyle'\n});\n\nvar PointText = TextItem.extend({\n\t_class: 'PointText',\n\n\tinitialize: function PointText() {\n\t\tTextItem.apply(this, arguments);\n\t},\n\n\tgetPoint: function() {\n\t\tvar point = this._matrix.getTranslation();\n\t\treturn new LinkedPoint(point.x, point.y, this, 'setPoint');\n\t},\n\n\tsetPoint: function() {\n\t\tvar point = Point.read(arguments);\n\t\tthis.translate(point.subtract(this._matrix.getTranslation()));\n\t},\n\n\t_draw: function(ctx, param, viewMatrix) {\n\t\tif (!this._content)\n\t\t\treturn;\n\t\tthis._setStyles(ctx, param, viewMatrix);\n\t\tvar lines = this._lines,\n\t\t\tstyle = this._style,\n\t\t\thasFill = style.hasFill(),\n\t\t\thasStroke = style.hasStroke(),\n\t\t\tleading = style.getLeading(),\n\t\t\tshadowColor = ctx.shadowColor;\n\t\tctx.font = style.getFontStyle();\n\t\tctx.textAlign = style.getJustification();\n\t\tfor (var i = 0, l = lines.length; i < l; i++) {\n\t\t\tctx.shadowColor = shadowColor;\n\t\t\tvar line = lines[i];\n\t\t\tif (hasFill) {\n\t\t\t\tctx.fillText(line, 0, 0);\n\t\t\t\tctx.shadowColor = 'rgba(0,0,0,0)';\n\t\t\t}\n\t\t\tif (hasStroke)\n\t\t\t\tctx.strokeText(line, 0, 0);\n\t\t\tctx.translate(0, leading);\n\t\t}\n\t},\n\n\t_getBounds: function(matrix, options) {\n\t\tvar style = this._style,\n\t\t\tlines = this._lines,\n\t\t\tnumLines = lines.length,\n\t\t\tjustification = style.getJustification(),\n\t\t\tleading = style.getLeading(),\n\t\t\twidth = this.getView().getTextWidth(style.getFontStyle(), lines),\n\t\t\tx = 0;\n\t\tif (justification !== 'left')\n\t\t\tx -= width / (justification === 'center' ? 2: 1);\n\t\tvar rect = new Rectangle(x,\n\t\t\t\t\tnumLines ? - 0.75 * leading : 0,\n\t\t\t\t\twidth, numLines * leading);\n\t\treturn matrix ? matrix._transformBounds(rect, rect) : rect;\n\t}\n});\n\nvar Color = Base.extend(new function() {\n\tvar types = {\n\t\tgray: ['gray'],\n\t\trgb: ['red', 'green', 'blue'],\n\t\thsb: ['hue', 'saturation', 'brightness'],\n\t\thsl: ['hue', 'saturation', 'lightness'],\n\t\tgradient: ['gradient', 'origin', 'destination', 'highlight']\n\t};\n\n\tvar componentParsers = {},\n\t\tnamedColors = {\n\t\t\ttransparent: [0, 0, 0, 0]\n\t\t},\n\t\tcolorCtx;\n\n\tfunction fromCSS(string) {\n\t\tvar match = string.match(\n\t\t\t\t/^#([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})([\\da-f]{2})?$/i\n\t\t\t) || string.match(\n\t\t\t\t/^#([\\da-f])([\\da-f])([\\da-f])([\\da-f])?$/i\n\t\t\t),\n\t\t\ttype = 'rgb',\n\t\t\tcomponents;\n\t\tif (match) {\n\t\t\tvar amount = match[4] ? 4 : 3;\n\t\t\tcomponents = new Array(amount);\n\t\t\tfor (var i = 0; i < amount; i++) {\n\t\t\t\tvar value = match[i + 1];\n\t\t\t\tcomponents[i] = parseInt(value.length == 1\n\t\t\t\t\t\t? value + value : value, 16) / 255;\n\t\t\t}\n\t\t} else if (match = string.match(/^(rgb|hsl)a?\\((.*)\\)$/)) {\n\t\t\ttype = match[1];\n\t\t\tcomponents = match[2].trim().split(/[,\\s]+/g);\n\t\t\tvar isHSL = type === 'hsl';\n\t\t\tfor (var i = 0, l = Math.min(components.length, 4); i < l; i++) {\n\t\t\t\tvar component = components[i];\n\t\t\t\tvar value = parseFloat(component);\n\t\t\t\tif (isHSL) {\n\t\t\t\t\tif (i === 0) {\n\t\t\t\t\t\tvar unit = component.match(/([a-z]*)$/)[1];\n\t\t\t\t\t\tvalue *= ({\n\t\t\t\t\t\t\tturn: 360,\n\t\t\t\t\t\t\trad: 180 / Math.PI,\n\t\t\t\t\t\t\tgrad: 0.9\n\t\t\t\t\t\t}[unit] || 1);\n\t\t\t\t\t} else if (i < 3) {\n\t\t\t\t\t\tvalue /= 100;\n\t\t\t\t\t}\n\t\t\t\t} else if (i < 3) {\n\t\t\t\t\tvalue /= /%$/.test(component) ? 100 : 255;\n\t\t\t\t}\n\t\t\t\tcomponents[i] = value;\n\t\t\t}\n\t\t} else {\n\t\t\tvar color = namedColors[string];\n\t\t\tif (!color) {\n\t\t\t\tif (window) {\n\t\t\t\t\tif (!colorCtx) {\n\t\t\t\t\t\tcolorCtx = CanvasProvider.getContext(1, 1, {\n\t\t\t\t\t\t\twillReadFrequently: true\n\t\t\t\t\t\t});\n\t\t\t\t\t\tcolorCtx.globalCompositeOperation = 'copy';\n\t\t\t\t\t}\n\t\t\t\t\tcolorCtx.fillStyle = 'rgba(0,0,0,0)';\n\t\t\t\t\tcolorCtx.fillStyle = string;\n\t\t\t\t\tcolorCtx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tvar data = colorCtx.getImageData(0, 0, 1, 1).data;\n\t\t\t\t\tcolor = namedColors[string] = [\n\t\t\t\t\t\tdata[0] / 255,\n\t\t\t\t\t\tdata[1] / 255,\n\t\t\t\t\t\tdata[2] / 255\n\t\t\t\t\t];\n\t\t\t\t} else {\n\t\t\t\t\tcolor = [0, 0, 0];\n\t\t\t\t}\n\t\t\t}\n\t\t\tcomponents = color.slice();\n\t\t}\n\t\treturn [type, components];\n\t}\n\n\tvar hsbIndices = [\n\t\t[0, 3, 1],\n\t\t[2, 0, 1],\n\t\t[1, 0, 3],\n\t\t[1, 2, 0],\n\t\t[3, 1, 0],\n\t\t[0, 1, 2]\n\t];\n\n\tvar converters = {\n\t\t'rgb-hsb': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\th = delta === 0 ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60;\n\t\t\treturn [h, max === 0 ? 0 : delta / max, max];\n\t\t},\n\n\t\t'hsb-rgb': function(h, s, b) {\n\t\t\th = (((h / 60) % 6) + 6) % 6;\n\t\t\tvar i = Math.floor(h),\n\t\t\t\tf = h - i,\n\t\t\t\ti = hsbIndices[i],\n\t\t\t\tv = [\n\t\t\t\t\tb,\n\t\t\t\t\tb * (1 - s),\n\t\t\t\t\tb * (1 - s * f),\n\t\t\t\t\tb * (1 - s * (1 - f))\n\t\t\t\t];\n\t\t\treturn [v[i[0]], v[i[1]], v[i[2]]];\n\t\t},\n\n\t\t'rgb-hsl': function(r, g, b) {\n\t\t\tvar max = Math.max(r, g, b),\n\t\t\t\tmin = Math.min(r, g, b),\n\t\t\t\tdelta = max - min,\n\t\t\t\tachromatic = delta === 0,\n\t\t\t\th = achromatic ? 0\n\t\t\t\t\t: ( max == r ? (g - b) / delta + (g < b ? 6 : 0)\n\t\t\t\t\t\t: max == g ? (b - r) / delta + 2\n\t\t\t\t\t\t: (r - g) / delta + 4) * 60,\n\t\t\t\tl = (max + min) / 2,\n\t\t\t\ts = achromatic ? 0 : l < 0.5\n\t\t\t\t\t\t? delta / (max + min)\n\t\t\t\t\t\t: delta / (2 - max - min);\n\t\t\treturn [h, s, l];\n\t\t},\n\n\t\t'hsl-rgb': function(h, s, l) {\n\t\t\th = (((h / 360) % 1) + 1) % 1;\n\t\t\tif (s === 0)\n\t\t\t\treturn [l, l, l];\n\t\t\tvar t3s = [ h + 1 / 3, h, h - 1 / 3 ],\n\t\t\t\tt2 = l < 0.5 ? l * (1 + s) : l + s - l * s,\n\t\t\t\tt1 = 2 * l - t2,\n\t\t\t\tc = [];\n\t\t\tfor (var i = 0; i < 3; i++) {\n\t\t\t\tvar t3 = t3s[i];\n\t\t\t\tif (t3 < 0) t3 += 1;\n\t\t\t\tif (t3 > 1) t3 -= 1;\n\t\t\t\tc[i] = 6 * t3 < 1\n\t\t\t\t\t? t1 + (t2 - t1) * 6 * t3\n\t\t\t\t\t: 2 * t3 < 1\n\t\t\t\t\t\t? t2\n\t\t\t\t\t\t: 3 * t3 < 2\n\t\t\t\t\t\t\t? t1 + (t2 - t1) * ((2 / 3) - t3) * 6\n\t\t\t\t\t\t\t: t1;\n\t\t\t}\n\t\t\treturn c;\n\t\t},\n\n\t\t'rgb-gray': function(r, g, b) {\n\t\t\treturn [r * 0.2989 + g * 0.587 + b * 0.114];\n\t\t},\n\n\t\t'gray-rgb': function(g) {\n\t\t\treturn [g, g, g];\n\t\t},\n\n\t\t'gray-hsb': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gray-hsl': function(g) {\n\t\t\treturn [0, 0, g];\n\t\t},\n\n\t\t'gradient-rgb': function() {\n\t\t\treturn [];\n\t\t},\n\n\t\t'rgb-gradient': function() {\n\t\t\treturn [];\n\t\t}\n\n\t};\n\n\treturn Base.each(types, function(properties, type) {\n\t\tcomponentParsers[type] = [];\n\t\tBase.each(properties, function(name, index) {\n\t\t\tvar part = Base.capitalize(name),\n\t\t\t\thasOverlap = /^(hue|saturation)$/.test(name),\n\t\t\t\tparser = componentParsers[type][index] = type === 'gradient'\n\t\t\t\t\t? name === 'gradient'\n\t\t\t\t\t\t? function(value) {\n\t\t\t\t\t\t\tvar current = this._components[0];\n\t\t\t\t\t\t\tvalue = Gradient.read(\n\t\t\t\t\t\t\t\tArray.isArray(value)\n\t\t\t\t\t\t\t\t\t? value\n\t\t\t\t\t\t\t\t\t: arguments, 0, { readNull: true }\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\tif (current !== value) {\n\t\t\t\t\t\t\t\tif (current)\n\t\t\t\t\t\t\t\t\tcurrent._removeOwner(this);\n\t\t\t\t\t\t\t\tif (value)\n\t\t\t\t\t\t\t\t\tvalue._addOwner(this);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\treturn value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t: function() {\n\t\t\t\t\t\t\treturn Point.read(arguments, 0, {\n\t\t\t\t\t\t\t\t\treadNull: name === 'highlight',\n\t\t\t\t\t\t\t\t\tclone: true\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t}\n\t\t\t\t\t: function(value) {\n\t\t\t\t\t\treturn value == null || isNaN(value) ? 0 : +value;\n\t\t\t\t\t};\n\t\t\tthis['get' + part] = function() {\n\t\t\t\treturn this._type === type\n\t\t\t\t\t|| hasOverlap && /^hs[bl]$/.test(this._type)\n\t\t\t\t\t\t? this._components[index]\n\t\t\t\t\t\t: this._convert(type)[index];\n\t\t\t};\n\n\t\t\tthis['set' + part] = function(value) {\n\t\t\t\tif (this._type !== type\n\t\t\t\t\t\t&& !(hasOverlap && /^hs[bl]$/.test(this._type))) {\n\t\t\t\t\tthis._components = this._convert(type);\n\t\t\t\t\tthis._properties = types[type];\n\t\t\t\t\tthis._type = type;\n\t\t\t\t}\n\t\t\t\tthis._components[index] = parser.call(this, value);\n\t\t\t\tthis._changed();\n\t\t\t};\n\t\t}, this);\n\t}, {\n\t\t_class: 'Color',\n\t\t_readIndex: true,\n\n\t\tinitialize: function Color(arg) {\n\t\t\tvar args = arguments,\n\t\t\t\treading = this.__read,\n\t\t\t\tread = 0,\n\t\t\t\ttype,\n\t\t\t\tcomponents,\n\t\t\t\talpha,\n\t\t\t\tvalues;\n\t\t\tif (Array.isArray(arg)) {\n\t\t\t\targs = arg;\n\t\t\t\targ = args[0];\n\t\t\t}\n\t\t\tvar argType = arg != null && typeof arg;\n\t\t\tif (argType === 'string' && arg in types) {\n\t\t\t\ttype = arg;\n\t\t\t\targ = args[1];\n\t\t\t\tif (Array.isArray(arg)) {\n\t\t\t\t\tcomponents = arg;\n\t\t\t\t\talpha = args[2];\n\t\t\t\t} else {\n\t\t\t\t\tif (reading)\n\t\t\t\t\t\tread = 1;\n\t\t\t\t\targs = Base.slice(args, 1);\n\t\t\t\t\targType = typeof arg;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (!components) {\n\t\t\t\tvalues = argType === 'number'\n\t\t\t\t\t\t? args\n\t\t\t\t\t\t: argType === 'object' && arg.length != null\n\t\t\t\t\t\t\t? arg\n\t\t\t\t\t\t\t: null;\n\t\t\t\tif (values) {\n\t\t\t\t\tif (!type)\n\t\t\t\t\t\ttype = values.length >= 3\n\t\t\t\t\t\t\t\t? 'rgb'\n\t\t\t\t\t\t\t\t: 'gray';\n\t\t\t\t\tvar length = types[type].length;\n\t\t\t\t\talpha = values[length];\n\t\t\t\t\tif (reading) {\n\t\t\t\t\t\tread += values === arguments\n\t\t\t\t\t\t\t? length + (alpha != null ? 1 : 0)\n\t\t\t\t\t\t\t: 1;\n\t\t\t\t\t}\n\t\t\t\t\tif (values.length > length)\n\t\t\t\t\t\tvalues = Base.slice(values, 0, length);\n\t\t\t\t} else if (argType === 'string') {\n\t\t\t\t\tvar converted = fromCSS(arg);\n\t\t\t\t\ttype = converted[0];\n\t\t\t\t\tcomponents = converted[1];\n\t\t\t\t\tif (components.length === 4) {\n\t\t\t\t\t\talpha = components[3];\n\t\t\t\t\t\tcomponents.length--;\n\t\t\t\t\t}\n\t\t\t\t} else if (argType === 'object') {\n\t\t\t\t\tif (arg.constructor === Color) {\n\t\t\t\t\t\ttype = arg._type;\n\t\t\t\t\t\tcomponents = arg._components.slice();\n\t\t\t\t\t\talpha = arg._alpha;\n\t\t\t\t\t\tif (type === 'gradient') {\n\t\t\t\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\t\t\t\tvar point = components[i];\n\t\t\t\t\t\t\t\tif (point)\n\t\t\t\t\t\t\t\t\tcomponents[i] = point.clone();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (arg.constructor === Gradient) {\n\t\t\t\t\t\ttype = 'gradient';\n\t\t\t\t\t\tvalues = args;\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttype = 'hue' in arg\n\t\t\t\t\t\t\t? 'lightness' in arg\n\t\t\t\t\t\t\t\t? 'hsl'\n\t\t\t\t\t\t\t\t: 'hsb'\n\t\t\t\t\t\t\t: 'gradient' in arg || 'stops' in arg\n\t\t\t\t\t\t\t\t\t|| 'radial' in arg\n\t\t\t\t\t\t\t\t? 'gradient'\n\t\t\t\t\t\t\t\t: 'gray' in arg\n\t\t\t\t\t\t\t\t\t? 'gray'\n\t\t\t\t\t\t\t\t\t: 'rgb';\n\t\t\t\t\t\tvar properties = types[type],\n\t\t\t\t\t\t\tparsers = componentParsers[type];\n\t\t\t\t\t\tthis._components = components = [];\n\t\t\t\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\t\t\t\tvar value = arg[properties[i]];\n\t\t\t\t\t\t\tif (value == null && !i && type === 'gradient'\n\t\t\t\t\t\t\t\t\t&& 'stops' in arg) {\n\t\t\t\t\t\t\t\tvalue = {\n\t\t\t\t\t\t\t\t\tstops: arg.stops,\n\t\t\t\t\t\t\t\t\tradial: arg.radial\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvalue = parsers[i].call(this, value);\n\t\t\t\t\t\t\tif (value != null)\n\t\t\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t\t\t}\n\t\t\t\t\t\talpha = arg.alpha;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (reading && type)\n\t\t\t\t\tread = 1;\n\t\t\t}\n\t\t\tthis._type = type || 'rgb';\n\t\t\tif (!components) {\n\t\t\t\tthis._components = components = [];\n\t\t\t\tvar parsers = componentParsers[this._type];\n\t\t\t\tfor (var i = 0, l = parsers.length; i < l; i++) {\n\t\t\t\t\tvar value = parsers[i].call(this, values && values[i]);\n\t\t\t\t\tif (value != null)\n\t\t\t\t\t\tcomponents[i] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis._components = components;\n\t\t\tthis._properties = types[this._type];\n\t\t\tthis._alpha = alpha;\n\t\t\tif (reading)\n\t\t\t\tthis.__read = read;\n\t\t\treturn this;\n\t\t},\n\n\t\tset: '#initialize',\n\n\t\t_serialize: function(options, dictionary) {\n\t\t\tvar components = this.getComponents();\n\t\t\treturn Base.serialize(\n\t\t\t\t\t/^(gray|rgb)$/.test(this._type)\n\t\t\t\t\t\t? components\n\t\t\t\t\t\t: [this._type].concat(components),\n\t\t\t\t\toptions, true, dictionary);\n\t\t},\n\n\t\t_changed: function() {\n\t\t\tthis._canvasStyle = null;\n\t\t\tif (this._owner) {\n\t\t\t\tif (this._setter) {\n\t\t\t\t\tthis._owner[this._setter](this);\n\t\t\t\t} else {\n\t\t\t\t\tthis._owner._changed(129);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_convert: function(type) {\n\t\t\tvar converter;\n\t\t\treturn this._type === type\n\t\t\t\t\t? this._components.slice()\n\t\t\t\t\t: (converter = converters[this._type + '-' + type])\n\t\t\t\t\t\t? converter.apply(this, this._components)\n\t\t\t\t\t\t: converters['rgb-' + type].apply(this,\n\t\t\t\t\t\t\tconverters[this._type + '-rgb'].apply(this,\n\t\t\t\t\t\t\t\tthis._components));\n\t\t},\n\n\t\tconvert: function(type) {\n\t\t\treturn new Color(type, this._convert(type), this._alpha);\n\t\t},\n\n\t\tgetType: function() {\n\t\t\treturn this._type;\n\t\t},\n\n\t\tsetType: function(type) {\n\t\t\tthis._components = this._convert(type);\n\t\t\tthis._properties = types[type];\n\t\t\tthis._type = type;\n\t\t},\n\n\t\tgetComponents: function() {\n\t\t\tvar components = this._components.slice();\n\t\t\tif (this._alpha != null)\n\t\t\t\tcomponents.push(this._alpha);\n\t\t\treturn components;\n\t\t},\n\n\t\tgetAlpha: function() {\n\t\t\treturn this._alpha != null ? this._alpha : 1;\n\t\t},\n\n\t\tsetAlpha: function(alpha) {\n\t\t\tthis._alpha = alpha == null ? null : Math.min(Math.max(alpha, 0), 1);\n\t\t\tthis._changed();\n\t\t},\n\n\t\thasAlpha: function() {\n\t\t\treturn this._alpha != null;\n\t\t},\n\n\t\tequals: function(color) {\n\t\t\tvar col = Base.isPlainValue(color, true)\n\t\t\t\t\t? Color.read(arguments)\n\t\t\t\t\t: color;\n\t\t\treturn col === this || col && this._class === col._class\n\t\t\t\t\t&& this._type === col._type\n\t\t\t\t\t&& this.getAlpha() === col.getAlpha()\n\t\t\t\t\t&& Base.equals(this._components, col._components)\n\t\t\t\t\t|| false;\n\t\t},\n\n\t\ttoString: function() {\n\t\t\tvar properties = this._properties,\n\t\t\t\tparts = [],\n\t\t\t\tisGradient = this._type === 'gradient',\n\t\t\t\tf = Formatter.instance;\n\t\t\tfor (var i = 0, l = properties.length; i < l; i++) {\n\t\t\t\tvar value = this._components[i];\n\t\t\t\tif (value != null)\n\t\t\t\t\tparts.push(properties[i] + ': '\n\t\t\t\t\t\t\t+ (isGradient ? value : f.number(value)));\n\t\t\t}\n\t\t\tif (this._alpha != null)\n\t\t\t\tparts.push('alpha: ' + f.number(this._alpha));\n\t\t\treturn '{ ' + parts.join(', ') + ' }';\n\t\t},\n\n\t\ttoCSS: function(hex) {\n\t\t\tvar components = this._convert('rgb'),\n\t\t\t\talpha = hex || this._alpha == null ? 1 : this._alpha;\n\t\t\tfunction convert(val) {\n\t\t\t\treturn Math.round((val < 0 ? 0 : val > 1 ? 1 : val) * 255);\n\t\t\t}\n\t\t\tcomponents = [\n\t\t\t\tconvert(components[0]),\n\t\t\t\tconvert(components[1]),\n\t\t\t\tconvert(components[2])\n\t\t\t];\n\t\t\tif (alpha < 1)\n\t\t\t\tcomponents.push(alpha < 0 ? 0 : alpha);\n\t\t\treturn hex\n\t\t\t\t\t? '#' + ((1 << 24) + (components[0] << 16)\n\t\t\t\t\t\t+ (components[1] << 8)\n\t\t\t\t\t\t+ components[2]).toString(16).slice(1)\n\t\t\t\t\t: (components.length == 4 ? 'rgba(' : 'rgb(')\n\t\t\t\t\t\t+ components.join(',') + ')';\n\t\t},\n\n\t\ttoCanvasStyle: function(ctx, matrix) {\n\t\t\tif (this._canvasStyle)\n\t\t\t\treturn this._canvasStyle;\n\t\t\tif (this._type !== 'gradient')\n\t\t\t\treturn this._canvasStyle = this.toCSS();\n\t\t\tvar components = this._components,\n\t\t\t\tgradient = components[0],\n\t\t\t\tstops = gradient._stops,\n\t\t\t\torigin = components[1],\n\t\t\t\tdestination = components[2],\n\t\t\t\thighlight = components[3],\n\t\t\t\tinverse = matrix && matrix.inverted(),\n\t\t\t\tcanvasGradient;\n\t\t\tif (inverse) {\n\t\t\t\torigin = inverse._transformPoint(origin);\n\t\t\t\tdestination = inverse._transformPoint(destination);\n\t\t\t\tif (highlight)\n\t\t\t\t\thighlight = inverse._transformPoint(highlight);\n\t\t\t}\n\t\t\tif (gradient._radial) {\n\t\t\t\tvar radius = destination.getDistance(origin);\n\t\t\t\tif (highlight) {\n\t\t\t\t\tvar vector = highlight.subtract(origin);\n\t\t\t\t\tif (vector.getLength() > radius)\n\t\t\t\t\t\thighlight = origin.add(vector.normalize(radius - 0.1));\n\t\t\t\t}\n\t\t\t\tvar start = highlight || origin;\n\t\t\t\tcanvasGradient = ctx.createRadialGradient(start.x, start.y,\n\t\t\t\t\t\t0, origin.x, origin.y, radius);\n\t\t\t} else {\n\t\t\t\tcanvasGradient = ctx.createLinearGradient(origin.x, origin.y,\n\t\t\t\t\t\tdestination.x, destination.y);\n\t\t\t}\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tcanvasGradient.addColorStop(\n\t\t\t\t\t\toffset == null ? i / (l - 1) : offset,\n\t\t\t\t\t\tstop._color.toCanvasStyle());\n\t\t\t}\n\t\t\treturn this._canvasStyle = canvasGradient;\n\t\t},\n\n\t\ttransform: function(matrix) {\n\t\t\tif (this._type === 'gradient') {\n\t\t\t\tvar components = this._components;\n\t\t\t\tfor (var i = 1, l = components.length; i < l; i++) {\n\t\t\t\t\tvar point = components[i];\n\t\t\t\t\tmatrix._transformPoint(point, point, true);\n\t\t\t\t}\n\t\t\t\tthis._changed();\n\t\t\t}\n\t\t},\n\n\t\tstatics: {\n\t\t\t_types: types,\n\n\t\t\trandom: function() {\n\t\t\t\tvar random = Math.random;\n\t\t\t\treturn new Color(random(), random(), random());\n\t\t\t},\n\n\t\t\t_setOwner: function(color, owner, setter) {\n\t\t\t\tif (color) {\n\t\t\t\t\tif (color._owner && owner && color._owner !== owner) {\n\t\t\t\t\t\tcolor = color.clone();\n\t\t\t\t\t}\n\t\t\t\t\tif (!color._owner ^ !owner) {\n\t\t\t\t\t\tcolor._owner = owner || null;\n\t\t\t\t\t\tcolor._setter = setter || null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn color;\n\t\t\t}\n\t\t}\n\t});\n},\nnew function() {\n\tvar operators = {\n\t\tadd: function(a, b) {\n\t\t\treturn a + b;\n\t\t},\n\n\t\tsubtract: function(a, b) {\n\t\t\treturn a - b;\n\t\t},\n\n\t\tmultiply: function(a, b) {\n\t\t\treturn a * b;\n\t\t},\n\n\t\tdivide: function(a, b) {\n\t\t\treturn a / b;\n\t\t}\n\t};\n\n\treturn Base.each(operators, function(operator, name) {\n\t\tthis[name] = function(color) {\n\t\t\tcolor = Color.read(arguments);\n\t\t\tvar type = this._type,\n\t\t\t\tcomponents1 = this._components,\n\t\t\t\tcomponents2 = color._convert(type);\n\t\t\tfor (var i = 0, l = components1.length; i < l; i++)\n\t\t\t\tcomponents2[i] = operator(components1[i], components2[i]);\n\t\t\treturn new Color(type, components2,\n\t\t\t\t\tthis._alpha != null\n\t\t\t\t\t\t\t? operator(this._alpha, color.getAlpha())\n\t\t\t\t\t\t\t: null);\n\t\t};\n\t}, {\n\t});\n});\n\nvar Gradient = Base.extend({\n\t_class: 'Gradient',\n\n\tinitialize: function Gradient(stops, radial) {\n\t\tthis._id = UID.get();\n\t\tif (stops && Base.isPlainObject(stops)) {\n\t\t\tthis.set(stops);\n\t\t\tstops = radial = null;\n\t\t}\n\t\tif (this._stops == null) {\n\t\t\tthis.setStops(stops || ['white', 'black']);\n\t\t}\n\t\tif (this._radial == null) {\n\t\t\tthis.setRadial(typeof radial === 'string' && radial === 'radial'\n\t\t\t\t\t|| radial || false);\n\t\t}\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\treturn dictionary.add(this, function() {\n\t\t\treturn Base.serialize([this._stops, this._radial],\n\t\t\t\t\toptions, true, dictionary);\n\t\t});\n\t},\n\n\t_changed: function() {\n\t\tfor (var i = 0, l = this._owners && this._owners.length; i < l; i++) {\n\t\t\tthis._owners[i]._changed();\n\t\t}\n\t},\n\n\t_addOwner: function(color) {\n\t\tif (!this._owners)\n\t\t\tthis._owners = [];\n\t\tthis._owners.push(color);\n\t},\n\n\t_removeOwner: function(color) {\n\t\tvar index = this._owners ? this._owners.indexOf(color) : -1;\n\t\tif (index != -1) {\n\t\t\tthis._owners.splice(index, 1);\n\t\t\tif (!this._owners.length)\n\t\t\t\tthis._owners = undefined;\n\t\t}\n\t},\n\n\tclone: function() {\n\t\tvar stops = [];\n\t\tfor (var i = 0, l = this._stops.length; i < l; i++) {\n\t\t\tstops[i] = this._stops[i].clone();\n\t\t}\n\t\treturn new Gradient(stops, this._radial);\n\t},\n\n\tgetStops: function() {\n\t\treturn this._stops;\n\t},\n\n\tsetStops: function(stops) {\n\t\tif (stops.length < 2) {\n\t\t\tthrow new Error(\n\t\t\t\t\t'Gradient stop list needs to contain at least two stops.');\n\t\t}\n\t\tvar _stops = this._stops;\n\t\tif (_stops) {\n\t\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t\t_stops[i]._owner = undefined;\n\t\t}\n\t\t_stops = this._stops = GradientStop.readList(stops, 0, { clone: true });\n\t\tfor (var i = 0, l = _stops.length; i < l; i++)\n\t\t\t_stops[i]._owner = this;\n\t\tthis._changed();\n\t},\n\n\tgetRadial: function() {\n\t\treturn this._radial;\n\t},\n\n\tsetRadial: function(radial) {\n\t\tthis._radial = radial;\n\t\tthis._changed();\n\t},\n\n\tequals: function(gradient) {\n\t\tif (gradient === this)\n\t\t\treturn true;\n\t\tif (gradient && this._class === gradient._class) {\n\t\t\tvar stops1 = this._stops,\n\t\t\t\tstops2 = gradient._stops,\n\t\t\t\tlength = stops1.length;\n\t\t\tif (length === stops2.length) {\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tif (!stops1[i].equals(stops2[i]))\n\t\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n});\n\nvar GradientStop = Base.extend({\n\t_class: 'GradientStop',\n\n\tinitialize: function GradientStop(arg0, arg1) {\n\t\tvar color = arg0,\n\t\t\toffset = arg1;\n\t\tif (typeof arg0 === 'object' && arg1 === undefined) {\n\t\t\tif (Array.isArray(arg0) && typeof arg0[0] !== 'number') {\n\t\t\t\tcolor = arg0[0];\n\t\t\t\toffset = arg0[1];\n\t\t\t} else if ('color' in arg0 || 'offset' in arg0\n\t\t\t\t\t|| 'rampPoint' in arg0) {\n\t\t\t\tcolor = arg0.color;\n\t\t\t\toffset = arg0.offset || arg0.rampPoint || 0;\n\t\t\t}\n\t\t}\n\t\tthis.setColor(color);\n\t\tthis.setOffset(offset);\n\t},\n\n\tclone: function() {\n\t\treturn new GradientStop(this._color.clone(), this._offset);\n\t},\n\n\t_serialize: function(options, dictionary) {\n\t\tvar color = this._color,\n\t\t\toffset = this._offset;\n\t\treturn Base.serialize(offset == null ? [color] : [color, offset],\n\t\t\t\toptions, true, dictionary);\n\t},\n\n\t_changed: function() {\n\t\tif (this._owner)\n\t\t\tthis._owner._changed(129);\n\t},\n\n\tgetOffset: function() {\n\t\treturn this._offset;\n\t},\n\n\tsetOffset: function(offset) {\n\t\tthis._offset = offset;\n\t\tthis._changed();\n\t},\n\n\tgetRampPoint: '#getOffset',\n\tsetRampPoint: '#setOffset',\n\n\tgetColor: function() {\n\t\treturn this._color;\n\t},\n\n\tsetColor: function() {\n\t\tColor._setOwner(this._color, null);\n\t\tthis._color = Color._setOwner(Color.read(arguments, 0), this,\n\t\t\t\t'setColor');\n\t\tthis._changed();\n\t},\n\n\tequals: function(stop) {\n\t\treturn stop === this || stop && this._class === stop._class\n\t\t\t\t&& this._color.equals(stop._color)\n\t\t\t\t&& this._offset == stop._offset\n\t\t\t\t|| false;\n\t}\n});\n\nvar Style = Base.extend(new function() {\n\tvar itemDefaults = {\n\t\tfillColor: null,\n\t\tfillRule: 'nonzero',\n\t\tstrokeColor: null,\n\t\tstrokeWidth: 1,\n\t\tstrokeCap: 'butt',\n\t\tstrokeJoin: 'miter',\n\t\tstrokeScaling: true,\n\t\tmiterLimit: 10,\n\t\tdashOffset: 0,\n\t\tdashArray: [],\n\t\tshadowColor: null,\n\t\tshadowBlur: 0,\n\t\tshadowOffset: new Point(),\n\t\tselectedColor: null\n\t},\n\tgroupDefaults = Base.set({}, itemDefaults, {\n\t\tfontFamily: 'sans-serif',\n\t\tfontWeight: 'normal',\n\t\tfontSize: 12,\n\t\tleading: null,\n\t\tjustification: 'left'\n\t}),\n\ttextDefaults = Base.set({}, groupDefaults, {\n\t\tfillColor: new Color()\n\t}),\n\tflags = {\n\t\tstrokeWidth: 193,\n\t\tstrokeCap: 193,\n\t\tstrokeJoin: 193,\n\t\tstrokeScaling: 201,\n\t\tmiterLimit: 193,\n\t\tfontFamily: 9,\n\t\tfontWeight: 9,\n\t\tfontSize: 9,\n\t\tfont: 9,\n\t\tleading: 9,\n\t\tjustification: 9\n\t},\n\titem = {\n\t\tbeans: true\n\t},\n\tfields = {\n\t\t_class: 'Style',\n\t\tbeans: true,\n\n\t\tinitialize: function Style(style, _owner, _project) {\n\t\t\tthis._values = {};\n\t\t\tthis._owner = _owner;\n\t\t\tthis._project = _owner && _owner._project || _project\n\t\t\t\t\t|| paper.project;\n\t\t\tthis._defaults = !_owner || _owner instanceof Group ? groupDefaults\n\t\t\t\t\t: _owner instanceof TextItem ? textDefaults\n\t\t\t\t\t: itemDefaults;\n\t\t\tif (style)\n\t\t\t\tthis.set(style);\n\t\t}\n\t};\n\n\tBase.each(groupDefaults, function(value, key) {\n\t\tvar isColor = /Color$/.test(key),\n\t\t\tisPoint = key === 'shadowOffset',\n\t\t\tpart = Base.capitalize(key),\n\t\t\tflag = flags[key],\n\t\t\tset = 'set' + part,\n\t\t\tget = 'get' + part;\n\n\t\tfields[set] = function(value) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath);\n\t\t\tif (applyToChildren) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++)\n\t\t\t\t\tchildren[i]._style[set](value);\n\t\t\t}\n\t\t\tif ((key === 'selectedColor' || !applyToChildren)\n\t\t\t\t\t&& key in this._defaults) {\n\t\t\t\tvar old = this._values[key];\n\t\t\t\tif (old !== value) {\n\t\t\t\t\tif (isColor) {\n\t\t\t\t\t\tif (old) {\n\t\t\t\t\t\t\tColor._setOwner(old, null);\n\t\t\t\t\t\t\told._canvasStyle = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (value && value.constructor === Color) {\n\t\t\t\t\t\t\tvalue = Color._setOwner(value, owner,\n\t\t\t\t\t\t\t\t\tapplyToChildren && set);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis._values[key] = value;\n\t\t\t\t\tif (owner)\n\t\t\t\t\t\towner._changed(flag || 129);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tfields[get] = function(_dontMerge) {\n\t\t\tvar owner = this._owner,\n\t\t\t\tchildren = owner && owner._children,\n\t\t\t\tapplyToChildren = children && children.length > 0\n\t\t\t\t\t&& !(owner instanceof CompoundPath),\n\t\t\t\tvalue;\n\t\t\tif (applyToChildren && !_dontMerge) {\n\t\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\t\tvar childValue = children[i]._style[get]();\n\t\t\t\t\tif (!i) {\n\t\t\t\t\t\tvalue = childValue;\n\t\t\t\t\t} else if (!Base.equals(value, childValue)) {\n\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (key in this._defaults) {\n\t\t\t\tvar value = this._values[key];\n\t\t\t\tif (value === undefined) {\n\t\t\t\t\tvalue = this._defaults[key];\n\t\t\t\t\tif (value && value.clone) {\n\t\t\t\t\t\tvalue = value.clone();\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tvar ctor = isColor ? Color : isPoint ? Point : null;\n\t\t\t\t\tif (ctor && !(value && value.constructor === ctor)) {\n\t\t\t\t\t\tthis._values[key] = value = ctor.read([value], 0,\n\t\t\t\t\t\t\t\t{ readNull: true, clone: true });\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (value && isColor) {\n\t\t\t\tvalue = Color._setOwner(value, owner, applyToChildren && set);\n\t\t\t}\n\t\t\treturn value;\n\t\t};\n\n\t\titem[get] = function(_dontMerge) {\n\t\t\treturn this._style[get](_dontMerge);\n\t\t};\n\n\t\titem[set] = function(value) {\n\t\t\tthis._style[set](value);\n\t\t};\n\t});\n\n\tBase.each({\n\t\tFont: 'FontFamily',\n\t\tWindingRule: 'FillRule'\n\t}, function(value, key) {\n\t\tvar get = 'get' + key,\n\t\t\tset = 'set' + key;\n\t\tfields[get] = item[get] = '#get' + value;\n\t\tfields[set] = item[set] = '#set' + value;\n\t});\n\n\tItem.inject(item);\n\treturn fields;\n}, {\n\tset: function(style) {\n\t\tvar isStyle = style instanceof Style,\n\t\t\tvalues = isStyle ? style._values : style;\n\t\tif (values) {\n\t\t\tfor (var key in values) {\n\t\t\t\tif (key in this._defaults) {\n\t\t\t\t\tvar value = values[key];\n\t\t\t\t\tthis[key] = value && isStyle && value.clone\n\t\t\t\t\t\t\t? value.clone() : value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tequals: function(style) {\n\t\tfunction compare(style1, style2, secondary) {\n\t\t\tvar values1 = style1._values,\n\t\t\t\tvalues2 = style2._values,\n\t\t\t\tdefaults2 = style2._defaults;\n\t\t\tfor (var key in values1) {\n\t\t\t\tvar value1 = values1[key],\n\t\t\t\t\tvalue2 = values2[key];\n\t\t\t\tif (!(secondary && key in values2) && !Base.equals(value1,\n\t\t\t\t\t\tvalue2 === undefined ? defaults2[key] : value2))\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\treturn style === this || style && this._class === style._class\n\t\t\t\t&& compare(this, style)\n\t\t\t\t&& compare(style, this, true)\n\t\t\t\t|| false;\n\t},\n\n\t_dispose: function() {\n\t\tvar color;\n\t\tcolor = this.getFillColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getStrokeColor();\n\t\tif (color) color._canvasStyle = null;\n\t\tcolor = this.getShadowColor();\n\t\tif (color) color._canvasStyle = null;\n\t},\n\n\thasFill: function() {\n\t\tvar color = this.getFillColor();\n\t\treturn !!color && color.alpha > 0;\n\t},\n\n\thasStroke: function() {\n\t\tvar color = this.getStrokeColor();\n\t\treturn !!color && color.alpha > 0 && this.getStrokeWidth() > 0;\n\t},\n\n\thasShadow: function() {\n\t\tvar color = this.getShadowColor();\n\t\treturn !!color && color.alpha > 0 && (this.getShadowBlur() > 0\n\t\t\t\t|| !this.getShadowOffset().isZero());\n\t},\n\n\tgetView: function() {\n\t\treturn this._project._view;\n\t},\n\n\tgetFontStyle: function() {\n\t\tvar fontSize = this.getFontSize();\n\t\treturn this.getFontWeight()\n\t\t\t\t+ ' ' + fontSize + (/[a-z]/i.test(fontSize + '') ? ' ' : 'px ')\n\t\t\t\t+ this.getFontFamily();\n\t},\n\n\tgetFont: '#getFontFamily',\n\tsetFont: '#setFontFamily',\n\n\tgetLeading: function getLeading() {\n\t\tvar leading = getLeading.base.call(this),\n\t\t\tfontSize = this.getFontSize();\n\t\tif (/pt|em|%|px/.test(fontSize))\n\t\t\tfontSize = this.getView().getPixelSize(fontSize);\n\t\treturn leading != null ? leading : fontSize * 1.2;\n\t}\n\n});\n\nvar DomElement = new function() {\n\tfunction handlePrefix(el, name, set, value) {\n\t\tvar prefixes = ['', 'webkit', 'moz', 'Moz', 'ms', 'o'],\n\t\t\tsuffix = name[0].toUpperCase() + name.substring(1);\n\t\tfor (var i = 0; i < 6; i++) {\n\t\t\tvar prefix = prefixes[i],\n\t\t\t\tkey = prefix ? prefix + suffix : name;\n\t\t\tif (key in el) {\n\t\t\t\tif (set) {\n\t\t\t\t\tel[key] = value;\n\t\t\t\t} else {\n\t\t\t\t\treturn el[key];\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn {\n\t\tgetStyles: function(el) {\n\t\t\tvar doc = el && el.nodeType !== 9 ? el.ownerDocument : el,\n\t\t\t\tview = doc && doc.defaultView;\n\t\t\treturn view && view.getComputedStyle(el, '');\n\t\t},\n\n\t\tgetBounds: function(el, viewport) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tbody = doc.body,\n\t\t\t\thtml = doc.documentElement,\n\t\t\t\trect;\n\t\t\ttry {\n\t\t\t\trect = el.getBoundingClientRect();\n\t\t\t} catch (e) {\n\t\t\t\trect = { left: 0, top: 0, width: 0, height: 0 };\n\t\t\t}\n\t\t\tvar x = rect.left - (html.clientLeft || body.clientLeft || 0),\n\t\t\t\ty = rect.top - (html.clientTop || body.clientTop || 0);\n\t\t\tif (!viewport) {\n\t\t\t\tvar view = doc.defaultView;\n\t\t\t\tx += view.pageXOffset || html.scrollLeft || body.scrollLeft;\n\t\t\t\ty += view.pageYOffset || html.scrollTop || body.scrollTop;\n\t\t\t}\n\t\t\treturn new Rectangle(x, y, rect.width, rect.height);\n\t\t},\n\n\t\tgetViewportBounds: function(el) {\n\t\t\tvar doc = el.ownerDocument,\n\t\t\t\tview = doc.defaultView,\n\t\t\t\thtml = doc.documentElement;\n\t\t\treturn new Rectangle(0, 0,\n\t\t\t\tview.innerWidth || html.clientWidth,\n\t\t\t\tview.innerHeight || html.clientHeight\n\t\t\t);\n\t\t},\n\n\t\tgetOffset: function(el, viewport) {\n\t\t\treturn DomElement.getBounds(el, viewport).getPoint();\n\t\t},\n\n\t\tgetSize: function(el) {\n\t\t\treturn DomElement.getBounds(el, true).getSize();\n\t\t},\n\n\t\tisInvisible: function(el) {\n\t\t\treturn DomElement.getSize(el).equals(new Size(0, 0));\n\t\t},\n\n\t\tisInView: function(el) {\n\t\t\treturn !DomElement.isInvisible(el)\n\t\t\t\t\t&& DomElement.getViewportBounds(el).intersects(\n\t\t\t\t\t\tDomElement.getBounds(el, true));\n\t\t},\n\n\t\tisInserted: function(el) {\n\t\t\treturn document.body.contains(el);\n\t\t},\n\n\t\tgetPrefixed: function(el, name) {\n\t\t\treturn el && handlePrefix(el, name);\n\t\t},\n\n\t\tsetPrefixed: function(el, name, value) {\n\t\t\tif (typeof name === 'object') {\n\t\t\t\tfor (var key in name)\n\t\t\t\t\thandlePrefix(el, key, true, name[key]);\n\t\t\t} else {\n\t\t\t\thandlePrefix(el, name, true, value);\n\t\t\t}\n\t\t}\n\t};\n};\n\nvar DomEvent = {\n\tadd: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++) {\n\t\t\t\t\tvar name = parts[i];\n\t\t\t\t\tvar options = (\n\t\t\t\t\t\tel === document\n\t\t\t\t\t\t&& (name === 'touchstart' || name === 'touchmove')\n\t\t\t\t\t) ? { passive: false } : false;\n\t\t\t\t\tel.addEventListener(name, func, options);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\n\tremove: function(el, events) {\n\t\tif (el) {\n\t\t\tfor (var type in events) {\n\t\t\t\tvar func = events[type],\n\t\t\t\t\tparts = type.split(/[\\s,]+/g);\n\t\t\t\tfor (var i = 0, l = parts.length; i < l; i++)\n\t\t\t\t\tel.removeEventListener(parts[i], func, false);\n\t\t\t}\n\t\t}\n\t},\n\n\tgetPoint: function(event) {\n\t\tvar pos = event.targetTouches\n\t\t\t\t? event.targetTouches.length\n\t\t\t\t\t? event.targetTouches[0]\n\t\t\t\t\t: event.changedTouches[0]\n\t\t\t\t: event;\n\t\treturn new Point(\n\t\t\tpos.pageX || pos.clientX + document.documentElement.scrollLeft,\n\t\t\tpos.pageY || pos.clientY + document.documentElement.scrollTop\n\t\t);\n\t},\n\n\tgetTarget: function(event) {\n\t\treturn event.target || event.srcElement;\n\t},\n\n\tgetRelatedTarget: function(event) {\n\t\treturn event.relatedTarget || event.toElement;\n\t},\n\n\tgetOffset: function(event, target) {\n\t\treturn DomEvent.getPoint(event).subtract(DomElement.getOffset(\n\t\t\t\ttarget || DomEvent.getTarget(event)));\n\t}\n};\n\nDomEvent.requestAnimationFrame = new function() {\n\tvar nativeRequest = DomElement.getPrefixed(window, 'requestAnimationFrame'),\n\t\trequested = false,\n\t\tcallbacks = [],\n\t\ttimer;\n\n\tfunction handleCallbacks() {\n\t\tvar functions = callbacks;\n\t\tcallbacks = [];\n\t\tfor (var i = 0, l = functions.length; i < l; i++)\n\t\t\tfunctions[i]();\n\t\trequested = nativeRequest && callbacks.length;\n\t\tif (requested)\n\t\t\tnativeRequest(handleCallbacks);\n\t}\n\n\treturn function(callback) {\n\t\tcallbacks.push(callback);\n\t\tif (nativeRequest) {\n\t\t\tif (!requested) {\n\t\t\t\tnativeRequest(handleCallbacks);\n\t\t\t\trequested = true;\n\t\t\t}\n\t\t} else if (!timer) {\n\t\t\ttimer = setInterval(handleCallbacks, 1000 / 60);\n\t\t}\n\t};\n};\n\nvar View = Base.extend(Emitter, {\n\t_class: 'View',\n\n\tinitialize: function View(project, element) {\n\n\t\tfunction getSize(name) {\n\t\t\treturn element[name] || parseInt(element.getAttribute(name), 10);\n\t\t}\n\n\t\tfunction getCanvasSize() {\n\t\t\tvar size = DomElement.getSize(element);\n\t\t\treturn size.isNaN() || size.isZero()\n\t\t\t\t\t? new Size(getSize('width'), getSize('height'))\n\t\t\t\t\t: size;\n\t\t}\n\n\t\tvar size;\n\t\tif (window && element) {\n\t\t\tthis._id = element.getAttribute('id');\n\t\t\tif (this._id == null)\n\t\t\t\telement.setAttribute('id', this._id = 'paper-view-' + View._id++);\n\t\t\tDomEvent.add(element, this._viewEvents);\n\t\t\tvar none = 'none';\n\t\t\tDomElement.setPrefixed(element.style, {\n\t\t\t\tuserDrag: none,\n\t\t\t\tuserSelect: none,\n\t\t\t\ttouchCallout: none,\n\t\t\t\tcontentZooming: none,\n\t\t\t\ttapHighlightColor: 'rgba(0,0,0,0)'\n\t\t\t});\n\n\t\t\tif (PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar that = this;\n\t\t\t\tDomEvent.add(window, this._windowEvents = {\n\t\t\t\t\tresize: function() {\n\t\t\t\t\t\tthat.setViewSize(getCanvasSize());\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tsize = getCanvasSize();\n\n\t\t\tif (PaperScope.hasAttribute(element, 'stats')\n\t\t\t\t\t&& typeof Stats !== 'undefined') {\n\t\t\t\tthis._stats = new Stats();\n\t\t\t\tvar stats = this._stats.domElement,\n\t\t\t\t\tstyle = stats.style,\n\t\t\t\t\toffset = DomElement.getOffset(element);\n\t\t\t\tstyle.position = 'absolute';\n\t\t\t\tstyle.left = offset.x + 'px';\n\t\t\t\tstyle.top = offset.y + 'px';\n\t\t\t\tdocument.body.appendChild(stats);\n\t\t\t}\n\t\t} else {\n\t\t\tsize = new Size(element);\n\t\t\telement = null;\n\t\t}\n\t\tthis._project = project;\n\t\tthis._scope = project._scope;\n\t\tthis._element = element;\n\t\tif (!this._pixelRatio)\n\t\t\tthis._pixelRatio = window && window.devicePixelRatio || 1;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize = size;\n\t\tView._views.push(this);\n\t\tView._viewsById[this._id] = this;\n\t\t(this._matrix = new Matrix())._owner = this;\n\t\tif (!View._focused)\n\t\t\tView._focused = this;\n\t\tthis._frameItems = {};\n\t\tthis._frameItemCount = 0;\n\t\tthis._itemEvents = { native: {}, virtual: {} };\n\t\tthis._autoUpdate = !paper.agent.node;\n\t\tthis._needsUpdate = false;\n\t},\n\n\tremove: function() {\n\t\tif (!this._project)\n\t\t\treturn false;\n\t\tif (View._focused === this)\n\t\t\tView._focused = null;\n\t\tView._views.splice(View._views.indexOf(this), 1);\n\t\tdelete View._viewsById[this._id];\n\t\tvar project = this._project;\n\t\tif (project._view === this)\n\t\t\tproject._view = null;\n\t\tDomEvent.remove(this._element, this._viewEvents);\n\t\tDomEvent.remove(window, this._windowEvents);\n\t\tthis._element = this._project = null;\n\t\tthis.off('frame');\n\t\tthis._animate = false;\n\t\tthis._frameItems = {};\n\t\treturn true;\n\t},\n\n\t_events: Base.each(\n\t\tItem._itemHandlers.concat(['onResize', 'onKeyDown', 'onKeyUp']),\n\t\tfunction(name) {\n\t\t\tthis[name] = {};\n\t\t}, {\n\t\t\tonFrame: {\n\t\t\t\tinstall: function() {\n\t\t\t\t\tthis.play();\n\t\t\t\t},\n\n\t\t\t\tuninstall: function() {\n\t\t\t\t\tthis.pause();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t),\n\n\t_animate: false,\n\t_time: 0,\n\t_count: 0,\n\n\tgetAutoUpdate: function() {\n\t\treturn this._autoUpdate;\n\t},\n\n\tsetAutoUpdate: function(autoUpdate) {\n\t\tthis._autoUpdate = autoUpdate;\n\t\tif (autoUpdate)\n\t\t\tthis.requestUpdate();\n\t},\n\n\tupdate: function() {\n\t},\n\n\tdraw: function() {\n\t\tthis.update();\n\t},\n\n\trequestUpdate: function() {\n\t\tif (!this._requested) {\n\t\t\tvar that = this;\n\t\t\tDomEvent.requestAnimationFrame(function() {\n\t\t\t\tthat._requested = false;\n\t\t\t\tif (that._animate) {\n\t\t\t\t\tthat.requestUpdate();\n\t\t\t\t\tvar element = that._element;\n\t\t\t\t\tif ((!DomElement.getPrefixed(document, 'hidden')\n\t\t\t\t\t\t\t|| PaperScope.getAttribute(element, 'keepalive')\n\t\t\t\t\t\t\t\t=== 'true') && DomElement.isInView(element)) {\n\t\t\t\t\t\tthat._handleFrame();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (that._autoUpdate)\n\t\t\t\t\tthat.update();\n\t\t\t});\n\t\t\tthis._requested = true;\n\t\t}\n\t},\n\n\tplay: function() {\n\t\tthis._animate = true;\n\t\tthis.requestUpdate();\n\t},\n\n\tpause: function() {\n\t\tthis._animate = false;\n\t},\n\n\t_handleFrame: function() {\n\t\tpaper = this._scope;\n\t\tvar now = Date.now() / 1000,\n\t\t\tdelta = this._last ? now - this._last : 0;\n\t\tthis._last = now;\n\t\tthis.emit('frame', new Base({\n\t\t\tdelta: delta,\n\t\t\ttime: this._time += delta,\n\t\t\tcount: this._count++\n\t\t}));\n\t\tif (this._stats)\n\t\t\tthis._stats.update();\n\t},\n\n\t_animateItem: function(item, animate) {\n\t\tvar items = this._frameItems;\n\t\tif (animate) {\n\t\t\titems[item._id] = {\n\t\t\t\titem: item,\n\t\t\t\ttime: 0,\n\t\t\t\tcount: 0\n\t\t\t};\n\t\t\tif (++this._frameItemCount === 1)\n\t\t\t\tthis.on('frame', this._handleFrameItems);\n\t\t} else {\n\t\t\tdelete items[item._id];\n\t\t\tif (--this._frameItemCount === 0) {\n\t\t\t\tthis.off('frame', this._handleFrameItems);\n\t\t\t}\n\t\t}\n\t},\n\n\t_handleFrameItems: function(event) {\n\t\tfor (var i in this._frameItems) {\n\t\t\tvar entry = this._frameItems[i];\n\t\t\tentry.item.emit('frame', new Base(event, {\n\t\t\t\ttime: entry.time += event.delta,\n\t\t\t\tcount: entry.count++\n\t\t\t}));\n\t\t}\n\t},\n\n\t_changed: function() {\n\t\tthis._project._changed(4097);\n\t\tthis._bounds = this._decomposed = undefined;\n\t},\n\n\tgetElement: function() {\n\t\treturn this._element;\n\t},\n\n\tgetPixelRatio: function() {\n\t\treturn this._pixelRatio;\n\t},\n\n\tgetResolution: function() {\n\t\treturn this._pixelRatio * 72;\n\t},\n\n\tgetViewSize: function() {\n\t\tvar size = this._viewSize;\n\t\treturn new LinkedSize(size.width, size.height, this, 'setViewSize');\n\t},\n\n\tsetViewSize: function() {\n\t\tvar size = Size.read(arguments),\n\t\t\tdelta = size.subtract(this._viewSize);\n\t\tif (delta.isZero())\n\t\t\treturn;\n\t\tthis._setElementSize(size.width, size.height);\n\t\tthis._viewSize.set(size);\n\t\tthis._changed();\n\t\tthis.emit('resize', { size: size, delta: delta });\n\t\tif (this._autoUpdate) {\n\t\t\tthis.update();\n\t\t}\n\t},\n\n\t_setElementSize: function(width, height) {\n\t\tvar element = this._element;\n\t\tif (element) {\n\t\t\tif (element.width !== width)\n\t\t\t\telement.width = width;\n\t\t\tif (element.height !== height)\n\t\t\t\telement.height = height;\n\t\t}\n\t},\n\n\tgetBounds: function() {\n\t\tif (!this._bounds)\n\t\t\tthis._bounds = this._matrix.inverted()._transformBounds(\n\t\t\t\t\tnew Rectangle(new Point(), this._viewSize));\n\t\treturn this._bounds;\n\t},\n\n\tgetSize: function() {\n\t\treturn this.getBounds().getSize();\n\t},\n\n\tisVisible: function() {\n\t\treturn DomElement.isInView(this._element);\n\t},\n\n\tisInserted: function() {\n\t\treturn DomElement.isInserted(this._element);\n\t},\n\n\tgetPixelSize: function(size) {\n\t\tvar element = this._element,\n\t\t\tpixels;\n\t\tif (element) {\n\t\t\tvar parent = element.parentNode,\n\t\t\t\ttemp = document.createElement('div');\n\t\t\ttemp.style.fontSize = size;\n\t\t\tparent.appendChild(temp);\n\t\t\tpixels = parseFloat(DomElement.getStyles(temp).fontSize);\n\t\t\tparent.removeChild(temp);\n\t\t} else {\n\t\t\tpixels = parseFloat(pixels);\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\treturn 0;\n\t}\n}, Base.each(['rotate', 'scale', 'shear', 'skew'], function(key) {\n\tvar rotate = key === 'rotate';\n\tthis[key] = function() {\n\t\tvar args = arguments,\n\t\t\tvalue = (rotate ? Base : Point).read(args),\n\t\t\tcenter = Point.read(args, 0, { readNull: true });\n\t\treturn this.transform(new Matrix()[key](value,\n\t\t\t\tcenter || this.getCenter(true)));\n\t};\n}, {\n\t_decompose: function() {\n\t\treturn this._decomposed || (this._decomposed = this._matrix.decompose());\n\t},\n\n\ttranslate: function() {\n\t\tvar mx = new Matrix();\n\t\treturn this.transform(mx.translate.apply(mx, arguments));\n\t},\n\n\tgetCenter: function() {\n\t\treturn this.getBounds().getCenter();\n\t},\n\n\tsetCenter: function() {\n\t\tvar center = Point.read(arguments);\n\t\tthis.translate(this.getCenter().subtract(center));\n\t},\n\n\tgetZoom: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn (scaling.x + scaling.y) / 2;\n\t},\n\n\tsetZoom: function(zoom) {\n\t\tthis.transform(new Matrix().scale(zoom / this.getZoom(),\n\t\t\tthis.getCenter()));\n\t},\n\n\tgetRotation: function() {\n\t\treturn this._decompose().rotation;\n\t},\n\n\tsetRotation: function(rotation) {\n\t\tvar current = this.getRotation();\n\t\tif (current != null && rotation != null) {\n\t\t\tthis.rotate(rotation - current);\n\t\t}\n\t},\n\n\tgetScaling: function() {\n\t\tvar scaling = this._decompose().scaling;\n\t\treturn new LinkedPoint(scaling.x, scaling.y, this, 'setScaling');\n\t},\n\n\tsetScaling: function() {\n\t\tvar current = this.getScaling(),\n\t\t\tscaling = Point.read(arguments, 0, { clone: true, readNull: true });\n\t\tif (current && scaling) {\n\t\t\tthis.scale(scaling.x / current.x, scaling.y / current.y);\n\t\t}\n\t},\n\n\tgetMatrix: function() {\n\t\treturn this._matrix;\n\t},\n\n\tsetMatrix: function() {\n\t\tvar matrix = this._matrix;\n\t\tmatrix.set.apply(matrix, arguments);\n\t},\n\n\ttransform: function(matrix) {\n\t\tthis._matrix.append(matrix);\n\t},\n\n\tscrollBy: function() {\n\t\tthis.translate(Point.read(arguments).negate());\n\t}\n}), {\n\n\tprojectToView: function() {\n\t\treturn this._matrix._transformPoint(Point.read(arguments));\n\t},\n\n\tviewToProject: function() {\n\t\treturn this._matrix._inverseTransform(Point.read(arguments));\n\t},\n\n\tgetEventPoint: function(event) {\n\t\treturn this.viewToProject(DomEvent.getOffset(event, this._element));\n\t},\n\n}, {\n\tstatics: {\n\t\t_views: [],\n\t\t_viewsById: {},\n\t\t_id: 0,\n\n\t\tcreate: function(project, element) {\n\t\t\tif (document && typeof element === 'string')\n\t\t\t\telement = document.getElementById(element);\n\t\t\tvar ctor = window ? CanvasView : View;\n\t\t\treturn new ctor(project, element);\n\t\t}\n\t}\n},\nnew function() {\n\tif (!window)\n\t\treturn;\n\tvar prevFocus,\n\t\ttempFocus,\n\t\tdragging = false,\n\t\tmouseDown = false;\n\n\tfunction getView(event) {\n\t\tvar target = DomEvent.getTarget(event);\n\t\treturn target.getAttribute && View._viewsById[\n\t\t\t\ttarget.getAttribute('id')];\n\t}\n\n\tfunction updateFocus() {\n\t\tvar view = View._focused;\n\t\tif (!view || !view.isVisible()) {\n\t\t\tfor (var i = 0, l = View._views.length; i < l; i++) {\n\t\t\t\tif ((view = View._views[i]).isVisible()) {\n\t\t\t\t\tView._focused = tempFocus = view;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction handleMouseMove(view, event, point) {\n\t\tview._handleMouseEvent('mousemove', event, point);\n\t}\n\n\tvar navigator = window.navigator,\n\t\tmousedown, mousemove, mouseup;\n\tif (navigator.pointerEnabled || navigator.msPointerEnabled) {\n\t\tmousedown = 'pointerdown MSPointerDown';\n\t\tmousemove = 'pointermove MSPointerMove';\n\t\tmouseup = 'pointerup pointercancel MSPointerUp MSPointerCancel';\n\t} else {\n\t\tmousedown = 'touchstart';\n\t\tmousemove = 'touchmove';\n\t\tmouseup = 'touchend touchcancel';\n\t\tif (!('ontouchstart' in window && navigator.userAgent.match(\n\t\t\t\t/mobile|tablet|ip(ad|hone|od)|android|silk/i))) {\n\t\t\tmousedown += ' mousedown';\n\t\t\tmousemove += ' mousemove';\n\t\t\tmouseup += ' mouseup';\n\t\t}\n\t}\n\n\tvar viewEvents = {},\n\t\tdocEvents = {\n\t\t\tmouseout: function(event) {\n\t\t\t\tvar view = View._focused,\n\t\t\t\t\ttarget = DomEvent.getRelatedTarget(event);\n\t\t\t\tif (view && (!target || target.nodeName === 'HTML')) {\n\t\t\t\t\tvar offset = DomEvent.getOffset(event, view._element),\n\t\t\t\t\t\tx = offset.x,\n\t\t\t\t\t\tabs = Math.abs,\n\t\t\t\t\t\tax = abs(x),\n\t\t\t\t\t\tmax = 1 << 25,\n\t\t\t\t\t\tdiff = ax - max;\n\t\t\t\t\toffset.x = abs(diff) < ax ? diff * (x < 0 ? -1 : 1) : x;\n\t\t\t\t\thandleMouseMove(view, event, view.viewToProject(offset));\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tscroll: updateFocus\n\t\t};\n\n\tviewEvents[mousedown] = function(event) {\n\t\tvar view = View._focused = getView(event);\n\t\tif (!dragging) {\n\t\t\tdragging = true;\n\t\t\tview._handleMouseEvent('mousedown', event);\n\t\t}\n\t};\n\n\tdocEvents[mousemove] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (!mouseDown) {\n\t\t\tvar target = getView(event);\n\t\t\tif (target) {\n\t\t\t\tif (view !== target) {\n\t\t\t\t\tif (view)\n\t\t\t\t\t\thandleMouseMove(view, event);\n\t\t\t\t\tif (!prevFocus)\n\t\t\t\t\t\tprevFocus = view;\n\t\t\t\t\tview = View._focused = tempFocus = target;\n\t\t\t\t}\n\t\t\t} else if (tempFocus && tempFocus === view) {\n\t\t\t\tif (prevFocus && !prevFocus.isInserted())\n\t\t\t\t\tprevFocus = null;\n\t\t\t\tview = View._focused = prevFocus;\n\t\t\t\tprevFocus = null;\n\t\t\t\tupdateFocus();\n\t\t\t}\n\t\t}\n\t\tif (view)\n\t\t\thandleMouseMove(view, event);\n\t};\n\n\tdocEvents[mousedown] = function() {\n\t\tmouseDown = true;\n\t};\n\n\tdocEvents[mouseup] = function(event) {\n\t\tvar view = View._focused;\n\t\tif (view && dragging)\n\t\t\tview._handleMouseEvent('mouseup', event);\n\t\tmouseDown = dragging = false;\n\t};\n\n\tDomEvent.add(document, docEvents);\n\n\tDomEvent.add(window, {\n\t\tload: updateFocus\n\t});\n\n\tvar called = false,\n\t\tprevented = false,\n\t\tfallbacks = {\n\t\t\tdoubleclick: 'click',\n\t\t\tmousedrag: 'mousemove'\n\t\t},\n\t\twasInView = false,\n\t\toverView,\n\t\tdownPoint,\n\t\tlastPoint,\n\t\tdownItem,\n\t\toverItem,\n\t\tdragItem,\n\t\tclickItem,\n\t\tclickTime,\n\t\tdblClick;\n\n\tfunction emitMouseEvent(obj, target, type, event, point, prevPoint,\n\t\t\tstopItem) {\n\t\tvar stopped = false,\n\t\t\tmouseEvent;\n\n\t\tfunction emit(obj, type) {\n\t\t\tif (obj.responds(type)) {\n\t\t\t\tif (!mouseEvent) {\n\t\t\t\t\tmouseEvent = new MouseEvent(type, event, point,\n\t\t\t\t\t\t\ttarget || obj,\n\t\t\t\t\t\t\tprevPoint ? point.subtract(prevPoint) : null);\n\t\t\t\t}\n\t\t\t\tif (obj.emit(type, mouseEvent)) {\n\t\t\t\t\tcalled = true;\n\t\t\t\t\tif (mouseEvent.prevented)\n\t\t\t\t\t\tprevented = true;\n\t\t\t\t\tif (mouseEvent.stopped)\n\t\t\t\t\t\treturn stopped = true;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar fallback = fallbacks[type];\n\t\t\t\tif (fallback)\n\t\t\t\t\treturn emit(obj, fallback);\n\t\t\t}\n\t\t}\n\n\t\twhile (obj && obj !== stopItem) {\n\t\t\tif (emit(obj, type))\n\t\t\t\tbreak;\n\t\t\tobj = obj._parent;\n\t\t}\n\t\treturn stopped;\n\t}\n\n\tfunction emitMouseEvents(view, hitItem, type, event, point, prevPoint) {\n\t\tview._project.removeOn(type);\n\t\tprevented = called = false;\n\t\treturn (dragItem && emitMouseEvent(dragItem, null, type, event,\n\t\t\t\t\tpoint, prevPoint)\n\t\t\t|| hitItem && hitItem !== dragItem\n\t\t\t\t&& !hitItem.isDescendant(dragItem)\n\t\t\t\t&& emitMouseEvent(hitItem, null, type === 'mousedrag' ?\n\t\t\t\t\t'mousemove' : type, event, point, prevPoint, dragItem)\n\t\t\t|| emitMouseEvent(view, dragItem || hitItem || view, type, event,\n\t\t\t\t\tpoint, prevPoint));\n\t}\n\n\tvar itemEventsMap = {\n\t\tmousedown: {\n\t\t\tmousedown: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmouseup: {\n\t\t\tmouseup: 1,\n\t\t\tmousedrag: 1,\n\t\t\tclick: 1,\n\t\t\tdoubleclick: 1\n\t\t},\n\t\tmousemove: {\n\t\t\tmousedrag: 1,\n\t\t\tmousemove: 1,\n\t\t\tmouseenter: 1,\n\t\t\tmouseleave: 1\n\t\t}\n\t};\n\n\treturn {\n\t\t_viewEvents: viewEvents,\n\n\t\t_handleMouseEvent: function(type, event, point) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\thitItems = itemEvents.native[type],\n\t\t\t\tnativeMove = type === 'mousemove',\n\t\t\t\ttool = this._scope.tool,\n\t\t\t\tview = this;\n\n\t\t\tfunction responds(type) {\n\t\t\t\treturn itemEvents.virtual[type] || view.responds(type)\n\t\t\t\t\t\t|| tool && tool.responds(type);\n\t\t\t}\n\n\t\t\tif (nativeMove && dragging && responds('mousedrag'))\n\t\t\t\ttype = 'mousedrag';\n\t\t\tif (!point)\n\t\t\t\tpoint = this.getEventPoint(event);\n\n\t\t\tvar inView = this.getBounds().contains(point),\n\t\t\t\thit = hitItems && inView && view._project.hitTest(point, {\n\t\t\t\t\ttolerance: 0,\n\t\t\t\t\tfill: true,\n\t\t\t\t\tstroke: true\n\t\t\t\t}),\n\t\t\t\thitItem = hit && hit.item || null,\n\t\t\t\thandle = false,\n\t\t\t\tmouse = {};\n\t\t\tmouse[type.substr(5)] = true;\n\n\t\t\tif (hitItems && hitItem !== overItem) {\n\t\t\t\tif (overItem) {\n\t\t\t\t\temitMouseEvent(overItem, null, 'mouseleave', event, point);\n\t\t\t\t}\n\t\t\t\tif (hitItem) {\n\t\t\t\t\temitMouseEvent(hitItem, null, 'mouseenter', event, point);\n\t\t\t\t}\n\t\t\t\toverItem = hitItem;\n\t\t\t}\n\t\t\tif (wasInView ^ inView) {\n\t\t\t\temitMouseEvent(this, null, inView ? 'mouseenter' : 'mouseleave',\n\t\t\t\t\t\tevent, point);\n\t\t\t\toverView = inView ? this : null;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tif ((inView || mouse.drag) && !point.equals(lastPoint)) {\n\t\t\t\temitMouseEvents(this, hitItem, nativeMove ? type : 'mousemove',\n\t\t\t\t\t\tevent, point, lastPoint);\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\twasInView = inView;\n\t\t\tif (mouse.down && inView || mouse.up && downPoint) {\n\t\t\t\temitMouseEvents(this, hitItem, type, event, point, downPoint);\n\t\t\t\tif (mouse.down) {\n\t\t\t\t\tdblClick = hitItem === clickItem\n\t\t\t\t\t\t&& (Date.now() - clickTime < 300);\n\t\t\t\t\tdownItem = clickItem = hitItem;\n\t\t\t\t\tif (!prevented && hitItem) {\n\t\t\t\t\t\tvar item = hitItem;\n\t\t\t\t\t\twhile (item && !item.responds('mousedrag'))\n\t\t\t\t\t\t\titem = item._parent;\n\t\t\t\t\t\tif (item)\n\t\t\t\t\t\t\tdragItem = hitItem;\n\t\t\t\t\t}\n\t\t\t\t\tdownPoint = point;\n\t\t\t\t} else if (mouse.up) {\n\t\t\t\t\tif (!prevented && hitItem === downItem) {\n\t\t\t\t\t\tclickTime = Date.now();\n\t\t\t\t\t\temitMouseEvents(this, hitItem, dblClick ? 'doubleclick'\n\t\t\t\t\t\t\t\t: 'click', event, point, downPoint);\n\t\t\t\t\t\tdblClick = false;\n\t\t\t\t\t}\n\t\t\t\t\tdownItem = dragItem = null;\n\t\t\t\t}\n\t\t\t\twasInView = false;\n\t\t\t\thandle = true;\n\t\t\t}\n\t\t\tlastPoint = point;\n\t\t\tif (handle && tool) {\n\t\t\t\tcalled = tool._handleMouseEvent(type, event, point, mouse)\n\t\t\t\t\t|| called;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tevent.cancelable !== false\n\t\t\t\t&& (called && !mouse.move || mouse.down && responds('mouseup'))\n\t\t\t) {\n\t\t\t\tevent.preventDefault();\n\t\t\t}\n\t\t},\n\n\t\t_handleKeyEvent: function(type, event, key, character) {\n\t\t\tvar scope = this._scope,\n\t\t\t\ttool = scope.tool,\n\t\t\t\tkeyEvent;\n\n\t\t\tfunction emit(obj) {\n\t\t\t\tif (obj.responds(type)) {\n\t\t\t\t\tpaper = scope;\n\t\t\t\t\tobj.emit(type, keyEvent = keyEvent\n\t\t\t\t\t\t\t|| new KeyEvent(type, event, key, character));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.isVisible()) {\n\t\t\t\temit(this);\n\t\t\t\tif (tool && tool.responds(type))\n\t\t\t\t\temit(tool);\n\t\t\t}\n\t\t},\n\n\t\t_countItemEvent: function(type, sign) {\n\t\t\tvar itemEvents = this._itemEvents,\n\t\t\t\tnative = itemEvents.native,\n\t\t\t\tvirtual = itemEvents.virtual;\n\t\t\tfor (var key in itemEventsMap) {\n\t\t\t\tnative[key] = (native[key] || 0)\n\t\t\t\t\t\t+ (itemEventsMap[key][type] || 0) * sign;\n\t\t\t}\n\t\t\tvirtual[type] = (virtual[type] || 0) + sign;\n\t\t},\n\n\t\tstatics: {\n\t\t\tupdateFocus: updateFocus,\n\n\t\t\t_resetState: function() {\n\t\t\t\tdragging = mouseDown = called = wasInView = false;\n\t\t\t\tprevFocus = tempFocus = overView = downPoint = lastPoint =\n\t\t\t\t\tdownItem = overItem = dragItem = clickItem = clickTime =\n\t\t\t\t\tdblClick = null;\n\t\t\t}\n\t\t}\n\t};\n});\n\nvar CanvasView = View.extend({\n\t_class: 'CanvasView',\n\n\tinitialize: function CanvasView(project, canvas) {\n\t\tif (!(canvas instanceof window.HTMLCanvasElement)) {\n\t\t\tvar size = Size.read(arguments, 1);\n\t\t\tif (size.isZero())\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Cannot create CanvasView with the provided argument: '\n\t\t\t\t\t\t+ Base.slice(arguments, 1));\n\t\t\tcanvas = CanvasProvider.getCanvas(size);\n\t\t}\n\t\tvar ctx = this._context = canvas.getContext('2d');\n\t\tctx.save();\n\t\tthis._pixelRatio = 1;\n\t\tif (!/^off|false$/.test(PaperScope.getAttribute(canvas, 'hidpi'))) {\n\t\t\tvar deviceRatio = window.devicePixelRatio || 1,\n\t\t\t\tbackingStoreRatio = DomElement.getPrefixed(ctx,\n\t\t\t\t\t\t'backingStorePixelRatio') || 1;\n\t\t\tthis._pixelRatio = deviceRatio / backingStoreRatio;\n\t\t}\n\t\tView.call(this, project, canvas);\n\t\tthis._needsUpdate = true;\n\t},\n\n\tremove: function remove() {\n\t\tthis._context.restore();\n\t\treturn remove.base.call(this);\n\t},\n\n\t_setElementSize: function _setElementSize(width, height) {\n\t\tvar pixelRatio = this._pixelRatio;\n\t\t_setElementSize.base.call(this, width * pixelRatio, height * pixelRatio);\n\t\tif (pixelRatio !== 1) {\n\t\t\tvar element = this._element,\n\t\t\t\tctx = this._context;\n\t\t\tif (!PaperScope.hasAttribute(element, 'resize')) {\n\t\t\t\tvar style = element.style;\n\t\t\t\tstyle.width = width + 'px';\n\t\t\t\tstyle.height = height + 'px';\n\t\t\t}\n\t\t\tctx.restore();\n\t\t\tctx.save();\n\t\t\tctx.scale(pixelRatio, pixelRatio);\n\t\t}\n\t},\n\n\tgetContext: function() {\n\t\treturn this._context;\n\t},\n\n\tgetPixelSize: function getPixelSize(size) {\n\t\tvar agent = paper.agent,\n\t\t\tpixels;\n\t\tif (agent && agent.firefox) {\n\t\t\tpixels = getPixelSize.base.call(this, size);\n\t\t} else {\n\t\t\tvar ctx = this._context,\n\t\t\t\tprevFont = ctx.font;\n\t\t\tctx.font = size + ' serif';\n\t\t\tpixels = parseFloat(ctx.font);\n\t\t\tctx.font = prevFont;\n\t\t}\n\t\treturn pixels;\n\t},\n\n\tgetTextWidth: function(font, lines) {\n\t\tvar ctx = this._context,\n\t\t\tprevFont = ctx.font,\n\t\t\twidth = 0;\n\t\tctx.font = font;\n\t\tfor (var i = 0, l = lines.length; i < l; i++)\n\t\t\twidth = Math.max(width, ctx.measureText(lines[i]).width);\n\t\tctx.font = prevFont;\n\t\treturn width;\n\t},\n\n\tupdate: function() {\n\t\tif (!this._needsUpdate)\n\t\t\treturn false;\n\t\tvar project = this._project,\n\t\t\tctx = this._context,\n\t\t\tsize = this._viewSize;\n\t\tctx.clearRect(0, 0, size.width + 1, size.height + 1);\n\t\tif (project)\n\t\t\tproject.draw(ctx, this._matrix, this._pixelRatio);\n\t\tthis._needsUpdate = false;\n\t\treturn true;\n\t}\n});\n\nvar Event = Base.extend({\n\t_class: 'Event',\n\n\tinitialize: function Event(event) {\n\t\tthis.event = event;\n\t\tthis.type = event && event.type;\n\t},\n\n\tprevented: false,\n\tstopped: false,\n\n\tpreventDefault: function() {\n\t\tthis.prevented = true;\n\t\tthis.event.preventDefault();\n\t},\n\n\tstopPropagation: function() {\n\t\tthis.stopped = true;\n\t\tthis.event.stopPropagation();\n\t},\n\n\tstop: function() {\n\t\tthis.stopPropagation();\n\t\tthis.preventDefault();\n\t},\n\n\tgetTimeStamp: function() {\n\t\treturn this.event.timeStamp;\n\t},\n\n\tgetModifiers: function() {\n\t\treturn Key.modifiers;\n\t}\n});\n\nvar KeyEvent = Event.extend({\n\t_class: 'KeyEvent',\n\n\tinitialize: function KeyEvent(type, event, key, character) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.key = key;\n\t\tthis.character = character;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', key: '\" + this.key\n\t\t\t\t+ \"', character: '\" + this.character\n\t\t\t\t+ \"', modifiers: \" + this.getModifiers()\n\t\t\t\t+ \" }\";\n\t}\n});\n\nvar Key = new function() {\n\tvar keyLookup = {\n\t\t\t'\\t': 'tab',\n\t\t\t' ': 'space',\n\t\t\t'\\b': 'backspace',\n\t\t\t'\\x7f': 'delete',\n\t\t\t'Spacebar': 'space',\n\t\t\t'Del': 'delete',\n\t\t\t'Win': 'meta',\n\t\t\t'Esc': 'escape'\n\t\t},\n\n\t\tcharLookup = {\n\t\t\t'tab': '\\t',\n\t\t\t'space': ' ',\n\t\t\t'enter': '\\r'\n\t\t},\n\n\t\tkeyMap = {},\n\t\tcharMap = {},\n\t\tmetaFixMap,\n\t\tdownKey,\n\n\t\tmodifiers = new Base({\n\t\t\tshift: false,\n\t\t\tcontrol: false,\n\t\t\talt: false,\n\t\t\tmeta: false,\n\t\t\tcapsLock: false,\n\t\t\tspace: false\n\t\t}).inject({\n\t\t\toption: {\n\t\t\t\tget: function() {\n\t\t\t\t\treturn this.alt;\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tcommand: {\n\t\t\t\tget: function() {\n\t\t\t\t\tvar agent = paper && paper.agent;\n\t\t\t\t\treturn agent && agent.mac ? this.meta : this.control;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\tfunction getKey(event) {\n\t\tvar key = event.key || event.keyIdentifier;\n\t\tkey = /^U\\+/.test(key)\n\t\t\t\t? String.fromCharCode(parseInt(key.substr(2), 16))\n\t\t\t\t: /^Arrow[A-Z]/.test(key) ? key.substr(5)\n\t\t\t\t: key === 'Unidentified' || key === undefined\n\t\t\t\t\t? String.fromCharCode(event.keyCode)\n\t\t\t\t\t: key;\n\t\treturn keyLookup[key] ||\n\t\t\t\t(key.length > 1 ? Base.hyphenate(key) : key.toLowerCase());\n\t}\n\n\tfunction handleKey(down, key, character, event) {\n\t\tvar type = down ? 'keydown' : 'keyup',\n\t\t\tview = View._focused,\n\t\t\tname;\n\t\tkeyMap[key] = down;\n\t\tif (down) {\n\t\t\tcharMap[key] = character;\n\t\t} else {\n\t\t\tdelete charMap[key];\n\t\t}\n\t\tif (key.length > 1 && (name = Base.camelize(key)) in modifiers) {\n\t\t\tmodifiers[name] = down;\n\t\t\tvar agent = paper && paper.agent;\n\t\t\tif (name === 'meta' && agent && agent.mac) {\n\t\t\t\tif (down) {\n\t\t\t\t\tmetaFixMap = {};\n\t\t\t\t} else {\n\t\t\t\t\tfor (var k in metaFixMap) {\n\t\t\t\t\t\tif (k in charMap)\n\t\t\t\t\t\t\thandleKey(false, k, metaFixMap[k], event);\n\t\t\t\t\t}\n\t\t\t\t\tmetaFixMap = null;\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (down && metaFixMap) {\n\t\t\tmetaFixMap[key] = character;\n\t\t}\n\t\tif (view) {\n\t\t\tview._handleKeyEvent(down ? 'keydown' : 'keyup', event, key,\n\t\t\t\t\tcharacter);\n\t\t}\n\t}\n\n\tDomEvent.add(document, {\n\t\tkeydown: function(event) {\n\t\t\tvar key = getKey(event),\n\t\t\t\tagent = paper && paper.agent;\n\t\t\tif (key.length > 1 || agent && (agent.chrome && (event.altKey\n\t\t\t\t\t\t|| agent.mac && event.metaKey\n\t\t\t\t\t\t|| !agent.mac && event.ctrlKey))) {\n\t\t\t\thandleKey(true, key,\n\t\t\t\t\t\tcharLookup[key] || (key.length > 1 ? '' : key), event);\n\t\t\t} else {\n\t\t\t\tdownKey = key;\n\t\t\t}\n\t\t},\n\n\t\tkeypress: function(event) {\n\t\t\tif (downKey) {\n\t\t\t\tvar key = getKey(event),\n\t\t\t\t\tcode = event.charCode,\n\t\t\t\t\tcharacter = code >= 32 ? String.fromCharCode(code)\n\t\t\t\t\t\t: key.length > 1 ? '' : key;\n\t\t\t\tif (key !== downKey) {\n\t\t\t\t\tkey = character.toLowerCase();\n\t\t\t\t}\n\t\t\t\thandleKey(true, key, character, event);\n\t\t\t\tdownKey = null;\n\t\t\t}\n\t\t},\n\n\t\tkeyup: function(event) {\n\t\t\tvar key = getKey(event);\n\t\t\tif (key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\tDomEvent.add(window, {\n\t\tblur: function(event) {\n\t\t\tfor (var key in charMap)\n\t\t\t\thandleKey(false, key, charMap[key], event);\n\t\t}\n\t});\n\n\treturn {\n\t\tmodifiers: modifiers,\n\n\t\tisDown: function(key) {\n\t\t\treturn !!keyMap[key];\n\t\t}\n\t};\n};\n\nvar MouseEvent = Event.extend({\n\t_class: 'MouseEvent',\n\n\tinitialize: function MouseEvent(type, event, point, target, delta) {\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t\tthis.point = point;\n\t\tthis.target = target;\n\t\tthis.delta = delta;\n\t},\n\n\ttoString: function() {\n\t\treturn \"{ type: '\" + this.type\n\t\t\t\t+ \"', point: \" + this.point\n\t\t\t\t+ ', target: ' + this.target\n\t\t\t\t+ (this.delta ? ', delta: ' + this.delta : '')\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar ToolEvent = Event.extend({\n\t_class: 'ToolEvent',\n\t_item: null,\n\n\tinitialize: function ToolEvent(tool, type, event) {\n\t\tthis.tool = tool;\n\t\tthis.type = type;\n\t\tthis.event = event;\n\t},\n\n\t_choosePoint: function(point, toolPoint) {\n\t\treturn point ? point : toolPoint ? toolPoint.clone() : null;\n\t},\n\n\tgetPoint: function() {\n\t\treturn this._choosePoint(this._point, this.tool._point);\n\t},\n\n\tsetPoint: function(point) {\n\t\tthis._point = point;\n\t},\n\n\tgetLastPoint: function() {\n\t\treturn this._choosePoint(this._lastPoint, this.tool._lastPoint);\n\t},\n\n\tsetLastPoint: function(lastPoint) {\n\t\tthis._lastPoint = lastPoint;\n\t},\n\n\tgetDownPoint: function() {\n\t\treturn this._choosePoint(this._downPoint, this.tool._downPoint);\n\t},\n\n\tsetDownPoint: function(downPoint) {\n\t\tthis._downPoint = downPoint;\n\t},\n\n\tgetMiddlePoint: function() {\n\t\tif (!this._middlePoint && this.tool._lastPoint) {\n\t\t\treturn this.tool._point.add(this.tool._lastPoint).divide(2);\n\t\t}\n\t\treturn this._middlePoint;\n\t},\n\n\tsetMiddlePoint: function(middlePoint) {\n\t\tthis._middlePoint = middlePoint;\n\t},\n\n\tgetDelta: function() {\n\t\treturn !this._delta && this.tool._lastPoint\n\t\t\t\t? this.tool._point.subtract(this.tool._lastPoint)\n\t\t\t\t: this._delta;\n\t},\n\n\tsetDelta: function(delta) {\n\t\tthis._delta = delta;\n\t},\n\n\tgetCount: function() {\n\t\treturn this.tool[/^mouse(down|up)$/.test(this.type)\n\t\t\t\t? '_downCount' : '_moveCount'];\n\t},\n\n\tsetCount: function(count) {\n\t\tthis.tool[/^mouse(down|up)$/.test(this.type) ? 'downCount' : 'count']\n\t\t\t= count;\n\t},\n\n\tgetItem: function() {\n\t\tif (!this._item) {\n\t\t\tvar result = this.tool._scope.project.hitTest(this.getPoint());\n\t\t\tif (result) {\n\t\t\t\tvar item = result.item,\n\t\t\t\t\tparent = item._parent;\n\t\t\t\twhile (/^(Group|CompoundPath)$/.test(parent._class)) {\n\t\t\t\t\titem = parent;\n\t\t\t\t\tparent = parent._parent;\n\t\t\t\t}\n\t\t\t\tthis._item = item;\n\t\t\t}\n\t\t}\n\t\treturn this._item;\n\t},\n\n\tsetItem: function(item) {\n\t\tthis._item = item;\n\t},\n\n\ttoString: function() {\n\t\treturn '{ type: ' + this.type\n\t\t\t\t+ ', point: ' + this.getPoint()\n\t\t\t\t+ ', count: ' + this.getCount()\n\t\t\t\t+ ', modifiers: ' + this.getModifiers()\n\t\t\t\t+ ' }';\n\t}\n});\n\nvar Tool = PaperScopeItem.extend({\n\t_class: 'Tool',\n\t_list: 'tools',\n\t_reference: 'tool',\n\t_events: ['onMouseDown', 'onMouseUp', 'onMouseDrag', 'onMouseMove',\n\t\t\t'onActivate', 'onDeactivate', 'onEditOptions', 'onKeyDown',\n\t\t\t'onKeyUp'],\n\n\tinitialize: function Tool(props) {\n\t\tPaperScopeItem.call(this);\n\t\tthis._moveCount = -1;\n\t\tthis._downCount = -1;\n\t\tthis.set(props);\n\t},\n\n\tgetMinDistance: function() {\n\t\treturn this._minDistance;\n\t},\n\n\tsetMinDistance: function(minDistance) {\n\t\tthis._minDistance = minDistance;\n\t\tif (minDistance != null && this._maxDistance != null\n\t\t\t\t&& minDistance > this._maxDistance) {\n\t\t\tthis._maxDistance = minDistance;\n\t\t}\n\t},\n\n\tgetMaxDistance: function() {\n\t\treturn this._maxDistance;\n\t},\n\n\tsetMaxDistance: function(maxDistance) {\n\t\tthis._maxDistance = maxDistance;\n\t\tif (this._minDistance != null && maxDistance != null\n\t\t\t\t&& maxDistance < this._minDistance) {\n\t\t\tthis._minDistance = maxDistance;\n\t\t}\n\t},\n\n\tgetFixedDistance: function() {\n\t\treturn this._minDistance == this._maxDistance\n\t\t\t? this._minDistance : null;\n\t},\n\n\tsetFixedDistance: function(distance) {\n\t\tthis._minDistance = this._maxDistance = distance;\n\t},\n\n\t_handleMouseEvent: function(type, event, point, mouse) {\n\t\tpaper = this._scope;\n\t\tif (mouse.drag && !this.responds(type))\n\t\t\ttype = 'mousemove';\n\t\tvar move = mouse.move || mouse.drag,\n\t\t\tresponds = this.responds(type),\n\t\t\tcalled = false,\n\t\t\ttool = this;\n\t\tfunction update(minDistance, maxDistance) {\n\t\t\tvar pt = point,\n\t\t\t\ttoolPoint = move ? tool._point : (tool._downPoint || pt);\n\t\t\tif (move) {\n\t\t\t\tif (tool._moveCount >= 0 && pt.equals(toolPoint)) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tif (toolPoint && (minDistance != null || maxDistance != null)) {\n\t\t\t\t\tvar vector = pt.subtract(toolPoint),\n\t\t\t\t\t\tdistance = vector.getLength();\n\t\t\t\t\tif (distance < (minDistance || 0))\n\t\t\t\t\t\treturn false;\n\t\t\t\t\tif (maxDistance) {\n\t\t\t\t\t\tpt = toolPoint.add(vector.normalize(\n\t\t\t\t\t\t\t\tMath.min(distance, maxDistance)));\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\ttool._moveCount++;\n\t\t\t}\n\t\t\ttool._point = pt;\n\t\t\ttool._lastPoint = toolPoint || pt;\n\t\t\tif (mouse.down) {\n\t\t\t\ttool._moveCount = -1;\n\t\t\t\ttool._downPoint = pt;\n\t\t\t\ttool._downCount++;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\n\t\tfunction emit() {\n\t\t\tif (responds) {\n\t\t\t\tcalled = tool.emit(type, new ToolEvent(tool, type, event))\n\t\t\t\t\t\t|| called;\n\t\t\t}\n\t\t}\n\n\t\tif (mouse.down) {\n\t\t\tupdate();\n\t\t\temit();\n\t\t} else if (mouse.up) {\n\t\t\tupdate(null, this._maxDistance);\n\t\t\temit();\n\t\t} else if (responds) {\n\t\t\twhile (update(this._minDistance, this._maxDistance))\n\t\t\t\temit();\n\t\t}\n\t\treturn called;\n\t}\n\n});\n\nvar Tween = Base.extend(Emitter, {\n\t_class: 'Tween',\n\n\tstatics: {\n\t\teasings: new Base({\n\t\t\tlinear: function(t) {\n\t\t\t\treturn t;\n\t\t\t},\n\n\t\t\teaseInQuad: function(t) {\n\t\t\t\treturn t * t;\n\t\t\t},\n\n\t\t\teaseOutQuad: function(t) {\n\t\t\t\treturn t * (2 - t);\n\t\t\t},\n\n\t\t\teaseInOutQuad: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 2 * t * t\n\t\t\t\t\t: -1 + 2 * (2 - t) * t;\n\t\t\t},\n\n\t\t\teaseInCubic: function(t) {\n\t\t\t\treturn t * t * t;\n\t\t\t},\n\n\t\t\teaseOutCubic: function(t) {\n\t\t\t\treturn --t * t * t + 1;\n\t\t\t},\n\n\t\t\teaseInOutCubic: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 4 * t * t * t\n\t\t\t\t\t: (t - 1) * (2 * t - 2) * (2 * t - 2) + 1;\n\t\t\t},\n\n\t\t\teaseInQuart: function(t) {\n\t\t\t\treturn t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuart: function(t) {\n\t\t\t\treturn 1 - (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuart: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 8 * t * t * t * t\n\t\t\t\t\t: 1 - 8 * (--t) * t * t * t;\n\t\t\t},\n\n\t\t\teaseInQuint: function(t) {\n\t\t\t\treturn t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseOutQuint: function(t) {\n\t\t\t\treturn 1 + --t * t * t * t * t;\n\t\t\t},\n\n\t\t\teaseInOutQuint: function(t) {\n\t\t\t\treturn t < 0.5\n\t\t\t\t\t? 16 * t * t * t * t * t\n\t\t\t\t\t: 1 + 16 * (--t) * t * t * t * t;\n\t\t\t}\n\t\t})\n\t},\n\n\tinitialize: function Tween(object, from, to, duration, easing, start) {\n\t\tthis.object = object;\n\t\tvar type = typeof easing;\n\t\tvar isFunction = type === 'function';\n\t\tthis.type = isFunction\n\t\t\t? type\n\t\t\t: type === 'string'\n\t\t\t\t? easing\n\t\t\t\t: 'linear';\n\t\tthis.easing = isFunction ? easing : Tween.easings[this.type];\n\t\tthis.duration = duration;\n\t\tthis.running = false;\n\n\t\tthis._then = null;\n\t\tthis._startTime = null;\n\t\tvar state = from || to;\n\t\tthis._keys = state ? Object.keys(state) : [];\n\t\tthis._parsedKeys = this._parseKeys(this._keys);\n\t\tthis._from = state && this._getState(from);\n\t\tthis._to = state && this._getState(to);\n\t\tif (start !== false) {\n\t\t\tthis.start();\n\t\t}\n\t},\n\n\tthen: function(then) {\n\t\tthis._then = then;\n\t\treturn this;\n\t},\n\n\tstart: function() {\n\t\tthis._startTime = null;\n\t\tthis.running = true;\n\t\treturn this;\n\t},\n\n\tstop: function() {\n\t\tthis.running = false;\n\t\treturn this;\n\t},\n\n\tupdate: function(progress) {\n\t\tif (this.running) {\n\t\t\tif (progress >= 1) {\n\t\t\t\tprogress = 1;\n\t\t\t\tthis.running = false;\n\t\t\t}\n\n\t\t\tvar factor = this.easing(progress),\n\t\t\t\tkeys = this._keys,\n\t\t\t\tgetValue = function(value) {\n\t\t\t\t\treturn typeof value === 'function'\n\t\t\t\t\t\t? value(factor, progress)\n\t\t\t\t\t\t: value;\n\t\t\t\t};\n\t\t\tfor (var i = 0, l = keys && keys.length; i < l; i++) {\n\t\t\t\tvar key = keys[i],\n\t\t\t\t\tfrom = getValue(this._from[key]),\n\t\t\t\t\tto = getValue(this._to[key]),\n\t\t\t\t\tvalue = (from && to && from.__add && to.__add)\n\t\t\t\t\t\t? to.__subtract(from).__multiply(factor).__add(from)\n\t\t\t\t\t\t: ((to - from) * factor) + from;\n\t\t\t\tthis._setProperty(this._parsedKeys[key], value);\n\t\t\t}\n\n\t\t\tif (this.responds('update')) {\n\t\t\t\tthis.emit('update', new Base({\n\t\t\t\t\tprogress: progress,\n\t\t\t\t\tfactor: factor\n\t\t\t\t}));\n\t\t\t}\n\t\t\tif (!this.running && this._then) {\n\t\t\t\tthis._then(this.object);\n\t\t\t}\n\t\t}\n\t\treturn this;\n\t},\n\n\t_events: {\n\t\tonUpdate: {}\n\t},\n\n\t_handleFrame: function(time) {\n\t\tvar startTime = this._startTime,\n\t\t\tprogress = startTime\n\t\t\t\t? (time - startTime) / this.duration\n\t\t\t\t: 0;\n\t\tif (!startTime) {\n\t\t\tthis._startTime = time;\n\t\t}\n\t\tthis.update(progress);\n\t},\n\n\t_getState: function(state) {\n\t\tvar keys = this._keys,\n\t\t\tresult = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = this._parsedKeys[key],\n\t\t\t\tcurrent = this._getProperty(path),\n\t\t\t\tvalue;\n\t\t\tif (state) {\n\t\t\t\tvar resolved = this._resolveValue(current, state[key]);\n\t\t\t\tthis._setProperty(path, resolved);\n\t\t\t\tvalue = this._getProperty(path);\n\t\t\t\tvalue = value && value.clone ? value.clone() : value;\n\t\t\t\tthis._setProperty(path, current);\n\t\t\t} else {\n\t\t\t\tvalue = current && current.clone ? current.clone() : current;\n\t\t\t}\n\t\t\tresult[key] = value;\n\t\t}\n\t\treturn result;\n\t},\n\n\t_resolveValue: function(current, value) {\n\t\tif (value) {\n\t\t\tif (Array.isArray(value) && value.length === 2) {\n\t\t\t\tvar operator = value[0];\n\t\t\t\treturn (\n\t\t\t\t\toperator &&\n\t\t\t\t\toperator.match &&\n\t\t\t\t\toperator.match(/^[+\\-\\*\\/]=/)\n\t\t\t\t)\n\t\t\t\t\t? this._calculate(current, operator[0], value[1])\n\t\t\t\t\t: value;\n\t\t\t} else if (typeof value === 'string') {\n\t\t\t\tvar match = value.match(/^[+\\-*/]=(.*)/);\n\t\t\t\tif (match) {\n\t\t\t\t\tvar parsed = JSON.parse(match[1].replace(\n\t\t\t\t\t\t/(['\"])?([a-zA-Z0-9_]+)(['\"])?:/g,\n\t\t\t\t\t\t'\"$2\": '\n\t\t\t\t\t));\n\t\t\t\t\treturn this._calculate(current, value[0], parsed);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn value;\n\t},\n\n\t_calculate: function(left, operator, right) {\n\t\treturn paper.PaperScript.calculateBinary(left, operator, right);\n\t},\n\n\t_parseKeys: function(keys) {\n\t\tvar parsed = {};\n\t\tfor (var i = 0, l = keys.length; i < l; i++) {\n\t\t\tvar key = keys[i],\n\t\t\t\tpath = key\n\t\t\t\t\t.replace(/\\.([^.]*)/g, '/$1')\n\t\t\t\t\t.replace(/\\[['\"]?([^'\"\\]]*)['\"]?\\]/g, '/$1');\n\t\t\tparsed[key] = path.split('/');\n\t\t}\n\t\treturn parsed;\n\t},\n\n\t_getProperty: function(path, offset) {\n\t\tvar obj = this.object;\n\t\tfor (var i = 0, l = path.length - (offset || 0); i < l && obj; i++) {\n\t\t\tobj = obj[path[i]];\n\t\t}\n\t\treturn obj;\n\t},\n\n\t_setProperty: function(path, value) {\n\t\tvar dest = this._getProperty(path, 1);\n\t\tif (dest) {\n\t\t\tdest[path[path.length - 1]] = value;\n\t\t}\n\t}\n});\n\nvar Http = {\n\trequest: function(options) {\n\t\tvar xhr = new self.XMLHttpRequest();\n\t\txhr.open((options.method || 'get').toUpperCase(), options.url,\n\t\t\t\tBase.pick(options.async, true));\n\t\tif (options.mimeType)\n\t\t\txhr.overrideMimeType(options.mimeType);\n\t\txhr.onload = function() {\n\t\t\tvar status = xhr.status;\n\t\t\tif (status === 0 || status === 200) {\n\t\t\t\tif (options.onLoad) {\n\t\t\t\t\toptions.onLoad.call(xhr, xhr.responseText);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\txhr.onerror();\n\t\t\t}\n\t\t};\n\t\txhr.onerror = function() {\n\t\t\tvar status = xhr.status,\n\t\t\t\tmessage = 'Could not load \"' + options.url + '\" (Status: '\n\t\t\t\t\t\t+ status + ')';\n\t\t\tif (options.onError) {\n\t\t\t\toptions.onError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t};\n\t\treturn xhr.send(null);\n\t}\n};\n\nvar CanvasProvider = Base.exports.CanvasProvider = {\n\tcanvases: [],\n\n\tgetCanvas: function(width, height, options) {\n\t\tif (!window)\n\t\t\treturn null;\n\t\tvar canvas,\n\t\t\tclear = true;\n\t\tif (typeof width === 'object') {\n\t\t\theight = width.height;\n\t\t\twidth = width.width;\n\t\t}\n\t\tif (this.canvases.length) {\n\t\t\tcanvas = this.canvases.pop();\n\t\t} else {\n\t\t\tcanvas = document.createElement('canvas');\n\t\t\tclear = false;\n\t\t}\n\t\tvar ctx = canvas.getContext('2d', options || {});\n\t\tif (!ctx) {\n\t\t\tthrow new Error('Canvas ' + canvas +\n\t\t\t\t\t' is unable to provide a 2D context.');\n\t\t}\n\t\tif (canvas.width === width && canvas.height === height) {\n\t\t\tif (clear)\n\t\t\t\tctx.clearRect(0, 0, width + 1, height + 1);\n\t\t} else {\n\t\t\tcanvas.width = width;\n\t\t\tcanvas.height = height;\n\t\t}\n\t\tctx.save();\n\t\treturn canvas;\n\t},\n\n\tgetContext: function(width, height, options) {\n\t\tvar canvas = this.getCanvas(width, height, options);\n\t\treturn canvas ? canvas.getContext('2d', options || {}) : null;\n\t},\n\n\trelease: function(obj) {\n\t\tvar canvas = obj && obj.canvas ? obj.canvas : obj;\n\t\tif (canvas && canvas.getContext) {\n\t\t\tcanvas.getContext('2d').restore();\n\t\t\tthis.canvases.push(canvas);\n\t\t}\n\t}\n};\n\nvar BlendMode = new function() {\n\tvar min = Math.min,\n\t\tmax = Math.max,\n\t\tabs = Math.abs,\n\t\tsr, sg, sb, sa,\n\t\tbr, bg, bb, ba,\n\t\tdr, dg, db;\n\n\tfunction getLum(r, g, b) {\n\t\treturn 0.2989 * r + 0.587 * g + 0.114 * b;\n\t}\n\n\tfunction setLum(r, g, b, l) {\n\t\tvar d = l - getLum(r, g, b);\n\t\tdr = r + d;\n\t\tdg = g + d;\n\t\tdb = b + d;\n\t\tvar l = getLum(dr, dg, db),\n\t\t\tmn = min(dr, dg, db),\n\t\t\tmx = max(dr, dg, db);\n\t\tif (mn < 0) {\n\t\t\tvar lmn = l - mn;\n\t\t\tdr = l + (dr - l) * l / lmn;\n\t\t\tdg = l + (dg - l) * l / lmn;\n\t\t\tdb = l + (db - l) * l / lmn;\n\t\t}\n\t\tif (mx > 255) {\n\t\t\tvar ln = 255 - l,\n\t\t\t\tmxl = mx - l;\n\t\t\tdr = l + (dr - l) * ln / mxl;\n\t\t\tdg = l + (dg - l) * ln / mxl;\n\t\t\tdb = l + (db - l) * ln / mxl;\n\t\t}\n\t}\n\n\tfunction getSat(r, g, b) {\n\t\treturn max(r, g, b) - min(r, g, b);\n\t}\n\n\tfunction setSat(r, g, b, s) {\n\t\tvar col = [r, g, b],\n\t\t\tmx = max(r, g, b),\n\t\t\tmn = min(r, g, b),\n\t\t\tmd;\n\t\tmn = mn === r ? 0 : mn === g ? 1 : 2;\n\t\tmx = mx === r ? 0 : mx === g ? 1 : 2;\n\t\tmd = min(mn, mx) === 0 ? max(mn, mx) === 1 ? 2 : 1 : 0;\n\t\tif (col[mx] > col[mn]) {\n\t\t\tcol[md] = (col[md] - col[mn]) * s / (col[mx] - col[mn]);\n\t\t\tcol[mx] = s;\n\t\t} else {\n\t\t\tcol[md] = col[mx] = 0;\n\t\t}\n\t\tcol[mn] = 0;\n\t\tdr = col[0];\n\t\tdg = col[1];\n\t\tdb = col[2];\n\t}\n\n\tvar modes = {\n\t\tmultiply: function() {\n\t\t\tdr = br * sr / 255;\n\t\t\tdg = bg * sg / 255;\n\t\t\tdb = bb * sb / 255;\n\t\t},\n\n\t\tscreen: function() {\n\t\t\tdr = br + sr - (br * sr / 255);\n\t\t\tdg = bg + sg - (bg * sg / 255);\n\t\t\tdb = bb + sb - (bb * sb / 255);\n\t\t},\n\n\t\toverlay: function() {\n\t\t\tdr = br < 128 ? 2 * br * sr / 255 : 255 - 2 * (255 - br) * (255 - sr) / 255;\n\t\t\tdg = bg < 128 ? 2 * bg * sg / 255 : 255 - 2 * (255 - bg) * (255 - sg) / 255;\n\t\t\tdb = bb < 128 ? 2 * bb * sb / 255 : 255 - 2 * (255 - bb) * (255 - sb) / 255;\n\t\t},\n\n\t\t'soft-light': function() {\n\t\t\tvar t = sr * br / 255;\n\t\t\tdr = t + br * (255 - (255 - br) * (255 - sr) / 255 - t) / 255;\n\t\t\tt = sg * bg / 255;\n\t\t\tdg = t + bg * (255 - (255 - bg) * (255 - sg) / 255 - t) / 255;\n\t\t\tt = sb * bb / 255;\n\t\t\tdb = t + bb * (255 - (255 - bb) * (255 - sb) / 255 - t) / 255;\n\t\t},\n\n\t\t'hard-light': function() {\n\t\t\tdr = sr < 128 ? 2 * sr * br / 255 : 255 - 2 * (255 - sr) * (255 - br) / 255;\n\t\t\tdg = sg < 128 ? 2 * sg * bg / 255 : 255 - 2 * (255 - sg) * (255 - bg) / 255;\n\t\t\tdb = sb < 128 ? 2 * sb * bb / 255 : 255 - 2 * (255 - sb) * (255 - bb) / 255;\n\t\t},\n\n\t\t'color-dodge': function() {\n\t\t\tdr = br === 0 ? 0 : sr === 255 ? 255 : min(255, 255 * br / (255 - sr));\n\t\t\tdg = bg === 0 ? 0 : sg === 255 ? 255 : min(255, 255 * bg / (255 - sg));\n\t\t\tdb = bb === 0 ? 0 : sb === 255 ? 255 : min(255, 255 * bb / (255 - sb));\n\t\t},\n\n\t\t'color-burn': function() {\n\t\t\tdr = br === 255 ? 255 : sr === 0 ? 0 : max(0, 255 - (255 - br) * 255 / sr);\n\t\t\tdg = bg === 255 ? 255 : sg === 0 ? 0 : max(0, 255 - (255 - bg) * 255 / sg);\n\t\t\tdb = bb === 255 ? 255 : sb === 0 ? 0 : max(0, 255 - (255 - bb) * 255 / sb);\n\t\t},\n\n\t\tdarken: function() {\n\t\t\tdr = br < sr ? br : sr;\n\t\t\tdg = bg < sg ? bg : sg;\n\t\t\tdb = bb < sb ? bb : sb;\n\t\t},\n\n\t\tlighten: function() {\n\t\t\tdr = br > sr ? br : sr;\n\t\t\tdg = bg > sg ? bg : sg;\n\t\t\tdb = bb > sb ? bb : sb;\n\t\t},\n\n\t\tdifference: function() {\n\t\t\tdr = br - sr;\n\t\t\tif (dr < 0)\n\t\t\t\tdr = -dr;\n\t\t\tdg = bg - sg;\n\t\t\tif (dg < 0)\n\t\t\t\tdg = -dg;\n\t\t\tdb = bb - sb;\n\t\t\tif (db < 0)\n\t\t\t\tdb = -db;\n\t\t},\n\n\t\texclusion: function() {\n\t\t\tdr = br + sr * (255 - br - br) / 255;\n\t\t\tdg = bg + sg * (255 - bg - bg) / 255;\n\t\t\tdb = bb + sb * (255 - bb - bb) / 255;\n\t\t},\n\n\t\thue: function() {\n\t\t\tsetSat(sr, sg, sb, getSat(br, bg, bb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tsaturation: function() {\n\t\t\tsetSat(br, bg, bb, getSat(sr, sg, sb));\n\t\t\tsetLum(dr, dg, db, getLum(br, bg, bb));\n\t\t},\n\n\t\tluminosity: function() {\n\t\t\tsetLum(br, bg, bb, getLum(sr, sg, sb));\n\t\t},\n\n\t\tcolor: function() {\n\t\t\tsetLum(sr, sg, sb, getLum(br, bg, bb));\n\t\t},\n\n\t\tadd: function() {\n\t\t\tdr = min(br + sr, 255);\n\t\t\tdg = min(bg + sg, 255);\n\t\t\tdb = min(bb + sb, 255);\n\t\t},\n\n\t\tsubtract: function() {\n\t\t\tdr = max(br - sr, 0);\n\t\t\tdg = max(bg - sg, 0);\n\t\t\tdb = max(bb - sb, 0);\n\t\t},\n\n\t\taverage: function() {\n\t\t\tdr = (br + sr) / 2;\n\t\t\tdg = (bg + sg) / 2;\n\t\t\tdb = (bb + sb) / 2;\n\t\t},\n\n\t\tnegation: function() {\n\t\t\tdr = 255 - abs(255 - sr - br);\n\t\t\tdg = 255 - abs(255 - sg - bg);\n\t\t\tdb = 255 - abs(255 - sb - bb);\n\t\t}\n\t};\n\n\tvar nativeModes = this.nativeModes = Base.each([\n\t\t'source-over', 'source-in', 'source-out', 'source-atop',\n\t\t'destination-over', 'destination-in', 'destination-out',\n\t\t'destination-atop', 'lighter', 'darker', 'copy', 'xor'\n\t], function(mode) {\n\t\tthis[mode] = true;\n\t}, {});\n\n\tvar ctx = CanvasProvider.getContext(1, 1, { willReadFrequently: true });\n\tif (ctx) {\n\t\tBase.each(modes, function(func, mode) {\n\t\t\tvar darken = mode === 'darken',\n\t\t\t\tok = false;\n\t\t\tctx.save();\n\t\t\ttry {\n\t\t\t\tctx.fillStyle = darken ? '#300' : '#a00';\n\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\tctx.globalCompositeOperation = mode;\n\t\t\t\tif (ctx.globalCompositeOperation === mode) {\n\t\t\t\t\tctx.fillStyle = darken ? '#a00' : '#300';\n\t\t\t\t\tctx.fillRect(0, 0, 1, 1);\n\t\t\t\t\tok = ctx.getImageData(0, 0, 1, 1).data[0] !== darken\n\t\t\t\t\t\t\t? 170 : 51;\n\t\t\t\t}\n\t\t\t} catch (e) {}\n\t\t\tctx.restore();\n\t\t\tnativeModes[mode] = ok;\n\t\t});\n\t\tCanvasProvider.release(ctx);\n\t}\n\n\tthis.process = function(mode, srcContext, dstContext, alpha, offset) {\n\t\tvar srcCanvas = srcContext.canvas,\n\t\t\tnormal = mode === 'normal';\n\t\tif (normal || nativeModes[mode]) {\n\t\t\tdstContext.save();\n\t\t\tdstContext.setTransform(1, 0, 0, 1, 0, 0);\n\t\t\tdstContext.globalAlpha = alpha;\n\t\t\tif (!normal)\n\t\t\t\tdstContext.globalCompositeOperation = mode;\n\t\t\tdstContext.drawImage(srcCanvas, offset.x, offset.y);\n\t\t\tdstContext.restore();\n\t\t} else {\n\t\t\tvar process = modes[mode];\n\t\t\tif (!process)\n\t\t\t\treturn;\n\t\t\tvar dstData = dstContext.getImageData(offset.x, offset.y,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height),\n\t\t\t\tdst = dstData.data,\n\t\t\t\tsrc = srcContext.getImageData(0, 0,\n\t\t\t\t\tsrcCanvas.width, srcCanvas.height).data;\n\t\t\tfor (var i = 0, l = dst.length; i < l; i += 4) {\n\t\t\t\tsr = src[i];\n\t\t\t\tbr = dst[i];\n\t\t\t\tsg = src[i + 1];\n\t\t\t\tbg = dst[i + 1];\n\t\t\t\tsb = src[i + 2];\n\t\t\t\tbb = dst[i + 2];\n\t\t\t\tsa = src[i + 3];\n\t\t\t\tba = dst[i + 3];\n\t\t\t\tprocess();\n\t\t\t\tvar a1 = sa * alpha / 255,\n\t\t\t\t\ta2 = 1 - a1;\n\t\t\t\tdst[i] = a1 * dr + a2 * br;\n\t\t\t\tdst[i + 1] = a1 * dg + a2 * bg;\n\t\t\t\tdst[i + 2] = a1 * db + a2 * bb;\n\t\t\t\tdst[i + 3] = sa * alpha + a2 * ba;\n\t\t\t}\n\t\t\tdstContext.putImageData(dstData, offset.x, offset.y);\n\t\t}\n\t};\n};\n\nvar SvgElement = new function() {\n\tvar svg = 'http://www.w3.org/2000/svg',\n\t\txmlns = 'http://www.w3.org/2000/xmlns',\n\t\txlink = 'http://www.w3.org/1999/xlink',\n\t\tattributeNamespace = {\n\t\t\thref: xlink,\n\t\t\txlink: xmlns,\n\t\t\txmlns: xmlns + '/',\n\t\t\t'xmlns:xlink': xmlns + '/'\n\t\t};\n\n\tfunction create(tag, attributes, formatter) {\n\t\treturn set(document.createElementNS(svg, tag), attributes, formatter);\n\t}\n\n\tfunction get(node, name) {\n\t\tvar namespace = attributeNamespace[name],\n\t\t\tvalue = namespace\n\t\t\t\t? node.getAttributeNS(namespace, name)\n\t\t\t\t: node.getAttribute(name);\n\t\treturn value === 'null' ? null : value;\n\t}\n\n\tfunction set(node, attributes, formatter) {\n\t\tfor (var name in attributes) {\n\t\t\tvar value = attributes[name],\n\t\t\t\tnamespace = attributeNamespace[name];\n\t\t\tif (typeof value === 'number' && formatter)\n\t\t\t\tvalue = formatter.number(value);\n\t\t\tif (namespace) {\n\t\t\t\tnode.setAttributeNS(namespace, name, value);\n\t\t\t} else {\n\t\t\t\tnode.setAttribute(name, value);\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\treturn {\n\t\tsvg: svg,\n\t\txmlns: xmlns,\n\t\txlink: xlink,\n\n\t\tcreate: create,\n\t\tget: get,\n\t\tset: set\n\t};\n};\n\nvar SvgStyles = Base.each({\n\tfillColor: ['fill', 'color'],\n\tfillRule: ['fill-rule', 'string'],\n\tstrokeColor: ['stroke', 'color'],\n\tstrokeWidth: ['stroke-width', 'number'],\n\tstrokeCap: ['stroke-linecap', 'string'],\n\tstrokeJoin: ['stroke-linejoin', 'string'],\n\tstrokeScaling: ['vector-effect', 'lookup', {\n\t\ttrue: 'none',\n\t\tfalse: 'non-scaling-stroke'\n\t}, function(item, value) {\n\t\treturn !value\n\t\t\t\t&& (item instanceof PathItem\n\t\t\t\t\t|| item instanceof Shape\n\t\t\t\t\t|| item instanceof TextItem);\n\t}],\n\tmiterLimit: ['stroke-miterlimit', 'number'],\n\tdashArray: ['stroke-dasharray', 'array'],\n\tdashOffset: ['stroke-dashoffset', 'number'],\n\tfontFamily: ['font-family', 'string'],\n\tfontWeight: ['font-weight', 'string'],\n\tfontSize: ['font-size', 'number'],\n\tjustification: ['text-anchor', 'lookup', {\n\t\tleft: 'start',\n\t\tcenter: 'middle',\n\t\tright: 'end'\n\t}],\n\topacity: ['opacity', 'number'],\n\tblendMode: ['mix-blend-mode', 'style']\n}, function(entry, key) {\n\tvar part = Base.capitalize(key),\n\t\tlookup = entry[2];\n\tthis[key] = {\n\t\ttype: entry[1],\n\t\tproperty: key,\n\t\tattribute: entry[0],\n\t\ttoSVG: lookup,\n\t\tfromSVG: lookup && Base.each(lookup, function(value, name) {\n\t\t\tthis[value] = name;\n\t\t}, {}),\n\t\texportFilter: entry[3],\n\t\tget: 'get' + part,\n\t\tset: 'set' + part\n\t};\n}, {});\n\nnew function() {\n\tvar formatter;\n\n\tfunction getTransform(matrix, coordinates, center) {\n\t\tvar attrs = new Base(),\n\t\t\ttrans = matrix.getTranslation();\n\t\tif (coordinates) {\n\t\t\tvar point;\n\t\t\tif (matrix.isInvertible()) {\n\t\t\t\tmatrix = matrix._shiftless();\n\t\t\t\tpoint = matrix._inverseTransform(trans);\n\t\t\t\ttrans = null;\n\t\t\t} else {\n\t\t\t\tpoint = new Point();\n\t\t\t}\n\t\t\tattrs[center ? 'cx' : 'x'] = point.x;\n\t\t\tattrs[center ? 'cy' : 'y'] = point.y;\n\t\t}\n\t\tif (!matrix.isIdentity()) {\n\t\t\tvar decomposed = matrix.decompose();\n\t\t\tif (decomposed) {\n\t\t\t\tvar parts = [],\n\t\t\t\t\tangle = decomposed.rotation,\n\t\t\t\t\tscale = decomposed.scaling,\n\t\t\t\t\tskew = decomposed.skewing;\n\t\t\t\tif (trans && !trans.isZero())\n\t\t\t\t\tparts.push('translate(' + formatter.point(trans) + ')');\n\t\t\t\tif (angle)\n\t\t\t\t\tparts.push('rotate(' + formatter.number(angle) + ')');\n\t\t\t\tif (!Numerical.isZero(scale.x - 1)\n\t\t\t\t\t\t|| !Numerical.isZero(scale.y - 1))\n\t\t\t\t\tparts.push('scale(' + formatter.point(scale) +')');\n\t\t\t\tif (skew.x)\n\t\t\t\t\tparts.push('skewX(' + formatter.number(skew.x) + ')');\n\t\t\t\tif (skew.y)\n\t\t\t\t\tparts.push('skewY(' + formatter.number(skew.y) + ')');\n\t\t\t\tattrs.transform = parts.join(' ');\n\t\t\t} else {\n\t\t\t\tattrs.transform = 'matrix(' + matrix.getValues().join(',') + ')';\n\t\t\t}\n\t\t}\n\t\treturn attrs;\n\t}\n\n\tfunction exportGroup(item, options) {\n\t\tvar attrs = getTransform(item._matrix),\n\t\t\tchildren = item._children;\n\t\tvar node = SvgElement.create('g', attrs, formatter);\n\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\tvar child = children[i];\n\t\t\tvar childNode = exportSVG(child, options);\n\t\t\tif (childNode) {\n\t\t\t\tif (child.isClipMask()) {\n\t\t\t\t\tvar clip = SvgElement.create('clipPath');\n\t\t\t\t\tclip.appendChild(childNode);\n\t\t\t\t\tsetDefinition(child, clip, 'clip');\n\t\t\t\t\tSvgElement.set(node, {\n\t\t\t\t\t\t'clip-path': 'url(#' + clip.id + ')'\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tnode.appendChild(childNode);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn node;\n\t}\n\n\tfunction exportRaster(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tsize = item.getSize(),\n\t\t\timage = item.getImage();\n\t\tattrs.x -= size.width / 2;\n\t\tattrs.y -= size.height / 2;\n\t\tattrs.width = size.width;\n\t\tattrs.height = size.height;\n\t\tattrs.href = options.embedImages == false && image && image.src\n\t\t\t\t|| item.toDataURL();\n\t\treturn SvgElement.create('image', attrs, formatter);\n\t}\n\n\tfunction exportPath(item, options) {\n\t\tvar matchShapes = options.matchShapes;\n\t\tif (matchShapes) {\n\t\t\tvar shape = item.toShape(false);\n\t\t\tif (shape)\n\t\t\t\treturn exportShape(shape, options);\n\t\t}\n\t\tvar segments = item._segments,\n\t\t\tlength = segments.length,\n\t\t\ttype,\n\t\t\tattrs = getTransform(item._matrix);\n\t\tif (matchShapes && length >= 2 && !item.hasHandles()) {\n\t\t\tif (length > 2) {\n\t\t\t\ttype = item._closed ? 'polygon' : 'polyline';\n\t\t\t\tvar parts = [];\n\t\t\t\tfor (var i = 0; i < length; i++) {\n\t\t\t\t\tparts.push(formatter.point(segments[i]._point));\n\t\t\t\t}\n\t\t\t\tattrs.points = parts.join(' ');\n\t\t\t} else {\n\t\t\t\ttype = 'line';\n\t\t\t\tvar start = segments[0]._point,\n\t\t\t\t\tend = segments[1]._point;\n\t\t\t\tattrs.set({\n\t\t\t\t\tx1: start.x,\n\t\t\t\t\ty1: start.y,\n\t\t\t\t\tx2: end.x,\n\t\t\t\t\ty2: end.y\n\t\t\t\t});\n\t\t\t}\n\t\t} else {\n\t\t\ttype = 'path';\n\t\t\tattrs.d = item.getPathData(null, options.precision);\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportShape(item) {\n\t\tvar type = item._type,\n\t\t\tradius = item._radius,\n\t\t\tattrs = getTransform(item._matrix, true, type !== 'rectangle');\n\t\tif (type === 'rectangle') {\n\t\t\ttype = 'rect';\n\t\t\tvar size = item._size,\n\t\t\t\twidth = size.width,\n\t\t\t\theight = size.height;\n\t\t\tattrs.x -= width / 2;\n\t\t\tattrs.y -= height / 2;\n\t\t\tattrs.width = width;\n\t\t\tattrs.height = height;\n\t\t\tif (radius.isZero())\n\t\t\t\tradius = null;\n\t\t}\n\t\tif (radius) {\n\t\t\tif (type === 'circle') {\n\t\t\t\tattrs.r = radius;\n\t\t\t} else {\n\t\t\t\tattrs.rx = radius.width;\n\t\t\t\tattrs.ry = radius.height;\n\t\t\t}\n\t\t}\n\t\treturn SvgElement.create(type, attrs, formatter);\n\t}\n\n\tfunction exportCompoundPath(item, options) {\n\t\tvar attrs = getTransform(item._matrix);\n\t\tvar data = item.getPathData(null, options.precision);\n\t\tif (data)\n\t\t\tattrs.d = data;\n\t\treturn SvgElement.create('path', attrs, formatter);\n\t}\n\n\tfunction exportSymbolItem(item, options) {\n\t\tvar attrs = getTransform(item._matrix, true),\n\t\t\tdefinition = item._definition,\n\t\t\tnode = getDefinition(definition, 'symbol'),\n\t\t\tdefinitionItem = definition._item,\n\t\t\tbounds = definitionItem.getStrokeBounds();\n\t\tif (!node) {\n\t\t\tnode = SvgElement.create('symbol', {\n\t\t\t\tviewBox: formatter.rectangle(bounds)\n\t\t\t});\n\t\t\tnode.appendChild(exportSVG(definitionItem, options));\n\t\t\tsetDefinition(definition, node, 'symbol');\n\t\t}\n\t\tattrs.href = '#' + node.id;\n\t\tattrs.x += bounds.x;\n\t\tattrs.y += bounds.y;\n\t\tattrs.width = bounds.width;\n\t\tattrs.height = bounds.height;\n\t\tattrs.overflow = 'visible';\n\t\treturn SvgElement.create('use', attrs, formatter);\n\t}\n\n\tfunction exportGradient(color) {\n\t\tvar gradientNode = getDefinition(color, 'color');\n\t\tif (!gradientNode) {\n\t\t\tvar gradient = color.getGradient(),\n\t\t\t\tradial = gradient._radial,\n\t\t\t\torigin = color.getOrigin(),\n\t\t\t\tdestination = color.getDestination(),\n\t\t\t\tattrs;\n\t\t\tif (radial) {\n\t\t\t\tattrs = {\n\t\t\t\t\tcx: origin.x,\n\t\t\t\t\tcy: origin.y,\n\t\t\t\t\tr: origin.getDistance(destination)\n\t\t\t\t};\n\t\t\t\tvar highlight = color.getHighlight();\n\t\t\t\tif (highlight) {\n\t\t\t\t\tattrs.fx = highlight.x;\n\t\t\t\t\tattrs.fy = highlight.y;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tattrs = {\n\t\t\t\t\tx1: origin.x,\n\t\t\t\t\ty1: origin.y,\n\t\t\t\t\tx2: destination.x,\n\t\t\t\t\ty2: destination.y\n\t\t\t\t};\n\t\t\t}\n\t\t\tattrs.gradientUnits = 'userSpaceOnUse';\n\t\t\tgradientNode = SvgElement.create((radial ? 'radial' : 'linear')\n\t\t\t\t\t+ 'Gradient', attrs, formatter);\n\t\t\tvar stops = gradient._stops;\n\t\t\tfor (var i = 0, l = stops.length; i < l; i++) {\n\t\t\t\tvar stop = stops[i],\n\t\t\t\t\tstopColor = stop._color,\n\t\t\t\t\talpha = stopColor.getAlpha(),\n\t\t\t\t\toffset = stop._offset;\n\t\t\t\tattrs = {\n\t\t\t\t\toffset: offset == null ? i / (l - 1) : offset\n\t\t\t\t};\n\t\t\t\tif (stopColor)\n\t\t\t\t\tattrs['stop-color'] = stopColor.toCSS(true);\n\t\t\t\tif (alpha < 1)\n\t\t\t\t\tattrs['stop-opacity'] = alpha;\n\t\t\t\tgradientNode.appendChild(\n\t\t\t\t\t\tSvgElement.create('stop', attrs, formatter));\n\t\t\t}\n\t\t\tsetDefinition(color, gradientNode, 'color');\n\t\t}\n\t\treturn 'url(#' + gradientNode.id + ')';\n\t}\n\n\tfunction exportText(item) {\n\t\tvar node = SvgElement.create('text', getTransform(item._matrix, true),\n\t\t\t\tformatter);\n\t\tnode.textContent = item._content;\n\t\treturn node;\n\t}\n\n\tvar exporters = {\n\t\tGroup: exportGroup,\n\t\tLayer: exportGroup,\n\t\tRaster: exportRaster,\n\t\tPath: exportPath,\n\t\tShape: exportShape,\n\t\tCompoundPath: exportCompoundPath,\n\t\tSymbolItem: exportSymbolItem,\n\t\tPointText: exportText\n\t};\n\n\tfunction applyStyle(item, node, options, isRoot) {\n\t\tvar attrs = {},\n\t\t\tparent = !isRoot && item.getParent(),\n\t\t\tstyle = [];\n\n\t\tif (item._name != null)\n\t\t\tattrs.id = item._name;\n\n\t\tBase.each(SvgStyles, function(entry) {\n\t\t\tvar get = entry.get,\n\t\t\t\ttype = entry.type,\n\t\t\t\tvalue = item[get]();\n\t\t\tif (entry.exportFilter\n\t\t\t\t\t? entry.exportFilter(item, value)\n\t\t\t\t\t: options.reduceAttributes == false\n\t\t\t\t\t\t|| !parent || !Base.equals(parent[get](), value)) {\n\t\t\t\tif (type === 'color' && value != null) {\n\t\t\t\t\tvar alpha = value.getAlpha();\n\t\t\t\t\tif (alpha < 1)\n\t\t\t\t\t\tattrs[entry.attribute + '-opacity'] = alpha;\n\t\t\t\t}\n\t\t\t\tif (type === 'style') {\n\t\t\t\t\tstyle.push(entry.attribute + ': ' + value);\n\t\t\t\t} else {\n\t\t\t\t\tattrs[entry.attribute] = value == null ? 'none'\n\t\t\t\t\t\t\t: type === 'color' ? value.gradient\n\t\t\t\t\t\t\t\t? exportGradient(value, item)\n\t\t\t\t\t\t\t\t: value.toCSS(true)\n\t\t\t\t\t\t\t: type === 'array' ? value.join(',')\n\t\t\t\t\t\t\t: type === 'lookup' ? entry.toSVG[value]\n\t\t\t\t\t\t\t: value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\n\t\tif (style.length)\n\t\t\tattrs.style = style.join(';');\n\n\t\tif (attrs.opacity === 1)\n\t\t\tdelete attrs.opacity;\n\n\t\tif (!item._visible)\n\t\t\tattrs.visibility = 'hidden';\n\n\t\treturn SvgElement.set(node, attrs, formatter);\n\t}\n\n\tvar definitions;\n\tfunction getDefinition(item, type) {\n\t\tif (!definitions)\n\t\t\tdefinitions = { ids: {}, svgs: {} };\n\t\treturn item && definitions.svgs[type + '-'\n\t\t\t\t+ (item._id || item.__id || (item.__id = UID.get('svg')))];\n\t}\n\n\tfunction setDefinition(item, node, type) {\n\t\tif (!definitions)\n\t\t\tgetDefinition();\n\t\tvar typeId = definitions.ids[type] = (definitions.ids[type] || 0) + 1;\n\t\tnode.id = type + '-' + typeId;\n\t\tdefinitions.svgs[type + '-' + (item._id || item.__id)] = node;\n\t}\n\n\tfunction exportDefinitions(node, options) {\n\t\tvar svg = node,\n\t\t\tdefs = null;\n\t\tif (definitions) {\n\t\t\tsvg = node.nodeName.toLowerCase() === 'svg' && node;\n\t\t\tfor (var i in definitions.svgs) {\n\t\t\t\tif (!defs) {\n\t\t\t\t\tif (!svg) {\n\t\t\t\t\t\tsvg = SvgElement.create('svg');\n\t\t\t\t\t\tsvg.appendChild(node);\n\t\t\t\t\t}\n\t\t\t\t\tdefs = svg.insertBefore(SvgElement.create('defs'),\n\t\t\t\t\t\t\tsvg.firstChild);\n\t\t\t\t}\n\t\t\t\tdefs.appendChild(definitions.svgs[i]);\n\t\t\t}\n\t\t\tdefinitions = null;\n\t\t}\n\t\treturn options.asString\n\t\t\t\t? new self.XMLSerializer().serializeToString(svg)\n\t\t\t\t: svg;\n\t}\n\n\tfunction exportSVG(item, options, isRoot) {\n\t\tvar exporter = exporters[item._class],\n\t\t\tnode = exporter && exporter(item, options);\n\t\tif (node) {\n\t\t\tvar onExport = options.onExport;\n\t\t\tif (onExport)\n\t\t\t\tnode = onExport(item, node, options) || node;\n\t\t\tvar data = JSON.stringify(item._data);\n\t\t\tif (data && data !== '{}' && data !== 'null')\n\t\t\t\tnode.setAttribute('data-paper-data', data);\n\t\t}\n\t\treturn node && applyStyle(item, node, options, isRoot);\n\t}\n\n\tfunction setOptions(options) {\n\t\tif (!options)\n\t\t\toptions = {};\n\t\tformatter = new Formatter(options.precision);\n\t\treturn options;\n\t}\n\n\tItem.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\treturn exportDefinitions(exportSVG(this, options, true), options);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\texportSVG: function(options) {\n\t\t\toptions = setOptions(options);\n\t\t\tvar children = this._children,\n\t\t\t\tview = this.getView(),\n\t\t\t\tbounds = Base.pick(options.bounds, 'view'),\n\t\t\t\tmx = options.matrix || bounds === 'view' && view._matrix,\n\t\t\t\tmatrix = mx && Matrix.read([mx]),\n\t\t\t\trect = bounds === 'view'\n\t\t\t\t\t? new Rectangle([0, 0], view.getViewSize())\n\t\t\t\t\t: bounds === 'content'\n\t\t\t\t\t\t? Item._getBounds(children, matrix, { stroke: true })\n\t\t\t\t\t\t\t.rect\n\t\t\t\t\t\t: Rectangle.read([bounds], 0, { readNull: true }),\n\t\t\t\tattrs = {\n\t\t\t\t\tversion: '1.1',\n\t\t\t\t\txmlns: SvgElement.svg,\n\t\t\t\t\t'xmlns:xlink': SvgElement.xlink,\n\t\t\t\t};\n\t\t\tif (rect) {\n\t\t\t\tattrs.width = rect.width;\n\t\t\t\tattrs.height = rect.height;\n\t\t\t\tif (rect.x || rect.x === 0 || rect.y || rect.y === 0)\n\t\t\t\t\tattrs.viewBox = formatter.rectangle(rect);\n\t\t\t}\n\t\t\tvar node = SvgElement.create('svg', attrs, formatter),\n\t\t\t\tparent = node;\n\t\t\tif (matrix && !matrix.isIdentity()) {\n\t\t\t\tparent = node.appendChild(SvgElement.create('g',\n\t\t\t\t\t\tgetTransform(matrix), formatter));\n\t\t\t}\n\t\t\tfor (var i = 0, l = children.length; i < l; i++) {\n\t\t\t\tparent.appendChild(exportSVG(children[i], options, true));\n\t\t\t}\n\t\t\treturn exportDefinitions(node, options);\n\t\t}\n\t});\n};\n\nnew function() {\n\n\tvar definitions = {},\n\t\trootSize;\n\n\tfunction getValue(node, name, isString, allowNull, allowPercent,\n\t\t\tdefaultValue) {\n\t\tvar value = SvgElement.get(node, name) || defaultValue,\n\t\t\tres = value == null\n\t\t\t\t? allowNull\n\t\t\t\t\t? null\n\t\t\t\t\t: isString ? '' : 0\n\t\t\t\t: isString\n\t\t\t\t\t? value\n\t\t\t\t\t: parseFloat(value);\n\t\treturn /%\\s*$/.test(value)\n\t\t\t? (res / 100) * (allowPercent ? 1\n\t\t\t\t: rootSize[/x|^width/.test(name) ? 'width' : 'height'])\n\t\t\t: res;\n\t}\n\n\tfunction getPoint(node, x, y, allowNull, allowPercent, defaultX, defaultY) {\n\t\tx = getValue(node, x || 'x', false, allowNull, allowPercent, defaultX);\n\t\ty = getValue(node, y || 'y', false, allowNull, allowPercent, defaultY);\n\t\treturn allowNull && (x == null || y == null) ? null\n\t\t\t\t: new Point(x, y);\n\t}\n\n\tfunction getSize(node, w, h, allowNull, allowPercent) {\n\t\tw = getValue(node, w || 'width', false, allowNull, allowPercent);\n\t\th = getValue(node, h || 'height', false, allowNull, allowPercent);\n\t\treturn allowNull && (w == null || h == null) ? null\n\t\t\t\t: new Size(w, h);\n\t}\n\n\tfunction convertValue(value, type, lookup) {\n\t\treturn value === 'none' ? null\n\t\t\t\t: type === 'number' ? parseFloat(value)\n\t\t\t\t: type === 'array' ?\n\t\t\t\t\tvalue ? value.split(/[\\s,]+/g).map(parseFloat) : []\n\t\t\t\t: type === 'color' ? getDefinition(value) || value\n\t\t\t\t: type === 'lookup' ? lookup[value]\n\t\t\t\t: value;\n\t}\n\n\tfunction importGroup(node, type, options, isRoot) {\n\t\tvar nodes = node.childNodes,\n\t\t\tisClip = type === 'clippath',\n\t\t\tisDefs = type === 'defs',\n\t\t\titem = new Group(),\n\t\t\tproject = item._project,\n\t\t\tcurrentStyle = project._currentStyle,\n\t\t\tchildren = [];\n\t\tif (!isClip && !isDefs) {\n\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tproject._currentStyle = item._style.clone();\n\t\t}\n\t\tif (isRoot) {\n\t\t\tvar defs = node.querySelectorAll('defs');\n\t\t\tfor (var i = 0, l = defs.length; i < l; i++) {\n\t\t\t\timportNode(defs[i], options, false);\n\t\t\t}\n\t\t}\n\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\tvar childNode = nodes[i],\n\t\t\t\tchild;\n\t\t\tif (childNode.nodeType === 1\n\t\t\t\t\t&& !/^defs$/i.test(childNode.nodeName)\n\t\t\t\t\t&& (child = importNode(childNode, options, false))\n\t\t\t\t\t&& !(child instanceof SymbolDefinition))\n\t\t\t\tchildren.push(child);\n\t\t}\n\t\titem.addChildren(children);\n\t\tif (isClip)\n\t\t\titem = applyAttributes(item.reduce(), node, isRoot);\n\t\tproject._currentStyle = currentStyle;\n\t\tif (isClip || isDefs) {\n\t\t\titem.remove();\n\t\t\titem = null;\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importPoly(node, type) {\n\t\tvar coords = node.getAttribute('points').match(\n\t\t\t\t\t/[+-]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][+-]?\\d+)?/g),\n\t\t\tpoints = [];\n\t\tfor (var i = 0, l = coords.length; i < l; i += 2)\n\t\t\tpoints.push(new Point(\n\t\t\t\t\tparseFloat(coords[i]),\n\t\t\t\t\tparseFloat(coords[i + 1])));\n\t\tvar path = new Path(points);\n\t\tif (type === 'polygon')\n\t\t\tpath.closePath();\n\t\treturn path;\n\t}\n\n\tfunction importPath(node) {\n\t\treturn PathItem.create(node.getAttribute('d'));\n\t}\n\n\tfunction importGradient(node, type) {\n\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\tradial = type === 'radialgradient',\n\t\t\tgradient;\n\t\tif (id) {\n\t\t\tgradient = definitions[id].getGradient();\n\t\t\tif (gradient._radial ^ radial) {\n\t\t\t\tgradient = gradient.clone();\n\t\t\t\tgradient._radial = radial;\n\t\t\t}\n\t\t} else {\n\t\t\tvar nodes = node.childNodes,\n\t\t\t\tstops = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\tstops.push(applyAttributes(new GradientStop(), child));\n\t\t\t}\n\t\t\tgradient = new Gradient(stops, radial);\n\t\t}\n\t\tvar origin, destination, highlight,\n\t\t\tscaleToBounds = getValue(node, 'gradientUnits', true) !==\n\t\t\t\t'userSpaceOnUse';\n\t\tif (radial) {\n\t\t\torigin = getPoint(node, 'cx', 'cy', false, scaleToBounds,\n\t\t\t\t'50%', '50%');\n\t\t\tdestination = origin.add(\n\t\t\t\tgetValue(node, 'r', false, false, scaleToBounds, '50%'), 0);\n\t\t\thighlight = getPoint(node, 'fx', 'fy', true, scaleToBounds);\n\t\t} else {\n\t\t\torigin = getPoint(node, 'x1', 'y1', false, scaleToBounds,\n\t\t\t\t'0%', '0%');\n\t\t\tdestination = getPoint(node, 'x2', 'y2', false, scaleToBounds,\n\t\t\t\t'100%', '0%');\n\t\t}\n\t\tvar color = applyAttributes(\n\t\t\t\tnew Color(gradient, origin, destination, highlight), node);\n\t\tcolor._scaleToBounds = scaleToBounds;\n\t\treturn null;\n\t}\n\n\tvar importers = {\n\t\t'#document': function (node, type, options, isRoot) {\n\t\t\tvar nodes = node.childNodes;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar child = nodes[i];\n\t\t\t\tif (child.nodeType === 1)\n\t\t\t\t\treturn importNode(child, options, isRoot);\n\t\t\t}\n\t\t},\n\t\tg: importGroup,\n\t\tsvg: importGroup,\n\t\tclippath: importGroup,\n\t\tpolygon: importPoly,\n\t\tpolyline: importPoly,\n\t\tpath: importPath,\n\t\tlineargradient: importGradient,\n\t\tradialgradient: importGradient,\n\n\t\timage: function (node) {\n\t\t\tvar raster = new Raster(getValue(node, 'href', true));\n\t\t\traster.on('load', function() {\n\t\t\t\tvar size = getSize(node);\n\t\t\t\tthis.setSize(size);\n\t\t\t\tvar center = getPoint(node).add(size.divide(2));\n\t\t\t\tthis._matrix.append(new Matrix().translate(center));\n\t\t\t});\n\t\t\treturn raster;\n\t\t},\n\n\t\tsymbol: function(node, type, options, isRoot) {\n\t\t\treturn new SymbolDefinition(\n\t\t\t\t\timportGroup(node, type, options, isRoot), true);\n\t\t},\n\n\t\tdefs: importGroup,\n\n\t\tuse: function(node) {\n\t\t\tvar id = (getValue(node, 'href', true) || '').substring(1),\n\t\t\t\tdefinition = definitions[id],\n\t\t\t\tpoint = getPoint(node);\n\t\t\treturn definition\n\t\t\t\t\t? definition instanceof SymbolDefinition\n\t\t\t\t\t\t? definition.place(point)\n\t\t\t\t\t\t: definition.clone().translate(point)\n\t\t\t\t\t: null;\n\t\t},\n\n\t\tcircle: function(node) {\n\t\t\treturn new Shape.Circle(\n\t\t\t\t\tgetPoint(node, 'cx', 'cy'),\n\t\t\t\t\tgetValue(node, 'r'));\n\t\t},\n\n\t\tellipse: function(node) {\n\t\t\treturn new Shape.Ellipse({\n\t\t\t\tcenter: getPoint(node, 'cx', 'cy'),\n\t\t\t\tradius: getSize(node, 'rx', 'ry')\n\t\t\t});\n\t\t},\n\n\t\trect: function(node) {\n\t\t\treturn new Shape.Rectangle(new Rectangle(\n\t\t\t\t\t\tgetPoint(node),\n\t\t\t\t\t\tgetSize(node)\n\t\t\t\t\t), getSize(node, 'rx', 'ry'));\n\t\t\t},\n\n\t\tline: function(node) {\n\t\t\treturn new Path.Line(\n\t\t\t\t\tgetPoint(node, 'x1', 'y1'),\n\t\t\t\t\tgetPoint(node, 'x2', 'y2'));\n\t\t},\n\n\t\ttext: function(node) {\n\t\t\tvar text = new PointText(getPoint(node).add(\n\t\t\t\t\tgetPoint(node, 'dx', 'dy')));\n\t\t\ttext.setContent(node.textContent.trim() || '');\n\t\t\treturn text;\n\t\t},\n\n\t\tswitch: importGroup\n\t};\n\n\tfunction applyTransform(item, value, name, node) {\n\t\tif (item.transform) {\n\t\t\tvar transforms = (node.getAttribute(name) || '').split(/\\)\\s*/g),\n\t\t\t\tmatrix = new Matrix();\n\t\t\tfor (var i = 0, l = transforms.length; i < l; i++) {\n\t\t\t\tvar transform = transforms[i];\n\t\t\t\tif (!transform)\n\t\t\t\t\tbreak;\n\t\t\t\tvar parts = transform.split(/\\(\\s*/),\n\t\t\t\t\tcommand = parts[0].trim(),\n\t\t\t\t\tv = parts[1].split(/[\\s,]+/g);\n\t\t\t\tfor (var j = 0, m = v.length; j < m; j++)\n\t\t\t\t\tv[j] = parseFloat(v[j]);\n\t\t\t\tswitch (command) {\n\t\t\t\tcase 'matrix':\n\t\t\t\t\tmatrix.append(\n\t\t\t\t\t\t\tnew Matrix(v[0], v[1], v[2], v[3], v[4], v[5]));\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'rotate':\n\t\t\t\t\tmatrix.rotate(v[0], v[1] || 0, v[2] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'translate':\n\t\t\t\t\tmatrix.translate(v[0], v[1] || 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'scale':\n\t\t\t\t\tmatrix.scale(v);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewX':\n\t\t\t\t\tmatrix.skew(v[0], 0);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'skewY':\n\t\t\t\t\tmatrix.skew(0, v[0]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\titem.transform(matrix);\n\t\t}\n\t}\n\n\tfunction applyOpacity(item, value, name) {\n\t\tvar key = name === 'fill-opacity' ? 'getFillColor' : 'getStrokeColor',\n\t\t\tcolor = item[key] && item[key]();\n\t\tif (color)\n\t\t\tcolor.setAlpha(parseFloat(value));\n\t}\n\n\tvar attributes = Base.set(Base.each(SvgStyles, function(entry) {\n\t\tthis[entry.attribute] = function(item, value) {\n\t\t\tif (item[entry.set]) {\n\t\t\t\titem[entry.set](convertValue(value, entry.type, entry.fromSVG));\n\t\t\t\tif (entry.type === 'color') {\n\t\t\t\t\tvar color = item[entry.get]();\n\t\t\t\t\tif (color) {\n\t\t\t\t\t\tif (color._scaleToBounds) {\n\t\t\t\t\t\t\tvar bounds = item.getBounds();\n\t\t\t\t\t\t\tcolor.transform(new Matrix()\n\t\t\t\t\t\t\t\t.translate(bounds.getPoint())\n\t\t\t\t\t\t\t\t.scale(bounds.getSize()));\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}, {}), {\n\t\tid: function(item, value) {\n\t\t\tdefinitions[value] = item;\n\t\t\tif (item.setName)\n\t\t\t\titem.setName(value);\n\t\t},\n\n\t\t'clip-path': function(item, value) {\n\t\t\tvar clip = getDefinition(value);\n\t\t\tif (clip) {\n\t\t\t\tclip = clip.clone();\n\t\t\t\tclip.setClipMask(true);\n\t\t\t\tif (item instanceof Group) {\n\t\t\t\t\titem.insertChild(0, clip);\n\t\t\t\t} else {\n\t\t\t\t\treturn new Group(clip, item);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tgradientTransform: applyTransform,\n\t\ttransform: applyTransform,\n\n\t\t'fill-opacity': applyOpacity,\n\t\t'stroke-opacity': applyOpacity,\n\n\t\tvisibility: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value === 'visible');\n\t\t},\n\n\t\tdisplay: function(item, value) {\n\t\t\tif (item.setVisible)\n\t\t\t\titem.setVisible(value !== null);\n\t\t},\n\n\t\t'stop-color': function(item, value) {\n\t\t\tif (item.setColor)\n\t\t\t\titem.setColor(value);\n\t\t},\n\n\t\t'stop-opacity': function(item, value) {\n\t\t\tif (item._color)\n\t\t\t\titem._color.setAlpha(parseFloat(value));\n\t\t},\n\n\t\toffset: function(item, value) {\n\t\t\tif (item.setOffset) {\n\t\t\t\tvar percent = value.match(/(.*)%$/);\n\t\t\t\titem.setOffset(percent ? percent[1] / 100 : parseFloat(value));\n\t\t\t}\n\t\t},\n\n\t\tviewBox: function(item, value, name, node, styles) {\n\t\t\tvar rect = new Rectangle(convertValue(value, 'array')),\n\t\t\t\tsize = getSize(node, null, null, true),\n\t\t\t\tgroup,\n\t\t\t\tmatrix;\n\t\t\tif (item instanceof Group) {\n\t\t\t\tvar scale = size ? size.divide(rect.getSize()) : 1,\n\t\t\t\tmatrix = new Matrix().scale(scale)\n\t\t\t\t\t\t.translate(rect.getPoint().negate());\n\t\t\t\tgroup = item;\n\t\t\t} else if (item instanceof SymbolDefinition) {\n\t\t\t\tif (size)\n\t\t\t\t\trect.setSize(size);\n\t\t\t\tgroup = item._item;\n\t\t\t}\n\t\t\tif (group) {\n\t\t\t\tif (getAttribute(node, 'overflow', styles) !== 'visible') {\n\t\t\t\t\tvar clip = new Shape.Rectangle(rect);\n\t\t\t\t\tclip.setClipMask(true);\n\t\t\t\t\tgroup.addChild(clip);\n\t\t\t\t}\n\t\t\t\tif (matrix)\n\t\t\t\t\tgroup.transform(matrix);\n\t\t\t}\n\t\t}\n\t});\n\n\tfunction getAttribute(node, name, styles) {\n\t\tvar attr = node.attributes[name],\n\t\t\tvalue = attr && attr.value;\n\t\tif (!value && node.style) {\n\t\t\tvar style = Base.camelize(name);\n\t\t\tvalue = node.style[style];\n\t\t\tif (!value && styles.node[style] !== styles.parent[style])\n\t\t\t\tvalue = styles.node[style];\n\t\t}\n\t\treturn !value ? undefined\n\t\t\t\t: value === 'none' ? null\n\t\t\t\t: value;\n\t}\n\n\tfunction applyAttributes(item, node, isRoot) {\n\t\tvar parent = node.parentNode,\n\t\t\tstyles = {\n\t\t\t\tnode: DomElement.getStyles(node) || {},\n\t\t\t\tparent: !isRoot && !/^defs$/i.test(parent.tagName)\n\t\t\t\t\t\t&& DomElement.getStyles(parent) || {}\n\t\t\t};\n\t\tBase.each(attributes, function(apply, name) {\n\t\t\tvar value = getAttribute(node, name, styles);\n\t\t\titem = value !== undefined\n\t\t\t\t\t&& apply(item, value, name, node, styles) || item;\n\t\t});\n\t\treturn item;\n\t}\n\n\tfunction getDefinition(value) {\n\t\tvar match = value && value.match(/\\((?:[\"'#]*)([^\"')]+)/),\n\t\t\tname = match && match[1],\n\t\t\tres = name && definitions[window\n\t\t\t\t\t? name.replace(window.location.href.split('#')[0] + '#', '')\n\t\t\t\t\t: name];\n\t\tif (res && res._scaleToBounds) {\n\t\t\tres = res.clone();\n\t\t\tres._scaleToBounds = true;\n\t\t}\n\t\treturn res;\n\t}\n\n\tfunction importNode(node, options, isRoot) {\n\t\tvar type = node.nodeName.toLowerCase(),\n\t\t\tisElement = type !== '#document',\n\t\t\tbody = document.body,\n\t\t\tcontainer,\n\t\t\tparent,\n\t\t\tnext;\n\t\tif (isRoot && isElement) {\n\t\t\trootSize = paper.getView().getSize();\n\t\t\trootSize = getSize(node, null, null, true) || rootSize;\n\t\t\tcontainer = SvgElement.create('svg', {\n\t\t\t\tstyle: 'stroke-width: 1px; stroke-miterlimit: 10'\n\t\t\t});\n\t\t\tparent = node.parentNode;\n\t\t\tnext = node.nextSibling;\n\t\t\tcontainer.appendChild(node);\n\t\t\tbody.appendChild(container);\n\t\t}\n\t\tvar settings = paper.settings,\n\t\t\tapplyMatrix = settings.applyMatrix,\n\t\t\tinsertItems = settings.insertItems;\n\t\tsettings.applyMatrix = false;\n\t\tsettings.insertItems = false;\n\t\tvar importer = importers[type],\n\t\t\titem = importer && importer(node, type, options, isRoot) || null;\n\t\tsettings.insertItems = insertItems;\n\t\tsettings.applyMatrix = applyMatrix;\n\t\tif (item) {\n\t\t\tif (isElement && !(item instanceof Group))\n\t\t\t\titem = applyAttributes(item, node, isRoot);\n\t\t\tvar onImport = options.onImport,\n\t\t\t\tdata = isElement && node.getAttribute('data-paper-data');\n\t\t\tif (onImport)\n\t\t\t\titem = onImport(node, item, options) || item;\n\t\t\tif (options.expandShapes && item instanceof Shape) {\n\t\t\t\titem.remove();\n\t\t\t\titem = item.toPath();\n\t\t\t}\n\t\t\tif (data)\n\t\t\t\titem._data = JSON.parse(data);\n\t\t}\n\t\tif (container) {\n\t\t\tbody.removeChild(container);\n\t\t\tif (parent) {\n\t\t\t\tif (next) {\n\t\t\t\t\tparent.insertBefore(node, next);\n\t\t\t\t} else {\n\t\t\t\t\tparent.appendChild(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (isRoot) {\n\t\t\tdefinitions = {};\n\t\t\tif (item && Base.pick(options.applyMatrix, applyMatrix))\n\t\t\t\titem.matrix.apply(true, true);\n\t\t}\n\t\treturn item;\n\t}\n\n\tfunction importSVG(source, options, owner) {\n\t\tif (!source)\n\t\t\treturn null;\n\t\toptions = typeof options === 'function' ? { onLoad: options }\n\t\t\t\t: options || {};\n\t\tvar scope = paper,\n\t\t\titem = null;\n\n\t\tfunction onLoad(svg) {\n\t\t\ttry {\n\t\t\t\tvar node = typeof svg === 'object'\n\t\t\t\t\t? svg\n\t\t\t\t\t: new self.DOMParser().parseFromString(\n\t\t\t\t\t\tsvg.trim(),\n\t\t\t\t\t\t'image/svg+xml'\n\t\t\t\t\t);\n\t\t\t\tif (!node.nodeName) {\n\t\t\t\t\tnode = null;\n\t\t\t\t\tthrow new Error('Unsupported SVG source: ' + source);\n\t\t\t\t}\n\t\t\t\tpaper = scope;\n\t\t\t\titem = importNode(node, options, true);\n\t\t\t\tif (!options || options.insert !== false) {\n\t\t\t\t\towner._insertItem(undefined, item);\n\t\t\t\t}\n\t\t\t\tvar onLoad = options.onLoad;\n\t\t\t\tif (onLoad)\n\t\t\t\t\tonLoad(item, svg);\n\t\t\t} catch (e) {\n\t\t\t\tonError(e);\n\t\t\t}\n\t\t}\n\n\t\tfunction onError(message, status) {\n\t\t\tvar onError = options.onError;\n\t\t\tif (onError) {\n\t\t\t\tonError(message, status);\n\t\t\t} else {\n\t\t\t\tthrow new Error(message);\n\t\t\t}\n\t\t}\n\n\t\tif (typeof source === 'string' && !/^[\\s\\S]*</.test(source)) {\n\t\t\tvar node = document.getElementById(source);\n\t\t\tif (node) {\n\t\t\t\tonLoad(node);\n\t\t\t} else {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: source,\n\t\t\t\t\tasync: true,\n\t\t\t\t\tonLoad: onLoad,\n\t\t\t\t\tonError: onError\n\t\t\t\t});\n\t\t\t}\n\t\t} else if (typeof File !== 'undefined' && source instanceof File) {\n\t\t\tvar reader = new FileReader();\n\t\t\treader.onload = function() {\n\t\t\t\tonLoad(reader.result);\n\t\t\t};\n\t\t\treader.onerror = function() {\n\t\t\t\tonError(reader.error);\n\t\t\t};\n\t\t\treturn reader.readAsText(source);\n\t\t} else {\n\t\t\tonLoad(source);\n\t\t}\n\n\t\treturn item;\n\t}\n\n\tItem.inject({\n\t\timportSVG: function(node, options) {\n\t\t\treturn importSVG(node, options, this);\n\t\t}\n\t});\n\n\tProject.inject({\n\t\timportSVG: function(node, options) {\n\t\t\tthis.activate();\n\t\t\treturn importSVG(node, options, this);\n\t\t}\n\t});\n};\n\nBase.exports.PaperScript = function() {\n\tvar global = this,\n\t\tacorn = global.acorn;\n\tif (!acorn && typeof require !== 'undefined') {\n\t\ttry { acorn = require('acorn'); } catch(e) {}\n\t}\n\tif (!acorn) {\n\t\tvar exports, module;\n\t\tacorn = exports = module = {};\n\n(function(root, mod) {\n if (typeof exports == \"object\" && typeof module == \"object\") return mod(exports);\n if (typeof define == \"function\" && define.amd) return define([\"exports\"], mod);\n mod(root.acorn || (root.acorn = {}));\n})(this, function(exports) {\n \"use strict\";\n\n exports.version = \"0.5.0\";\n\n var options, input, inputLen, sourceFile;\n\n exports.parse = function(inpt, opts) {\n\tinput = String(inpt); inputLen = input.length;\n\tsetOptions(opts);\n\tinitTokenState();\n\treturn parseTopLevel(options.program);\n };\n\n var defaultOptions = exports.defaultOptions = {\n\tecmaVersion: 5,\n\tstrictSemicolons: false,\n\tallowTrailingCommas: true,\n\tforbidReserved: false,\n\tallowReturnOutsideFunction: false,\n\tlocations: false,\n\tonComment: null,\n\tranges: false,\n\tprogram: null,\n\tsourceFile: null,\n\tdirectSourceFile: null\n };\n\n function setOptions(opts) {\n\toptions = opts || {};\n\tfor (var opt in defaultOptions) if (!Object.prototype.hasOwnProperty.call(options, opt))\n\t options[opt] = defaultOptions[opt];\n\tsourceFile = options.sourceFile || null;\n }\n\n var getLineInfo = exports.getLineInfo = function(input, offset) {\n\tfor (var line = 1, cur = 0;;) {\n\t lineBreak.lastIndex = cur;\n\t var match = lineBreak.exec(input);\n\t if (match && match.index < offset) {\n\t\t++line;\n\t\tcur = match.index + match[0].length;\n\t } else break;\n\t}\n\treturn {line: line, column: offset - cur};\n };\n\n exports.tokenize = function(inpt, opts) {\n\tinput = String(inpt); inputLen = input.length;\n\tsetOptions(opts);\n\tinitTokenState();\n\n\tvar t = {};\n\tfunction getToken(forceRegexp) {\n\t lastEnd = tokEnd;\n\t readToken(forceRegexp);\n\t t.start = tokStart; t.end = tokEnd;\n\t t.startLoc = tokStartLoc; t.endLoc = tokEndLoc;\n\t t.type = tokType; t.value = tokVal;\n\t return t;\n\t}\n\tgetToken.jumpTo = function(pos, reAllowed) {\n\t tokPos = pos;\n\t if (options.locations) {\n\t\ttokCurLine = 1;\n\t\ttokLineStart = lineBreak.lastIndex = 0;\n\t\tvar match;\n\t\twhile ((match = lineBreak.exec(input)) && match.index < pos) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = match.index + match[0].length;\n\t\t}\n\t }\n\t tokRegexpAllowed = reAllowed;\n\t skipSpace();\n\t};\n\treturn getToken;\n };\n\n var tokPos;\n\n var tokStart, tokEnd;\n\n var tokStartLoc, tokEndLoc;\n\n var tokType, tokVal;\n\n var tokRegexpAllowed;\n\n var tokCurLine, tokLineStart;\n\n var lastStart, lastEnd, lastEndLoc;\n\n var inFunction, labels, strict;\n\n function raise(pos, message) {\n\tvar loc = getLineInfo(input, pos);\n\tmessage += \" (\" + loc.line + \":\" + loc.column + \")\";\n\tvar err = new SyntaxError(message);\n\terr.pos = pos; err.loc = loc; err.raisedAt = tokPos;\n\tthrow err;\n }\n\n var empty = [];\n\n var _num = {type: \"num\"}, _regexp = {type: \"regexp\"}, _string = {type: \"string\"};\n var _name = {type: \"name\"}, _eof = {type: \"eof\"};\n\n var _break = {keyword: \"break\"}, _case = {keyword: \"case\", beforeExpr: true}, _catch = {keyword: \"catch\"};\n var _continue = {keyword: \"continue\"}, _debugger = {keyword: \"debugger\"}, _default = {keyword: \"default\"};\n var _do = {keyword: \"do\", isLoop: true}, _else = {keyword: \"else\", beforeExpr: true};\n var _finally = {keyword: \"finally\"}, _for = {keyword: \"for\", isLoop: true}, _function = {keyword: \"function\"};\n var _if = {keyword: \"if\"}, _return = {keyword: \"return\", beforeExpr: true}, _switch = {keyword: \"switch\"};\n var _throw = {keyword: \"throw\", beforeExpr: true}, _try = {keyword: \"try\"}, _var = {keyword: \"var\"};\n var _while = {keyword: \"while\", isLoop: true}, _with = {keyword: \"with\"}, _new = {keyword: \"new\", beforeExpr: true};\n var _this = {keyword: \"this\"};\n\n var _null = {keyword: \"null\", atomValue: null}, _true = {keyword: \"true\", atomValue: true};\n var _false = {keyword: \"false\", atomValue: false};\n\n var _in = {keyword: \"in\", binop: 7, beforeExpr: true};\n\n var keywordTypes = {\"break\": _break, \"case\": _case, \"catch\": _catch,\n\t\t\t\t\t \"continue\": _continue, \"debugger\": _debugger, \"default\": _default,\n\t\t\t\t\t \"do\": _do, \"else\": _else, \"finally\": _finally, \"for\": _for,\n\t\t\t\t\t \"function\": _function, \"if\": _if, \"return\": _return, \"switch\": _switch,\n\t\t\t\t\t \"throw\": _throw, \"try\": _try, \"var\": _var, \"while\": _while, \"with\": _with,\n\t\t\t\t\t \"null\": _null, \"true\": _true, \"false\": _false, \"new\": _new, \"in\": _in,\n\t\t\t\t\t \"instanceof\": {keyword: \"instanceof\", binop: 7, beforeExpr: true}, \"this\": _this,\n\t\t\t\t\t \"typeof\": {keyword: \"typeof\", prefix: true, beforeExpr: true},\n\t\t\t\t\t \"void\": {keyword: \"void\", prefix: true, beforeExpr: true},\n\t\t\t\t\t \"delete\": {keyword: \"delete\", prefix: true, beforeExpr: true}};\n\n var _bracketL = {type: \"[\", beforeExpr: true}, _bracketR = {type: \"]\"}, _braceL = {type: \"{\", beforeExpr: true};\n var _braceR = {type: \"}\"}, _parenL = {type: \"(\", beforeExpr: true}, _parenR = {type: \")\"};\n var _comma = {type: \",\", beforeExpr: true}, _semi = {type: \";\", beforeExpr: true};\n var _colon = {type: \":\", beforeExpr: true}, _dot = {type: \".\"}, _question = {type: \"?\", beforeExpr: true};\n\n var _slash = {binop: 10, beforeExpr: true}, _eq = {isAssign: true, beforeExpr: true};\n var _assign = {isAssign: true, beforeExpr: true};\n var _incDec = {postfix: true, prefix: true, isUpdate: true}, _prefix = {prefix: true, beforeExpr: true};\n var _logicalOR = {binop: 1, beforeExpr: true};\n var _logicalAND = {binop: 2, beforeExpr: true};\n var _bitwiseOR = {binop: 3, beforeExpr: true};\n var _bitwiseXOR = {binop: 4, beforeExpr: true};\n var _bitwiseAND = {binop: 5, beforeExpr: true};\n var _equality = {binop: 6, beforeExpr: true};\n var _relational = {binop: 7, beforeExpr: true};\n var _bitShift = {binop: 8, beforeExpr: true};\n var _plusMin = {binop: 9, prefix: true, beforeExpr: true};\n var _multiplyModulo = {binop: 10, beforeExpr: true};\n\n exports.tokTypes = {bracketL: _bracketL, bracketR: _bracketR, braceL: _braceL, braceR: _braceR,\n\t\t\t\t\t parenL: _parenL, parenR: _parenR, comma: _comma, semi: _semi, colon: _colon,\n\t\t\t\t\t dot: _dot, question: _question, slash: _slash, eq: _eq, name: _name, eof: _eof,\n\t\t\t\t\t num: _num, regexp: _regexp, string: _string};\n for (var kw in keywordTypes) exports.tokTypes[\"_\" + kw] = keywordTypes[kw];\n\n function makePredicate(words) {\n\twords = words.split(\" \");\n\tvar f = \"\", cats = [];\n\tout: for (var i = 0; i < words.length; ++i) {\n\t for (var j = 0; j < cats.length; ++j)\n\t\tif (cats[j][0].length == words[i].length) {\n\t\t cats[j].push(words[i]);\n\t\t continue out;\n\t\t}\n\t cats.push([words[i]]);\n\t}\n\tfunction compareTo(arr) {\n\t if (arr.length == 1) return f += \"return str === \" + JSON.stringify(arr[0]) + \";\";\n\t f += \"switch(str){\";\n\t for (var i = 0; i < arr.length; ++i) f += \"case \" + JSON.stringify(arr[i]) + \":\";\n\t f += \"return true}return false;\";\n\t}\n\n\tif (cats.length > 3) {\n\t cats.sort(function(a, b) {return b.length - a.length;});\n\t f += \"switch(str.length){\";\n\t for (var i = 0; i < cats.length; ++i) {\n\t\tvar cat = cats[i];\n\t\tf += \"case \" + cat[0].length + \":\";\n\t\tcompareTo(cat);\n\t }\n\t f += \"}\";\n\n\t} else {\n\t compareTo(words);\n\t}\n\treturn new Function(\"str\", f);\n }\n\n var isReservedWord3 = makePredicate(\"abstract boolean byte char class double enum export extends final float goto implements import int interface long native package private protected public short static super synchronized throws transient volatile\");\n\n var isReservedWord5 = makePredicate(\"class enum extends super const export import\");\n\n var isStrictReservedWord = makePredicate(\"implements interface let package private protected public static yield\");\n\n var isStrictBadIdWord = makePredicate(\"eval arguments\");\n\n var isKeyword = makePredicate(\"break case catch continue debugger default do else finally for function if return switch throw try var while with null true false instanceof typeof void delete new in this\");\n\n var nonASCIIwhitespace = /[\\u1680\\u180e\\u2000-\\u200a\\u202f\\u205f\\u3000\\ufeff]/;\n var nonASCIIidentifierStartChars = \"\\xaa\\xb5\\xba\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\u02c1\\u02c6-\\u02d1\\u02e0-\\u02e4\\u02ec\\u02ee\\u0370-\\u0374\\u0376\\u0377\\u037a-\\u037d\\u0386\\u0388-\\u038a\\u038c\\u038e-\\u03a1\\u03a3-\\u03f5\\u03f7-\\u0481\\u048a-\\u0527\\u0531-\\u0556\\u0559\\u0561-\\u0587\\u05d0-\\u05ea\\u05f0-\\u05f2\\u0620-\\u064a\\u066e\\u066f\\u0671-\\u06d3\\u06d5\\u06e5\\u06e6\\u06ee\\u06ef\\u06fa-\\u06fc\\u06ff\\u0710\\u0712-\\u072f\\u074d-\\u07a5\\u07b1\\u07ca-\\u07ea\\u07f4\\u07f5\\u07fa\\u0800-\\u0815\\u081a\\u0824\\u0828\\u0840-\\u0858\\u08a0\\u08a2-\\u08ac\\u0904-\\u0939\\u093d\\u0950\\u0958-\\u0961\\u0971-\\u0977\\u0979-\\u097f\\u0985-\\u098c\\u098f\\u0990\\u0993-\\u09a8\\u09aa-\\u09b0\\u09b2\\u09b6-\\u09b9\\u09bd\\u09ce\\u09dc\\u09dd\\u09df-\\u09e1\\u09f0\\u09f1\\u0a05-\\u0a0a\\u0a0f\\u0a10\\u0a13-\\u0a28\\u0a2a-\\u0a30\\u0a32\\u0a33\\u0a35\\u0a36\\u0a38\\u0a39\\u0a59-\\u0a5c\\u0a5e\\u0a72-\\u0a74\\u0a85-\\u0a8d\\u0a8f-\\u0a91\\u0a93-\\u0aa8\\u0aaa-\\u0ab0\\u0ab2\\u0ab3\\u0ab5-\\u0ab9\\u0abd\\u0ad0\\u0ae0\\u0ae1\\u0b05-\\u0b0c\\u0b0f\\u0b10\\u0b13-\\u0b28\\u0b2a-\\u0b30\\u0b32\\u0b33\\u0b35-\\u0b39\\u0b3d\\u0b5c\\u0b5d\\u0b5f-\\u0b61\\u0b71\\u0b83\\u0b85-\\u0b8a\\u0b8e-\\u0b90\\u0b92-\\u0b95\\u0b99\\u0b9a\\u0b9c\\u0b9e\\u0b9f\\u0ba3\\u0ba4\\u0ba8-\\u0baa\\u0bae-\\u0bb9\\u0bd0\\u0c05-\\u0c0c\\u0c0e-\\u0c10\\u0c12-\\u0c28\\u0c2a-\\u0c33\\u0c35-\\u0c39\\u0c3d\\u0c58\\u0c59\\u0c60\\u0c61\\u0c85-\\u0c8c\\u0c8e-\\u0c90\\u0c92-\\u0ca8\\u0caa-\\u0cb3\\u0cb5-\\u0cb9\\u0cbd\\u0cde\\u0ce0\\u0ce1\\u0cf1\\u0cf2\\u0d05-\\u0d0c\\u0d0e-\\u0d10\\u0d12-\\u0d3a\\u0d3d\\u0d4e\\u0d60\\u0d61\\u0d7a-\\u0d7f\\u0d85-\\u0d96\\u0d9a-\\u0db1\\u0db3-\\u0dbb\\u0dbd\\u0dc0-\\u0dc6\\u0e01-\\u0e30\\u0e32\\u0e33\\u0e40-\\u0e46\\u0e81\\u0e82\\u0e84\\u0e87\\u0e88\\u0e8a\\u0e8d\\u0e94-\\u0e97\\u0e99-\\u0e9f\\u0ea1-\\u0ea3\\u0ea5\\u0ea7\\u0eaa\\u0eab\\u0ead-\\u0eb0\\u0eb2\\u0eb3\\u0ebd\\u0ec0-\\u0ec4\\u0ec6\\u0edc-\\u0edf\\u0f00\\u0f40-\\u0f47\\u0f49-\\u0f6c\\u0f88-\\u0f8c\\u1000-\\u102a\\u103f\\u1050-\\u1055\\u105a-\\u105d\\u1061\\u1065\\u1066\\u106e-\\u1070\\u1075-\\u1081\\u108e\\u10a0-\\u10c5\\u10c7\\u10cd\\u10d0-\\u10fa\\u10fc-\\u1248\\u124a-\\u124d\\u1250-\\u1256\\u1258\\u125a-\\u125d\\u1260-\\u1288\\u128a-\\u128d\\u1290-\\u12b0\\u12b2-\\u12b5\\u12b8-\\u12be\\u12c0\\u12c2-\\u12c5\\u12c8-\\u12d6\\u12d8-\\u1310\\u1312-\\u1315\\u1318-\\u135a\\u1380-\\u138f\\u13a0-\\u13f4\\u1401-\\u166c\\u166f-\\u167f\\u1681-\\u169a\\u16a0-\\u16ea\\u16ee-\\u16f0\\u1700-\\u170c\\u170e-\\u1711\\u1720-\\u1731\\u1740-\\u1751\\u1760-\\u176c\\u176e-\\u1770\\u1780-\\u17b3\\u17d7\\u17dc\\u1820-\\u1877\\u1880-\\u18a8\\u18aa\\u18b0-\\u18f5\\u1900-\\u191c\\u1950-\\u196d\\u1970-\\u1974\\u1980-\\u19ab\\u19c1-\\u19c7\\u1a00-\\u1a16\\u1a20-\\u1a54\\u1aa7\\u1b05-\\u1b33\\u1b45-\\u1b4b\\u1b83-\\u1ba0\\u1bae\\u1baf\\u1bba-\\u1be5\\u1c00-\\u1c23\\u1c4d-\\u1c4f\\u1c5a-\\u1c7d\\u1ce9-\\u1cec\\u1cee-\\u1cf1\\u1cf5\\u1cf6\\u1d00-\\u1dbf\\u1e00-\\u1f15\\u1f18-\\u1f1d\\u1f20-\\u1f45\\u1f48-\\u1f4d\\u1f50-\\u1f57\\u1f59\\u1f5b\\u1f5d\\u1f5f-\\u1f7d\\u1f80-\\u1fb4\\u1fb6-\\u1fbc\\u1fbe\\u1fc2-\\u1fc4\\u1fc6-\\u1fcc\\u1fd0-\\u1fd3\\u1fd6-\\u1fdb\\u1fe0-\\u1fec\\u1ff2-\\u1ff4\\u1ff6-\\u1ffc\\u2071\\u207f\\u2090-\\u209c\\u2102\\u2107\\u210a-\\u2113\\u2115\\u2119-\\u211d\\u2124\\u2126\\u2128\\u212a-\\u212d\\u212f-\\u2139\\u213c-\\u213f\\u2145-\\u2149\\u214e\\u2160-\\u2188\\u2c00-\\u2c2e\\u2c30-\\u2c5e\\u2c60-\\u2ce4\\u2ceb-\\u2cee\\u2cf2\\u2cf3\\u2d00-\\u2d25\\u2d27\\u2d2d\\u2d30-\\u2d67\\u2d6f\\u2d80-\\u2d96\\u2da0-\\u2da6\\u2da8-\\u2dae\\u2db0-\\u2db6\\u2db8-\\u2dbe\\u2dc0-\\u2dc6\\u2dc8-\\u2dce\\u2dd0-\\u2dd6\\u2dd8-\\u2dde\\u2e2f\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303c\\u3041-\\u3096\\u309d-\\u309f\\u30a1-\\u30fa\\u30fc-\\u30ff\\u3105-\\u312d\\u3131-\\u318e\\u31a0-\\u31ba\\u31f0-\\u31ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\ua000-\\ua48c\\ua4d0-\\ua4fd\\ua500-\\ua60c\\ua610-\\ua61f\\ua62a\\ua62b\\ua640-\\ua66e\\ua67f-\\ua697\\ua6a0-\\ua6ef\\ua717-\\ua71f\\ua722-\\ua788\\ua78b-\\ua78e\\ua790-\\ua793\\ua7a0-\\ua7aa\\ua7f8-\\ua801\\ua803-\\ua805\\ua807-\\ua80a\\ua80c-\\ua822\\ua840-\\ua873\\ua882-\\ua8b3\\ua8f2-\\ua8f7\\ua8fb\\ua90a-\\ua925\\ua930-\\ua946\\ua960-\\ua97c\\ua984-\\ua9b2\\ua9cf\\uaa00-\\uaa28\\uaa40-\\uaa42\\uaa44-\\uaa4b\\uaa60-\\uaa76\\uaa7a\\uaa80-\\uaaaf\\uaab1\\uaab5\\uaab6\\uaab9-\\uaabd\\uaac0\\uaac2\\uaadb-\\uaadd\\uaae0-\\uaaea\\uaaf2-\\uaaf4\\uab01-\\uab06\\uab09-\\uab0e\\uab11-\\uab16\\uab20-\\uab26\\uab28-\\uab2e\\uabc0-\\uabe2\\uac00-\\ud7a3\\ud7b0-\\ud7c6\\ud7cb-\\ud7fb\\uf900-\\ufa6d\\ufa70-\\ufad9\\ufb00-\\ufb06\\ufb13-\\ufb17\\ufb1d\\ufb1f-\\ufb28\\ufb2a-\\ufb36\\ufb38-\\ufb3c\\ufb3e\\ufb40\\ufb41\\ufb43\\ufb44\\ufb46-\\ufbb1\\ufbd3-\\ufd3d\\ufd50-\\ufd8f\\ufd92-\\ufdc7\\ufdf0-\\ufdfb\\ufe70-\\ufe74\\ufe76-\\ufefc\\uff21-\\uff3a\\uff41-\\uff5a\\uff66-\\uffbe\\uffc2-\\uffc7\\uffca-\\uffcf\\uffd2-\\uffd7\\uffda-\\uffdc\";\n var nonASCIIidentifierChars = \"\\u0300-\\u036f\\u0483-\\u0487\\u0591-\\u05bd\\u05bf\\u05c1\\u05c2\\u05c4\\u05c5\\u05c7\\u0610-\\u061a\\u0620-\\u0649\\u0672-\\u06d3\\u06e7-\\u06e8\\u06fb-\\u06fc\\u0730-\\u074a\\u0800-\\u0814\\u081b-\\u0823\\u0825-\\u0827\\u0829-\\u082d\\u0840-\\u0857\\u08e4-\\u08fe\\u0900-\\u0903\\u093a-\\u093c\\u093e-\\u094f\\u0951-\\u0957\\u0962-\\u0963\\u0966-\\u096f\\u0981-\\u0983\\u09bc\\u09be-\\u09c4\\u09c7\\u09c8\\u09d7\\u09df-\\u09e0\\u0a01-\\u0a03\\u0a3c\\u0a3e-\\u0a42\\u0a47\\u0a48\\u0a4b-\\u0a4d\\u0a51\\u0a66-\\u0a71\\u0a75\\u0a81-\\u0a83\\u0abc\\u0abe-\\u0ac5\\u0ac7-\\u0ac9\\u0acb-\\u0acd\\u0ae2-\\u0ae3\\u0ae6-\\u0aef\\u0b01-\\u0b03\\u0b3c\\u0b3e-\\u0b44\\u0b47\\u0b48\\u0b4b-\\u0b4d\\u0b56\\u0b57\\u0b5f-\\u0b60\\u0b66-\\u0b6f\\u0b82\\u0bbe-\\u0bc2\\u0bc6-\\u0bc8\\u0bca-\\u0bcd\\u0bd7\\u0be6-\\u0bef\\u0c01-\\u0c03\\u0c46-\\u0c48\\u0c4a-\\u0c4d\\u0c55\\u0c56\\u0c62-\\u0c63\\u0c66-\\u0c6f\\u0c82\\u0c83\\u0cbc\\u0cbe-\\u0cc4\\u0cc6-\\u0cc8\\u0cca-\\u0ccd\\u0cd5\\u0cd6\\u0ce2-\\u0ce3\\u0ce6-\\u0cef\\u0d02\\u0d03\\u0d46-\\u0d48\\u0d57\\u0d62-\\u0d63\\u0d66-\\u0d6f\\u0d82\\u0d83\\u0dca\\u0dcf-\\u0dd4\\u0dd6\\u0dd8-\\u0ddf\\u0df2\\u0df3\\u0e34-\\u0e3a\\u0e40-\\u0e45\\u0e50-\\u0e59\\u0eb4-\\u0eb9\\u0ec8-\\u0ecd\\u0ed0-\\u0ed9\\u0f18\\u0f19\\u0f20-\\u0f29\\u0f35\\u0f37\\u0f39\\u0f41-\\u0f47\\u0f71-\\u0f84\\u0f86-\\u0f87\\u0f8d-\\u0f97\\u0f99-\\u0fbc\\u0fc6\\u1000-\\u1029\\u1040-\\u1049\\u1067-\\u106d\\u1071-\\u1074\\u1082-\\u108d\\u108f-\\u109d\\u135d-\\u135f\\u170e-\\u1710\\u1720-\\u1730\\u1740-\\u1750\\u1772\\u1773\\u1780-\\u17b2\\u17dd\\u17e0-\\u17e9\\u180b-\\u180d\\u1810-\\u1819\\u1920-\\u192b\\u1930-\\u193b\\u1951-\\u196d\\u19b0-\\u19c0\\u19c8-\\u19c9\\u19d0-\\u19d9\\u1a00-\\u1a15\\u1a20-\\u1a53\\u1a60-\\u1a7c\\u1a7f-\\u1a89\\u1a90-\\u1a99\\u1b46-\\u1b4b\\u1b50-\\u1b59\\u1b6b-\\u1b73\\u1bb0-\\u1bb9\\u1be6-\\u1bf3\\u1c00-\\u1c22\\u1c40-\\u1c49\\u1c5b-\\u1c7d\\u1cd0-\\u1cd2\\u1d00-\\u1dbe\\u1e01-\\u1f15\\u200c\\u200d\\u203f\\u2040\\u2054\\u20d0-\\u20dc\\u20e1\\u20e5-\\u20f0\\u2d81-\\u2d96\\u2de0-\\u2dff\\u3021-\\u3028\\u3099\\u309a\\ua640-\\ua66d\\ua674-\\ua67d\\ua69f\\ua6f0-\\ua6f1\\ua7f8-\\ua800\\ua806\\ua80b\\ua823-\\ua827\\ua880-\\ua881\\ua8b4-\\ua8c4\\ua8d0-\\ua8d9\\ua8f3-\\ua8f7\\ua900-\\ua909\\ua926-\\ua92d\\ua930-\\ua945\\ua980-\\ua983\\ua9b3-\\ua9c0\\uaa00-\\uaa27\\uaa40-\\uaa41\\uaa4c-\\uaa4d\\uaa50-\\uaa59\\uaa7b\\uaae0-\\uaae9\\uaaf2-\\uaaf3\\uabc0-\\uabe1\\uabec\\uabed\\uabf0-\\uabf9\\ufb20-\\ufb28\\ufe00-\\ufe0f\\ufe20-\\ufe26\\ufe33\\ufe34\\ufe4d-\\ufe4f\\uff10-\\uff19\\uff3f\";\n var nonASCIIidentifierStart = new RegExp(\"[\" + nonASCIIidentifierStartChars + \"]\");\n var nonASCIIidentifier = new RegExp(\"[\" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + \"]\");\n\n var newline = /[\\n\\r\\u2028\\u2029]/;\n\n var lineBreak = /\\r\\n|[\\n\\r\\u2028\\u2029]/g;\n\n var isIdentifierStart = exports.isIdentifierStart = function(code) {\n\tif (code < 65) return code === 36;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));\n };\n\n var isIdentifierChar = exports.isIdentifierChar = function(code) {\n\tif (code < 48) return code === 36;\n\tif (code < 58) return true;\n\tif (code < 65) return false;\n\tif (code < 91) return true;\n\tif (code < 97) return code === 95;\n\tif (code < 123)return true;\n\treturn code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));\n };\n\n function line_loc_t() {\n\tthis.line = tokCurLine;\n\tthis.column = tokPos - tokLineStart;\n }\n\n function initTokenState() {\n\ttokCurLine = 1;\n\ttokPos = tokLineStart = 0;\n\ttokRegexpAllowed = true;\n\tskipSpace();\n }\n\n function finishToken(type, val) {\n\ttokEnd = tokPos;\n\tif (options.locations) tokEndLoc = new line_loc_t;\n\ttokType = type;\n\tskipSpace();\n\ttokVal = val;\n\ttokRegexpAllowed = type.beforeExpr;\n }\n\n function skipBlockComment() {\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar start = tokPos, end = input.indexOf(\"*/\", tokPos += 2);\n\tif (end === -1) raise(tokPos - 2, \"Unterminated comment\");\n\ttokPos = end + 2;\n\tif (options.locations) {\n\t lineBreak.lastIndex = start;\n\t var match;\n\t while ((match = lineBreak.exec(input)) && match.index < tokPos) {\n\t\t++tokCurLine;\n\t\ttokLineStart = match.index + match[0].length;\n\t }\n\t}\n\tif (options.onComment)\n\t options.onComment(true, input.slice(start + 2, end), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipLineComment() {\n\tvar start = tokPos;\n\tvar startLoc = options.onComment && options.locations && new line_loc_t;\n\tvar ch = input.charCodeAt(tokPos+=2);\n\twhile (tokPos < inputLen && ch !== 10 && ch !== 13 && ch !== 8232 && ch !== 8233) {\n\t ++tokPos;\n\t ch = input.charCodeAt(tokPos);\n\t}\n\tif (options.onComment)\n\t options.onComment(false, input.slice(start + 2, tokPos), start, tokPos,\n\t\t\t\t\t\tstartLoc, options.locations && new line_loc_t);\n }\n\n function skipSpace() {\n\twhile (tokPos < inputLen) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === 32) {\n\t\t++tokPos;\n\t } else if (ch === 13) {\n\t\t++tokPos;\n\t\tvar next = input.charCodeAt(tokPos);\n\t\tif (next === 10) {\n\t\t ++tokPos;\n\t\t}\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch === 10 || ch === 8232 || ch === 8233) {\n\t\t++tokPos;\n\t\tif (options.locations) {\n\t\t ++tokCurLine;\n\t\t tokLineStart = tokPos;\n\t\t}\n\t } else if (ch > 8 && ch < 14) {\n\t\t++tokPos;\n\t } else if (ch === 47) {\n\t\tvar next = input.charCodeAt(tokPos + 1);\n\t\tif (next === 42) {\n\t\t skipBlockComment();\n\t\t} else if (next === 47) {\n\t\t skipLineComment();\n\t\t} else break;\n\t } else if (ch === 160) {\n\t\t++tokPos;\n\t } else if (ch >= 5760 && nonASCIIwhitespace.test(String.fromCharCode(ch))) {\n\t\t++tokPos;\n\t } else {\n\t\tbreak;\n\t }\n\t}\n }\n\n function readToken_dot() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next >= 48 && next <= 57) return readNumber(true);\n\t++tokPos;\n\treturn finishToken(_dot);\n }\n\n function readToken_slash() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (tokRegexpAllowed) {++tokPos; return readRegexp();}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_slash, 1);\n }\n\n function readToken_mult_modulo() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_multiplyModulo, 1);\n }\n\n function readToken_pipe_amp(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) return finishOp(code === 124 ? _logicalOR : _logicalAND, 2);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(code === 124 ? _bitwiseOR : _bitwiseAND, 1);\n }\n\n function readToken_caret() {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_bitwiseXOR, 1);\n }\n\n function readToken_plus_min(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === code) {\n\t if (next == 45 && input.charCodeAt(tokPos + 2) == 62 &&\n\t\t newline.test(input.slice(lastEnd, tokPos))) {\n\t\ttokPos += 3;\n\t\tskipLineComment();\n\t\tskipSpace();\n\t\treturn readToken();\n\t }\n\t return finishOp(_incDec, 2);\n\t}\n\tif (next === 61) return finishOp(_assign, 2);\n\treturn finishOp(_plusMin, 1);\n }\n\n function readToken_lt_gt(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tvar size = 1;\n\tif (next === code) {\n\t size = code === 62 && input.charCodeAt(tokPos + 2) === 62 ? 3 : 2;\n\t if (input.charCodeAt(tokPos + size) === 61) return finishOp(_assign, size + 1);\n\t return finishOp(_bitShift, size);\n\t}\n\tif (next == 33 && code == 60 && input.charCodeAt(tokPos + 2) == 45 &&\n\t\tinput.charCodeAt(tokPos + 3) == 45) {\n\t tokPos += 4;\n\t skipLineComment();\n\t skipSpace();\n\t return readToken();\n\t}\n\tif (next === 61)\n\t size = input.charCodeAt(tokPos + 2) === 61 ? 3 : 2;\n\treturn finishOp(_relational, size);\n }\n\n function readToken_eq_excl(code) {\n\tvar next = input.charCodeAt(tokPos + 1);\n\tif (next === 61) return finishOp(_equality, input.charCodeAt(tokPos + 2) === 61 ? 3 : 2);\n\treturn finishOp(code === 61 ? _eq : _prefix, 1);\n }\n\n function getTokenFromCode(code) {\n\tswitch(code) {\n\tcase 46:\n\t return readToken_dot();\n\n\tcase 40: ++tokPos; return finishToken(_parenL);\n\tcase 41: ++tokPos; return finishToken(_parenR);\n\tcase 59: ++tokPos; return finishToken(_semi);\n\tcase 44: ++tokPos; return finishToken(_comma);\n\tcase 91: ++tokPos; return finishToken(_bracketL);\n\tcase 93: ++tokPos; return finishToken(_bracketR);\n\tcase 123: ++tokPos; return finishToken(_braceL);\n\tcase 125: ++tokPos; return finishToken(_braceR);\n\tcase 58: ++tokPos; return finishToken(_colon);\n\tcase 63: ++tokPos; return finishToken(_question);\n\n\tcase 48:\n\t var next = input.charCodeAt(tokPos + 1);\n\t if (next === 120 || next === 88) return readHexNumber();\n\tcase 49: case 50: case 51: case 52: case 53: case 54: case 55: case 56: case 57:\n\t return readNumber(false);\n\n\tcase 34: case 39:\n\t return readString(code);\n\n\tcase 47:\n\t return readToken_slash(code);\n\n\tcase 37: case 42:\n\t return readToken_mult_modulo();\n\n\tcase 124: case 38:\n\t return readToken_pipe_amp(code);\n\n\tcase 94:\n\t return readToken_caret();\n\n\tcase 43: case 45:\n\t return readToken_plus_min(code);\n\n\tcase 60: case 62:\n\t return readToken_lt_gt(code);\n\n\tcase 61: case 33:\n\t return readToken_eq_excl(code);\n\n\tcase 126:\n\t return finishOp(_prefix, 1);\n\t}\n\n\treturn false;\n }\n\n function readToken(forceRegexp) {\n\tif (!forceRegexp) tokStart = tokPos;\n\telse tokPos = tokStart + 1;\n\tif (options.locations) tokStartLoc = new line_loc_t;\n\tif (forceRegexp) return readRegexp();\n\tif (tokPos >= inputLen) return finishToken(_eof);\n\n\tvar code = input.charCodeAt(tokPos);\n\tif (isIdentifierStart(code) || code === 92 ) return readWord();\n\n\tvar tok = getTokenFromCode(code);\n\n\tif (tok === false) {\n\t var ch = String.fromCharCode(code);\n\t if (ch === \"\\\\\" || nonASCIIidentifierStart.test(ch)) return readWord();\n\t raise(tokPos, \"Unexpected character '\" + ch + \"'\");\n\t}\n\treturn tok;\n }\n\n function finishOp(type, size) {\n\tvar str = input.slice(tokPos, tokPos + size);\n\ttokPos += size;\n\tfinishToken(type, str);\n }\n\n function readRegexp() {\n\tvar content = \"\", escaped, inClass, start = tokPos;\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(start, \"Unterminated regular expression\");\n\t var ch = input.charAt(tokPos);\n\t if (newline.test(ch)) raise(start, \"Unterminated regular expression\");\n\t if (!escaped) {\n\t\tif (ch === \"[\") inClass = true;\n\t\telse if (ch === \"]\" && inClass) inClass = false;\n\t\telse if (ch === \"/\" && !inClass) break;\n\t\tescaped = ch === \"\\\\\";\n\t } else escaped = false;\n\t ++tokPos;\n\t}\n\tvar content = input.slice(start, tokPos);\n\t++tokPos;\n\tvar mods = readWord1();\n\tif (mods && !/^[gmsiy]*$/.test(mods)) raise(start, \"Invalid regexp flag\");\n\ttry {\n\t var value = new RegExp(content, mods);\n\t} catch (e) {\n\t if (e instanceof SyntaxError) raise(start, e.message);\n\t raise(e);\n\t}\n\treturn finishToken(_regexp, value);\n }\n\n function readInt(radix, len) {\n\tvar start = tokPos, total = 0;\n\tfor (var i = 0, e = len == null ? Infinity : len; i < e; ++i) {\n\t var code = input.charCodeAt(tokPos), val;\n\t if (code >= 97) val = code - 97 + 10;\n\t else if (code >= 65) val = code - 65 + 10;\n\t else if (code >= 48 && code <= 57) val = code - 48;\n\t else val = Infinity;\n\t if (val >= radix) break;\n\t ++tokPos;\n\t total = total * radix + val;\n\t}\n\tif (tokPos === start || len != null && tokPos - start !== len) return null;\n\n\treturn total;\n }\n\n function readHexNumber() {\n\ttokPos += 2;\n\tvar val = readInt(16);\n\tif (val == null) raise(tokStart + 2, \"Expected hexadecimal number\");\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\treturn finishToken(_num, val);\n }\n\n function readNumber(startsWithDot) {\n\tvar start = tokPos, isFloat = false, octal = input.charCodeAt(tokPos) === 48;\n\tif (!startsWithDot && readInt(10) === null) raise(start, \"Invalid number\");\n\tif (input.charCodeAt(tokPos) === 46) {\n\t ++tokPos;\n\t readInt(10);\n\t isFloat = true;\n\t}\n\tvar next = input.charCodeAt(tokPos);\n\tif (next === 69 || next === 101) {\n\t next = input.charCodeAt(++tokPos);\n\t if (next === 43 || next === 45) ++tokPos;\n\t if (readInt(10) === null) raise(start, \"Invalid number\");\n\t isFloat = true;\n\t}\n\tif (isIdentifierStart(input.charCodeAt(tokPos))) raise(tokPos, \"Identifier directly after number\");\n\n\tvar str = input.slice(start, tokPos), val;\n\tif (isFloat) val = parseFloat(str);\n\telse if (!octal || str.length === 1) val = parseInt(str, 10);\n\telse if (/[89]/.test(str) || strict) raise(start, \"Invalid number\");\n\telse val = parseInt(str, 8);\n\treturn finishToken(_num, val);\n }\n\n function readString(quote) {\n\ttokPos++;\n\tvar out = \"\";\n\tfor (;;) {\n\t if (tokPos >= inputLen) raise(tokStart, \"Unterminated string constant\");\n\t var ch = input.charCodeAt(tokPos);\n\t if (ch === quote) {\n\t\t++tokPos;\n\t\treturn finishToken(_string, out);\n\t }\n\t if (ch === 92) {\n\t\tch = input.charCodeAt(++tokPos);\n\t\tvar octal = /^[0-7]+/.exec(input.slice(tokPos, tokPos + 3));\n\t\tif (octal) octal = octal[0];\n\t\twhile (octal && parseInt(octal, 8) > 255) octal = octal.slice(0, -1);\n\t\tif (octal === \"0\") octal = null;\n\t\t++tokPos;\n\t\tif (octal) {\n\t\t if (strict) raise(tokPos - 2, \"Octal literal in strict mode\");\n\t\t out += String.fromCharCode(parseInt(octal, 8));\n\t\t tokPos += octal.length - 1;\n\t\t} else {\n\t\t switch (ch) {\n\t\t case 110: out += \"\\n\"; break;\n\t\t case 114: out += \"\\r\"; break;\n\t\t case 120: out += String.fromCharCode(readHexChar(2)); break;\n\t\t case 117: out += String.fromCharCode(readHexChar(4)); break;\n\t\t case 85: out += String.fromCharCode(readHexChar(8)); break;\n\t\t case 116: out += \"\\t\"; break;\n\t\t case 98: out += \"\\b\"; break;\n\t\t case 118: out += \"\\u000b\"; break;\n\t\t case 102: out += \"\\f\"; break;\n\t\t case 48: out += \"\\0\"; break;\n\t\t case 13: if (input.charCodeAt(tokPos) === 10) ++tokPos;\n\t\t case 10:\n\t\t\tif (options.locations) { tokLineStart = tokPos; ++tokCurLine; }\n\t\t\tbreak;\n\t\t default: out += String.fromCharCode(ch); break;\n\t\t }\n\t\t}\n\t } else {\n\t\tif (ch === 13 || ch === 10 || ch === 8232 || ch === 8233) raise(tokStart, \"Unterminated string constant\");\n\t\tout += String.fromCharCode(ch);\n\t\t++tokPos;\n\t }\n\t}\n }\n\n function readHexChar(len) {\n\tvar n = readInt(16, len);\n\tif (n === null) raise(tokStart, \"Bad character escape sequence\");\n\treturn n;\n }\n\n var containsEsc;\n\n function readWord1() {\n\tcontainsEsc = false;\n\tvar word, first = true, start = tokPos;\n\tfor (;;) {\n\t var ch = input.charCodeAt(tokPos);\n\t if (isIdentifierChar(ch)) {\n\t\tif (containsEsc) word += input.charAt(tokPos);\n\t\t++tokPos;\n\t } else if (ch === 92) {\n\t\tif (!containsEsc) word = input.slice(start, tokPos);\n\t\tcontainsEsc = true;\n\t\tif (input.charCodeAt(++tokPos) != 117)\n\t\t raise(tokPos, \"Expecting Unicode escape sequence \\\\uXXXX\");\n\t\t++tokPos;\n\t\tvar esc = readHexChar(4);\n\t\tvar escStr = String.fromCharCode(esc);\n\t\tif (!escStr) raise(tokPos - 1, \"Invalid Unicode escape\");\n\t\tif (!(first ? isIdentifierStart(esc) : isIdentifierChar(esc)))\n\t\t raise(tokPos - 4, \"Invalid Unicode escape\");\n\t\tword += escStr;\n\t } else {\n\t\tbreak;\n\t }\n\t first = false;\n\t}\n\treturn containsEsc ? word : input.slice(start, tokPos);\n }\n\n function readWord() {\n\tvar word = readWord1();\n\tvar type = _name;\n\tif (!containsEsc && isKeyword(word))\n\t type = keywordTypes[word];\n\treturn finishToken(type, word);\n }\n\n function next() {\n\tlastStart = tokStart;\n\tlastEnd = tokEnd;\n\tlastEndLoc = tokEndLoc;\n\treadToken();\n }\n\n function setStrict(strct) {\n\tstrict = strct;\n\ttokPos = tokStart;\n\tif (options.locations) {\n\t while (tokPos < tokLineStart) {\n\t\ttokLineStart = input.lastIndexOf(\"\\n\", tokLineStart - 2) + 1;\n\t\t--tokCurLine;\n\t }\n\t}\n\tskipSpace();\n\treadToken();\n }\n\n function node_t() {\n\tthis.type = null;\n\tthis.start = tokStart;\n\tthis.end = null;\n }\n\n function node_loc_t() {\n\tthis.start = tokStartLoc;\n\tthis.end = null;\n\tif (sourceFile !== null) this.source = sourceFile;\n }\n\n function startNode() {\n\tvar node = new node_t();\n\tif (options.locations)\n\t node.loc = new node_loc_t();\n\tif (options.directSourceFile)\n\t node.sourceFile = options.directSourceFile;\n\tif (options.ranges)\n\t node.range = [tokStart, 0];\n\treturn node;\n }\n\n function startNodeFrom(other) {\n\tvar node = new node_t();\n\tnode.start = other.start;\n\tif (options.locations) {\n\t node.loc = new node_loc_t();\n\t node.loc.start = other.loc.start;\n\t}\n\tif (options.ranges)\n\t node.range = [other.range[0], 0];\n\n\treturn node;\n }\n\n function finishNode(node, type) {\n\tnode.type = type;\n\tnode.end = lastEnd;\n\tif (options.locations)\n\t node.loc.end = lastEndLoc;\n\tif (options.ranges)\n\t node.range[1] = lastEnd;\n\treturn node;\n }\n\n function isUseStrict(stmt) {\n\treturn options.ecmaVersion >= 5 && stmt.type === \"ExpressionStatement\" &&\n\t stmt.expression.type === \"Literal\" && stmt.expression.value === \"use strict\";\n }\n\n function eat(type) {\n\tif (tokType === type) {\n\t next();\n\t return true;\n\t}\n }\n\n function canInsertSemicolon() {\n\treturn !options.strictSemicolons &&\n\t (tokType === _eof || tokType === _braceR || newline.test(input.slice(lastEnd, tokStart)));\n }\n\n function semicolon() {\n\tif (!eat(_semi) && !canInsertSemicolon()) unexpected();\n }\n\n function expect(type) {\n\tif (tokType === type) next();\n\telse unexpected();\n }\n\n function unexpected() {\n\traise(tokStart, \"Unexpected token\");\n }\n\n function checkLVal(expr) {\n\tif (expr.type !== \"Identifier\" && expr.type !== \"MemberExpression\")\n\t raise(expr.start, \"Assigning to rvalue\");\n\tif (strict && expr.type === \"Identifier\" && isStrictBadIdWord(expr.name))\n\t raise(expr.start, \"Assigning to \" + expr.name + \" in strict mode\");\n }\n\n function parseTopLevel(program) {\n\tlastStart = lastEnd = tokPos;\n\tif (options.locations) lastEndLoc = new line_loc_t;\n\tinFunction = strict = null;\n\tlabels = [];\n\treadToken();\n\n\tvar node = program || startNode(), first = true;\n\tif (!program) node.body = [];\n\twhile (tokType !== _eof) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && isUseStrict(stmt)) setStrict(true);\n\t first = false;\n\t}\n\treturn finishNode(node, \"Program\");\n }\n\n var loopLabel = {kind: \"loop\"}, switchLabel = {kind: \"switch\"};\n\n function parseStatement() {\n\tif (tokType === _slash || tokType === _assign && tokVal == \"/=\")\n\t readToken(true);\n\n\tvar starttype = tokType, node = startNode();\n\n\tswitch (starttype) {\n\tcase _break: case _continue:\n\t next();\n\t var isBreak = starttype === _break;\n\t if (eat(_semi) || canInsertSemicolon()) node.label = null;\n\t else if (tokType !== _name) unexpected();\n\t else {\n\t\tnode.label = parseIdent();\n\t\tsemicolon();\n\t }\n\n\t for (var i = 0; i < labels.length; ++i) {\n\t\tvar lab = labels[i];\n\t\tif (node.label == null || lab.name === node.label.name) {\n\t\t if (lab.kind != null && (isBreak || lab.kind === \"loop\")) break;\n\t\t if (node.label && isBreak) break;\n\t\t}\n\t }\n\t if (i === labels.length) raise(node.start, \"Unsyntactic \" + starttype.keyword);\n\t return finishNode(node, isBreak ? \"BreakStatement\" : \"ContinueStatement\");\n\n\tcase _debugger:\n\t next();\n\t semicolon();\n\t return finishNode(node, \"DebuggerStatement\");\n\n\tcase _do:\n\t next();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t expect(_while);\n\t node.test = parseParenExpression();\n\t semicolon();\n\t return finishNode(node, \"DoWhileStatement\");\n\n\tcase _for:\n\t next();\n\t labels.push(loopLabel);\n\t expect(_parenL);\n\t if (tokType === _semi) return parseFor(node, null);\n\t if (tokType === _var) {\n\t\tvar init = startNode();\n\t\tnext();\n\t\tparseVar(init, true);\n\t\tfinishNode(init, \"VariableDeclaration\");\n\t\tif (init.declarations.length === 1 && eat(_in))\n\t\t return parseForIn(node, init);\n\t\treturn parseFor(node, init);\n\t }\n\t var init = parseExpression(false, true);\n\t if (eat(_in)) {checkLVal(init); return parseForIn(node, init);}\n\t return parseFor(node, init);\n\n\tcase _function:\n\t next();\n\t return parseFunction(node, true);\n\n\tcase _if:\n\t next();\n\t node.test = parseParenExpression();\n\t node.consequent = parseStatement();\n\t node.alternate = eat(_else) ? parseStatement() : null;\n\t return finishNode(node, \"IfStatement\");\n\n\tcase _return:\n\t if (!inFunction && !options.allowReturnOutsideFunction)\n\t\traise(tokStart, \"'return' outside of function\");\n\t next();\n\n\t if (eat(_semi) || canInsertSemicolon()) node.argument = null;\n\t else { node.argument = parseExpression(); semicolon(); }\n\t return finishNode(node, \"ReturnStatement\");\n\n\tcase _switch:\n\t next();\n\t node.discriminant = parseParenExpression();\n\t node.cases = [];\n\t expect(_braceL);\n\t labels.push(switchLabel);\n\n\t for (var cur, sawDefault; tokType != _braceR;) {\n\t\tif (tokType === _case || tokType === _default) {\n\t\t var isCase = tokType === _case;\n\t\t if (cur) finishNode(cur, \"SwitchCase\");\n\t\t node.cases.push(cur = startNode());\n\t\t cur.consequent = [];\n\t\t next();\n\t\t if (isCase) cur.test = parseExpression();\n\t\t else {\n\t\t\tif (sawDefault) raise(lastStart, \"Multiple default clauses\"); sawDefault = true;\n\t\t\tcur.test = null;\n\t\t }\n\t\t expect(_colon);\n\t\t} else {\n\t\t if (!cur) unexpected();\n\t\t cur.consequent.push(parseStatement());\n\t\t}\n\t }\n\t if (cur) finishNode(cur, \"SwitchCase\");\n\t next();\n\t labels.pop();\n\t return finishNode(node, \"SwitchStatement\");\n\n\tcase _throw:\n\t next();\n\t if (newline.test(input.slice(lastEnd, tokStart)))\n\t\traise(lastEnd, \"Illegal newline after throw\");\n\t node.argument = parseExpression();\n\t semicolon();\n\t return finishNode(node, \"ThrowStatement\");\n\n\tcase _try:\n\t next();\n\t node.block = parseBlock();\n\t node.handler = null;\n\t if (tokType === _catch) {\n\t\tvar clause = startNode();\n\t\tnext();\n\t\texpect(_parenL);\n\t\tclause.param = parseIdent();\n\t\tif (strict && isStrictBadIdWord(clause.param.name))\n\t\t raise(clause.param.start, \"Binding \" + clause.param.name + \" in strict mode\");\n\t\texpect(_parenR);\n\t\tclause.guard = null;\n\t\tclause.body = parseBlock();\n\t\tnode.handler = finishNode(clause, \"CatchClause\");\n\t }\n\t node.guardedHandlers = empty;\n\t node.finalizer = eat(_finally) ? parseBlock() : null;\n\t if (!node.handler && !node.finalizer)\n\t\traise(node.start, \"Missing catch or finally clause\");\n\t return finishNode(node, \"TryStatement\");\n\n\tcase _var:\n\t next();\n\t parseVar(node);\n\t semicolon();\n\t return finishNode(node, \"VariableDeclaration\");\n\n\tcase _while:\n\t next();\n\t node.test = parseParenExpression();\n\t labels.push(loopLabel);\n\t node.body = parseStatement();\n\t labels.pop();\n\t return finishNode(node, \"WhileStatement\");\n\n\tcase _with:\n\t if (strict) raise(tokStart, \"'with' in strict mode\");\n\t next();\n\t node.object = parseParenExpression();\n\t node.body = parseStatement();\n\t return finishNode(node, \"WithStatement\");\n\n\tcase _braceL:\n\t return parseBlock();\n\n\tcase _semi:\n\t next();\n\t return finishNode(node, \"EmptyStatement\");\n\n\tdefault:\n\t var maybeName = tokVal, expr = parseExpression();\n\t if (starttype === _name && expr.type === \"Identifier\" && eat(_colon)) {\n\t\tfor (var i = 0; i < labels.length; ++i)\n\t\t if (labels[i].name === maybeName) raise(expr.start, \"Label '\" + maybeName + \"' is already declared\");\n\t\tvar kind = tokType.isLoop ? \"loop\" : tokType === _switch ? \"switch\" : null;\n\t\tlabels.push({name: maybeName, kind: kind});\n\t\tnode.body = parseStatement();\n\t\tlabels.pop();\n\t\tnode.label = expr;\n\t\treturn finishNode(node, \"LabeledStatement\");\n\t } else {\n\t\tnode.expression = expr;\n\t\tsemicolon();\n\t\treturn finishNode(node, \"ExpressionStatement\");\n\t }\n\t}\n }\n\n function parseParenExpression() {\n\texpect(_parenL);\n\tvar val = parseExpression();\n\texpect(_parenR);\n\treturn val;\n }\n\n function parseBlock(allowStrict) {\n\tvar node = startNode(), first = true, strict = false, oldStrict;\n\tnode.body = [];\n\texpect(_braceL);\n\twhile (!eat(_braceR)) {\n\t var stmt = parseStatement();\n\t node.body.push(stmt);\n\t if (first && allowStrict && isUseStrict(stmt)) {\n\t\toldStrict = strict;\n\t\tsetStrict(strict = true);\n\t }\n\t first = false;\n\t}\n\tif (strict && !oldStrict) setStrict(false);\n\treturn finishNode(node, \"BlockStatement\");\n }\n\n function parseFor(node, init) {\n\tnode.init = init;\n\texpect(_semi);\n\tnode.test = tokType === _semi ? null : parseExpression();\n\texpect(_semi);\n\tnode.update = tokType === _parenR ? null : parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForStatement\");\n }\n\n function parseForIn(node, init) {\n\tnode.left = init;\n\tnode.right = parseExpression();\n\texpect(_parenR);\n\tnode.body = parseStatement();\n\tlabels.pop();\n\treturn finishNode(node, \"ForInStatement\");\n }\n\n function parseVar(node, noIn) {\n\tnode.declarations = [];\n\tnode.kind = \"var\";\n\tfor (;;) {\n\t var decl = startNode();\n\t decl.id = parseIdent();\n\t if (strict && isStrictBadIdWord(decl.id.name))\n\t\traise(decl.id.start, \"Binding \" + decl.id.name + \" in strict mode\");\n\t decl.init = eat(_eq) ? parseExpression(true, noIn) : null;\n\t node.declarations.push(finishNode(decl, \"VariableDeclarator\"));\n\t if (!eat(_comma)) break;\n\t}\n\treturn node;\n }\n\n function parseExpression(noComma, noIn) {\n\tvar expr = parseMaybeAssign(noIn);\n\tif (!noComma && tokType === _comma) {\n\t var node = startNodeFrom(expr);\n\t node.expressions = [expr];\n\t while (eat(_comma)) node.expressions.push(parseMaybeAssign(noIn));\n\t return finishNode(node, \"SequenceExpression\");\n\t}\n\treturn expr;\n }\n\n function parseMaybeAssign(noIn) {\n\tvar left = parseMaybeConditional(noIn);\n\tif (tokType.isAssign) {\n\t var node = startNodeFrom(left);\n\t node.operator = tokVal;\n\t node.left = left;\n\t next();\n\t node.right = parseMaybeAssign(noIn);\n\t checkLVal(left);\n\t return finishNode(node, \"AssignmentExpression\");\n\t}\n\treturn left;\n }\n\n function parseMaybeConditional(noIn) {\n\tvar expr = parseExprOps(noIn);\n\tif (eat(_question)) {\n\t var node = startNodeFrom(expr);\n\t node.test = expr;\n\t node.consequent = parseExpression(true);\n\t expect(_colon);\n\t node.alternate = parseExpression(true, noIn);\n\t return finishNode(node, \"ConditionalExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprOps(noIn) {\n\treturn parseExprOp(parseMaybeUnary(), -1, noIn);\n }\n\n function parseExprOp(left, minPrec, noIn) {\n\tvar prec = tokType.binop;\n\tif (prec != null && (!noIn || tokType !== _in)) {\n\t if (prec > minPrec) {\n\t\tvar node = startNodeFrom(left);\n\t\tnode.left = left;\n\t\tnode.operator = tokVal;\n\t\tvar op = tokType;\n\t\tnext();\n\t\tnode.right = parseExprOp(parseMaybeUnary(), prec, noIn);\n\t\tvar exprNode = finishNode(node, (op === _logicalOR || op === _logicalAND) ? \"LogicalExpression\" : \"BinaryExpression\");\n\t\treturn parseExprOp(exprNode, minPrec, noIn);\n\t }\n\t}\n\treturn left;\n }\n\n function parseMaybeUnary() {\n\tif (tokType.prefix) {\n\t var node = startNode(), update = tokType.isUpdate;\n\t node.operator = tokVal;\n\t node.prefix = true;\n\t tokRegexpAllowed = true;\n\t next();\n\t node.argument = parseMaybeUnary();\n\t if (update) checkLVal(node.argument);\n\t else if (strict && node.operator === \"delete\" &&\n\t\t\t node.argument.type === \"Identifier\")\n\t\traise(node.start, \"Deleting local variable in strict mode\");\n\t return finishNode(node, update ? \"UpdateExpression\" : \"UnaryExpression\");\n\t}\n\tvar expr = parseExprSubscripts();\n\twhile (tokType.postfix && !canInsertSemicolon()) {\n\t var node = startNodeFrom(expr);\n\t node.operator = tokVal;\n\t node.prefix = false;\n\t node.argument = expr;\n\t checkLVal(expr);\n\t next();\n\t expr = finishNode(node, \"UpdateExpression\");\n\t}\n\treturn expr;\n }\n\n function parseExprSubscripts() {\n\treturn parseSubscripts(parseExprAtom());\n }\n\n function parseSubscripts(base, noCalls) {\n\tif (eat(_dot)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseIdent(true);\n\t node.computed = false;\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (eat(_bracketL)) {\n\t var node = startNodeFrom(base);\n\t node.object = base;\n\t node.property = parseExpression();\n\t node.computed = true;\n\t expect(_bracketR);\n\t return parseSubscripts(finishNode(node, \"MemberExpression\"), noCalls);\n\t} else if (!noCalls && eat(_parenL)) {\n\t var node = startNodeFrom(base);\n\t node.callee = base;\n\t node.arguments = parseExprList(_parenR, false);\n\t return parseSubscripts(finishNode(node, \"CallExpression\"), noCalls);\n\t} else return base;\n }\n\n function parseExprAtom() {\n\tswitch (tokType) {\n\tcase _this:\n\t var node = startNode();\n\t next();\n\t return finishNode(node, \"ThisExpression\");\n\tcase _name:\n\t return parseIdent();\n\tcase _num: case _string: case _regexp:\n\t var node = startNode();\n\t node.value = tokVal;\n\t node.raw = input.slice(tokStart, tokEnd);\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _null: case _true: case _false:\n\t var node = startNode();\n\t node.value = tokType.atomValue;\n\t node.raw = tokType.keyword;\n\t next();\n\t return finishNode(node, \"Literal\");\n\n\tcase _parenL:\n\t var tokStartLoc1 = tokStartLoc, tokStart1 = tokStart;\n\t next();\n\t var val = parseExpression();\n\t val.start = tokStart1;\n\t val.end = tokEnd;\n\t if (options.locations) {\n\t\tval.loc.start = tokStartLoc1;\n\t\tval.loc.end = tokEndLoc;\n\t }\n\t if (options.ranges)\n\t\tval.range = [tokStart1, tokEnd];\n\t expect(_parenR);\n\t return val;\n\n\tcase _bracketL:\n\t var node = startNode();\n\t next();\n\t node.elements = parseExprList(_bracketR, true, true);\n\t return finishNode(node, \"ArrayExpression\");\n\n\tcase _braceL:\n\t return parseObj();\n\n\tcase _function:\n\t var node = startNode();\n\t next();\n\t return parseFunction(node, false);\n\n\tcase _new:\n\t return parseNew();\n\n\tdefault:\n\t unexpected();\n\t}\n }\n\n function parseNew() {\n\tvar node = startNode();\n\tnext();\n\tnode.callee = parseSubscripts(parseExprAtom(), true);\n\tif (eat(_parenL)) node.arguments = parseExprList(_parenR, false);\n\telse node.arguments = empty;\n\treturn finishNode(node, \"NewExpression\");\n }\n\n function parseObj() {\n\tvar node = startNode(), first = true, sawGetSet = false;\n\tnode.properties = [];\n\tnext();\n\twhile (!eat(_braceR)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (options.allowTrailingCommas && eat(_braceR)) break;\n\t } else first = false;\n\n\t var prop = {key: parsePropertyName()}, isGetSet = false, kind;\n\t if (eat(_colon)) {\n\t\tprop.value = parseExpression(true);\n\t\tkind = prop.kind = \"init\";\n\t } else if (options.ecmaVersion >= 5 && prop.key.type === \"Identifier\" &&\n\t\t\t\t (prop.key.name === \"get\" || prop.key.name === \"set\")) {\n\t\tisGetSet = sawGetSet = true;\n\t\tkind = prop.kind = prop.key.name;\n\t\tprop.key = parsePropertyName();\n\t\tif (tokType !== _parenL) unexpected();\n\t\tprop.value = parseFunction(startNode(), false);\n\t } else unexpected();\n\n\t if (prop.key.type === \"Identifier\" && (strict || sawGetSet)) {\n\t\tfor (var i = 0; i < node.properties.length; ++i) {\n\t\t var other = node.properties[i];\n\t\t if (other.key.name === prop.key.name) {\n\t\t\tvar conflict = kind == other.kind || isGetSet && other.kind === \"init\" ||\n\t\t\t kind === \"init\" && (other.kind === \"get\" || other.kind === \"set\");\n\t\t\tif (conflict && !strict && kind === \"init\" && other.kind === \"init\") conflict = false;\n\t\t\tif (conflict) raise(prop.key.start, \"Redefinition of property\");\n\t\t }\n\t\t}\n\t }\n\t node.properties.push(prop);\n\t}\n\treturn finishNode(node, \"ObjectExpression\");\n }\n\n function parsePropertyName() {\n\tif (tokType === _num || tokType === _string) return parseExprAtom();\n\treturn parseIdent(true);\n }\n\n function parseFunction(node, isStatement) {\n\tif (tokType === _name) node.id = parseIdent();\n\telse if (isStatement) unexpected();\n\telse node.id = null;\n\tnode.params = [];\n\tvar first = true;\n\texpect(_parenL);\n\twhile (!eat(_parenR)) {\n\t if (!first) expect(_comma); else first = false;\n\t node.params.push(parseIdent());\n\t}\n\n\tvar oldInFunc = inFunction, oldLabels = labels;\n\tinFunction = true; labels = [];\n\tnode.body = parseBlock(true);\n\tinFunction = oldInFunc; labels = oldLabels;\n\n\tif (strict || node.body.body.length && isUseStrict(node.body.body[0])) {\n\t for (var i = node.id ? -1 : 0; i < node.params.length; ++i) {\n\t\tvar id = i < 0 ? node.id : node.params[i];\n\t\tif (isStrictReservedWord(id.name) || isStrictBadIdWord(id.name))\n\t\t raise(id.start, \"Defining '\" + id.name + \"' in strict mode\");\n\t\tif (i >= 0) for (var j = 0; j < i; ++j) if (id.name === node.params[j].name)\n\t\t raise(id.start, \"Argument name clash in strict mode\");\n\t }\n\t}\n\n\treturn finishNode(node, isStatement ? \"FunctionDeclaration\" : \"FunctionExpression\");\n }\n\n function parseExprList(close, allowTrailingComma, allowEmpty) {\n\tvar elts = [], first = true;\n\twhile (!eat(close)) {\n\t if (!first) {\n\t\texpect(_comma);\n\t\tif (allowTrailingComma && options.allowTrailingCommas && eat(close)) break;\n\t } else first = false;\n\n\t if (allowEmpty && tokType === _comma) elts.push(null);\n\t else elts.push(parseExpression(true));\n\t}\n\treturn elts;\n }\n\n function parseIdent(liberal) {\n\tvar node = startNode();\n\tif (liberal && options.forbidReserved == \"everywhere\") liberal = false;\n\tif (tokType === _name) {\n\t if (!liberal &&\n\t\t (options.forbidReserved &&\n\t\t (options.ecmaVersion === 3 ? isReservedWord3 : isReservedWord5)(tokVal) ||\n\t\t strict && isStrictReservedWord(tokVal)) &&\n\t\t input.slice(tokStart, tokEnd).indexOf(\"\\\\\") == -1)\n\t\traise(tokStart, \"The keyword '\" + tokVal + \"' is reserved\");\n\t node.name = tokVal;\n\t} else if (liberal && tokType.keyword) {\n\t node.name = tokType.keyword;\n\t} else {\n\t unexpected();\n\t}\n\ttokRegexpAllowed = false;\n\tnext();\n\treturn finishNode(node, \"Identifier\");\n }\n\n});\n\n\t\tif (!acorn.version)\n\t\t\tacorn = null;\n\t}\n\n\tfunction parse(code, options) {\n\t\treturn (global.acorn || acorn).parse(code, options);\n\t}\n\n\tvar binaryOperators = {\n\t\t'+': '__add',\n\t\t'-': '__subtract',\n\t\t'*': '__multiply',\n\t\t'/': '__divide',\n\t\t'%': '__modulo',\n\t\t'==': '__equals',\n\t\t'!=': '__equals'\n\t};\n\n\tvar unaryOperators = {\n\t\t'-': '__negate',\n\t\t'+': '__self'\n\t};\n\n\tvar fields = Base.each(\n\t\t['add', 'subtract', 'multiply', 'divide', 'modulo', 'equals', 'negate'],\n\t\tfunction(name) {\n\t\t\tthis['__' + name] = '#' + name;\n\t\t},\n\t\t{\n\t\t\t__self: function() {\n\t\t\t\treturn this;\n\t\t\t}\n\t\t}\n\t);\n\tPoint.inject(fields);\n\tSize.inject(fields);\n\tColor.inject(fields);\n\n\tfunction __$__(left, operator, right) {\n\t\tvar handler = binaryOperators[operator];\n\t\tif (left && left[handler]) {\n\t\t\tvar res = left[handler](right);\n\t\t\treturn operator === '!=' ? !res : res;\n\t\t}\n\t\tswitch (operator) {\n\t\tcase '+': return left + right;\n\t\tcase '-': return left - right;\n\t\tcase '*': return left * right;\n\t\tcase '/': return left / right;\n\t\tcase '%': return left % right;\n\t\tcase '==': return left == right;\n\t\tcase '!=': return left != right;\n\t\t}\n\t}\n\n\tfunction $__(operator, value) {\n\t\tvar handler = unaryOperators[operator];\n\t\tif (value && value[handler])\n\t\t\treturn value[handler]();\n\t\tswitch (operator) {\n\t\tcase '+': return +value;\n\t\tcase '-': return -value;\n\t\t}\n\t}\n\n\tfunction compile(code, options) {\n\t\tif (!code)\n\t\t\treturn '';\n\t\toptions = options || {};\n\n\t\tvar insertions = [];\n\n\t\tfunction getOffset(offset) {\n\t\t\tfor (var i = 0, l = insertions.length; i < l; i++) {\n\t\t\t\tvar insertion = insertions[i];\n\t\t\t\tif (insertion[0] >= offset)\n\t\t\t\t\tbreak;\n\t\t\t\toffset += insertion[1];\n\t\t\t}\n\t\t\treturn offset;\n\t\t}\n\n\t\tfunction getCode(node) {\n\t\t\treturn code.substring(getOffset(node.range[0]),\n\t\t\t\t\tgetOffset(node.range[1]));\n\t\t}\n\n\t\tfunction getBetween(left, right) {\n\t\t\treturn code.substring(getOffset(left.range[1]),\n\t\t\t\t\tgetOffset(right.range[0]));\n\t\t}\n\n\t\tfunction replaceCode(node, str) {\n\t\t\tvar start = getOffset(node.range[0]),\n\t\t\t\tend = getOffset(node.range[1]),\n\t\t\t\tinsert = 0;\n\t\t\tfor (var i = insertions.length - 1; i >= 0; i--) {\n\t\t\t\tif (start > insertions[i][0]) {\n\t\t\t\t\tinsert = i + 1;\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tinsertions.splice(insert, 0, [start, str.length - end + start]);\n\t\t\tcode = code.substring(0, start) + str + code.substring(end);\n\t\t}\n\n\t\tfunction handleOverloading(node, parent) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'UnaryExpression':\n\t\t\t\tif (node.operator in unaryOperators\n\t\t\t\t\t\t&& node.argument.type !== 'Literal') {\n\t\t\t\t\tvar arg = getCode(node.argument);\n\t\t\t\t\treplaceCode(node, '$__(\"' + node.operator + '\", '\n\t\t\t\t\t\t\t+ arg + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'BinaryExpression':\n\t\t\t\tif (node.operator in binaryOperators\n\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\tbetween = getBetween(node.left, node.right),\n\t\t\t\t\t\toperator = node.operator;\n\t\t\t\t\treplaceCode(node, '__$__(' + left + ','\n\t\t\t\t\t\t\t+ between.replace(new RegExp('\\\\' + operator),\n\t\t\t\t\t\t\t\t'\"' + operator + '\"')\n\t\t\t\t\t\t\t+ ', ' + right + ')');\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'UpdateExpression':\n\t\t\tcase 'AssignmentExpression':\n\t\t\t\tvar parentType = parent && parent.type;\n\t\t\t\tif (!(\n\t\t\t\t\t\tparentType === 'ForStatement'\n\t\t\t\t\t\t|| parentType === 'BinaryExpression'\n\t\t\t\t\t\t\t&& /^[=!<>]/.test(parent.operator)\n\t\t\t\t\t\t|| parentType === 'MemberExpression' && parent.computed\n\t\t\t\t)) {\n\t\t\t\t\tif (node.type === 'UpdateExpression') {\n\t\t\t\t\t\tvar arg = getCode(node.argument),\n\t\t\t\t\t\t\texp = '__$__(' + arg + ', \"' + node.operator[0]\n\t\t\t\t\t\t\t\t\t+ '\", 1)',\n\t\t\t\t\t\t\tstr = arg + ' = ' + exp;\n\t\t\t\t\t\tif (node.prefix) {\n\t\t\t\t\t\t\tstr = '(' + str + ')';\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\tparentType === 'AssignmentExpression' ||\n\t\t\t\t\t\t\tparentType === 'VariableDeclarator' ||\n\t\t\t\t\t\t\tparentType === 'BinaryExpression'\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tif (getCode(parent.left || parent.id) === arg)\n\t\t\t\t\t\t\t\tstr = exp;\n\t\t\t\t\t\t\tstr = arg + '; ' + str;\n\t\t\t\t\t\t}\n\t\t\t\t\t\treplaceCode(node, str);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (/^.=$/.test(node.operator)\n\t\t\t\t\t\t\t\t&& node.left.type !== 'Literal') {\n\t\t\t\t\t\t\tvar left = getCode(node.left),\n\t\t\t\t\t\t\t\tright = getCode(node.right),\n\t\t\t\t\t\t\t\texp = left + ' = __$__(' + left + ', \"'\n\t\t\t\t\t\t\t\t\t+ node.operator[0] + '\", ' + right + ')';\n\t\t\t\t\t\t\treplaceCode(node, /^\\(.*\\)$/.test(getCode(node))\n\t\t\t\t\t\t\t\t\t? '(' + exp + ')' : exp);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction handleExports(node) {\n\t\t\tswitch (node.type) {\n\t\t\tcase 'ExportDefaultDeclaration':\n\t\t\t\treplaceCode({\n\t\t\t\t\trange: [node.start, node.declaration.start]\n\t\t\t\t}, 'module.exports = ');\n\t\t\t\tbreak;\n\t\t\tcase 'ExportNamedDeclaration':\n\t\t\t\tvar declaration = node.declaration;\n\t\t\t\tvar specifiers = node.specifiers;\n\t\t\t\tif (declaration) {\n\t\t\t\t\tvar declarations = declaration.declarations;\n\t\t\t\t\tif (declarations) {\n\t\t\t\t\t\tdeclarations.forEach(function(dec) {\n\t\t\t\t\t\t\treplaceCode(dec, 'module.exports.' + getCode(dec));\n\t\t\t\t\t\t});\n\t\t\t\t\t\treplaceCode({\n\t\t\t\t\t\t\trange: [\n\t\t\t\t\t\t\t\tnode.start,\n\t\t\t\t\t\t\t\tdeclaration.start + declaration.kind.length\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t}, '');\n\t\t\t\t\t}\n\t\t\t\t} else if (specifiers) {\n\t\t\t\t\tvar exports = specifiers.map(function(specifier) {\n\t\t\t\t\t\tvar name = getCode(specifier);\n\t\t\t\t\t\treturn 'module.exports.' + name + ' = ' + name + '; ';\n\t\t\t\t\t}).join('');\n\t\t\t\t\tif (exports) {\n\t\t\t\t\t\treplaceCode(node, exports);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\tfunction walkAST(node, parent, paperFeatures) {\n\t\t\tif (node) {\n\t\t\t\tfor (var key in node) {\n\t\t\t\t\tif (key !== 'range' && key !== 'loc') {\n\t\t\t\t\t\tvar value = node[key];\n\t\t\t\t\t\tif (Array.isArray(value)) {\n\t\t\t\t\t\t\tfor (var i = 0, l = value.length; i < l; i++) {\n\t\t\t\t\t\t\t\twalkAST(value[i], node, paperFeatures);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else if (value && typeof value === 'object') {\n\t\t\t\t\t\t\twalkAST(value, node, paperFeatures);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.operatorOverloading !== false) {\n\t\t\t\t\thandleOverloading(node, parent);\n\t\t\t\t}\n\t\t\t\tif (paperFeatures.moduleExports !== false) {\n\t\t\t\t\thandleExports(node);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction encodeVLQ(value) {\n\t\t\tvar res = '',\n\t\t\t\tbase64 = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';\n\t\t\tvalue = (Math.abs(value) << 1) + (value < 0 ? 1 : 0);\n\t\t\twhile (value || !res) {\n\t\t\t\tvar next = value & (32 - 1);\n\t\t\t\tvalue >>= 5;\n\t\t\t\tif (value)\n\t\t\t\t\tnext |= 32;\n\t\t\t\tres += base64[next];\n\t\t\t}\n\t\t\treturn res;\n\t\t}\n\n\t\tvar url = options.url || '',\n\t\t\tsourceMaps = options.sourceMaps,\n\t\t\tpaperFeatures = options.paperFeatures || {},\n\t\t\tsource = options.source || code,\n\t\t\toffset = options.offset || 0,\n\t\t\tagent = paper.agent,\n\t\t\tversion = agent.versionNumber,\n\t\t\toffsetCode = false,\n\t\t\tlineBreaks = /\\r\\n|\\n|\\r/mg,\n\t\t\tmap;\n\t\tif (sourceMaps && (agent.chrome && version >= 30\n\t\t\t\t|| agent.webkit && version >= 537.76\n\t\t\t\t|| agent.firefox && version >= 23\n\t\t\t\t|| agent.node)) {\n\t\t\tif (agent.node) {\n\t\t\t\toffset -= 2;\n\t\t\t} else if (window && url && !window.location.href.indexOf(url)) {\n\t\t\t\tvar html = document.getElementsByTagName('html')[0].innerHTML;\n\t\t\t\toffset = html.substr(0, html.indexOf(code) + 1).match(\n\t\t\t\t\t\tlineBreaks).length + 1;\n\t\t\t}\n\t\t\toffsetCode = offset > 0 && !(\n\t\t\t\t\tagent.chrome && version >= 36 ||\n\t\t\t\t\tagent.safari && version >= 600 ||\n\t\t\t\t\tagent.firefox && version >= 40 ||\n\t\t\t\t\tagent.node);\n\t\t\tvar mappings = ['AA' + encodeVLQ(offsetCode ? 0 : offset) + 'A'];\n\t\t\tmappings.length = (code.match(lineBreaks) || []).length + 1\n\t\t\t\t\t+ (offsetCode ? offset : 0);\n\t\t\tmap = {\n\t\t\t\tversion: 3,\n\t\t\t\tfile: url,\n\t\t\t\tnames:[],\n\t\t\t\tmappings: mappings.join(';AACA'),\n\t\t\t\tsourceRoot: '',\n\t\t\t\tsources: [url],\n\t\t\t\tsourcesContent: [source]\n\t\t\t};\n\t\t}\n\t\tif (\n\t\t\tpaperFeatures.operatorOverloading !== false ||\n\t\t\tpaperFeatures.moduleExports !== false\n\t\t) {\n\t\t\twalkAST(parse(code, {\n\t\t\t\tranges: true,\n\t\t\t\tpreserveParens: true,\n\t\t\t\tsourceType: 'module'\n\t\t\t}), null, paperFeatures);\n\t\t}\n\t\tif (map) {\n\t\t\tif (offsetCode) {\n\t\t\t\tcode = new Array(offset + 1).join('\\n') + code;\n\t\t\t}\n\t\t\tif (/^(inline|both)$/.test(sourceMaps)) {\n\t\t\t\tcode += \"\\n//# sourceMappingURL=data:application/json;base64,\"\n\t\t\t\t\t\t+ self.btoa(unescape(encodeURIComponent(\n\t\t\t\t\t\t\tJSON.stringify(map))));\n\t\t\t}\n\t\t\tcode += \"\\n//# sourceURL=\" + (url || 'paperscript');\n\t\t}\n\t\treturn {\n\t\t\turl: url,\n\t\t\tsource: source,\n\t\t\tcode: code,\n\t\t\tmap: map\n\t\t};\n\t}\n\n\tfunction execute(code, scope, options) {\n\t\tpaper = scope;\n\t\tvar view = scope.getView(),\n\t\t\ttool = /\\btool\\.\\w+|\\s+on(?:Key|Mouse)(?:Up|Down|Move|Drag)\\b/\n\t\t\t\t\t.test(code) && !/\\bnew\\s+Tool\\b/.test(code)\n\t\t\t\t\t\t? new Tool() : null,\n\t\t\ttoolHandlers = tool ? tool._events : [],\n\t\t\thandlers = ['onFrame', 'onResize'].concat(toolHandlers),\n\t\t\tparams = [],\n\t\t\targs = [],\n\t\t\tfunc,\n\t\t\tcompiled = typeof code === 'object' ? code : compile(code, options);\n\t\tcode = compiled.code;\n\t\tfunction expose(scope, hidden) {\n\t\t\tfor (var key in scope) {\n\t\t\t\tif ((hidden || !/^_/.test(key)) && new RegExp('([\\\\b\\\\s\\\\W]|^)'\n\t\t\t\t\t\t+ key.replace(/\\$/g, '\\\\$') + '\\\\b').test(code)) {\n\t\t\t\t\tparams.push(key);\n\t\t\t\t\targs.push(scope[key]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\texpose({ __$__: __$__, $__: $__, paper: scope, tool: tool },\n\t\t\t\ttrue);\n\t\texpose(scope);\n\t\tcode = 'var module = { exports: {} }; ' + code;\n\t\tvar exports = Base.each(handlers, function(key) {\n\t\t\tif (new RegExp('\\\\s+' + key + '\\\\b').test(code)) {\n\t\t\t\tparams.push(key);\n\t\t\t\tthis.push('module.exports.' + key + ' = ' + key + ';');\n\t\t\t}\n\t\t}, []).join('\\n');\n\t\tif (exports) {\n\t\t\tcode += '\\n' + exports;\n\t\t}\n\t\tcode += '\\nreturn module.exports;';\n\t\tvar agent = paper.agent;\n\t\tif (document && (agent.chrome\n\t\t\t\t|| agent.firefox && agent.versionNumber < 40)) {\n\t\t\tvar script = document.createElement('script'),\n\t\t\t\thead = document.head || document.getElementsByTagName('head')[0];\n\t\t\tif (agent.firefox)\n\t\t\t\tcode = '\\n' + code;\n\t\t\tscript.appendChild(document.createTextNode(\n\t\t\t\t'document.__paperscript__ = function(' + params + ') {' +\n\t\t\t\t\tcode +\n\t\t\t\t'\\n}'\n\t\t\t));\n\t\t\thead.appendChild(script);\n\t\t\tfunc = document.__paperscript__;\n\t\t\tdelete document.__paperscript__;\n\t\t\thead.removeChild(script);\n\t\t} else {\n\t\t\tfunc = Function(params, code);\n\t\t}\n\t\tvar exports = func && func.apply(scope, args);\n\t\tvar obj = exports || {};\n\t\tBase.each(toolHandlers, function(key) {\n\t\t\tvar value = obj[key];\n\t\t\tif (value)\n\t\t\t\ttool[key] = value;\n\t\t});\n\t\tif (view) {\n\t\t\tif (obj.onResize)\n\t\t\t\tview.setOnResize(obj.onResize);\n\t\t\tview.emit('resize', {\n\t\t\t\tsize: view.size,\n\t\t\t\tdelta: new Point()\n\t\t\t});\n\t\t\tif (obj.onFrame)\n\t\t\t\tview.setOnFrame(obj.onFrame);\n\t\t\tview.requestUpdate();\n\t\t}\n\t\treturn exports;\n\t}\n\n\tfunction loadScript(script) {\n\t\tif (/^text\\/(?:x-|)paperscript$/.test(script.type)\n\t\t\t\t&& PaperScope.getAttribute(script, 'ignore') !== 'true') {\n\t\t\tvar canvasId = PaperScope.getAttribute(script, 'canvas'),\n\t\t\t\tcanvas = document.getElementById(canvasId),\n\t\t\t\tsrc = script.src || script.getAttribute('data-src'),\n\t\t\t\tasync = PaperScope.hasAttribute(script, 'async'),\n\t\t\t\tscopeAttribute = 'data-paper-scope';\n\t\t\tif (!canvas)\n\t\t\t\tthrow new Error('Unable to find canvas with id \"'\n\t\t\t\t\t\t+ canvasId + '\"');\n\t\t\tvar scope = PaperScope.get(canvas.getAttribute(scopeAttribute))\n\t\t\t\t\t\t|| new PaperScope().setup(canvas);\n\t\t\tcanvas.setAttribute(scopeAttribute, scope._id);\n\t\t\tif (src) {\n\t\t\t\tHttp.request({\n\t\t\t\t\turl: src,\n\t\t\t\t\tasync: async,\n\t\t\t\t\tmimeType: 'text/plain',\n\t\t\t\t\tonLoad: function(code) {\n\t\t\t\t\t\texecute(code, scope, src);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\texecute(script.innerHTML, scope, script.baseURI);\n\t\t\t}\n\t\t\tscript.setAttribute('data-paper-ignore', 'true');\n\t\t\treturn scope;\n\t\t}\n\t}\n\n\tfunction loadAll() {\n\t\tBase.each(document && document.getElementsByTagName('script'),\n\t\t\t\tloadScript);\n\t}\n\n\tfunction load(script) {\n\t\treturn script ? loadScript(script) : loadAll();\n\t}\n\n\tif (window) {\n\t\tif (document.readyState === 'complete') {\n\t\t\tsetTimeout(loadAll);\n\t\t} else {\n\t\t\tDomEvent.add(window, { load: loadAll });\n\t\t}\n\t}\n\n\treturn {\n\t\tcompile: compile,\n\t\texecute: execute,\n\t\tload: load,\n\t\tparse: parse,\n\t\tcalculateBinary: __$__,\n\t\tcalculateUnary: $__\n\t};\n\n}.call(this);\n\nvar paper = new (PaperScope.inject(Base.exports, {\n\tBase: Base,\n\tNumerical: Numerical,\n\tKey: Key,\n\tDomEvent: DomEvent,\n\tDomElement: DomElement,\n\tdocument: document,\n\twindow: window,\n\tSymbol: SymbolDefinition,\n\tPlacedSymbol: SymbolItem\n}))();\n\nif (paper.agent.node) {\n\trequire('./node/extend.js')(paper);\n}\n\nif (typeof define === 'function' && define.amd) {\n\tdefine('paper', paper);\n} else if (typeof module === 'object' && module) {\n\tmodule.exports = paper;\n}\n\nreturn paper;\n}.call(this, typeof self === 'object' ? self : null);\n","<template>\n <div data-viewable=\"CalculateSupplementaryAngle\">\n <h2>What is the measurement of the highlighted angle?</h2>\n <canvas ref=\"canvasRef\" width=\"300\" height=\"300\"> </canvas>\n <br />\n <user-input-number v-model=\"answer\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, onBeforeUnmount, PropType } from 'vue';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { SupplementaryAngles } from './index';\nimport { randomInt, cos, sin } from '../../utility';\nimport paper from 'paper';\nimport { ViewData } from '@vue-skuilder/common';\nimport { nextTick } from 'vue';\n\nexport default defineComponent({\n name: 'CalculateSupplementaryAngle',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'CalculateSupplementaryAngle');\n const questionUtils = useQuestionView<SupplementaryAngles>(viewableUtils);\n\n const answer = ref('');\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n const paperScope = ref<paper.PaperScope>();\n\n // Initialize question immediately\n questionUtils.question.value = new SupplementaryAngles(props.data);\n\n const getBisectingPoint = (\n p: paper.PaperScope,\n width: number,\n baseAngle: number,\n firstAngle: number,\n secondAngle: number,\n height: number,\n scale: number = 30\n ): paper.Point => {\n return new p.Point(\n width / 2 + scale * cos(baseAngle + (firstAngle + secondAngle) / 2),\n height / 2 + scale * sin(baseAngle + (firstAngle + secondAngle) / 2)\n );\n };\n\n onMounted(async () => {\n await nextTick();\n if (!canvasRef.value) return;\n\n paperScope.value = new paper.PaperScope();\n paperScope.value.setup(canvasRef.value);\n const p = paperScope.value;\n\n const width = canvasRef.value.width;\n const height = canvasRef.value.height;\n\n const baseAngle = randomInt(0, 360);\n\n const xOffset = width * cos(baseAngle);\n const yOffset = width * sin(baseAngle);\n\n const baseLine = new p.Path.Line({\n from: new p.Point(width / 2 + xOffset, height / 2 + yOffset),\n to: new p.Point(width / 2 - xOffset, height / 2 - yOffset),\n });\n baseLine.strokeColor = new paper.Color('black');\n\n let sum: number = 0;\n const armPaths: paper.Path[] = [];\n\n if (!questionUtils.question.value) return;\n\n for (let i = 0; i < questionUtils.question.value.angles.length; i++) {\n const currentAngle = questionUtils.question.value.angles[i];\n sum += currentAngle;\n\n console.log(`drawing angle ${i}:\n angle: ${currentAngle}\n angleSum: ${sum}\n `);\n\n let nextArm: number;\n const thisArm: number = sum - currentAngle;\n if (i === questionUtils.question.value.angles.length - 1) {\n nextArm = 180;\n } else {\n nextArm = sum;\n }\n\n const firstArm: paper.Point = new p.Point(\n width / 2 + 30 * cos(baseAngle + thisArm),\n height / 2 + 30 * sin(baseAngle + thisArm)\n );\n const middleArm: paper.Point = getBisectingPoint(p, width, baseAngle, thisArm, nextArm, height);\n const secondArm: paper.Point = new p.Point(\n width / 2 + 30 * cos(baseAngle + nextArm),\n height / 2 + 30 * sin(baseAngle + nextArm)\n );\n\n const xOff = width * cos(baseAngle + sum);\n const yOff = width * sin(baseAngle + sum);\n\n const angleLine = new p.Path.Line({\n from: new p.Point(width / 2, height / 2),\n to: new p.Point(width / 2 + xOff, height / 2 + yOff),\n });\n angleLine.strokeColor = new paper.Color(0, 0, 0);\n armPaths.push(angleLine);\n\n if (questionUtils.question.value.targetAngleIndex === i) {\n console.log(`drawing targetAngle at i = ${i}:\n baseAngle: ${baseAngle}\n targetAngle: ${currentAngle}\n sum: ${sum}\n nextAngle: ${nextArm}\n `);\n\n const fill = new paper.Color(0.1, 0.5, 0.8, 0.35);\n\n const arc = new p.Path.Arc({\n from: firstArm,\n through: middleArm,\n to: secondArm,\n });\n arc.strokeColor = new paper.Color(0.1, 0.5, 0.8, 0.75);\n arc.strokeWidth = 3;\n arc.fillColor = fill;\n\n const triangle = new p.Path();\n triangle.closed = true;\n triangle.add(firstArm);\n triangle.add(new paper.Point(width / 2, height / 2));\n triangle.add(secondArm);\n triangle.fillColor = fill;\n } else {\n const measure = new paper.PointText(middleArm);\n measure.content = currentAngle.toString() + '°';\n\n let intersection: boolean = true;\n let scale: number = 20;\n\n while (intersection) {\n intersection = false;\n measure.bounds!.center = getBisectingPoint(p, width, baseAngle, thisArm, nextArm, height, scale);\n armPaths.forEach((path) => {\n if (path.intersects(measure)) {\n intersection = true;\n }\n });\n scale += 7;\n }\n }\n }\n });\n\n onBeforeUnmount(() => {\n paperScope.value = undefined;\n });\n\n return {\n answer,\n canvasRef,\n ...viewableUtils,\n ...questionUtils,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped>\ncanvas {\n display: block;\n margin-left: auto;\n margin-right: auto;\n padding: 10px;\n}\n</style>\n","<template>\n <div data-viewable=\"CalculateSupplementaryAngle\">\n <h2>What is the measurement of the highlighted angle?</h2>\n <canvas ref=\"canvasRef\" width=\"300\" height=\"300\"> </canvas>\n <br />\n <user-input-number v-model=\"answer\" />\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, onMounted, onBeforeUnmount, PropType } from 'vue';\nimport { UserInputNumber, useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { SupplementaryAngles } from './index';\nimport { randomInt, cos, sin } from '../../utility';\nimport paper from 'paper';\nimport { ViewData } from '@vue-skuilder/common';\nimport { nextTick } from 'vue';\n\nexport default defineComponent({\n name: 'CalculateSupplementaryAngle',\n\n components: {\n UserInputNumber,\n },\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'CalculateSupplementaryAngle');\n const questionUtils = useQuestionView<SupplementaryAngles>(viewableUtils);\n\n const answer = ref('');\n const canvasRef = ref<HTMLCanvasElement | null>(null);\n const paperScope = ref<paper.PaperScope>();\n\n // Initialize question immediately\n questionUtils.question.value = new SupplementaryAngles(props.data);\n\n const getBisectingPoint = (\n p: paper.PaperScope,\n width: number,\n baseAngle: number,\n firstAngle: number,\n secondAngle: number,\n height: number,\n scale: number = 30\n ): paper.Point => {\n return new p.Point(\n width / 2 + scale * cos(baseAngle + (firstAngle + secondAngle) / 2),\n height / 2 + scale * sin(baseAngle + (firstAngle + secondAngle) / 2)\n );\n };\n\n onMounted(async () => {\n await nextTick();\n if (!canvasRef.value) return;\n\n paperScope.value = new paper.PaperScope();\n paperScope.value.setup(canvasRef.value);\n const p = paperScope.value;\n\n const width = canvasRef.value.width;\n const height = canvasRef.value.height;\n\n const baseAngle = randomInt(0, 360);\n\n const xOffset = width * cos(baseAngle);\n const yOffset = width * sin(baseAngle);\n\n const baseLine = new p.Path.Line({\n from: new p.Point(width / 2 + xOffset, height / 2 + yOffset),\n to: new p.Point(width / 2 - xOffset, height / 2 - yOffset),\n });\n baseLine.strokeColor = new paper.Color('black');\n\n let sum: number = 0;\n const armPaths: paper.Path[] = [];\n\n if (!questionUtils.question.value) return;\n\n for (let i = 0; i < questionUtils.question.value.angles.length; i++) {\n const currentAngle = questionUtils.question.value.angles[i];\n sum += currentAngle;\n\n console.log(`drawing angle ${i}:\n angle: ${currentAngle}\n angleSum: ${sum}\n `);\n\n let nextArm: number;\n const thisArm: number = sum - currentAngle;\n if (i === questionUtils.question.value.angles.length - 1) {\n nextArm = 180;\n } else {\n nextArm = sum;\n }\n\n const firstArm: paper.Point = new p.Point(\n width / 2 + 30 * cos(baseAngle + thisArm),\n height / 2 + 30 * sin(baseAngle + thisArm)\n );\n const middleArm: paper.Point = getBisectingPoint(p, width, baseAngle, thisArm, nextArm, height);\n const secondArm: paper.Point = new p.Point(\n width / 2 + 30 * cos(baseAngle + nextArm),\n height / 2 + 30 * sin(baseAngle + nextArm)\n );\n\n const xOff = width * cos(baseAngle + sum);\n const yOff = width * sin(baseAngle + sum);\n\n const angleLine = new p.Path.Line({\n from: new p.Point(width / 2, height / 2),\n to: new p.Point(width / 2 + xOff, height / 2 + yOff),\n });\n angleLine.strokeColor = new paper.Color(0, 0, 0);\n armPaths.push(angleLine);\n\n if (questionUtils.question.value.targetAngleIndex === i) {\n console.log(`drawing targetAngle at i = ${i}:\n baseAngle: ${baseAngle}\n targetAngle: ${currentAngle}\n sum: ${sum}\n nextAngle: ${nextArm}\n `);\n\n const fill = new paper.Color(0.1, 0.5, 0.8, 0.35);\n\n const arc = new p.Path.Arc({\n from: firstArm,\n through: middleArm,\n to: secondArm,\n });\n arc.strokeColor = new paper.Color(0.1, 0.5, 0.8, 0.75);\n arc.strokeWidth = 3;\n arc.fillColor = fill;\n\n const triangle = new p.Path();\n triangle.closed = true;\n triangle.add(firstArm);\n triangle.add(new paper.Point(width / 2, height / 2));\n triangle.add(secondArm);\n triangle.fillColor = fill;\n } else {\n const measure = new paper.PointText(middleArm);\n measure.content = currentAngle.toString() + '°';\n\n let intersection: boolean = true;\n let scale: number = 20;\n\n while (intersection) {\n intersection = false;\n measure.bounds!.center = getBisectingPoint(p, width, baseAngle, thisArm, nextArm, height, scale);\n armPaths.forEach((path) => {\n if (path.intersects(measure)) {\n intersection = true;\n }\n });\n scale += 7;\n }\n }\n }\n });\n\n onBeforeUnmount(() => {\n paperScope.value = undefined;\n });\n\n return {\n answer,\n canvasRef,\n ...viewableUtils,\n ...questionUtils,\n };\n },\n});\n</script>\n\n<style lang=\"css\" scoped>\ncanvas {\n display: block;\n margin-left: auto;\n margin-right: auto;\n padding: 10px;\n}\n</style>\n","import { Question } from '@vue-skuilder/common-ui';\nimport {\n Answer,\n FieldDefinition,\n ViewData,\n DataShapeName,\n FieldType,\n Status,\n} from '@vue-skuilder/common';\nimport CalculateSupplementaryAngles from './supplementaryAngles.vue';\nimport { randomInt } from '../../utility';\n\nconst validator = {\n instructions: 'Must be 2 or 3.',\n test: (value: string) => {\n if (value === '2' || value === '3') {\n return {\n status: Status.ok,\n msg: '',\n };\n } else {\n return {\n status: Status.error,\n msg: 'Must be 2 or 3.',\n };\n }\n },\n};\n\nconst fields: FieldDefinition[] = [\n {\n name: 'AngleCount',\n type: FieldType.INT,\n validator,\n },\n];\n\nexport class SupplementaryAngles extends Question {\n public static dataShapes = [\n {\n name: DataShapeName.MATH_SupplimentaryAngles,\n fields,\n },\n ];\n\n public static views = [CalculateSupplementaryAngles];\n\n public angles: number[] = [];\n public targetAngleIndex: number;\n public angleCount: number;\n\n constructor(data: ViewData[]) {\n super(data);\n this.angleCount = data[0].AngleCount as number;\n let sum: number = 0;\n for (let i = 0; i <= this.angleCount - 2; i++) {\n const newAng = randomInt(25, 180 - 25 - sum);\n this.angles.push(newAng);\n sum += newAng;\n }\n this.angles.push(180 - sum);\n this.targetAngleIndex = randomInt(0, this.angleCount - 1);\n }\n\n public isCorrect(userAnswer: Answer) {\n return this.angles[this.targetAngleIndex] === userAnswer;\n }\n\n public dataShapes() {\n return SupplementaryAngles.dataShapes;\n }\n\n public views() {\n return SupplementaryAngles.views;\n }\n}\n","<template>\n <div data-viewable=\"VerbalAddition\" class=\"text-h5\">\n <div class=\"text-h5\">\n Count by <strong>{{ question?.n }}</strong\n >s:\n </div>\n\n <input type=\"text\" disabled class=\"correct\" :value=\"question.answer[0] - question.n\" />,\n\n <span v-for=\"(a, i) in question.answer\" :key=\"i\">\n <input\n :id=\"`input${i}`\"\n :ref=\"`input${i}`\"\n :class=\"`input${a}${i}`\"\n v-model=\"answer[i]\"\n type=\"text\"\n :autofocus=\"i === 0\"\n @keyup=\"track(i)\"\n />\n <span v-if=\"i !== question.answer.length - 1\">, </span>\n </span>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType, onMounted } from 'vue';\nimport { CountBy } from './index';\nimport { useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'VerbalAddition',\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'VerbalAddition');\n const questionUtils = useQuestionView<CountBy>(viewableUtils);\n\n const answer = ref<string[]>(['', '', '', '', '']);\n\n // Initialize question immediately\n questionUtils.question.value = new CountBy(props.data);\n\n // Expose the question directly for template access\n const question = computed(() =>\n questionUtils.question.value ? questionUtils.question.value : new CountBy(props.data)\n );\n\n const track = (n: number): void => {\n console.log(`change in ${n}!\n userAnswer: ${answer.value.toString()}\\n\n qAnswer: ${question.value?.answer.toString()}`);\n\n if (question.value && question.value.answer[n].toString().length === answer.value[n].length) {\n if (parseInt(answer.value[n]) === question.value.answer[n]) {\n document.getElementById('input' + n)?.classList.add('correct');\n document.getElementById('input' + n)?.classList.remove('incorrect');\n document.getElementById('input' + n)?.setAttribute('disabled', 'true');\n\n if (n + 1 < answer.value.length) {\n document.getElementById('input' + (n + 1))?.focus();\n } else {\n questionUtils.submitAnswer(answer.value);\n }\n } else {\n document.getElementById('input' + n)?.classList.add('incorrect');\n questionUtils.submitAnswer(answer.value);\n console.log(`Wrong! ${answer.value[n]} !== ${question.value.answer[n]}`);\n }\n }\n };\n\n onMounted(() => {\n console.log('focusing...');\n document.getElementById('input0')?.focus();\n });\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n track,\n };\n },\n});\n</script>\n\n<style scoped>\ninput {\n width: 3em;\n /* border: black; */\n border-style: solid;\n border-bottom-color: black;\n border-width: 1px;\n text-align: center;\n /* background-color: red; */\n}\n\n.incorrect {\n box-shadow: 0px 0px 5px 0px rgb(180, 0, 95);\n}\n.correct {\n box-shadow: 0px 0px 5px 0px green;\n}\n</style>\n","<template>\n <div data-viewable=\"VerbalAddition\" class=\"text-h5\">\n <div class=\"text-h5\">\n Count by <strong>{{ question?.n }}</strong\n >s:\n </div>\n\n <input type=\"text\" disabled class=\"correct\" :value=\"question.answer[0] - question.n\" />,\n\n <span v-for=\"(a, i) in question.answer\" :key=\"i\">\n <input\n :id=\"`input${i}`\"\n :ref=\"`input${i}`\"\n :class=\"`input${a}${i}`\"\n v-model=\"answer[i]\"\n type=\"text\"\n :autofocus=\"i === 0\"\n @keyup=\"track(i)\"\n />\n <span v-if=\"i !== question.answer.length - 1\">, </span>\n </span>\n </div>\n</template>\n\n<script lang=\"ts\">\nimport { defineComponent, ref, computed, PropType, onMounted } from 'vue';\nimport { CountBy } from './index';\nimport { useViewable, useQuestionView } from '@vue-skuilder/common-ui';\nimport { ViewData } from '@vue-skuilder/common';\n\nexport default defineComponent({\n name: 'VerbalAddition',\n\n props: {\n data: {\n type: Array as PropType<ViewData[]>,\n required: true,\n },\n modifyDifficulty: {\n type: Number,\n required: false,\n default: 0,\n },\n },\n\n setup(props, { emit }) {\n const viewableUtils = useViewable(props, emit, 'VerbalAddition');\n const questionUtils = useQuestionView<CountBy>(viewableUtils);\n\n const answer = ref<string[]>(['', '', '', '', '']);\n\n // Initialize question immediately\n questionUtils.question.value = new CountBy(props.data);\n\n // Expose the question directly for template access\n const question = computed(() =>\n questionUtils.question.value ? questionUtils.question.value : new CountBy(props.data)\n );\n\n const track = (n: number): void => {\n console.log(`change in ${n}!\n userAnswer: ${answer.value.toString()}\\n\n qAnswer: ${question.value?.answer.toString()}`);\n\n if (question.value && question.value.answer[n].toString().length === answer.value[n].length) {\n if (parseInt(answer.value[n]) === question.value.answer[n]) {\n document.getElementById('input' + n)?.classList.add('correct');\n document.getElementById('input' + n)?.classList.remove('incorrect');\n document.getElementById('input' + n)?.setAttribute('disabled', 'true');\n\n if (n + 1 < answer.value.length) {\n document.getElementById('input' + (n + 1))?.focus();\n } else {\n questionUtils.submitAnswer(answer.value);\n }\n } else {\n document.getElementById('input' + n)?.classList.add('incorrect');\n questionUtils.submitAnswer(answer.value);\n console.log(`Wrong! ${answer.value[n]} !== ${question.value.answer[n]}`);\n }\n }\n };\n\n onMounted(() => {\n console.log('focusing...');\n document.getElementById('input0')?.focus();\n });\n\n return {\n ...viewableUtils,\n ...questionUtils,\n answer,\n question,\n track,\n };\n },\n});\n</script>\n\n<style scoped>\ninput {\n width: 3em;\n /* border: black; */\n border-style: solid;\n border-bottom-color: black;\n border-width: 1px;\n text-align: center;\n /* background-color: red; */\n}\n\n.incorrect {\n box-shadow: 0px 0px 5px 0px rgb(180, 0, 95);\n}\n.correct {\n box-shadow: 0px 0px 5px 0px green;\n}\n</style>\n","import {\n Answer,\n FieldDefinition,\n ViewData,\n DataShapeName,\n FieldType,\n Status,\n} from '@vue-skuilder/common';\nimport { Question } from '@vue-skuilder/common-ui';\n\nimport defaultView from './default.vue';\n\ninterface A extends Answer {\n [index: number]: number;\n}\nenum Hands {\n LEFT = 'LEFT',\n RIGHT = 'RIGHT',\n}\n\nconst fields: FieldDefinition[] = [\n {\n name: 'n',\n type: FieldType.INT,\n },\n {\n name: 'hand',\n type: FieldType.STRING,\n validator: {\n test: (h) => {\n if (h === Hands.LEFT || h === Hands.RIGHT) {\n return {\n status: Status.ok,\n msg: '',\n };\n } else {\n return {\n status: Status.error,\n msg: `Hand must be ${Hands.LEFT} or ${Hands.RIGHT}`,\n };\n }\n },\n },\n },\n];\n\nconst data = function () {\n const ret: { n: number; hand: Hands }[] = [];\n for (let i = 2; i <= 10; i++) {\n ret.push({ n: i, hand: Hands.LEFT });\n ret.push({ n: i, hand: Hands.RIGHT });\n }\n return ret;\n};\n\nfunction asInt(n: number | string): number {\n if (typeof n === 'string') {\n return parseInt(n);\n } else {\n return n;\n }\n}\n\nexport class CountBy extends Question {\n public static dataShapes = [\n {\n name: DataShapeName.MATH_CountBy,\n fields,\n },\n ];\n\n public static views = [defaultView];\n\n public n: number;\n public hand: Hands;\n\n public static seedData = data();\n public static acceptsUserData = false;\n\n constructor(data: ViewData[]) {\n super(data);\n this.n = data[0].n as number;\n this.hand = data[0].hand as Hands;\n }\n\n public get answer(): number[] {\n const soln: number[] = [];\n const start: number = this.hand === Hands.LEFT ? this.n : 6 * this.n;\n for (let i = 0; i < 5; i++) {\n soln.push(start + i * this.n);\n }\n return soln;\n }\n\n public isCorrect(answer: A) {\n console.log(`Solution: ${this.answer.toString()}`);\n\n for (let i = 0; i < this.answer.length; i++) {\n if (asInt(answer[i]) !== this.answer[i]) {\n console.log(`answer[${i}] == ${answer[i]} !== ${this.answer[i]}`);\n\n return false;\n }\n }\n\n return true;\n }\n\n public dataShapes() {\n return CountBy.dataShapes;\n }\n\n public views() {\n return CountBy.views;\n }\n}\n","import { CourseWare } from '../CourseWare';\nimport { SingleDigitAdditionQuestion } from './questions/addition';\nimport { SingleDigitDivisionQuestion } from './questions/division';\nimport { SingleDigitMultiplicationQuestion } from './questions/multiplication';\nimport { EqualityTest } from './questions/equalityTest';\nimport { OneStepEquation } from './questions/oneStepEqn';\nimport { AngleCategorize } from './questions/angleCategorize';\nimport { SupplementaryAngles } from './questions/supplementaryAngles';\nimport { CountBy } from './questions/countBy';\n\nconst math: CourseWare = new CourseWare('math', [\n SingleDigitDivisionQuestion,\n SingleDigitMultiplicationQuestion,\n SingleDigitAdditionQuestion,\n EqualityTest,\n OneStepEquation,\n AngleCategorize,\n SupplementaryAngles,\n CountBy,\n]);\n\nexport default math;\n"],"x_google_ignoreList":[23,24],"mappings":"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I;GAAI;GAAK;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAG;GAAI;GAAK;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAK;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAM;GAAG;GAAG;GAAI;GAAO;GAAI;GAAM;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAK;GAAG;GAAK;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAO;GAAG;GAAM;GAAG;GAAK;GAAI;GAAG;GAAI;GAAK;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAK;GAAG;GAAM;GAAI;GAAK;GAAI;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAI;GAAM;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAK;GAAG;GAAK;GAAG;GAAI;GAAG;GAAK;GAAG;GAAI;GAAI;GAAK;GAAI;GAAK;GAAG;GAAG;GAAG;GAAK;GAAG;GAAK;GAAG;GAAG;GAAG;GAAM;GAAG;GAAQ;GAAI,EAGtoC,IAA6B;GAAC;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAK;GAAI;GAAI;GAAK;GAAI;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAK;GAAI;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAK;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAK;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAK;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAK;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAK;GAAI;GAAK;GAAI;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAK;GAAI;GAAI;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAI;GAAK;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAI;GAAI;GAAG;GAAK;GAAI;GAAI;GAAG;GAAG;GAAI;GAAG;GAAI;GAAK;GAAG;GAAI;GAAK;GAAK;GAAK;GAAI;GAAK;GAAM;GAAI;GAAI;GAAM;GAAI;GAAG;GAAI;GAAM;GAAG;GAAK;GAAM;GAAI;GAAM;GAAK;GAAG;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAI;GAAG;GAAI;GAAI;GAAG;GAAI;GAAK;GAAI;GAAK;GAAI;GAAK;GAAI;GAAG;GAAG;GAAI;GAAI;GAAI;GAAG;GAAG;GAAG;GAAI;GAAM;GAAG;GAAM;GAAI;GAAG;GAAM;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAK;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAK;GAAM;GAAK;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAM;GAAI;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAK;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAI;GAAG;GAAG;GAAM;GAAI;GAAG;GAAG;GAAK;GAAI;GAAK;GAAI;GAAI;GAAG;GAAI;GAAG;GAAK;GAAI;GAAI;GAAI;GAAK;GAAI;GAAK;GAAI;GAAG;GAAG;GAAK;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAI;GAAG;GAAK;GAAI;GAAI;GAAG;GAAG;GAAM;GAAG;GAAG;GAAI;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;GAAG;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"}