summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2023-02-18 18:40:50 +0000
committerKarl Berry <karl@freefriends.org>2023-02-18 18:40:50 +0000
commit14e4f63a357437636c6cb5c2130c3865c0079ef3 (patch)
treedf263fab51006eea4be1bc1c481a07304401326f /Master
parent7f326f6942dc81b97699f20698fe017b15ef74fa (diff)
asymptote 2.85 support files, windows binaries
git-svn-id: svn://tug.org/texlive/trunk@65878 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rwxr-xr-xMaster/texmf-dist/asymptote/GUI/ContextWindow.py322
-rwxr-xr-xMaster/texmf-dist/asymptote/GUI/Window1.py129
-rw-r--r--Master/texmf-dist/asymptote/GUI/icons_rc.py2903
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons.qrc48
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg22
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg22
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg24
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg24
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg34
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg20
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg26
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg24
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg20
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg30
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg32
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg24
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg26
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg22
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg16
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg16
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/brush.svg26
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/check.svg18
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg26
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg26
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/circle.svg22
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg18
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/code.svg28
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/edit.svg26
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/eye.svg30
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/grid.svg64
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg26
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg18
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/redo.svg80
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/save.svg20
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg42
-rw-r--r--Master/texmf-dist/asymptote/GUI/res/icons/undo.svg80
-rwxr-xr-xMaster/texmf-dist/asymptote/GUI/xasy2asy.py182
-rwxr-xr-xMaster/texmf-dist/asymptote/GUI/xasyBezierInterface.py8
-rwxr-xr-xMaster/texmf-dist/asymptote/GUI/xasyFile.py14
-rwxr-xr-xMaster/texmf-dist/asymptote/GUI/xasyVersion.py2
-rw-r--r--Master/texmf-dist/asymptote/asy-kate.sh4
-rw-r--r--Master/texmf-dist/asymptote/asy-keywords.el8
-rw-r--r--Master/texmf-dist/asymptote/geometry.asy95
-rw-r--r--Master/texmf-dist/asymptote/graph.asy54
-rw-r--r--Master/texmf-dist/asymptote/graph3.asy22
-rw-r--r--Master/texmf-dist/asymptote/plain.asy32
-rw-r--r--Master/texmf-dist/asymptote/plain_arrows.asy158
-rw-r--r--Master/texmf-dist/asymptote/plain_pens.asy4
-rw-r--r--Master/texmf-dist/asymptote/rationalSimplex.asy74
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/blend.glsl145
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/compress.glsl23
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/count.glsl15
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/fragment.glsl67
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/sum1.glsl50
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/sum2.glsl45
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/sum2fast.glsl59
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/sum3.glsl80
-rwxr-xr-xMaster/texmf-dist/asymptote/shaders/zero.glsl4
-rw-r--r--Master/texmf-dist/asymptote/simplex.asy47
-rw-r--r--Master/texmf-dist/asymptote/slopefield.asy10
-rw-r--r--Master/texmf-dist/asymptote/stats.asy27
-rw-r--r--Master/texmf-dist/asymptote/three.asy5
-rw-r--r--Master/texmf-dist/asymptote/three_surface.asy69
-rw-r--r--Master/texmf-dist/asymptote/v3dheadertypes.asy2
-rw-r--r--Master/texmf-dist/asymptote/v3dtypes.asy2
-rw-r--r--Master/texmf-dist/asymptote/version.asy2
-rw-r--r--Master/texmf-dist/asymptote/webgl/asygl.js2
-rw-r--r--Master/texmf-dist/doc/asymptote/CAD.pdfbin198744 -> 198487 bytes
-rw-r--r--Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdfbin81128 -> 81303 bytes
-rw-r--r--Master/texmf-dist/doc/asymptote/asy-latex.pdfbin207105 -> 208908 bytes
-rw-r--r--Master/texmf-dist/doc/asymptote/asyRefCard.pdfbin121145 -> 121145 bytes
-rw-r--r--Master/texmf-dist/doc/asymptote/asymptote.pdfbin1314132 -> 1288667 bytes
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy16
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/Viviani.asy26
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy9
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/filesurface.asy8
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/filesurface.dat24
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/histogram.asy3
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/slopefield1.asy4
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/triads.asy2
-rw-r--r--Master/texmf-dist/doc/asymptote/examples/vectorfield.asy2
-rw-r--r--Master/texmf-dist/doc/info/asy-faq.info2
-rw-r--r--Master/texmf-dist/doc/info/asymptote.info656
-rw-r--r--Master/texmf-dist/doc/man/man1/asy.174
-rw-r--r--Master/texmf-dist/doc/man/man1/asy.man1.pdfbin31192 -> 30996 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/citeproc-lua.man1.pdfbin14680 -> 14680 bytes
-rw-r--r--Master/texmf-dist/doc/man/man1/xasy.man1.pdfbin15299 -> 14674 bytes
-rwxr-xr-xMaster/tlpkg/asymptote/asy.exebin8438272 -> 8441856 bytes
-rwxr-xr-xMaster/tlpkg/asymptote64/asy.exebin8311808 -> 8324608 bytes
-rwxr-xr-xMaster/tlpkg/bin/tl-update-asy2
90 files changed, 5170 insertions, 1303 deletions
diff --git a/Master/texmf-dist/asymptote/GUI/ContextWindow.py b/Master/texmf-dist/asymptote/GUI/ContextWindow.py
new file mode 100755
index 00000000000..53044726803
--- /dev/null
+++ b/Master/texmf-dist/asymptote/GUI/ContextWindow.py
@@ -0,0 +1,322 @@
+#!/usr/bin/env python3
+
+import PyQt5.QtWidgets as Qw
+import PyQt5.QtGui as Qg
+import PyQt5.QtCore as Qc
+import xasyVersion
+
+import xasyUtils as xu
+import xasy2asy as x2a
+import xasyFile as xf
+import xasyOptions as xo
+import UndoRedoStack as Urs
+import xasyArgs as xa
+import xasyBezierInterface as xbi
+from xasyTransform import xasyTransform as xT
+import xasyStrings as xs
+
+import PrimitiveShape
+import InplaceAddObj
+
+import CustMatTransform
+import SetCustomAnchor
+import GuidesManager
+import time
+
+class AnotherWindow(Qw.QWidget):
+ def __init__(self, shape, parent):
+ super().__init__()
+ self.shape = shape
+ self.parent = parent
+ self.newShape = self.shape
+ self.layout = Qw.QVBoxLayout(self)
+
+ # Initialize tab screen
+ self.tabs = Qw.QTabWidget()
+ self.fillTab = Qw.QWidget()
+ self.lineTab = Qw.QWidget()
+ self.arrowTab = Qw.QWidget()
+ self.othersTab = Qw.QWidget()
+ self.tabs.resize(300,200)
+ self.fillTab.layout = Qw.QVBoxLayout(self.fillTab)
+ self.lineTab.layout = Qw.QVBoxLayout(self.lineTab)
+ self.arrowTab.layout = Qw.QVBoxLayout(self.arrowTab)
+ self.othersTab.layout = Qw.QVBoxLayout(self.othersTab)
+ self.tabs.addTab(self.fillTab,"Fill Options")
+ self.tabs.addTab(self.lineTab,"Line Options")
+ self.tabs.addTab(self.arrowTab,"Arrow Options")
+ self.tabs.addTab(self.othersTab,"Misc. Options")
+
+ self.layout.addWidget(self.tabs)
+ self.setLayout(self.layout)
+ self.setWindowTitle("Shape Options Window")
+
+ self.label = Qw.QLabel("Fill:")
+ self.fillTab.layout.addWidget(self.label)
+ self.fillButton = Qw.QComboBox()
+ self.fillButton.addItem("Unfilled")
+ self.fillButton.addItem("Filled")
+ self.fillButton.currentIndexChanged.connect(self.fillChange)
+ self.fillTab.layout.addWidget(self.fillButton)
+
+ if isinstance(self.shape, x2a.asyArrow):
+ self.colorButton = Qw.QPushButton("Set Line Colour")
+ self.colorButton.clicked.connect(self.pickColor)
+ self.fillTab.layout.addWidget(self.colorButton)
+
+ self.colorButton = Qw.QPushButton("Set Fill Colour")
+ self.colorButton.clicked.connect(self.pickFillColor)
+ self.fillTab.layout.addWidget(self.colorButton)
+
+ elif isinstance(self.shape, x2a.xasyShape):
+ self.colorButton = Qw.QPushButton("Set Colour")
+ self.colorButton.clicked.connect(self.pickColor)
+ self.fillTab.layout.addWidget(self.colorButton)
+
+ self.label = Qw.QLabel("Reflection:")
+ self.othersTab.layout.addWidget(self.label)
+ self.reflectionButton = Qw.QComboBox()
+ self.reflectionButton.addItem("None")
+ self.reflectionButton.addItem("Horizontal")
+ self.reflectionButton.addItem("Vertical")
+ self.reflectionButton.currentIndexChanged.connect(self.reflectionChange)
+ self.othersTab.layout.addWidget(self.reflectionButton)
+
+ self.label = Qw.QLabel("Opacity:")
+ self.othersTab.layout.addWidget(self.label)
+ self.opacityBox = Qw.QLineEdit()
+ self.othersTab.layout.addWidget(self.opacityBox)
+ self.opacityBox.setPlaceholderText(str(self.shape.pen.opacity))
+
+ self.label = Qw.QLabel("Arrowhead:")
+ self.arrowTab.layout.addWidget(self.label)
+ self.arrowheadButton = Qw.QComboBox()
+ self.arrowList = ["None","Arrow","ArcArrow"]
+ for arrowMode in self.arrowList:
+ self.arrowheadButton.addItem(arrowMode)
+ self.arrowheadButton.currentIndexChanged.connect(self.arrowheadChange)
+ self.arrowTab.layout.addWidget(self.arrowheadButton)
+
+ self.label = Qw.QLabel("Line Style:")
+ self.lineTab.layout.addWidget(self.label)
+ self.linestyleButton = Qw.QComboBox()
+ self.lineList = ["solid","dashed","dotted","dashdotted"]
+
+ for lineMode in self.lineList:
+ self.linestyleButton.addItem(lineMode)
+ self.linestyleButton.currentIndexChanged.connect(self.linestyleChange)
+ self.lineTab.layout.addWidget(self.linestyleButton)
+ self.linestyleButton.setCurrentIndex(self.lineList.index(self.shape.pen.style))
+
+ self.label = Qw.QLabel("Line Cap Style:")
+ self.lineTab.layout.addWidget(self.label)
+ self.lineCapStyleButton = Qw.QComboBox()
+ self.lineCapListStrings = ["extendcap","flatcap","roundcap"] #Is there a way to pull these directly
+ self.lineCapList = [Qc.Qt.PenCapStyle.SquareCap,Qc.Qt.PenCapStyle.FlatCap,Qc.Qt.PenCapStyle.RoundCap]
+
+ for lineMode in self.lineCapListStrings:
+ self.lineCapStyleButton.addItem(lineMode)
+ self.lineCapStyleButton.currentIndexChanged.connect(self.lineCapStyleChange)
+ self.lineTab.layout.addWidget(self.lineCapStyleButton)
+ self.lineCapStyleButton.setCurrentIndex(self.lineCapList.index(self.shape.pen.capStyle))
+
+ #TODO: Make this a function.
+ if not isinstance(self.shape, x2a.xasyShape):
+ self.fillButton.setCurrentIndex(int(self.shape.arrowSettings["fill"]))
+ if isinstance(self.shape, x2a.asyArrow):
+ self.arrowheadButton.setCurrentIndex(int(self.shape.arrowSettings["active"]))
+ else:
+ self.arrowheadButton.setDisabled(True)
+ else:
+ self.fillButton.setCurrentIndex(int(self.shape.path.fill))
+
+ if isinstance(self.shape, x2a.asyArrow) and self.shape.arrowSettings["active"]: #Make these all a list or something.
+ self.label = Qw.QLabel("Arrow Style:")
+ self.arrowTab.layout.addWidget(self.label)
+ self.arrowstyleButton = Qw.QComboBox()
+ for arrowStyle in self.shape.arrowStyleList:
+ self.arrowstyleButton.addItem(arrowStyle if arrowStyle else "(default)")
+ self.arrowstyleButton.currentIndexChanged.connect(self.arrowstyleChange)
+ self.arrowTab.layout.addWidget(self.arrowstyleButton)
+
+ self.label = Qw.QLabel("Arrow Size:")
+ self.arrowTab.layout.addWidget(self.label)
+ self.arrowSizeBox = Qw.QLineEdit()
+ self.arrowTab.layout.addWidget(self.arrowSizeBox)
+ self.arrowSizeBox.setPlaceholderText(self.getInfo("DefaultHead.size(currentpen)"))
+
+ self.label = Qw.QLabel("Arrow Angle:")
+ self.arrowTab.layout.addWidget(self.label)
+ self.arrowAngleBox = Qw.QLineEdit()
+ self.arrowTab.layout.addWidget(self.arrowAngleBox)
+ self.arrowAngleBox.setPlaceholderText(self.getInfo("arrowangle"))
+
+ self.label = Qw.QLabel("Arrow Fill:")
+ self.arrowTab.layout.addWidget(self.label)
+ self.arrowFillButton = Qw.QComboBox()
+ for arrowFillStyle in self.shape.arrowFillList:
+ self.arrowFillButton.addItem(arrowFillStyle if arrowFillStyle else "(default)")
+ self.arrowFillButton.currentIndexChanged.connect(self.arrowFillChange)
+ self.arrowTab.layout.addWidget(self.arrowFillButton)
+
+ self.arrowstyleButton.setCurrentIndex(int(self.shape.arrowSettings["style"]))
+ self.arrowFillButton.setCurrentIndex(int(self.shape.arrowSettings["fill"]))
+
+ self.fillTab.setLayout(self.fillTab.layout)
+ self.lineTab.setLayout(self.lineTab.layout)
+ self.arrowTab.setLayout(self.arrowTab.layout)
+ self.othersTab.setLayout(self.othersTab.layout)
+
+ self.confirmButton = Qw.QPushButton("Render")
+ self.confirmButton.clicked.connect(self.renderChanges)
+ self.layout.addWidget(self.confirmButton)
+
+ def arrowheadChange(self, i):
+ #None, {Arrow, ArcArrow} x {(),(SimpleHead),(HookHead),(TeXHead)}
+ if isinstance(self.shape, x2a.xasyShape):
+ if i != 0:
+ if isinstance(self.newShape,x2a.asyArrow):
+ self.newShape.arrowSettings["active"] = i
+ else:
+ self.newShape = self.shape.arrowify(arrowhead=i)
+ else:
+ self.newShape.arrowSettings["active"] = i #Simplify the logic
+
+ def arrowstyleChange(self, i):
+ self.newShape.arrowSettings["style"] = i
+
+ def linestyleChange(self, i): #I think add an attribute to asyPen
+ self.shape.pen.setStyle(self.lineList[i])
+
+ def lineCapStyleChange(self, i): #I think add an attribute to asyPen
+ self.shape.pen.setCapStyle(self.lineCapList[i])
+
+ def fillChange(self, i):
+ if isinstance(self.shape, x2a.asyArrow):
+ self.shape.arrowSettings["fill"] = bool(i)
+ elif (self.shape.path.fill != bool(i)) and not isinstance(self.newShape, x2a.asyArrow):
+ if self.newShape:
+ self.newShape = self.newShape.swapFill()
+ if isinstance(self.newShape, x2a.asyArrow):
+ self.newShape.arrowSettings["fill"] = bool(i)
+
+ def reflectionChange(self, i): #TODO: Modernize this.
+ reflectionList = [[1,1],[1,-1],[-1,1]]
+ self.parent.newTransform = xT.makeScaleTransform(*reflectionList[i], self.parent.currentAnchor).toQTransform()
+ self.parent.currentlySelectedObj['selectedIndex'] = self.parent.mostRecentObject
+ self.parent.releaseTransform()
+ self.parent.newTransform = Qg.QTransform()
+
+ def sizeChange(self):
+ try:
+ newSize = self.arrowSizeBox.text()
+ self.newShape.arrowSettings["size"] = float(newSize)
+ except:
+ return #TODO: Show error message.
+
+ def angleChange(self): #Refactor this with the above.
+ try:
+ newAngle = self.arrowAngleBox.text()
+ self.newShape.arrowSettings["angle"] = float(newAngle)
+ except:
+ return #TODO: Show error message.
+
+ def arrowFillChange(self, i): #Can I lambda this?
+ self.newShape.arrowSettings["fill"] = i
+
+ def opacityChange(self):
+ newOpacity = self.opacityBox.text()
+ try:
+ newOpacity = int(newOpacity)
+ if newOpacity >= 0 and newOpacity <= 255:
+ self.shape.pen.setOpacity(newOpacity)
+ self.newShape.pen.setOpacity(newOpacity)
+ except:
+ pass
+
+ def renderChanges(self): #Pull from text boxes here.
+ self.opacityChange()
+ if isinstance(self.shape, x2a.asyArrow) and self.shape.arrowSettings["active"]:
+ self.sizeChange()
+ self.angleChange()
+ elif (not isinstance(self.shape, x2a.asyArrow)):
+ self.renderLineStyle()
+ if self.newShape:
+ self.parent.replaceObject(self.parent.contextWindowObject,self.newShape)
+ self.parent.terminateContextWindow()
+
+ def getInfo(self,value):
+ """ Find out the size of an arbitrary Asymptote pen """
+ self.asyEngine = self.parent.asyEngine
+ assert isinstance(self.asyEngine, x2a.AsymptoteEngine)
+ assert self.asyEngine.active
+
+ fout = self.asyEngine.ostream
+ fin = self.asyEngine.istream
+
+ fout.write("write(_outpipe,{},endl);\n".format(value))
+ fout.write(self.asyEngine.xasy)
+ fout.flush()
+
+ return fin.readline()
+
+ def getPattern(self,pattern,path):
+ """ Find out the adjusted pattern of an Asymptote pen """
+ self.asyEngine = self.parent.asyEngine
+ assert isinstance(self.asyEngine, x2a.AsymptoteEngine)
+ assert self.asyEngine.active
+
+ fout = self.asyEngine.ostream
+ fin = self.asyEngine.istream
+
+ #fout.write("pen p=adjust({pattern},arclength({path}),cyclic({path}));\n")
+ #print(f"write(_outpipe,adjust({pattern},arclength({path}),cyclic({path})),endl);\n")
+ fout.write(f"write(_outpipe,adjust({pattern},arclength({path}),cyclic({path})),endl);\n")
+ fout.write(self.asyEngine.xasy)
+ fout.flush()
+
+ return fin.readline()
+
+ def renderLineStyle(self):
+ #Should only get called with asy shapes
+ if not self.newShape:
+ self.newShape=self.shape
+ if not isinstance(self.newShape,x2a.asyArrow):
+ rawPattern = self.getPattern(self.lineList[self.linestyleButton.currentIndex()],self.newShape.path.getCode())
+ else:
+ #self.newShape.updateCode() #idk if this is necessary.
+ rawPattern = self.getPattern(self.lineList[self.linestyleButton.currentIndex()],self.newShape.code)
+
+ pattern = []
+ if len(rawPattern) == 5:
+ pattern=[1,0]
+ else:
+ for value in rawPattern[2:-3].split(' '):
+ pattern.append(float(value)+1)
+
+ try:
+ self.newShape.pen.setDashPattern(pattern) #pen is going to be a asyPen, add as an attribute
+ except:
+ print("Pen format error")
+
+ def pickColor(self):
+ self.colorDialog = Qw.QColorDialog(x2a.asyPen.convertToQColor(self.shape.pen.color), self)
+ self.colorDialog.show()
+ result = self.colorDialog.exec()
+ if result == Qw.QDialog.Accepted:
+ self.shape.pen.setColorFromQColor(self.colorDialog.selectedColor())
+ self.parent.updateFrameDispColor()
+
+ def pickFillColor(self): #This is a copy of the above, how do you set the var as it is set?
+ self.colorDialog = Qw.QColorDialog(x2a.asyPen.convertToQColor(self.shape.fillPen.color), self)
+ self.colorDialog.show()
+ result = self.colorDialog.exec()
+ if result == Qw.QDialog.Accepted:
+ self.shape.fillPen.setColorFromQColor(self.colorDialog.selectedColor())
+ self.parent.updateFrameDispColor()
+
+ @Qc.pyqtSlot()
+ def on_click(self):
+ print("\n")
+ for currentQTableWidgetItem in self.tableWidget.selectedItems():
+ print(currentQTableWidgetItem.row(), currentQTableWidgetItem.column(), currentQTableWidgetItem.text())
diff --git a/Master/texmf-dist/asymptote/GUI/Window1.py b/Master/texmf-dist/asymptote/GUI/Window1.py
index 134d3cd1968..bae034a15c1 100755
--- a/Master/texmf-dist/asymptote/GUI/Window1.py
+++ b/Master/texmf-dist/asymptote/GUI/Window1.py
@@ -32,6 +32,7 @@ import xasyStrings as xs
import PrimitiveShape
import InplaceAddObj
+import ContextWindow
import CustMatTransform
import SetCustomAnchor
@@ -127,6 +128,7 @@ class MainWindow1(Qw.QMainWindow):
devicePixelRatio=self.devicePixelRatio()
self.ui.setupUi(self)
self.ui.menubar.setNativeMenuBar(False)
+ self.setWindowIcon(Qg.QIcon("../asy.ico"))
self.settings = xo.BasicConfigs.defaultOpt
self.keyMaps = xo.BasicConfigs.keymaps
@@ -229,7 +231,7 @@ class MainWindow1(Qw.QMainWindow):
self.previewCurve = None
self.mouseDown = False
- self.globalObjectCounter = 0
+ self.globalObjectCounter = 1
self.fileItems = []
self.drawObjects = []
@@ -569,9 +571,6 @@ class MainWindow1(Qw.QMainWindow):
self.ui.txtTerminalPrompt.clear()
def btnFillOnClick(self, checked):
- if self.currentModeStack == [SelectionMode.selectEdit]:
- if isinstance(self.addMode,xbi.InteractiveBezierEditor):
- self.addMode.swapObjFill() #Check for crashes
self.currAddOptions['fill'] = checked
self.ui.btnOpenCurve.setEnabled(not checked)
self.ui.btnOpenPoly.setEnabled(not checked)
@@ -893,16 +892,34 @@ class MainWindow1(Qw.QMainWindow):
if result:
self.execCustomCommand(commandText)
- def addXasyShapeFromPath(self, path, pen = None, transform = x2a.identity(), key = None):
+ def addXasyShapeFromPath(self, path, pen = None, transform = x2a.identity(), key = None, fill = False):
+ dashPattern = pen['dashPattern'] #?
if not pen:
pen = self.currentPen
else:
pen = x2a.asyPen(self.asyEngine, color = pen['color'], width = pen['width'], pen_options = pen['options'])
+ if dashPattern:
+ pen.setDashPattern(dashPattern)
newItem = x2a.xasyShape(path, self.asyEngine, pen = pen, transform = transform)
+ if fill:
+ newItem.swapFill()
newItem.setKey(key)
self.fileItems.append(newItem)
+ def addXasyArrowFromPath(self, pen, transform, key, arrowSettings, code, dashPattern = None):
+ if not pen:
+ pen = self.currentPen
+ else:
+ pen = x2a.asyPen(self.asyEngine, color = pen['color'], width = pen['width'], pen_options = pen['options'])
+ if dashPattern:
+ pen.setDashPattern(dashPattern)
+
+ newItem = x2a.asyArrow(self.asyEngine, pen, transform, key, canvas=self.xasyDrawObj, code=code)
+ newItem.setKey(key)
+ newItem.arrowSettings = arrowSettings
+ self.fileItems.append(newItem)
+
def addXasyTextFromData(self, text, location, pen, transform, key, align, fontSize):
if not pen:
pen = self.currentPen
@@ -925,7 +942,7 @@ class MainWindow1(Qw.QMainWindow):
asyFile = io.open(os.path.realpath(pathToFile), 'w')
xf.saveFile(asyFile, self.fileItems, self.asy2psmap)
asyFile.close()
- self.ui.statusbar.showMessage(f"Exported to '{pathToFile}' as Asymptote File.")
+ self.ui.statusbar.showMessage(f"Exported to '{pathToFile}' as an Asymptote file.")
def btnExportToAsyOnClick(self):
if self.fileName:
@@ -998,11 +1015,12 @@ class MainWindow1(Qw.QMainWindow):
ext = 'asy'
else:
ext = ext[1][1:]
+ if ext == '':
+ ext='asy'
if ext == 'asy':
pathToFile = os.path.splitext(file)[0]+'.'+ext
- asyFile = io.open(os.path.realpath(pathToFile), 'w')
- xf.saveFile(asyFile, self.fileItems, self.asy2psmap)
- asyFile.close()
+ self.updateScript()
+ self.actionExport(pathToFile)
else:
with subprocess.Popen(args=[self.asyPath, '-f{0}'.format(ext), '-o{0}'.format(file), '-'], encoding='utf-8',
stdin=subprocess.PIPE) as asy:
@@ -1060,9 +1078,10 @@ class MainWindow1(Qw.QMainWindow):
for item in xasyObjects['objects']:
key=item['transfKey']
- if(key) in obj.transfKeymap.keys():
- continue
- obj.maxKey=max(obj.maxKey,int(key))
+ if existsAsy:
+ if(key) in obj.transfKeymap.keys():
+ continue
+ obj.maxKey=max(obj.maxKey,int(key))
if item['type'] == 'xasyScript':
print("Uh oh, there should not be any asy objects loaded")
@@ -1078,12 +1097,18 @@ class MainWindow1(Qw.QMainWindow):
linkSet = item['links']
path = x2a.asyPath(self.asyEngine)
path.initFromNodeList(nodeSet, linkSet)
- self.addXasyShapeFromPath(path, pen = item['pen'], transform = x2a.asyTransform(item['transform']), key = item['transfKey'])
+ self.addXasyShapeFromPath(path, pen = item['pen'], transform = x2a.asyTransform(item['transform']), key = item['transfKey'], fill = item['fill'])
+
+ elif item['type'] == 'asyArrow':
+ self.addXasyArrowFromPath(item['pen'], x2a.asyTransform(item['transform']), item['transfKey'], item['settings'], item['code'])
+ #self.addXasyArrowFromPath(item['oldpath'], item['pen'], x2a.asyTransform(item['transform']), item['transfKey'], item['settings'])
+
else:
print("ERROR")
self.asy2psmap = x2a.asyTransform(xasyObjects['asy2psmap'])
- self.globalObjectCounter = obj.maxKey+1
+ if existsAsy:
+ self.globalObjectCounter = obj.maxKey+1
self.asyfyCanvas()
@@ -1762,7 +1787,7 @@ class MainWindow1(Qw.QMainWindow):
# and subtract pan offset and center points
# but it's much more work...
newCenter = self.magnification * newCenter
- self.panOffset = [-newCenter.x(), newCenter.y()]
+ self.panOffset = [-newCenter.x(), -newCenter.y()]
self.quickUpdate()
@@ -1923,7 +1948,7 @@ class MainWindow1(Qw.QMainWindow):
preCanvas.setPen(minorGridCol)
self.makePenCosmetic(preCanvas)
for xMinor in range(1, minorGridCount + 1):
- xCoord = x + ((xMinor / (minorGridCount + 1)) * majorGrid)
+ xCoord = round(x + ((xMinor / (minorGridCount + 1)) * majorGrid))
preCanvas.drawLine(Qc.QLine(xCoord, -9999, xCoord, 9999))
preCanvas.drawLine(Qc.QLine(-xCoord, -9999, -xCoord, 9999))
@@ -1931,20 +1956,22 @@ class MainWindow1(Qw.QMainWindow):
preCanvas.setPen(minorGridCol)
self.makePenCosmetic(preCanvas)
for yMinor in range(1, minorGridCount + 1):
- yCoord = y + ((yMinor / (minorGridCount + 1)) * majorGrid)
+ yCoord = round(y + ((yMinor / (minorGridCount + 1)) * majorGrid))
preCanvas.drawLine(Qc.QLine(-9999, yCoord, 9999, yCoord))
preCanvas.drawLine(Qc.QLine(-9999, -yCoord, 9999, -yCoord))
preCanvas.setPen(majorGridCol)
self.makePenCosmetic(preCanvas)
- preCanvas.drawLine(Qc.QLine(-9999, y, 9999, y))
- preCanvas.drawLine(Qc.QLine(-9999, -y, 9999, -y))
+ roundY = round(y)
+ preCanvas.drawLine(Qc.QLine(-9999, roundY, 9999, roundY))
+ preCanvas.drawLine(Qc.QLine(-9999, -roundY, 9999, -roundY))
for x in np.arange(0, 2 * x_range + 1, majorGrid):
preCanvas.setPen(majorGridCol)
self.makePenCosmetic(preCanvas)
- preCanvas.drawLine(Qc.QLine(x, -9999, x, 9999))
- preCanvas.drawLine(Qc.QLine(-x, -9999, -x, 9999))
+ roundX = round(x)
+ preCanvas.drawLine(Qc.QLine(roundX, -9999, roundX, 9999))
+ preCanvas.drawLine(Qc.QLine(-roundX, -9999, -roundX, 9999))
def drawPolarGrid(self, preCanvas):
center = Qc.QPointF(0, 0)
@@ -2046,7 +2073,7 @@ class MainWindow1(Qw.QMainWindow):
with Qg.QPainter(self.postCanvasPixmap) as postCanvas:
postCanvas.setRenderHints(self.mainCanvas.renderHints())
postCanvas.setTransform(self.getScrsTransform())
- # self.makePenCosmetic(postCanvas)
+ self.makePenCosmetic(postCanvas)
self.drawTransformPreview(postCanvas)
@@ -2384,6 +2411,7 @@ class MainWindow1(Qw.QMainWindow):
finally:
f.close()
+ self.btnPanCenterOnClick()
def populateCanvasWithItems(self, forceUpdate=False):
self.itemCount = 0
@@ -2423,3 +2451,60 @@ class MainWindow1(Qw.QMainWindow):
self.quickUpdate()
else:
self.ui.statusbar.showMessage('No object to paste')
+
+ def contextMenuEvent(self, event):
+ #Note that we can't get anything from self.selectOnHover() here.
+ try:
+ self.contextWindowIndex = self.selectObject()[0] #for arrowifying
+ maj = self.contextWindowIndex[0]
+ except:
+ return
+
+ if self.fileItems[maj] is not None:
+ self.contextWindowObject = self.fileItems[maj] #For arrowifying
+ self.contextWindow = ContextWindow.AnotherWindow(self.fileItems[maj],self)
+ self.contextWindow.setMinimumWidth(420)
+ #self.setCentralWidget(self.contextWindow) #I don't know what this does tbh.
+ self.contextWindow.show()
+
+ def focusInEvent(self,event):
+ if self.mainCanvas.isActive():
+ self.quickUpdate()
+
+ def replaceObject(self,objectIndex,newObject):
+ maj, minor = self.contextWindowIndex
+ selectedObj = self.drawObjects[maj][minor]
+
+ parent = selectedObj.parent()
+
+ if isinstance(parent, x2a.xasyScript):
+ objKey=(selectedObj.key, selectedObj.keyIndex)
+ self.hiddenKeys.add(objKey)
+ self.undoRedoStack.add(self.createAction(
+ SoftDeletionChanges(selectedObj.parent(), objKey)
+ ))
+ self.softDeleteObj((maj, minor))
+ else:
+ index = self.fileItems.index(selectedObj.parent())
+
+ self.undoRedoStack.add(self.createAction(
+ HardDeletionChanges(selectedObj.parent(), index)
+ ))
+
+ self.fileItems.remove(selectedObj.parent())
+
+ self.fileItems.append(newObject)
+ self.drawObjects.append(newObject.generateDrawObjects(True)) #THIS DOES WORK, IT'S JUST REGENERATING THE SHAPE.
+
+ self.checkUndoRedoButtons()
+ self.fileChanged = True
+
+ self.clearSelection()
+ #self.asyfyCanvas()
+ #self.quickUpdate()
+
+ def terminateContextWindow(self):
+ if self.contextWindow is not None:
+ self.contextWindow.close()
+ self.asyfyCanvas()
+ self.quickUpdate()
diff --git a/Master/texmf-dist/asymptote/GUI/icons_rc.py b/Master/texmf-dist/asymptote/GUI/icons_rc.py
new file mode 100644
index 00000000000..7a59d361a53
--- /dev/null
+++ b/Master/texmf-dist/asymptote/GUI/icons_rc.py
@@ -0,0 +1,2903 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created by: The Resource Compiler for PyQt5 (Qt v5.15.8)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt5 import QtCore
+
+qt_resource_data = b"\
+\x00\x00\x02\xf0\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x32\x30\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x34\x38\x43\x31\
+\x34\x31\x2e\x36\x30\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\
+\x2e\x36\x30\x31\x2c\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\
+\x30\x31\x2c\x32\x30\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\
+\x30\x38\x2d\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\
+\x38\x53\x33\x37\x30\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\
+\x2c\x34\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x33\x39\
+\x39\x0a\x09\x09\x09\x63\x2d\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\
+\x31\x36\x36\x2e\x33\x39\x39\x2d\x37\x34\x2e\x38\x38\x32\x2d\x31\
+\x36\x36\x2e\x33\x39\x39\x2d\x31\x36\x36\x2e\x33\x39\x39\x53\x31\
+\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\x35\x36\x2c\
+\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\x34\x2e\x34\
+\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\x33\x34\x37\
+\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x33\x39\x39\x2c\x32\x35\x36\
+\x2c\x34\x32\x32\x2e\x33\x39\x39\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x77\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x32\x38\x38\
+\x2c\x39\x36\x20\x33\x33\x37\x2e\x39\x2c\x31\x34\x35\x2e\x39\x20\
+\x32\x37\x34\x2c\x32\x30\x39\x2e\x37\x20\x32\x37\x34\x2c\x32\x30\
+\x39\x2e\x37\x20\x31\x34\x35\x2e\x39\x2c\x33\x33\x37\x2e\x39\x20\
+\x39\x36\x2c\x32\x38\x38\x20\x39\x36\x2c\x34\x31\x36\x20\x32\x32\
+\x34\x2c\x34\x31\x36\x20\x31\x37\x34\x2e\x31\x2c\x33\x36\x36\x2e\
+\x31\x20\x33\x35\x37\x2e\x34\x2c\x31\x38\x32\x2e\x39\x20\x33\x36\
+\x36\x2e\x31\x2c\x31\x37\x34\x2e\x31\x20\x0a\x09\x34\x31\x36\x2c\
+\x32\x32\x34\x20\x34\x31\x36\x2c\x39\x36\x20\x22\x2f\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xfe\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
+\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
+\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
+\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x32\x2e\x30\x30\
+\x37\x35\x20\x33\x32\x2e\x31\x32\x4c\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x20\x33\x32\x2e\x31\x32\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\
+\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\
+\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\
+\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\
+\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\
+\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\
+\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\
+\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\
+\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\
+\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\
+\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\
+\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\
+\x20\x33\x32\x2e\x31\x32\x20\x36\x32\x2e\x32\x33\x32\x35\x4c\x20\
+\x33\x32\x2e\x31\x32\x20\x32\x2e\x30\x30\x37\x35\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\
+\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\
+\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\
+\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\
+\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x04\x9c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x6f\x64\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x20\x78\x3d\x22\x32\x34\x70\x78\x22\x20\x79\x3d\x22\x32\
+\x34\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\
+\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\
+\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\
+\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\
+\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\
+\x35\x63\x2d\x30\x2e\x32\x33\x36\x2c\x30\x2d\x30\x2e\x34\x37\x34\
+\x2d\x30\x2e\x30\x38\x33\x2d\x30\x2e\x36\x36\x34\x2d\x30\x2e\x32\
+\x35\x32\x4c\x2d\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x35\x2e\x33\
+\x34\x31\x2d\x34\x2e\x37\x34\x38\x43\x35\x2e\x37\x34\x38\x2c\x34\
+\x2e\x38\x38\x37\x2c\x36\x2e\x33\x38\x2c\x34\x2e\x39\x32\x32\x2c\
+\x36\x2e\x37\x34\x37\x2c\x35\x2e\x33\x33\x35\x0a\x09\x63\x30\x2e\
+\x33\x36\x37\x2c\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x33\x2c\x31\
+\x2e\x30\x34\x35\x2d\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\
+\x4c\x33\x2e\x30\x30\x35\x2c\x31\x30\x6c\x33\x2e\x33\x37\x38\x2c\
+\x33\x2e\x30\x30\x32\x63\x30\x2e\x34\x31\x33\x2c\x30\x2e\x33\x36\
+\x37\x2c\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2c\x30\x2e\x30\
+\x38\x33\x2c\x31\x2e\x34\x31\x32\x0a\x09\x43\x36\x2e\x32\x36\x39\
+\x2c\x31\x34\x2e\x36\x33\x37\x2c\x35\x2e\x39\x39\x34\x2c\x31\x34\
+\x2e\x37\x35\x2c\x35\x2e\x37\x31\x39\x2c\x31\x34\x2e\x37\x35\x7a\
+\x20\x4d\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x4c\
+\x32\x30\x2e\x30\x30\x35\x2c\x31\x30\x6c\x2d\x35\x2e\x30\x36\x2d\
+\x34\x2e\x34\x39\x38\x63\x2d\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\
+\x36\x37\x2d\x31\x2e\x30\x34\x35\x2d\x30\x2e\x33\x33\x2d\x31\x2e\
+\x34\x31\x31\x2c\x30\x2e\x30\x38\x33\x0a\x09\x63\x2d\x30\x2e\x33\
+\x36\x37\x2c\x30\x2e\x34\x31\x33\x2d\x30\x2e\x33\x33\x2c\x31\x2e\
+\x30\x34\x35\x2c\x30\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x4c\
+\x31\x36\x2e\x39\x39\x35\x2c\x31\x30\x6c\x2d\x33\x2e\x36\x35\x39\
+\x2c\x33\x2e\x32\x35\x32\x63\x2d\x30\x2e\x34\x31\x33\x2c\x30\x2e\
+\x33\x36\x37\x2d\x30\x2e\x34\x35\x2c\x30\x2e\x39\x39\x39\x2d\x30\
+\x2e\x30\x38\x33\x2c\x31\x2e\x34\x31\x32\x43\x31\x33\x2e\x34\x35\
+\x2c\x31\x34\x2e\x38\x38\x37\x2c\x31\x33\x2e\x37\x32\x35\x2c\x31\
+\x35\x2c\x31\x34\x2c\x31\x35\x0a\x09\x43\x31\x34\x2e\x32\x33\x36\
+\x2c\x31\x35\x2c\x31\x34\x2e\x34\x37\x34\x2c\x31\x34\x2e\x39\x31\
+\x37\x2c\x31\x34\x2e\x36\x36\x34\x2c\x31\x34\x2e\x37\x34\x38\x7a\
+\x20\x4d\x39\x2e\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x6c\x32\
+\x2d\x31\x32\x63\x30\x2e\x30\x39\x31\x2d\x30\x2e\x35\x34\x35\x2d\
+\x30\x2e\x32\x37\x37\x2d\x31\x2e\x30\x36\x2d\x30\x2e\x38\x32\x32\
+\x2d\x31\x2e\x31\x35\x31\x0a\x09\x63\x2d\x30\x2e\x35\x34\x37\x2d\
+\x30\x2e\x30\x39\x32\x2d\x31\x2e\x30\x36\x31\x2c\x30\x2e\x32\x37\
+\x37\x2d\x31\x2e\x31\x35\x2c\x30\x2e\x38\x32\x32\x6c\x2d\x32\x2c\
+\x31\x32\x63\x2d\x30\x2e\x30\x39\x31\x2c\x30\x2e\x35\x34\x35\x2c\
+\x30\x2e\x32\x37\x37\x2c\x31\x2e\x30\x36\x2c\x30\x2e\x38\x32\x32\
+\x2c\x31\x2e\x31\x35\x31\x43\x38\x2e\x38\x39\x32\x2c\x31\x36\x2e\
+\x39\x39\x36\x2c\x38\x2e\x39\x34\x36\x2c\x31\x37\x2c\x39\x2e\x30\
+\x30\x31\x2c\x31\x37\x0a\x09\x43\x39\x2e\x34\x38\x31\x2c\x31\x37\
+\x2c\x39\x2e\x39\x30\x35\x2c\x31\x36\x2e\x36\x35\x33\x2c\x39\x2e\
+\x39\x38\x36\x2c\x31\x36\x2e\x31\x36\x35\x7a\x22\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x17\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
+\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
+\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
+\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
+\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
+\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
+\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
+\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
+\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x33\x35\x34\x2e\x32\
+\x34\x2c\x34\x37\x2e\x34\x6c\x33\x39\x2e\x38\x37\x39\x2d\x33\x39\
+\x2e\x38\x37\x39\x48\x32\x37\x32\x2e\x31\x39\x36\x76\x31\x32\x31\
+\x2e\x39\x32\x34\x6c\x36\x30\x2e\x38\x30\x31\x2d\x36\x30\x2e\x38\
+\x30\x31\x63\x35\x36\x2c\x35\x30\x2e\x30\x36\x36\x2c\x37\x37\x2e\
+\x32\x35\x31\x2c\x31\x33\x32\x2e\x30\x30\x34\x2c\x34\x36\x2e\x39\
+\x31\x38\x2c\x32\x30\x35\x2e\x32\x33\x35\x0a\x09\x63\x2d\x31\x38\
+\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\x2e\x35\
+\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\x2c\x39\
+\x38\x2e\x34\x63\x2d\x34\x34\x2e\x38\x36\x36\x2c\x31\x38\x2e\x35\
+\x38\x35\x2d\x39\x34\x2e\x32\x38\x38\x2c\x31\x38\x2e\x35\x38\x35\
+\x2d\x31\x33\x39\x2e\x31\x35\x38\x2c\x30\x63\x2d\x34\x34\x2e\x38\
+\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\
+\x2d\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\
+\x34\x0a\x09\x63\x2d\x31\x38\x2e\x35\x38\x35\x2d\x34\x34\x2e\x38\
+\x36\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x39\x34\x2e\x32\x39\x2c\
+\x30\x2d\x31\x33\x39\x2e\x31\x35\x39\x6c\x2d\x32\x37\x2e\x37\x31\
+\x37\x2d\x31\x31\x2e\x34\x38\x63\x2d\x32\x31\x2e\x36\x35\x31\x2c\
+\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x31\x2c\x31\x30\
+\x39\x2e\x38\x34\x38\x2c\x30\x2c\x31\x36\x32\x2e\x31\x32\x0a\x09\
+\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
+\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
+\x2e\x36\x33\x37\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
+\x31\x34\x2c\x31\x30\x2e\x38\x32\x37\x2c\x35\x33\x2e\x35\x39\x35\
+\x2c\x31\x36\x2e\x32\x34\x2c\x38\x31\x2e\x30\x36\x2c\x31\x36\x2e\
+\x32\x33\x39\x63\x32\x37\x2e\x34\x35\x39\x2d\x30\x2e\x30\x30\x31\
+\x2c\x35\x34\x2e\x39\x32\x37\x2d\x35\x2e\x34\x31\x34\x2c\x38\x31\
+\x2e\x30\x36\x31\x2d\x31\x36\x2e\x32\x33\x39\x0a\x09\x63\x35\x32\
+\x2e\x32\x37\x31\x2d\x32\x31\x2e\x36\x35\x32\x2c\x39\x32\x2e\x39\
+\x38\x33\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\x31\x34\x2e\x36\x33\
+\x36\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\x34\x32\x2e\x37\x33\
+\x39\x2c\x32\x30\x30\x2e\x36\x2c\x34\x31\x38\x2e\x35\x33\x32\x2c\
+\x31\x30\x35\x2e\x38\x32\x36\x2c\x33\x35\x34\x2e\x32\x34\x2c\x34\
+\x37\x2e\x34\x7a\x22\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x3d\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\
+\x36\x4c\x33\x30\x36\x2e\x39\x2c\x32\x35\x36\x6c\x31\x33\x30\x2e\
+\x36\x2d\x31\x33\x30\x2e\x36\x63\x31\x34\x2e\x31\x2d\x31\x34\x2e\
+\x31\x2c\x31\x34\x2e\x31\x2d\x33\x36\x2e\x38\x2c\x30\x2d\x35\x30\
+\x2e\x39\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\x2d\x33\x36\
+\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\x30\x4c\x32\
+\x35\x36\x2c\x32\x30\x35\x2e\x31\x4c\x31\x32\x35\x2e\x34\x2c\x37\
+\x34\x2e\x35\x0a\x09\x63\x2d\x31\x34\x2e\x31\x2d\x31\x34\x2e\x31\
+\x2d\x33\x36\x2e\x38\x2d\x31\x34\x2e\x31\x2d\x35\x30\x2e\x39\x2c\
+\x30\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\x2e\
+\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x4c\x32\x30\
+\x35\x2e\x31\x2c\x32\x35\x36\x4c\x37\x34\x2e\x35\x2c\x33\x38\x36\
+\x2e\x36\x63\x2d\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2d\x31\x34\
+\x2e\x31\x2c\x33\x36\x2e\x38\x2c\x30\x2c\x35\x30\x2e\x39\x0a\x09\
+\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\x2c\
+\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x4c\x32\x35\x36\x2c\
+\x33\x30\x36\x2e\x39\x6c\x31\x33\x30\x2e\x36\x2c\x31\x33\x30\x2e\
+\x36\x63\x31\x34\x2e\x31\x2c\x31\x34\x2e\x31\x2c\x33\x36\x2e\x38\
+\x2c\x31\x34\x2e\x31\x2c\x35\x30\x2e\x39\x2c\x30\x43\x34\x35\x31\
+\x2e\x35\x2c\x34\x32\x33\x2e\x34\x2c\x34\x35\x31\x2e\x35\x2c\x34\
+\x30\x30\x2e\x36\x2c\x34\x33\x37\x2e\x35\x2c\x33\x38\x36\x2e\x36\
+\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xb7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4d\
+\x61\x67\x6e\x69\x66\x79\x69\x6e\x67\x5f\x67\x6c\x61\x73\x73\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\
+\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\
+\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x79\x3d\x22\x30\x70\x78\x22\
+\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\
+\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\
+\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\
+\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\
+\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\
+\x4d\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x6c\x2d\
+\x33\x2e\x37\x37\x39\x2d\x33\x2e\x37\x37\x39\x63\x30\x2e\x35\x37\
+\x2d\x30\x2e\x39\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x32\x2e\x30\
+\x33\x35\x2c\x30\x2e\x38\x39\x38\x2d\x33\x2e\x32\x31\x63\x30\x2d\
+\x33\x2e\x34\x31\x37\x2d\x32\x2e\x39\x36\x31\x2d\x36\x2e\x33\x37\
+\x37\x2d\x36\x2e\x33\x37\x38\x2d\x36\x2e\x33\x37\x37\x0a\x09\x43\
+\x34\x2e\x38\x36\x39\x2c\x32\x2e\x31\x2c\x32\x2e\x31\x2c\x34\x2e\
+\x38\x37\x2c\x32\x2e\x31\x2c\x38\x2e\x32\x38\x37\x63\x30\x2c\x33\
+\x2e\x34\x31\x36\x2c\x32\x2e\x39\x36\x31\x2c\x36\x2e\x33\x37\x37\
+\x2c\x36\x2e\x33\x37\x37\x2c\x36\x2e\x33\x37\x37\x63\x31\x2e\x31\
+\x33\x37\x2c\x30\x2c\x32\x2e\x32\x2d\x30\x2e\x33\x30\x39\x2c\x33\
+\x2e\x31\x31\x35\x2d\x30\x2e\x38\x34\x34\x6c\x33\x2e\x37\x39\x39\
+\x2c\x33\x2e\x38\x30\x31\x0a\x09\x63\x30\x2e\x33\x37\x32\x2c\x30\
+\x2e\x33\x37\x31\x2c\x30\x2e\x39\x37\x35\x2c\x30\x2e\x33\x37\x31\
+\x2c\x31\x2e\x33\x34\x36\x2c\x30\x6c\x30\x2e\x39\x34\x33\x2d\x30\
+\x2e\x39\x34\x33\x43\x31\x38\x2e\x30\x35\x31\x2c\x31\x36\x2e\x33\
+\x30\x37\x2c\x31\x37\x2e\x39\x31\x36\x2c\x31\x35\x2e\x38\x33\x38\
+\x2c\x31\x37\x2e\x35\x34\x35\x2c\x31\x35\x2e\x34\x36\x37\x7a\x20\
+\x4d\x34\x2e\x30\x30\x34\x2c\x38\x2e\x32\x38\x37\x0a\x09\x63\x30\
+\x2d\x32\x2e\x33\x36\x36\x2c\x31\x2e\x39\x31\x37\x2d\x34\x2e\x32\
+\x38\x33\x2c\x34\x2e\x32\x38\x32\x2d\x34\x2e\x32\x38\x33\x63\x32\
+\x2e\x33\x36\x36\x2c\x30\x2c\x34\x2e\x34\x37\x34\x2c\x32\x2e\x31\
+\x30\x37\x2c\x34\x2e\x34\x37\x34\x2c\x34\x2e\x34\x37\x34\x63\x30\
+\x2c\x32\x2e\x33\x36\x35\x2d\x31\x2e\x39\x31\x38\x2c\x34\x2e\x32\
+\x38\x33\x2d\x34\x2e\x32\x38\x33\x2c\x34\x2e\x32\x38\x33\x0a\x09\
+\x43\x36\x2e\x31\x31\x31\x2c\x31\x32\x2e\x37\x36\x2c\x34\x2e\x30\
+\x30\x34\x2c\x31\x30\x2e\x36\x35\x32\x2c\x34\x2e\x30\x30\x34\x2c\
+\x38\x2e\x32\x38\x37\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x22\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x4c\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\
+\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\
+\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\
+\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\
+\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\x37\
+\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\
+\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\
+\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\
+\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\x2e\
+\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\x27\
+\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\
+\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\
+\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\
+\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\
+\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\
+\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\x20\
+\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\x6c\
+\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\
+\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\
+\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\
+\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\
+\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\x27\
+\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\
+\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\
+\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x34\
+\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\x37\
+\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\
+\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\
+\x00\x00\x03\xd9\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x72\
+\x69\x67\x68\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
+\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
+\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
+\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
+\x6e\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
+\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\
+\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\
+\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\
+\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\
+\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\
+\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\
+\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x31\x31\x2c\x31\x30\x4c\x38\x2e\x36\x39\
+\x38\x2c\x37\x2e\x34\x39\x34\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x38\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x39\
+\x2c\x30\x2d\x30\x2e\x37\x31\x38\x63\x30\x2e\x31\x39\x36\x2d\x30\
+\x2e\x31\x39\x37\x2c\x30\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\
+\x2c\x30\x2e\x37\x31\x2c\x30\x6c\x32\x2e\x38\x30\x37\x2c\x32\x2e\
+\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\
+\x39\x2c\x30\x2e\x31\x39\x36\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\
+\x2e\x37\x31\x37\x6c\x2d\x32\x2e\x38\x30\x37\x2c\x32\x2e\x38\x36\
+\x34\x63\x2d\x30\x2e\x31\x39\x35\x2c\x30\x2e\x31\x39\x39\x2d\x30\
+\x2e\x35\x31\x34\x2c\x30\x2e\x31\x39\x38\x2d\x30\x2e\x37\x31\x2c\
+\x30\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
+\x2e\x31\x39\x36\x2d\x30\x2e\x35\x31\x38\x2c\x30\x2d\x30\x2e\x37\
+\x31\x37\x4c\x31\x31\x2c\x31\x30\x7a\x20\x4d\x31\x30\x2c\x30\x2e\
+\x34\x0a\x09\x63\x35\x2e\x33\x30\x32\x2c\x30\x2c\x39\x2e\x36\x2c\
+\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\
+\x35\x2e\x33\x30\x33\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2d\
+\x39\x2e\x36\x2c\x39\x2e\x36\x53\x30\x2e\x34\x2c\x31\x35\x2e\x33\
+\x30\x33\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\x2c\x34\x2e\
+\x36\x39\x38\x2c\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\
+\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\
+\x0a\x09\x63\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\
+\x2d\x33\x2e\x37\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
+\x34\x63\x30\x2d\x34\x2e\x36\x31\x34\x2d\x33\x2e\x37\x34\x31\x2d\
+\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\
+\x34\x63\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\
+\x2c\x33\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\
+\x34\x0a\x09\x43\x31\x2e\x36\x34\x35\x2c\x31\x34\x2e\x36\x31\x34\
+\x2c\x35\x2e\x33\x38\x35\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\
+\x2c\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\xa3\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
+\x20\x34\x2e\x33\x35\x34\x33\x38\x20\x32\x34\x2e\x39\x32\x38\x37\
+\x20\x38\x2e\x34\x33\x32\x31\x37\x20\x31\x38\x2e\x30\x30\x31\x34\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x43\x20\x33\x31\x2e\x37\x33\x33\x39\x20\x2d\x33\x2e\x33\x31\x36\
+\x37\x35\x20\x35\x37\x2e\x32\x39\x34\x33\x20\x33\x2e\x35\x39\x37\
+\x39\x37\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\
+\x37\x38\x43\x20\x35\x38\x2e\x36\x37\x38\x38\x20\x33\x30\x2e\x38\
+\x30\x31\x39\x20\x35\x31\x2e\x31\x37\x38\x33\x20\x33\x37\x2e\x36\
+\x34\x34\x31\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\
+\x31\x31\x39\x43\x20\x32\x37\x2e\x34\x36\x34\x36\x20\x34\x39\x2e\
+\x30\x38\x31\x38\x20\x39\x2e\x32\x36\x34\x35\x31\x20\x34\x36\x2e\
+\x30\x39\x36\x34\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\
+\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x03\x03\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x63\x6b\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\
+\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\
+\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\
+\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\
+\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\x30\
+\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\
+\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x65\x6e\x61\x62\x6c\x65\
+\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\x77\
+\x20\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x20\x78\x6d\x6c\x3a\
+\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\
+\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x38\x2e\x32\x39\
+\x34\x2c\x31\x36\x2e\x39\x39\x38\x63\x2d\x30\x2e\x34\x33\x35\x2c\
+\x30\x2d\x30\x2e\x38\x34\x37\x2d\x30\x2e\x32\x30\x33\x2d\x31\x2e\
+\x31\x31\x31\x2d\x30\x2e\x35\x35\x33\x4c\x33\x2e\x36\x31\x2c\x31\
+\x31\x2e\x37\x32\x34\x63\x2d\x30\x2e\x34\x36\x35\x2d\x30\x2e\x36\
+\x31\x33\x2d\x30\x2e\x33\x34\x34\x2d\x31\x2e\x34\x38\x36\x2c\x30\
+\x2e\x32\x37\x2d\x31\x2e\x39\x35\x31\x0a\x09\x63\x30\x2e\x36\x31\
+\x35\x2d\x30\x2e\x34\x36\x37\x2c\x31\x2e\x34\x38\x38\x2d\x30\x2e\
+\x33\x34\x34\x2c\x31\x2e\x39\x35\x33\x2c\x30\x2e\x32\x37\x6c\x32\
+\x2e\x33\x35\x31\x2c\x33\x2e\x31\x30\x34\x6c\x35\x2e\x39\x31\x31\
+\x2d\x39\x2e\x34\x39\x32\x63\x30\x2e\x34\x30\x37\x2d\x30\x2e\x36\
+\x35\x32\x2c\x31\x2e\x32\x36\x37\x2d\x30\x2e\x38\x35\x32\x2c\x31\
+\x2e\x39\x32\x31\x2d\x30\x2e\x34\x34\x35\x0a\x09\x63\x30\x2e\x36\
+\x35\x33\x2c\x30\x2e\x34\x30\x36\x2c\x30\x2e\x38\x35\x34\x2c\x31\
+\x2e\x32\x36\x36\x2c\x30\x2e\x34\x34\x36\x2c\x31\x2e\x39\x32\x4c\
+\x39\x2e\x34\x37\x38\x2c\x31\x36\x2e\x33\x34\x63\x2d\x30\x2e\x32\
+\x34\x32\x2c\x30\x2e\x33\x39\x31\x2d\x30\x2e\x36\x36\x31\x2c\x30\
+\x2e\x36\x33\x35\x2d\x31\x2e\x31\x32\x2c\x30\x2e\x36\x35\x36\x43\
+\x38\x2e\x33\x33\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x33\
+\x31\x36\x2c\x31\x36\x2e\x39\x39\x38\x2c\x38\x2e\x32\x39\x34\x2c\
+\x31\x36\x2e\x39\x39\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\
+\x3e\x0a\
+\x00\x00\x02\x72\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x34\x32\x37\x2c\x32\x33\x34\x2e\x36\
+\x32\x35\x48\x31\x36\x37\x2e\x32\x39\x36\x6c\x31\x31\x39\x2e\x37\
+\x30\x32\x2d\x31\x31\x39\x2e\x37\x30\x32\x4c\x32\x35\x36\x2c\x38\
+\x35\x4c\x38\x35\x2c\x32\x35\x36\x6c\x31\x37\x31\x2c\x31\x37\x31\
+\x6c\x32\x39\x2e\x39\x32\x32\x2d\x32\x39\x2e\x39\x32\x34\x4c\x31\
+\x36\x37\x2e\x32\x39\x36\x2c\x32\x37\x37\x2e\x33\x37\x35\x48\x34\
+\x32\x37\x56\x32\x33\x34\x2e\x36\x32\x35\x7a\x22\x2f\x3e\x0a\x09\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x00\x6c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\
+\x30\x20\x30\x20\x32\x30\x20\x32\x30\x22\x3e\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x38\x20\x31\x32\x76\x31\x48\x38\x76\x35\
+\x6c\x2d\x36\x2d\x36\x20\x36\x2d\x36\x76\x35\x68\x38\x56\x32\x68\
+\x32\x7a\x22\x2f\x3e\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\x2a\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\
+\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\x36\x2e\x37\
+\x39\x35\x2c\x33\x39\x36\x2e\x38\x20\x33\x32\x30\x2c\x33\x39\x36\
+\x2e\x38\x20\x33\x32\x30\x2c\x34\x34\x38\x20\x34\x34\x38\x2c\x34\
+\x34\x38\x20\x34\x34\x38\x2c\x33\x32\x30\x20\x33\x39\x36\x2e\x37\
+\x39\x35\x2c\x33\x32\x30\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x33\x39\
+\x36\x2e\x38\x2c\x31\x31\x35\x2e\x32\x30\x35\x20\x33\x39\x36\x2e\
+\x38\x2c\x31\x39\x32\x20\x34\x34\x38\x2c\x31\x39\x32\x20\x34\x34\
+\x38\x2c\x36\x34\x20\x33\x32\x30\x2c\x36\x34\x20\x33\x32\x30\x2c\
+\x31\x31\x35\x2e\x32\x30\x35\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\
+\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\
+\x31\x35\x2e\x32\x30\x35\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\
+\x2c\x31\x31\x35\x2e\x32\x20\x31\x39\x32\x2c\x36\x34\x20\x36\x34\
+\x2c\x36\x34\x20\x36\x34\x2c\x31\x39\x32\x20\x31\x31\x35\x2e\x32\
+\x30\x35\x2c\x31\x39\x32\x20\x09\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x31\x31\
+\x35\x2e\x32\x2c\x33\x39\x36\x2e\x37\x39\x35\x20\x31\x31\x35\x2e\
+\x32\x2c\x33\x32\x30\x20\x36\x34\x2c\x33\x32\x30\x20\x36\x34\x2c\
+\x34\x34\x38\x20\x31\x39\x32\x2c\x34\x34\x38\x20\x31\x39\x32\x2c\
+\x33\x39\x36\x2e\x37\x39\x35\x20\x09\x22\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x01\x1c\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x0a\x20\x20\x20\x20\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x0a\
+\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\
+\x74\x72\x69\x78\x28\x34\x38\x20\x30\x20\x30\x20\x34\x38\x20\x34\
+\x38\x20\x34\x38\x29\x27\x3e\x0a\x20\x20\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x30\x20\x30\x76\x32\x68\x2e\x35\x63\x30\x2d\x2e\
+\x35\x35\x2e\x34\x35\x2d\x31\x20\x31\x2d\x31\x68\x31\x2e\x35\x76\
+\x35\x2e\x35\x63\x30\x20\x2e\x32\x38\x2d\x2e\x32\x32\x2e\x35\x2d\
+\x2e\x35\x2e\x35\x68\x2d\x2e\x35\x76\x31\x68\x34\x76\x2d\x31\x68\
+\x2d\x2e\x35\x63\x2d\x2e\x32\x38\x20\x30\x2d\x2e\x35\x2d\x2e\x32\
+\x32\x2d\x2e\x35\x2d\x2e\x35\x76\x2d\x35\x2e\x35\x68\x31\x2e\x35\
+\x63\x2e\x35\x35\x20\x30\x20\x31\x20\x2e\x34\x35\x20\x31\x20\x31\
+\x68\x2e\x35\x76\x2d\x32\x68\x2d\x38\x7a\x22\x20\x2f\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x54\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x37\x36\x63\x2d\x34\x34\x2e\
+\x30\x30\x34\x2c\x30\x2d\x38\x30\x2e\x30\x30\x31\x2c\x33\x36\x2d\
+\x38\x30\x2e\x30\x30\x31\x2c\x38\x30\x63\x30\x2c\x34\x34\x2e\x30\
+\x30\x34\x2c\x33\x35\x2e\x39\x39\x37\x2c\x38\x30\x2c\x38\x30\x2e\
+\x30\x30\x31\x2c\x38\x30\x63\x34\x34\x2e\x30\x30\x35\x2c\x30\x2c\
+\x37\x39\x2e\x39\x39\x39\x2d\x33\x35\x2e\x39\x39\x36\x2c\x37\x39\
+\x2e\x39\x39\x39\x2d\x38\x30\x0a\x09\x09\x09\x43\x33\x33\x35\x2e\
+\x39\x39\x39\x2c\x32\x31\x32\x2c\x33\x30\x30\x2e\x30\x30\x35\x2c\
+\x31\x37\x36\x2c\x32\x35\x36\x2c\x31\x37\x36\x7a\x20\x4d\x34\x34\
+\x36\x2e\x39\x33\x38\x2c\x32\x33\x34\x2e\x36\x36\x37\x63\x2d\x39\
+\x2e\x36\x30\x35\x2d\x38\x38\x2e\x35\x33\x31\x2d\x38\x31\x2e\x30\
+\x37\x34\x2d\x31\x36\x30\x2d\x31\x36\x39\x2e\x36\x30\x35\x2d\x31\
+\x36\x39\x2e\x35\x39\x39\x56\x33\x32\x68\x2d\x34\x32\x2e\x36\x36\
+\x36\x76\x33\x33\x2e\x30\x36\x37\x0a\x09\x09\x09\x63\x2d\x38\x38\
+\x2e\x35\x33\x31\x2c\x39\x2e\x35\x39\x39\x2d\x31\x36\x30\x2c\x38\
+\x31\x2e\x30\x36\x38\x2d\x31\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\
+\x39\x2e\x35\x39\x39\x48\x33\x32\x76\x34\x32\x2e\x36\x36\x37\x68\
+\x33\x33\x2e\x30\x36\x32\x63\x39\x2e\x36\x30\x34\x2c\x38\x38\x2e\
+\x35\x33\x31\x2c\x38\x31\x2e\x30\x37\x32\x2c\x31\x36\x30\x2c\x31\
+\x36\x39\x2e\x36\x30\x34\x2c\x31\x36\x39\x2e\x36\x30\x34\x56\x34\
+\x38\x30\x68\x34\x32\x2e\x36\x36\x36\x76\x2d\x33\x33\x2e\x30\x36\
+\x32\x0a\x09\x09\x09\x63\x38\x38\x2e\x35\x33\x31\x2d\x39\x2e\x36\
+\x30\x34\x2c\x31\x36\x30\x2d\x38\x31\x2e\x30\x37\x33\x2c\x31\x36\
+\x39\x2e\x36\x30\x35\x2d\x31\x36\x39\x2e\x36\x30\x34\x48\x34\x38\
+\x30\x76\x2d\x34\x32\x2e\x36\x36\x37\x48\x34\x34\x36\x2e\x39\x33\
+\x38\x7a\x20\x4d\x32\x35\x36\x2c\x34\x30\x35\x2e\x33\x33\x33\x63\
+\x2d\x38\x32\x2e\x31\x33\x37\x2c\x30\x2d\x31\x34\x39\x2e\x33\x33\
+\x34\x2d\x36\x37\x2e\x31\x39\x38\x2d\x31\x34\x39\x2e\x33\x33\x34\
+\x2d\x31\x34\x39\x2e\x33\x33\x33\x0a\x09\x09\x09\x63\x30\x2d\x38\
+\x32\x2e\x31\x33\x36\x2c\x36\x37\x2e\x31\x39\x37\x2d\x31\x34\x39\
+\x2e\x33\x33\x33\x2c\x31\x34\x39\x2e\x33\x33\x34\x2d\x31\x34\x39\
+\x2e\x33\x33\x33\x63\x38\x32\x2e\x31\x33\x35\x2c\x30\x2c\x31\x34\
+\x39\x2e\x33\x33\x32\x2c\x36\x37\x2e\x31\x39\x38\x2c\x31\x34\x39\
+\x2e\x33\x33\x32\x2c\x31\x34\x39\x2e\x33\x33\x33\x43\x34\x30\x35\
+\x2e\x33\x33\x32\x2c\x33\x33\x38\x2e\x31\x33\x35\x2c\x33\x33\x38\
+\x2e\x31\x33\x35\x2c\x34\x30\x35\x2e\x33\x33\x33\x2c\x32\x35\x36\
+\x2c\x34\x30\x35\x2e\x33\x33\x33\x7a\x0a\x09\x09\x09\x22\x2f\x3e\
+\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\x0a\
+\x00\x00\x02\x72\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x38\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\
+\x74\x68\x20\x64\x3d\x22\x4d\x38\x35\x2c\x32\x37\x37\x2e\x33\x37\
+\x35\x68\x32\x35\x39\x2e\x37\x30\x34\x4c\x32\x32\x35\x2e\x30\x30\
+\x32\x2c\x33\x39\x37\x2e\x30\x37\x37\x4c\x32\x35\x36\x2c\x34\x32\
+\x37\x6c\x31\x37\x31\x2d\x31\x37\x31\x4c\x32\x35\x36\x2c\x38\x35\
+\x6c\x2d\x32\x39\x2e\x39\x32\x32\x2c\x32\x39\x2e\x39\x32\x34\x6c\
+\x31\x31\x38\x2e\x36\x32\x36\x2c\x31\x31\x39\x2e\x37\x30\x31\x48\
+\x38\x35\x56\x32\x37\x37\x2e\x33\x37\x35\x7a\x22\x2f\x3e\x0a\x09\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x04\x13\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x4c\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x4c\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x4c\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x03\xdc\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\
+\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\
+\x32\x38\x63\x2d\x38\x31\x2e\x39\x2c\x30\x2d\x31\x34\x35\x2e\x37\
+\x2c\x34\x38\x2e\x38\x2d\x32\x32\x34\x2c\x31\x32\x38\x63\x36\x37\
+\x2e\x34\x2c\x36\x37\x2e\x37\x2c\x31\x32\x34\x2c\x31\x32\x38\x2c\
+\x32\x32\x34\x2c\x31\x32\x38\x63\x39\x39\x2e\x39\x2c\x30\x2c\x31\
+\x37\x33\x2e\x34\x2d\x37\x36\x2e\x34\x2c\x32\x32\x34\x2d\x31\x32\
+\x36\x2e\x36\x0a\x09\x09\x43\x34\x32\x38\x2e\x32\x2c\x31\x39\x38\
+\x2e\x36\x2c\x33\x35\x34\x2e\x38\x2c\x31\x32\x38\x2c\x32\x35\x36\
+\x2c\x31\x32\x38\x7a\x20\x4d\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\
+\x63\x2d\x34\x39\x2e\x34\x2c\x30\x2d\x38\x39\x2e\x36\x2d\x34\x31\
+\x2d\x38\x39\x2e\x36\x2d\x39\x31\x2e\x33\x63\x30\x2d\x35\x30\x2e\
+\x34\x2c\x34\x30\x2e\x32\x2d\x39\x31\x2e\x33\x2c\x38\x39\x2e\x36\
+\x2d\x39\x31\x2e\x33\x73\x38\x39\x2e\x36\x2c\x34\x31\x2c\x38\x39\
+\x2e\x36\x2c\x39\x31\x2e\x33\x0a\x09\x09\x43\x33\x34\x35\x2e\x36\
+\x2c\x33\x30\x36\x2e\x34\x2c\x33\x30\x35\x2e\x34\x2c\x33\x34\x37\
+\x2e\x33\x2c\x32\x35\x36\x2c\x33\x34\x37\x2e\x33\x7a\x22\x2f\x3e\
+\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x22\x4d\x32\x35\x36\x2c\x32\x32\x34\x63\x30\x2d\x37\x2e\x39\x2c\
+\x32\x2e\x39\x2d\x31\x35\x2e\x31\x2c\x37\x2e\x36\x2d\x32\x30\x2e\
+\x37\x63\x2d\x32\x2e\x35\x2d\x30\x2e\x34\x2d\x35\x2d\x30\x2e\x36\
+\x2d\x37\x2e\x36\x2d\x30\x2e\x36\x63\x2d\x32\x38\x2e\x38\x2c\x30\
+\x2d\x35\x32\x2e\x33\x2c\x32\x33\x2e\x39\x2d\x35\x32\x2e\x33\x2c\
+\x35\x33\x2e\x33\x63\x30\x2c\x32\x39\x2e\x34\x2c\x32\x33\x2e\x35\
+\x2c\x35\x33\x2e\x33\x2c\x35\x32\x2e\x33\x2c\x35\x33\x2e\x33\x0a\
+\x09\x09\x09\x73\x35\x32\x2e\x33\x2d\x32\x33\x2e\x39\x2c\x35\x32\
+\x2e\x33\x2d\x35\x33\x2e\x33\x63\x30\x2d\x32\x2e\x33\x2d\x30\x2e\
+\x32\x2d\x34\x2e\x36\x2d\x30\x2e\x34\x2d\x36\x2e\x39\x63\x2d\x35\
+\x2e\x35\x2c\x34\x2e\x33\x2d\x31\x32\x2e\x33\x2c\x36\x2e\x39\x2d\
+\x31\x39\x2e\x38\x2c\x36\x2e\x39\x43\x32\x37\x30\x2e\x33\x2c\x32\
+\x35\x36\x2c\x32\x35\x36\x2c\x32\x34\x31\x2e\x37\x2c\x32\x35\x36\
+\x2c\x32\x32\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x97\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x53\
+\x61\x76\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\x3d\x22\
+\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\
+\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\
+\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\
+\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\
+\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\
+\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x35\x2e\x31\x37\x33\x2c\
+\x32\x48\x34\x43\x32\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x2e\
+\x39\x2c\x32\x2c\x34\x76\x31\x32\x63\x30\x2c\x31\x2e\x31\x2c\x30\
+\x2e\x38\x39\x39\x2c\x32\x2c\x32\x2c\x32\x68\x31\x32\x63\x31\x2e\
+\x31\x30\x31\x2c\x30\x2c\x32\x2d\x30\x2e\x39\x2c\x32\x2d\x32\x56\
+\x35\x2e\x31\x32\x37\x4c\x31\x35\x2e\x31\x37\x33\x2c\x32\x7a\x20\
+\x4d\x31\x34\x2c\x38\x63\x30\x2c\x30\x2e\x35\x34\x39\x2d\x30\x2e\
+\x34\x35\x2c\x31\x2d\x31\x2c\x31\x48\x37\x0a\x09\x43\x36\x2e\x34\
+\x35\x2c\x39\x2c\x36\x2c\x38\x2e\x35\x34\x39\x2c\x36\x2c\x38\x56\
+\x33\x68\x38\x56\x38\x7a\x20\x4d\x31\x33\x2c\x34\x68\x2d\x32\x76\
+\x34\x68\x32\x56\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xe7\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x69\x72\x63\x6c\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\
+\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\
+\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\
+\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\
+\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\
+\x69\x6e\x6b\x22\x20\x78\x3d\x22\x35\x31\x32\x70\x78\x22\x20\x79\
+\x3d\x22\x35\x31\x32\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\
+\x6f\x78\x3d\x22\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\
+\x20\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\
+\x6e\x64\x3d\x22\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\
+\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\
+\x32\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x31\x30\x2c\x30\x2e\
+\x34\x43\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x30\x2e\x34\x2c\
+\x34\x2e\x36\x39\x38\x2c\x30\x2e\x34\x2c\x31\x30\x43\x30\x2e\x34\
+\x2c\x31\x35\x2e\x33\x30\x32\x2c\x34\x2e\x36\x39\x38\x2c\x31\x39\
+\x2e\x36\x2c\x31\x30\x2c\x31\x39\x2e\x36\x63\x35\x2e\x33\x30\x31\
+\x2c\x30\x2c\x39\x2e\x36\x2d\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\
+\x2d\x39\x2e\x36\x30\x31\x0a\x09\x43\x31\x39\x2e\x36\x2c\x34\x2e\
+\x36\x39\x38\x2c\x31\x35\x2e\x33\x30\x31\x2c\x30\x2e\x34\x2c\x31\
+\x30\x2c\x30\x2e\x34\x7a\x20\x4d\x31\x30\x2c\x31\x37\x2e\x35\x39\
+\x39\x63\x2d\x34\x2e\x31\x39\x37\x2c\x30\x2d\x37\x2e\x36\x2d\x33\
+\x2e\x34\x30\x32\x2d\x37\x2e\x36\x2d\x37\x2e\x36\x53\x35\x2e\x38\
+\x30\x32\x2c\x32\x2e\x34\x2c\x31\x30\x2c\x32\x2e\x34\x63\x34\x2e\
+\x31\x39\x37\x2c\x30\x2c\x37\x2e\x36\x30\x31\x2c\x33\x2e\x34\x30\
+\x32\x2c\x37\x2e\x36\x30\x31\x2c\x37\x2e\x36\x0a\x09\x53\x31\x34\
+\x2e\x31\x39\x37\x2c\x31\x37\x2e\x35\x39\x39\x2c\x31\x30\x2c\x31\
+\x37\x2e\x35\x39\x39\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x16\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x63\x69\x72\x63\x6c\
+\x65\x20\x63\x78\x3d\x22\x32\x35\x36\x22\x20\x63\x79\x3d\x22\x32\
+\x38\x30\x22\x20\x72\x3d\x22\x36\x33\x22\x2f\x3e\x0a\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x34\x30\x2c\x39\x36\x68\x2d\
+\x38\x38\x6c\x2d\x33\x32\x2d\x33\x32\x48\x31\x39\x32\x6c\x2d\x33\
+\x32\x2c\x33\x32\x48\x37\x32\x63\x2d\x32\x32\x2e\x30\x39\x32\x2c\
+\x30\x2d\x34\x30\x2c\x31\x37\x2e\x39\x30\x38\x2d\x34\x30\x2c\x34\
+\x30\x76\x32\x37\x32\x63\x30\x2c\x32\x32\x2e\x30\x39\x32\x2c\x31\
+\x37\x2e\x39\x30\x38\x2c\x34\x30\x2c\x34\x30\x2c\x34\x30\x68\x33\
+\x36\x38\x63\x32\x32\x2e\x30\x39\x32\x2c\x30\x2c\x34\x30\x2d\x31\
+\x37\x2e\x39\x30\x38\x2c\x34\x30\x2d\x34\x30\x0a\x09\x09\x56\x31\
+\x33\x36\x43\x34\x38\x30\x2c\x31\x31\x33\x2e\x39\x30\x38\x2c\x34\
+\x36\x32\x2e\x30\x39\x32\x2c\x39\x36\x2c\x34\x34\x30\x2c\x39\x36\
+\x7a\x20\x4d\x32\x35\x36\x2c\x33\x39\x32\x63\x2d\x36\x31\x2e\x38\
+\x35\x35\x2c\x30\x2d\x31\x31\x32\x2d\x35\x30\x2e\x31\x34\x35\x2d\
+\x31\x31\x32\x2d\x31\x31\x32\x73\x35\x30\x2e\x31\x34\x35\x2d\x31\
+\x31\x32\x2c\x31\x31\x32\x2d\x31\x31\x32\x73\x31\x31\x32\x2c\x35\
+\x30\x2e\x31\x34\x35\x2c\x31\x31\x32\x2c\x31\x31\x32\x0a\x09\x09\
+\x53\x33\x31\x37\x2e\x38\x35\x35\x2c\x33\x39\x32\x2c\x32\x35\x36\
+\x2c\x33\x39\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x3f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x32\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x31\x35\x32\x63\
+\x2d\x35\x37\x2e\x32\x2c\x30\x2d\x31\x30\x34\x2c\x34\x36\x2e\x38\
+\x2d\x31\x30\x34\x2c\x31\x30\x34\x73\x34\x36\x2e\x38\x2c\x31\x30\
+\x34\x2c\x31\x30\x34\x2c\x31\x30\x34\x73\x31\x30\x34\x2d\x34\x36\
+\x2e\x38\x2c\x31\x30\x34\x2d\x31\x30\x34\x53\x33\x31\x33\x2e\x32\
+\x2c\x31\x35\x32\x2c\x32\x35\x36\x2c\x31\x35\x32\x7a\x20\x4d\x32\
+\x35\x36\x2c\x34\x38\x0a\x09\x09\x09\x43\x31\x34\x31\x2e\x36\x30\
+\x31\x2c\x34\x38\x2c\x34\x38\x2c\x31\x34\x31\x2e\x36\x30\x31\x2c\
+\x34\x38\x2c\x32\x35\x36\x73\x39\x33\x2e\x36\x30\x31\x2c\x32\x30\
+\x38\x2c\x32\x30\x38\x2c\x32\x30\x38\x73\x32\x30\x38\x2d\x39\x33\
+\x2e\x36\x30\x31\x2c\x32\x30\x38\x2d\x32\x30\x38\x53\x33\x37\x30\
+\x2e\x33\x39\x39\x2c\x34\x38\x2c\x32\x35\x36\x2c\x34\x38\x7a\x20\
+\x4d\x32\x35\x36\x2c\x34\x32\x32\x2e\x34\x0a\x09\x09\x09\x63\x2d\
+\x39\x31\x2e\x35\x31\x38\x2c\x30\x2d\x31\x36\x36\x2e\x34\x2d\x37\
+\x34\x2e\x38\x38\x33\x2d\x31\x36\x36\x2e\x34\x2d\x31\x36\x36\x2e\
+\x34\x53\x31\x36\x34\x2e\x34\x38\x32\x2c\x38\x39\x2e\x36\x2c\x32\
+\x35\x36\x2c\x38\x39\x2e\x36\x53\x34\x32\x32\x2e\x34\x2c\x31\x36\
+\x34\x2e\x34\x38\x32\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\x36\x53\
+\x33\x34\x37\x2e\x35\x31\x38\x2c\x34\x32\x32\x2e\x34\x2c\x32\x35\
+\x36\x2c\x34\x32\x32\x2e\x34\x7a\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x42\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x69\x73\x6f\
+\x2d\x38\x38\x35\x39\x2d\x31\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\
+\x47\x65\x6e\x65\x72\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\
+\x20\x49\x6c\x6c\x75\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\
+\x30\x2e\x30\x2c\x20\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\
+\x50\x6c\x75\x67\x2d\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\
+\x72\x73\x69\x6f\x6e\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\
+\x64\x20\x30\x29\x20\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\
+\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\
+\x22\x4c\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x22\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\x20\x34\
+\x32\x33\x2e\x37\x35\x34\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\x65\
+\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\
+\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x34\x32\x33\x2e\x37\x35\x34\
+\x20\x34\x32\x33\x2e\x37\x35\x34\x3b\x22\x20\x78\x6d\x6c\x3a\x73\
+\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x30\x37\x2e\x35\
+\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x6c\x2d\x32\x37\x2e\x37\
+\x31\x37\x2c\x31\x31\x2e\x34\x38\x63\x31\x38\x2e\x35\x38\x35\x2c\
+\x34\x34\x2e\x38\x36\x39\x2c\x31\x38\x2e\x35\x38\x35\x2c\x39\x34\
+\x2e\x32\x39\x31\x2c\x30\x2c\x31\x33\x39\x2e\x31\x35\x39\x63\x2d\
+\x31\x38\x2e\x35\x38\x35\x2c\x34\x34\x2e\x38\x36\x39\x2d\x35\x33\
+\x2e\x35\x33\x31\x2c\x37\x39\x2e\x38\x31\x35\x2d\x39\x38\x2e\x34\
+\x2c\x39\x38\x2e\x34\x0a\x09\x63\x2d\x32\x32\x2e\x34\x33\x38\x2c\
+\x39\x2e\x32\x39\x33\x2d\x34\x36\x2e\x30\x30\x34\x2c\x31\x33\x2e\
+\x39\x34\x2d\x36\x39\x2e\x35\x37\x39\x2c\x31\x33\x2e\x39\x33\x39\
+\x63\x2d\x32\x33\x2e\x35\x36\x39\x2d\x30\x2e\x30\x30\x31\x2d\x34\
+\x37\x2e\x31\x34\x37\x2d\x34\x2e\x36\x34\x37\x2d\x36\x39\x2e\x35\
+\x37\x39\x2d\x31\x33\x2e\x39\x33\x39\x63\x2d\x34\x34\x2e\x38\x36\
+\x39\x2d\x31\x38\x2e\x35\x38\x35\x2d\x37\x39\x2e\x38\x31\x35\x2d\
+\x35\x33\x2e\x35\x33\x31\x2d\x39\x38\x2e\x34\x2d\x39\x38\x2e\x34\
+\x0a\x09\x43\x31\x33\x2e\x35\x30\x37\x2c\x32\x30\x30\x2e\x36\x34\
+\x37\x2c\x33\x34\x2e\x37\x35\x38\x2c\x31\x31\x38\x2e\x37\x31\x2c\
+\x39\x30\x2e\x37\x35\x38\x2c\x36\x38\x2e\x36\x34\x34\x6c\x36\x30\
+\x2e\x38\x30\x31\x2c\x36\x30\x2e\x38\x30\x31\x56\x37\x2e\x35\x32\
+\x31\x48\x32\x39\x2e\x36\x33\x35\x4c\x36\x39\x2e\x35\x31\x34\x2c\
+\x34\x37\x2e\x34\x43\x35\x2e\x32\x32\x32\x2c\x31\x30\x35\x2e\x38\
+\x32\x36\x2d\x31\x38\x2e\x39\x38\x35\x2c\x32\x30\x30\x2e\x36\x2c\
+\x31\x36\x2e\x31\x32\x33\x2c\x32\x38\x35\x2e\x33\x35\x39\x0a\x09\
+\x63\x32\x31\x2e\x36\x35\x32\x2c\x35\x32\x2e\x32\x37\x32\x2c\x36\
+\x32\x2e\x33\x36\x34\x2c\x39\x32\x2e\x39\x38\x34\x2c\x31\x31\x34\
+\x2e\x36\x33\x36\x2c\x31\x31\x34\x2e\x36\x33\x36\x63\x32\x36\x2e\
+\x31\x33\x37\x2c\x31\x30\x2e\x38\x32\x36\x2c\x35\x33\x2e\x35\x39\
+\x39\x2c\x31\x36\x2e\x32\x33\x39\x2c\x38\x31\x2e\x30\x36\x31\x2c\
+\x31\x36\x2e\x32\x33\x39\x73\x35\x34\x2e\x39\x32\x34\x2d\x35\x2e\
+\x34\x31\x33\x2c\x38\x31\x2e\x30\x36\x2d\x31\x36\x2e\x32\x33\x39\
+\x0a\x09\x63\x35\x32\x2e\x32\x37\x32\x2d\x32\x31\x2e\x36\x35\x32\
+\x2c\x39\x32\x2e\x39\x38\x34\x2d\x36\x32\x2e\x33\x36\x34\x2c\x31\
+\x31\x34\x2e\x36\x33\x37\x2d\x31\x31\x34\x2e\x36\x33\x36\x43\x34\
+\x32\x39\x2e\x31\x36\x37\x2c\x32\x33\x33\x2e\x30\x38\x37\x2c\x34\
+\x32\x39\x2e\x31\x36\x37\x2c\x31\x37\x35\x2e\x35\x31\x31\x2c\x34\
+\x30\x37\x2e\x35\x31\x36\x2c\x31\x32\x33\x2e\x32\x33\x39\x7a\x22\
+\x2f\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\
+\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\
+\x0a\x3c\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x0a\
+\x00\x00\x07\x6b\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\x30\
+\x35\x36\x63\x33\x2e\x37\x32\x33\x2d\x30\x2e\x36\x37\x2c\x37\x2e\
+\x35\x38\x39\x2d\x31\x2e\x30\x34\x31\x2c\x31\x31\x2e\x35\x38\x36\
+\x2d\x31\x2e\x30\x34\x31\x4c\x32\x30\x31\x2e\x39\x32\x34\x2c\x32\
+\x34\x38\x68\x31\x30\x33\x2e\x38\x32\x33\x63\x34\x2e\x35\x30\x33\
+\x2c\x30\x2c\x38\x2e\x38\x30\x36\x2d\x30\x2e\x36\x31\x37\x2c\x31\
+\x32\x2e\x39\x30\x38\x2d\x31\x2e\x37\x35\x34\x0a\x09\x09\x63\x31\
+\x39\x2e\x33\x37\x2d\x35\x2e\x33\x36\x33\x2c\x33\x33\x2e\x33\x34\
+\x35\x2d\x32\x32\x2e\x35\x33\x37\x2c\x33\x33\x2e\x33\x34\x35\x2d\
+\x34\x33\x2e\x36\x36\x33\x76\x2d\x33\x30\x2e\x38\x32\x32\x76\x2d\
+\x35\x36\x2e\x34\x30\x32\x63\x30\x2d\x32\x34\x2e\x38\x33\x32\x2d\
+\x32\x31\x2e\x31\x35\x2d\x34\x33\x2e\x34\x38\x34\x2d\x34\x36\x2e\
+\x32\x38\x39\x2d\x34\x37\x2e\x36\x30\x36\x0a\x09\x09\x63\x2d\x31\
+\x35\x2e\x39\x33\x31\x2d\x32\x2e\x36\x32\x34\x2d\x33\x39\x2e\x32\
+\x35\x38\x2d\x33\x2e\x38\x32\x37\x2d\x35\x35\x2e\x30\x38\x39\x2d\
+\x33\x2e\x37\x34\x39\x63\x2d\x31\x35\x2e\x38\x32\x39\x2c\x30\x2e\
+\x30\x38\x36\x2d\x33\x30\x2e\x39\x38\x31\x2c\x31\x2e\x34\x30\x34\
+\x2d\x34\x34\x2e\x32\x37\x37\x2c\x33\x2e\x37\x34\x39\x43\x31\x36\
+\x37\x2e\x31\x34\x33\x2c\x37\x34\x2e\x35\x37\x36\x2c\x31\x36\x30\
+\x2c\x38\x38\x2e\x39\x32\x38\x2c\x31\x36\x30\x2c\x31\x31\x35\x2e\
+\x33\x35\x39\x56\x31\x34\x34\x68\x39\x36\x0a\x09\x09\x76\x31\x36\
+\x48\x31\x32\x38\x2e\x38\x32\x63\x2d\x33\x35\x2e\x36\x32\x38\x2c\
+\x30\x2d\x36\x34\x2e\x35\x33\x38\x2c\x34\x32\x2e\x35\x37\x31\x2d\
+\x36\x34\x2e\x38\x31\x33\x2c\x39\x35\x2e\x32\x34\x32\x43\x36\x34\
+\x2e\x30\x30\x35\x2c\x32\x35\x35\x2e\x34\x39\x35\x2c\x36\x34\x2c\
+\x32\x35\x35\x2e\x37\x34\x37\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\
+\x2c\x39\x2e\x35\x32\x33\x2c\x30\x2e\x39\x34\x2c\x31\x38\x2e\x37\
+\x32\x2c\x32\x2e\x36\x38\x35\x2c\x32\x37\x2e\x34\x30\x34\x0a\x09\
+\x09\x43\x37\x34\x2e\x36\x34\x38\x2c\x33\x32\x33\x2e\x30\x37\x2c\
+\x39\x39\x2e\x34\x35\x31\x2c\x33\x35\x32\x2c\x31\x32\x38\x2e\x38\
+\x32\x2c\x33\x35\x32\x48\x31\x34\x34\x76\x2d\x32\x2e\x36\x36\x32\
+\x76\x2d\x34\x33\x2e\x32\x37\x33\x43\x31\x34\x34\x2c\x32\x37\x39\
+\x2e\x32\x33\x38\x2c\x31\x36\x34\x2e\x31\x34\x36\x2c\x32\x35\x34\
+\x2e\x33\x33\x32\x2c\x31\x39\x33\x2e\x34\x36\x2c\x32\x34\x39\x2e\
+\x30\x35\x36\x7a\x20\x4d\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\
+\x37\x2e\x30\x30\x32\x0a\x09\x09\x63\x2d\x39\x2e\x35\x39\x32\x2c\
+\x30\x2d\x31\x37\x2e\x33\x38\x34\x2d\x37\x2e\x37\x38\x35\x2d\x31\
+\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x34\x30\x33\x63\x30\x2d\x39\
+\x2e\x36\x36\x34\x2c\x37\x2e\x37\x37\x34\x2d\x31\x37\x2e\x35\x32\
+\x2c\x31\x37\x2e\x33\x38\x34\x2d\x31\x37\x2e\x35\x32\x63\x39\x2e\
+\x35\x37\x34\x2c\x30\x2c\x31\x37\x2e\x33\x39\x39\x2c\x37\x2e\x38\
+\x35\x35\x2c\x31\x37\x2e\x33\x39\x39\x2c\x31\x37\x2e\x35\x32\x0a\
+\x09\x09\x43\x32\x32\x31\x2e\x30\x35\x36\x2c\x31\x31\x39\x2e\x32\
+\x31\x37\x2c\x32\x31\x33\x2e\x32\x34\x36\x2c\x31\x32\x37\x2e\x30\
+\x30\x32\x2c\x32\x30\x33\x2e\x36\x35\x36\x2c\x31\x32\x37\x2e\x30\
+\x30\x32\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x22\x4d\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\x34\
+\x33\x43\x34\x33\x34\x2e\x37\x38\x2c\x31\x38\x36\x2e\x30\x32\x31\
+\x2c\x34\x31\x31\x2e\x30\x33\x33\x2c\x31\x36\x30\x2c\x33\x38\x33\
+\x2e\x31\x38\x2c\x31\x36\x30\x48\x33\x36\x38\x76\x32\x2e\x36\x32\
+\x36\x76\x33\x38\x2e\x30\x34\x36\x63\x30\x2c\x33\x33\x2e\x39\x31\
+\x35\x2d\x32\x32\x2e\x32\x38\x36\x2c\x35\x38\x2e\x34\x37\x34\x2d\
+\x34\x39\x2e\x34\x38\x39\x2c\x36\x32\x2e\x36\x38\x31\x0a\x09\x09\
+\x63\x2d\x32\x2e\x37\x33\x37\x2c\x30\x2e\x34\x32\x34\x2d\x35\x2e\
+\x34\x38\x33\x2c\x30\x2e\x36\x34\x36\x2d\x38\x2e\x33\x30\x31\x2c\
+\x30\x2e\x36\x34\x36\x48\x32\x30\x36\x2e\x33\x35\x31\x63\x2d\x34\
+\x2e\x35\x31\x38\x2c\x30\x2d\x38\x2e\x39\x30\x34\x2c\x30\x2e\x35\
+\x38\x34\x2d\x31\x33\x2e\x30\x34\x39\x2c\x31\x2e\x36\x37\x32\x43\
+\x31\x37\x34\x2e\x31\x38\x2c\x32\x37\x30\x2e\x36\x38\x39\x2c\x31\
+\x36\x30\x2c\x32\x38\x36\x2e\x36\x2c\x31\x36\x30\x2c\x33\x30\x37\
+\x2e\x32\x33\x36\x76\x33\x32\x2e\x39\x32\x32\x0a\x09\x09\x76\x35\
+\x34\x2e\x33\x30\x35\x63\x30\x2c\x32\x34\x2e\x38\x33\x32\x2c\x32\
+\x34\x2e\x39\x37\x37\x2c\x33\x39\x2e\x34\x32\x36\x2c\x34\x39\x2e\
+\x34\x38\x31\x2c\x34\x36\x2e\x35\x35\x31\x63\x32\x39\x2e\x33\x32\
+\x37\x2c\x38\x2e\x35\x33\x31\x2c\x36\x31\x2e\x32\x36\x37\x2c\x31\
+\x30\x2e\x30\x36\x38\x2c\x39\x36\x2e\x33\x36\x36\x2c\x30\x43\x33\
+\x32\x39\x2e\x31\x35\x2c\x34\x33\x34\x2e\x33\x35\x34\x2c\x33\x35\
+\x32\x2c\x34\x32\x30\x2e\x38\x39\x33\x2c\x33\x35\x32\x2c\x33\x39\
+\x34\x2e\x34\x36\x33\x56\x33\x36\x38\x0a\x09\x09\x68\x2d\x39\x36\
+\x76\x2d\x31\x36\x68\x31\x32\x37\x2e\x31\x38\x63\x32\x35\x2e\x32\
+\x34\x2c\x30\x2c\x34\x37\x2e\x31\x30\x37\x2d\x32\x31\x2e\x33\x36\
+\x35\x2c\x35\x37\x2e\x38\x31\x34\x2d\x35\x32\x2e\x35\x34\x39\x43\
+\x34\x34\x35\x2e\x34\x37\x34\x2c\x32\x38\x36\x2e\x34\x30\x34\x2c\
+\x34\x34\x38\x2c\x32\x37\x31\x2e\x36\x34\x31\x2c\x34\x34\x38\x2c\
+\x32\x35\x36\x0a\x09\x09\x43\x34\x34\x38\x2c\x32\x34\x34\x2e\x32\
+\x33\x32\x2c\x34\x34\x36\x2e\x35\x36\x37\x2c\x32\x33\x32\x2e\x39\
+\x36\x32\x2c\x34\x34\x33\x2e\x39\x35\x31\x2c\x32\x32\x32\x2e\x35\
+\x34\x33\x7a\x20\x4d\x33\x30\x37\x2e\x38\x36\x37\x2c\x33\x38\x32\
+\x2e\x38\x32\x63\x39\x2e\x35\x39\x2c\x30\x2c\x31\x37\x2e\x33\x38\
+\x31\x2c\x37\x2e\x37\x38\x35\x2c\x31\x37\x2e\x33\x38\x31\x2c\x31\
+\x37\x2e\x34\x0a\x09\x09\x63\x30\x2c\x39\x2e\x36\x35\x2d\x37\x2e\
+\x37\x39\x31\x2c\x31\x37\x2e\x35\x32\x31\x2d\x31\x37\x2e\x33\x38\
+\x31\x2c\x31\x37\x2e\x35\x32\x31\x63\x2d\x39\x2e\x35\x37\x37\x2c\
+\x30\x2d\x31\x37\x2e\x33\x39\x39\x2d\x37\x2e\x38\x37\x31\x2d\x31\
+\x37\x2e\x33\x39\x39\x2d\x31\x37\x2e\x35\x32\x31\x43\x32\x39\x30\
+\x2e\x34\x36\x38\x2c\x33\x39\x30\x2e\x35\x39\x2c\x32\x39\x38\x2e\
+\x32\x37\x34\x2c\x33\x38\x32\x2e\x38\x32\x2c\x33\x30\x37\x2e\x38\
+\x36\x37\x2c\x33\x38\x32\x2e\x38\x32\x7a\x22\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\x16\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x31\x32\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x22\x4d\x32\x35\x36\x2c\x36\x34\x43\x31\
+\x35\x30\x2e\x34\x30\x31\x2c\x36\x34\x2c\x36\x34\x2c\x31\x35\x30\
+\x2e\x34\x30\x31\x2c\x36\x34\x2c\x32\x35\x36\x63\x30\x2c\x31\x30\
+\x35\x2e\x36\x30\x34\x2c\x38\x36\x2e\x34\x30\x31\x2c\x31\x39\x32\
+\x2c\x31\x39\x32\x2c\x31\x39\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2c\x33\x32\x2d\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2d\x33\
+\x32\x0a\x09\x09\x09\x63\x30\x2d\x38\x2e\x35\x33\x31\x2d\x33\x2e\
+\x31\x39\x38\x2d\x31\x36\x2d\x38\x2e\x35\x33\x31\x2d\x32\x31\x2e\
+\x33\x33\x33\x63\x2d\x35\x2e\x33\x33\x33\x2d\x35\x2e\x33\x33\x34\
+\x2d\x38\x2e\x35\x33\x31\x2d\x31\x32\x2e\x38\x30\x33\x2d\x38\x2e\
+\x35\x33\x31\x2d\x32\x31\x2e\x33\x33\x34\x63\x30\x2d\x31\x38\x2e\
+\x31\x33\x35\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\
+\x2d\x33\x32\x68\x33\x38\x2e\x33\x39\x36\x0a\x09\x09\x09\x63\x35\
+\x38\x2e\x36\x36\x37\x2c\x30\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\
+\x34\x38\x2c\x31\x30\x36\x2e\x36\x36\x37\x2d\x31\x30\x36\x2e\x36\
+\x36\x36\x43\x34\x34\x38\x2c\x31\x34\x30\x2e\x38\x30\x32\x2c\x33\
+\x36\x31\x2e\x36\x30\x34\x2c\x36\x34\x2c\x32\x35\x36\x2c\x36\x34\
+\x7a\x20\x4d\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x63\x2d\
+\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\x38\
+\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\x2e\x38\x36\x34\x2d\
+\x33\x32\x2c\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\
+\x31\x33\x35\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\
+\x33\x32\x2c\x33\x32\x53\x31\x35\x36\x2e\x38\x30\x32\x2c\x32\x35\
+\x36\x2c\x31\x33\x38\x2e\x36\x36\x37\x2c\x32\x35\x36\x7a\x20\x4d\
+\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x63\
+\x2d\x31\x38\x2e\x31\x33\x36\x2c\x30\x2d\x33\x32\x2d\x31\x33\x2e\
+\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x63\x30\x2d\x31\x38\x2e\x31\
+\x33\x36\x2c\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2c\x33\x32\x2d\
+\x33\x32\x0a\x09\x09\x09\x63\x31\x38\x2e\x31\x33\x35\x2c\x30\x2c\
+\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\x32\x43\
+\x32\x33\x34\x2e\x36\x36\x37\x2c\x31\x35\x36\x2e\x38\x30\x32\x2c\
+\x32\x32\x30\x2e\x38\x30\x32\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
+\x32\x30\x32\x2e\x36\x36\x37\x2c\x31\x37\x30\x2e\x36\x36\x37\x7a\
+\x20\x4d\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\x2d\x31\
+\x33\x2e\x38\x36\x35\x2d\x33\x32\x2d\x33\x32\x0a\x09\x09\x09\x63\
+\x30\x2d\x31\x38\x2e\x31\x33\x36\x2c\x31\x33\x2e\x38\x36\x35\x2d\
+\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\x2e\x31\x33\x36\x2c\
+\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\x2c\x33\x32\x2c\x33\
+\x32\x43\x33\x34\x31\x2e\x33\x33\x33\x2c\x31\x35\x36\x2e\x38\x30\
+\x32\x2c\x33\x32\x37\x2e\x34\x36\x39\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x2c\x33\x30\x39\x2e\x33\x33\x33\x2c\x31\x37\x30\x2e\x36\x36\
+\x37\x7a\x20\x4d\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x0a\
+\x09\x09\x09\x63\x2d\x31\x38\x2e\x31\x33\x35\x2c\x30\x2d\x33\x32\
+\x2d\x31\x33\x2e\x38\x36\x34\x2d\x33\x32\x2d\x33\x32\x73\x31\x33\
+\x2e\x38\x36\x35\x2d\x33\x32\x2c\x33\x32\x2d\x33\x32\x63\x31\x38\
+\x2e\x31\x33\x36\x2c\x30\x2c\x33\x32\x2c\x31\x33\x2e\x38\x36\x34\
+\x2c\x33\x32\x2c\x33\x32\x53\x33\x39\x31\x2e\x34\x36\x39\x2c\x32\
+\x35\x36\x2c\x33\x37\x33\x2e\x33\x33\x33\x2c\x32\x35\x36\x7a\x22\
+\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\xbb\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x63\x2d\x31\x34\
+\x2e\x35\x38\x35\x2d\x31\x34\x2e\x35\x37\x37\x2d\x33\x36\x2e\x30\
+\x35\x34\x2d\x31\x35\x2e\x38\x39\x2d\x35\x30\x2e\x36\x33\x39\x2d\
+\x31\x2e\x33\x31\x32\x6c\x2d\x34\x31\x2e\x36\x38\x37\x2c\x34\x31\
+\x2e\x36\x36\x34\x63\x2d\x31\x30\x2e\x38\x35\x32\x2c\x31\x30\x2e\
+\x38\x33\x36\x2d\x32\x33\x2e\x39\x33\x2c\x31\x30\x2e\x38\x35\x39\
+\x2d\x33\x31\x2e\x35\x36\x34\x2c\x31\x2e\x38\x35\x32\x0a\x09\x63\
+\x2d\x35\x2e\x30\x35\x37\x2d\x35\x2e\x39\x36\x38\x2d\x33\x2e\x30\
+\x36\x31\x2d\x32\x34\x2e\x33\x37\x34\x2d\x31\x2e\x36\x34\x34\x2d\
+\x33\x36\x2e\x30\x34\x39\x6c\x32\x30\x2e\x39\x30\x37\x2d\x31\x37\
+\x31\x2e\x38\x34\x39\x63\x31\x2e\x38\x36\x37\x2d\x31\x35\x2e\x33\
+\x35\x33\x2d\x39\x2e\x30\x37\x2d\x33\x30\x2e\x31\x38\x35\x2d\x32\
+\x34\x2e\x34\x33\x2d\x33\x32\x2e\x30\x35\x31\x0a\x09\x63\x2d\x31\
+\x35\x2e\x33\x35\x38\x2d\x31\x2e\x38\x36\x37\x2d\x32\x39\x2e\x33\
+\x32\x32\x2c\x39\x2e\x39\x33\x39\x2d\x33\x31\x2e\x31\x39\x31\x2c\
+\x32\x35\x2e\x32\x38\x39\x4c\x32\x36\x37\x2e\x33\x37\x2c\x32\x33\
+\x36\x2e\x30\x32\x31\x63\x2d\x31\x2e\x32\x30\x35\x2c\x33\x2e\x33\
+\x35\x38\x2d\x33\x2e\x37\x39\x2c\x33\x2e\x39\x33\x38\x2d\x34\x2e\
+\x30\x38\x31\x2d\x30\x2e\x35\x38\x32\x4c\x32\x35\x35\x2e\x34\x34\
+\x2c\x36\x30\x0a\x09\x63\x30\x2d\x31\x35\x2e\x34\x36\x35\x2d\x31\
+\x32\x2e\x35\x34\x32\x2d\x32\x38\x2d\x32\x38\x2e\x30\x31\x34\x2d\
+\x32\x38\x63\x2d\x31\x35\x2e\x34\x37\x33\x2c\x30\x2d\x32\x38\x2e\
+\x30\x31\x35\x2c\x31\x32\x2e\x35\x33\x35\x2d\x32\x38\x2e\x30\x31\
+\x35\x2c\x32\x38\x6c\x2d\x30\x2e\x35\x35\x32\x2c\x31\x37\x36\x2e\
+\x37\x35\x32\x63\x30\x2e\x31\x34\x36\x2c\x32\x2e\x30\x34\x2d\x31\
+\x2e\x36\x30\x34\x2c\x32\x2e\x36\x32\x34\x2d\x31\x2e\x39\x32\x2c\
+\x30\x2e\x32\x39\x34\x4c\x31\x37\x32\x2e\x30\x31\x36\x2c\x39\x39\
+\x2e\x30\x37\x37\x0a\x09\x63\x2d\x32\x2e\x37\x35\x2d\x31\x35\x2e\
+\x32\x31\x39\x2d\x31\x37\x2e\x33\x32\x33\x2d\x32\x36\x2e\x32\x30\
+\x33\x2d\x33\x32\x2e\x35\x34\x38\x2d\x32\x33\x2e\x34\x35\x33\x63\
+\x2d\x31\x35\x2e\x32\x32\x37\x2c\x32\x2e\x37\x34\x38\x2d\x32\x35\
+\x2e\x33\x33\x39\x2c\x31\x38\x2e\x31\x38\x37\x2d\x32\x32\x2e\x35\
+\x39\x31\x2c\x33\x33\x2e\x34\x30\x33\x6c\x32\x32\x2e\x31\x39\x33\
+\x2c\x31\x36\x31\x2e\x34\x35\x35\x0a\x09\x63\x30\x2e\x30\x32\x33\
+\x2c\x32\x2e\x38\x37\x32\x2d\x30\x2e\x39\x34\x31\x2c\x34\x2e\x35\
+\x31\x33\x2d\x32\x2e\x33\x30\x38\x2c\x30\x2e\x38\x33\x31\x6c\x2d\
+\x33\x33\x2e\x31\x30\x39\x2d\x38\x38\x2e\x35\x31\x37\x63\x2d\x35\
+\x2e\x31\x38\x2d\x31\x34\x2e\x35\x37\x32\x2d\x32\x31\x2e\x31\x39\
+\x36\x2d\x32\x33\x2e\x30\x36\x35\x2d\x33\x35\x2e\x37\x37\x36\x2d\
+\x31\x37\x2e\x38\x38\x39\x0a\x09\x63\x2d\x31\x34\x2e\x35\x37\x39\
+\x2c\x35\x2e\x31\x37\x37\x2d\x32\x32\x2e\x32\x30\x31\x2c\x32\x32\
+\x2e\x30\x36\x31\x2d\x31\x37\x2e\x30\x32\x33\x2c\x33\x36\x2e\x36\
+\x33\x31\x6c\x35\x38\x2e\x30\x34\x32\x2c\x31\x38\x39\x2e\x36\x32\
+\x35\x63\x30\x2e\x33\x30\x33\x2c\x31\x2e\x30\x34\x36\x2c\x30\x2e\
+\x36\x32\x34\x2c\x32\x2e\x30\x38\x35\x2c\x30\x2e\x39\x35\x33\x2c\
+\x33\x2e\x31\x31\x38\x6c\x30\x2e\x31\x32\x31\x2c\x30\x2e\x33\x39\
+\x0a\x09\x63\x30\x2e\x30\x31\x31\x2c\x30\x2e\x30\x33\x31\x2c\x30\
+\x2e\x30\x32\x35\x2c\x30\x2e\x30\x35\x38\x2c\x30\x2e\x30\x33\x35\
+\x2c\x30\x2e\x30\x38\x38\x43\x31\x32\x36\x2e\x30\x37\x39\x2c\x34\
+\x34\x34\x2e\x32\x33\x33\x2c\x31\x37\x32\x2e\x35\x37\x2c\x34\x38\
+\x30\x2c\x32\x32\x37\x2e\x34\x32\x37\x2c\x34\x38\x30\x63\x33\x35\
+\x2e\x31\x31\x36\x2c\x30\x2c\x37\x31\x2e\x35\x39\x31\x2d\x31\x32\
+\x2e\x33\x37\x38\x2c\x39\x39\x2e\x33\x35\x37\x2d\x33\x33\x2e\x36\
+\x37\x32\x0a\x09\x63\x30\x2e\x30\x30\x31\x2c\x30\x2c\x30\x2e\x30\
+\x30\x33\x2d\x30\x2e\x30\x30\x32\x2c\x30\x2e\x30\x30\x33\x2d\x30\
+\x2e\x30\x30\x32\x63\x32\x39\x2e\x39\x39\x2d\x31\x38\x2e\x30\x35\
+\x31\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
+\x37\x2c\x31\x32\x36\x2e\x30\x37\x31\x2d\x31\x32\x31\x2e\x33\x34\
+\x37\x43\x34\x36\x37\x2e\x34\x34\x35\x2c\x33\x31\x30\x2e\x34\x30\
+\x32\x2c\x34\x36\x35\x2e\x32\x36\x36\x2c\x32\x38\x38\x2e\x30\x38\
+\x2c\x34\x35\x30\x2e\x36\x37\x39\x2c\x32\x37\x33\x2e\x35\x7a\x22\
+\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xab\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x35\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x70\x6f\
+\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x30\
+\x35\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x33\x37\x35\x2e\x32\x30\
+\x32\x2c\x31\x30\x37\x20\x32\x35\x36\x2c\x32\x32\x36\x2e\x32\x30\
+\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x31\x30\x37\x20\x31\x30\
+\x37\x2c\x31\x33\x36\x2e\x37\x39\x38\x20\x32\x32\x36\x2e\x32\x30\
+\x32\x2c\x32\x35\x36\x20\x31\x30\x37\x2c\x33\x37\x35\x2e\x32\x30\
+\x32\x20\x31\x33\x36\x2e\x37\x39\x38\x2c\x34\x30\x35\x20\x32\x35\
+\x36\x2c\x32\x38\x35\x2e\x37\x39\x38\x20\x0a\x09\x09\x09\x33\x37\
+\x35\x2e\x32\x30\x32\x2c\x34\x30\x35\x20\x34\x30\x35\x2c\x33\x37\
+\x35\x2e\x32\x30\x32\x20\x32\x38\x35\x2e\x37\x39\x38\x2c\x32\x35\
+\x36\x20\x09\x09\x22\x2f\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x1b\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x32\x35\x36\x2c\x33\x38\x38\x63\x2d\x37\x32\x2e\
+\x35\x39\x37\x2c\x30\x2d\x31\x33\x32\x2d\x35\x39\x2e\x34\x30\x35\
+\x2d\x31\x33\x32\x2d\x31\x33\x32\x63\x30\x2d\x37\x32\x2e\x36\x30\
+\x31\x2c\x35\x39\x2e\x34\x30\x33\x2d\x31\x33\x32\x2c\x31\x33\x32\
+\x2d\x31\x33\x32\x63\x33\x36\x2e\x33\x2c\x30\x2c\x36\x39\x2e\x32\
+\x39\x39\x2c\x31\x35\x2e\x34\x2c\x39\x32\x2e\x34\x30\x36\x2c\x33\
+\x39\x2e\x36\x30\x31\x4c\x32\x37\x38\x2c\x32\x33\x34\x68\x31\x35\
+\x34\x56\x38\x30\x0a\x09\x09\x6c\x2d\x35\x31\x2e\x36\x39\x38\x2c\
+\x35\x31\x2e\x37\x30\x32\x43\x33\x34\x38\x2e\x34\x30\x36\x2c\x39\
+\x39\x2e\x37\x39\x38\x2c\x33\x30\x34\x2e\x34\x30\x36\x2c\x38\x30\
+\x2c\x32\x35\x36\x2c\x38\x30\x63\x2d\x39\x36\x2e\x37\x39\x37\x2c\
+\x30\x2d\x31\x37\x36\x2c\x37\x39\x2e\x32\x30\x33\x2d\x31\x37\x36\
+\x2c\x31\x37\x36\x73\x37\x38\x2e\x30\x39\x34\x2c\x31\x37\x36\x2c\
+\x31\x37\x36\x2c\x31\x37\x36\x0a\x09\x09\x63\x38\x31\x2e\x30\x34\
+\x35\x2c\x30\x2c\x31\x34\x38\x2e\x32\x38\x37\x2d\x35\x34\x2e\x31\
+\x33\x34\x2c\x31\x36\x39\x2e\x34\x30\x31\x2d\x31\x32\x38\x48\x33\
+\x37\x38\x2e\x38\x35\x43\x33\x36\x30\x2e\x31\x30\x35\x2c\x33\x35\
+\x33\x2e\x35\x36\x31\x2c\x33\x31\x31\x2e\x37\x31\x32\x2c\x33\x38\
+\x38\x2c\x32\x35\x36\x2c\x33\x38\x38\x7a\x22\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x01\x69\
+\x3c\
+\x73\x76\x67\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\x3a\
+\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\x30\
+\x30\x2f\x73\x76\x67\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\x32\
+\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\x30\
+\x20\x35\x31\x32\x20\x35\x31\x32\x22\x3e\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\
+\x34\x20\x30\x20\x30\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x3c\
+\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x2e\x33\x34\x20\x31\x35\
+\x2e\x36\x36\x41\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\x30\x20\
+\x30\x20\x30\x20\x39\x20\x31\x37\x2e\x39\x34\x56\x31\x30\x48\x35\
+\x56\x38\x68\x34\x56\x35\x2e\x38\x33\x61\x33\x20\x33\x20\x30\x20\
+\x31\x20\x31\x20\x32\x20\x30\x56\x38\x68\x34\x76\x32\x68\x2d\x34\
+\x76\x37\x2e\x39\x34\x61\x37\x2e\x39\x37\x20\x37\x2e\x39\x37\x20\
+\x30\x20\x30\x20\x30\x20\x34\x2e\x36\x36\x2d\x32\x2e\x32\x38\x6c\
+\x2d\x31\x2e\x34\x32\x2d\x31\x2e\x34\x32\x68\x35\x2e\x36\x36\x6c\
+\x2d\x32\x2e\x38\x33\x20\x32\x2e\x38\x33\x61\x31\x30\x20\x31\x30\
+\x20\x30\x20\x30\x20\x31\x2d\x31\x34\x2e\x31\x34\x20\x30\x4c\x2e\
+\x31\x20\x31\x34\x2e\x32\x34\x68\x35\x2e\x36\x36\x6c\x2d\x31\x2e\
+\x34\x32\x20\x31\x2e\x34\x32\x7a\x4d\x31\x30\x20\x34\x61\x31\x20\
+\x31\x20\x30\x20\x31\x20\x30\x20\x30\x2d\x32\x20\x31\x20\x31\x20\
+\x30\x20\x30\x20\x30\x20\x30\x20\x32\x7a\x22\x2f\x3e\x3c\x2f\x67\
+\x3e\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\xc1\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x6f\x6c\
+\x79\x67\x6f\x6e\x20\x70\x6f\x69\x6e\x74\x73\x3d\x22\x34\x38\x30\
+\x2c\x32\x35\x36\x20\x33\x38\x34\x2c\x31\x36\x30\x20\x33\x38\x34\
+\x2c\x32\x33\x36\x20\x32\x37\x36\x2c\x32\x33\x36\x20\x32\x37\x36\
+\x2c\x31\x32\x38\x20\x33\x35\x32\x2c\x31\x32\x38\x20\x32\x35\x36\
+\x2c\x33\x32\x20\x31\x36\x30\x2c\x31\x32\x38\x20\x32\x33\x36\x2c\
+\x31\x32\x38\x20\x32\x33\x36\x2c\x32\x33\x36\x20\x31\x32\x38\x2c\
+\x32\x33\x36\x20\x31\x32\x38\x2c\x31\x36\x30\x20\x33\x32\x2c\x32\
+\x35\x36\x20\x31\x32\x38\x2c\x33\x35\x32\x20\x0a\x09\x31\x32\x38\
+\x2c\x32\x37\x36\x20\x32\x33\x36\x2c\x32\x37\x36\x20\x32\x33\x36\
+\x2c\x33\x38\x34\x20\x31\x36\x30\x2c\x33\x38\x34\x20\x32\x35\x36\
+\x2c\x34\x38\x30\x20\x33\x35\x32\x2c\x33\x38\x34\x20\x32\x37\x35\
+\x2e\x38\x2c\x33\x38\x34\x20\x32\x37\x35\x2e\x34\x2c\x32\x37\x35\
+\x2e\x35\x20\x33\x38\x34\x2c\x32\x37\x35\x2e\x38\x20\x33\x38\x34\
+\x2c\x33\x35\x32\x20\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\
+\x00\x00\x02\x1c\
+\x00\
+\x00\x07\x5c\x78\x9c\xdd\x55\x4d\x73\x9b\x30\x10\xbd\xf7\x57\x6c\
+\xa7\x07\x25\x07\x84\xbe\x10\x28\x13\x92\x99\x7a\xa6\xa7\xf4\x96\
+\x5c\x7a\xc3\x41\x80\x1a\x0c\x1e\xa0\xc6\xfd\xf7\x95\x6d\x49\x76\
+\x69\x33\xbd\xe4\xd0\x89\x0f\x98\xf7\x56\x6f\xd9\xb7\xcb\x0e\xb7\
+\xf7\xfb\x4d\x0b\x3b\x3d\x8c\xa6\xef\x72\x44\x31\x41\xa0\xbb\xe7\
+\xbe\x34\x5d\x9d\xa3\xa7\xc7\x2f\x51\x86\xee\xef\x3e\xdc\x7e\x8c\
+\x22\x78\x6c\xcc\x08\x95\x69\x35\xcc\xc5\x08\xb5\xee\xf4\x50\x4c\
+\xba\x84\xf5\x4f\x28\x77\x66\xdc\xd5\x1b\x60\x98\x52\x4c\x21\x8a\
+\xac\xc4\x12\x97\x89\x29\x02\xfb\xa8\x6e\xcc\x51\x33\x4d\xdb\x9b\
+\x38\x9e\xe7\x19\xcf\x1c\xf7\x43\x1d\x33\x42\x48\x6c\xcf\xbb\x23\
+\x37\xfb\xd6\x74\x2f\x7f\x3b\x48\x95\x52\xf1\x31\x8a\x60\x36\xe5\
+\xd4\xe4\x48\x72\x6c\x49\xb9\x9d\x10\x34\xda\xd4\xcd\x64\x29\x71\
+\x40\x3b\xa3\xe7\xcf\xfd\x3e\x47\x89\xc4\x82\x28\x01\x94\xa6\x38\
+\x4b\x32\x70\x0a\x90\x02\xd9\x32\x6b\x30\x65\x8e\xb6\x45\xad\xe9\
+\x09\x4e\x43\xd1\x8d\x55\x3f\x6c\x72\x74\xbc\x6d\xad\xc9\xab\x45\
+\x8e\xeb\xf1\xb9\x68\xf5\x95\xcd\x23\x99\x14\xd7\x07\xe1\xb6\x98\
+\x1a\xb0\x99\xbe\x82\xc2\x5c\xa4\x82\x81\x60\x38\x15\x29\x7b\x08\
+\x44\x22\x70\xa6\x98\xfc\x83\x58\x2d\x89\x7f\xe1\x0b\x81\xc2\x24\
+\x13\x0a\xa8\xc2\x89\xe0\x14\x24\xc3\x22\xe3\x02\xb8\x9d\x04\xf3\
+\x68\x05\x42\x60\xa9\xa4\x0a\x61\x9f\xd7\xcb\x03\xf6\x15\xbe\x4a\
+\x04\x53\x9e\xe0\x04\x4b\x42\xb3\x55\x20\xd8\xb1\x55\x49\x78\x26\
+\xe3\x98\x50\xea\x2a\x3a\x81\x55\xa8\xd7\x05\xbd\x1d\xaf\xf5\xd8\
+\x25\x7f\x58\xf6\xf4\x1b\x3a\xbc\x88\x6d\x8e\x3e\xad\xab\x75\x55\
+\x55\x28\xb6\x13\x88\xeb\xb7\x99\x5f\x30\x22\x70\xc2\x14\xbd\x70\
+\x46\x30\xe7\x32\x0b\xce\xa8\xc4\x8a\x67\xdc\x59\x73\xe8\xec\xcd\
+\x87\x83\x39\x27\x0f\xd8\xe7\x0f\x44\x86\x53\x46\x93\x90\xe0\x94\
+\xf7\xe2\x7a\x1e\xe4\x89\x0c\x85\x39\xe1\xa2\xf2\xd0\xa5\xae\xef\
+\x34\x82\x71\x1a\xfa\x17\x6d\x7b\x46\x8e\x3f\x4f\x44\x76\x9d\xf4\
+\x73\xb1\xcd\xd1\xd0\xff\xe8\xca\xdf\xe8\xef\xbd\xe9\x96\xfc\xc6\
+\x4c\x7a\x68\x8d\xfd\xb3\x6b\x4d\x30\xe1\x69\x12\x62\x6e\x27\x39\
+\x4e\x28\xa7\xec\x4d\xa7\xb2\xe8\xda\xfb\xda\x2a\x67\xea\x3d\xcd\
+\xeb\xd5\x2d\xb2\x5f\x08\x95\x30\x76\xde\x22\x9c\x26\x32\x91\x7e\
+\x8b\x4e\xe8\x62\x8b\x5c\xd8\xcf\xc6\xcb\x17\xef\xc3\x7f\xd3\xba\
+\xd3\xc5\x7e\xcc\xee\x7e\x01\xb3\x30\xdb\xa9\
+\x00\x00\x01\xd8\
+\x00\
+\x00\x06\xc4\x78\x9c\xcd\x54\x4d\x6f\x9b\x40\x10\x3d\xe3\x5f\x31\
+\xdd\x5b\x25\xf6\x0b\x62\x62\x53\xe3\xa8\xfe\x90\x65\x29\x6d\x2d\
+\x35\x75\xd5\x53\x85\x61\x0b\x28\x14\x10\x2c\x60\xe7\xd7\x77\x77\
+\xed\x54\xa9\x14\x5f\x43\x0f\x3b\xab\x9d\x79\xf3\xe6\x0d\x4f\x62\
+\x76\x77\xfc\x9d\x43\x27\xea\x26\x2b\x8b\x00\x71\xc2\x10\x88\x22\
+\x2a\xe3\xac\x48\x02\xd4\xca\x5f\x78\x82\xee\xe6\xa3\xd9\x3b\x8c\
+\x61\x23\x0a\x51\x87\xb2\xac\x7d\xf8\x18\x97\x07\x01\xdb\x3c\x6f\
+\x1b\x69\x52\xc0\x3d\xe2\x10\x6e\xc3\xd7\xfd\x06\xd6\xc7\xaa\xac\
+\x25\xec\xf2\x36\xc1\xdb\x02\x88\x49\xee\xcf\x33\x7c\xf0\x08\x63\
+\xb0\x68\xb3\x3c\x06\xf6\x1e\x00\x63\x4d\xbf\xfa\xb2\x7c\xf8\xb1\
+\x5b\x43\xd3\x25\xb0\xfb\xb6\xb8\xdf\x2e\x01\x61\x4a\xbf\xbb\x4b\
+\x4a\x57\x0f\x2b\xc3\xc0\x09\xa7\x74\xfd\x19\x01\x4a\xa5\xac\x7c\
+\x4a\xfb\xbe\x27\xbd\x4b\xca\x3a\xa1\x9b\x3a\xac\xd2\x2c\x6a\xa8\
+\x02\x52\x0d\x54\x4d\x54\x91\x71\x4e\x62\x19\x23\x35\x42\x33\xbf\
+\xd8\x93\x23\xc8\xe2\x00\xdd\x87\x27\x51\xff\x54\x0f\xf5\x19\x8a\
+\x26\x78\x85\xd9\x61\x8c\x69\xa6\x0b\xc4\x3f\xe6\x59\xf1\xf8\x1a\
+\x90\x4f\xa7\x53\x6a\xaa\x0a\x1a\x20\x56\x1d\x11\x9c\xce\xf7\xc8\
+\x82\x3e\x8b\x65\x1a\xa0\x31\x77\x74\x3e\x15\x59\x92\xca\xbf\xcf\
+\x2e\x13\xfd\xa2\xd4\x4d\xc0\x40\xe5\xf4\x41\xd0\xc8\x53\x2e\x02\
+\x24\x8a\xf0\x90\x0b\x7c\x08\xa3\xc7\xa4\x2e\xdb\x22\xf6\x0b\xd1\
+\xc3\x0b\xe4\x07\x23\xcd\x6f\xaa\x30\x52\xf0\xaa\x16\x8d\xa8\x3b\
+\xa1\x77\x4e\xe6\x23\xcb\x04\x6b\x56\x85\x32\x05\xb5\xf0\x27\xee\
+\x31\x9b\x8f\x5d\xe2\x46\xcc\x76\xc9\x2d\x76\x6d\x4f\x45\x75\xf4\
+\x9d\xe2\x31\x23\xe3\x08\xab\x82\xcd\x74\x12\xbb\xf8\x52\xee\xce\
+\x25\x66\x6a\xee\x73\x83\xbe\x53\x53\x30\x2d\x3a\x65\x1b\x46\x7d\
+\xf6\x66\xce\x93\x5a\xdf\xb2\xe8\xbf\x2a\x9c\xc9\xe4\x3f\x50\x71\
+\xc3\xbd\xa1\x54\xcc\xe8\x35\x73\x9c\x09\x7f\x13\x41\x66\xce\x55\
+\x73\x86\x57\xa1\xcd\x19\x48\xc5\x75\x73\x6e\xd8\xf4\x4d\x04\x99\
+\x39\x57\xcd\x19\x5e\x85\x36\x67\x20\x15\xc6\x9c\x4b\x50\xff\xe5\
+\xf9\xe8\x0f\x44\x1a\x94\x79\
+\x00\x00\x02\x98\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x31\x32\x38\x2c\x34\x30\x35\x2e\x34\x32\x39\x43\
+\x31\x32\x38\x2c\x34\x32\x38\x2e\x38\x34\x36\x2c\x31\x34\x37\x2e\
+\x31\x39\x38\x2c\x34\x34\x38\x2c\x31\x37\x30\x2e\x36\x36\x37\x2c\
+\x34\x34\x38\x68\x31\x37\x30\x2e\x36\x36\x37\x43\x33\x36\x34\x2e\
+\x38\x30\x32\x2c\x34\x34\x38\x2c\x33\x38\x34\x2c\x34\x32\x38\x2e\
+\x38\x34\x36\x2c\x33\x38\x34\x2c\x34\x30\x35\x2e\x34\x32\x39\x56\
+\x31\x36\x30\x48\x31\x32\x38\x56\x34\x30\x35\x2e\x34\x32\x39\x7a\
+\x20\x4d\x34\x31\x36\x2c\x39\x36\x0a\x09\x09\x68\x2d\x38\x30\x6c\
+\x2d\x32\x36\x2e\x37\x38\x35\x2d\x33\x32\x48\x32\x30\x32\x2e\x37\
+\x38\x36\x4c\x31\x37\x36\x2c\x39\x36\x48\x39\x36\x76\x33\x32\x68\
+\x33\x32\x30\x56\x39\x36\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x5a\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x36\x32\x2e\x32\x33\
+\x32\x35\x4c\x20\x36\x32\x2e\x32\x33\x32\x35\x20\x32\x2e\x30\x30\
+\x37\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x32\x2e\x30\x30\x37\
+\x35\x4c\x20\x32\x2e\x30\x30\x37\x35\x20\x36\x32\x2e\x32\x33\x32\
+\x35\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x34\x2e\x30\x31\x35\x27\
+\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\
+\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\
+\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\
+\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\
+\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x34\x37\x2e\x31\
+\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\x37\x2e\x31\x37\
+\x36\x32\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x34\x30\x2e\x34\x33\
+\x35\x33\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x33\x32\x2e\x31\x32\
+\x20\x31\x37\x2e\x30\x36\x33\x37\x43\x20\x32\x33\x2e\x38\x30\x34\
+\x37\x20\x31\x37\x2e\x30\x36\x33\x37\x20\x31\x37\x2e\x30\x36\x33\
+\x37\x20\x32\x33\x2e\x38\x30\x34\x37\x20\x31\x37\x2e\x30\x36\x33\
+\x37\x20\x33\x32\x2e\x31\x32\x43\x20\x31\x37\x2e\x30\x36\x33\x37\
+\x20\x34\x30\x2e\x34\x33\x35\x33\x20\x32\x33\x2e\x38\x30\x34\x37\
+\x20\x34\x37\x2e\x31\x37\x36\x32\x20\x33\x32\x2e\x31\x32\x20\x34\
+\x37\x2e\x31\x37\x36\x32\x43\x20\x34\x30\x2e\x34\x33\x35\x33\x20\
+\x34\x37\x2e\x31\x37\x36\x32\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
+\x34\x30\x2e\x34\x33\x35\x33\x20\x34\x37\x2e\x31\x37\x36\x32\x20\
+\x33\x32\x2e\x31\x32\x5a\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x03\x5f\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x0a\x09\x09\x3c\x72\x65\
+\x63\x74\x20\x78\x3d\x22\x31\x37\x38\x2e\x38\x34\x36\x22\x20\x79\
+\x3d\x22\x39\x32\x2e\x30\x38\x37\x22\x20\x74\x72\x61\x6e\x73\x66\
+\x6f\x72\x6d\x3d\x22\x6d\x61\x74\x72\x69\x78\x28\x2d\x30\x2e\x37\
+\x30\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x30\x2e\x37\x30\
+\x37\x31\x20\x2d\x30\x2e\x37\x30\x37\x31\x20\x32\x32\x34\x2e\x33\
+\x34\x37\x36\x20\x36\x33\x31\x2e\x31\x34\x39\x38\x29\x22\x20\x77\
+\x69\x64\x74\x68\x3d\x22\x31\x32\x38\x2e\x30\x38\x35\x22\x20\x68\
+\x65\x69\x67\x68\x74\x3d\x22\x33\x35\x34\x2e\x30\x34\x39\x22\x2f\
+\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\x37\x31\
+\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\x6c\x2d\x34\x38\x2e\
+\x31\x31\x35\x2d\x34\x38\x2e\x31\x31\x34\x63\x2d\x31\x31\x2e\x37\
+\x32\x33\x2d\x31\x31\x2e\x37\x32\x34\x2d\x33\x31\x2e\x35\x35\x38\
+\x2d\x31\x30\x2e\x38\x39\x36\x2d\x34\x34\x2e\x33\x30\x34\x2c\x31\
+\x2e\x38\x35\x6c\x2d\x34\x35\x2e\x32\x30\x32\x2c\x34\x35\x2e\x32\
+\x30\x33\x6c\x39\x30\x2e\x35\x36\x39\x2c\x39\x30\x2e\x35\x36\x38\
+\x6c\x34\x35\x2e\x32\x30\x32\x2d\x34\x35\x2e\x32\x30\x32\x0a\x09\
+\x09\x43\x34\x38\x32\x2e\x36\x31\x36\x2c\x31\x31\x39\x2e\x39\x35\
+\x32\x2c\x34\x38\x33\x2e\x34\x34\x35\x2c\x31\x30\x30\x2e\x31\x31\
+\x36\x2c\x34\x37\x31\x2e\x37\x32\x33\x2c\x38\x38\x2e\x33\x39\x33\
+\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\
+\x6f\x69\x6e\x74\x73\x3d\x22\x36\x34\x2e\x30\x32\x31\x2c\x33\x36\
+\x33\x2e\x32\x35\x32\x20\x33\x32\x2c\x34\x38\x30\x20\x31\x34\x38\
+\x2e\x37\x33\x37\x2c\x34\x34\x37\x2e\x39\x37\x39\x20\x09\x22\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\x48\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\x22\x4d\x34\
+\x33\x37\x2e\x33\x33\x34\x2c\x31\x34\x34\x48\x32\x35\x36\x2e\x30\
+\x30\x36\x6c\x2d\x34\x32\x2e\x36\x36\x38\x2d\x34\x38\x48\x37\x34\
+\x2e\x36\x36\x36\x43\x35\x31\x2e\x31\x39\x37\x2c\x39\x36\x2c\x33\
+\x32\x2c\x31\x31\x35\x2e\x31\x39\x38\x2c\x33\x32\x2c\x31\x33\x38\
+\x2e\x36\x36\x37\x76\x32\x33\x34\x2e\x36\x36\x36\x43\x33\x32\x2c\
+\x33\x39\x36\x2e\x38\x30\x32\x2c\x35\x31\x2e\x31\x39\x37\x2c\x34\
+\x31\x36\x2c\x37\x34\x2e\x36\x36\x36\x2c\x34\x31\x36\x68\x33\x36\
+\x32\x2e\x36\x36\x38\x0a\x09\x43\x34\x36\x30\x2e\x38\x30\x33\x2c\
+\x34\x31\x36\x2c\x34\x38\x30\x2c\x33\x39\x36\x2e\x38\x30\x32\x2c\
+\x34\x38\x30\x2c\x33\x37\x33\x2e\x33\x33\x33\x56\x31\x38\x36\x2e\
+\x36\x36\x37\x43\x34\x38\x30\x2c\x31\x36\x33\x2e\x31\x39\x38\x2c\
+\x34\x36\x30\x2e\x38\x30\x33\x2c\x31\x34\x34\x2c\x34\x33\x37\x2e\
+\x33\x33\x34\x2c\x31\x34\x34\x7a\x20\x4d\x34\x34\x38\x2c\x33\x37\
+\x33\x2e\x33\x33\x33\x0a\x09\x63\x30\x2c\x35\x2e\x37\x38\x32\x2d\
+\x34\x2e\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x37\x2d\x31\x30\x2e\
+\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\x37\x48\x37\x34\x2e\x36\x36\
+\x36\x43\x36\x38\x2e\x38\x38\x34\x2c\x33\x38\x34\x2c\x36\x34\x2c\
+\x33\x37\x39\x2e\x31\x31\x35\x2c\x36\x34\x2c\x33\x37\x33\x2e\x33\
+\x33\x33\x56\x31\x37\x36\x68\x33\x37\x33\x2e\x33\x33\x34\x63\x35\
+\x2e\x37\x38\x31\x2c\x30\x2c\x31\x30\x2e\x36\x36\x36\x2c\x34\x2e\
+\x38\x38\x35\x2c\x31\x30\x2e\x36\x36\x36\x2c\x31\x30\x2e\x36\x36\
+\x37\x0a\x09\x56\x33\x37\x33\x2e\x33\x33\x33\x7a\x22\x2f\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x02\x6c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x69\x64\x3d\x22\x49\x63\x6f\x6e\
+\x5f\x31\x5f\x22\x3e\x0a\x09\x3c\x67\x3e\x0a\x09\x09\x3c\x67\x3e\
+\x0a\x09\x09\x09\x3c\x70\x6f\x6c\x79\x67\x6f\x6e\x20\x70\x6f\x69\
+\x6e\x74\x73\x3d\x22\x31\x38\x36\x2e\x33\x30\x31\x2c\x33\x33\x39\
+\x2e\x38\x39\x33\x20\x39\x36\x2c\x32\x34\x39\x2e\x34\x36\x31\x20\
+\x36\x34\x2c\x32\x37\x39\x2e\x39\x36\x38\x20\x31\x38\x36\x2e\x33\
+\x30\x31\x2c\x34\x30\x32\x20\x34\x34\x38\x2c\x31\x34\x30\x2e\x35\
+\x30\x36\x20\x34\x31\x36\x2c\x31\x31\x30\x20\x09\x09\x09\x22\x2f\
+\x3e\x0a\x09\x09\x3c\x2f\x67\x3e\x0a\x09\x3c\x2f\x67\x3e\x0a\x3c\
+\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xe8\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x38\x2e\x31\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x43\
+\x68\x65\x76\x72\x6f\x6e\x5f\x63\x69\x72\x63\x6c\x65\x64\x5f\x6c\
+\x65\x66\x74\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x78\x6c\
+\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\x6c\x69\x6e\
+\x6b\x22\x0a\x09\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\x22\
+\x30\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x6d\x61\x74\x72\x69\x78\x28\x32\x34\x20\x30\x20\x30\
+\x20\x32\x34\x20\x30\x20\x30\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\
+\x20\x64\x3d\x22\x4d\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\x37\
+\x36\x63\x2d\x30\x2e\x31\x39\x36\x2d\x30\x2e\x31\x39\x37\x2d\x30\
+\x2e\x35\x31\x35\x2d\x30\x2e\x31\x39\x37\x2d\x30\x2e\x37\x31\x2c\
+\x30\x4c\x37\x2e\x37\x38\x35\x2c\x39\x2e\x36\x34\x31\x63\x2d\x30\
+\x2e\x31\x39\x36\x2c\x30\x2e\x31\x39\x39\x2d\x30\x2e\x31\x39\x36\
+\x2c\x30\x2e\x35\x32\x2c\x30\x2c\x30\x2e\x37\x31\x37\x6c\x32\x2e\
+\x38\x30\x37\x2c\x32\x2e\x38\x36\x34\x0a\x09\x63\x30\x2e\x31\x39\
+\x35\x2c\x30\x2e\x31\x39\x39\x2c\x30\x2e\x35\x31\x34\x2c\x30\x2e\
+\x31\x39\x38\x2c\x30\x2e\x37\x31\x2c\x30\x63\x30\x2e\x31\x39\x36\
+\x2d\x30\x2e\x31\x39\x37\x2c\x30\x2e\x31\x39\x36\x2d\x30\x2e\x35\
+\x31\x38\x2c\x30\x2d\x30\x2e\x37\x31\x37\x4c\x39\x2c\x31\x30\x6c\
+\x32\x2e\x33\x30\x32\x2d\x32\x2e\x35\x30\x36\x43\x31\x31\x2e\x34\
+\x39\x38\x2c\x37\x2e\x32\x39\x36\x2c\x31\x31\x2e\x34\x39\x38\x2c\
+\x36\x2e\x39\x37\x36\x2c\x31\x31\x2e\x33\x30\x32\x2c\x36\x2e\x37\
+\x37\x36\x7a\x0a\x09\x20\x4d\x31\x30\x2c\x30\x2e\x34\x63\x2d\x35\
+\x2e\x33\x30\x32\x2c\x30\x2d\x39\x2e\x36\x2c\x34\x2e\x32\x39\x38\
+\x2d\x39\x2e\x36\x2c\x39\x2e\x36\x63\x30\x2c\x35\x2e\x33\x30\x33\
+\x2c\x34\x2e\x32\x39\x38\x2c\x39\x2e\x36\x2c\x39\x2e\x36\x2c\x39\
+\x2e\x36\x73\x39\x2e\x36\x2d\x34\x2e\x32\x39\x37\x2c\x39\x2e\x36\
+\x2d\x39\x2e\x36\x43\x31\x39\x2e\x36\x2c\x34\x2e\x36\x39\x38\x2c\
+\x31\x35\x2e\x33\x30\x32\x2c\x30\x2e\x34\x2c\x31\x30\x2c\x30\x2e\
+\x34\x7a\x20\x4d\x31\x30\x2c\x31\x38\x2e\x33\x35\x34\x0a\x09\x63\
+\x2d\x34\x2e\x36\x31\x35\x2c\x30\x2d\x38\x2e\x33\x35\x34\x2d\x33\
+\x2e\x37\x34\x2d\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x30\x2d\x34\x2e\x36\x31\x34\x2c\x33\x2e\x37\x33\x39\x2d\x38\x2e\
+\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x2d\x38\x2e\x33\x35\x34\x63\
+\x34\x2e\x36\x31\x33\x2c\x30\x2c\x38\x2e\x33\x35\x34\x2c\x33\x2e\
+\x37\x34\x2c\x38\x2e\x33\x35\x34\x2c\x38\x2e\x33\x35\x34\x0a\x09\
+\x43\x31\x38\x2e\x33\x35\x34\x2c\x31\x34\x2e\x36\x31\x34\x2c\x31\
+\x34\x2e\x36\x31\x33\x2c\x31\x38\x2e\x33\x35\x34\x2c\x31\x30\x2c\
+\x31\x38\x2e\x33\x35\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x03\xda\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x30\x2e\x30\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x65\x6e\x61\x62\x6c\
+\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\x64\x3d\x22\x6e\x65\
+\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x78\
+\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\x73\x65\x72\
+\x76\x65\x22\x3e\x0a\x3c\x67\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\x2e\x38\
+\x32\x38\x63\x34\x30\x2e\x30\x32\x33\x2d\x30\x2e\x33\x31\x35\x2c\
+\x34\x35\x2e\x30\x31\x2d\x39\x2e\x39\x35\x35\x2c\x35\x38\x2e\x30\
+\x35\x32\x2d\x35\x30\x2e\x31\x33\x32\x63\x32\x34\x2e\x30\x35\x37\
+\x2d\x36\x33\x2e\x34\x30\x38\x2c\x31\x33\x32\x2e\x34\x31\x39\x2c\
+\x31\x36\x2e\x35\x39\x31\x2c\x36\x35\x2e\x32\x36\x39\x2c\x34\x34\
+\x2e\x33\x37\x34\x0a\x09\x09\x43\x31\x30\x34\x2e\x36\x32\x32\x2c\
+\x34\x38\x36\x2e\x38\x35\x32\x2c\x38\x2e\x34\x32\x38\x2c\x34\x36\
+\x35\x2e\x31\x34\x33\x2c\x34\x38\x2e\x34\x35\x31\x2c\x34\x36\x34\
+\x2e\x38\x32\x38\x7a\x22\x2f\x3e\x0a\x09\x3c\x70\x61\x74\x68\x20\
+\x64\x3d\x22\x4d\x34\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\
+\x30\x32\x63\x2d\x31\x39\x2e\x34\x31\x37\x2d\x31\x35\x2e\x36\x34\
+\x37\x2d\x35\x31\x2e\x35\x39\x32\x2d\x37\x2e\x39\x33\x38\x2d\x37\
+\x31\x2e\x38\x36\x34\x2c\x31\x37\x2e\x32\x31\x39\x4c\x31\x38\x31\
+\x2e\x36\x34\x35\x2c\x33\x35\x35\x2e\x38\x34\x39\x63\x2d\x32\x30\
+\x2e\x32\x37\x32\x2c\x32\x35\x2e\x31\x35\x34\x2d\x32\x30\x2e\x31\
+\x37\x31\x2c\x32\x30\x2e\x33\x34\x37\x2d\x30\x2e\x37\x35\x34\x2c\
+\x33\x35\x2e\x39\x39\x32\x0a\x09\x09\x63\x31\x39\x2e\x34\x31\x37\
+\x2c\x31\x35\x2e\x36\x34\x38\x2c\x31\x34\x2e\x37\x33\x38\x2c\x31\
+\x36\x2e\x37\x37\x2c\x33\x35\x2e\x30\x31\x31\x2d\x38\x2e\x33\x38\
+\x38\x6c\x32\x34\x31\x2e\x34\x30\x36\x2d\x32\x36\x32\x2e\x36\x36\
+\x39\x43\x34\x37\x37\x2e\x35\x38\x31\x2c\x39\x35\x2e\x36\x32\x38\
+\x2c\x34\x37\x38\x2e\x32\x37\x35\x2c\x36\x32\x2e\x35\x35\x2c\x34\
+\x35\x38\x2e\x38\x35\x37\x2c\x34\x36\x2e\x39\x30\x32\x7a\x20\x4d\
+\x34\x30\x36\x2e\x30\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x0a\x09\
+\x09\x63\x30\x2c\x30\x2d\x33\x2d\x33\x2e\x35\x2d\x31\x33\x2d\x31\
+\x31\x2e\x35\x63\x31\x35\x2d\x32\x34\x2e\x35\x2c\x34\x34\x2e\x35\
+\x2d\x32\x30\x2c\x34\x34\x2e\x35\x2d\x32\x30\x43\x34\x30\x39\x2e\
+\x35\x36\x35\x2c\x36\x36\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\
+\x36\x35\x2c\x38\x31\x2e\x38\x32\x35\x2c\x34\x30\x36\x2e\x30\x36\
+\x35\x2c\x38\x31\x2e\x38\x32\x35\x7a\x22\x2f\x3e\x0a\x3c\x2f\x67\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x04\x73\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x34\x2e\x30\x30\x30\x31\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x34\x2e\x30\x30\x30\x31\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x36\x2e\x30\x32\x32\x35\x20\x33\x32\x2e\x31\x32\x43\
+\x20\x36\x2e\x32\x32\x30\x37\x32\x20\x32\x34\x2e\x39\x36\x35\x35\
+\x20\x39\x2e\x30\x34\x39\x38\x39\x20\x31\x38\x2e\x31\x33\x35\x33\
+\x20\x31\x33\x2e\x39\x36\x38\x37\x20\x31\x32\x2e\x39\x33\x36\x31\
+\x43\x20\x32\x39\x2e\x35\x30\x36\x32\x20\x2d\x33\x2e\x34\x38\x36\
+\x38\x36\x20\x35\x35\x2e\x33\x36\x37\x33\x20\x32\x2e\x36\x39\x39\
+\x35\x20\x35\x38\x2e\x32\x31\x37\x35\x20\x32\x31\x2e\x37\x33\x37\
+\x38\x43\x20\x35\x39\x2e\x36\x39\x32\x32\x20\x33\x31\x2e\x35\x38\
+\x38\x31\x20\x35\x32\x2e\x36\x35\x30\x38\x20\x34\x30\x2e\x36\x37\
+\x37\x39\x20\x34\x32\x2e\x37\x34\x34\x35\x20\x34\x31\x2e\x37\x31\
+\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\
+\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\
+\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\
+\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\
+\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\
+\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\x32\x2e\x35\x30\x39\x33\
+\x37\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\
+\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\
+\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\x35\
+\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\
+\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\x36\
+\x2e\x30\x32\x32\x35\x27\x20\x63\x79\x3d\x27\x33\x32\x2e\x31\x32\
+\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\
+\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\
+\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\
+\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\
+\x36\x39\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\
+\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\
+\x63\x6c\x65\x20\x63\x78\x3d\x27\x31\x33\x2e\x39\x36\x38\x37\x27\
+\x20\x63\x79\x3d\x27\x31\x32\x2e\x39\x33\x36\x31\x27\x20\x66\x69\
+\x6c\x6c\x3d\x27\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\
+\x36\x2e\x30\x32\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\
+\x63\x78\x3d\x27\x35\x38\x2e\x32\x31\x37\x35\x27\x20\x63\x79\x3d\
+\x27\x32\x31\x2e\x37\x33\x37\x38\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x23\x66\x66\x30\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\
+\x32\x35\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\
+\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\
+\x74\x65\x28\x35\x38\x2e\x34\x36\x36\x39\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\
+\x29\x27\x3e\x0a\x3c\x63\x69\x72\x63\x6c\x65\x20\x63\x78\x3d\x27\
+\x34\x32\x2e\x37\x34\x34\x35\x27\x20\x63\x79\x3d\x27\x34\x31\x2e\
+\x37\x31\x31\x39\x27\x20\x66\x69\x6c\x6c\x3d\x27\x23\x66\x66\x30\
+\x30\x30\x30\x27\x20\x72\x3d\x27\x36\x2e\x30\x32\x32\x35\x27\x2f\
+\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\
+\x67\x3e\
+\x00\x00\x04\xca\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x39\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x0a\x09\x20\x69\x64\x3d\
+\x22\x73\x76\x67\x34\x36\x31\x39\x22\x20\x69\x6e\x6b\x73\x63\x61\
+\x70\x65\x3a\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x30\x2e\x39\x31\
+\x2b\x64\x65\x76\x65\x6c\x2b\x6f\x73\x78\x6d\x65\x6e\x75\x20\x72\
+\x31\x32\x39\x31\x31\x22\x20\x73\x6f\x64\x69\x70\x6f\x64\x69\x3a\
+\x64\x6f\x63\x6e\x61\x6d\x65\x3d\x22\x74\x72\x69\x61\x6e\x67\x6c\
+\x65\x2d\x73\x74\x72\x6f\x6b\x65\x64\x2d\x31\x35\x2e\x73\x76\x67\
+\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x63\x63\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x63\x72\x65\x61\x74\x69\x76\x65\x63\x6f\x6d\x6d\x6f\
+\x6e\x73\x2e\x6f\x72\x67\x2f\x6e\x73\x23\x22\x20\x78\x6d\x6c\x6e\
+\x73\x3a\x64\x63\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x70\x75\x72\
+\x6c\x2e\x6f\x72\x67\x2f\x64\x63\x2f\x65\x6c\x65\x6d\x65\x6e\x74\
+\x73\x2f\x31\x2e\x31\x2f\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x69\x6e\
+\x6b\x73\x63\x61\x70\x65\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x69\x6e\x6b\x73\x63\x61\x70\x65\x2e\x6f\x72\x67\x2f\
+\x6e\x61\x6d\x65\x73\x70\x61\x63\x65\x73\x2f\x69\x6e\x6b\x73\x63\
+\x61\x70\x65\x22\x20\x78\x6d\x6c\x6e\x73\x3a\x72\x64\x66\x3d\x22\
+\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\
+\x67\x2f\x31\x39\x39\x39\x2f\x30\x32\x2f\x32\x32\x2d\x72\x64\x66\
+\x2d\x73\x79\x6e\x74\x61\x78\x2d\x6e\x73\x23\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x73\x6f\x64\x69\x70\x6f\x64\x69\x3d\x22\x68\x74\x74\
+\x70\x3a\x2f\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2e\x73\x6f\x75\
+\x72\x63\x65\x66\x6f\x72\x67\x65\x2e\x6e\x65\x74\x2f\x44\x54\x44\
+\x2f\x73\x6f\x64\x69\x70\x6f\x64\x69\x2d\x30\x2e\x64\x74\x64\x22\
+\x20\x78\x6d\x6c\x6e\x73\x3a\x73\x76\x67\x3d\x22\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x32\x30\
+\x30\x30\x2f\x73\x76\x67\x22\x0a\x09\x20\x78\x6d\x6c\x6e\x73\x3d\
+\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\
+\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\
+\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\
+\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\
+\x2f\x78\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\
+\x79\x3d\x22\x30\x70\x78\x22\x20\x77\x69\x64\x74\x68\x3d\x22\x36\
+\x34\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x36\x34\x70\
+\x78\x22\x0a\x09\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x31\x35\x20\x31\x35\x22\x20\x73\x74\x79\x6c\x65\x3d\x22\
+\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\x75\x6e\
+\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x31\x35\x20\x31\x35\x3b\
+\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\x22\x70\x72\x65\
+\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\x68\x20\x69\x64\
+\x3d\x22\x72\x65\x63\x74\x33\x33\x33\x38\x22\x20\x69\x6e\x6b\x73\
+\x63\x61\x70\x65\x3a\x63\x6f\x6e\x6e\x65\x63\x74\x6f\x72\x2d\x63\
+\x75\x72\x76\x61\x74\x75\x72\x65\x3d\x22\x30\x22\x20\x73\x6f\x64\
+\x69\x70\x6f\x64\x69\x3a\x6e\x6f\x64\x65\x74\x79\x70\x65\x73\x3d\
+\x22\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x63\x22\x20\x64\
+\x3d\x22\x4d\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\
+\x0a\x09\x43\x37\x2e\x32\x34\x32\x39\x2c\x31\x2e\x34\x39\x31\x33\
+\x2c\x36\x2e\x39\x37\x38\x37\x2c\x31\x2e\x36\x34\x32\x33\x2c\x36\
+\x2e\x38\x33\x33\x36\x2c\x31\x2e\x38\x39\x35\x32\x6c\x2d\x35\x2e\
+\x35\x2c\x39\x2e\x38\x36\x39\x32\x43\x31\x2e\x30\x32\x31\x38\x2c\
+\x31\x32\x2e\x33\x30\x37\x38\x2c\x31\x2e\x33\x39\x35\x2c\x31\x32\
+\x2e\x39\x39\x39\x39\x2c\x32\x2c\x31\x33\x68\x31\x31\x0a\x09\x63\
+\x30\x2e\x36\x30\x35\x2d\x30\x2e\x30\x30\x30\x31\x2c\x30\x2e\x39\
+\x37\x38\x32\x2d\x30\x2e\x36\x39\x32\x32\x2c\x30\x2e\x36\x36\x36\
+\x34\x2d\x31\x2e\x32\x33\x35\x35\x6c\x2d\x35\x2e\x35\x2d\x39\x2e\
+\x38\x36\x39\x32\x43\x38\x2e\x30\x33\x30\x32\x2c\x31\x2e\x36\x35\
+\x37\x39\x2c\x37\x2e\x37\x38\x38\x34\x2c\x31\x2e\x35\x30\x39\x32\
+\x2c\x37\x2e\x35\x32\x34\x33\x2c\x31\x2e\x35\x30\x30\x34\x7a\x20\
+\x4d\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x6c\x34\x2e\x31\x32\
+\x36\x37\x2c\x37\x2e\x34\x37\x30\x34\x0a\x09\x48\x33\x2e\x33\x37\
+\x33\x33\x4c\x37\x2e\x35\x2c\x33\x2e\x38\x39\x39\x33\x7a\x22\x2f\
+\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+\x00\x00\x05\x9c\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\
+\x30\x27\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x27\x55\x54\x46\
+\x2d\x38\x27\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x54\x68\x69\x73\x20\
+\x66\x69\x6c\x65\x20\x77\x61\x73\x20\x67\x65\x6e\x65\x72\x61\x74\
+\x65\x64\x20\x62\x79\x20\x64\x76\x69\x73\x76\x67\x6d\x20\x32\x2e\
+\x31\x31\x2e\x31\x20\x2d\x2d\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\
+\x72\x73\x69\x6f\x6e\x3d\x27\x31\x2e\x31\x27\x20\x78\x6d\x6c\x6e\
+\x73\x3d\x27\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\
+\x2e\x6f\x72\x67\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x27\x20\x78\
+\x6d\x6c\x6e\x73\x3a\x78\x6c\x69\x6e\x6b\x3d\x27\x68\x74\x74\x70\
+\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\
+\x39\x39\x2f\x78\x6c\x69\x6e\x6b\x27\x20\x77\x69\x64\x74\x68\x3d\
+\x27\x36\x33\x2e\x39\x39\x39\x36\x70\x74\x27\x20\x68\x65\x69\x67\
+\x68\x74\x3d\x27\x36\x34\x70\x74\x27\x20\x76\x69\x65\x77\x42\x6f\
+\x78\x3d\x27\x35\x36\x2e\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\
+\x35\x38\x20\x36\x33\x2e\x39\x39\x39\x36\x20\x36\x34\x27\x3e\x0a\
+\x3c\x67\x20\x69\x64\x3d\x27\x70\x61\x67\x65\x31\x27\x3e\x0a\x3c\
+\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\x6d\x3d\x27\x74\x72\x61\
+\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\x34\x30\x39\x34\x20\x31\
+\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\x6c\x65\x28\x2e\x39\x39\
+\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\x61\x74\x68\x20\x64\x3d\
+\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\
+\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x32\x30\x2e\x33\
+\x33\x36\x38\x20\x34\x34\x2e\x36\x39\x36\x39\x20\x31\x36\x2e\x39\
+\x33\x38\x33\x20\x33\x32\x2e\x31\x32\x20\x31\x36\x2e\x39\x33\x38\
+\x33\x43\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x31\x36\x2e\x39\x33\
+\x38\x33\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x30\x2e\x33\x33\
+\x36\x38\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x34\x2e\x35\x32\
+\x39\x31\x43\x20\x39\x2e\x33\x34\x37\x34\x32\x20\x32\x38\x2e\x37\
+\x32\x31\x35\x20\x31\x39\x2e\x35\x34\x33\x31\x20\x33\x32\x2e\x31\
+\x32\x20\x33\x32\x2e\x31\x32\x20\x33\x32\x2e\x31\x32\x43\x20\x34\
+\x34\x2e\x36\x39\x36\x39\x20\x33\x32\x2e\x31\x32\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x32\x38\x2e\x37\x32\x31\x35\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x5a\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
+\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
+\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
+\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
+\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x4c\x20\x39\x2e\x33\x34\x37\x34\
+\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x39\x2e\x33\x34\x37\
+\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x20\x39\x2e\x33\x34\
+\x37\x34\x32\x20\x35\x34\x2e\x38\x39\x32\x36\x43\x20\x39\x2e\x33\
+\x34\x37\x34\x32\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x31\x39\x2e\
+\x35\x34\x33\x31\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x33\x32\x2e\
+\x31\x32\x20\x36\x32\x2e\x34\x38\x33\x34\x43\x20\x34\x34\x2e\x36\
+\x39\x36\x39\x20\x36\x32\x2e\x34\x38\x33\x34\x20\x35\x34\x2e\x38\
+\x39\x32\x36\x20\x35\x39\x2e\x30\x38\x34\x39\x20\x35\x34\x2e\x38\
+\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\x2e\
+\x38\x39\x32\x36\x20\x35\x34\x2e\x38\x39\x32\x36\x4c\x20\x35\x34\
+\x2e\x38\x39\x32\x36\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\
+\x69\x6c\x6c\x3d\x27\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x3d\x27\x23\x30\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\
+\x6b\x65\x2d\x6c\x69\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\
+\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\
+\x69\x6e\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\
+\x65\x2d\x6d\x69\x74\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\
+\x2e\x30\x33\x37\x35\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\
+\x64\x74\x68\x3d\x27\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x67\x20\x74\x72\x61\x6e\x73\x66\x6f\x72\
+\x6d\x3d\x27\x74\x72\x61\x6e\x73\x6c\x61\x74\x65\x28\x35\x36\x2e\
+\x34\x30\x39\x34\x20\x31\x31\x37\x2e\x38\x35\x38\x29\x73\x63\x61\
+\x6c\x65\x28\x2e\x39\x39\x36\x32\x36\x34\x29\x27\x3e\x0a\x3c\x70\
+\x61\x74\x68\x20\x64\x3d\x27\x4d\x20\x35\x34\x2e\x38\x39\x32\x36\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x43\x20\x35\x34\x2e\x38\x39\x32\
+\x36\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x34\x34\x2e\x36\x39\x36\
+\x39\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x33\x32\x2e\x31\x32\x20\
+\x31\x2e\x37\x35\x36\x35\x36\x43\x20\x31\x39\x2e\x35\x34\x33\x31\
+\x20\x31\x2e\x37\x35\x36\x35\x36\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x31\x31\x2e\x39\x35\x32\x32\x20\x39\x2e\x33\x34\x37\x34\x32\
+\x20\x32\x34\x2e\x35\x32\x39\x31\x27\x20\x66\x69\x6c\x6c\x3d\x27\
+\x6e\x6f\x6e\x65\x27\x20\x73\x74\x72\x6f\x6b\x65\x3d\x27\x23\x30\
+\x30\x30\x30\x30\x30\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6c\x69\
+\x6e\x65\x63\x61\x70\x3d\x27\x72\x6f\x75\x6e\x64\x27\x20\x73\x74\
+\x72\x6f\x6b\x65\x2d\x6c\x69\x6e\x65\x6a\x6f\x69\x6e\x3d\x27\x72\
+\x6f\x75\x6e\x64\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x6d\x69\x74\
+\x65\x72\x6c\x69\x6d\x69\x74\x3d\x27\x31\x30\x2e\x30\x33\x37\x35\
+\x27\x20\x73\x74\x72\x6f\x6b\x65\x2d\x77\x69\x64\x74\x68\x3d\x27\
+\x33\x2e\x35\x31\x33\x31\x32\x27\x2f\x3e\x0a\x3c\x2f\x67\x3e\x0a\
+\x3c\x2f\x67\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\
+\x00\x00\x02\xee\
+\x3c\
+\x3f\x78\x6d\x6c\x20\x76\x65\x72\x73\x69\x6f\x6e\x3d\x22\x31\x2e\
+\x30\x22\x20\x65\x6e\x63\x6f\x64\x69\x6e\x67\x3d\x22\x75\x74\x66\
+\x2d\x38\x22\x3f\x3e\x0a\x3c\x21\x2d\x2d\x20\x47\x65\x6e\x65\x72\
+\x61\x74\x6f\x72\x3a\x20\x41\x64\x6f\x62\x65\x20\x49\x6c\x6c\x75\
+\x73\x74\x72\x61\x74\x6f\x72\x20\x31\x36\x2e\x32\x2e\x31\x2c\x20\
+\x53\x56\x47\x20\x45\x78\x70\x6f\x72\x74\x20\x50\x6c\x75\x67\x2d\
+\x49\x6e\x20\x2e\x20\x53\x56\x47\x20\x56\x65\x72\x73\x69\x6f\x6e\
+\x3a\x20\x36\x2e\x30\x30\x20\x42\x75\x69\x6c\x64\x20\x30\x29\x20\
+\x20\x2d\x2d\x3e\x0a\x3c\x21\x44\x4f\x43\x54\x59\x50\x45\x20\x73\
+\x76\x67\x20\x50\x55\x42\x4c\x49\x43\x20\x22\x2d\x2f\x2f\x57\x33\
+\x43\x2f\x2f\x44\x54\x44\x20\x53\x56\x47\x20\x31\x2e\x31\x2f\x2f\
+\x45\x4e\x22\x20\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\
+\x77\x33\x2e\x6f\x72\x67\x2f\x47\x72\x61\x70\x68\x69\x63\x73\x2f\
+\x53\x56\x47\x2f\x31\x2e\x31\x2f\x44\x54\x44\x2f\x73\x76\x67\x31\
+\x31\x2e\x64\x74\x64\x22\x3e\x0a\x3c\x73\x76\x67\x20\x76\x65\x72\
+\x73\x69\x6f\x6e\x3d\x22\x31\x2e\x31\x22\x20\x69\x64\x3d\x22\x4c\
+\x61\x79\x65\x72\x5f\x31\x22\x20\x78\x6d\x6c\x6e\x73\x3d\x22\x68\
+\x74\x74\x70\x3a\x2f\x2f\x77\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\
+\x2f\x32\x30\x30\x30\x2f\x73\x76\x67\x22\x20\x78\x6d\x6c\x6e\x73\
+\x3a\x78\x6c\x69\x6e\x6b\x3d\x22\x68\x74\x74\x70\x3a\x2f\x2f\x77\
+\x77\x77\x2e\x77\x33\x2e\x6f\x72\x67\x2f\x31\x39\x39\x39\x2f\x78\
+\x6c\x69\x6e\x6b\x22\x20\x78\x3d\x22\x30\x70\x78\x22\x20\x79\x3d\
+\x22\x30\x70\x78\x22\x0a\x09\x20\x77\x69\x64\x74\x68\x3d\x22\x35\
+\x31\x32\x70\x78\x22\x20\x68\x65\x69\x67\x68\x74\x3d\x22\x35\x31\
+\x32\x70\x78\x22\x20\x76\x69\x65\x77\x42\x6f\x78\x3d\x22\x30\x20\
+\x30\x20\x35\x31\x32\x20\x35\x31\x32\x22\x20\x73\x74\x79\x6c\x65\
+\x3d\x22\x65\x6e\x61\x62\x6c\x65\x2d\x62\x61\x63\x6b\x67\x72\x6f\
+\x75\x6e\x64\x3a\x6e\x65\x77\x20\x30\x20\x30\x20\x35\x31\x32\x20\
+\x35\x31\x32\x3b\x22\x20\x78\x6d\x6c\x3a\x73\x70\x61\x63\x65\x3d\
+\x22\x70\x72\x65\x73\x65\x72\x76\x65\x22\x3e\x0a\x3c\x70\x61\x74\
+\x68\x20\x64\x3d\x22\x4d\x34\x31\x37\x2e\x34\x2c\x32\x32\x34\x48\
+\x32\x38\x38\x56\x39\x34\x2e\x36\x63\x30\x2d\x31\x36\x2e\x39\x2d\
+\x31\x34\x2e\x33\x2d\x33\x30\x2e\x36\x2d\x33\x32\x2d\x33\x30\x2e\
+\x36\x63\x2d\x31\x37\x2e\x37\x2c\x30\x2d\x33\x32\x2c\x31\x33\x2e\
+\x37\x2d\x33\x32\x2c\x33\x30\x2e\x36\x56\x32\x32\x34\x48\x39\x34\
+\x2e\x36\x43\x37\x37\x2e\x37\x2c\x32\x32\x34\x2c\x36\x34\x2c\x32\
+\x33\x38\x2e\x33\x2c\x36\x34\x2c\x32\x35\x36\x0a\x09\x63\x30\x2c\
+\x31\x37\x2e\x37\x2c\x31\x33\x2e\x37\x2c\x33\x32\x2c\x33\x30\x2e\
+\x36\x2c\x33\x32\x48\x32\x32\x34\x76\x31\x32\x39\x2e\x34\x63\x30\
+\x2c\x31\x36\x2e\x39\x2c\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2c\
+\x33\x32\x2c\x33\x30\x2e\x36\x63\x31\x37\x2e\x37\x2c\x30\x2c\x33\
+\x32\x2d\x31\x33\x2e\x37\x2c\x33\x32\x2d\x33\x30\x2e\x36\x56\x32\
+\x38\x38\x68\x31\x32\x39\x2e\x34\x63\x31\x36\x2e\x39\x2c\x30\x2c\
+\x33\x30\x2e\x36\x2d\x31\x34\x2e\x33\x2c\x33\x30\x2e\x36\x2d\x33\
+\x32\x0a\x09\x43\x34\x34\x38\x2c\x32\x33\x38\x2e\x33\x2c\x34\x33\
+\x34\x2e\x33\x2c\x32\x32\x34\x2c\x34\x31\x37\x2e\x34\x2c\x32\x32\
+\x34\x7a\x22\x2f\x3e\x0a\x3c\x2f\x73\x76\x67\x3e\x0a\
+"
+
+qt_resource_name = b"\
+\x00\x05\
+\x00\x6f\xa6\x53\
+\x00\x69\
+\x00\x63\x00\x6f\x00\x6e\x00\x73\
+\x00\x1c\
+\x08\x8a\x79\x07\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x66\x00\x66\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x0c\x57\x65\x47\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x72\x00\x65\x00\x73\x00\x69\x00\x7a\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\x89\xfa\x47\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x6f\x00\x72\x00\x69\x00\x67\x00\x69\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x05\xa8\x57\x87\
+\x00\x63\
+\x00\x6f\x00\x64\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x04\xb2\x55\x47\
+\x00\x75\
+\x00\x6e\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x09\x76\x60\xc7\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x14\
+\x0f\xa5\xe0\xc7\
+\x00\x6d\
+\x00\x61\x00\x67\x00\x6e\x00\x69\x00\x66\x00\x79\x00\x69\x00\x6e\x00\x67\x00\x2d\x00\x67\x00\x6c\x00\x61\x00\x73\x00\x73\x00\x2e\
+\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0c\xa7\xc7\x47\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x1d\
+\x06\xec\xf4\xc7\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x72\x00\x69\x00\x67\x00\x68\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x04\xf2\xa7\x87\
+\x00\x63\
+\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x64\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x09\
+\x0b\x9e\x89\x07\
+\x00\x63\
+\x00\x68\x00\x65\x00\x63\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x16\
+\x01\xfb\x76\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x62\x00\x61\x00\x63\
+\x00\x6b\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x15\
+\x0f\xc4\x59\xe7\
+\x00\x73\
+\x00\x75\x00\x62\x00\x64\x00\x69\x00\x72\x00\x65\x00\x63\x00\x74\x00\x6f\x00\x72\x00\x79\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\
+\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x04\xb2\x21\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x65\x00\x78\x00\x70\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x08\
+\x0c\xf7\x55\x87\
+\x00\x74\
+\x00\x65\x00\x78\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x0c\x5e\xd4\xa7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x6c\x00\x6f\x00\x63\x00\x61\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x19\
+\x0a\x43\x45\xc7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x61\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x66\x00\x6f\x00\x72\
+\x00\x77\x00\x61\x00\x72\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0f\
+\x07\x0e\xc4\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x70\x00\x6f\x00\x6c\x00\x79\x00\x67\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x07\
+\x0c\xf8\x5a\x07\
+\x00\x65\
+\x00\x79\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xc8\x55\xe7\
+\x00\x73\
+\x00\x61\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x0a\x2d\x1b\xc7\
+\x00\x63\
+\x00\x69\x00\x72\x00\x63\x00\x6c\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x08\x79\x97\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x61\x00\x6d\x00\x65\x00\x72\x00\x61\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x1b\
+\x0e\xb5\x68\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x61\x00\x64\x00\x69\x00\x6f\x00\x2d\x00\x62\x00\x75\x00\x74\
+\x00\x74\x00\x6f\x00\x6e\x00\x2d\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\xb2\x55\xc7\
+\x00\x72\
+\x00\x65\x00\x64\x00\x6f\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x01\x60\xbc\x47\
+\x00\x73\
+\x00\x6f\x00\x63\x00\x69\x00\x61\x00\x6c\x00\x2d\x00\x70\x00\x79\x00\x74\x00\x68\x00\x6f\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x19\
+\x0f\xef\x7b\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6f\x00\x6c\x00\x6f\x00\x72\x00\x2d\x00\x70\x00\x61\x00\x6c\
+\x00\x65\x00\x74\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x06\xe3\xaf\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x68\x00\x61\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x11\
+\x0c\xdb\x38\xe7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x63\x00\x6c\x00\x6f\x00\x73\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\
+\x00\x13\
+\x03\x24\x75\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x72\x00\x65\x00\x66\x00\x72\x00\x65\x00\x73\x00\x68\x00\x2e\x00\x73\
+\x00\x76\x00\x67\
+\x00\x0a\
+\x0f\x68\x53\xe7\
+\x00\x61\
+\x00\x6e\x00\x63\x00\x68\x00\x6f\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x05\xed\x38\x67\
+\x00\x61\
+\x00\x72\x00\x72\x00\x6f\x00\x77\x00\x2d\x00\x6d\x00\x6f\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x04\xa9\x22\xc7\
+\x00\x66\
+\x00\x69\x00\x6c\x00\x6c\x00\x65\x00\x64\x00\x62\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x08\xf7\x57\x07\
+\x00\x67\
+\x00\x72\x00\x69\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x12\
+\x08\x55\xef\xc7\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x65\x00\x6c\x00\x65\x00\x74\x00\x65\x00\x2e\x00\x73\x00\x76\
+\x00\x67\
+\x00\x0a\
+\x0a\xc8\x62\x67\
+\x00\x63\
+\x00\x65\x00\x6e\x00\x74\x00\x65\x00\x72\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x08\
+\x0b\x07\x57\xa7\
+\x00\x65\
+\x00\x64\x00\x69\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x07\x87\x48\x27\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x66\x00\x6f\x00\x6c\x00\x64\x00\x65\x00\x72\x00\x2d\x00\x6f\x00\x70\
+\x00\x65\x00\x6e\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x10\
+\x08\xe4\xaf\x47\
+\x00\x61\
+\x00\x6e\x00\x64\x00\x72\x00\x6f\x00\x69\x00\x64\x00\x2d\x00\x64\x00\x6f\x00\x6e\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x1c\
+\x04\x66\xe1\x67\
+\x00\x63\
+\x00\x68\x00\x65\x00\x76\x00\x72\x00\x6f\x00\x6e\x00\x2d\x00\x77\x00\x69\x00\x74\x00\x68\x00\x2d\x00\x63\x00\x69\x00\x72\x00\x63\
+\x00\x6c\x00\x65\x00\x2d\x00\x6c\x00\x65\x00\x66\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x09\
+\x0c\x9b\x89\xe7\
+\x00\x62\
+\x00\x72\x00\x75\x00\x73\x00\x68\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0d\
+\x05\x20\xce\x87\
+\x00\x6f\
+\x00\x70\x00\x65\x00\x6e\x00\x63\x00\x75\x00\x72\x00\x76\x00\x65\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x17\
+\x06\xc6\x02\xa7\
+\x00\x74\
+\x00\x72\x00\x69\x00\x61\x00\x6e\x00\x67\x00\x6c\x00\x65\x00\x2d\x00\x73\x00\x74\x00\x72\x00\x6f\x00\x6b\x00\x65\x00\x64\x00\x2d\
+\x00\x31\x00\x35\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0a\
+\x01\xca\x6d\x87\
+\x00\x62\
+\x00\x75\x00\x63\x00\x6b\x00\x65\x00\x74\x00\x2e\x00\x73\x00\x76\x00\x67\
+\x00\x0e\
+\x0f\xcb\xd5\xc7\
+\x00\x70\
+\x00\x6c\x00\x75\x00\x73\x00\x2d\x00\x72\x00\x6f\x00\x75\x00\x6e\x00\x64\x00\x2e\x00\x73\x00\x76\x00\x67\
+"
+
+qt_resource_struct_v1 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
+\x00\x00\x03\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x4e\xfb\
+\x00\x00\x06\x54\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x67\
+\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x28\xd9\
+\x00\x00\x04\x52\x00\x00\x00\x00\x00\x01\x00\x00\x63\xf2\
+\x00\x00\x05\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x7e\x58\
+\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x00\x6b\x43\
+\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xbf\
+\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x11\
+\x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x00\x21\x2b\
+\x00\x00\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\x86\x22\
+\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x09\x71\
+\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x00\x68\x7e\
+\x00\x00\x06\x20\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x99\
+\x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x84\
+\x00\x00\x01\x40\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x4e\
+\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xdb\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x78\x9c\
+\x00\x00\x04\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x3f\
+\x00\x00\x03\x28\x00\x00\x00\x00\x00\x01\x00\x00\x44\x58\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x05\x6f\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xd2\
+\x00\x00\x05\x84\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xe8\
+\x00\x00\x04\xe0\x00\x01\x00\x00\x00\x01\x00\x00\x6d\x63\
+\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x12\x2c\
+\x00\x00\x03\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x41\x6d\
+\x00\x00\x02\x88\x00\x00\x00\x00\x00\x01\x00\x00\x34\x65\
+\x00\x00\x05\x20\x00\x00\x00\x00\x00\x01\x00\x00\x71\xdb\
+\x00\x00\x05\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x75\x39\
+\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x25\xd2\
+\x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x4a\xb5\
+\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x02\xf4\
+\x00\x00\x02\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x30\x0d\
+\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x82\x44\
+\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x19\x28\
+\x00\x00\x04\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x61\x43\
+\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xed\
+\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xf2\
+\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x47\x72\
+\x00\x00\x04\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x67\x11\
+\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x15\x6d\
+\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x4f\
+\x00\x00\x06\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x95\x07\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x56\x6a\
+"
+
+qt_resource_struct_v2 = b"\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x02\x00\x00\x00\x2c\x00\x00\x00\x02\
+\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x03\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x4e\xfb\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x06\x54\x00\x00\x00\x00\x00\x01\x00\x00\x8f\x67\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x01\xbc\x00\x00\x00\x00\x00\x01\x00\x00\x28\xd9\
+\x00\x00\x01\x86\x34\x85\x88\xf4\
+\x00\x00\x04\x52\x00\x00\x00\x00\x00\x01\x00\x00\x63\xf2\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x05\xaa\x00\x00\x00\x00\x00\x01\x00\x00\x7e\x58\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x04\xba\x00\x01\x00\x00\x00\x01\x00\x00\x6b\x43\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x02\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x2b\xbf\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x00\xb0\x00\x00\x00\x00\x00\x01\x00\x00\x0e\x11\
+\x00\x00\x01\x86\x34\x85\x88\xf9\
+\x00\x00\x01\x80\x00\x00\x00\x00\x00\x01\x00\x00\x21\x2b\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x06\x00\x00\x00\x00\x00\x00\x01\x00\x00\x86\x22\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x00\x9a\x00\x00\x00\x00\x00\x01\x00\x00\x09\x71\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x04\x98\x00\x00\x00\x00\x00\x01\x00\x00\x68\x7e\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x06\x20\x00\x00\x00\x00\x00\x01\x00\x00\x8a\x99\
+\x00\x00\x01\x86\x34\x85\x88\xf9\
+\x00\x00\x04\x04\x00\x00\x00\x00\x00\x01\x00\x00\x5b\x84\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x01\x40\x00\x00\x00\x00\x00\x01\x00\x00\x1d\x4e\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x02\xc0\x00\x00\x00\x00\x00\x01\x00\x00\x36\xdb\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x05\x50\x00\x00\x00\x00\x00\x01\x00\x00\x78\x9c\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x04\xf6\x00\x00\x00\x00\x00\x01\x00\x00\x6f\x3f\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x03\x28\x00\x00\x00\x00\x00\x01\x00\x00\x44\x58\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x00\x74\x00\x00\x00\x00\x00\x01\x00\x00\x05\x6f\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x00\x10\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x02\xf8\x00\x00\x00\x00\x00\x01\x00\x00\x3e\xd2\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x05\x84\x00\x00\x00\x00\x00\x01\x00\x00\x7b\xe8\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x04\xe0\x00\x01\x00\x00\x00\x01\x00\x00\x6d\x63\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x00\xc6\x00\x00\x00\x00\x00\x01\x00\x00\x12\x2c\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x03\x0e\x00\x00\x00\x00\x00\x01\x00\x00\x41\x6d\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x02\x88\x00\x00\x00\x00\x00\x01\x00\x00\x34\x65\
+\x00\x00\x01\x86\x34\x85\x88\xf4\
+\x00\x00\x05\x20\x00\x00\x00\x00\x00\x01\x00\x00\x71\xdb\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x05\x3a\x00\x00\x00\x00\x00\x01\x00\x00\x75\x39\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x01\xa4\x00\x00\x00\x00\x00\x01\x00\x00\x25\xd2\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x03\x8e\x00\x00\x00\x00\x00\x01\x00\x00\x4a\xb5\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x00\x4e\x00\x00\x00\x00\x00\x01\x00\x00\x02\xf4\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x02\x5e\x00\x00\x00\x00\x00\x01\x00\x00\x30\x0d\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x05\xe8\x00\x00\x00\x00\x00\x01\x00\x00\x82\x44\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x01\x18\x00\x00\x00\x00\x00\x01\x00\x00\x19\x28\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x04\x2a\x00\x00\x00\x00\x00\x01\x00\x00\x61\x43\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+\x00\x00\x02\x48\x00\x00\x00\x00\x00\x01\x00\x00\x2e\xed\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x02\xe4\x00\x00\x00\x00\x00\x01\x00\x00\x3a\xf2\
+\x00\x00\x01\x86\x34\x85\x88\xf7\
+\x00\x00\x03\x52\x00\x00\x00\x00\x00\x01\x00\x00\x47\x72\
+\x00\x00\x01\x86\x34\x85\x88\xf6\
+\x00\x00\x04\x7e\x00\x00\x00\x00\x00\x01\x00\x00\x67\x11\
+\x00\x00\x01\x86\x34\x85\x88\xf4\
+\x00\x00\x00\xea\x00\x00\x00\x00\x00\x01\x00\x00\x15\x6d\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x01\xee\x00\x00\x00\x00\x00\x01\x00\x00\x2b\x4f\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x06\x6e\x00\x00\x00\x00\x00\x01\x00\x00\x95\x07\
+\x00\x00\x01\x86\x34\x85\x88\xf8\
+\x00\x00\x03\xcc\x00\x00\x00\x00\x00\x01\x00\x00\x56\x6a\
+\x00\x00\x01\x86\x34\x85\x88\xf5\
+"
+
+qt_version = [int(v) for v in QtCore.qVersion().split('.')]
+if qt_version < [5, 8, 0]:
+ rcc_version = 1
+ qt_resource_struct = qt_resource_struct_v1
+else:
+ rcc_version = 2
+ qt_resource_struct = qt_resource_struct_v2
+
+def qInitResources():
+ QtCore.qRegisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+def qCleanupResources():
+ QtCore.qUnregisterResourceData(rcc_version, qt_resource_struct, qt_resource_name, qt_resource_data)
+
+qInitResources()
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons.qrc b/Master/texmf-dist/asymptote/GUI/res/icons.qrc
deleted file mode 100644
index 5ca468acc2a..00000000000
--- a/Master/texmf-dist/asymptote/GUI/res/icons.qrc
+++ /dev/null
@@ -1,48 +0,0 @@
-<RCC>
- <qresource prefix="">
- <file>icons/android-arrow-back.svg</file>
- <file>icons/android-arrow-forward.svg</file>
- <file>icons/android-folder-open.svg</file>
- <file>icons/save.svg</file>
- <file>icons/code.svg</file>
- <file>icons/android-camera.svg</file>
- <file>icons/plus-round.svg</file>
- <file>icons/grid.svg</file>
- <file>icons/magnifying-glass.svg</file>
- <file>icons/center.svg</file>
- <file>icons/centerorigin.svg</file>
- <file>icons/edit.svg</file>
- <file>icons/android-delete.svg</file>
- <file>icons/android-hand.svg</file>
- <file>icons/arrow-move.svg</file>
- <file>icons/arrow-resize.svg</file>
- <file>icons/android-refresh.svg</file>
- <file>icons/anchor.svg</file>
- <file>icons/eye.svg</file>
- <file>icons/android-expand.svg</file>
- <file>icons/chevron-with-circle-left.svg</file>
- <file>icons/chevron-with-circle-right.svg</file>
- <file>icons/bucket.svg</file>
- <file>icons/filledbucket.svg</file>
- <file>icons/android-color-palette.svg</file>
- <file>icons/openpolygon.svg</file>
- <file>icons/closedpolygon.svg</file>
- <file>icons/opencurve.svg</file>
- <file>icons/closedcurve.svg</file>
- <file>icons/triangle-stroked-15.svg</file>
- <file>icons/circle.svg</file>
- <file>icons/text.svg</file>
- <file>icons/social-python.svg</file>
- <file>icons/subdirectory-left.svg</file>
- <file>icons/android-done.svg</file>
- <file>icons/android-close.svg</file>
- <file>icons/check.svg</file>
- <file>icons/android-radio-button-on.svg</file>
- <file>icons/android-radio-button-off.svg</file>
- <file>icons/android-locate.svg</file>
- <file>icons/close-round.svg</file>
- <file>icons/brush.svg</file>
- <file>icons/undo.svg</file>
- <file>icons/redo.svg</file>
- </qresource>
-</RCC>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg
index 79cfe814a1b..309afd31065 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-back.svg
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_8_">
- <g>
- <path d="M427,234.625H167.296l119.702-119.702L256,85L85,256l171,171l29.922-29.924L167.296,277.375H427V234.625z"/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_8_">
+ <g>
+ <path d="M427,234.625H167.296l119.702-119.702L256,85L85,256l171,171l29.922-29.924L167.296,277.375H427V234.625z"/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg
index d63794dcc0a..e40696fd38b 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-arrow-forward.svg
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_8_">
- <g>
- <path d="M85,277.375h259.704L225.002,397.077L256,427l171-171L256,85l-29.922,29.924l118.626,119.701H85V277.375z"/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_8_">
+ <g>
+ <path d="M85,277.375h259.704L225.002,397.077L256,427l171-171L256,85l-29.922,29.924l118.626,119.701H85V277.375z"/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg
index 73aeaabe49c..2dd4720ad65 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-camera.svg
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
- <circle cx="256" cy="280" r="63"/>
- <path d="M440,96h-88l-32-32H192l-32,32H72c-22.092,0-40,17.908-40,40v272c0,22.092,17.908,40,40,40h368c22.092,0,40-17.908,40-40
- V136C480,113.908,462.092,96,440,96z M256,392c-61.855,0-112-50.145-112-112s50.145-112,112-112s112,50.145,112,112
- S317.855,392,256,392z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+ <circle cx="256" cy="280" r="63"/>
+ <path d="M440,96h-88l-32-32H192l-32,32H72c-22.092,0-40,17.908-40,40v272c0,22.092,17.908,40,40,40h368c22.092,0,40-17.908,40-40
+ V136C480,113.908,462.092,96,440,96z M256,392c-61.855,0-112-50.145-112-112s50.145-112,112-112s112,50.145,112,112
+ S317.855,392,256,392z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg
index aee0f9f630e..3184bc13d8c 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-close.svg
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_5_">
- <g>
- <polygon points="405,136.798 375.202,107 256,226.202 136.798,107 107,136.798 226.202,256 107,375.202 136.798,405 256,285.798
- 375.202,405 405,375.202 285.798,256 "/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_5_">
+ <g>
+ <polygon points="405,136.798 375.202,107 256,226.202 136.798,107 107,136.798 226.202,256 107,375.202 136.798,405 256,285.798
+ 375.202,405 405,375.202 285.798,256 "/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg
index d700fe6b9d2..fddb19cfead 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-color-palette.svg
@@ -1,17 +1,17 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_12_">
- <g>
- <path d="M256,64C150.401,64,64,150.401,64,256c0,105.604,86.401,192,192,192c18.136,0,32-13.864,32-32
- c0-8.531-3.198-16-8.531-21.333c-5.333-5.334-8.531-12.803-8.531-21.334c0-18.135,13.864-32,32-32h38.396
- c58.667,0,106.667-48,106.667-106.666C448,140.802,361.604,64,256,64z M138.667,256c-18.136,0-32-13.864-32-32s13.864-32,32-32
- c18.135,0,32,13.864,32,32S156.802,256,138.667,256z M202.667,170.667c-18.136,0-32-13.865-32-32c0-18.136,13.864-32,32-32
- c18.135,0,32,13.864,32,32C234.667,156.802,220.802,170.667,202.667,170.667z M309.333,170.667c-18.135,0-32-13.865-32-32
- c0-18.136,13.865-32,32-32c18.136,0,32,13.864,32,32C341.333,156.802,327.469,170.667,309.333,170.667z M373.333,256
- c-18.135,0-32-13.864-32-32s13.865-32,32-32c18.136,0,32,13.864,32,32S391.469,256,373.333,256z"/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_12_">
+ <g>
+ <path d="M256,64C150.401,64,64,150.401,64,256c0,105.604,86.401,192,192,192c18.136,0,32-13.864,32-32
+ c0-8.531-3.198-16-8.531-21.333c-5.333-5.334-8.531-12.803-8.531-21.334c0-18.135,13.864-32,32-32h38.396
+ c58.667,0,106.667-48,106.667-106.666C448,140.802,361.604,64,256,64z M138.667,256c-18.136,0-32-13.864-32-32s13.864-32,32-32
+ c18.135,0,32,13.864,32,32S156.802,256,138.667,256z M202.667,170.667c-18.136,0-32-13.865-32-32c0-18.136,13.864-32,32-32
+ c18.135,0,32,13.864,32,32C234.667,156.802,220.802,170.667,202.667,170.667z M309.333,170.667c-18.135,0-32-13.865-32-32
+ c0-18.136,13.865-32,32-32c18.136,0,32,13.864,32,32C341.333,156.802,327.469,170.667,309.333,170.667z M373.333,256
+ c-18.135,0-32-13.864-32-32s13.865-32,32-32c18.136,0,32,13.864,32,32S391.469,256,373.333,256z"/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg
index 49cfa5ade43..9159a4859f3 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-delete.svg
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
- <path d="M128,405.429C128,428.846,147.198,448,170.667,448h170.667C364.802,448,384,428.846,384,405.429V160H128V405.429z M416,96
- h-80l-26.785-32H202.786L176,96H96v32h320V96z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+ <path d="M128,405.429C128,428.846,147.198,448,170.667,448h170.667C364.802,448,384,428.846,384,405.429V160H128V405.429z M416,96
+ h-80l-26.785-32H202.786L176,96H96v32h320V96z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg
index 4bcb946f058..fbd6e5cd7be 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-done.svg
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_1_">
- <g>
- <g>
- <polygon points="186.301,339.893 96,249.461 64,279.968 186.301,402 448,140.506 416,110 "/>
- </g>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_1_">
+ <g>
+ <g>
+ <polygon points="186.301,339.893 96,249.461 64,279.968 186.301,402 448,140.506 416,110 "/>
+ </g>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg
index 51be003c07a..beb08b2eeed 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-expand.svg
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
- <polygon points="396.795,396.8 320,396.8 320,448 448,448 448,320 396.795,320 "/>
- <polygon points="396.8,115.205 396.8,192 448,192 448,64 320,64 320,115.205 "/>
- <polygon points="115.205,115.2 192,115.2 192,64 64,64 64,192 115.205,192 "/>
- <polygon points="115.2,396.795 115.2,320 64,320 64,448 192,448 192,396.795 "/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+ <polygon points="396.795,396.8 320,396.8 320,448 448,448 448,320 396.795,320 "/>
+ <polygon points="396.8,115.205 396.8,192 448,192 448,64 320,64 320,115.205 "/>
+ <polygon points="115.205,115.2 192,115.2 192,64 64,64 64,192 115.205,192 "/>
+ <polygon points="115.2,396.795 115.2,320 64,320 64,448 192,448 192,396.795 "/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg
index fa77fea2154..19545aa6bc8 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-folder-open.svg
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<path d="M437.334,144H256.006l-42.668-48H74.666C51.197,96,32,115.198,32,138.667v234.666C32,396.802,51.197,416,74.666,416h362.668
- C460.803,416,480,396.802,480,373.333V186.667C480,163.198,460.803,144,437.334,144z M448,373.333
- c0,5.782-4.885,10.667-10.666,10.667H74.666C68.884,384,64,379.115,64,373.333V176h373.334c5.781,0,10.666,4.885,10.666,10.667
- V373.333z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<path d="M437.334,144H256.006l-42.668-48H74.666C51.197,96,32,115.198,32,138.667v234.666C32,396.802,51.197,416,74.666,416h362.668
+ C460.803,416,480,396.802,480,373.333V186.667C480,163.198,460.803,144,437.334,144z M448,373.333
+ c0,5.782-4.885,10.667-10.666,10.667H74.666C68.884,384,64,379.115,64,373.333V176h373.334c5.781,0,10.666,4.885,10.666,10.667
+ V373.333z"/>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg
index 5035d875be1..5fdc8100db6 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-hand.svg
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<path d="M450.679,273.5c-14.585-14.577-36.054-15.89-50.639-1.312l-41.687,41.664c-10.852,10.836-23.93,10.859-31.564,1.852
- c-5.057-5.968-3.061-24.374-1.644-36.049l20.907-171.849c1.867-15.353-9.07-30.185-24.43-32.051
- c-15.358-1.867-29.322,9.939-31.191,25.289L267.37,236.021c-1.205,3.358-3.79,3.938-4.081-0.582L255.44,60
- c0-15.465-12.542-28-28.014-28c-15.473,0-28.015,12.535-28.015,28l-0.552,176.752c0.146,2.04-1.604,2.624-1.92,0.294L172.016,99.077
- c-2.75-15.219-17.323-26.203-32.548-23.453c-15.227,2.748-25.339,18.187-22.591,33.403l22.193,161.455
- c0.023,2.872-0.941,4.513-2.308,0.831l-33.109-88.517c-5.18-14.572-21.196-23.065-35.776-17.889
- c-14.579,5.177-22.201,22.061-17.023,36.631l58.042,189.625c0.303,1.046,0.624,2.085,0.953,3.118l0.121,0.39
- c0.011,0.031,0.025,0.058,0.035,0.088C126.079,444.233,172.57,480,227.427,480c35.116,0,71.591-12.378,99.357-33.672
- c0.001,0,0.003-0.002,0.003-0.002c29.99-18.051,126.071-121.347,126.071-121.347C467.445,310.402,465.266,288.08,450.679,273.5z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<path d="M450.679,273.5c-14.585-14.577-36.054-15.89-50.639-1.312l-41.687,41.664c-10.852,10.836-23.93,10.859-31.564,1.852
+ c-5.057-5.968-3.061-24.374-1.644-36.049l20.907-171.849c1.867-15.353-9.07-30.185-24.43-32.051
+ c-15.358-1.867-29.322,9.939-31.191,25.289L267.37,236.021c-1.205,3.358-3.79,3.938-4.081-0.582L255.44,60
+ c0-15.465-12.542-28-28.014-28c-15.473,0-28.015,12.535-28.015,28l-0.552,176.752c0.146,2.04-1.604,2.624-1.92,0.294L172.016,99.077
+ c-2.75-15.219-17.323-26.203-32.548-23.453c-15.227,2.748-25.339,18.187-22.591,33.403l22.193,161.455
+ c0.023,2.872-0.941,4.513-2.308,0.831l-33.109-88.517c-5.18-14.572-21.196-23.065-35.776-17.889
+ c-14.579,5.177-22.201,22.061-17.023,36.631l58.042,189.625c0.303,1.046,0.624,2.085,0.953,3.118l0.121,0.39
+ c0.011,0.031,0.025,0.058,0.035,0.088C126.079,444.233,172.57,480,227.427,480c35.116,0,71.591-12.378,99.357-33.672
+ c0.001,0,0.003-0.002,0.003-0.002c29.99-18.051,126.071-121.347,126.071-121.347C467.445,310.402,465.266,288.08,450.679,273.5z"/>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg
index e2dd098cbd3..a7b72bc4b1c 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-locate.svg
@@ -1,16 +1,16 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon">
- <g>
- <path d="M256,176c-44.004,0-80.001,36-80.001,80c0,44.004,35.997,80,80.001,80c44.005,0,79.999-35.996,79.999-80
- C335.999,212,300.005,176,256,176z M446.938,234.667c-9.605-88.531-81.074-160-169.605-169.599V32h-42.666v33.067
- c-88.531,9.599-160,81.068-169.604,169.599H32v42.667h33.062c9.604,88.531,81.072,160,169.604,169.604V480h42.666v-33.062
- c88.531-9.604,160-81.073,169.605-169.604H480v-42.667H446.938z M256,405.333c-82.137,0-149.334-67.198-149.334-149.333
- c0-82.136,67.197-149.333,149.334-149.333c82.135,0,149.332,67.198,149.332,149.333C405.332,338.135,338.135,405.333,256,405.333z
- "/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon">
+ <g>
+ <path d="M256,176c-44.004,0-80.001,36-80.001,80c0,44.004,35.997,80,80.001,80c44.005,0,79.999-35.996,79.999-80
+ C335.999,212,300.005,176,256,176z M446.938,234.667c-9.605-88.531-81.074-160-169.605-169.599V32h-42.666v33.067
+ c-88.531,9.599-160,81.068-169.604,169.599H32v42.667h33.062c9.604,88.531,81.072,160,169.604,169.604V480h42.666v-33.062
+ c88.531-9.604,160-81.073,169.605-169.604H480v-42.667H446.938z M256,405.333c-82.137,0-149.334-67.198-149.334-149.333
+ c0-82.136,67.197-149.333,149.334-149.333c82.135,0,149.332,67.198,149.332,149.333C405.332,338.135,338.135,405.333,256,405.333z
+ "/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg
index d36fa657c03..59042e31418 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-off.svg
@@ -1,12 +1,12 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_20_">
- <g>
- <path d="M256,48C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.399
- c-91.518,0-166.399-74.882-166.399-166.399S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.399,256,422.399z"/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_20_">
+ <g>
+ <path d="M256,48C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.399
+ c-91.518,0-166.399-74.882-166.399-166.399S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.399,256,422.399z"/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg
index 1f7f54c0f24..06c0235e9fe 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-radio-button-on.svg
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g id="Icon_21_">
- <g>
- <path d="M256,152c-57.2,0-104,46.8-104,104s46.8,104,104,104s104-46.8,104-104S313.2,152,256,152z M256,48
- C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.4
- c-91.518,0-166.4-74.883-166.4-166.4S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.4,256,422.4z"/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g id="Icon_21_">
+ <g>
+ <path d="M256,152c-57.2,0-104,46.8-104,104s46.8,104,104,104s104-46.8,104-104S313.2,152,256,152z M256,48
+ C141.601,48,48,141.601,48,256s93.601,208,208,208s208-93.601,208-208S370.399,48,256,48z M256,422.4
+ c-91.518,0-166.4-74.883-166.4-166.4S164.482,89.6,256,89.6S422.4,164.482,422.4,256S347.518,422.4,256,422.4z"/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg b/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg
index 066f7d22c6b..5b8867c2e88 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/android-refresh.svg
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
- <path d="M256,388c-72.597,0-132-59.405-132-132c0-72.601,59.403-132,132-132c36.3,0,69.299,15.4,92.406,39.601L278,234h154V80
- l-51.698,51.702C348.406,99.798,304.406,80,256,80c-96.797,0-176,79.203-176,176s78.094,176,176,176
- c81.045,0,148.287-54.134,169.401-128H378.85C360.105,353.561,311.712,388,256,388z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+ <path d="M256,388c-72.597,0-132-59.405-132-132c0-72.601,59.403-132,132-132c36.3,0,69.299,15.4,92.406,39.601L278,234h154V80
+ l-51.698,51.702C348.406,99.798,304.406,80,256,80c-96.797,0-176,79.203-176,176s78.094,176,176,176
+ c81.045,0,148.287-54.134,169.401-128H378.85C360.105,353.561,311.712,388,256,388z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg b/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg
index 1d4263f45a2..52541875355 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/arrow-move.svg
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<polygon points="480,256 384,160 384,236 276,236 276,128 352,128 256,32 160,128 236,128 236,236 128,236 128,160 32,256 128,352
- 128,276 236,276 236,384 160,384 256,480 352,384 275.8,384 275.4,275.5 384,275.8 384,352 "/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<polygon points="480,256 384,160 384,236 276,236 276,128 352,128 256,32 160,128 236,128 236,236 128,236 128,160 32,256 128,352
+ 128,276 236,276 236,384 160,384 256,480 352,384 275.8,384 275.4,275.5 384,275.8 384,352 "/>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg b/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg
index a9c3b3cc140..24feb2556c4 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/arrow-resize.svg
@@ -1,8 +1,8 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<polygon points="288,96 337.9,145.9 274,209.7 274,209.7 145.9,337.9 96,288 96,416 224,416 174.1,366.1 357.4,182.9 366.1,174.1
- 416,224 416,96 "/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<polygon points="288,96 337.9,145.9 274,209.7 274,209.7 145.9,337.9 96,288 96,416 224,416 174.1,366.1 357.4,182.9 366.1,174.1
+ 416,224 416,96 "/>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg b/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg
index 0c6a54340bd..da358605d89 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/brush.svg
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
- <path d="M48.451,464.828c40.023-0.315,45.01-9.955,58.052-50.132c24.057-63.408,132.419,16.591,65.269,44.374
- C104.622,486.852,8.428,465.143,48.451,464.828z"/>
- <path d="M458.857,46.902c-19.417-15.647-51.592-7.938-71.864,17.219L181.645,355.849c-20.272,25.154-20.171,20.347-0.754,35.992
- c19.417,15.648,14.738,16.77,35.011-8.388l241.406-262.669C477.581,95.628,478.275,62.55,458.857,46.902z M406.065,81.825
- c0,0-3-3.5-13-11.5c15-24.5,44.5-20,44.5-20C409.565,66.825,406.065,81.825,406.065,81.825z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+ <path d="M48.451,464.828c40.023-0.315,45.01-9.955,58.052-50.132c24.057-63.408,132.419,16.591,65.269,44.374
+ C104.622,486.852,8.428,465.143,48.451,464.828z"/>
+ <path d="M458.857,46.902c-19.417-15.647-51.592-7.938-71.864,17.219L181.645,355.849c-20.272,25.154-20.171,20.347-0.754,35.992
+ c19.417,15.648,14.738,16.77,35.011-8.388l241.406-262.669C477.581,95.628,478.275,62.55,458.857,46.902z M406.065,81.825
+ c0,0-3-3.5-13-11.5c15-24.5,44.5-20,44.5-20C409.565,66.825,406.065,81.825,406.065,81.825z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/check.svg b/Master/texmf-dist/asymptote/GUI/res/icons/check.svg
index 08ee56d87de..5da9a531d64 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/check.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/check.svg
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Check" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
-<path d="M8.294,16.998c-0.435,0-0.847-0.203-1.111-0.553L3.61,11.724c-0.465-0.613-0.344-1.486,0.27-1.951
- c0.615-0.467,1.488-0.344,1.953,0.27l2.351,3.104l5.911-9.492c0.407-0.652,1.267-0.852,1.921-0.445
- c0.653,0.406,0.854,1.266,0.446,1.92L9.478,16.34c-0.242,0.391-0.661,0.635-1.12,0.656C8.336,16.998,8.316,16.998,8.294,16.998z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Check" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 20 20" enable-background="new 0 0 20 20" xml:space="preserve">
+<path d="M8.294,16.998c-0.435,0-0.847-0.203-1.111-0.553L3.61,11.724c-0.465-0.613-0.344-1.486,0.27-1.951
+ c0.615-0.467,1.488-0.344,1.953,0.27l2.351,3.104l5.911-9.492c0.407-0.652,1.267-0.852,1.921-0.445
+ c0.653,0.406,0.854,1.266,0.446,1.92L9.478,16.34c-0.242,0.391-0.661,0.635-1.12,0.656C8.336,16.998,8.316,16.998,8.294,16.998z"/>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg b/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg
index 4035c688e8f..e2084b954ea 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-left.svg
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Chevron_circled_left" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M11.302,6.776c-0.196-0.197-0.515-0.197-0.71,0L7.785,9.641c-0.196,0.199-0.196,0.52,0,0.717l2.807,2.864
- c0.195,0.199,0.514,0.198,0.71,0c0.196-0.197,0.196-0.518,0-0.717L9,10l2.302-2.506C11.498,7.296,11.498,6.976,11.302,6.776z
- M10,0.4c-5.302,0-9.6,4.298-9.6,9.6c0,5.303,4.298,9.6,9.6,9.6s9.6-4.297,9.6-9.6C19.6,4.698,15.302,0.4,10,0.4z M10,18.354
- c-4.615,0-8.354-3.74-8.354-8.354c0-4.614,3.739-8.354,8.354-8.354c4.613,0,8.354,3.74,8.354,8.354
- C18.354,14.614,14.613,18.354,10,18.354z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Chevron_circled_left" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M11.302,6.776c-0.196-0.197-0.515-0.197-0.71,0L7.785,9.641c-0.196,0.199-0.196,0.52,0,0.717l2.807,2.864
+ c0.195,0.199,0.514,0.198,0.71,0c0.196-0.197,0.196-0.518,0-0.717L9,10l2.302-2.506C11.498,7.296,11.498,6.976,11.302,6.776z
+ M10,0.4c-5.302,0-9.6,4.298-9.6,9.6c0,5.303,4.298,9.6,9.6,9.6s9.6-4.297,9.6-9.6C19.6,4.698,15.302,0.4,10,0.4z M10,18.354
+ c-4.615,0-8.354-3.74-8.354-8.354c0-4.614,3.739-8.354,8.354-8.354c4.613,0,8.354,3.74,8.354,8.354
+ C18.354,14.614,14.613,18.354,10,18.354z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg b/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg
index f6e3a5e89c7..1d37a3903aa 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/chevron-with-circle-right.svg
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Chevron_circled_right" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
- x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M11,10L8.698,7.494c-0.196-0.198-0.196-0.519,0-0.718c0.196-0.197,0.515-0.197,0.71,0l2.807,2.864
- c0.196,0.199,0.196,0.52,0,0.717l-2.807,2.864c-0.195,0.199-0.514,0.198-0.71,0c-0.196-0.197-0.196-0.518,0-0.717L11,10z M10,0.4
- c5.302,0,9.6,4.298,9.6,9.6c0,5.303-4.298,9.6-9.6,9.6S0.4,15.303,0.4,10C0.4,4.698,4.698,0.4,10,0.4z M10,18.354
- c4.613,0,8.354-3.74,8.354-8.354c0-4.614-3.741-8.354-8.354-8.354c-4.615,0-8.354,3.74-8.354,8.354
- C1.645,14.614,5.385,18.354,10,18.354z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Chevron_circled_right" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
+ x="0px" y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M11,10L8.698,7.494c-0.196-0.198-0.196-0.519,0-0.718c0.196-0.197,0.515-0.197,0.71,0l2.807,2.864
+ c0.196,0.199,0.196,0.52,0,0.717l-2.807,2.864c-0.195,0.199-0.514,0.198-0.71,0c-0.196-0.197-0.196-0.518,0-0.717L11,10z M10,0.4
+ c5.302,0,9.6,4.298,9.6,9.6c0,5.303-4.298,9.6-9.6,9.6S0.4,15.303,0.4,10C0.4,4.698,4.698,0.4,10,0.4z M10,18.354
+ c4.613,0,8.354-3.74,8.354-8.354c0-4.614-3.741-8.354-8.354-8.354c-4.615,0-8.354,3.74-8.354,8.354
+ C1.645,14.614,5.385,18.354,10,18.354z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg b/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg
index e344602bcbe..1645280ddc3 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/circle.svg
@@ -1,11 +1,11 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Circle" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
- viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M10,0.4C4.698,0.4,0.4,4.698,0.4,10C0.4,15.302,4.698,19.6,10,19.6c5.301,0,9.6-4.298,9.6-9.601
- C19.6,4.698,15.301,0.4,10,0.4z M10,17.599c-4.197,0-7.6-3.402-7.6-7.6S5.802,2.4,10,2.4c4.197,0,7.601,3.402,7.601,7.6
- S14.197,17.599,10,17.599z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Circle" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
+ viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M10,0.4C4.698,0.4,0.4,4.698,0.4,10C0.4,15.302,4.698,19.6,10,19.6c5.301,0,9.6-4.298,9.6-9.601
+ C19.6,4.698,15.301,0.4,10,0.4z M10,17.599c-4.197,0-7.6-3.402-7.6-7.6S5.802,2.4,10,2.4c4.197,0,7.601,3.402,7.601,7.6
+ S14.197,17.599,10,17.599z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg b/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg
index d8b5554c5c1..e011f7bd657 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/close-round.svg
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<path d="M437.5,386.6L306.9,256l130.6-130.6c14.1-14.1,14.1-36.8,0-50.9c-14.1-14.1-36.8-14.1-50.9,0L256,205.1L125.4,74.5
- c-14.1-14.1-36.8-14.1-50.9,0c-14.1,14.1-14.1,36.8,0,50.9L205.1,256L74.5,386.6c-14.1,14.1-14.1,36.8,0,50.9
- c14.1,14.1,36.8,14.1,50.9,0L256,306.9l130.6,130.6c14.1,14.1,36.8,14.1,50.9,0C451.5,423.4,451.5,400.6,437.5,386.6z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<path d="M437.5,386.6L306.9,256l130.6-130.6c14.1-14.1,14.1-36.8,0-50.9c-14.1-14.1-36.8-14.1-50.9,0L256,205.1L125.4,74.5
+ c-14.1-14.1-36.8-14.1-50.9,0c-14.1,14.1-14.1,36.8,0,50.9L205.1,256L74.5,386.6c-14.1,14.1-14.1,36.8,0,50.9
+ c14.1,14.1,36.8,14.1,50.9,0L256,306.9l130.6,130.6c14.1,14.1,36.8,14.1,50.9,0C451.5,423.4,451.5,400.6,437.5,386.6z"/>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/code.svg b/Master/texmf-dist/asymptote/GUI/res/icons/code.svg
index b62357776a9..d0a62b3bb6d 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/code.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/code.svg
@@ -1,14 +1,14 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Code" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="24px" y="24px"
- viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'><path d="M5.719,14.75c-0.236,0-0.474-0.083-0.664-0.252L-0.005,10l5.341-4.748C5.748,4.887,6.38,4.922,6.747,5.335
- c0.367,0.413,0.33,1.045-0.083,1.412L3.005,10l3.378,3.002c0.413,0.367,0.45,0.999,0.083,1.412
- C6.269,14.637,5.994,14.75,5.719,14.75z M14.664,14.748L20.005,10l-5.06-4.498c-0.413-0.367-1.045-0.33-1.411,0.083
- c-0.367,0.413-0.33,1.045,0.083,1.412L16.995,10l-3.659,3.252c-0.413,0.367-0.45,0.999-0.083,1.412C13.45,14.887,13.725,15,14,15
- C14.236,15,14.474,14.917,14.664,14.748z M9.986,16.165l2-12c0.091-0.545-0.277-1.06-0.822-1.151
- c-0.547-0.092-1.061,0.277-1.15,0.822l-2,12c-0.091,0.545,0.277,1.06,0.822,1.151C8.892,16.996,8.946,17,9.001,17
- C9.481,17,9.905,16.653,9.986,16.165z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Code" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="24px" y="24px"
+ viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'><path d="M5.719,14.75c-0.236,0-0.474-0.083-0.664-0.252L-0.005,10l5.341-4.748C5.748,4.887,6.38,4.922,6.747,5.335
+ c0.367,0.413,0.33,1.045-0.083,1.412L3.005,10l3.378,3.002c0.413,0.367,0.45,0.999,0.083,1.412
+ C6.269,14.637,5.994,14.75,5.719,14.75z M14.664,14.748L20.005,10l-5.06-4.498c-0.413-0.367-1.045-0.33-1.411,0.083
+ c-0.367,0.413-0.33,1.045,0.083,1.412L16.995,10l-3.659,3.252c-0.413,0.367-0.45,0.999-0.083,1.412C13.45,14.887,13.725,15,14,15
+ C14.236,15,14.474,14.917,14.664,14.748z M9.986,16.165l2-12c0.091-0.545-0.277-1.06-0.822-1.151
+ c-0.547-0.092-1.061,0.277-1.15,0.822l-2,12c-0.091,0.545,0.277,1.06,0.822,1.151C8.892,16.996,8.946,17,9.001,17
+ C9.481,17,9.905,16.653,9.986,16.165z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg b/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg
index a0be3454e12..50d410ce59b 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/edit.svg
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
-
- <rect x="178.846" y="92.087" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 224.3476 631.1498)" width="128.085" height="354.049"/>
- <path d="M471.723,88.393l-48.115-48.114c-11.723-11.724-31.558-10.896-44.304,1.85l-45.202,45.203l90.569,90.568l45.202-45.202
- C482.616,119.952,483.445,100.116,471.723,88.393z"/>
- <polygon points="64.021,363.252 32,480 148.737,447.979 "/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+
+ <rect x="178.846" y="92.087" transform="matrix(-0.7071 -0.7071 0.7071 -0.7071 224.3476 631.1498)" width="128.085" height="354.049"/>
+ <path d="M471.723,88.393l-48.115-48.114c-11.723-11.724-31.558-10.896-44.304,1.85l-45.202,45.203l90.569,90.568l45.202-45.202
+ C482.616,119.952,483.445,100.116,471.723,88.393z"/>
+ <polygon points="64.021,363.252 32,480 148.737,447.979 "/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg b/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg
index 6b64633fce1..4b83a783f67 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/eye.svg
@@ -1,15 +1,15 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<g>
- <path d="M256,128c-81.9,0-145.7,48.8-224,128c67.4,67.7,124,128,224,128c99.9,0,173.4-76.4,224-126.6
- C428.2,198.6,354.8,128,256,128z M256,347.3c-49.4,0-89.6-41-89.6-91.3c0-50.4,40.2-91.3,89.6-91.3s89.6,41,89.6,91.3
- C345.6,306.4,305.4,347.3,256,347.3z"/>
- <g>
- <path d="M256,224c0-7.9,2.9-15.1,7.6-20.7c-2.5-0.4-5-0.6-7.6-0.6c-28.8,0-52.3,23.9-52.3,53.3c0,29.4,23.5,53.3,52.3,53.3
- s52.3-23.9,52.3-53.3c0-2.3-0.2-4.6-0.4-6.9c-5.5,4.3-12.3,6.9-19.8,6.9C270.3,256,256,241.7,256,224z"/>
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<g>
+ <path d="M256,128c-81.9,0-145.7,48.8-224,128c67.4,67.7,124,128,224,128c99.9,0,173.4-76.4,224-126.6
+ C428.2,198.6,354.8,128,256,128z M256,347.3c-49.4,0-89.6-41-89.6-91.3c0-50.4,40.2-91.3,89.6-91.3s89.6,41,89.6,91.3
+ C345.6,306.4,305.4,347.3,256,347.3z"/>
+ <g>
+ <path d="M256,224c0-7.9,2.9-15.1,7.6-20.7c-2.5-0.4-5-0.6-7.6-0.6c-28.8,0-52.3,23.9-52.3,53.3c0,29.4,23.5,53.3,52.3,53.3
+ s52.3-23.9,52.3-53.3c0-2.3-0.2-4.6-0.4-6.9c-5.5,4.3-12.3,6.9-19.8,6.9C270.3,256,256,241.7,256,224z"/>
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg b/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg
index 456e5011317..7100f22e850 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/grid.svg
@@ -1,32 +1,32 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<g>
- <g>
- <path d="M160,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
- />
- <path d="M288,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
- />
- <path d="M416,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
- />
- </g>
- <g>
- <path d="M160,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
- />
- <path d="M288,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
- />
- <path d="M416,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
- />
- </g>
- <g>
- <path d="M160,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
- />
- <path d="M288,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
- />
- <path d="M416,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
- />
- </g>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<g>
+ <g>
+ <path d="M160,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
+ />
+ <path d="M288,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
+ />
+ <path d="M416,153.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V153.3z"
+ />
+ </g>
+ <g>
+ <path d="M160,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
+ />
+ <path d="M288,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
+ />
+ <path d="M416,281.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V281.3z"
+ />
+ </g>
+ <g>
+ <path d="M160,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
+ />
+ <path d="M288,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
+ />
+ <path d="M416,409.3c0,3.7-3,6.7-6.7,6.7h-50.5c-3.7,0-6.7-3-6.7-6.7v-50.5c0-3.7,3-6.7,6.7-6.7h50.5c3.7,0,6.7,3,6.7,6.7V409.3z"
+ />
+ </g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg b/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg
index 1e93ba4f952..f1ac1ec321a 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/magnifying-glass.svg
@@ -1,13 +1,13 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Magnifying_glass" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
- y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M17.545,15.467l-3.779-3.779c0.57-0.935,0.898-2.035,0.898-3.21c0-3.417-2.961-6.377-6.378-6.377
- C4.869,2.1,2.1,4.87,2.1,8.287c0,3.416,2.961,6.377,6.377,6.377c1.137,0,2.2-0.309,3.115-0.844l3.799,3.801
- c0.372,0.371,0.975,0.371,1.346,0l0.943-0.943C18.051,16.307,17.916,15.838,17.545,15.467z M4.004,8.287
- c0-2.366,1.917-4.283,4.282-4.283c2.366,0,4.474,2.107,4.474,4.474c0,2.365-1.918,4.283-4.283,4.283
- C6.111,12.76,4.004,10.652,4.004,8.287z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Magnifying_glass" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px"
+ y="0px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M17.545,15.467l-3.779-3.779c0.57-0.935,0.898-2.035,0.898-3.21c0-3.417-2.961-6.377-6.378-6.377
+ C4.869,2.1,2.1,4.87,2.1,8.287c0,3.416,2.961,6.377,6.377,6.377c1.137,0,2.2-0.309,3.115-0.844l3.799,3.801
+ c0.372,0.371,0.975,0.371,1.346,0l0.943-0.943C18.051,16.307,17.916,15.838,17.545,15.467z M4.004,8.287
+ c0-2.366,1.917-4.283,4.282-4.283c2.366,0,4.474,2.107,4.474,4.474c0,2.365-1.918,4.283-4.283,4.283
+ C6.111,12.76,4.004,10.652,4.004,8.287z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg b/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg
index 465d937802b..b2d86e5083d 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/plus-round.svg
@@ -1,9 +1,9 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
-<path d="M417.4,224H288V94.6c0-16.9-14.3-30.6-32-30.6c-17.7,0-32,13.7-32,30.6V224H94.6C77.7,224,64,238.3,64,256
- c0,17.7,13.7,32,30.6,32H224v129.4c0,16.9,14.3,30.6,32,30.6c17.7,0,32-13.7,32-30.6V288h129.4c16.9,0,30.6-14.3,30.6-32
- C448,238.3,434.3,224,417.4,224z"/>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
+<path d="M417.4,224H288V94.6c0-16.9-14.3-30.6-32-30.6c-17.7,0-32,13.7-32,30.6V224H94.6C77.7,224,64,238.3,64,256
+ c0,17.7,13.7,32,30.6,32H224v129.4c0,16.9,14.3,30.6,32,30.6c17.7,0,32-13.7,32-30.6V288h129.4c16.9,0,30.6-14.3,30.6-32
+ C448,238.3,434.3,224,417.4,224z"/>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg b/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg
index a8647d7a3c1..6c9d9c83fbb 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/redo.svg
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
-<path d="M407.516,123.239l-27.717,11.48c18.585,44.869,18.585,94.291,0,139.159c-18.585,44.869-53.531,79.815-98.4,98.4
- c-22.438,9.293-46.004,13.94-69.579,13.939c-23.569-0.001-47.147-4.647-69.579-13.939c-44.869-18.585-79.815-53.531-98.4-98.4
- C13.507,200.647,34.758,118.71,90.758,68.644l60.801,60.801V7.521H29.635L69.514,47.4C5.222,105.826-18.985,200.6,16.123,285.359
- c21.652,52.272,62.364,92.984,114.636,114.636c26.137,10.826,53.599,16.239,81.061,16.239s54.924-5.413,81.06-16.239
- c52.272-21.652,92.984-62.364,114.637-114.636C429.167,233.087,429.167,175.511,407.516,123.239z"/>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-</svg>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
+<path d="M407.516,123.239l-27.717,11.48c18.585,44.869,18.585,94.291,0,139.159c-18.585,44.869-53.531,79.815-98.4,98.4
+ c-22.438,9.293-46.004,13.94-69.579,13.939c-23.569-0.001-47.147-4.647-69.579-13.939c-44.869-18.585-79.815-53.531-98.4-98.4
+ C13.507,200.647,34.758,118.71,90.758,68.644l60.801,60.801V7.521H29.635L69.514,47.4C5.222,105.826-18.985,200.6,16.123,285.359
+ c21.652,52.272,62.364,92.984,114.636,114.636c26.137,10.826,53.599,16.239,81.061,16.239s54.924-5.413,81.06-16.239
+ c52.272-21.652,92.984-62.364,114.637-114.636C429.167,233.087,429.167,175.511,407.516,123.239z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/save.svg b/Master/texmf-dist/asymptote/GUI/res/icons/save.svg
index 7f9cbd56d3f..517b6944259 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/save.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/save.svg
@@ -1,10 +1,10 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Save" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
- viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g transform='matrix(24 0 0 24 0 0)'>
-<path d="M15.173,2H4C2.899,2,2,2.9,2,4v12c0,1.1,0.899,2,2,2h12c1.101,0,2-0.9,2-2V5.127L15.173,2z M14,8c0,0.549-0.45,1-1,1H7
- C6.45,9,6,8.549,6,8V3h8V8z M13,4h-2v4h2V4z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 18.1.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Save" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="512px" y="512px"
+ viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g transform='matrix(24 0 0 24 0 0)'>
+<path d="M15.173,2H4C2.899,2,2,2.9,2,4v12c0,1.1,0.899,2,2,2h12c1.101,0,2-0.9,2-2V5.127L15.173,2z M14,8c0,0.549-0.45,1-1,1H7
+ C6.45,9,6,8.549,6,8V3h8V8z M13,4h-2v4h2V4z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg b/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg
index 35fcdde7c10..ab523e4b6ca 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/social-python.svg
@@ -1,21 +1,21 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
-<g>
- <path d="M193.46,249.056c3.723-0.67,7.589-1.041,11.586-1.041L201.924,248h103.823c4.503,0,8.806-0.617,12.908-1.754
- c19.37-5.363,33.345-22.537,33.345-43.663v-30.822v-56.402c0-24.832-21.15-43.484-46.289-47.606
- c-15.931-2.624-39.258-3.827-55.089-3.749c-15.829,0.086-30.981,1.404-44.277,3.749C167.143,74.576,160,88.928,160,115.359V144h96
- v16H128.82c-35.628,0-64.538,42.571-64.813,95.242C64.005,255.495,64,255.747,64,256c0,9.523,0.94,18.72,2.685,27.404
- C74.648,323.07,99.451,352,128.82,352H144v-2.662v-43.273C144,279.238,164.146,254.332,193.46,249.056z M203.656,127.002
- c-9.592,0-17.384-7.785-17.384-17.403c0-9.664,7.774-17.52,17.384-17.52c9.574,0,17.399,7.855,17.399,17.52
- C221.056,119.217,213.246,127.002,203.656,127.002z"/>
- <path d="M443.951,222.543C434.78,186.021,411.033,160,383.18,160H368v2.626v38.046c0,33.915-22.286,58.474-49.489,62.681
- c-2.737,0.424-5.483,0.646-8.301,0.646H206.351c-4.518,0-8.904,0.584-13.049,1.672C174.18,270.689,160,286.6,160,307.236v32.922
- v54.305c0,24.832,24.977,39.426,49.481,46.551c29.327,8.531,61.267,10.068,96.366,0C329.15,434.354,352,420.893,352,394.463V368
- h-96v-16h127.18c25.24,0,47.107-21.365,57.814-52.549C445.474,286.404,448,271.641,448,256
- C448,244.232,446.567,232.962,443.951,222.543z M307.867,382.82c9.59,0,17.381,7.785,17.381,17.4
- c0,9.65-7.791,17.521-17.381,17.521c-9.577,0-17.399-7.871-17.399-17.521C290.468,390.59,298.274,382.82,307.867,382.82z"/>
-</g>
-</svg>
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Generator: Adobe Illustrator 16.2.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ width="512px" height="512px" viewBox="0 0 512 512" enable-background="new 0 0 512 512" xml:space="preserve">
+<g>
+ <path d="M193.46,249.056c3.723-0.67,7.589-1.041,11.586-1.041L201.924,248h103.823c4.503,0,8.806-0.617,12.908-1.754
+ c19.37-5.363,33.345-22.537,33.345-43.663v-30.822v-56.402c0-24.832-21.15-43.484-46.289-47.606
+ c-15.931-2.624-39.258-3.827-55.089-3.749c-15.829,0.086-30.981,1.404-44.277,3.749C167.143,74.576,160,88.928,160,115.359V144h96
+ v16H128.82c-35.628,0-64.538,42.571-64.813,95.242C64.005,255.495,64,255.747,64,256c0,9.523,0.94,18.72,2.685,27.404
+ C74.648,323.07,99.451,352,128.82,352H144v-2.662v-43.273C144,279.238,164.146,254.332,193.46,249.056z M203.656,127.002
+ c-9.592,0-17.384-7.785-17.384-17.403c0-9.664,7.774-17.52,17.384-17.52c9.574,0,17.399,7.855,17.399,17.52
+ C221.056,119.217,213.246,127.002,203.656,127.002z"/>
+ <path d="M443.951,222.543C434.78,186.021,411.033,160,383.18,160H368v2.626v38.046c0,33.915-22.286,58.474-49.489,62.681
+ c-2.737,0.424-5.483,0.646-8.301,0.646H206.351c-4.518,0-8.904,0.584-13.049,1.672C174.18,270.689,160,286.6,160,307.236v32.922
+ v54.305c0,24.832,24.977,39.426,49.481,46.551c29.327,8.531,61.267,10.068,96.366,0C329.15,434.354,352,420.893,352,394.463V368
+ h-96v-16h127.18c25.24,0,47.107-21.365,57.814-52.549C445.474,286.404,448,271.641,448,256
+ C448,244.232,446.567,232.962,443.951,222.543z M307.867,382.82c9.59,0,17.381,7.785,17.381,17.4
+ c0,9.65-7.791,17.521-17.381,17.521c-9.577,0-17.399-7.871-17.399-17.521C290.468,390.59,298.274,382.82,307.867,382.82z"/>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg b/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg
index 76a7f0d32c8..2da3133f891 100644
--- a/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg
+++ b/Master/texmf-dist/asymptote/GUI/res/icons/undo.svg
@@ -1,40 +1,40 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
-<path d="M354.24,47.4l39.879-39.879H272.196v121.924l60.801-60.801c56,50.066,77.251,132.004,46.918,205.235
- c-18.585,44.869-53.531,79.815-98.4,98.4c-44.866,18.585-94.288,18.585-139.158,0c-44.869-18.585-79.815-53.531-98.4-98.4
- c-18.585-44.869-18.585-94.29,0-139.159l-27.717-11.48c-21.651,52.272-21.651,109.848,0,162.12
- c21.652,52.272,62.364,92.984,114.637,114.636c26.14,10.827,53.595,16.24,81.06,16.239c27.459-0.001,54.927-5.414,81.061-16.239
- c52.271-21.652,92.983-62.364,114.636-114.636C442.739,200.6,418.532,105.826,354.24,47.4z"/>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-<g>
-</g>
-</svg>
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
+<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
+ viewBox="0 0 423.754 423.754" style="enable-background:new 0 0 423.754 423.754;" xml:space="preserve">
+<path d="M354.24,47.4l39.879-39.879H272.196v121.924l60.801-60.801c56,50.066,77.251,132.004,46.918,205.235
+ c-18.585,44.869-53.531,79.815-98.4,98.4c-44.866,18.585-94.288,18.585-139.158,0c-44.869-18.585-79.815-53.531-98.4-98.4
+ c-18.585-44.869-18.585-94.29,0-139.159l-27.717-11.48c-21.651,52.272-21.651,109.848,0,162.12
+ c21.652,52.272,62.364,92.984,114.637,114.636c26.14,10.827,53.595,16.24,81.06,16.239c27.459-0.001,54.927-5.414,81.061-16.239
+ c52.271-21.652,92.983-62.364,114.636-114.636C442.739,200.6,418.532,105.826,354.24,47.4z"/>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+<g>
+</g>
+</svg>
diff --git a/Master/texmf-dist/asymptote/GUI/xasy2asy.py b/Master/texmf-dist/asymptote/GUI/xasy2asy.py
index 1829ce436ba..661426249d4 100755
--- a/Master/texmf-dist/asymptote/GUI/xasy2asy.py
+++ b/Master/texmf-dist/asymptote/GUI/xasy2asy.py
@@ -416,6 +416,10 @@ class asyPen(asyObj):
self.color = (0, 0, 0)
self.options = pen_options
self.width = width
+ self.style = "solid"
+ self.capStyle = QtCore.Qt.PenCapStyle.SquareCap
+ self.opacity = 255 #Should these be in a dictionary?
+ self.dashPattern = [1,0]
self._asyengine = asyengine
self._deferAsyfy = False
if pen_options:
@@ -431,6 +435,14 @@ class asyPen(asyObj):
def asyEngine(self, value):
self._asyengine = value
+ def qtCapStyleToAsyCapStyle(self, style):
+ lineCapList = [QtCore.Qt.PenCapStyle.SquareCap,QtCore.Qt.PenCapStyle.FlatCap,QtCore.Qt.PenCapStyle.RoundCap]
+ asyCapList = ["extendcap","flatcap","roundcap"]
+ if style in lineCapList:
+ return asyCapList[lineCapList.index(style)]
+ else:
+ return False
+
def updateCode(self, asy2psmap = identity()):
""" Generate the pen's code """
if self._deferAsyfy:
@@ -438,12 +450,30 @@ class asyPen(asyObj):
self.asyCode = 'rgb({:g},{:g},{:g})+{:s}'.format(self.color[0], self.color[1], self.color[2], str(self.width))
if len(self.options) > 0:
self.asyCode = self.asyCode + '+' + self.options
+ if self.style != "solid":
+ self.asyCode = self.style + '+' + self.asyCode
def setWidth(self, newWidth):
""" Set the pen's width """
self.width = newWidth
self.updateCode()
+ def setDashPattern(self, pattern):
+ self.dashPattern = pattern
+ self.updateCode() #Get working
+
+ def setStyle(self, style):
+ self.style = style
+ self.updateCode()
+
+ def setCapStyle(self, style):
+ self.capStyle = style
+ self.updateCode()
+
+ def setOpacity(self, opacity):
+ self.opacity = opacity
+ self.updateCode()
+
def setColor(self, color):
""" Set the pen's color """
if isinstance(color, tuple) and len(color) == 3:
@@ -493,8 +523,13 @@ class asyPen(asyObj):
if self._deferAsyfy:
self.computeColor()
newPen = QtGui.QPen()
- newPen.setColor(asyPen.convertToQColor(self.color))
+ color = asyPen.convertToQColor(self.color)
+ color.setAlpha(self.opacity)
+ newPen.setColor(color)
+ newPen.setCapStyle(self.capStyle)
newPen.setWidthF(self.width)
+ if self.dashPattern:
+ newPen.setDashPattern(self.dashPattern)
return newPen
@@ -969,7 +1004,7 @@ class xasyItem(QtCore.QObject):
if transfExists:
transfExists = localCount <= len(self.transfKeymap[key]) - 1
if transfExists:
- validKey = not self.transfKeymap[key][localCount].deleted
+ validKey = not self.transfKeymap[key][localCount].deleted #Does this ever exist?
else:
validKey = False
@@ -1290,6 +1325,11 @@ class xasyShape(xasyDrawnItem):
def copy(self):
return type(self)(self.path,self._asyengine,self.pen)
+ def arrowify(self,arrowhead=0):
+ newObj = asyArrow(self.path.asyengine, pen=self.pen, transfKey = self.transfKey, transfKeymap = self.transfKeymap, canvas = self.onCanvas, arrowActive = arrowhead, code = self.path.getCode(yflip())) #transform
+ newObj.arrowSettings["fill"] = self.path.fill
+ return newObj
+
class xasyFilledShape(xasyShape):
""" A filled shape drawn on the GUI """
@@ -1555,11 +1595,23 @@ class xasyScript(xasyItem):
if i + 1 in keylist.keys():
# this case, we have a key.
with io.StringIO() as raw_line:
- for j in range(len(curr_str)):
+ n=len(curr_str)
+ for j in range(n):
raw_line.write(curr_str[j])
if j + 1 in keylist[i + 1]:
# at this point, replace keys with xkey
- raw_line.write('KEY="{0:s}",'.format(linenum2key[(i + 1, j + 1)]))
+ sep=','
+ k=j+1
+ # assume begingroup is on a single line for now
+ while k < n:
+ c=curr_str[k]
+ if c == ')':
+ sep=''
+ break
+ if not c.isspace():
+ break
+ ++k
+ raw_line.write('KEY="{0:s}"'.format(linenum2key[(i + 1, j + 1)])+sep)
self.userKeys.add(linenum2key[(i + 1, j + 1)])
curr_str = raw_line.getvalue()
# else, skip and just write the line.
@@ -1819,3 +1871,125 @@ class DrawObject(QtCore.QObject):
def getID(self):
return self.originalObj
+
+
+class asyArrow(xasyItem):
+
+ def __init__(self, asyengine, pen=None, transform=identity(), transfKey=None, transfKeymap = None, canvas=None, arrowActive=False, code=None):
+ #super().__init__(path=path, engine=asyengine, pen=pen, transform=transform)
+ """Initialize the label with the given test, location, and pen"""
+ #asyObj.__init__(self)
+ super().__init__(canvas=canvas, asyengine=asyengine) #CANVAS? Seems to work.
+ if pen is None:
+ pen = asyPen()
+ if pen.asyEngine is None:
+ pen.asyEngine = asyengine
+ self.pen = pen
+ self.fillPen = asyPen()
+ self.fillPen.asyEngine = asyengine
+ self.code = code
+ #self.path = path
+ #self.path.asyengine = asyengine
+ self.transfKey = transfKey
+ if transfKeymap == None: #Better way?
+ self.transfKeymap = {self.transfKey: [transform]}
+ else:
+ self.transfKeymap = transfKeymap
+ self.location = (0,0)
+ self.asyfied = False
+ self.onCanvas = canvas
+
+ self.arrowSettings = {"active": arrowActive, "style": 0, "fill": 0} #Rename active?
+ self.arrowList = ["","Arrow","ArcArrow"] #The first setting corresponds to no arrow.
+ self.arrowStyleList = ["","SimpleHead","HookHead","TeXHead"]
+ self.arrowFillList = ["","FillDraw","Fill","NoFill","UnFill","Draw"]
+
+ def getArrowSettings(self):
+ settings = "("
+
+ if self.arrowSettings["style"] != 0:
+ settings += "arrowhead="
+ settings += self.arrowStyleList[self.arrowSettings["style"]]
+
+ if "size" in self.arrowSettings:
+ if settings != "(": #This is really messy.
+ settings += ","
+ settings += "size=" + str(self.arrowSettings["size"]) #Should I add options to this? Like for cm?
+
+ if "angle" in self.arrowSettings: #This is so similar, you should be able to turn this into a function or something.
+ if settings != "(":
+ settings += ","
+ settings += "angle=" + str(self.arrowSettings["angle"])
+
+ if self.arrowSettings["fill"] != 0:
+ if settings != "(":
+ settings += ","
+ settings += "filltype="
+ settings += self.arrowFillList[self.arrowSettings["fill"]]
+
+ settings += ")"
+ #print(settings)
+ return settings
+
+ def setKey(self, newKey = None):
+ transform = self.transfKeymap[self.transfKey][0]
+
+ self.transfKey = newKey
+ self.transfKeymap = {self.transfKey: [transform]}
+
+ def updateCode(self, asy2psmap = identity()):
+ newLoc = asy2psmap.inverted() * self.location
+ self.asyCode = ''
+ if self.arrowSettings["active"]:
+ if self.arrowSettings["fill"]:
+ self.asyCode += 'begingroup(KEY="{0}");'.format(self.transfKey)+'\n\n'
+ self.asyCode += 'fill({0},{1});'.format(self.code, self.fillPen.getCode())+'\n\n'
+ self.asyCode += 'draw({0},{1},arrow={2}{3});'.format(self.code, self.pen.getCode(), self.arrowList[self.arrowSettings["active"]],self.getArrowSettings())+'\n\n'
+ else:
+ self.asyCode += 'draw(KEY="{0}",{1},{2},arrow={3}{4});'.format(self.transfKey, self.code, self.pen.getCode(), self.arrowList[self.arrowSettings["active"]],self.getArrowSettings())+'\n\n'
+ if self.arrowSettings["fill"]:
+ self.asyCode += 'endgroup();\n\n'
+ else:
+ self.asyCode = 'draw(KEY="{0}",{1},{2});'.format(self.transfKey, self.code, self.pen.getCode())+'\n\n'
+
+ def setPen(self, pen):
+ """ Set the label's pen """
+ self.pen = pen
+ self.updateCode()
+
+ def moveTo(self, newl):
+ """ Translate the label's location """
+ self.location = newl
+
+ def getObjectCode(self, asy2psmap=identity()):
+ self.updateCode()
+ return self.asyCode
+
+ def getTransformCode(self, asy2psmap=identity()):
+ transf = self.transfKeymap[self.transfKey][0]
+ if transf == identity():
+ return ''
+ else:
+ return xasyItem.setKeyFormatStr.format(self.transfKey, transf.getCode(asy2psmap))+'\n'
+
+ def generateDrawObjects(self, forceUpdate=False):
+ self.asyfy(forceUpdate)
+ transf = self.transfKeymap[self.transfKey][0]
+ for drawObject in self.drawObjects:
+ drawObject.pTransform = transf
+ return self.drawObjects
+
+ def __str__(self):
+ """ Create a string describing this shape """
+ return "xasyShape code:{:s}".format("\n\t".join(self.getCode().splitlines()))
+
+ def swapFill(self):
+ self.arrowSettings["fill"] = not self.arrowSettings["fill"]
+
+ def getBoundingBox(self):
+ self.asyfy()
+ return self.imageList[0].bbox
+
+ def copy(self):
+ #Include all parameters?
+ return type(self)(self._asyengine,pen=self.pen,canvas=self.onCanvas,arrowActive=self.arrowSettings["active"])
diff --git a/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py b/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py
index d8792d421e8..abe8d9b0ea5 100755
--- a/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py
+++ b/Master/texmf-dist/asymptote/GUI/xasyBezierInterface.py
@@ -51,13 +51,7 @@ class InteractiveBezierEditor(InplaceAddObj.InplaceObjProcess):
self.prospectiveCtrlPts = []
#The magnification isn't being set. Here I'm manually setting it to be the square root of the determinant.
- self.info['magnification'] = math.sqrt(self.transf.xx * self.transf.yy - self.transf.xy * self.transf.yx)
- self.parent = parent
- if isinstance(obj,xasy2asy.xasyFilledShape) or isinstance(obj,xasy2asy.xasyShape):
- parent.ui.btnFill.setChecked(obj.path.fill)
-
- def swapObjFill(self):
- self.obj.swapFill() #This may end up being more in the future
+ self.info['magnification'] = math.sqrt(abs(self.transf.xx * self.transf.yy - self.transf.xy * self.transf.yx))
def setSelectionBoundaries(self):
self.nodeSelRects = self.handleNodeSelectionBounds()
diff --git a/Master/texmf-dist/asymptote/GUI/xasyFile.py b/Master/texmf-dist/asymptote/GUI/xasyFile.py
index 54c70cf5c2b..e980a3c1832 100755
--- a/Master/texmf-dist/asymptote/GUI/xasyFile.py
+++ b/Master/texmf-dist/asymptote/GUI/xasyFile.py
@@ -103,15 +103,27 @@ def xasyToDict(file, xasyItems, asy2psmap):
})
elif isinstance(item, xasy2asy.xasyShape):
- penData = {'color': item.pen.color, 'width': item.pen.width, 'options': item.pen.options}
+ penData = {'color': item.pen.color, 'width': item.pen.width, 'dashPattern': item.pen.dashPattern, 'options': item.pen.options}
fileItems.append({'type': 'xasyShape',
'nodes': item.path.nodeSet,
'links': item.path.linkSet,
+ 'fill': item.path.fill,
'transform': item.transfKeymap[item.transfKey][0].t,
'transfKey': item.transfKey,
'pen': penData
})
+ elif isinstance(item, xasy2asy.asyArrow): #Will this ever even be reached?
+ penData = {'color': item.pen.color, 'width': item.pen.width, 'dashPattern': item.pen.dashPattern, 'options': item.pen.options}
+ fileItems.append({'type': 'asyArrow',
+ 'pen': penData,
+ 'arrowSettings': item.arrowSettings,
+ 'transform': item.transfKeymap[item.transfKey][0].t,
+ 'transfKey': item.transfKey,
+ 'settings': item.arrowSettings,
+ 'code': item.code
+ })
+
else:
# DEBUGGING PURPOSES ONLY
print(type(item))
diff --git a/Master/texmf-dist/asymptote/GUI/xasyVersion.py b/Master/texmf-dist/asymptote/GUI/xasyVersion.py
index d95cbba2fda..525eff949a4 100755
--- a/Master/texmf-dist/asymptote/GUI/xasyVersion.py
+++ b/Master/texmf-dist/asymptote/GUI/xasyVersion.py
@@ -1,2 +1,2 @@
#!/usr/bin/env python3
-xasyVersion = "2.79"
+xasyVersion = "2.85"
diff --git a/Master/texmf-dist/asymptote/asy-kate.sh b/Master/texmf-dist/asymptote/asy-kate.sh
index 5f482b376d9..4212b1cb85a 100644
--- a/Master/texmf-dist/asymptote/asy-kate.sh
+++ b/Master/texmf-dist/asymptote/asy-kate.sh
@@ -2,7 +2,7 @@
echo '<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE language SYSTEM "language.dtd">
<!-- based on asy-keywords.el and Highlighting file asymptote.xml by Christoph Hormann-->
-<language version="1.0" kateversion="3.2.2" name="asymptote" section="Sources" extensions="*.asy" mimetype="text/x-asymptote" licence="LGPL" author="Carsten Brenner">
+<language version="1.0" kateversion="3.2.2" name="Asymptote" section="Sources" extensions="*.asy" mimetype="text/x-asymptote" licence="LGPL" author="Carsten Brenner">
<highlighting>
' > asymptote.xml
@@ -122,7 +122,7 @@ echo '
<itemData name="Decimal" defStyleNum="dsDecVal"/>
<itemData name="Extensions" defStyleNum="dsKeyword" color="#0095ff" selColor="#ffffff" bold="1" italic="0"/>
<itemData name="Float" defStyleNum="dsFloat"/>
- <itemData name="Function" defStyleNum="dsFunction" />
+ <itemData name="Function" defStyleNum="dsFunction" />
<itemData name="Hex" defStyleNum="dsBaseN"/>
<itemData name="Keyword" defStyleNum="dsKeyword"/>
<itemData name="Normal Text" defStyleNum="dsNormal"/>
diff --git a/Master/texmf-dist/asymptote/asy-keywords.el b/Master/texmf-dist/asymptote/asy-keywords.el
index 3f3bf45ea10..6bae43d06b5 100644
--- a/Master/texmf-dist/asymptote/asy-keywords.el
+++ b/Master/texmf-dist/asymptote/asy-keywords.el
@@ -2,16 +2,16 @@
;; This file is automatically generated by asy-list.pl.
;; Changes will be overwritten.
;;
-(defvar asy-keywords-version "2.79")
+(defvar asy-keywords-version "2.85")
(defvar asy-keyword-name '(
and controls tension atleast curl if else while for do return break continue struct typedef new access import unravel from include quote static public private restricted this explicit true false null cycle newframe operator ))
(defvar asy-type-name '(
-Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real revolution scaleT scientific segment side simplex slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
+Braid FitResult Label Legend Solution TreeNode abscissa arc arrowhead binarytree binarytreeNode block bool bool3 bounds bqe circle conic coord coordsys cputime ellipse evaluatedpoint file filltype frame grid3 guide horner hsv hyperbola int inversion key light line linefit marginT marker mass node object pair parabola patch path path3 pen picture point position positionedvector projection rational real realschur revolution scaleT schur scientific segment side simplex slice solution splitface string surface tensionSpecifier ticklocate ticksgridT tickvalues transform transformation tree triangle trilinear triple vector vertex void ))
(defvar asy-function-name '(
-AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeMappingArray makeNode makecircle makedraw makepen maketriangle map mapArray mapTemplate margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube type uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
+AND Align Arc ArcArrow ArcArrows Arrow Arrows AtA Automatic AvantGarde B03 B13 B23 B33 BBox BWRainbow BWRainbow2 Bar Bars BeginArcArrow BeginArrow BeginBar BeginDotMargin BeginMargin BeginPenMargin Blank Bookman Bottom BottomTop Bounds Break Broken BrokenLog CLZ CTZ Ceil Circle CircleBarIntervalMarker Cos Courier CrossIntervalMarker DOSendl DOSnewl DefaultFormat DefaultLogFormat Degrees Dir DotMargin DotMargins Dotted Draw Drawline Embed EndArcArrow EndArrow EndBar EndDotMargin EndMargin EndPenMargin Fill FillDraw Finite Floor Format Full Gaussian Gaussrand Gaussrandpair Gradient Grayscale Helvetica Hermite HookHead InOutTicks InTicks Jn Label Landscape Left LeftRight LeftTicks Legend Linear Log LogFormat Margin Margins Mark MidArcArrow MidArrow NOT NewCenturySchoolBook NoBox NoMargin NoModifier NoTicks NoTicks3 NoZero NoZeroFormat None OR OmitFormat OmitTick OmitTickInterval OmitTickIntervals OutTicks Ox Oy Palatino PaletteTicks Pen PenMargin PenMargins Pentype Portrait RGB RadialShade RadialShadeDraw Rainbow Range Relative Right RightTicks Rotate Round SQR Scale ScaleX ScaleY ScaleZ Seascape Shift Sin Slant Spline StickIntervalMarker Straight Symbol Tan TeXify Ticks Ticks3 TildeIntervalMarker TimesRoman Top TrueMargin UnFill UpsideDown Wheel X XEquals XOR XY XYEquals XYZero XYgrid XZEquals XZZero XZero XZgrid Y YEquals YXgrid YZ YZEquals YZZero YZero YZgrid Yn Z ZX ZXgrid ZYgrid ZapfChancery ZapfDingbats _begingroup3 _cputime _draw _eval _findroot _image _labelpath _projection _schur _shipout _strokepath _texpath aCos aSin aTan abort abs abs2 accel acos acosh acot acsc activatequote add addArrow addMargins addSaveFunction addpenarc addpenline addseg adjust alias align all altitude angabscissa angle angledegrees angpoint animate annotate anticomplementary antipedal apply approximate arc arcarrowsize arccircle arcdir arcfromcenter arcfromfocus arclength arcnodesnumber arcpoint arcsubtended arcsubtendedcenter arctime arctopath array arrow arrow2 arrowbase arrowbasepoints arrowsize ascii asec asin asinh ask assert asy asycode asydir asyfigure asyfilecode asyinclude asywrite atan atan2 atanh atbreakpoint atexit attach attract atupdate autoformat autoscale autoscale3 axes axes3 axialshade axis axiscoverage azimuth babel background bangles bar barmarksize barsize basealign baseline bbox beep begin beginclip begingroup beginpoint between bevel bezier bezierP bezierPP bezierPPP bezulate bibliography bibliographystyle binarytree binarytreeNode binomial bins bisector bisectorpoint bispline bispline0 bitreverse blend blockconnector box bqe brace breakpoint breakpoints brick buildRestoreDefaults buildRestoreThunk buildcycle bulletcolor byte byteinv calculateScaling canonical canonicalcartesiansystem cartesiansystem case1 case2 case3 cbrt cd ceil center centerToFocus centroid cevian change2 changecoordsys checkSegment check_fpt_zero checkconditionlength checker checkincreasing checklengths checkposition checkpt checkptincube checktriangle choose circle circlebarframe circlemarkradius circlenodesnumber circumcenter circumcircle clamped clear clip clipdraw close cmyk code colatitude collect collinear color colorless colors colorspace comma compassmark complement complementary concat concurrent cone conic conicnodesnumber conictype conj connect containmentTree contains contour contour3 controlSpecifier convert coordinates coordsys copy copyPairOrTriple cos cosh cot countIntersections cputime crop cropcode cross crossframe crosshatch crossmarksize csc cubicroots curabscissa curlSpecifier curpoint currentarrow currentexitfunction currentmomarrow currentpolarconicroutine curve cut cutafter cutbefore cyclic cylinder deactivatequote debugger deconstruct defaultdir defaultformat defaultpen defined degenerate degrees delete deletepreamble determinant diagonal diamond diffdiv dir dirSpecifier dirtime display distance divisors do_overpaint dot dotframe dotsize downcase draw drawAll drawCylinder drawDisk drawDoubleLine drawFermion drawGhost drawGluon drawMomArrow drawPhoton drawScalar drawSphere drawTube drawVertex drawVertexBox drawVertexBoxO drawVertexBoxX drawVertexO drawVertexOX drawVertexTriangle drawVertexTriangleO drawVertexX drawarrow drawarrow2 drawbeziertriangle drawline drawpixel drawstrokepath drawtick duplicate elle ellipse ellipsenodesnumber embed embed3 embedplayer empty enclose end endclip endgroup endgroup3 endl endpoint endpoints eof eol equation equations erase erasestep erf erfc error errorbar errorbars eval excenter excircle exit exitfunction exp expfactors expi expm1 exradius extend extension extouch fabs factorial fermat fft fhorner figure file filecode fill filldraw filloutside fillrule filltype find findall findroot finite finiteDifferenceJacobian firstcut firstframe fit fit2 fixedscaling floor flush fmdefaults fmod focusToCenter font fontcommand fontsize foot format frac frequency fromCenter fromFocus fspline functionshade gamma gcd generate_random_backtrace generateticks gergonne getc getint getpair getreal getstring gettriple gluon gouraudshade graph graphic graphicscale graphwithderiv gray grestore grid grid3 gsave halfbox hatch hdiffdiv hermite hex histogram history hline hprojection hsv hyperbola hyperbolanodesnumber hyperlink hypot identity image implicitsurface importv3d incenter incentral incircle increasing incrementposition indexedfigure initdefaults initialized input inradius insert inside insphere integrate interactive interior interp interpolate intersect intersection intersectionpoint intersectionpoints intersections intouch inverse inversion invisible is3D isDuplicate isnan isogonal isogonalconjugate isometry isotomic isotomicconjugate isparabola italic item jobname key kurtosis kurtosisexcess label labelaxis labelmargin labelpath labels labeltick labelx labelx3 labely labely3 labelz labelz3 lastcut latex latitude latticeshade layer layout lcm ldexp leastsquares legend legenditem length lexorder lift light limits line linear linecap lineinversion linejoin linemargin lineskip linetype linewidth link list lm_enorm lm_evaluate_default lm_lmdif lm_lmpar lm_minimize lm_print_default lm_print_quiet lm_qrfac lm_qrsolv locale locate locatefile location log log10 log1p logaxiscoverage longitude lookup make3dgrid makeMappingArray makeNode makecircle makedraw makepen maketriangle map mapArray mapTemplate margin markangle markangleradius markanglespace markarc marker markinterval marknodes markrightangle markthin markuniform mass masscenter massformat math max max3 maxAfterTransform maxbezier maxbound maxcoords maxlength maxratio maxtimes mean medial median midpoint min min3 minAfterTransform minbezier minbound minipage minratio mintimes miterlimit mktemp momArrowPath momarrowsize monotonic multifigure nGrad nativeformat natural newl newpage newslide newton newtree nextframe nextnormal nextpage nib nodabscissa node none norm normalout normalvideo notaknot nowarn numberpage nurb object offset onpath opacity opposite orient orientation origin orthic orthocenter orthocentercenter outdirectory outformat outline outname outprefix output overloadedMessage overwrite pack pad pairs palette parabola parabolanodesnumber parallel parallelogram partialsum patchwithnormals path path3 pathbetween pathinface pattern pause pdf pedal periodic perp perpendicular perpendicularmark phantom phi1 phi2 phi3 phi4 photon piecewisestraight point polar polarconicroutine polargraph polygon popcount postcontrol postscript pow10 ppoint prc prc0 prconly precision precontrol prepend primitive printBytecode print_random_addresses progress project projection projecttospan projecttospan_findcoeffs purge pwhermite quadpatches quadrant quadraticroots quantize quarticroots quotient radialshade radians radicalcenter radicalline radius rand randompath rationalidentity rd readline realmult realquarticroots rectangle rectangular rectify reflect relabscissa relative relativedistance reldir relpoint reltime remainder remark removeDuplicates rename render replace report resetdefaultpen restore restoredefaults reverse reversevideo rf rfind rgb rgba rgbint rms rotate rotateO rotation round roundbox roundedpath roundrectangle samecoordsys sameside sample save savedefaults saveline scale scale3 scaleO scaleT scaleless schur scientific search searchtree sec secondaryX secondaryY seconds section sector seek seekeof segment segmentlimits sequence setpens sgn sgnd sharpangle sharpdegrees shift shiftless shipout shipout3 show simeq simplex simplexInit simplexPhase1 simplexPhase2 simplexTableau simplexWrite simpson sin sinh size size3 skewness skip slant sleep slice slope slopefield solve solveBVP sort sourceline sphere split sqrt square srand standardizecoordsys stdev step stickframe stickmarksize stickmarkspace stop straight straightness string stripdirectory stripextension stripfile stripsuffix strokepath subdivide subitem subpath substr sum surface symmedial symmedian system tab tableau tan tangent tangential tangents tanh tell tensionSpecifier tensorshade tex texcolor texify texpath texpreamble texreset texshipout texsize texstring textpath thick thin tick tickMax tickMax3 tickMin tickMin3 ticklabelshift ticklocate tildeframe tildemarksize tile tiling time times title titlepage topbox transform transformation transpose trembleFuzz triangle triangleAbc triangleabc triangletoquads trianglewithnormals triangulate tricoef tridiagonal trilinear trim truepoint tube type uncycle unfill uniform unique unit unitrand unitsize unityroot unstraighten upcase updatefunction uperiodic upscale uptodate usepackage usersetting usetypescript usleep value variance variancebiased vbox vector vectorfield verbatim view vline vperiodic vprojection warn warning windingnumber write xasyKEY xaxis xaxis3 xaxis3At xaxisAt xequals xlimits xmap xpart xscale xscaleO xtick xtick3 xtrans yaxis yaxis3 yaxis3At yaxisAt yequals ylimits ypart yscale yscaleO ytick ytick3 ytrans zaxis3 zaxis3At zero zlimits zpart ztick ztick3 ztrans ))
(defvar asy-variable-name '(
-Accent AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Blues Both BrBG Break BrickRed Brown BuGn BuPu BurlyWood BurntOrange CCW CMRmap CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion Dark2 DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite GnBu Gold Goldenrod Gray Green GreenYellow Greens Greys Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen OrRd Orange OrangeRed Oranges Orchid Ox Oy PC PRGn Paired PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Pastel1 Pastel2 Peach PeachPuff Periwinkle Peru PiYG PineGreen Pink Plum PowderBlue ProcessBlue PuBu PuBuGn PuOr PuRd Purple Purples RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna RdBu RdGy RdPu RdYlBu RdYlGn Red RedOrange RedViolet Reds Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Set1 Set2 Set3 Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow Spectral SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange YlGn YlGnBu YlOrBr YlOrRd ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor authorpen autumn axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize binary black blue bm bone bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brg brown bullet bwr byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cividis cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor cool coolwarm copper count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gist_earth gist_ncar gist_stern gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hot hsv hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf inferno infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep jet labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magma magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nipy_spectral nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plasma plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen seismic sequencereal settings signedtrailingzero simplex solid spinner spring springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor summer swap tab10 tab20 tab20b tab20c textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity twilight twilight_shifted undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize viridis vline white winter wistia wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
+Accent AliceBlue Align Allow AntiqueWhite Apricot Aqua Aquamarine Aspect Azure BeginPoint Beige Bisque Bittersweet Black BlanchedAlmond Blue BlueGreen BlueViolet Blues Both BrBG Break BrickRed Brown BuGn BuPu BurlyWood BurntOrange CCW CMRmap CW CadetBlue CarnationPink Center Centered Cerulean Chartreuse Chocolate Coeff Coral CornflowerBlue Cornsilk Crimson Crop Cyan Dandelion Dark2 DarkBlue DarkCyan DarkGoldenrod DarkGray DarkGreen DarkKhaki DarkMagenta DarkOliveGreen DarkOrange DarkOrchid DarkRed DarkSalmon DarkSeaGreen DarkSlateBlue DarkSlateGray DarkTurquoise DarkViolet DeepPink DeepSkyBlue DefaultHead DimGray DodgerBlue Dotted Down Draw E ENE EPS ESE E_Euler E_PC E_RK2 E_RK3BS Emerald EndPoint Euler Fill FillDraw FireBrick FloralWhite ForestGreen Fuchsia Gainsboro GhostWhite GnBu Gold Goldenrod Gray Green GreenYellow Greens Greys Honeydew HookHead Horizontal HotPink I IgnoreAspect IndianRed Indigo Infinity Ivory JOIN_IN JOIN_OUT JungleGreen Khaki LM_DWARF LM_MACHEP LM_SQRT_DWARF LM_SQRT_GIANT LM_USERTOL Label Lavender LavenderBlush LawnGreen Left LeftJustified LeftSide LemonChiffon LightBlue LightCoral LightCyan LightGoldenrodYellow LightGreen LightGrey LightPink LightSalmon LightSeaGreen LightSkyBlue LightSlateGray LightSteelBlue LightYellow Lime LimeGreen Linear Linen Log Logarithmic Magenta Mahogany Mark MarkFill MarkFillable MarkPath Maroon Max MediumAquamarine MediumBlue MediumOrchid MediumPurple MediumSeaGreen MediumSlateBlue MediumSpringGreen MediumTurquoise MediumVioletRed Melon MidPoint MidnightBlue Min MintCream MistyRose Moccasin Move MoveQuiet Mulberry N NE NNE NNW NULL_VERTEX NW NavajoWhite Navy NavyBlue NoAlign NoCrop NoFill NoSide OldLace Olive OliveDrab OliveGreen OrRd Orange OrangeRed Oranges Orchid Ox Oy PC PRGn Paired PaleGoldenrod PaleGreen PaleTurquoise PaleVioletRed PapayaWhip Pastel1 Pastel2 Peach PeachPuff Periwinkle Peru PiYG PineGreen Pink Plum PowderBlue ProcessBlue PuBu PuBuGn PuOr PuRd Purple Purples RELEASE RK2 RK3 RK3BS RK4 RK5 RK5DP RK5F RawSienna RdBu RdGy RdPu RdYlBu RdYlGn Red RedOrange RedViolet Reds Rhodamine Right RightJustified RightSide RosyBrown RoyalBlue RoyalPurple RubineRed S SE SSE SSW SW SaddleBrown Salmon SandyBrown SeaGreen Seashell Sepia Set1 Set2 Set3 Sienna Silver SimpleHead SkyBlue SlateBlue SlateGray Snow Spectral SpringGreen SteelBlue Suppress SuppressQuiet Tan TeXHead Teal TealBlue Thistle Ticksize Tomato Turquoise UnFill Up VERSION Value Vertical Violet VioletRed W WNW WSW Wheat White WhiteSmoke WildStrawberry XHIGH XLOW XYAlign YAlign YHIGH YLOW Yellow YellowGreen YellowOrange YlGn YlGnBu YlOrBr YlOrRd ZHIGH ZLOW _outpipe aboveequationskip addpenarc addpenline align allowstepping angularsystem animationdelay appendsuffix arcarrowangle arcarrowfactor arrow2sizelimit arrowangle arrowbarb arrowdir arrowfactor arrowhookfactor arrowlength arrowsizelimit arrowtexfactor artificialColumn authorpen autumn axis axiscoverage axislabelfactor background backgroundcolor backgroundpen barfactor barmarksizefactor basealign baselinetemplate bernstein beveljoin bigvertexpen bigvertexsize binary black blue bm bone bottom bp bracedefaultratio braceinnerangle bracemidangle braceouterangle brg brown bullet bwr byfoci byvertices camerafactor chartreuse circlemarkradiusfactor circlenodesnumberfactor circleprecision circlescale cividis cm codefile codepen codeskip colorPen coloredNodes coloredSegments conditionlength conicnodesfactor cool coolwarm copper count cputimeformat crossmarksizefactor currentcoordsys currentlight currentpatterns currentpen currentpicture currentposition currentprojection curvilinearsystem cuttings cyan darkblue darkbrown darkcyan darkgray darkgreen darkgrey darkmagenta darkolive darkred dashdotted dashed datepen dateskip debuggerlines debugging deepblue deepcyan deepgray deepgreen deepgrey deepmagenta deepred deepyellow default defaultControl defaultS defaultbackpen defaultcoordsys defaultexcursion defaultfilename defaultformat defaultmassformat defaultpen defaultseparator diamond differentlengths dot dotfactor dotfilltype dotframe dotted doublelinepen doublelinespacing down duplicateFuzz ellipsenodesnumberfactor eps epsgeo epsilon evenodd expansionfactor extendcap fermionpen figureborder figuremattpen file3 firstnode firststep foregroundcolor fuchsia fuzz gapfactor ghostpen gist_earth gist_ncar gist_stern gluonamplitude gluonpen gluonratio gray green grey hatchepsilon havepagenumber heavyblue heavycyan heavygray heavygreen heavygrey heavymagenta heavyred hline hot hsv hwratio hyperbolanodesnumberfactor identity identity4 ignore implicitshipout inch inches includegraphicscommand inf inferno infinity institutionpen intMax intMin invert invisible itempen itemskip itemstep jet labelmargin landscape lastnode left legendhskip legendlinelength legendmargin legendmarkersize legendmaxrelativewidth legendvskip lightblue lightcyan lightgray lightgreen lightgrey lightmagenta lightolive lightred lightyellow linemargin lm_infmsg lm_shortmsg longdashdotted longdashed magenta magma magneticRadius mantissaBits markangleradius markangleradiusfactor markanglespace markanglespacefactor maxDenominator maxrefinements mediumblue mediumcyan mediumgray mediumgreen mediumgrey mediummagenta mediumred mediumyellow middle minDistDefault minblockheight minblockwidth mincirclediameter minipagemargin minipagewidth minvertexangle miterjoin mm momarrowfactor momarrowlength momarrowmargin momarrowoffset momarrowpen monoPen morepoints nCircle nan newbulletcolor ngraph nil nipy_spectral nmesh nobasealign nodeMarginDefault nodesystem nomarker nopoint noprimary nullpath nullpen numarray ocgindex oldbulletcolor olive optimizeTableau orange origin overpaint page pageheight pagemargin pagenumberalign pagenumberpen pagenumberposition pagewidth paleblue palecyan palegray palegreen palegrey palemagenta palered paleyellow parabolanodesnumberfactor perpfactor phi photonamplitude photonpen photonratio pi pink plain plain_bounds plain_scaling plasma plus preamblenodes pt purple r3 r4a r4b randMax realDigits realEpsilon realMax realMin red relativesystem reverse right roundcap roundjoin royalblue salmon saveFunctions scalarpen seismic sequencereal settings signedtrailingzero simplex solid spinner spring springgreen sqrtEpsilon squarecap squarepen startposition stdin stdout stepfactor stepfraction steppagenumberpen stepping stickframe stickmarksizefactor stickmarkspacefactor summer swap tab10 tab20 tab20b tab20c textpen ticksize tildeframe tildemarksizefactor tinv titlealign titlepagepen titlepageposition titlepen titleskip top trailingzero treeLevelStep treeMinNodeWidth treeNodeStep trembleAngle trembleFrequency trembleRandom tubegranularity twilight twilight_shifted undefined unitcircle unitsquare up urlpen urlskip v3dheadertypes v3dtypes version vertexpen vertexsize viewportmargin viewportsize viridis vline white winter wistia wye yellow ylabelwidth zeroTransform zerotickfuzz zerowinding ))
diff --git a/Master/texmf-dist/asymptote/geometry.asy b/Master/texmf-dist/asymptote/geometry.asy
index 9f4be8d15ca..840cb960bed 100644
--- a/Master/texmf-dist/asymptote/geometry.asy
+++ b/Master/texmf-dist/asymptote/geometry.asy
@@ -345,7 +345,6 @@ void show(picture pic = currentpicture, Label lo = "$O$",
arrowbar arrow = Arrow)
{/*<asyxml></code><documentation>Draw the components (O, i, j, x - axis, y - axis) of 'R'.</documentation></function></asyxml>*/
unravel R;
- dot(pic, O, dotpen);
drawline(pic, O, O + i, xpen);
drawline(pic, O, O + j, ypen);
draw(pic, li, O--(O + i), ipen, arrow);
@@ -353,6 +352,7 @@ void show(picture pic = currentpicture, Label lo = "$O$",
lj.align(lj.align, unit(I * j));
draw(pic, lj, O--(O + j), jpen, arrow);
draw(pic, lj, O--(O + j), jpen, arrow);
+ dot(pic, O, dotpen);
Label lo = lo.copy();
lo.align(lo.align, -2 * dir(O--O + i, O--O + j));
lo.p(dotpen);
@@ -1556,6 +1556,11 @@ segment operator cast(line l)
return segment(l.A, l.B);
}
+path operator ecast(segment s)
+{
+ return s.A -- s.B;
+}
+
/*<asyxml><operator type = "line" signature="*(transform,line)"><code></asyxml>*/
line operator *(transform t, line l)
{/*<asyxml></code><documentation>Provide transform * line</documentation></operator></asyxml>*/
@@ -3738,6 +3743,17 @@ void draw(picture pic = currentpicture, Label L = "", circle c,
else draw(pic, L, (path)c, align, p, arrow, bar, margin, legend, marker);
}
+void fill(picture pic = currentpicture, circle c, pen p = currentpen)
+{
+ if (!degenerate(c)) fill(pic, (path)c, p);
+}
+
+void filldraw(picture pic = currentpicture, circle c, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+ fill(pic, c, fillpen);
+ draw(pic, c, drawpen);
+}
+
/*<asyxml><function type="void" signature="draw(picture,Label,ellipse,align,pen,arrowbar,arrowbar,margin,Label,marker)"><code></asyxml>*/
void draw(picture pic = currentpicture, Label L = "", ellipse el,
align align = NoAlign, pen p = currentpen,
@@ -3748,6 +3764,17 @@ void draw(picture pic = currentpicture, Label L = "", ellipse el,
else draw(pic, L, (path)el, align, p, arrow, bar, margin, legend, marker);
}
+void fill(picture pic = currentpicture, ellipse el, pen p = currentpen)
+{
+ if (!degenerate(el)) fill(pic, (path)el, p);
+}
+
+void filldraw(picture pic = currentpicture, ellipse el, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+ fill(pic, el, fillpen);
+ draw(pic, el, drawpen);
+}
+
/*<asyxml><function type="void" signature="draw(picture,Label,parabola,align,pen,arrowbar,arrowbar,margin,Label,marker)"><code></asyxml>*/
void draw(picture pic = currentpicture, Label L = "", parabola parabola,
align align = NoAlign, pen p = currentpen,
@@ -5383,8 +5410,8 @@ void dot(picture pic = currentpicture, Label L, explicit mass M, align align = N
// *=======================================================*
// *.......................TRIANGLES.......................*
-/*<asyxml><function type="point" signature="orthocentercenter(point,point,point)"><code></asyxml>*/
-point orthocentercenter(point A, point B, point C)
+/*<asyxml><function type="point" signature="orthocenter(point,point,point)"><code></asyxml>*/
+point orthocenter(point A, point B, point C)
{/*<asyxml></code><documentation>Return the orthocenter of the triangle ABC.</documentation></function></asyxml>*/
point[] P = standardizecoordsys(A, B, C);
coordsys R = P[0].coordsys;
@@ -5539,9 +5566,9 @@ struct triangle {/*<asyxml></code><documentation></documentation></asyxml>*/
real gamma() {return degrees(acos((a()^2 + b()^2 - c()^2)/(2a() * b())));}
/*<asyxml><method type = "path" signature="Path()"><code></asyxml>*/
- path Path()
+ path Path() // retained for backward compatibility
{/*<asyxml></code><documentation>The path of the triangle.</documentation></method></asyxml>*/
- return A--C--B--cycle;
+ return A--B--C--cycle;
}
/*<asyxml><struct signature="side"><code></asyxml>*/
@@ -5584,6 +5611,8 @@ struct triangle {/*<asyxml></code><documentation></documentation></asyxml>*/
}/*<asyxml></struct></asyxml>*/
+path operator cast(triangle t) { return t.A -- t.B -- t.C -- cycle; }
+
from triangle unravel side; // The structure 'side' is now available outside the triangle structure.
from triangle unravel vertex; // The structure 'vertex' is now available outside the triangle structure.
@@ -5715,10 +5744,10 @@ line altitude(side side)
return altitude(opposite(side));
}
-/*<asyxml><function type="point" signature="orthocentercenter(triangle)"><code></asyxml>*/
-point orthocentercenter(triangle t)
+/*<asyxml><function type="point" signature="orthocenter(triangle)"><code></asyxml>*/
+point orthocenter(triangle t)
{/*<asyxml></code><documentation>Return the orthocenter of the triangle t.</documentation></function></asyxml>*/
- return orthocentercenter(t.A, t.B, t.C);
+ return orthocenter(t.A, t.B, t.C);
}
/*<asyxml><function type="point" signature="centroid(triangle)"><code></asyxml>*/
@@ -6276,13 +6305,34 @@ void show(picture pic = currentpicture,
/*<asyxml><function type="void" signature="draw(picture,triangle,pen,marker)"><code></asyxml>*/
void draw(picture pic = currentpicture, triangle t, pen p = currentpen, marker marker = nomarker)
{/*<asyxml></code><documentation>Draw sides of the triangle 't' on picture 'pic' using pen 'p'.</documentation></function></asyxml>*/
- draw(pic, t.Path(), p, marker);
+ draw(pic, (path)t, p, marker);
+}
+
+void fill(picture pic = currentpicture, triangle t, pen p = currentpen)
+{
+ fill(pic, (path)t, p);
+}
+
+void filldraw(picture pic = currentpicture, triangle t, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+ fill(pic, t, fillpen);
+ draw(pic, t, drawpen);
}
/*<asyxml><function type="void" signature="draw(picture,triangle[],pen,marker)"><code></asyxml>*/
-void draw(picture pic = currentpicture, triangle[] t, pen p = currentpen, marker marker = nomarker)
+void draw(picture pic = currentpicture, triangle[] ts, pen p = currentpen, marker marker = nomarker)
{/*<asyxml></code><documentation>Draw sides of the triangles 't' on picture 'pic' using pen 'p'.</documentation></function></asyxml>*/
- for(int i = 0; i < t.length; ++i) draw(pic, t[i], p, marker);
+ for(triangle t: ts) draw(pic, t, p, marker);
+}
+
+void fill(picture pic = currentpicture, triangle[] ts, pen p = currentpen)
+{
+ for(triangle t: ts) fill(pic, t, p);
+}
+
+void filldraw(picture pic = currentpicture, triangle[] ts, pen fillpen = currentpen, pen drawpen = currentpen)
+{
+ for(triangle t: ts) filldraw(pic, t, fillpen, drawpen);
}
/*<asyxml><function type="void" signature="drawline(picture,triangle,pen)"><code></asyxml>*/
@@ -6368,13 +6418,13 @@ inversion inversion(circle c1, circle c2, real sgn = 1)
point O = radicalcenter(c1, c2);
return inversion(O^c1, O);
}
- real a = abs(c1.r/c2.r);
- if(sgn > 0) {
- point O = c1.C + a/abs(1 - a) * (c2.C - c1.C);
- return inversion(a * abs(abs(O - c2.C)^2 - c2.r^2), O);
+ else {
+ point C1 = c1.C, C2 = c2.C;
+ real r1 = c1.r, r2 = sgn(sgn) * c2.r;
+ return inversion(
+ r1 * r2 * (1 - (length(C2 - C1) / (r1 + r2))^2),
+ (r2 * C1 + r1 * C2) / (r1 + r2));
}
- point O = c1.C + a/abs(1 + a) * (c2.C - c1.C);
- return inversion(-a * abs(abs(O - c2.C)^2 - c2.r^2), O);
}
/*<asyxml><function type="inversion" signature="inversion(circle,circle,circle)"><code></asyxml>*/
@@ -7192,9 +7242,18 @@ path arc(explicit pair B, explicit pair A, explicit pair C, real r)
return arc(A, abs(r), BA, CA, (r < 0) ^ ((BA-CA) % 360 < 180) ? CW : CCW);
}
+point orthocentercenter(point A, point B, point C)
+{
+ return orthocenter(A, B, C);
+}
+
+point orthocentercenter(triangle t)
+{
+ return orthocenter(t.A, t.B, t.C);
+}
+
// *.......End of compatibility routines........*
// *=======================================================*
// *........................FOOTER.........................*
// *=======================================================*
-
diff --git a/Master/texmf-dist/asymptote/graph.asy b/Master/texmf-dist/asymptote/graph.asy
index 1d4dfc1bfd3..433aa2fc20f 100644
--- a/Master/texmf-dist/asymptote/graph.asy
+++ b/Master/texmf-dist/asymptote/graph.asy
@@ -2186,45 +2186,49 @@ picture vectorfield(path vector(real), path g, int n, bool truesize=false,
return pic;
}
-real maxlength(pair a, pair b, int nx, int ny)
-{
- return min((b.x-a.x)/nx,(b.y-a.y)/ny);
-}
-
// return a vector field over box(a,b).
picture vectorfield(path vector(pair), pair a, pair b,
int nx=nmesh, int ny=nx, bool truesize=false,
- real maxlength=truesize ? 0 : maxlength(a,b,nx,ny),
bool cond(pair z)=null, pen p=currentpen,
arrowbar arrow=Arrow, margin margin=PenMargin)
{
picture pic;
- real dx=1/nx;
- real dy=1/ny;
+ real dx=(b.x-a.x)/(nx-1);
+ real dy=(b.y-a.y)/(ny-1);
bool all=cond == null;
real scale;
- if(maxlength > 0) {
- real size(pair z) {
- path g=vector(z);
- return abs(point(g,size(g)-1)-point(g,0));
- }
- real max=size(a);
- for(int i=0; i <= nx; ++i) {
- real x=interp(a.x,b.x,i*dx);
- for(int j=0; j <= ny; ++j)
- max=max(max,size((x,interp(a.y,b.y,j*dy))));
+ transform t=scale(dx,dy);
+ pair size(pair z) {
+ path g=t*vector(z);
+ int n=size(g);
+ pair w=n == 1 ? point(g,0) : point(g,n-1)-point(g,0);
+ return (abs(w.x),abs(w.y));
+ }
+ pair max=size(a);
+ for(int i=0; i < nx; ++i) {
+ real x=a.x+i*dx;
+ for(int j=0; j < ny; ++j) {
+ real y=a.y+j*dy;
+ max=maxbound(max,size((x,y)));
}
- scale=max > 0 ? maxlength/max : 1;
- } else scale=1;
+ }
+
+ if(max.x == 0)
+ scale=max.y == 0 ? 1.0 : dy/max.y;
+ else if(max.y == 0)
+ scale=dx/max.x;
+ else
+ scale=min(dx/max.x,dy/max.y);
- for(int i=0; i <= nx; ++i) {
- real x=interp(a.x,b.x,i*dx);
- for(int j=0; j <= ny; ++j) {
- real y=interp(a.y,b.y,j*dy);
+ for(int i=0; i < nx; ++i) {
+ real x=a.x+i*dx;
+ for(int j=0; j < ny; ++j) {
+ real y=a.y+j*dy;
pair z=(x,y);
if(all || cond(z)) {
- path g=scale(scale)*vector(z);
+ path v=scale(scale)*t*vector(z);
+ path g=size(v) == 1 ? (0,0)--v : v;
if(truesize)
draw(z,pic,g,p,arrow);
else
diff --git a/Master/texmf-dist/asymptote/graph3.asy b/Master/texmf-dist/asymptote/graph3.asy
index f690c6a3c10..f17b4e97074 100644
--- a/Master/texmf-dist/asymptote/graph3.asy
+++ b/Master/texmf-dist/asymptote/graph3.asy
@@ -2201,21 +2201,24 @@ picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b,
string name="", render render=defaultrender)
{
picture pic;
- real du=1/nu;
- real dv=1/nv;
+ real du=(b.x-a.x)/(nu-1);
+ real dv=(b.y-a.y)/(nv-1);
bool all=cond == null;
real scale;
if(maxlength > 0) {
real size(pair z) {
path3 g=vector(z);
- return abs(point(g,size(g)-1)-point(g,0));
+ triple w=point(g,size(g)-1)-point(g,0);
+ return max(w.x,w.y,w.z);
}
- real max=size((0,0));
+ real max=size(a);
for(int i=0; i <= nu; ++i) {
- real x=interp(a.x,b.x,i*du);
- for(int j=0; j <= nv; ++j)
- max=max(max,size((x,interp(a.y,b.y,j*dv))));
+ real u=a.x+i*du;
+ for(int j=0; j < nv; ++j) {
+ real v=a.y+j*dv;
+ max=max(max,size((u,v)));
+ }
}
scale=max > 0 ? maxlength/max : 1;
} else scale=1;
@@ -2224,9 +2227,10 @@ picture vectorfield(path3 vector(pair v), triple f(pair z), pair a, pair b,
if(group)
begingroup3(pic,name == "" ? "vectorfield" : name,render);
for(int i=0; i <= nu; ++i) {
- real x=interp(a.x,b.x,i*du);
+ real u=a.x+i*du;
for(int j=0; j <= nv; ++j) {
- pair z=(x,interp(a.y,b.y,j*dv));
+ real v=a.y+j*dv;
+ pair z=(u,v);
if(all || cond(z)) {
path3 g=scale3(scale)*vector(z);
string name="vector";
diff --git a/Master/texmf-dist/asymptote/plain.asy b/Master/texmf-dist/asymptote/plain.asy
index cac6aa07222..084fedd7581 100644
--- a/Master/texmf-dist/asymptote/plain.asy
+++ b/Master/texmf-dist/asymptote/plain.asy
@@ -171,7 +171,7 @@ string[] reverse(string[] a) {return a[reverse(a.length)];}
real[] uniform(real a, real b, int n)
{
if(n <= 0) return new real[];
- return a+(b-a)/n*sequence(n+1);
+ return a+sequence(n+1)/n*(b-a);
}
void eval(string s, bool embedded=false)
@@ -264,7 +264,7 @@ struct cputime {
cputime cputime()
{
static processtime last;
- real [] a=_cputime();
+ real[] a=_cputime();
cputime cputime;
real clock=a[4];
cputime.parent.user=a[0];
@@ -302,6 +302,34 @@ void write(string s="", cputime c, string format=cputimeformat,
write(stdout,s,c,format,suffix);
}
+struct realschur {
+ real[][] U;
+ real[][] T;
+}
+
+realschur schur(real[][] a)
+{
+ real[][][] S=_schur(a);
+ realschur schur;
+ schur.U=S[0];
+ schur.T=S[1];
+ return schur;
+}
+
+struct schur {
+ pair[][] U;
+ pair[][] T;
+}
+
+schur schur(pair[][] a)
+{
+ pair[][][] S=_schur(a);
+ schur schur;
+ schur.U=S[0];
+ schur.T=S[1];
+ return schur;
+}
+
if(settings.autoimport != "") {
string s=settings.autoimport;
settings.autoimport="";
diff --git a/Master/texmf-dist/asymptote/plain_arrows.asy b/Master/texmf-dist/asymptote/plain_arrows.asy
index 79ee403af3d..d9c08636fc9 100644
--- a/Master/texmf-dist/asymptote/plain_arrows.asy
+++ b/Master/texmf-dist/asymptote/plain_arrows.asy
@@ -53,39 +53,39 @@ path arrowbase(path r, pair y, real t, real size)
arrowhead DefaultHead;
DefaultHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
real size=0, real angle=arrowangle) {
- if(size == 0) size=DefaultHead.size(p);
- bool relative=position.relative;
- real position=position.position.x;
- if(relative) position=reltime(g,position);
- path r=subpath(g,position,0);
- pair x=point(r,0);
- real t=arctime(r,size);
- pair y=point(r,t);
- path base=arrowbase(r,y,t,size);
- path left=rotate(-angle,x)*r;
- path right=rotate(angle,x)*r;
- real[] T=arrowbasepoints(base,left,right);
- pair denom=point(right,T[1])-y;
- real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
- path left=rotate(-angle*factor,x)*r;
- path right=rotate(angle*factor,x)*r;
- real[] T=arrowbasepoints(base,left,right);
- return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle;
+ if(size == 0) size=DefaultHead.size(p);
+ bool relative=position.relative;
+ real position=position.position.x;
+ if(relative) position=reltime(g,position);
+ path r=subpath(g,position,0);
+ pair x=point(r,0);
+ real t=arctime(r,size);
+ pair y=point(r,t);
+ path base=arrowbase(r,y,t,size);
+ path left=rotate(-angle,x)*r;
+ path right=rotate(angle,x)*r;
+ real[] T=arrowbasepoints(base,left,right);
+ pair denom=point(right,T[1])-y;
+ real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
+ path left=rotate(-angle*factor,x)*r;
+ path right=rotate(angle*factor,x)*r;
+ real[] T=arrowbasepoints(base,left,right);
+ return subpath(left,0,T[0])--subpath(right,T[1],0)&cycle;
};
arrowhead SimpleHead;
SimpleHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
real size=0, real angle=arrowangle) {
- if(size == 0) size=SimpleHead.size(p);
- bool relative=position.relative;
- real position=position.position.x;
- if(relative) position=reltime(g,position);
- path r=subpath(g,position,0);
- pair x=point(r,0);
- real t=arctime(r,size);
- path left=rotate(-angle,x)*r;
- path right=rotate(angle,x)*r;
- return subpath(left,t,0)--subpath(right,0,t);
+ if(size == 0) size=SimpleHead.size(p);
+ bool relative=position.relative;
+ real position=position.position.x;
+ if(relative) position=reltime(g,position);
+ path r=subpath(g,position,0);
+ pair x=point(r,0);
+ real t=arctime(r,size);
+ path left=rotate(-angle,x)*r;
+ path right=rotate(angle,x)*r;
+ return subpath(left,t,0)--subpath(right,0,t);
};
arrowhead HookHead(real dir=arrowdir, real barb=arrowbarb)
@@ -94,34 +94,34 @@ arrowhead HookHead(real dir=arrowdir, real barb=arrowbarb)
a.head=new path(path g, position position=EndPoint, pen p=currentpen,
real size=0, real angle=arrowangle)
{
- if(size == 0) size=a.size(p);
- angle=min(angle*arrowhookfactor,45);
- bool relative=position.relative;
- real position=position.position.x;
- if(relative) position=reltime(g,position);
- path r=subpath(g,position,0);
- pair x=point(r,0);
- real t=arctime(r,size);
- pair y=point(r,t);
- path base=arrowbase(r,y,t,size);
- path left=rotate(-angle,x)*r;
- path right=rotate(angle,x)*r;
- real[] T=arrowbasepoints(base,left,right,1);
- pair denom=point(right,T[1])-y;
- real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
- path left=rotate(-angle*factor,x)*r;
- path right=rotate(angle*factor,x)*r;
- real[] T=arrowbasepoints(base,left,right,1);
- left=subpath(left,0,T[0]);
- right=subpath(right,T[1],0);
- pair pl0=point(left,0), pl1=relpoint(left,1);
- pair pr0=relpoint(right,0), pr1=relpoint(right,1);
- pair M=(pl1+pr0)/2;
- pair v=barb*unit(M-pl0);
- pl1=pl1+v; pr0=pr0+v;
- left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M;
- right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))};
- return left--right&cycle;
+ if(size == 0) size=a.size(p);
+ angle=min(angle*arrowhookfactor,45);
+ bool relative=position.relative;
+ real position=position.position.x;
+ if(relative) position=reltime(g,position);
+ path r=subpath(g,position,0);
+ pair x=point(r,0);
+ real t=arctime(r,size);
+ pair y=point(r,t);
+ path base=arrowbase(r,y,t,size);
+ path left=rotate(-angle,x)*r;
+ path right=rotate(angle,x)*r;
+ real[] T=arrowbasepoints(base,left,right,1);
+ pair denom=point(right,T[1])-y;
+ real factor=denom != 0 ? length((point(left,T[0])-y)/denom) : 1;
+ path left=rotate(-angle*factor,x)*r;
+ path right=rotate(angle*factor,x)*r;
+ real[] T=arrowbasepoints(base,left,right,1);
+ left=subpath(left,0,T[0]);
+ right=subpath(right,T[1],0);
+ pair pl0=point(left,0), pl1=relpoint(left,1);
+ pair pr0=relpoint(right,0), pr1=relpoint(right,1);
+ pair M=(pl1+pr0)/2;
+ pair v=barb*unit(M-pl0);
+ pl1=pl1+v; pr0=pr0+v;
+ left=pl0{dir(-dir+degrees(M-pl0,false))}..pl1--M;
+ right=M--pr0..pr1{dir(dir+degrees(pr1-M,false))};
+ return left--right&cycle;
};
return a;
}
@@ -130,34 +130,34 @@ arrowhead HookHead=HookHead();
arrowhead TeXHead;
TeXHead.size=new real(pen p)
{
- static real hcoef=2.1; // 84/40=abs(base-hint)/base_height
- return hcoef*arrowtexfactor*linewidth(p);
+ static real hcoef=2.1; // 84/40=abs(base-hint)/base_height
+ return hcoef*arrowtexfactor*linewidth(p);
};
TeXHead.arcsize=TeXHead.size;
TeXHead.head=new path(path g, position position=EndPoint, pen p=currentpen,
real size=0, real angle=arrowangle) {
- static real wcoef=1/84; // 1/abs(base-hint)
- static path texhead=scale(wcoef)*
- ((0,20) .. controls (-75,75) and (-108,158) ..
- (-108,166) .. controls (-108,175) and (-100,178) ..
- (-93,178) .. controls (-82,178) and (-80,173) ..
- (-77,168) .. controls (-62,134) and (-30,61) ..
- (70,14) .. controls (82,8) and (84,7) ..
- (84,0) .. controls (84,-7) and (82,-8) ..
- (70,-14) .. controls (-30,-61) and (-62,-134) ..
- (-77,-168) .. controls (-80,-173) and (-82,-178) ..
- (-93,-178) .. controls (-100,-178) and (-108,-175)..
- (-108,-166).. controls (-108,-158) and (-75,-75) ..
- (0,-20)--cycle);
- if(size == 0) size=TeXHead.size(p);
- path gp=scale(size)*texhead;
- bool relative=position.relative;
- real position=position.position.x;
- if(relative) position=reltime(g,position);
- path r=subpath(g,position,0);
- pair y=point(r,arctime(r,size));
- return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size))))*gp;
+ static real wcoef=1/84; // 1/abs(base-hint)
+ static path texhead=scale(wcoef)*
+ ((0,20) .. controls (-75,75) and (-108,158) ..
+ (-108,166) .. controls (-108,175) and (-100,178) ..
+ (-93,178) .. controls (-82,178) and (-80,173) ..
+ (-77,168) .. controls (-62,134) and (-30,61) ..
+ (70,14) .. controls (82,8) and (84,7) ..
+ (84,0) .. controls (84,-7) and (82,-8) ..
+ (70,-14) .. controls (-30,-61) and (-62,-134) ..
+ (-77,-168) .. controls (-80,-173) and (-82,-178) ..
+ (-93,-178) .. controls (-100,-178) and (-108,-175)..
+ (-108,-166).. controls (-108,-158) and (-75,-75) ..
+ (0,-20)--cycle);
+ if(size == 0) size=TeXHead.size(p);
+ path gp=scale(size)*texhead;
+ bool relative=position.relative;
+ real position=position.position.x;
+ if(relative) position=reltime(g,position);
+ path r=subpath(g,position,0);
+ pair y=point(r,arctime(r,size));
+ return shift(y)*rotate(degrees(-dir(r,arctime(r,0.5*size)),false))*gp;
};
TeXHead.defaultfilltype=new filltype(pen p) {return Fill(p);};
diff --git a/Master/texmf-dist/asymptote/plain_pens.asy b/Master/texmf-dist/asymptote/plain_pens.asy
index 2e3a4449a38..2f47855a9f4 100644
--- a/Master/texmf-dist/asymptote/plain_pens.asy
+++ b/Master/texmf-dist/asymptote/plain_pens.asy
@@ -1,4 +1,4 @@
-real labelmargin=0.3;
+real labelmargin=0.28;
real dotfactor=6;
pen solid=linetype(new real[]);
@@ -173,7 +173,7 @@ pen fontsize(real size)
real labelmargin(pen p=currentpen)
{
- return labelmargin*fontsize(p);
+ return labelmargin*fontsize(p)+0.5*linewidth(p);
}
void write(file file=stdout, string s="", pen[] p)
diff --git a/Master/texmf-dist/asymptote/rationalSimplex.asy b/Master/texmf-dist/asymptote/rationalSimplex.asy
index 3a376ba2ddb..b6ce98c4ae9 100644
--- a/Master/texmf-dist/asymptote/rationalSimplex.asy
+++ b/Master/texmf-dist/asymptote/rationalSimplex.asy
@@ -1,9 +1,14 @@
// Rational simplex solver written by John C. Bowman and Pouria Ramazi, 2018.
import rational;
+bool optimizeTableau=true;
+
+int[] artificialColumn;
+
void simplexInit(rational[] c, rational[][] A, int[] s=new int[],
rational[] b, int count) {}
-void simplexTableau(rational[][] E, int[] Bindices, int I=-1, int J=-1) {}
+void simplexTableau(rational[][] E, int[] Bindices, int I=-1, int J=-1,
+ int n=E[0].length-1) {}
void simplexPhase1(rational[] c, rational[][] A, rational[] b,
int[] Bindices) {}
void simplexPhase2() {}
@@ -71,7 +76,7 @@ struct simplex {
}
}
- int iterate(rational[][] E, int N, int[] Bindices) {
+ int iterate(rational[][] E, int N, int[] Bindices, bool phase1=false) {
while(true) {
// Bland's rule: first negative entry in reduced cost (bottom) row enters
rational[] Em=E[m];
@@ -108,11 +113,13 @@ struct simplex {
// Generate new tableau
Bindices[I]=J;
rowreduce(E,N,I,J);
+
+ if(phase1 && Em[0] == 0) break;
}
return OPTIMAL;
}
- int iterateDual(rational[][] E, int N, int[] Bindices) {
+ int iterateDual(rational[][] E, int N, int[] Bindices, bool phase1=false) {
while(true) {
// Bland's rule: negative variable with smallest subscript exits
int I;
@@ -211,30 +218,31 @@ struct simplex {
if(phase1) {
Bindices=new int[m];
- int p=0;
+ int k=0;
+ artificialColumn.delete();
// Check for redundant basis vectors.
- bool checkBasis(int j) {
- for(int i=0; i < m; ++i) {
- rational[] Ei=E[i];
- if(i != p ? Ei[j] != 0 : Ei[j] <= 0) return false;
+ for(int p=0; p < m; ++p) {
+ bool checkBasis(int j) {
+ for(int i=0; i < m; ++i) {
+ rational[] Ei=E[i];
+ if(i != p ? Ei[j] != 0 : Ei[j] <= 0)
+ return false;
+ }
+ return true;
}
- return true;
- }
- int checkTableau() {
- for(int j=1; j <= n; ++j)
- if(checkBasis(j)) return j;
- return 0;
- }
+ int checkTableau() {
+ if(optimizeTableau)
+ for(int j=1; j <= n; ++j)
+ if(checkBasis(j)) return j;
+ return 0;
+ }
- int k=0;
- while(p < m) {
int j=checkTableau();
- if(j > 0)
- Bindices[p]=j;
- else { // Add an artificial variable
- Bindices[p]=n+1+k;
+ Bindices[p]=n+1+p;
+ if(j == 0) { // Add an artificial variable
+ artificialColumn.push(p+1);
for(int i=0; i < p; ++i)
E[i].push(0);
E[p].push(1);
@@ -243,14 +251,13 @@ struct simplex {
E[m].push(0);
++k;
}
- ++p;
}
basicValues();
simplexPhase1(c,A,b,Bindices);
- iterate(E,n+k,Bindices);
+ iterate(E,n+k,Bindices,true);
if(Em[0] != 0) {
simplexTableau(E,Bindices);
@@ -265,23 +272,22 @@ struct simplex {
rational[] cB=phase1 ? new rational[m] : c[n-m:n];
rational[][] D=phase1 ? new rational[m+1][n+1] : E;
if(phase1) {
- bool output=true;
+ write("n=",n);
+ write(Bindices);
// Drive artificial variables out of basis.
for(int i=0; i < m; ++i) {
- int k=Bindices[i];
- if(k > n) {
+ if(Bindices[i] > n) {
rational[] Ei=E[i];
int j;
for(j=1; j <= n; ++j)
if(Ei[j] != 0) break;
if(j > n) continue;
- output=false;
- simplexTableau(E,Bindices,i,j);
+ simplexTableau(E,Bindices,i,j,n);
Bindices[i]=j;
rowreduce(E,n,i,j);
}
}
- if(output) simplexTableau(E,Bindices);
+ simplexTableau(E,Bindices,-1,-1,n);
int ip=0; // reduced i
for(int i=0; i < m; ++i) {
int k=Bindices[i];
@@ -307,7 +313,6 @@ struct simplex {
D.delete(ip,m-1);
m=ip;
}
- if(!output) simplexTableau(D,Bindices);
}
rational[] Dm=D[m];
@@ -335,6 +340,8 @@ struct simplex {
for(int k=0; k < m; ++k)
x[Bindices[k]-1]=D[k][0];
+
+ xStandard=copy(x);
}
if(case == UNBOUNDED) {
@@ -414,10 +421,7 @@ struct simplex {
simplexInit(C,a,b,count);
operator init(C,a,b,phase1);
- if(case != INFEASIBLE) {
- xStandard=copy(x);
- if(count > 0)
- x.delete(n,n+count-1);
- }
+ if(case != INFEASIBLE && count > 0)
+ x.delete(n,n+count-1);
}
}
diff --git a/Master/texmf-dist/asymptote/shaders/blend.glsl b/Master/texmf-dist/asymptote/shaders/blend.glsl
index 76dfe94ad30..2db4f30abee 100755
--- a/Master/texmf-dist/asymptote/shaders/blend.glsl
+++ b/Master/texmf-dist/asymptote/shaders/blend.glsl
@@ -1,34 +1,22 @@
-layout(binding=0, std430) buffer offsetBuffer {
+layout(binding=0, std430) buffer offsetBuffer
+{
+ uint maxDepth;
uint offset[];
};
-layout(binding=1, std430) buffer maxBuffer {
+layout(binding=2, std430) buffer countBuffer
+{
uint maxSize;
-};
-
-#ifdef GPUINDEXING
-uniform uint offset2;
-uniform uint m1;
-uniform uint r;
-
-layout(binding=2, std430) buffer localSumBuffer {
- uint localSum[];
-};
-
-layout(binding=3, std430) buffer globalSumBuffer {
- uint globalSum[];
-};
-#else
-layout(binding=2, std430) buffer countBuffer {
uint count[];
};
-#endif
-layout(binding=4, std430) buffer fragmentBuffer {
+layout(binding=4, std430) buffer fragmentBuffer
+{
vec4 fragment[];
};
-layout(binding=5, std430) buffer depthBuffer {
+layout(binding=5, std430) buffer depthBuffer
+{
float depth[];
};
@@ -40,10 +28,21 @@ layout(binding=7, std430) buffer opaqueDepthBuffer {
float opaqueDepth[];
};
+#ifdef GPUCOMPRESS
+layout(binding=1, std430) buffer indexBuffer
+{
+ uint index[];
+};
+#define INDEX(pixel) index[pixel]
+#define COUNT(pixel) index[pixel]
+#else
+#define INDEX(pixel) pixel
+#define COUNT(pixel) count[pixel]
+#endif
+
out vec4 outColor;
uniform uint width;
-uniform uint pixels;
uniform vec4 background;
vec4 blend(vec4 outColor, vec4 color)
@@ -53,29 +52,37 @@ vec4 blend(vec4 outColor, vec4 color)
void main()
{
- uint headIndex=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+ uint pixel=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+ float OpaqueDepth=opaqueDepth[pixel];
+ uint element=INDEX(pixel);
+
+#ifdef GPUCOMPRESS
+ if(element == 0u) {
+ if(OpaqueDepth != 0.0)
+ opaqueDepth[pixel]=0.0;
+ discard;
+ }
+#endif
+
#ifdef GPUINDEXING
- uint size=offset[headIndex];
+ uint listIndex=offset[element];
+ uint size=offset[element+1u]-listIndex;
#else
- uint size=count[headIndex];
+ uint size=count[element];
#endif
- float OpaqueDepth=opaqueDepth[headIndex];
+
+#ifndef GPUCOMPRESS
if(size == 0u) {
-#ifdef GPUINDEXING
- offset[pixels+headIndex]=0u;
-#endif
- opaqueDepth[headIndex]=0.0;
+ if(OpaqueDepth != 0.0)
+ opaqueDepth[pixel]=0.0;
discard;
}
+#endif
- outColor=OpaqueDepth != 0.0 ? opaqueColor[headIndex] : background;
+ outColor=OpaqueDepth != 0.0 ? opaqueColor[pixel] : background;
-#ifdef GPUINDEXING
- uint p=headIndex < r*(m1+1u) ? headIndex/(m1+1u) : (headIndex-r)/m1;
- uint listIndex=localSum[p]+localSum[offset2+p/m2]+globalSum[p/(m2*m2)]+
- offset[pixels+headIndex];
-#else
- uint listIndex=offset[headIndex]-size;
+#ifndef GPUINDEXING
+ uint listIndex=offset[element]-size;
#endif
uint k=0u;
@@ -83,36 +90,49 @@ void main()
while(k < size && depth[listIndex+k] >= OpaqueDepth)
++k;
+ uint n=size-k;
+
// Sort the fragments with respect to descending depth
- if(size-k <= ARRAYSIZE) {
- if(k < size) {
- uint Index[ARRAYSIZE];
- float Depth[ARRAYSIZE];
- Index[0]=k;
- Depth[0]=depth[listIndex+k];
- ++k;
+ if(n <= ARRAYSIZE) {
+ if(n == 1)
+ outColor=blend(outColor,fragment[listIndex+k]);
+ else if(n > 0) {
+ struct element {
+ uint index;
+ float depth;
+ };
+
+ element E[ARRAYSIZE];
+ E[0]=element(k,depth[listIndex+k]);
uint i=1u;
- while(true) {
- if(OpaqueDepth != 0.0)
- while(k < size && depth[listIndex+k] >= OpaqueDepth)
- ++k;
- if(k == size) break;
+ while(++k < size) {
float d=depth[listIndex+k];
+ if(OpaqueDepth != 0.0) {
+ while(k < size && d >= OpaqueDepth) {
+ ++k;
+ d=depth[listIndex+k];
+ }
+ if(k == size) break;
+ }
uint j=i;
- while(j > 0u && d > Depth[j-1u]) {
- Index[j]=Index[j-1u];
- Depth[j]=Depth[j-1u];
+ while(j > 0u && d > E[j-1u].depth) {
+ E[j]=E[j-1u];
--j;
}
- Index[j]=k++;
- Depth[j]=d;
+ E[j]=element(k,d);
++i;
}
for(uint j=0u; j < i; ++j)
- outColor=blend(outColor,fragment[listIndex+Index[j]]);
+ outColor=blend(outColor,fragment[listIndex+E[j].index]);
}
+
+ if(OpaqueDepth != 0.0)
+ opaqueDepth[pixel]=0.0;
} else {
- atomicMax(maxSize,size);
+ atomicMax(maxDepth,size);
+#ifndef GPUINDEXING
+ maxSize=maxDepth;
+#endif
for(uint i=k+1u; i < size; i++) {
vec4 temp=fragment[listIndex+i];
float d=depth[listIndex+i];
@@ -130,19 +150,14 @@ void main()
if(OpaqueDepth == 0.0)
for(uint i=listIndex+k; i < stop; i++)
outColor=blend(outColor,fragment[i]);
- else
+ else {
for(uint i=listIndex+k; i < stop; i++) {
if(depth[i] < OpaqueDepth)
outColor=blend(outColor,fragment[i]);
}
+ opaqueDepth[pixel]=0.0;
+ }
}
-
- opaqueDepth[headIndex]=0.0;
-#ifdef GPUINDEXING
- offset[headIndex]=0u;
- offset[pixels+headIndex]=0u;
-#else
- count[headIndex]=0u;
-#endif
+ COUNT(pixel)=0u;
}
diff --git a/Master/texmf-dist/asymptote/shaders/compress.glsl b/Master/texmf-dist/asymptote/shaders/compress.glsl
new file mode 100755
index 00000000000..26b4e1041e9
--- /dev/null
+++ b/Master/texmf-dist/asymptote/shaders/compress.glsl
@@ -0,0 +1,23 @@
+layout(binding=0) uniform atomic_uint elements;
+
+layout(binding=1, std430) buffer indexBuffer
+{
+ uint index[];
+};
+
+layout(binding=2, std430) buffer countBuffer
+{
+ uint maxSize;
+ uint count[];
+};
+
+uniform uint width;
+
+void main()
+{
+ uint pixel=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+ uint Count=index[pixel];
+ if(Count > 0u)
+ count[(index[pixel]=atomicCounterIncrement(elements))]=Count;
+ discard;
+}
diff --git a/Master/texmf-dist/asymptote/shaders/count.glsl b/Master/texmf-dist/asymptote/shaders/count.glsl
index c9427714980..f64b25ed44a 100755
--- a/Master/texmf-dist/asymptote/shaders/count.glsl
+++ b/Master/texmf-dist/asymptote/shaders/count.glsl
@@ -1,10 +1,13 @@
-#ifdef GPUINDEXING
-layout(binding=0, std430) buffer offsetBuffer {
- uint count[];
+#ifdef GPUCOMPRESS
+layout(binding=1, std430) buffer indexBuffer
+{
+ uint index[];
};
#else
-layout(binding=2, std430) buffer countBuffer {
- uint count[];
+layout(binding=2, std430) buffer countBuffer
+{
+ uint maxSize;
+ uint index[];
};
#endif
@@ -12,6 +15,6 @@ uniform uint width;
void main()
{
- atomicAdd(count[uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x)],1u);
+ atomicAdd(index[uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x)],1u);
discard;
}
diff --git a/Master/texmf-dist/asymptote/shaders/fragment.glsl b/Master/texmf-dist/asymptote/shaders/fragment.glsl
index e8d4be86cf2..6f42f7d4919 100755
--- a/Master/texmf-dist/asymptote/shaders/fragment.glsl
+++ b/Master/texmf-dist/asymptote/shaders/fragment.glsl
@@ -30,49 +30,51 @@ float Roughness;
#ifdef HAVE_SSBO
-layout(binding=0, std430) buffer offsetBuffer {
+layout(binding=0, std430) buffer offsetBuffer
+{
+ uint maxDepth;
uint offset[];
};
-#ifdef GPUINDEXING
-
-#if defined(TRANSPARENT) || (!defined(HAVE_INTERLOCK) && !defined(OPAQUE))
-uniform uint offset2;
-uniform uint m1;
-uniform uint r;
-#endif
-
-layout(binding=2, std430) buffer localSumBuffer {
- uint localSum[];
-};
-
-layout(binding=3, std430) buffer globalSumBuffer {
- uint globalSum[];
-};
-#else
-layout(binding=2, std430) buffer countBuffer {
+#ifndef GPUINDEXING
+layout(binding=2, std430) buffer countBuffer
+{
+ uint maxSize;
uint count[];
};
#endif
-layout(binding=4, std430) buffer fragmentBuffer {
+layout(binding=4, std430) buffer fragmentBuffer
+{
vec4 fragment[];
};
-layout(binding=5, std430) buffer depthBuffer {
+layout(binding=5, std430) buffer depthBuffer
+{
float depth[];
};
-layout(binding=6, std430) buffer opaqueBuffer {
+layout(binding=6, std430) buffer opaqueBuffer
+{
vec4 opaqueColor[];
};
-layout(binding=7, std430) buffer opaqueDepthBuffer {
+layout(binding=7, std430) buffer opaqueDepthBuffer
+{
float opaqueDepth[];
};
+#ifdef GPUCOMPRESS
+layout(binding=1, std430) buffer indexBuffer
+{
+ uint index[];
+};
+#define INDEX(pixel) index[pixel]
+#else
+#define INDEX(pixel) pixel
+#endif
+
uniform uint width;
-uniform uint pixels;
#endif
@@ -272,14 +274,13 @@ void main()
#ifndef WIDTH
#ifdef HAVE_SSBO
- uint headIndex=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
+ uint pixel=uint(gl_FragCoord.y)*width+uint(gl_FragCoord.x);
#if defined(TRANSPARENT) || (!defined(HAVE_INTERLOCK) && !defined(OPAQUE))
+ uint element=INDEX(pixel);
#ifdef GPUINDEXING
- uint p=headIndex < r*(m1+1u) ? headIndex/(m1+1u) : (headIndex-r)/m1;
- uint listIndex=localSum[p]+localSum[offset2+p/m2]+globalSum[p/(m2*m2)]+
- atomicAdd(offset[pixels+headIndex],-1u)-1u;
+ uint listIndex=atomicAdd(offset[element],-1u)-1u;
#else
- uint listIndex=offset[headIndex]-atomicAdd(count[headIndex],1u)-1u;
+ uint listIndex=offset[element]-atomicAdd(count[element],1u)-1u;
#endif
fragment[listIndex]=outColor;
depth[listIndex]=gl_FragCoord.z;
@@ -287,18 +288,16 @@ void main()
discard;
#endif
#else
-#ifndef OPAQUE
-#ifdef HAVE_INTERLOCK
+#if defined(HAVE_INTERLOCK) && !defined(OPAQUE)
beginInvocationInterlockARB();
- if(opaqueDepth[headIndex] == 0.0 || gl_FragCoord.z < opaqueDepth[headIndex])
+ if(opaqueDepth[pixel] == 0.0 || gl_FragCoord.z < opaqueDepth[pixel])
{
- opaqueDepth[headIndex]=gl_FragCoord.z;
- opaqueColor[headIndex]=outColor;
+ opaqueDepth[pixel]=gl_FragCoord.z;
+ opaqueColor[pixel]=outColor;
}
endInvocationInterlockARB();
#endif
#endif
#endif
#endif
-#endif
}
diff --git a/Master/texmf-dist/asymptote/shaders/sum1.glsl b/Master/texmf-dist/asymptote/shaders/sum1.glsl
index 2cb9ed23aac..e54744a1d46 100755
--- a/Master/texmf-dist/asymptote/shaders/sum1.glsl
+++ b/Master/texmf-dist/asymptote/shaders/sum1.glsl
@@ -1,38 +1,40 @@
-layout(local_size_x=LOCAL_SIZE_X) in;
+layout(local_size_x=LOCALSIZE) in;
+
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
uniform uint elements;
-layout(binding=0, std430) buffer offsetBuffer
+layout(binding=2, std430) buffer countBuffer
{
- uint offset[];
+ uint maxSize;
+ uint count[];
};
-layout(binding=2, std430) buffer localSumBuffer
+layout(binding=3, std430) buffer globalSumBuffer
{
- uint localSum[];
+ uint globalSum[];
};
-void main(void)
+shared uint groupSum[LOCALSIZE];
+
+void main()
{
- uint id=gl_GlobalInvocationID.x;
-
- uint m=elements/(gl_WorkGroupSize.x*gl_NumWorkGroups.x);
- uint r=elements-m*gl_WorkGroupSize.x*gl_NumWorkGroups.x;
- uint row,stop;
- if(id < r) {
- row=m*id+id;
- stop=row+m+1u;
- } else {
- row=m*id+r;
- stop=row+m;
- }
+ uint id=gl_LocalInvocationID.x;
+ uint dataOffset=gl_WorkGroupID.x*groupSize+id;
+ uint stop=dataOffset+groupSize;
+ uint sum=0u;
+ for(uint i=dataOffset; i < stop; i += LOCALSIZE)
+ sum += count[i];
+
+ groupSum[id]=sum;
+ barrier();
- uint Sum=offset[row];
- offset[elements+row]=Sum;
- for(uint i=row+1u; i < stop; ++i) {
- Sum += offset[i];
- offset[elements+i]=Sum;
+ for(uint s=LOCALSIZE/2; s > 0u; s >>= 1u) {
+ if(id < s)
+ groupSum[id] += groupSum[id+s];
+ barrier();
}
- localSum[id+1u]=Sum;
+ if(id == 0u)
+ globalSum[gl_WorkGroupID.x]=groupSum[0u];
}
diff --git a/Master/texmf-dist/asymptote/shaders/sum2.glsl b/Master/texmf-dist/asymptote/shaders/sum2.glsl
index 1ab03513ebd..17b5efeaeeb 100755
--- a/Master/texmf-dist/asymptote/shaders/sum2.glsl
+++ b/Master/texmf-dist/asymptote/shaders/sum2.glsl
@@ -1,24 +1,43 @@
-layout(local_size_x=LOCAL_SIZE_X) in;
+layout(local_size_x=LOCALSIZE) in;
-uniform uint offset2;
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
-layout(binding=2, std430) buffer localSumBuffer
+uniform uint blockSize;
+
+layout(binding=3, std430) buffer globalSumBuffer
{
- uint localSum[];
+ uint globalSum[];
};
-void main(void)
+shared uint groupSum[LOCALSIZE];
+
+void main()
{
- uint id=gl_GlobalInvocationID.x;
+ uint localSum[groupSize];
+ uint id=gl_LocalInvocationID.x;
+
+ uint dataOffset=blockSize*id;
+ uint sum=0u;
+ for(uint i=0; i < blockSize; ++i) {
+ localSum[i]=sum;
+ sum += globalSum[dataOffset+i];
+ }
- uint row=LOCAL_SIZE_X*id;
- uint stop=row+LOCAL_SIZE_X;
+ groupSum[id]=sum;
+ barrier();
- uint Sum=localSum[row];
- for(uint i=row+1u; i < stop; ++i) {
- Sum += localSum[i];
- localSum[i]=Sum;
+ for(uint shift=1u; shift < LOCALSIZE; shift *= 2u) {
+ uint read;
+ if(shift <= id)
+ read=groupSum[id]+groupSum[id-shift];
+ barrier();
+ if(shift <= id)
+ groupSum[id]=read;
+ barrier();
}
- localSum[offset2+id+1u]=Sum;
+ // shift local sums and store
+ uint shift=id > 0u ? groupSum[id-1u] : 0u;
+ for(uint i=0u; i < blockSize; ++i)
+ globalSum[dataOffset+i]=localSum[i]+shift;
}
diff --git a/Master/texmf-dist/asymptote/shaders/sum2fast.glsl b/Master/texmf-dist/asymptote/shaders/sum2fast.glsl
new file mode 100755
index 00000000000..d0c93c09575
--- /dev/null
+++ b/Master/texmf-dist/asymptote/shaders/sum2fast.glsl
@@ -0,0 +1,59 @@
+layout(local_size_x=LOCALSIZE) in;
+
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
+
+layout(binding=3, std430) buffer globalSumBuffer
+{
+ uint globalSum[];
+};
+
+layout(binding=8, std430) buffer feedbackBuffer
+{
+ uint maxSize;
+ uint fragments;
+};
+
+shared uint shuffle[groupSize+LOCALSIZE-1u];
+shared uint groupSum[LOCALSIZE+1u];
+
+void main()
+{
+ uint id=gl_LocalInvocationID.x;
+
+// avoid bank conflicts and coalesce global memory accesses
+ uint shuffleOffset=id/BLOCKSIZE+id;
+ const uint stride=LOCALSIZE/BLOCKSIZE+LOCALSIZE;
+ for(uint i=0u; i < BLOCKSIZE; i++)
+ shuffle[shuffleOffset+i*stride]=globalSum[id+i*LOCALSIZE];
+
+ barrier();
+
+ uint Offset=id*BLOCKSIZE+id;
+ uint stop=Offset+BLOCKSIZE;
+ uint sum=0u;
+ for(uint i=Offset; i < stop; ++i) {
+ uint value=shuffle[i];
+ shuffle[i]=sum;
+ sum += value;
+ }
+
+ if(id == 0u)
+ groupSum[0u]=0u;
+ groupSum[id+1u]=sum;
+ barrier();
+
+ // Apply Hillis-Steele algorithm over all sums in workgroup
+ for(uint shift=1u; shift < LOCALSIZE; shift *= 2u) {
+ uint read;
+ if(shift <= id)
+ read=groupSum[id]+groupSum[id-shift];
+ barrier();
+ if(shift <= id)
+ groupSum[id]=read;
+ barrier();
+ }
+
+ for(uint i=0u; i < BLOCKSIZE; i++)
+ globalSum[id+i*LOCALSIZE]=
+ shuffle[shuffleOffset+i*stride]+groupSum[(i*LOCALSIZE+id)/BLOCKSIZE];
+}
diff --git a/Master/texmf-dist/asymptote/shaders/sum3.glsl b/Master/texmf-dist/asymptote/shaders/sum3.glsl
index 85f55ff2a6c..4ee5203060b 100755
--- a/Master/texmf-dist/asymptote/shaders/sum3.glsl
+++ b/Master/texmf-dist/asymptote/shaders/sum3.glsl
@@ -1,28 +1,80 @@
-layout(local_size_x=LOCAL_SIZE_X) in;
+layout(local_size_x=LOCALSIZE) in;
-uniform uint offset2;
+const uint groupSize=LOCALSIZE*BLOCKSIZE;
-layout(binding=2, std430) buffer localSumBuffer
+uniform uint final;
+
+layout(binding=0, std430) buffer offsetBuffer
+{
+ uint maxDepth;
+ uint offset[];
+};
+
+layout(binding=2, std430) buffer countBuffer
{
- uint localSum[];
+ uint maxSize;
+ uint count[];
};
-layout(binding=3, std430) buffer globalSumBuffer {
+layout(binding=3, std430) buffer globalSumBuffer
+{
uint globalSum[];
};
-void main(void)
+layout(binding=8, std430) buffer feedbackBuffer
{
- uint id=gl_GlobalInvocationID.x;
+ uint size;
+ uint fragments;
+};
- uint row=offset2+LOCAL_SIZE_X*id;
- uint stop=row+LOCAL_SIZE_X;
+shared uint shuffle[groupSize+LOCALSIZE-1u];
+shared uint groupSum[LOCALSIZE+1u];
+
+void main()
+{
+ uint id=gl_LocalInvocationID.x;
- uint Sum=localSum[row];
- for(uint i=row+1u; i < stop; ++i) {
- Sum += localSum[i];
- localSum[i]=Sum;
+// avoid bank conflicts and coalesce global memory accesses
+ uint dataOffset=gl_WorkGroupID.x*groupSize+id;
+ uint shuffleOffset=id/BLOCKSIZE+id;
+ const uint stride=LOCALSIZE/BLOCKSIZE+LOCALSIZE;
+ for(uint i=0u; i < BLOCKSIZE; i++)
+ shuffle[shuffleOffset+i*stride]=count[dataOffset+i*LOCALSIZE];
+
+ barrier();
+
+ uint Offset=id*BLOCKSIZE+id;
+ uint stop=Offset+BLOCKSIZE;
+
+ uint sum=0u;
+ for(uint i=Offset; i < stop; ++i)
+ shuffle[i]=sum += shuffle[i];
+
+ if(id == 0u)
+ groupSum[0u]=0u;
+ groupSum[id+1u]=sum;
+ barrier();
+
+ // Apply Hillis-Steele algorithm over all sums in workgroup
+ for(uint shift=1u; shift < LOCALSIZE; shift *= 2u) {
+ uint read;
+ if(shift <= id)
+ read=groupSum[id]+groupSum[id-shift];
+ barrier();
+ if(shift <= id)
+ groupSum[id]=read;
+ barrier();
}
- globalSum[id+1u]=Sum;
+ uint groupOffset=globalSum[gl_WorkGroupID.x];
+ for(uint i=0u; i < BLOCKSIZE; ++i)
+ offset[dataOffset+i*LOCALSIZE]=shuffle[shuffleOffset+i*stride]+
+ groupSum[(i*LOCALSIZE+id)/BLOCKSIZE]+groupOffset;
+
+ uint diff=final-dataOffset;
+ if(diff < groupSize && diff % LOCALSIZE == 0) {
+ size=maxDepth;
+ maxDepth=0u;
+ fragments=offset[final+1u]=offset[final];
+ }
}
diff --git a/Master/texmf-dist/asymptote/shaders/zero.glsl b/Master/texmf-dist/asymptote/shaders/zero.glsl
index 9bcb6d222e5..06a5359e6d9 100755
--- a/Master/texmf-dist/asymptote/shaders/zero.glsl
+++ b/Master/texmf-dist/asymptote/shaders/zero.glsl
@@ -1,4 +1,6 @@
-layout(binding=2, std430) buffer countBuffer {
+layout(binding=2, std430) buffer countBuffer
+{
+ uint maxSize;
uint count[];
};
diff --git a/Master/texmf-dist/asymptote/simplex.asy b/Master/texmf-dist/asymptote/simplex.asy
index 3bc74635dbb..8b53ede6eb6 100644
--- a/Master/texmf-dist/asymptote/simplex.asy
+++ b/Master/texmf-dist/asymptote/simplex.asy
@@ -42,7 +42,7 @@ struct simplex {
}
}
- int iterate(real[][] E, int N, int[] Bindices) {
+ int iterate(real[][] E, int N, int[] Bindices, bool phase1=false) {
while(true) {
// Bland's rule: first negative entry in reduced cost (bottom) row enters
real[] Em=E[m];
@@ -77,11 +77,13 @@ struct simplex {
// Generate new tableau
Bindices[I]=J;
rowreduce(E,N,I,J);
+
+ if(phase1 && abs(Em[0]) <= EpsilonA) break;
}
return OPTIMAL;
}
- int iterateDual(real[][] E, int N, int[] Bindices) {
+ int iterateDual(real[][] E, int N, int[] Bindices, bool phase1=false) {
while(true) {
// Bland's rule: negative variable with smallest subscript exits
int I;
@@ -182,30 +184,28 @@ struct simplex {
if(phase1) {
Bindices=new int[m];
- int p=0;
+ int k=0;
// Check for redundant basis vectors.
- bool checkBasis(int j) {
- for(int i=0; i < m; ++i) {
- real[] Ei=E[i];
- if(i != p ? abs(Ei[j]) >= epsilonA : Ei[j] <= epsilonA) return false;
+ for(int p=0; p < m; ++p) {
+ bool checkBasis(int j) {
+ for(int i=0; i < m; ++i) {
+ real[] Ei=E[i];
+ if(i != p ? abs(Ei[j]) >= epsilonA : Ei[j] <= epsilonA)
+ return false;
+ }
+ return true;
}
- return true;
- }
- int checkTableau() {
- for(int j=1; j <= n; ++j)
- if(checkBasis(j)) return j;
- return 0;
- }
+ int checkTableau() {
+ for(int j=1; j <= n; ++j)
+ if(checkBasis(j)) return j;
+ return 0;
+ }
- int k=0;
- while(p < m) {
int j=checkTableau();
- if(j > 0)
- Bindices[p]=j;
- else { // Add an artificial variable
- Bindices[p]=n+1+k;
+ Bindices[p]=n+1+p;
+ if(j == 0) { // Add an artificial variable
for(int i=0; i < p; ++i)
E[i].push(0.0);
E[p].push(1.0);
@@ -214,11 +214,11 @@ struct simplex {
E[m].push(0.0);
++k;
}
- ++p;
}
basicValues();
- iterate(E,n+k,Bindices);
+
+ iterate(E,n+k,Bindices,true);
if(abs(Em[0]) > EpsilonA) {
case=INFEASIBLE;
@@ -234,8 +234,7 @@ struct simplex {
if(phase1) {
// Drive artificial variables out of basis.
for(int i=0; i < m; ++i) {
- int k=Bindices[i];
- if(k > n) {
+ if(Bindices[i] > n) {
real[] Ei=E[i];
int j;
for(j=1; j <= n; ++j)
diff --git a/Master/texmf-dist/asymptote/slopefield.asy b/Master/texmf-dist/asymptote/slopefield.asy
index c36ee4d9d01..c295fd61b63 100644
--- a/Master/texmf-dist/asymptote/slopefield.asy
+++ b/Master/texmf-dist/asymptote/slopefield.asy
@@ -3,7 +3,7 @@ real stepfraction=0.05;
picture slopefield(real f(real,real), pair a, pair b,
int nx=nmesh, int ny=nx,
- real tickfactor=0.5, pen p=currentpen, arrowbar arrow=None)
+ real tickfactor=0.5, pen p=currentpen)
{
picture pic;
real dx=(b.x-a.x)/nx;
@@ -16,17 +16,16 @@ picture slopefield(real f(real,real), pair a, pair b,
pair cp=(x,a.y+j*dy);
real slope=f(cp.x,cp.y);
real mp=step/sqrt(1+slope^2);
- draw(pic,(cp.x-mp,cp.y-mp*slope)--(cp.x+mp,cp.y+mp*slope),p,arrow);
+ draw(pic,(cp.x-mp,cp.y-mp*slope)--(cp.x+mp,cp.y+mp*slope),p);
}
}
return pic;
}
picture slopefield(real f(real), pair a, pair b,
- int nx=nmesh, int ny=nx, pen p=currentpen,
- arrowbar arrow=None)
+ int nx=nmesh, int ny=nx, pen p=currentpen)
{
- return slopefield(new real(real x, real y) {return f(x);},a,b,nx,ny,p,arrow);
+ return slopefield(new real(real x, real y) {return f(x);},a,b,nx,ny,p);
}
path curve(pair c, real f(real,real), pair a, pair b)
@@ -83,4 +82,3 @@ path curve(pair c, real f(real), pair a, pair b)
{
return curve(c,new real(real x, real y){return f(x);},a,b);
}
-
diff --git a/Master/texmf-dist/asymptote/stats.asy b/Master/texmf-dist/asymptote/stats.asy
index 6183fc18df2..3143a390035 100644
--- a/Master/texmf-dist/asymptote/stats.asy
+++ b/Master/texmf-dist/asymptote/stats.asy
@@ -290,3 +290,30 @@ linefit leastsquares(real[] x, real[] y)
}
return L;
}
+
+// Do a least-squares fit of data in real arrays x and y weighted by w
+// to the line y=m*x+b, by minimizing sum(w*(y-m*x-b)^2).
+linefit leastsquares(real[] x, real[] y, real[] w)
+{
+ linefit L;
+ int n=x.length;
+ if(n == 1) abort("Least squares fit requires at least 2 data points");
+ real sx=sum(w*x);
+ real sy=sum(w*y);
+ real W=sum(w);
+ real sxx=W*sum(w*x^2)-sx^2;
+ real sxy=W*sum(w*x*y)-sx*sy;
+ L.m=sxy/sxx;
+ L.b=(sy-L.m*sx)/W;
+ if(n > 2) {
+ real syy=W*sum(w*y^2)-sy^2;
+ if(sxx == 0 || syy == 0) return L;
+ L.r=sxy/sqrt(sxx*syy);
+ real arg=syy-sxy^2/sxx;
+ if(arg <= 0) return L;
+ real s=sqrt(arg/(n-2));
+ L.dm=s*sqrt(1/sxx);
+ L.db=s*sqrt(1+sx^2/sxx)/W;
+ }
+ return L;
+}
diff --git a/Master/texmf-dist/asymptote/three.asy b/Master/texmf-dist/asymptote/three.asy
index c208f59df84..9dfad6ce798 100644
--- a/Master/texmf-dist/asymptote/three.asy
+++ b/Master/texmf-dist/asymptote/three.asy
@@ -2907,11 +2907,6 @@ object embed(string prefix=outprefix(), string label=prefix,
if((preview || (prc && settings.render == 0)) && settings.embed) {
image=prefix;
if(settings.inlinetex) image += "_0";
- if(!preview && !S.pic2.empty2()) {
- transform T=S.pic2.scaling(S.width,S.height);
- _shipout(image,S.pic2.fit(T),newframe,nativeformat(),false,false);
- }
-
image += "."+nativeformat();
if(!settings.inlinetex) file3.push(image);
image=graphic(image,"hiresbb");
diff --git a/Master/texmf-dist/asymptote/three_surface.asy b/Master/texmf-dist/asymptote/three_surface.asy
index 95f41a61817..68f13c5782c 100644
--- a/Master/texmf-dist/asymptote/three_surface.asy
+++ b/Master/texmf-dist/asymptote/three_surface.asy
@@ -20,7 +20,7 @@ triple coons3(path3 external) {
struct patch {
triple[][] P;
- pen[] colors; // Optionally specify 4 corner colors.
+ pen[] colors; // Optionally specify corner colors.
bool straight; // Patch is based on a piecewise straight external path.
bool3 planar; // Patch is planar.
bool triangular; // Patch is a Bezier triangle.
@@ -485,16 +485,21 @@ patch reverse(patch s)
return S;
}
+triple[][] degenerate(triple[][] P)
+{
+ return new triple[][] {{P[0][0],P[0][0],P[0][0],P[0][0]},
+ {P[1][0],P[1][0]*2/3+P[1][1]/3,P[1][0]/3+P[1][1]*2/3,P[1][1]},
+ {P[2][0],P[2][0]/3+P[2][1]*2/3,P[2][1]*2/3+P[2][2]/3,P[2][2]},
+ {P[3][0],P[3][1],P[3][2],P[3][3]}};
+}
+
// Return a degenerate tensor patch representation of a Bezier triangle.
patch tensor(patch s) {
- if(!s.triangular) return patch(s);
- triple[][] P=s.P;
- return patch(new triple[][] {{P[0][0],P[0][0],P[0][0],P[0][0]},
- {P[1][0],P[1][0]*2/3+P[1][1]/3,P[1][0]/3+P[1][1]*2/3,P[1][1]},
- {P[2][0],P[2][0]/3+P[2][1]*2/3,P[2][1]*2/3+P[2][2]/3,P[2][2]},
- {P[3][0],P[3][1],P[3][2],P[3][3]}},
- s.colors.length > 0 ? new pen[] {s.colors[0],s.colors[1],s.colors[2],s.colors[0]} : new pen[],
- s.straight,s.planar,false,false);
+ if(!s.triangular) return s;
+ return patch(degenerate(s.P),
+ s.colors.length > 0 ? new pen[] {
+ s.colors[0],s.colors[1],s.colors[2],s.colors[0]} : new pen[],
+ s.straight,s.planar,false,false);
}
// Return the tensor product patch control points corresponding to path p
@@ -1268,15 +1273,11 @@ patch subpatch(patch s, pair a, pair b)
return patch(subpatch(s.P,a,b),s.straight,s.planar);
}
-private string triangular=
- "Intersection of path3 with Bezier triangle is not yet implemented";
-
// return an array containing the times for one intersection of path p and
// patch s.
real[] intersect(path3 p, patch s, real fuzz=-1)
{
- if(s.triangular) abort(triangular);
- return intersect(p,s.P,fuzz);
+ return intersect(p,s.triangular ? degenerate(s.P) : s.P,fuzz);
}
// return an array containing the times for one intersection of path p and
@@ -1293,8 +1294,7 @@ real[] intersect(path3 p, surface s, real fuzz=-1)
// return an array containing all intersection times of path p and patch s.
real[][] intersections(path3 p, patch s, real fuzz=-1)
{
- if(s.triangular) abort(triangular);
- return sort(intersections(p,s.P,fuzz));
+ return sort(intersections(p,s.triangular ? degenerate(s.P) : s.P,fuzz));
}
// return an array containing all intersection times of path p and surface s.
@@ -1384,7 +1384,8 @@ void draw3D(frame f, patch s, material m,
if(prc() && light.on())
straight=false; // PRC vertex colors (for quads only) ignore lighting
m=material(m);
- m.diffuse(mean(s.colors));
+ if(prc())
+ m.diffuse(mean(s.colors));
}
m=material(m,light,s.colors.length > 0);
@@ -1423,7 +1424,7 @@ void draw(frame f, triple[] v, int[][] vi,
triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
int[][] pi={}, light light=currentlight, render render=defaultrender)
{
- bool normals=n.length > 0;
+ bool normals=ni.length > 0;
if(!normals) {
ni=new int[vi.length][3];
normals=computeNormals(v,vi,n,ni) > 0;
@@ -1431,6 +1432,35 @@ void draw(frame f, triple[] v, int[][] vi,
if(p.length > 0)
m=mean(p);
m=material(m,light);
+
+ if(prc()) {
+ int[] vertexNormal=new int[ni.length];
+ int[] vertexPen=new int[pi.length];
+
+ bool pens=pi.length > 0;
+
+ for(int i=0; i < vi.length; ++i) {
+ int[] vii=vi[i];
+ int[] nii=ni[i];
+ for(int j=0; j < 3; ++j) {
+ int V=vii[j];
+ vertexNormal[V]=nii[j];
+ if(pens)
+ vertexPen[V]=pi[i][j];
+ }
+ }
+
+ for(int i=0; i < vi.length; ++i) {
+ int[] vii=vi[i];
+ for(int j=0; j < 3; ++j) {
+ int V=vii[j];
+ ni[i][j]=vertexNormal[V];
+ if(pens)
+ pi[i][j]=vertexPen[V];
+ }
+ }
+ }
+
draw(f,v,vi,render.interaction.center,n,ni,
m.p,m.opacity,m.shininess,m.metallic,m.fresnel0,p,pi,
render.interaction.type);
@@ -1441,8 +1471,7 @@ void draw(picture pic=currentpicture, triple[] v, int[][] vi,
triple[] n={}, int[][] ni={}, material m=currentpen, pen[] p={},
int[][] pi={}, light light=currentlight, render render=defaultrender)
{
- bool prc=prc();
- bool normals=n.length > 0;
+ bool normals=ni.length > 0;
if(!normals) {
ni=new int[vi.length][3];
normals=computeNormals(v,vi,n,ni) > 0;
diff --git a/Master/texmf-dist/asymptote/v3dheadertypes.asy b/Master/texmf-dist/asymptote/v3dheadertypes.asy
index dba3c18d0b3..5a5cd8c99da 100644
--- a/Master/texmf-dist/asymptote/v3dheadertypes.asy
+++ b/Master/texmf-dist/asymptote/v3dheadertypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dheadertypes
// AUTO-GENERATED from v3dheadertypes.csv
-// Generated at 2022-03-07 12:05:14.285216
+// Generated at 2023-02-09 04:54:07
struct v3dheadertypes
{
diff --git a/Master/texmf-dist/asymptote/v3dtypes.asy b/Master/texmf-dist/asymptote/v3dtypes.asy
index 6de6b31c5c2..85def476803 100644
--- a/Master/texmf-dist/asymptote/v3dtypes.asy
+++ b/Master/texmf-dist/asymptote/v3dtypes.asy
@@ -1,6 +1,6 @@
// Enum class for v3dtypes
// AUTO-GENERATED from v3dtypes.csv
-// Generated at 2022-03-07 12:05:14.274334
+// Generated at 2023-02-09 04:54:07
struct v3dtypes
{
diff --git a/Master/texmf-dist/asymptote/version.asy b/Master/texmf-dist/asymptote/version.asy
index b28ea576adc..cf0db49b981 100644
--- a/Master/texmf-dist/asymptote/version.asy
+++ b/Master/texmf-dist/asymptote/version.asy
@@ -1 +1 @@
-string VERSION="2.79";
+string VERSION="2.85";
diff --git a/Master/texmf-dist/asymptote/webgl/asygl.js b/Master/texmf-dist/asymptote/webgl/asygl.js
index f33ee3ef54f..b5f77299a6e 100644
--- a/Master/texmf-dist/asymptote/webgl/asygl.js
+++ b/Master/texmf-dist/asymptote/webgl/asygl.js
@@ -36,4 +36,4 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.*/
-let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n vec4 v=vec4(position,1.0);\n gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n ViewPosition=(viewMat*v).xyz;\n#endif\n Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n MaterialIndex=int(materialIndex);\n#ifdef COLOR\n Color=color;\n#endif\n#else\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[int(abs(materialIndex))-1];\n emissive=m.emissive;\n if(materialIndex >= 0.0)\n diffuse=m.diffuse;\n else {\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n }\n#else\n m=Materials[int(materialIndex)];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int MaterialIndex;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n vec3 direction;\n vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n float x=cart.x;\n float y=cart.z;\n float z=cart.y;\n\n float r=length(cart);\n float theta=r > 0.0 ? acos(z/r) : 0.0;\n float phi=atan(y,x);\n\n return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n vec3 sphericalVec=cart2sphere(cartVec);\n sphericalVec.y=sphericalVec.y*piInv;\n sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n vec3 reflectVec=normalize(reflect(-viewDir,normal));\n vec2 reflCoord=normalizedAngle(reflectVec);\n vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n vec3 metal=diffuse.rgb*IBLRefl;\n return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n float ndoth=max(dot(normal,h),0.0);\n float alpha2=Roughness2*Roughness2;\n float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n float ndotv=max(dot(v,normal),0.0);\n float ap=1.0+Roughness2;\n float k=0.125*ap*ap;\n return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n float a=1.0-max(dot(h,v),0.0);\n float b=a*a;\n return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n vec3 lambertian=diffuse.rgb;\n vec3 h=normalize(lightDirection+viewDirection);\n\n float omegain=max(dot(viewDirection,normal),0.0);\n float omegaln=max(dot(lightDirection,normal),0.0);\n\n float D=NDF_TRG(h);\n float G=Geom(viewDirection,lightDirection);\n float F=Fresnel(h,viewDirection,fresnel0);\n\n float denom=4.0*omegain*omegaln;\n float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n vec3 metal=rawReflectance*diffuse.rgb;\n\n return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[abs(MaterialIndex)-1];\n emissive=m.emissive;\n if(MaterialIndex >= 0)\n diffuse=m.diffuse;\n else {\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n }\n#else\n m=Materials[MaterialIndex];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n normal=normalize(Normal);\n normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n color=IBLColor(viewDir);\n#else\n Roughness2=roughness*roughness;\n color=emissive.rgb;\n for(int i=0; i < nlights; ++i) {\n Light Li=Lights[i];\n vec3 L=Li.direction;\n float cosTheta=max(dot(normal,L),0.0);\n vec3 radiance=cosTheta*Li.color;\n color += BRDF(viewDir,L)*radiance;\n }\n#endif\n OUTVALUE=vec4(color,diffuse.a);\n#else\n OUTVALUE=emissive;\n#endif\n}\n";!function(e,t){if("object"==typeof exports&&"object"==typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var i=t();for(var a in i)("object"==typeof exports?exports:e)[a]=i[a]}}("undefined"!=typeof self?self:this,(function(){return function(e){var t={};function i(a){if(t[a])return t[a].exports;var n=t[a]={i:a,l:!1,exports:{}};return e[a].call(n.exports,n,n.exports,i),n.l=!0,n.exports}return i.m=e,i.c=t,i.d=function(e,t,a){i.o(e,t)||Object.defineProperty(e,t,{configurable:!1,enumerable:!0,get:a})},i.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return i.d(t,"a",t),t},i.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},i.p="",i(i.s=1)}([function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.setMatrixArrayType=function(e){t.ARRAY_TYPE=e},t.toRadian=function(e){return e*n},t.equals=function(e,t){return Math.abs(e-t)<=a*Math.max(1,Math.abs(e),Math.abs(t))};var a=t.EPSILON=1e-6;t.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,t.RANDOM=Math.random;var n=Math.PI/180},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.mat4=t.mat3=void 0;var a=r(i(2)),n=r(i(3));function r(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t.default=e,t}t.mat3=a,t.mat4=n},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.create=function(){var e=new a.ARRAY_TYPE(9);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=1,e[5]=0,e[6]=0,e[7]=0,e[8]=1,e},t.fromMat4=function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[4],e[4]=t[5],e[5]=t[6],e[6]=t[8],e[7]=t[9],e[8]=t[10],e},t.invert=function(e,t){var i=t[0],a=t[1],n=t[2],r=t[3],s=t[4],o=t[5],l=t[6],h=t[7],c=t[8],d=c*s-o*h,m=-c*r+o*l,f=h*r-s*l,u=i*d+a*m+n*f;if(!u)return null;return u=1/u,e[0]=d*u,e[1]=(-c*a+n*h)*u,e[2]=(o*a-n*s)*u,e[3]=m*u,e[4]=(c*i-n*l)*u,e[5]=(-o*i+n*r)*u,e[6]=f*u,e[7]=(-h*i+a*l)*u,e[8]=(s*i-a*r)*u,e};var a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t.default=e,t}(i(0))},function(e,t,i){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),t.create=function(){var e=new a.ARRAY_TYPE(16);return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},t.identity=function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},t.invert=function(e,t){var i=t[0],a=t[1],n=t[2],r=t[3],s=t[4],o=t[5],l=t[6],h=t[7],c=t[8],d=t[9],m=t[10],f=t[11],u=t[12],p=t[13],g=t[14],v=t[15],x=i*o-a*s,w=i*l-n*s,M=i*h-r*s,b=a*l-n*o,T=a*h-r*o,S=n*h-r*l,R=c*p-d*u,A=c*g-m*u,I=c*v-f*u,P=d*g-m*p,E=d*v-f*p,y=m*v-f*g,L=x*y-w*E+M*P+b*I-T*A+S*R;if(!L)return null;return L=1/L,e[0]=(o*y-l*E+h*P)*L,e[1]=(n*E-a*y-r*P)*L,e[2]=(p*S-g*T+v*b)*L,e[3]=(m*T-d*S-f*b)*L,e[4]=(l*I-s*y-h*A)*L,e[5]=(i*y-n*I+r*A)*L,e[6]=(g*M-u*S-v*w)*L,e[7]=(c*S-m*M+f*w)*L,e[8]=(s*E-o*I+h*R)*L,e[9]=(a*I-i*E-r*R)*L,e[10]=(u*T-p*M+v*x)*L,e[11]=(d*M-c*T-f*x)*L,e[12]=(o*A-s*P-l*R)*L,e[13]=(i*P-a*A+n*R)*L,e[14]=(p*w-u*b-g*x)*L,e[15]=(c*b-d*w+m*x)*L,e},t.multiply=n,t.translate=function(e,t,i){var a=i[0],n=i[1],r=i[2],s=void 0,o=void 0,l=void 0,h=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,g=void 0,v=void 0;t===e?(e[12]=t[0]*a+t[4]*n+t[8]*r+t[12],e[13]=t[1]*a+t[5]*n+t[9]*r+t[13],e[14]=t[2]*a+t[6]*n+t[10]*r+t[14],e[15]=t[3]*a+t[7]*n+t[11]*r+t[15]):(s=t[0],o=t[1],l=t[2],h=t[3],c=t[4],d=t[5],m=t[6],f=t[7],u=t[8],p=t[9],g=t[10],v=t[11],e[0]=s,e[1]=o,e[2]=l,e[3]=h,e[4]=c,e[5]=d,e[6]=m,e[7]=f,e[8]=u,e[9]=p,e[10]=g,e[11]=v,e[12]=s*a+c*n+u*r+t[12],e[13]=o*a+d*n+p*r+t[13],e[14]=l*a+m*n+g*r+t[14],e[15]=h*a+f*n+v*r+t[15]);return e},t.rotate=function(e,t,i,n){var r,s,o,l,h,c,d,m,f,u,p,g,v,x,w,M,b,T,S,R,A,I,P,E,y=n[0],L=n[1],D=n[2],O=Math.sqrt(y*y+L*L+D*D);if(Math.abs(O)<a.EPSILON)return null;y*=O=1/O,L*=O,D*=O,r=Math.sin(i),s=Math.cos(i),o=1-s,l=t[0],h=t[1],c=t[2],d=t[3],m=t[4],f=t[5],u=t[6],p=t[7],g=t[8],v=t[9],x=t[10],w=t[11],M=y*y*o+s,b=L*y*o+D*r,T=D*y*o-L*r,S=y*L*o-D*r,R=L*L*o+s,A=D*L*o+y*r,I=y*D*o+L*r,P=L*D*o-y*r,E=D*D*o+s,e[0]=l*M+m*b+g*T,e[1]=h*M+f*b+v*T,e[2]=c*M+u*b+x*T,e[3]=d*M+p*b+w*T,e[4]=l*S+m*R+g*A,e[5]=h*S+f*R+v*A,e[6]=c*S+u*R+x*A,e[7]=d*S+p*R+w*A,e[8]=l*I+m*P+g*E,e[9]=h*I+f*P+v*E,e[10]=c*I+u*P+x*E,e[11]=d*I+p*P+w*E,t!==e&&(e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15]);return e},t.fromTranslation=function(e,t){return e[0]=1,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=1,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=1,e[11]=0,e[12]=t[0],e[13]=t[1],e[14]=t[2],e[15]=1,e},t.fromRotation=function(e,t,i){var n,r,s,o=i[0],l=i[1],h=i[2],c=Math.sqrt(o*o+l*l+h*h);if(Math.abs(c)<a.EPSILON)return null;return o*=c=1/c,l*=c,h*=c,n=Math.sin(t),r=Math.cos(t),s=1-r,e[0]=o*o*s+r,e[1]=l*o*s+h*n,e[2]=h*o*s-l*n,e[3]=0,e[4]=o*l*s-h*n,e[5]=l*l*s+r,e[6]=h*l*s+o*n,e[7]=0,e[8]=o*h*s+l*n,e[9]=l*h*s-o*n,e[10]=h*h*s+r,e[11]=0,e[12]=0,e[13]=0,e[14]=0,e[15]=1,e},t.frustum=function(e,t,i,a,n,r,s){var o=1/(i-t),l=1/(n-a),h=1/(r-s);return e[0]=2*r*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=2*r*l,e[6]=0,e[7]=0,e[8]=(i+t)*o,e[9]=(n+a)*l,e[10]=(s+r)*h,e[11]=-1,e[12]=0,e[13]=0,e[14]=s*r*2*h,e[15]=0,e},t.ortho=function(e,t,i,a,n,r,s){var o=1/(t-i),l=1/(a-n),h=1/(r-s);return e[0]=-2*o,e[1]=0,e[2]=0,e[3]=0,e[4]=0,e[5]=-2*l,e[6]=0,e[7]=0,e[8]=0,e[9]=0,e[10]=2*h,e[11]=0,e[12]=(t+i)*o,e[13]=(n+a)*l,e[14]=(s+r)*h,e[15]=1,e};var a=function(e){if(e&&e.__esModule)return e;var t={};if(null!=e)for(var i in e)Object.prototype.hasOwnProperty.call(e,i)&&(t[i]=e[i]);return t.default=e,t}(i(0));function n(e,t,i){var a=t[0],n=t[1],r=t[2],s=t[3],o=t[4],l=t[5],h=t[6],c=t[7],d=t[8],m=t[9],f=t[10],u=t[11],p=t[12],g=t[13],v=t[14],x=t[15],w=i[0],M=i[1],b=i[2],T=i[3];return e[0]=w*a+M*o+b*d+T*p,e[1]=w*n+M*l+b*m+T*g,e[2]=w*r+M*h+b*f+T*v,e[3]=w*s+M*c+b*u+T*x,w=i[4],M=i[5],b=i[6],T=i[7],e[4]=w*a+M*o+b*d+T*p,e[5]=w*n+M*l+b*m+T*g,e[6]=w*r+M*h+b*f+T*v,e[7]=w*s+M*c+b*u+T*x,w=i[8],M=i[9],b=i[10],T=i[11],e[8]=w*a+M*o+b*d+T*p,e[9]=w*n+M*l+b*m+T*g,e[10]=w*r+M*h+b*f+T*v,e[11]=w*s+M*c+b*u+T*x,w=i[12],M=i[13],b=i[14],T=i[15],e[12]=w*a+M*o+b*d+T*p,e[13]=w*n+M*l+b*m+T*g,e[14]=w*r+M*h+b*f+T*v,e[15]=w*s+M*c+b*u+T*x,e}}])}));let Transform,canvasWidth,canvasHeight,imageURL,image,minBound,maxBound,orthographic,angleOfView,initialZoom,viewportMargin,zoomFactor,zoomPinchFactor,zoomPinchCap,zoomStep,shiftHoldDistance,shiftWaitTime,vibrateTime,canvasWidth0,canvasHeight0,zoom0,embedded,canvas,gl,alpha,offscreen,context,maxMaterials,halfCanvasWidth,halfCanvasHeight,P=[],Materials=[],Lights=[],Centers=[],Background=[1,1,1,1],absolute=!1,ibl=!1,viewportShift=[0,0],webgl2=!1,nlights=0,Nmaterials=2,materials=[];const pixelResolution=.75,zoomRemeshFactor=1.5,FillFactor=.1,windowTrim=10,third=1/3,pi=Math.acos(-1),radians=pi/180;let Zoom,lastZoom,xshift,yshift,maxViewportWidth,maxViewportHeight,H,zmin,zmax,size2,ArcballFactor,rotMat=mat4.create(),projMat=mat4.create(),viewMat=mat4.create(),projViewMat=mat4.create(),normMat=mat3.create(),viewMat3=mat3.create(),cjMatInv=mat4.create(),Temp=mat4.create(),center={x:0,y:0,z:0},shift={x:0,y:0},viewParam={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},remesh=!0,wireframe=0,mouseDownOrTouchActive=!1,lastMouseX=null,lastMouseY=null,touchID=null,Positions=[],Normals=[],Colors=[],Indices=[],IBLReflMap=null,IBLDiffuseMap=null,IBLbdrfMap=null;function IBLReady(){return null!==IBLReflMap&&null!==IBLDiffuseMap&&null!==IBLbdrfMap}function SetIBL(){embedded||deleteShaders(),initShaders(ibl)}let roughnessStepCount=8;class Material{constructor(e,t,i,a,n,r){this.diffuse=e,this.emissive=t,this.specular=i,this.shininess=a,this.metallic=n,this.fresnel0=r}setUniform(e,t){let i=i=>gl.getUniformLocation(e,"Materials["+t+"]."+i);gl.uniform4fv(i("diffuse"),new Float32Array(this.diffuse)),gl.uniform4fv(i("emissive"),new Float32Array(this.emissive)),gl.uniform4fv(i("specular"),new Float32Array(this.specular)),gl.uniform4f(i("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let indexExt,TRIANGLES,material0Data,material1Data,materialData,colorData,transparentData,triangleData,materialIndex,enumPointLight=1,enumDirectionalLight=2;class Light{constructor(e,t){this.direction=e,this.color=t}setUniform(e,t){let i=i=>gl.getUniformLocation(e,"Lights["+t+"]."+i);gl.uniform3fv(i("direction"),new Float32Array(this.direction)),gl.uniform3fv(i("color"),new Float32Array(this.color))}}function initShaders(e=!1){let t=gl.getParameter(gl.MAX_VERTEX_UNIFORM_VECTORS);maxMaterials=Math.floor((t-14)/4),Nmaterials=Math.min(Math.max(Nmaterials,Materials.length),maxMaterials),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),pixelShader=initShader(pixelOpt),materialShader=initShader(materialOpt),colorShader=initShader(colorOpt),transparentShader=initShader(transparentOpt)}function deleteShaders(){gl.deleteProgram(transparentShader),gl.deleteProgram(colorShader),gl.deleteProgram(materialShader),gl.deleteProgram(pixelShader)}function saveAttributes(){let e=webgl2?window.top.document.asygl2[alpha]:window.top.document.asygl[alpha];e.gl=gl,e.nlights=Lights.length,e.Nmaterials=Nmaterials,e.maxMaterials=maxMaterials,e.pixelShader=pixelShader,e.materialShader=materialShader,e.colorShader=colorShader,e.transparentShader=transparentShader}function restoreAttributes(){let e=webgl2?window.top.document.asygl2[alpha]:window.top.document.asygl[alpha];gl=e.gl,nlights=e.nlights,Nmaterials=e.Nmaterials,maxMaterials=e.maxMaterials,pixelShader=e.pixelShader,materialShader=e.materialShader,colorShader=e.colorShader,transparentShader=e.transparentShader}function webGL(e,t){let i;return webgl2&&(i=e.getContext("webgl2",{alpha:t}),embedded&&!i)?(webgl2=!1,ibl=!1,initGL(!1),null):(i||(webgl2=!1,ibl=!1,i=e.getContext("webgl",{alpha:t})),i||alert("Could not initialize WebGL"),i)}function initGL(e=!0){if(ibl&&(webgl2=!0),alpha=Background[3]<1,embedded){let t=window.top.document;if(e&&(context=canvas.getContext("2d")),offscreen=webgl2?t.offscreen2:t.offscreen,offscreen||(offscreen=t.createElement("canvas"),webgl2?t.offscreen2=offscreen:t.offscreen=offscreen),webgl2?t.asygl2||(t.asygl2=Array(2)):t.asygl||(t.asygl=Array(2)),asygl=webgl2?t.asygl2:t.asygl,asygl[alpha]&&asygl[alpha].gl)restoreAttributes(),(Lights.length!=nlights||Math.min(Materials.length,maxMaterials)>Nmaterials)&&(initShaders(),saveAttributes());else{if(rc=webGL(offscreen,alpha),!rc)return;gl=rc,initShaders(),webgl2?t.asygl2[alpha]={}:t.asygl[alpha]={},saveAttributes()}}else gl=webGL(canvas,alpha),initShaders();indexExt=gl.getExtension("OES_element_index_uint"),TRIANGLES=gl.TRIANGLES,material0Data=new vertexBuffer(gl.POINTS),material1Data=new vertexBuffer(gl.LINES),materialData=new vertexBuffer,colorData=new vertexBuffer,transparentData=new vertexBuffer,triangleData=new vertexBuffer}function getShader(e,t,i,a=[]){let n=webgl2?"300 es":"100",r=Array(...a),s=[["nlights",0==wireframe?Lights.length:0],["Nmaterials",Nmaterials]],o=[["int","Nlights",Math.max(Lights.length,1)]];webgl2&&r.push("WEBGL2"),ibl&&s.push(["ROUGHNESS_STEP_COUNT",roughnessStepCount.toFixed(2)]),orthographic&&r.push("ORTHOGRAPHIC"),macros_str=s.map(e=>`#define ${e[0]} ${e[1]}`).join("\n"),define_str=r.map(e=>"#define "+e).join("\n"),const_str=o.map(e=>`const ${e[0]} ${e[1]}=${e[2]};`).join("\n"),ext_str=[].map(e=>`#extension ${e}: enable`).join("\n"),shaderSrc=`#version ${n}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n \n${t}\n `;let l=e.createShader(i);return e.shaderSource(l,shaderSrc),e.compileShader(l),e.getShaderParameter(l,e.COMPILE_STATUS)?l:(alert(e.getShaderInfoLog(l)),null)}function registerBuffer(e,t,i,a=gl.ARRAY_BUFFER){return e.length>0&&(0==t&&(t=gl.createBuffer(),i=!0),gl.bindBuffer(a,t),i&&gl.bufferData(a,e,gl.STATIC_DRAW)),t}function drawBuffer(e,t,i=e.indices){if(0==e.indices.length)return;let a=t!=pixelShader;setUniforms(e,t),null!=IBLDiffuseMap&&(gl.activeTexture(gl.TEXTURE0),gl.bindTexture(gl.TEXTURE_2D,IBLbdrfMap),gl.uniform1i(gl.getUniformLocation(t,"reflBRDFSampler"),0),gl.activeTexture(gl.TEXTURE1),gl.bindTexture(gl.TEXTURE_2D,IBLDiffuseMap),gl.uniform1i(gl.getUniformLocation(t,"diffuseSampler"),1),gl.activeTexture(gl.TEXTURE2),gl.bindTexture(gl.TEXTURE_2D,IBLReflMap),gl.uniform1i(gl.getUniformLocation(t,"reflImgSampler"),2));let n=remesh||e.partial||!e.rendered;e.verticesBuffer=registerBuffer(new Float32Array(e.vertices),e.verticesBuffer,n),gl.vertexAttribPointer(positionAttribute,3,gl.FLOAT,!1,a?24:16,0),a?Lights.length>0&&gl.vertexAttribPointer(normalAttribute,3,gl.FLOAT,!1,24,12):gl.vertexAttribPointer(widthAttribute,1,gl.FLOAT,!1,16,12),e.materialsBuffer=registerBuffer(new Int16Array(e.materialIndices),e.materialsBuffer,n),gl.vertexAttribPointer(materialAttribute,1,gl.SHORT,!1,2,0),t!=colorShader&&t!=transparentShader||(e.colorsBuffer=registerBuffer(new Uint8Array(e.colors),e.colorsBuffer,n),gl.vertexAttribPointer(colorAttribute,4,gl.UNSIGNED_BYTE,!0,0,0)),e.indicesBuffer=registerBuffer(indexExt?new Uint32Array(i):new Uint16Array(i),e.indicesBuffer,n,gl.ELEMENT_ARRAY_BUFFER),e.rendered=!0,gl.drawElements(a?wireframe?gl.LINES:e.type:gl.POINTS,i.length,indexExt?gl.UNSIGNED_INT:gl.UNSIGNED_SHORT,0)}class vertexBuffer{constructor(e){this.type=e||TRIANGLES,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(e,t){return this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.materialIndices.push(materialIndex),this.nvertices++}Vertex(e,t,i=[0,0,0,0]){return this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.materialIndices.push(materialIndex),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(e,t){return this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.vertices.push(t),this.materialIndices.push(materialIndex),this.nvertices++}iVertex(e,t,i,a=[0,0,0,0]){let n=6*e;this.vertices[n]=t[0],this.vertices[n+1]=t[1],this.vertices[n+2]=t[2],this.vertices[n+3]=i[0],this.vertices[n+4]=i[1],this.vertices[n+5]=i[2],this.materialIndices[e]=materialIndex;let r=4*e;this.colors[r]=a[0],this.colors[r+1]=a[1],this.colors[r+2]=a[2],this.colors[r+3]=a[3],this.indices.push(e)}append(e){append(this.vertices,e.vertices),append(this.materialIndices,e.materialIndices),append(this.colors,e.colors),appendOffset(this.indices,e.indices,this.nvertices),this.nvertices+=e.nvertices}}function append(e,t){let i=e.length,a=t.length;e.length+=a;for(let n=0;n<a;++n)e[i+n]=t[n]}function appendOffset(e,t,i){let a=e.length,n=t.length;e.length+=t.length;for(let r=0;r<n;++r)e[a+r]=t[r]+i}class Geometry{constructor(){this.data=new vertexBuffer,this.Onscreen=!1,this.m=[]}offscreen(e){let t=projViewMat,i=e[0],a=i[0],n=i[1],r=i[2],s=1/(t[3]*a+t[7]*n+t[11]*r+t[15]);this.x=this.X=(t[0]*a+t[4]*n+t[8]*r+t[12])*s,this.y=this.Y=(t[1]*a+t[5]*n+t[9]*r+t[13])*s;for(let i=1,a=e.length;i<a;++i){let a=e[i],n=a[0],r=a[1],s=a[2],o=1/(t[3]*n+t[7]*r+t[11]*s+t[15]),l=(t[0]*n+t[4]*r+t[8]*s+t[12])*o,h=(t[1]*n+t[5]*r+t[9]*s+t[13])*o;l<this.x?this.x=l:l>this.X&&(this.X=l),h<this.y?this.y=h:h>this.Y&&(this.Y=h)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(e){let t=this.c[0],i=this.c[1],a=this.c[2],n=e[0]-t,r=e[1]-i,s=e[2]-a;return[n*normMat[0]+r*normMat[3]+s*normMat[6]+t,n*normMat[1]+r*normMat[4]+s*normMat[7]+i,n*normMat[2]+r*normMat[5]+s*normMat[8]+a]}Tcorners(e,t){return[this.T(e),this.T([e[0],e[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],t[1],e[2]]),this.T(t)]}setMaterial(e,t){null==e.materialTable[this.MaterialIndex]&&(e.materials.length>=Nmaterials&&(e.partial=!0,t()),e.materialTable[this.MaterialIndex]=e.materials.length,e.materials.push(Materials[this.MaterialIndex])),materialIndex=e.materialTable[this.MaterialIndex]}render(){let e;if(this.setMaterialIndex(),0==this.CenterIndex?e=corners(this.Min,this.Max):(this.c=Centers[this.CenterIndex-1],e=this.Tcorners(this.Min,this.Max)),this.offscreen(e))return this.data.clear(),void this.notRendered();let t,i=this.controlpoints;if(0==this.CenterIndex){if(!remesh&&this.Onscreen)return void this.append();t=i}else{let e=i.length;t=Array(e);for(let a=0;a<e;++a)t[a]=this.T(i[a])}let a=orthographic?1:this.Min[2]/maxBound[2],n=.75*Math.hypot(a*(viewParam.xmax-viewParam.xmin),a*(viewParam.ymax-viewParam.ymin))/size2;this.res2=n*n,this.Epsilon=.1*n,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(t)}}class BezierPatch extends Geometry{constructor(e,t,i,a,n,r){super(),this.controlpoints=e,this.CenterIndex=t,this.MaterialIndex=i,this.Min=a,this.Max=n,this.color=r;let s=e.length;if(r){let e=r[0][3]+r[1][3]+r[2][3];this.transparent=16==s||4==s?e+r[3][3]<1020:e<765}else this.transparent=Materials[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data),this.L2norm(this.controlpoints)}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.color?this.setMaterial(colorData,drawColor):this.setMaterial(materialData,drawMaterial)}L2norm(e){let t=e[0];this.epsilon=0;let i=e.length;for(let a=1;a<i;++a)this.epsilon=Math.max(this.epsilon,abs2([e[a][0]-t[0],e[a][1]-t[1],e[a][2]-t[2]]));this.epsilon*=Number.EPSILON}processTriangle(e){let t=e[0],i=e[1],a=e[2],n=unit(cross([i[0]-t[0],i[1]-t[1],i[2]-t[2]],[a[0]-t[0],a[1]-t[1],a[2]-t[2]]));if(!this.offscreen([t,i,a])){let e,r,s;this.color?(e=this.data.Vertex(t,n,this.color[0]),r=this.data.Vertex(i,n,this.color[1]),s=this.data.Vertex(a,n,this.color[2])):(e=this.vertex(t,n),r=this.vertex(i,n),s=this.vertex(a,n)),0==wireframe?(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(s)):(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(e)),this.append()}}processQuad(e){let t=e[0],i=e[1],a=e[2],n=e[3],r=cross([i[0]-t[0],i[1]-t[1],i[2]-t[2]],[a[0]-i[0],a[1]-i[1],a[2]-i[2]]),s=cross([a[0]-n[0],a[1]-n[1],a[2]-n[2]],[n[0]-t[0],n[1]-t[1],n[2]-t[2]]),o=unit([r[0]+s[0],r[1]+s[1],r[2]+s[2]]);if(!this.offscreen([t,i,a,n])){let e,r,s,l;this.color?(e=this.data.Vertex(t,o,this.color[0]),r=this.data.Vertex(i,o,this.color[1]),s=this.data.Vertex(a,o,this.color[2]),l=this.data.Vertex(n,o,this.color[3])):(e=this.vertex(t,o),r=this.vertex(i,o),s=this.vertex(a,o),l=this.vertex(n,o)),0==wireframe?(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(s),this.data.indices.push(e),this.data.indices.push(s),this.data.indices.push(l)):(this.data.indices.push(e),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(l),this.data.indices.push(l),this.data.indices.push(e)),this.append()}}curve(e,t,i,a,n){new BezierCurve([e[t],e[i],e[a],e[n]],0,materialIndex,this.Min,this.Max).render()}process(e){if(this.transparent&&1!=wireframe&&(materialIndex=this.color?-1-materialIndex:1+materialIndex),10==e.length)return this.process3(e);if(3==e.length)return this.processTriangle(e);if(4==e.length)return this.processQuad(e);if(1==wireframe)return this.curve(e,0,4,8,12),this.curve(e,12,13,14,15),this.curve(e,15,11,7,3),void this.curve(e,3,2,1,0);let t=e[0],i=e[3],a=e[12],n=e[15],r=this.normal(i,e[2],e[1],t,e[4],e[8],a);abs2(r)<this.epsilon&&(r=this.normal(i,e[2],e[1],t,e[13],e[14],n),abs2(r)<this.epsilon&&(r=this.normal(n,e[11],e[7],i,e[4],e[8],a)));let s=this.normal(t,e[4],e[8],a,e[13],e[14],n);abs2(s)<this.epsilon&&(s=this.normal(t,e[4],e[8],a,e[11],e[7],i),abs2(s)<this.epsilon&&(s=this.normal(i,e[2],e[1],t,e[13],e[14],n)));let o=this.normal(a,e[13],e[14],n,e[11],e[7],i);abs2(o)<this.epsilon&&(o=this.normal(a,e[13],e[14],n,e[2],e[1],t),abs2(o)<this.epsilon&&(o=this.normal(t,e[4],e[8],a,e[11],e[7],i)));let l=this.normal(n,e[11],e[7],i,e[2],e[1],t);if(abs2(l)<this.epsilon&&(l=this.normal(n,e[11],e[7],i,e[4],e[8],a),abs2(l)<this.epsilon&&(l=this.normal(a,e[13],e[14],n,e[2],e[1],t))),this.color){let h=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(t,r,h),u=this.data.Vertex(a,s,c),p=this.data.Vertex(n,o,d),g=this.data.Vertex(i,l,m);this.Render(e,f,u,p,g,t,a,n,i,!1,!1,!1,!1,h,c,d,m)}else{let h=this.vertex(t,r),c=this.vertex(a,s),d=this.vertex(n,o),m=this.vertex(i,l);this.Render(e,h,c,d,m,t,a,n,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):this.color?colorData.append(this.data):materialData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:this.color?colorData.rendered=!1:materialData.rendered=!1}Render(e,t,i,a,n,r,s,o,l,h,c,d,m,f,u,p,g){let v=this.Distance(e);if(v[0]<this.res2&&v[1]<this.res2)this.offscreen([r,s,o])||(0==wireframe?(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a))),this.offscreen([r,o,l])||(0==wireframe?(this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(n)):(this.data.indices.push(a),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(t)));else{if(this.offscreen(e))return;let x=e[0],w=e[3],M=e[12],b=e[15];if(v[0]<this.res2){let v=new Split3(x,e[1],e[2],w),T=new Split3(e[4],e[5],e[6],e[7]),S=new Split3(e[8],e[9],e[10],e[11]),R=new Split3(M,e[13],e[14],b),A=[x,v.m0,v.m3,v.m5,e[4],T.m0,T.m3,T.m5,e[8],S.m0,S.m3,S.m5,M,R.m0,R.m3,R.m5],I=[v.m5,v.m4,v.m2,w,T.m5,T.m4,T.m2,e[7],S.m5,S.m4,S.m2,e[11],R.m5,R.m4,R.m2,b],P=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);abs2(P)<=this.epsilon&&(P=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),abs2(P)<=this.epsilon&&(P=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let E=this.normal(I[3],I[2],I[1],I[0],I[4],I[8],I[12]);abs2(E)<=this.epsilon&&(E=this.normal(I[3],I[2],I[1],I[0],I[13],I[14],I[15]),abs2(E)<=this.epsilon&&(E=this.normal(I[15],I[11],I[7],I[3],I[4],I[8],I[12])));let y=this.Epsilon,L=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,e[13],e[14],b)<this.res2){let e=unit(this.differential(I[12],I[8],I[4],I[0]));L=[L[0]-y*e[0],L[1]-y*e[1],L[2]-y*e[2]]}else L=A[15];let D=[.5*(l[0]+r[0]),.5*(l[1]+r[1]),.5*(l[2]+r[2])];if(!m)if(m=Straightness(x,e[1],e[2],w)<this.res2){let e=unit(this.differential(A[3],A[7],A[11],A[15]));D=[D[0]-y*e[0],D[1]-y*e[1],D[2]-y*e[2]]}else D=I[0];if(f){let e=Array(4),v=Array(4);for(let t=0;t<4;++t)e[t]=.5*(u[t]+p[t]),v[t]=.5*(g[t]+f[t]);let x=this.data.Vertex(L,P,e),w=this.data.Vertex(D,E,v);this.Render(A,t,i,x,w,r,s,L,D,h,c,!1,m,f,u,e,v),this.Render(I,w,x,a,n,D,L,o,l,!1,c,d,m,v,e,p,g)}else{let e=this.vertex(L,P),f=this.vertex(D,E);this.Render(A,t,i,e,f,r,s,L,D,h,c,!1,m),this.Render(I,f,e,a,n,D,L,o,l,!1,c,d,m)}return}if(v[1]<this.res2){let v=new Split3(x,e[4],e[8],M),T=new Split3(e[1],e[5],e[9],e[13]),S=new Split3(e[2],e[6],e[10],e[14]),R=new Split3(w,e[7],e[11],b),A=[x,e[1],e[2],w,v.m0,T.m0,S.m0,R.m0,v.m3,T.m3,S.m3,R.m3,v.m5,T.m5,S.m5,R.m5],I=[v.m5,T.m5,S.m5,R.m5,v.m4,T.m4,S.m4,R.m4,v.m2,T.m2,S.m2,R.m2,M,e[13],e[14],b],P=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);abs2(P)<=this.epsilon&&(P=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),abs2(P)<=this.epsilon&&(P=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let E=this.normal(I[15],I[11],I[7],I[3],I[2],I[1],I[0]);abs2(E)<=this.epsilon&&(E=this.normal(I[15],I[11],I[7],I[3],I[4],I[8],I[12]),abs2(E)<=this.epsilon&&(E=this.normal(I[12],I[13],I[14],I[15],I[2],I[1],I[0])));let y=this.Epsilon,L=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!h)if(h=Straightness(x,e[4],e[8],M)<this.res2){let e=unit(this.differential(I[0],I[1],I[2],I[3]));L=[L[0]-y*e[0],L[1]-y*e[1],L[2]-y*e[2]]}else L=A[12];let D=[.5*(o[0]+l[0]),.5*(o[1]+l[1]),.5*(o[2]+l[2])];if(!d)if(d=Straightness(b,e[11],e[7],w)<this.res2){let e=unit(this.differential(A[15],A[14],A[13],A[12]));D=[D[0]-y*e[0],D[1]-y*e[1],D[2]-y*e[2]]}else D=I[3];if(f){let e=Array(4),v=Array(4);for(let t=0;t<4;++t)e[t]=.5*(f[t]+u[t]),v[t]=.5*(p[t]+g[t]);let x=this.data.Vertex(L,P,e),w=this.data.Vertex(D,E,v);this.Render(A,t,x,w,n,r,L,D,l,h,!1,d,m,f,e,v,g),this.Render(I,x,i,a,w,L,s,o,D,h,c,d,!1,e,u,p,v)}else{let e=this.vertex(L,P),f=this.vertex(D,E);this.Render(A,t,e,f,n,r,L,D,l,h,!1,d,m),this.Render(I,e,i,a,f,L,s,o,D,h,c,d,!1)}return}let T=new Split3(x,e[1],e[2],w),S=new Split3(e[4],e[5],e[6],e[7]),R=new Split3(e[8],e[9],e[10],e[11]),A=new Split3(M,e[13],e[14],b),I=new Split3(x,e[4],e[8],M),P=new Split3(T.m0,S.m0,R.m0,A.m0),E=new Split3(T.m3,S.m3,R.m3,A.m3),y=new Split3(T.m5,S.m5,R.m5,A.m5),L=new Split3(T.m4,S.m4,R.m4,A.m4),D=new Split3(T.m2,S.m2,R.m2,A.m2),O=new Split3(w,e[7],e[11],b),B=[x,T.m0,T.m3,T.m5,I.m0,P.m0,E.m0,y.m0,I.m3,P.m3,E.m3,y.m3,I.m5,P.m5,E.m5,y.m5],N=[I.m5,P.m5,E.m5,y.m5,I.m4,P.m4,E.m4,y.m4,I.m2,P.m2,E.m2,y.m2,M,A.m0,A.m3,A.m5],z=[y.m5,L.m5,D.m5,O.m5,y.m4,L.m4,D.m4,O.m4,y.m2,L.m2,D.m2,O.m2,A.m5,A.m4,A.m2,b],_=[T.m5,T.m4,T.m2,w,y.m0,L.m0,D.m0,O.m0,y.m3,L.m3,D.m3,O.m3,y.m5,L.m5,D.m5,O.m5],C=B[15],V=this.normal(B[0],B[4],B[8],B[12],B[13],B[14],B[15]);abs2(V)<this.epsilon&&(V=this.normal(B[0],B[4],B[8],B[12],B[11],B[7],B[3]),abs2(V)<this.epsilon&&(V=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15])));let U=this.normal(N[12],N[13],N[14],N[15],N[11],N[7],N[3]);abs2(U)<this.epsilon&&(U=this.normal(N[12],N[13],N[14],N[15],N[2],N[1],N[0]),abs2(U)<this.epsilon&&(U=this.normal(N[0],N[4],N[8],N[12],N[11],N[7],N[3])));let H=this.normal(z[15],z[11],z[7],z[3],z[2],z[1],z[0]);abs2(H)<this.epsilon&&(H=this.normal(z[15],z[11],z[7],z[3],z[4],z[8],z[12]),abs2(H)<this.epsilon&&(H=this.normal(z[12],z[13],z[14],z[15],z[2],z[1],z[0])));let G=this.normal(_[3],_[2],_[1],_[0],_[4],_[8],_[12]);abs2(G)<this.epsilon&&(G=this.normal(_[3],_[2],_[1],_[0],_[13],_[14],_[15]),abs2(G)<this.epsilon&&(G=this.normal(_[15],_[11],_[7],_[3],_[4],_[8],_[12])));let F=this.normal(z[3],z[2],z[1],C,z[4],z[8],z[12]),W=this.Epsilon,X=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!h)if(h=Straightness(x,e[4],e[8],M)<this.res2){let e=unit(this.differential(N[0],N[1],N[2],N[3]));X=[X[0]-W*e[0],X[1]-W*e[1],X[2]-W*e[2]]}else X=B[12];let j=[.5*(s[0]+o[0]),.5*(s[1]+o[1]),.5*(s[2]+o[2])];if(!c)if(c=Straightness(M,e[13],e[14],b)<this.res2){let e=unit(this.differential(z[12],z[8],z[4],z[0]));j=[j[0]-W*e[0],j[1]-W*e[1],j[2]-W*e[2]]}else j=N[15];let Z=[.5*(o[0]+l[0]),.5*(o[1]+l[1]),.5*(o[2]+l[2])];if(!d)if(d=Straightness(b,e[11],e[7],w)<this.res2){let e=unit(this.differential(_[15],_[14],_[13],_[12]));Z=[Z[0]-W*e[0],Z[1]-W*e[1],Z[2]-W*e[2]]}else Z=z[3];let k=[.5*(l[0]+r[0]),.5*(l[1]+r[1]),.5*(l[2]+r[2])];if(!m)if(m=Straightness(x,e[1],e[2],w)<this.res2){let e=unit(this.differential(B[3],B[7],B[11],B[15]));k=[k[0]-W*e[0],k[1]-W*e[1],k[2]-W*e[2]]}else k=_[0];if(f){let e=Array(4),v=Array(4),x=Array(4),w=Array(4),M=Array(4);for(let t=0;t<4;++t)e[t]=.5*(f[t]+u[t]),v[t]=.5*(u[t]+p[t]),x[t]=.5*(p[t]+g[t]),w[t]=.5*(g[t]+f[t]),M[t]=.5*(e[t]+x[t]);let b=this.data.Vertex(X,V,e),T=this.data.Vertex(j,U,v),S=this.data.Vertex(Z,H,x),R=this.data.Vertex(k,G,w),A=this.data.Vertex(C,F,M);this.Render(B,t,b,A,R,r,X,C,k,h,!1,!1,m,f,e,M,w),this.Render(N,b,i,T,A,X,s,j,C,h,c,!1,!1,e,u,v,M),this.Render(z,A,T,a,S,C,j,o,Z,!1,c,d,!1,M,v,p,x),this.Render(_,R,A,S,n,k,C,Z,l,!1,!1,d,m,w,M,x,g)}else{let e=this.vertex(X,V),f=this.vertex(j,U),u=this.vertex(Z,H),p=this.vertex(k,G),g=this.vertex(C,F);this.Render(B,t,e,g,p,r,X,C,k,h,!1,!1,m),this.Render(N,e,i,f,g,X,s,j,C,h,c,!1,!1),this.Render(z,g,f,a,u,C,j,o,Z,!1,c,d,!1),this.Render(_,p,g,u,n,k,C,Z,l,!1,!1,d,m)}}}process3(e){if(1==wireframe)return this.curve(e,0,1,3,6),this.curve(e,6,7,8,9),void this.curve(e,9,5,2,0);let t=e[0],i=e[6],a=e[9],n=this.normal(a,e[5],e[2],t,e[1],e[3],i),r=this.normal(t,e[1],e[3],i,e[7],e[8],a),s=this.normal(i,e[7],e[8],a,e[5],e[2],t);if(this.color){let o=this.color[0],l=this.color[1],h=this.color[2],c=this.data.Vertex(t,n,o),d=this.data.Vertex(i,r,l),m=this.data.Vertex(a,s,h);this.Render3(e,c,d,m,t,i,a,!1,!1,!1,o,l,h)}else{let o=this.vertex(t,n),l=this.vertex(i,r),h=this.vertex(a,s);this.Render3(e,o,l,h,t,i,a,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(e,t,i,a,n,r,s,o,l,h,c,d,m){if(this.Distance3(e)<this.res2)this.offscreen([n,r,s])||(0==wireframe?(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)));else{if(this.offscreen(e))return;let f=e[0],u=e[1],p=e[2],g=e[3],v=e[4],x=e[5],w=e[6],M=e[7],b=e[8],T=e[9],S=[.5*(T[0]+x[0]),.5*(T[1]+x[1]),.5*(T[2]+x[2])],R=[.5*(T[0]+b[0]),.5*(T[1]+b[1]),.5*(T[2]+b[2])],A=[.5*(x[0]+p[0]),.5*(x[1]+p[1]),.5*(x[2]+p[2])],I=[.5*(b[0]+v[0]),.5*(b[1]+v[1]),.5*(b[2]+v[2])],P=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],E=[.5*(p[0]+v[0]),.5*(p[1]+v[1]),.5*(p[2]+v[2])],y=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],L=[.5*(v[0]+g[0]),.5*(v[1]+g[1]),.5*(v[2]+g[2])],D=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],O=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],B=[.5*(u[0]+g[0]),.5*(u[1]+g[1]),.5*(u[2]+g[2])],N=[.5*(g[0]+w[0]),.5*(g[1]+w[1]),.5*(g[2]+w[2])],z=[.5*(S[0]+A[0]),.5*(S[1]+A[1]),.5*(S[2]+A[2])],_=[.5*(R[0]+P[0]),.5*(R[1]+P[1]),.5*(R[2]+P[2])],C=[.5*(A[0]+y[0]),.5*(A[1]+y[1]),.5*(A[2]+y[2])],V=[.5*I[0]+.25*(v[0]+u[0]),.5*I[1]+.25*(v[1]+u[1]),.5*I[2]+.25*(v[2]+u[2])],U=[.5*(P[0]+D[0]),.5*(P[1]+D[1]),.5*(P[2]+D[2])],H=[.5*E[0]+.25*(v[0]+M[0]),.5*E[1]+.25*(v[1]+M[1]),.5*E[2]+.25*(v[2]+M[2])],G=[.25*(x[0]+v[0])+.5*L[0],.25*(x[1]+v[1])+.5*L[1],.25*(x[2]+v[2])+.5*L[2]],F=[.5*(O[0]+B[0]),.5*(O[1]+B[1]),.5*(O[2]+B[2])],W=[.5*(B[0]+N[0]),.5*(B[1]+N[1]),.5*(B[2]+N[2])],X=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],j=[.5*(H[0]+W[0]),.5*(H[1]+W[1]),.5*(H[2]+W[2])],Z=[.5*(F[0]+W[0]),.5*(F[1]+W[1]),.5*(F[2]+W[2])],k=[.5*(G[0]+U[0]),.5*(G[1]+U[1]),.5*(G[2]+U[2])],Y=[.5*(_[0]+G[0]),.5*(_[1]+G[1]),.5*(_[2]+G[2])],q=[.5*(_[0]+U[0]),.5*(_[1]+U[1]),.5*(_[2]+U[2])],$=[.5*(z[0]+V[0]),.5*(z[1]+V[1]),.5*(z[2]+V[2])],K=[.5*(C[0]+V[0]),.5*(C[1]+V[1]),.5*(C[2]+V[2])],Q=[.5*(z[0]+C[0]),.5*(z[1]+C[1]),.5*(z[2]+C[2])],J=[f,O,y,F,[.5*(E[0]+O[0]),.5*(E[1]+O[1]),.5*(E[2]+O[2])],C,Z,X,K,Q],ee=[Z,W,j,N,[.5*(L[0]+D[0]),.5*(L[1]+D[1]),.5*(L[2]+D[2])],k,w,D,U,q],te=[Q,$,z,Y,[.5*(S[0]+I[0]),.5*(S[1]+I[1]),.5*(S[2]+I[2])],S,q,_,R,T],ie=[q,Y,k,$,[.25*(A[0]+P[0]+B[0]+v[0]),.25*(A[1]+P[1]+B[1]+v[1]),.25*(A[2]+P[2]+B[2]+v[2])],j,Q,K,X,Z],ae=this.normal(Z,j,k,q,Y,$,Q),ne=this.normal(q,Y,$,Q,K,X,Z),re=this.normal(Q,K,X,Z,j,k,q),se=this.Epsilon,oe=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!o)if(o=Straightness(w,M,b,T)<this.res2){let e=unit(this.sumdifferential(ie[0],ie[2],ie[5],ie[9],ie[1],ie[3],ie[6]));oe=[oe[0]-se*e[0],oe[1]-se*e[1],oe[2]-se*e[2]]}else oe=q;let le=[.5*(s[0]+n[0]),.5*(s[1]+n[1]),.5*(s[2]+n[2])];if(!l)if(l=Straightness(f,p,x,T)<this.res2){let e=unit(this.sumdifferential(ie[6],ie[3],ie[1],ie[0],ie[7],ie[8],ie[9]));le=[le[0]-se*e[0],le[1]-se*e[1],le[2]-se*e[2]]}else le=Q;let he=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])];if(!h)if(h=Straightness(f,u,g,w)<this.res2){let e=unit(this.sumdifferential(ie[9],ie[8],ie[7],ie[6],ie[5],ie[2],ie[0]));he=[he[0]-se*e[0],he[1]-se*e[1],he[2]-se*e[2]]}else he=Z;if(c){let e=Array(4),f=Array(4),u=Array(4);for(let t=0;t<4;++t)e[t]=.5*(d[t]+m[t]),f[t]=.5*(m[t]+c[t]),u[t]=.5*(c[t]+d[t]);let p=this.data.Vertex(oe,ae,e),g=this.data.Vertex(le,ne,f),v=this.data.Vertex(he,re,u);this.Render3(J,t,v,g,n,he,le,!1,l,h,c,u,f),this.Render3(ee,v,i,p,he,r,oe,o,!1,h,u,d,e),this.Render3(te,g,p,a,le,oe,s,o,l,!1,f,e,m),this.Render3(ie,p,g,v,oe,le,he,!1,!1,!1,e,f,u)}else{let e=this.vertex(oe,ae),c=this.vertex(le,ne),d=this.vertex(he,re);this.Render3(J,t,d,c,n,he,le,!1,l,h),this.Render3(ee,d,i,e,he,r,oe,o,!1,h),this.Render3(te,c,e,a,le,oe,s,o,l,!1),this.Render3(ie,e,c,d,oe,le,he,!1,!1,!1)}}}Distance(e){let t=e[0],i=e[3],a=e[12],n=e[15],r=Flatness(t,a,i,n);r=Math.max(Straightness(t,e[4],e[8],a)),r=Math.max(r,Straightness(e[1],e[5],e[9],e[13])),r=Math.max(r,Straightness(i,e[7],e[11],n)),r=Math.max(r,Straightness(e[2],e[6],e[10],e[14]));let s=Flatness(t,i,a,n);return s=Math.max(s,Straightness(t,e[1],e[2],i)),s=Math.max(s,Straightness(e[4],e[5],e[6],e[7])),s=Math.max(s,Straightness(e[8],e[9],e[10],e[11])),s=Math.max(s,Straightness(a,e[13],e[14],n)),[r,s]}Distance3(e){let t=e[0],i=e[4],a=e[6],n=e[9],r=abs2([(t[0]+a[0]+n[0])*(1/3)-i[0],(t[1]+a[1]+n[1])*(1/3)-i[1],(t[2]+a[2]+n[2])*(1/3)-i[2]]);return r=Math.max(r,Straightness(t,e[1],e[3],a)),r=Math.max(r,Straightness(t,e[2],e[5],n)),Math.max(r,Straightness(a,e[7],e[8],n))}differential(e,t,i,a){let n=[3*(t[0]-e[0]),3*(t[1]-e[1]),3*(t[2]-e[2])];return abs2(n)>this.epsilon?n:(n=bezierPP(e,t,i),abs2(n)>this.epsilon?n:bezierPPP(e,t,i,a))}sumdifferential(e,t,i,a,n,r,s){let o=this.differential(e,t,i,a),l=this.differential(e,n,r,s);return[o[0]+l[0],o[1]+l[1],o[2]+l[2]]}normal(e,t,i,a,n,r,s){let o=3*(n[0]-a[0]),l=3*(n[1]-a[1]),h=3*(n[2]-a[2]),c=3*(i[0]-a[0]),d=3*(i[1]-a[1]),m=3*(i[2]-a[2]),f=[l*m-h*d,h*c-o*m,o*d-l*c];if(abs2(f)>this.epsilon)return f;let u=[c,d,m],p=[o,l,h],g=bezierPP(a,i,t),v=bezierPP(a,n,r),x=cross(v,u),w=cross(p,g);if(f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon)return f;let M=bezierPPP(a,i,t,e),b=bezierPPP(a,n,r,s);x=cross(p,M),w=cross(b,u);let T=cross(v,g);return f=[x[0]+w[0]+T[0],x[1]+w[1]+T[1],x[2]+w[2]+T[2]],abs2(f)>this.epsilon?f:(x=cross(b,g),w=cross(v,M),f=[x[0]+w[0],x[1]+w[1],x[2]+w[2]],abs2(f)>this.epsilon?f:cross(b,M))}}class BezierCurve extends Geometry{constructor(e,t,i,a,n){super(),this.controlpoints=e,this.CenterIndex=t,this.MaterialIndex=i,this.Min=a,this.Max=n}setMaterialIndex(){this.setMaterial(material1Data,drawMaterial1)}processLine(e){let t=e[0],i=e[1];if(!this.offscreen([t,i])){let e=[0,0,1];this.data.indices.push(this.data.vertex(t,e)),this.data.indices.push(this.data.vertex(i,e)),this.append()}}process(e){if(2==e.length)return this.processLine(e);let t=e[0],i=e[1],a=e[2],n=e[3],r=this.normal(bezierP(t,i),bezierPP(t,i,a)),s=this.normal(bezierP(a,n),bezierPP(n,a,i)),o=this.data.vertex(t,r),l=this.data.vertex(n,s);this.Render(e,o,l),this.data.indices.length>0&&this.append()}append(){material1Data.append(this.data)}notRendered(){material1Data.rendered=!1}Render(e,t,i){let a=e[0],n=e[1],r=e[2],s=e[3];if(Straightness(a,n,r,s)<this.res2)this.offscreen([a,s])||(this.data.indices.push(t),this.data.indices.push(i));else{if(this.offscreen(e))return;let o=[.5*(a[0]+n[0]),.5*(a[1]+n[1]),.5*(a[2]+n[2])],l=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],c=[.5*(o[0]+l[0]),.5*(o[1]+l[1]),.5*(o[2]+l[2])],d=[.5*(l[0]+h[0]),.5*(l[1]+h[1]),.5*(l[2]+h[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[a,o,c,m],u=[m,d,h,s],p=this.normal(bezierPh(a,n,r,s),bezierPPh(a,n,r,s)),g=this.data.vertex(m,p);this.Render(f,t,g),this.Render(u,g,i)}}normal(e,t){let i=dot(e,e),a=dot(e,t);return[i*t[0]-a*e[0],i*t[1]-a*e[1],i*t[2]-a*e[2]]}}class Pixel extends Geometry{constructor(e,t,i,a,n){super(),this.controlpoint=e,this.width=t,this.CenterIndex=0,this.MaterialIndex=i,this.Min=a,this.Max=n}setMaterialIndex(){this.setMaterial(material0Data,drawMaterial0)}process(e){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){material0Data.append(this.data)}notRendered(){material0Data.rendered=!1}}class Triangles extends Geometry{constructor(e,t,i,a){super(),this.CenterIndex=e,this.MaterialIndex=t,this.Min=i,this.Max=a,this.controlpoints=Positions,this.Normals=Normals,this.Colors=Colors,this.Indices=Indices,Positions=[],Normals=[],Colors=[],Indices=[],this.transparent=Materials[this.MaterialIndex].diffuse[3]<1}setMaterialIndex(){this.transparent?this.setMaterial(transparentData,drawTransparent):this.setMaterial(triangleData,drawTriangle)}process(e){this.data.vertices=new Array(6*e.length),materialIndex=this.Colors.length>0?-1-materialIndex:1+materialIndex;for(let t=0,i=this.Indices.length;t<i;++t){let i=this.Indices[t],a=i[0],n=e[a[0]],r=e[a[1]],s=e[a[2]];if(!this.offscreen([n,r,s])){let e=i.length>1?i[1]:a;if(e&&0!=e.length||(e=a),this.Colors.length>0){let t=i.length>2?i[2]:a;t&&0!=t.length||(t=a);let o=this.Colors[t[0]],l=this.Colors[t[1]],h=this.Colors[t[2]];this.transparent|=o[3]+l[3]+h[3]<765,0==wireframe?(this.data.iVertex(a[0],n,this.Normals[e[0]],o),this.data.iVertex(a[1],r,this.Normals[e[1]],l),this.data.iVertex(a[2],s,this.Normals[e[2]],h)):(this.data.iVertex(a[0],n,this.Normals[e[0]],o),this.data.iVertex(a[1],r,this.Normals[e[1]],l),this.data.iVertex(a[1],r,this.Normals[e[1]],l),this.data.iVertex(a[2],s,this.Normals[e[2]],h),this.data.iVertex(a[2],s,this.Normals[e[2]],h),this.data.iVertex(a[0],n,this.Normals[e[0]],o))}else 0==wireframe?(this.data.iVertex(a[0],n,this.Normals[e[0]]),this.data.iVertex(a[1],r,this.Normals[e[1]]),this.data.iVertex(a[2],s,this.Normals[e[2]])):(this.data.iVertex(a[0],n,this.Normals[e[0]]),this.data.iVertex(a[1],r,this.Normals[e[1]]),this.data.iVertex(a[1],r,this.Normals[e[1]]),this.data.iVertex(a[2],s,this.Normals[e[2]]),this.data.iVertex(a[2],s,this.Normals[e[2]]),this.data.iVertex(a[0],n,this.Normals[e[0]]))}}this.data.nvertices=e.length,this.data.indices.length>0&&this.append()}append(){this.transparent?transparentData.append(this.data):triangleData.append(this.data)}notRendered(){this.transparent?transparentData.rendered=!1:triangleData.rendered=!1}}function redrawScene(){initProjection(),setProjection(),remesh=!0,drawScene()}function home(){mat4.identity(rotMat),redrawScene(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1}let positionAttribute=0,normalAttribute=1,materialAttribute=2,colorAttribute=3,widthAttribute=4;function initShader(e=[]){let t=getShader(gl,vertex,gl.VERTEX_SHADER,e),i=getShader(gl,fragment,gl.FRAGMENT_SHADER,e),a=gl.createProgram();return gl.attachShader(a,t),gl.attachShader(a,i),gl.bindAttribLocation(a,positionAttribute,"position"),gl.bindAttribLocation(a,normalAttribute,"normal"),gl.bindAttribLocation(a,materialAttribute,"materialIndex"),gl.bindAttribLocation(a,colorAttribute,"color"),gl.bindAttribLocation(a,widthAttribute,"width"),gl.linkProgram(a),gl.getProgramParameter(a,gl.LINK_STATUS)||alert("Could not initialize shaders"),a}class Split3{constructor(e,t,i,a){this.m0=[.5*(e[0]+t[0]),.5*(e[1]+t[1]),.5*(e[2]+t[2])];let n=.5*(t[0]+i[0]),r=.5*(t[1]+i[1]),s=.5*(t[2]+i[2]);this.m2=[.5*(i[0]+a[0]),.5*(i[1]+a[1]),.5*(i[2]+a[2])],this.m3=[.5*(this.m0[0]+n),.5*(this.m0[1]+r),.5*(this.m0[2]+s)],this.m4=[.5*(n+this.m2[0]),.5*(r+this.m2[1]),.5*(s+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}function unit(e){let t=1/(Math.sqrt(e[0]*e[0]+e[1]*e[1]+e[2]*e[2])||1);return[e[0]*t,e[1]*t,e[2]*t]}function abs2(e){return e[0]*e[0]+e[1]*e[1]+e[2]*e[2]}function dot(e,t){return e[0]*t[0]+e[1]*t[1]+e[2]*t[2]}function cross(e,t){return[e[1]*t[2]-e[2]*t[1],e[2]*t[0]-e[0]*t[2],e[0]*t[1]-e[1]*t[0]]}function bezierP(e,t){return[t[0]-e[0],t[1]-e[1],t[2]-e[2]]}function bezierPP(e,t,i){return[3*(e[0]+i[0])-6*t[0],3*(e[1]+i[1])-6*t[1],3*(e[2]+i[2])-6*t[2]]}function bezierPPP(e,t,i,a){return[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])]}function bezierPh(e,t,i,a){return[i[0]+a[0]-e[0]-t[0],i[1]+a[1]-e[1]-t[1],i[2]+a[2]-e[2]-t[2]]}function bezierPPh(e,t,i,a){return[3*e[0]-5*t[0]+i[0]+a[0],3*e[1]-5*t[1]+i[1]+a[1],3*e[2]-5*t[2]+i[2]+a[2]]}function Straightness(e,t,i,a){let n=[1/3*(a[0]-e[0]),1/3*(a[1]-e[1]),1/3*(a[2]-e[2])];return Math.max(abs2([t[0]-n[0]-e[0],t[1]-n[1]-e[1],t[2]-n[2]-e[2]]),abs2([a[0]-n[0]-i[0],a[1]-n[1]-i[1],a[2]-n[2]-i[2]]))}function Flatness(e,t,i,a){let n=[t[0]-e[0],t[1]-e[1],t[2]-e[2]],r=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return Math.max(abs2(cross(n,unit(r))),abs2(cross(r,unit(n))))/9}function corners(e,t){return[e,[e[0],e[1],t[2]],[e[0],t[1],e[2]],[e[0],t[1],t[2]],[t[0],e[1],e[2]],[t[0],e[1],t[2]],[t[0],t[1],e[2]],t]}function minbound(e){return[Math.min(e[0][0],e[1][0],e[2][0],e[3][0],e[4][0],e[5][0],e[6][0],e[7][0]),Math.min(e[0][1],e[1][1],e[2][1],e[3][1],e[4][1],e[5][1],e[6][1],e[7][1]),Math.min(e[0][2],e[1][2],e[2][2],e[3][2],e[4][2],e[5][2],e[6][2],e[7][2])]}function maxbound(e){return[Math.max(e[0][0],e[1][0],e[2][0],e[3][0],e[4][0],e[5][0],e[6][0],e[7][0]),Math.max(e[0][1],e[1][1],e[2][1],e[3][1],e[4][1],e[5][1],e[6][1],e[7][1]),Math.max(e[0][2],e[1][2],e[2][2],e[3][2],e[4][2],e[5][2],e[6][2],e[7][2])]}function COBTarget(e,t){mat4.fromTranslation(Temp,[center.x,center.y,center.z]),mat4.invert(cjMatInv,Temp),mat4.multiply(e,t,cjMatInv),mat4.multiply(e,Temp,e)}function setUniforms(e,t){let i=t==pixelShader;gl.useProgram(t),gl.enableVertexAttribArray(positionAttribute),i&&gl.enableVertexAttribArray(widthAttribute);let a=!i&&Lights.length>0;if(a&&gl.enableVertexAttribArray(normalAttribute),gl.enableVertexAttribArray(materialAttribute),t.projViewMatUniform=gl.getUniformLocation(t,"projViewMat"),t.viewMatUniform=gl.getUniformLocation(t,"viewMat"),t.normMatUniform=gl.getUniformLocation(t,"normMat"),t!=colorShader&&t!=transparentShader||gl.enableVertexAttribArray(colorAttribute),a)for(let e=0;e<Lights.length;++e)Lights[e].setUniform(t,e);for(let i=0;i<e.materials.length;++i)e.materials[i].setUniform(t,i);gl.uniformMatrix4fv(t.projViewMatUniform,!1,projViewMat),gl.uniformMatrix4fv(t.viewMatUniform,!1,viewMat),gl.uniformMatrix3fv(t.normMatUniform,!1,normMat)}function handleMouseDown(e){zoomEnabled||enableZoom(),mouseDownOrTouchActive=!0,lastMouseX=e.clientX,lastMouseY=e.clientY}let pinchStart,touchStartTime,pinch=!1;function pinchDistance(e){return Math.hypot(e[0].pageX-e[1].pageX,e[0].pageY-e[1].pageY)}function handleTouchStart(e){e.preventDefault(),zoomEnabled||enableZoom();let t=e.targetTouches;swipe=rotate=pinch=!1,zooming||(1!=t.length||mouseDownOrTouchActive||(touchStartTime=(new Date).getTime(),touchId=t[0].identifier,lastMouseX=t[0].pageX,lastMouseY=t[0].pageY),2!=t.length||mouseDownOrTouchActive||(touchId=t[0].identifier,pinchStart=pinchDistance(t),pinch=!0))}function handleMouseUpOrTouchEnd(e){mouseDownOrTouchActive=!1}function rotateScene(e,t,i,a,n){if(e==i&&t==a)return;let[r,s]=arcball([e,-t],[i,-a]);mat4.fromRotation(Temp,2*n*ArcballFactor*r/Zoom,s),mat4.multiply(rotMat,Temp,rotMat)}function shiftScene(e,t,i,a){let n=1/Zoom;shift.x+=(i-e)*n*halfCanvasWidth,shift.y-=(a-t)*n*halfCanvasHeight}function panScene(e,t,i,a){orthographic?shiftScene(e,t,i,a):(center.x+=(i-e)*(viewParam.xmax-viewParam.xmin),center.y-=(a-t)*(viewParam.ymax-viewParam.ymin))}function updateViewMatrix(){COBTarget(viewMat,rotMat),mat4.translate(viewMat,viewMat,[center.x,center.y,0]),mat3.fromMat4(viewMat3,viewMat),mat3.invert(normMat,viewMat3),mat4.multiply(projViewMat,projMat,viewMat)}function capzoom(){let e=Math.sqrt(Number.MAX_VALUE),t=1/e;Zoom<=t&&(Zoom=t),Zoom>=e&&(Zoom=e),(1.5*Zoom<lastZoom||Zoom>1.5*lastZoom)&&(remesh=!0,lastZoom=Zoom)}function zoomImage(e){let t=zoomStep*halfCanvasHeight*e;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(zoomFactor);Math.abs(t)<i&&(Zoom*=zoomFactor**t,capzoom())}function normMouse(e){let t=e[0],i=e[1],a=Math.hypot(t,i);return a>1&&(denom=1/a,t*=denom,i*=denom),[t,i,Math.sqrt(Math.max(1-i*i-t*t,0))]}function arcball(e,t){let i=normMouse(e),a=normMouse(t),n=dot(i,a);return[n>1?0:n<-1?pi:Math.acos(n),unit(cross(i,a))]}function zoomScene(e,t,i,a){zoomImage(t-a)}const DRAGMODE_ROTATE=1,DRAGMODE_SHIFT=2,DRAGMODE_ZOOM=3,DRAGMODE_PAN=4;function processDrag(e,t,i,a=1){let n;switch(i){case 1:n=rotateScene;break;case 2:n=shiftScene;break;case 3:n=zoomScene;break;case 4:n=panScene;break;default:n=(e,t,i,a)=>{}}n((lastMouseX-halfCanvasWidth)/halfCanvasWidth,(lastMouseY-halfCanvasHeight)/halfCanvasHeight,(e-halfCanvasWidth)/halfCanvasWidth,(t-halfCanvasHeight)/halfCanvasHeight,a),lastMouseX=e,lastMouseY=t,setProjection(),drawScene()}let zoomEnabled=0;function enableZoom(){zoomEnabled=1,canvas.addEventListener("wheel",handleMouseWheel,!1)}function disableZoom(){zoomEnabled=0,canvas.removeEventListener("wheel",handleMouseWheel,!1)}function Camera(){let e=Array(3),t=Array(3),i=Array(3),a=center.x,n=center.y,r=.5*(viewParam.zmin+viewParam.zmax);for(let s=0;s<3;++s){let o=0,l=0,h=0,c=4*s;for(let e=0;e<4;++e){let t=4*e,i=rotMat[t],s=rotMat[t+1],d=rotMat[t+2],m=rotMat[t+3],f=Transform[c+e];o+=f*(m-a*i-n*s-r*d),h+=f*s,l+=f*(m-a*i-n*s)}e[s]=o,t[s]=h,i[s]=l}return[e,t,i]}function projection(){if(null==Transform)return"";let e,t,i;[e,t,i]=Camera();let a=orthographic?" orthographic(":" perspective(",n="".padStart(a.length),r="currentprojection=\n"+a+"camera=("+e+"),\n"+n+"up=("+t+"),\n"+n+"target=("+i+"),\n"+n+"zoom="+Zoom*initialZoom/zoom0;return orthographic||(r+=",\n"+n+"angle="+2*Math.atan(Math.tan(.5*angleOfView)/Zoom)/radians),0==xshift&&0==yshift||(r+=",\n"+n+"viewportshift=("+xshift+","+yshift+")"),orthographic||(r+=",\n"+n+"autoadjust=false"),r+=");\n",window.parent.asyProjection=!0,r}function handleKey(e){if(zoomEnabled||enableZoom(),embedded&&zoomEnabled&&27==e.keyCode)return void disableZoom();let t=[];switch(e.key){case"x":t=[1,0,0];break;case"y":t=[0,1,0];break;case"z":t=[0,0,1];break;case"h":home();break;case"m":++wireframe,3==wireframe&&(wireframe=0),2!=wireframe&&(embedded||deleteShaders(),initShaders(ibl)),remesh=!0,drawScene();break;case"+":case"=":case">":expand();break;case"-":case"_":case"<":shrink();break;case"c":showCamera()}t.length>0&&(mat4.rotate(rotMat,rotMat,.1,t),updateViewMatrix(),drawScene())}function setZoom(){capzoom(),setProjection(),drawScene()}function handleMouseWheel(e){e.preventDefault(),e.deltaY<0?Zoom*=zoomFactor:Zoom/=zoomFactor,setZoom()}function handleMouseMove(e){if(!mouseDownOrTouchActive)return;let t,i=e.clientX,a=e.clientY;t=e.getModifierState("Control")?2:e.getModifierState("Shift")?3:e.getModifierState("Alt")?4:1,processDrag(i,a,t)}let zooming=!1,swipe=!1,rotate=!1;function handleTouchMove(e){if(e.preventDefault(),zooming)return;let t=e.targetTouches;if(!pinch&&1==t.length&&touchId==t[0].identifier){let e=t[0].pageX,i=t[0].pageY,a=e-lastMouseX,n=i-lastMouseY,r=a*a+n*n<=shiftHoldDistance*shiftHoldDistance;if(r&&!swipe&&!rotate&&(new Date).getTime()-touchStartTime>shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(vibrateTime),swipe=!0),swipe)processDrag(e,i,2);else if(!r){rotate=!0,processDrag(t[0].pageX,t[0].pageY,1,.5)}}if(pinch&&!swipe&&2==t.length&&touchId==t[0].identifier){let e=pinchDistance(t),i=e-pinchStart;zooming=!0,i*=zoomPinchFactor,i>zoomPinchCap&&(i=zoomPinchCap),i<-zoomPinchCap&&(i=-zoomPinchCap),zoomImage(i/size2),pinchStart=e,swipe=rotate=zooming=!1,setProjection(),drawScene()}}let pixelShader,materialShader,colorShader,transparentShader,zbuffer=[];function transformVertices(e){let t=viewMat[2],i=viewMat[6],a=viewMat[10];zbuffer.length=e.length;for(let n=0;n<e.length;++n){let r=6*n;zbuffer[n]=t*e[r]+i*e[r+1]+a*e[r+2]}}function drawMaterial0(){drawBuffer(material0Data,pixelShader),material0Data.clear()}function drawMaterial1(){drawBuffer(material1Data,materialShader),material1Data.clear()}function drawMaterial(){drawBuffer(materialData,materialShader),materialData.clear()}function drawColor(){drawBuffer(colorData,colorShader),colorData.clear()}function drawTriangle(){drawBuffer(triangleData,transparentShader),triangleData.rendered=!1,triangleData.clear()}function drawTransparent(){let e=transparentData.indices;if(wireframe>0)return drawBuffer(transparentData,transparentShader,e),void transparentData.clear();if(e.length>0){transformVertices(transparentData.vertices);let t=e.length/3,i=Array(t).fill().map((e,t)=>t);i.sort((function(t,i){let a=3*t;Ia=e[a],Ib=e[a+1],Ic=e[a+2];let n=3*i;return IA=e[n],IB=e[n+1],IC=e[n+2],zbuffer[Ia]+zbuffer[Ib]+zbuffer[Ic]<zbuffer[IA]+zbuffer[IB]+zbuffer[IC]?-1:1}));let a=Array(e.length);for(let n=0;n<t;++n){let t=3*i[n];a[3*n]=e[t],a[3*n+1]=e[t+1],a[3*n+2]=e[t+2]}gl.depthMask(!1),drawBuffer(transparentData,transparentShader,a),transparentData.rendered=!1,gl.depthMask(!0)}transparentData.clear()}function drawBuffers(){drawMaterial0(),drawMaterial1(),drawMaterial(),drawColor(),drawTriangle(),drawTransparent(),requestAnimationFrame(drawBuffers)}function drawScene(){embedded&&(offscreen.width=canvasWidth,offscreen.height=canvasHeight,setViewport()),gl.clearColor(Background[0],Background[1],Background[2],Background[3]),gl.clear(gl.COLOR_BUFFER_BIT|gl.DEPTH_BUFFER_BIT);for(let e=0;e<P.length;++e)P[e].render();drawBuffers(),embedded&&(context.clearRect(0,0,canvasWidth,canvasHeight),context.drawImage(offscreen,0,0)),0==wireframe&&(remesh=!1)}function setDimensions(e,t,i,a){let n=e/t;xshift=(i/e+viewportShift[0])*Zoom,yshift=(a/t+viewportShift[1])*Zoom;let r=1/Zoom;if(orthographic){let e=maxBound[0]-minBound[0],t=maxBound[1]-minBound[1];if(e<t*n){let e=.5*t*n*r,i=2*e*xshift,a=t*r*yshift;viewParam.xmin=-e-i,viewParam.xmax=e-i,viewParam.ymin=minBound[1]*r-a,viewParam.ymax=maxBound[1]*r-a}else{let t=.5*e*r/n,i=e*r*xshift,a=2*t*yshift;viewParam.xmin=minBound[0]*r-i,viewParam.xmax=maxBound[0]*r-i,viewParam.ymin=-t-a,viewParam.ymax=t-a}}else{let e=H*r,t=e*n,i=2*t*xshift,a=2*e*yshift;viewParam.xmin=-t-i,viewParam.xmax=t-i,viewParam.ymin=-e-a,viewParam.ymax=e-a}}function setProjection(){setDimensions(canvasWidth,canvasHeight,shift.x,shift.y),(orthographic?mat4.ortho:mat4.frustum)(projMat,viewParam.xmin,viewParam.xmax,viewParam.ymin,viewParam.ymax,-viewParam.zmax,-viewParam.zmin),updateViewMatrix(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(projection())}function showCamera(){window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",projection())}function initProjection(){H=-Math.tan(.5*angleOfView)*maxBound[2],center.x=center.y=0,center.z=.5*(minBound[2]+maxBound[2]),lastZoom=Zoom=zoom0,viewParam.zmin=minBound[2],viewParam.zmax=maxBound[2],shift.x=shift.y=0}function setViewport(){gl.viewportWidth=canvasWidth,gl.viewportHeight=canvasHeight,gl.viewport(.5*(canvas.width-canvasWidth),.5*(canvas.height-canvasHeight),canvasWidth,canvasHeight),gl.scissor(0,0,canvas.width,canvas.height)}function setCanvas(){embedded&&(canvas.width=offscreen.width=canvasWidth,canvas.height=offscreen.height=canvasHeight),size2=Math.hypot(canvasWidth,canvasHeight),halfCanvasWidth=.5*canvas.width,halfCanvasHeight=.5*canvas.height,ArcballFactor=1+8*Math.hypot(viewportMargin[0],viewportMargin[1])/size2}function setsize(e,t){e>maxViewportWidth&&(e=maxViewportWidth),t>maxViewportHeight&&(t=maxViewportHeight),shift.x*=e/canvasWidth,shift.y*=t/canvasHeight,canvasWidth=e,canvasHeight=t,setCanvas(),setViewport(),setProjection(),remesh=!0}function resize(){if(zoom0=initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),absolute&&!embedded)canvasWidth=canvasWidth0*window.devicePixelRatio,canvasHeight=canvasHeight0*window.devicePixelRatio;else{let e=canvasWidth0/canvasHeight0;canvasWidth=Math.max(window.innerWidth-10,10),canvasHeight=Math.max(window.innerHeight-10,10),!orthographic&&!window.parent.asyProjection&&canvasWidth<canvasHeight*e&&(zoom0*=canvasWidth/(canvasHeight*e))}canvas.width=canvasWidth,canvas.height=canvasHeight;window.innerWidth,window.innerHeight;let e=1/zoom0;viewportShift[0]*=e,viewportShift[1]*=e,setsize(canvasWidth,canvasHeight),redrawScene()}function expand(){Zoom*=zoomFactor,setZoom()}function shrink(){Zoom/=zoomFactor,setZoom()}class Align{constructor(e,t){if(this.center=e,t){let e=t[0],i=t[1];this.ct=Math.cos(e),this.st=Math.sin(e),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(e){return[e[0]+this.center[0],e[1]+this.center[1],e[2]+this.center[2]]}T(e){let t=e[0],i=e[1],a=e[2],n=t*this.ct+a*this.st;return[n*this.cp-i*this.sp+this.center[0],n*this.sp+i*this.cp+this.center[1],-t*this.st+a*this.ct+this.center[2]]}}function Tcorners(e,t,i){let a=[e(t),e([t[0],t[1],i[2]]),e([t[0],i[1],t[2]]),e([t[0],i[1],i[2]]),e([i[0],t[1],t[2]]),e([i[0],t[1],i[2]]),e([i[0],i[1],t[2]]),e(i)];return[minbound(a),maxbound(a)]}function material(e,t,i,a,n,r){Materials.push(new Material(e,t,i,a,n,r))}function patch(e,t,i,a,n,r){P.push(new BezierPatch(e,t,i,a,n,r))}function curve(e,t,i,a,n){P.push(new BezierCurve(e,t,i,a,n))}function pixel(e,t,i,a,n){P.push(new Pixel(e,t,i,a,n))}function triangles(e,t,i,a){P.push(new Triangles(e,t,i,a))}function sphere(e,t,i,n,r){let s,o,l,h,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,g=.996685028842544,v=.0549670512339254,x=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,g],[1,a,0],[1,a,m],[f,a*f,u],[p,a*p,g],[a,1,0],[a,1,m],[a*f,f,u],[a*p,p,g],[0,1,0],[0,1,m],[0,f,u],[0,p,g]],[[p,0,g],[p,a*p,g],[v,0,x],[a*p,p,g],[w,w,1],[.05*a,0,1],[0,p,g],[0,v,x],[0,.05*a,1],[0,0,1]]],b=new Align(e,r);function T(e){let t=Array(e.length);for(let i=0;i<e.length;++i){let a=e[i];t[i]=c([s*a[0],o*a[1],l*a[2]])}return t}r?(h=1,d=0,c=b.T.bind(b)):(h=-1,d=-t,c=b.T0.bind(b));let S=Tcorners(c,[-t,-t,d],[t,t,t]),R=S[0],A=S[1];for(let e=-1;e<=1;e+=2){s=e*t;for(let e=-1;e<=1;e+=2){o=e*t;for(let e=h;e<=1;e+=2){l=e*t;for(let e=0;e<2;++e)P.push(new BezierPatch(T(M[e]),i,n,R,A))}}}}let a=4/3*(Math.sqrt(2)-1);function disk(e,t,i,n,r){let s=1-2*a/3,o=[[1,0,0],[1,-a,0],[a,-1,0],[0,-1,0],[1,a,0],[s,0,0],[0,-s,0],[-a,-1,0],[a,1,0],[0,s,0],[-s,0,0],[-1,-a,0],[0,1,0],[-a,1,0],[-1,a,0],[-1,0,0]],l=new Align(e,r);let h=Tcorners(l.T.bind(l),[-t,-t,0],[t,t,0]);P.push(new BezierPatch(function(e){let i=Array(e.length);for(let a=0;a<e.length;++a){let n=e[a];i[a]=l.T([t*n[0],t*n[1],0])}return i}(o),i,n,h[0],h[1]))}function cylinder(e,t,i,n,r,s,o){let l,h,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,a,0],[1,a,1/3],[1,a,2/3],[1,a,1],[a,1,0],[a,1,1/3],[a,1,2/3],[a,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Align(e,s);function m(e){let t=Array(e.length);for(let a=0;a<e.length;++a){let n=e[a];t[a]=d.T([l*n[0],h*n[1],i*n[2]])}return t}let f=Tcorners(d.T.bind(d),[-t,-t,0],[t,t,i]),u=f[0],p=f[1];for(let e=-1;e<=1;e+=2){l=e*t;for(let e=-1;e<=1;e+=2)h=e*t,P.push(new BezierPatch(m(c),n,r,u,p))}if(o){let t=d.T([0,0,i]);P.push(new BezierCurve([e,t],n,r,e,t))}}function rmf(e,t,i,a,n){class r{constructor(e,t,i){this.p=e,this.r=t,this.t=i,this.s=cross(i,t)}}let s=Number.EPSILON*Math.max(abs2(e),abs2(t),abs2(i),abs2(a));function o(n){if(1==n){let n=[a[0]-i[0],a[1]-i[1],a[2]-i[2]];return abs2(n)>s?unit(n):(n=[2*i[0]-t[0]-a[0],2*i[1]-t[1]-a[1],2*i[2]-t[2]-a[2]],abs2(n)>s?unit(n):[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])])}let r=[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])],o=[2*(e[0]+i[0])-4*t[0],2*(e[1]+i[1])-4*t[1],2*(e[2]+i[2])-4*t[2]],l=[t[0]-e[0],t[1]-e[1],t[2]-e[2]],h=n*n,c=[r[0]*h+o[0]*n+l[0],r[1]*h+o[1]*n+l[1],r[2]*h+o[2]*n+l[2]];return abs2(c)>s?unit(c):(h=2*n,c=[r[0]*h+o[0],r[1]*h+o[1],r[2]*h+o[2]],abs2(c)>s?unit(c):unit(r))}let l=Array(n.length),h=[t[0]-e[0],t[1]-e[1],t[2]-e[2]];abs2(h)<s&&(h=[e[0]-2*t[0]+i[0],e[1]-2*t[1]+i[1],e[2]-2*t[2]+i[2]],abs2(h)<s&&(h=[a[0]-e[0]+3*(t[0]-i[0]),a[1]-e[1]+3*(t[1]-i[1]),a[2]-e[2]+3*(t[2]-i[2])])),h=unit(h);let c=function(e){let t=cross(e,[0,1,0]),i=Number.EPSILON*abs2(e);return abs2(t)>i?unit(t):(t=cross(e,[0,0,1]),abs2(t)>i?unit(t):[1,0,0])}(h);l[0]=new r(e,c,h);for(let s=1;s<n.length;++s){let h=l[s-1],c=n[s],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,g=[f*e[0]+m*t[0]+d*i[0]+p*a[0],f*e[1]+m*t[1]+d*i[1]+p*a[1],f*e[2]+m*t[2]+d*i[2]+p*a[2]],v=[g[0]-h.p[0],g[1]-h.p[1],g[2]-h.p[2]];if(0!=v[0]||0!=v[1]||0!=v[2]){let e=h.r,t=unit(v),i=h.t,a=dot(t,i),n=[i[0]-2*a*t[0],i[1]-2*a*t[1],i[2]-2*a*t[2]];i=o(c);let d=2*dot(t,e),m=[e[0]-d*t[0],e[1]-d*t[1],e[2]-d*t[2]],f=unit([i[0]-n[0],i[1]-n[1],i[2]-n[2]]),u=2*dot(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],l[s]=new r(g,unit(m),unit(i))}else l[s]=l[s-1]}return l}function tube(e,t,i,n,r,s,o){let l=rmf(e[0],e[1],e[2],e[3],[0,1/3,2/3,1]),h=a*t,c=[[t,0],[t,h],[h,t],[0,t]];function d(t,a,o,h){let d=Array(16);for(let i=0;i<4;++i){let n=l[i],r=n.r[0],s=n.s[0],m=r*t+s*a,f=r*o+s*h;r=n.r[1],s=n.s[1];let u=r*t+s*a,p=r*o+s*h;r=n.r[2],s=n.s[2];let g=r*t+s*a,v=r*o+s*h,x=e[i],w=x[0];w1=x[1],w2=x[2];for(let e=0;e<4;++e){let t=c[e],a=t[0],n=t[1];d[4*i+e]=[m*a+f*n+w,u*a+p*n+w1,g*a+v*n+w2]}}P.push(new BezierPatch(d,i,n,r,s))}d(1,0,0,1),d(0,-1,1,0),d(-1,0,0,-1),d(0,1,-1,0),o&&P.push(new BezierCurve(e,i,n,r,s))}async function getReq(e){return(await fetch(e)).arrayBuffer()}function rgb(e){return e.getBytes().filter((e,t)=>t%4!=3)}function createTexture(e,t,i=gl.RGB16F){let a=e.width(),n=e.height(),r=gl.createTexture();return gl.activeTexture(gl.TEXTURE0+t),gl.bindTexture(gl.TEXTURE_2D,r),gl.pixelStorei(gl.UNPACK_ALIGNMENT,1),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texImage2D(gl.TEXTURE_2D,0,i,a,n,0,gl.RGB,gl.FLOAT,rgb(e)),r}async function initIBL(){let e=imageURL+image+"/";function t(e){return new Promise(t=>setTimeout(t,e))}for(;!Module.EXRLoader;)await t(0);promises=[getReq(imageURL+"refl.exr").then(e=>{let t=new Module.EXRLoader(e);IBLbdrfMap=createTexture(t,0)}),getReq(e+"diffuse.exr").then(e=>{let t=new Module.EXRLoader(e);IBLDiffuseMap=createTexture(t,1)})],refl_promise=[],refl_promise.push(getReq(e+"refl0.exr"));for(let t=1;t<=roughnessStepCount;++t)refl_promise.push(getReq(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let t=gl.createTexture();gl.activeTexture(gl.TEXTURE0+2),gl.pixelStorei(gl.UNPACK_ALIGNMENT,1),gl.bindTexture(gl.TEXTURE_2D,t),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAX_LEVEL,e.length-1),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MIN_FILTER,gl.LINEAR_MIPMAP_LINEAR),gl.texParameteri(gl.TEXTURE_2D,gl.TEXTURE_MAG_FILTER,gl.LINEAR),gl.texParameterf(gl.TEXTURE_2D,gl.TEXTURE_MIN_LOD,0),gl.texParameterf(gl.TEXTURE_2D,gl.TEXTURE_MAX_LOD,roughnessStepCount);for(let t=0;t<e.length;++t){let i=new Module.EXRLoader(e[t]);gl.texImage2D(gl.TEXTURE_2D,t,gl.RGB16F,i.width(),i.height(),0,gl.RGB,gl.FLOAT,rgb(i))}IBLReflMap=t}),promises.push(finished_promise),await Promise.all(promises)}function webGLStart(){canvas=document.getElementById("Asymptote"),embedded=window.top.document!=document,initGL(),gl.enable(gl.BLEND),gl.blendFunc(gl.SRC_ALPHA,gl.ONE_MINUS_SRC_ALPHA),gl.enable(gl.DEPTH_TEST),gl.enable(gl.SCISSOR_TEST),canvas.onmousedown=handleMouseDown,document.onmouseup=handleMouseUpOrTouchEnd,document.onmousemove=handleMouseMove,canvas.onkeydown=handleKey,embedded||enableZoom(),canvas.addEventListener("touchstart",handleTouchStart,!1),canvas.addEventListener("touchend",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchcancel",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchleave",handleMouseUpOrTouchEnd,!1),canvas.addEventListener("touchmove",handleTouchMove,!1),document.addEventListener("keydown",handleKey,!1),canvasWidth0=canvasWidth,canvasHeight0=canvasHeight,mat4.identity(rotMat),0!=window.innerWidth&&0!=window.innerHeight&&resize(),window.addEventListener("resize",resize,!1),ibl&&initIBL().then(SetIBL).then(redrawScene)}
+let vertex="\n#ifdef WEBGL2\n#define IN in\n#define OUT out\n#else\n#define IN attribute\n#define OUT varying\n#endif\n\nIN vec3 position;\n#ifdef WIDTH\nIN float width;\n#endif\n#ifdef NORMAL\nIN vec3 normal;\n#endif\n\nIN float materialIndex;\n\n#ifdef WEBGL2\nflat out int MaterialIndex;\n#ifdef COLOR\nOUT vec4 Color;\n#endif\n\n#else\nOUT vec4 diffuse;\nOUT vec3 specular;\nOUT float roughness,metallic,fresnel0;\nOUT vec4 emissive;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n#endif\n\n#ifdef COLOR\nIN vec4 color;\n#endif\n\nuniform mat3 normMat;\nuniform mat4 viewMat;\nuniform mat4 projViewMat;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\nOUT vec3 ViewPosition;\n#endif\nOUT vec3 Normal;\n#endif\n\nvoid main(void)\n{\n vec4 v=vec4(position,1.0);\n gl_Position=projViewMat*v;\n\n#ifdef NORMAL\n#ifndef ORTHOGRAPHIC\n ViewPosition=(viewMat*v).xyz;\n#endif\n Normal=normalize(normal*normMat);\n#endif\n\n#ifdef WEBGL2\n MaterialIndex=int(materialIndex);\n#ifdef COLOR\n Color=color;\n#endif\n#else\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[int(abs(materialIndex))-1];\n emissive=m.emissive;\n if(materialIndex >= 0.0)\n diffuse=m.diffuse;\n else {\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n }\n#else\n m=Materials[int(materialIndex)];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=color;\n#if nlights == 0\n emissive += color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[int(materialIndex)].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#ifdef WIDTH\n gl_PointSize=width;\n#endif\n}\n",fragment="\n#ifdef WEBGL2\n#define IN in\nout vec4 outValue;\n#define OUTVALUE outValue\n#else\n#define IN varying\n#define OUTVALUE gl_FragColor\n#endif\n\n#ifdef WEBGL2\nflat in int MaterialIndex;\n\nstruct Material {\n vec4 diffuse,emissive,specular;\n vec4 parameters;\n};\n\nuniform Material Materials[Nmaterials];\n\nvec4 diffuse;\nvec3 specular;\nfloat roughness,metallic,fresnel0;\nvec4 emissive;\n\n#ifdef COLOR\nin vec4 Color;\n#endif\n\n#else\nIN vec4 diffuse;\nIN vec3 specular;\nIN float roughness,metallic,fresnel0;\nIN vec4 emissive;\n#endif\n\n#ifdef NORMAL\n\n#ifndef ORTHOGRAPHIC\nIN vec3 ViewPosition;\n#endif\nIN vec3 Normal;\n\nvec3 normal;\n\nstruct Light {\n vec3 direction;\n vec3 color;\n};\n\nuniform Light Lights[Nlights];\n\n#ifdef USE_IBL\nuniform sampler2D reflBRDFSampler;\nuniform sampler2D diffuseSampler;\nuniform sampler2D reflImgSampler;\n\nconst float pi=acos(-1.0);\nconst float piInv=1.0/pi;\nconst float twopi=2.0*pi;\nconst float twopiInv=1.0/twopi;\n\n// (x,y,z) -> (r,theta,phi);\n// theta -> [0,pi]: colatitude\n// phi -> [-pi,pi]: longitude\nvec3 cart2sphere(vec3 cart)\n{\n float x=cart.x;\n float y=cart.z;\n float z=cart.y;\n\n float r=length(cart);\n float theta=r > 0.0 ? acos(z/r) : 0.0;\n float phi=atan(y,x);\n\n return vec3(r,theta,phi);\n}\n\nvec2 normalizedAngle(vec3 cartVec)\n{\n vec3 sphericalVec=cart2sphere(cartVec);\n sphericalVec.y=sphericalVec.y*piInv;\n sphericalVec.z=0.75-sphericalVec.z*twopiInv;\n return sphericalVec.zy;\n}\n\nvec3 IBLColor(vec3 viewDir)\n{\n vec3 IBLDiffuse=diffuse.rgb*texture(diffuseSampler,normalizedAngle(normal)).rgb;\n vec3 reflectVec=normalize(reflect(-viewDir,normal));\n vec2 reflCoord=normalizedAngle(reflectVec);\n vec3 IBLRefl=textureLod(reflImgSampler,reflCoord,roughness*ROUGHNESS_STEP_COUNT).rgb;\n vec2 IBLbrdf=texture(reflBRDFSampler,vec2(dot(normal,viewDir),roughness)).rg;\n float specularMultiplier=fresnel0*IBLbrdf.x+IBLbrdf.y;\n vec3 dielectric=IBLDiffuse+specularMultiplier*IBLRefl;\n vec3 metal=diffuse.rgb*IBLRefl;\n return mix(dielectric,metal,metallic);\n}\n#else\nfloat Roughness2;\nfloat NDF_TRG(vec3 h)\n{\n float ndoth=max(dot(normal,h),0.0);\n float alpha2=Roughness2*Roughness2;\n float denom=ndoth*ndoth*(alpha2-1.0)+1.0;\n return denom != 0.0 ? alpha2/(denom*denom) : 0.0;\n}\n\nfloat GGX_Geom(vec3 v)\n{\n float ndotv=max(dot(v,normal),0.0);\n float ap=1.0+Roughness2;\n float k=0.125*ap*ap;\n return ndotv/((ndotv*(1.0-k))+k);\n}\n\nfloat Geom(vec3 v, vec3 l)\n{\n return GGX_Geom(v)*GGX_Geom(l);\n}\n\nfloat Fresnel(vec3 h, vec3 v, float fresnel0)\n{\n float a=1.0-max(dot(h,v),0.0);\n float b=a*a;\n return fresnel0+(1.0-fresnel0)*b*b*a;\n}\n\n// physical based shading using UE4 model.\nvec3 BRDF(vec3 viewDirection, vec3 lightDirection)\n{\n vec3 lambertian=diffuse.rgb;\n vec3 h=normalize(lightDirection+viewDirection);\n\n float omegain=max(dot(viewDirection,normal),0.0);\n float omegaln=max(dot(lightDirection,normal),0.0);\n\n float D=NDF_TRG(h);\n float G=Geom(viewDirection,lightDirection);\n float F=Fresnel(h,viewDirection,fresnel0);\n\n float denom=4.0*omegain*omegaln;\n float rawReflectance=denom > 0.0 ? (D*G)/denom : 0.0;\n\n vec3 dielectric=mix(lambertian,rawReflectance*specular,F);\n vec3 metal=rawReflectance*diffuse.rgb;\n\n return mix(dielectric,metal,metallic);\n}\n#endif\n\n#endif\n\nvoid main(void)\n{\n#ifdef WEBGL2\n#ifdef NORMAL\n Material m;\n#ifdef TRANSPARENT\n m=Materials[abs(MaterialIndex)-1];\n emissive=m.emissive;\n if(MaterialIndex >= 0)\n diffuse=m.diffuse;\n else {\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n }\n#else\n m=Materials[MaterialIndex];\n emissive=m.emissive;\n#ifdef COLOR\n diffuse=Color;\n#if nlights == 0\n emissive += Color;\n#endif\n#else\n diffuse=m.diffuse;\n#endif // COLOR\n#endif // TRANSPARENT\n specular=m.specular.rgb;\n vec4 parameters=m.parameters;\n roughness=1.0-parameters[0];\n metallic=parameters[1];\n fresnel0=parameters[2];\n#else\n emissive=Materials[MaterialIndex].emissive;\n#endif // NORMAL\n#endif // WEBGL2\n\n#if defined(NORMAL) && nlights > 0\n normal=normalize(Normal);\n normal=gl_FrontFacing ? normal : -normal;\n#ifdef ORTHOGRAPHIC\n vec3 viewDir=vec3(0.0,0.0,1.0);\n#else\n vec3 viewDir=-normalize(ViewPosition);\n#endif\n\nvec3 color;\n#ifdef USE_IBL\n color=IBLColor(viewDir);\n#else\n Roughness2=roughness*roughness;\n color=emissive.rgb;\n for(int i=0; i < nlights; ++i) {\n Light Li=Lights[i];\n vec3 L=Li.direction;\n float cosTheta=max(dot(normal,L),0.0);\n vec3 radiance=cosTheta*Li.color;\n color += BRDF(viewDir,L)*radiance;\n }\n#endif\n OUTVALUE=vec4(color,diffuse.a);\n#else\n OUTVALUE=emissive;\n#endif\n}\n";!function(t,e){if("object"==typeof exports&&"object"==typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var i=e();for(var n in i)("object"==typeof exports?exports:t)[n]=i[n]}}("undefined"!=typeof self?self:this,(function(){return function(t){var e={};function i(n){if(e[n])return e[n].exports;var r=e[n]={i:n,l:!1,exports:{}};return t[n].call(r.exports,r,r.exports,i),r.l=!0,r.exports}return i.m=t,i.c=e,i.d=function(t,e,n){i.o(t,e)||Object.defineProperty(t,e,{configurable:!1,enumerable:!0,get:n})},i.n=function(t){var e=t&&t.__esModule?function(){return t.default}:function(){return t};return i.d(e,"a",e),e},i.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},i.p="",i(i.s=1)}([function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.setMatrixArrayType=function(t){e.ARRAY_TYPE=t},e.toRadian=function(t){return t*r},e.equals=function(t,e){return Math.abs(t-e)<=n*Math.max(1,Math.abs(t),Math.abs(e))};var n=e.EPSILON=1e-6;e.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,e.RANDOM=Math.random;var r=Math.PI/180},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.mat4=e.mat3=void 0;var n=s(i(2)),r=s(i(3));function s(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}e.mat3=n,e.mat4=r},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},e.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=c*a-o*l,m=-c*s+o*h,f=l*s-a*h,u=i*d+n*m+r*f;if(!u)return null;return u=1/u,t[0]=d*u,t[1]=(-c*n+r*l)*u,t[2]=(o*n-r*a)*u,t[3]=m*u,t[4]=(c*i-r*h)*u,t[5]=(-o*i+r*s)*u,t[6]=f*u,t[7]=(-l*i+n*h)*u,t[8]=(a*i-n*s)*u,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0))},function(t,e,i){"use strict";Object.defineProperty(e,"__esModule",{value:!0}),e.create=function(){var t=new n.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.invert=function(t,e){var i=e[0],n=e[1],r=e[2],s=e[3],a=e[4],o=e[5],h=e[6],l=e[7],c=e[8],d=e[9],m=e[10],f=e[11],u=e[12],p=e[13],v=e[14],x=e[15],g=i*o-n*a,w=i*h-r*a,M=i*l-s*a,b=n*h-r*o,R=n*l-s*o,T=r*l-s*h,y=c*p-d*u,A=c*v-m*u,E=c*x-f*u,I=d*v-m*p,L=d*x-f*p,N=m*x-f*v,O=g*N-w*L+M*I+b*E-R*A+T*y;if(!O)return null;return O=1/O,t[0]=(o*N-h*L+l*I)*O,t[1]=(r*L-n*N-s*I)*O,t[2]=(p*T-v*R+x*b)*O,t[3]=(m*R-d*T-f*b)*O,t[4]=(h*E-a*N-l*A)*O,t[5]=(i*N-r*E+s*A)*O,t[6]=(v*M-u*T-x*w)*O,t[7]=(c*T-m*M+f*w)*O,t[8]=(a*L-o*E+l*y)*O,t[9]=(n*E-i*L-s*y)*O,t[10]=(u*R-p*M+x*g)*O,t[11]=(d*M-c*R-f*g)*O,t[12]=(o*A-a*I-h*y)*O,t[13]=(i*I-n*A+r*y)*O,t[14]=(p*w-u*b-v*g)*O,t[15]=(c*b-d*w+m*g)*O,t},e.multiply=r,e.translate=function(t,e,i){var n=i[0],r=i[1],s=i[2],a=void 0,o=void 0,h=void 0,l=void 0,c=void 0,d=void 0,m=void 0,f=void 0,u=void 0,p=void 0,v=void 0,x=void 0;e===t?(t[12]=e[0]*n+e[4]*r+e[8]*s+e[12],t[13]=e[1]*n+e[5]*r+e[9]*s+e[13],t[14]=e[2]*n+e[6]*r+e[10]*s+e[14],t[15]=e[3]*n+e[7]*r+e[11]*s+e[15]):(a=e[0],o=e[1],h=e[2],l=e[3],c=e[4],d=e[5],m=e[6],f=e[7],u=e[8],p=e[9],v=e[10],x=e[11],t[0]=a,t[1]=o,t[2]=h,t[3]=l,t[4]=c,t[5]=d,t[6]=m,t[7]=f,t[8]=u,t[9]=p,t[10]=v,t[11]=x,t[12]=a*n+c*r+u*s+e[12],t[13]=o*n+d*r+p*s+e[13],t[14]=h*n+m*r+v*s+e[14],t[15]=l*n+f*r+x*s+e[15]);return t},e.rotate=function(t,e,i,r){var s,a,o,h,l,c,d,m,f,u,p,v,x,g,w,M,b,R,T,y,A,E,I,L,N=r[0],O=r[1],_=r[2],P=Math.sqrt(N*N+O*O+_*_);if(Math.abs(P)<n.EPSILON)return null;N*=P=1/P,O*=P,_*=P,s=Math.sin(i),a=Math.cos(i),o=1-a,h=e[0],l=e[1],c=e[2],d=e[3],m=e[4],f=e[5],u=e[6],p=e[7],v=e[8],x=e[9],g=e[10],w=e[11],M=N*N*o+a,b=O*N*o+_*s,R=_*N*o-O*s,T=N*O*o-_*s,y=O*O*o+a,A=_*O*o+N*s,E=N*_*o+O*s,I=O*_*o-N*s,L=_*_*o+a,t[0]=h*M+m*b+v*R,t[1]=l*M+f*b+x*R,t[2]=c*M+u*b+g*R,t[3]=d*M+p*b+w*R,t[4]=h*T+m*y+v*A,t[5]=l*T+f*y+x*A,t[6]=c*T+u*y+g*A,t[7]=d*T+p*y+w*A,t[8]=h*E+m*I+v*L,t[9]=l*E+f*I+x*L,t[10]=c*E+u*I+g*L,t[11]=d*E+p*I+w*L,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);return t},e.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},e.fromRotation=function(t,e,i){var r,s,a,o=i[0],h=i[1],l=i[2],c=Math.sqrt(o*o+h*h+l*l);if(Math.abs(c)<n.EPSILON)return null;return o*=c=1/c,h*=c,l*=c,r=Math.sin(e),s=Math.cos(e),a=1-s,t[0]=o*o*a+s,t[1]=h*o*a+l*r,t[2]=l*o*a-h*r,t[3]=0,t[4]=o*h*a-l*r,t[5]=h*h*a+s,t[6]=l*h*a+o*r,t[7]=0,t[8]=o*l*a+h*r,t[9]=h*l*a-o*r,t[10]=l*l*a+s,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},e.frustum=function(t,e,i,n,r,s,a){var o=1/(i-e),h=1/(r-n),l=1/(s-a);return t[0]=2*s*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*s*h,t[6]=0,t[7]=0,t[8]=(i+e)*o,t[9]=(r+n)*h,t[10]=(a+s)*l,t[11]=-1,t[12]=0,t[13]=0,t[14]=a*s*2*l,t[15]=0,t},e.ortho=function(t,e,i,n,r,s,a){var o=1/(e-i),h=1/(n-r),l=1/(s-a);return t[0]=-2*o,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*h,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*l,t[11]=0,t[12]=(e+i)*o,t[13]=(r+n)*h,t[14]=(a+s)*l,t[15]=1,t};var n=function(t){if(t&&t.__esModule)return t;var e={};if(null!=t)for(var i in t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e.default=t,e}(i(0));function r(t,e,i){var n=e[0],r=e[1],s=e[2],a=e[3],o=e[4],h=e[5],l=e[6],c=e[7],d=e[8],m=e[9],f=e[10],u=e[11],p=e[12],v=e[13],x=e[14],g=e[15],w=i[0],M=i[1],b=i[2],R=i[3];return t[0]=w*n+M*o+b*d+R*p,t[1]=w*r+M*h+b*m+R*v,t[2]=w*s+M*l+b*f+R*x,t[3]=w*a+M*c+b*u+R*g,w=i[4],M=i[5],b=i[6],R=i[7],t[4]=w*n+M*o+b*d+R*p,t[5]=w*r+M*h+b*m+R*v,t[6]=w*s+M*l+b*f+R*x,t[7]=w*a+M*c+b*u+R*g,w=i[8],M=i[9],b=i[10],R=i[11],t[8]=w*n+M*o+b*d+R*p,t[9]=w*r+M*h+b*m+R*v,t[10]=w*s+M*l+b*f+R*x,t[11]=w*a+M*c+b*u+R*g,w=i[12],M=i[13],b=i[14],R=i[15],t[12]=w*n+M*o+b*d+R*p,t[13]=w*r+M*h+b*m+R*v,t[14]=w*s+M*l+b*f+R*x,t[15]=w*a+M*c+b*u+R*g,t}}])})),function(){document.asy={canvasWidth:0,canvasHeight:0,absolute:!1,minBound:[0,0,0],maxBound:[0,0,0],orthographic:!1,angleOfView:0,initialZoom:0,viewportShift:[0,0],viewportMargin:[0,0],background:[],zoomFactor:0,zoomPinchFactor:0,zoomPinchCap:0,zoomStep:0,shiftHoldDistance:0,shiftWaitTime:0,vibrateTime:0,ibl:!1,webgl2:!1,imageURL:"",image:"",Transform:[],Centers:[]};let t,e,i,n,r,s,a,o=document.asy,h=[],l=[],c=[],d=0,m=2;const f=Math.acos(-1),u=f/180,p=Math.ceil(1-Math.log2(Number.EPSILON));let v,x,g,w,M,b,R,T=mat4.create(),y=mat4.create(),A=mat4.create(),E=mat4.create(),I=mat3.create(),L=mat3.create(),N=mat4.create(),O=mat4.create(),_={x:0,y:0,z:0},P={x:0,y:0},S={xmin:0,xmax:0,ymin:0,ymax:0,zmin:0,zmax:0},U=!0,V=0,B=!1,D=null,C=null,F=[],z=[],H=[],X=[],G=null,W=null,j=null;function k(){o.embedded||st(),rt(o.ibl)}class Y{constructor(t,e,i,n,r,s){this.diffuse=t,this.emissive=e,this.specular=i,this.shininess=n,this.metallic=r,this.fresnel0=s}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Materials["+i+"]."+n);t.uniform4fv(n("diffuse"),new Float32Array(this.diffuse)),t.uniform4fv(n("emissive"),new Float32Array(this.emissive)),t.uniform4fv(n("specular"),new Float32Array(this.specular)),t.uniform4f(n("parameters"),this.shininess,this.metallic,this.fresnel0,0)}}let $,q,K,Z,Q,J,tt,et,it;class nt{constructor(t,e){this.direction=t,this.color=e}setUniform(e,i){let n=n=>t.getUniformLocation(e,"Lights["+i+"]."+n);t.uniform3fv(n("direction"),new Float32Array(this.direction)),t.uniform3fv(n("color"),new Float32Array(this.color))}}function rt(e=!1){let i=t.getParameter(t.MAX_VERTEX_UNIFORM_VECTORS);r=Math.floor((i-14)/4),m=Math.min(Math.max(m,c.length),r),pixelOpt=["WIDTH"],materialOpt=["NORMAL"],colorOpt=["NORMAL","COLOR"],transparentOpt=["NORMAL","COLOR","TRANSPARENT"],e&&(materialOpt.push("USE_IBL"),transparentOpt.push("USE_IBL")),xe=Lt(pixelOpt),ge=Lt(materialOpt),we=Lt(colorOpt),Me=Lt(transparentOpt)}function st(){t.deleteProgram(Me),t.deleteProgram(we),t.deleteProgram(ge),t.deleteProgram(xe)}function at(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];i.gl=t,i.nlights=l.length,i.Nmaterials=m,i.maxMaterials=r,i.pixelShader=xe,i.materialShader=ge,i.colorShader=we,i.transparentShader=Me}function ot(t,e){let i;return o.webgl2&&(i=t.getContext("webgl2",{alpha:e}),o.embedded&&!i)?(o.webgl2=!1,o.ibl=!1,ht(!1),null):(i||(o.webgl2=!1,o.ibl=!1,i=t.getContext("webgl",{alpha:e})),i||alert("Could not initialize WebGL"),i)}function ht(s=!0){if(o.ibl&&(o.webgl2=!0),e=o.background[3]<1,o.embedded){let a=window.top.document;if(s&&(n=o.canvas.getContext("2d")),i=o.webgl2?a.offscreen2:a.offscreen,i||(i=a.createElement("canvas"),o.webgl2?a.offscreen2=i:a.offscreen=i),o.webgl2?a.asygl2||(a.asygl2=Array(2)):a.asygl||(a.asygl=Array(2)),asygl=o.webgl2?a.asygl2:a.asygl,asygl[e]&&asygl[e].gl)!function(){let i=o.webgl2?window.top.document.asygl2[e]:window.top.document.asygl[e];t=i.gl,d=i.nlights,m=i.Nmaterials,r=i.maxMaterials,xe=i.pixelShader,ge=i.materialShader,we=i.colorShader,Me=i.transparentShader}(),(l.length!=d||Math.min(c.length,r)>m)&&(rt(),at());else{if(rc=ot(i,e),!rc)return;t=rc,rt(),o.webgl2?a.asygl2[e]={}:a.asygl[e]={},at()}}else t=ot(o.canvas,e),rt();$=t.getExtension("OES_element_index_uint"),q=t.TRIANGLES,K=new mt(t.POINTS),Z=new mt(t.LINES),Q=new mt,J=new mt,tt=new mt,et=new mt}function lt(t,e,i,n=[]){let r=o.webgl2?"300 es":"100",s=Array(...n),a=[["nlights",0==V?l.length:0],["Nmaterials",m]],h=[["int","Nlights",Math.max(l.length,1)]];o.webgl2&&s.push("WEBGL2"),o.ibl&&a.push(["ROUGHNESS_STEP_COUNT",8..toFixed(2)]),o.orthographic&&s.push("ORTHOGRAPHIC"),macros_str=a.map(t=>`#define ${t[0]} ${t[1]}`).join("\n"),define_str=s.map(t=>"#define "+t).join("\n"),const_str=h.map(t=>`const ${t[0]} ${t[1]}=${t[2]};`).join("\n"),ext_str=[].map(t=>`#extension ${t}: enable`).join("\n"),shaderSrc=`#version ${r}\n${ext_str}\n${define_str}\n${const_str}\n${macros_str}\n\n\n#ifdef GL_FRAGMENT_PRECISION_HIGH\nprecision highp float;\n#else\nprecision mediump float;\n#endif\n \n${e}\n `;let c=t.createShader(i);return t.shaderSource(c,shaderSrc),t.compileShader(c),t.getShaderParameter(c,t.COMPILE_STATUS)?c:(alert(t.getShaderInfoLog(c)),null)}function ct(e,i,n,r=t.ARRAY_BUFFER){return e.length>0&&(0==i&&(i=t.createBuffer(),n=!0),t.bindBuffer(r,i),n&&t.bufferData(r,e,t.STATIC_DRAW)),i}function dt(e,i,n=e.indices){if(0==e.indices.length)return;let r=i!=xe;!function(e,i){let n=i==xe;t.useProgram(i),t.enableVertexAttribArray(Tt),n&&t.enableVertexAttribArray(It);let r=!n&&l.length>0;r&&t.enableVertexAttribArray(yt);t.enableVertexAttribArray(At),i.projViewMatUniform=t.getUniformLocation(i,"projViewMat"),i.viewMatUniform=t.getUniformLocation(i,"viewMat"),i.normMatUniform=t.getUniformLocation(i,"normMat"),(i==we||i==Me)&&t.enableVertexAttribArray(Et);if(r)for(let t=0;t<l.length;++t)l[t].setUniform(i,t);for(let t=0;t<e.materials.length;++t)e.materials[t].setUniform(i,t);t.uniformMatrix4fv(i.projViewMatUniform,!1,E),t.uniformMatrix4fv(i.viewMatUniform,!1,A),t.uniformMatrix3fv(i.normMatUniform,!1,I)}(e,i),null!=W&&(t.activeTexture(t.TEXTURE0),t.bindTexture(t.TEXTURE_2D,j),t.uniform1i(t.getUniformLocation(i,"reflBRDFSampler"),0),t.activeTexture(t.TEXTURE1),t.bindTexture(t.TEXTURE_2D,W),t.uniform1i(t.getUniformLocation(i,"diffuseSampler"),1),t.activeTexture(t.TEXTURE2),t.bindTexture(t.TEXTURE_2D,G),t.uniform1i(t.getUniformLocation(i,"reflImgSampler"),2));let s=U||e.partial||!e.rendered;e.verticesBuffer=ct(new Float32Array(e.vertices),e.verticesBuffer,s),t.vertexAttribPointer(Tt,3,t.FLOAT,!1,r?24:16,0),r?l.length>0&&t.vertexAttribPointer(yt,3,t.FLOAT,!1,24,12):t.vertexAttribPointer(It,1,t.FLOAT,!1,16,12),e.materialsBuffer=ct(new Int16Array(e.materialIndices),e.materialsBuffer,s),t.vertexAttribPointer(At,1,t.SHORT,!1,2,0),i!=we&&i!=Me||(e.colorsBuffer=ct(new Float32Array(e.colors),e.colorsBuffer,s),t.vertexAttribPointer(Et,4,t.FLOAT,!0,0,0)),e.indicesBuffer=ct($?new Uint32Array(n):new Uint16Array(n),e.indicesBuffer,s,t.ELEMENT_ARRAY_BUFFER),e.rendered=!0,t.drawElements(r?V?t.LINES:e.type:t.POINTS,n.length,$?t.UNSIGNED_INT:t.UNSIGNED_SHORT,0)}class mt{constructor(t){this.type=t||q,this.verticesBuffer=0,this.materialsBuffer=0,this.colorsBuffer=0,this.indicesBuffer=0,this.rendered=!1,this.partial=!1,this.clear()}clear(){this.vertices=[],this.materialIndices=[],this.colors=[],this.indices=[],this.nvertices=0,this.materials=[],this.materialTable=[]}vertex(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.nvertices++}Vertex(t,e,i=[0,0,0,0]){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e[0]),this.vertices.push(e[1]),this.vertices.push(e[2]),this.materialIndices.push(it),this.colors.push(i[0]),this.colors.push(i[1]),this.colors.push(i[2]),this.colors.push(i[3]),this.nvertices++}vertex0(t,e){return this.vertices.push(t[0]),this.vertices.push(t[1]),this.vertices.push(t[2]),this.vertices.push(e),this.materialIndices.push(it),this.nvertices++}iVertex(t,e,i,n=[0,0,0,0]){let r=6*t;this.vertices[r]=e[0],this.vertices[r+1]=e[1],this.vertices[r+2]=e[2],this.vertices[r+3]=i[0],this.vertices[r+4]=i[1],this.vertices[r+5]=i[2],this.materialIndices[t]=it;let s=4*t;this.colors[s]=n[0],this.colors[s+1]=n[1],this.colors[s+2]=n[2],this.colors[s+3]=n[3],this.indices.push(t)}append(t){ft(this.vertices,t.vertices),ft(this.materialIndices,t.materialIndices),ft(this.colors,t.colors),function(t,e,i){let n=t.length,r=e.length;t.length+=e.length;for(let s=0;s<r;++s)t[n+s]=e[s]+i}(this.indices,t.indices,this.nvertices),this.nvertices+=t.nvertices}}function ft(t,e){let i=t.length,n=e.length;t.length+=n;for(let r=0;r<n;++r)t[i+r]=e[r]}class ut{constructor(){this.data=new mt,this.Onscreen=!1,this.m=[]}offscreen(t){let e=E,i=t[0],n=i[0],r=i[1],s=i[2],a=1/(e[3]*n+e[7]*r+e[11]*s+e[15]);this.x=this.X=(e[0]*n+e[4]*r+e[8]*s+e[12])*a,this.y=this.Y=(e[1]*n+e[5]*r+e[9]*s+e[13])*a;for(let i=1,n=t.length;i<n;++i){let n=t[i],r=n[0],s=n[1],a=n[2],o=1/(e[3]*r+e[7]*s+e[11]*a+e[15]),h=(e[0]*r+e[4]*s+e[8]*a+e[12])*o,l=(e[1]*r+e[5]*s+e[9]*a+e[13])*o;h<this.x?this.x=h:h>this.X&&(this.X=h),l<this.y?this.y=l:l>this.Y&&(this.Y=l)}return(this.X<-1.01||this.x>1.01||this.Y<-1.01||this.y>1.01)&&(this.Onscreen=!1,!0)}T(t){let e=this.c[0],i=this.c[1],n=this.c[2],r=t[0]-e,s=t[1]-i,a=t[2]-n;return[r*I[0]+s*I[3]+a*I[6]+e,r*I[1]+s*I[4]+a*I[7]+i,r*I[2]+s*I[5]+a*I[8]+n]}Tcorners(t,e){return[this.T(t),this.T([t[0],t[1],e[2]]),this.T([t[0],e[1],t[2]]),this.T([t[0],e[1],e[2]]),this.T([e[0],t[1],t[2]]),this.T([e[0],t[1],e[2]]),this.T([e[0],e[1],t[2]]),this.T(e)]}setMaterial(t,e){null==t.materialTable[this.MaterialIndex]&&(t.materials.length>=m&&(t.partial=!0,e()),t.materialTable[this.MaterialIndex]=t.materials.length,t.materials.push(c[this.MaterialIndex])),it=t.materialTable[this.MaterialIndex]}render(){let t;var e,i;if(this.setMaterialIndex(),0==this.CenterIndex?(e=this.Min,i=this.Max,t=[e,[e[0],e[1],i[2]],[e[0],i[1],e[2]],[e[0],i[1],i[2]],[i[0],e[1],e[2]],[i[0],e[1],i[2]],[i[0],i[1],e[2]],i]):(this.c=o.Centers[this.CenterIndex-1],t=this.Tcorners(this.Min,this.Max)),this.offscreen(t))return this.data.clear(),void this.notRendered();let n,r=this.controlpoints;if(0==this.CenterIndex){if(!U&&this.Onscreen)return void this.append();n=r}else{let t=r.length;n=Array(t);for(let e=0;e<t;++e)n[e]=this.T(r[e])}let s=o.orthographic?1:this.Min[2]/o.maxBound[2],a=.75*Math.hypot(s*(S.xmax-S.xmin),s*(S.ymax-S.ymin))/b;this.res2=a*a,this.Epsilon=.1*a,this.data.clear(),this.notRendered(),this.Onscreen=!0,this.process(n)}}function pt(t,e){let i=t[0],n=t.length;for(let r=1;r<n;++r)i=e(i,t[r]);return i}class vt extends ut{constructor(t,e,i,n,r,s){super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,this.color=n;let a=t.length;if(n){let t=n[0][3]+n[1][3]+n[2][3];this.transparent=16==a||4==a?t+n[3][3]<1020:t<765}else this.transparent=c[i].diffuse[3]<1;this.vertex=this.transparent?this.data.Vertex.bind(this.data):this.data.vertex.bind(this.data);let o=this.L2norm2(this.controlpoints),h=Math.sqrt(1e3*Number.EPSILON*o);this.epsilon=o*Number.EPSILON,this.Min=r||this.Bounds(this.controlpoints,Math.min,h),this.Max=s||this.Bounds(this.controlpoints,Math.max,h)}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.color?this.setMaterial(J,Ae):this.setMaterial(Q,ye)}cornerbound(t,e){let i=e(t[0],t[3]);return i=e(i,t[12]),e(i,t[15])}controlbound(t,e){let i=e(t[1],t[2]);return i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[6]),i=e(i,t[7]),i=e(i,t[8]),i=e(i,t[9]),i=e(i,t[10]),i=e(i,t[11]),i=e(i,t[13]),e(i,t[14])}bound(t,e,i,n,r){if(i=e(i,this.cornerbound(t,e)),e(-1,1)*(i-this.controlbound(t,e))>=-n||0==r)return i;--r,n*=2;let s=new Nt(t[0],t[1],t[2],t[3]),a=new Nt(t[4],t[5],t[6],t[7]),o=new Nt(t[8],t[9],t[10],t[11]),h=new Nt(t[12],t[13],t[14],t[15]),l=new Nt(t[0],t[4],t[8],t[12]),c=new Nt(s.m0,a.m0,o.m0,h.m0),d=new Nt(s.m3,a.m3,o.m3,h.m3),m=new Nt(s.m5,a.m5,o.m5,h.m5),f=new Nt(s.m4,a.m4,o.m4,h.m4),u=new Nt(s.m2,a.m2,o.m2,h.m2),p=new Nt(t[3],t[7],t[11],t[15]),v=[t[0],s.m0,s.m3,s.m5,l.m0,c.m0,d.m0,m.m0,l.m3,c.m3,d.m3,m.m3,l.m5,c.m5,d.m5,m.m5];i=this.bound(v,e,i,n,r);let x=[l.m5,c.m5,d.m5,m.m5,l.m4,c.m4,d.m4,m.m4,l.m2,c.m2,d.m2,m.m2,t[12],h.m0,h.m3,h.m5];i=this.bound(x,e,i,n,r);let g=[m.m5,f.m5,u.m5,p.m5,m.m4,f.m4,u.m4,p.m4,m.m2,f.m2,u.m2,p.m2,h.m5,h.m4,h.m2,t[15]];i=this.bound(g,e,i,n,r);let w=[s.m5,s.m4,s.m2,t[3],m.m0,f.m0,u.m0,p.m0,m.m3,f.m3,u.m3,p.m3,m.m5,f.m5,u.m5,p.m5];return this.bound(w,e,i,n,r)}cornerboundtri(t,e){let i=e(t[0],t[6]);return e(i,t[9])}controlboundtri(t,e){let i=e(t[1],t[2]);return i=e(i,t[3]),i=e(i,t[4]),i=e(i,t[5]),i=e(i,t[7]),e(i,t[8])}boundtri(t,e,i,n,r){if(i=e(i,this.cornerboundtri(t,e)),e(-1,1)*(i-this.controlboundtri(t,e))>=-n||0==r)return i;--r,n*=2;let s=new _t(t),a=[s.l003,s.l102,s.l012,s.l201,s.l111,s.l021,s.l300,s.l210,s.l120,s.l030];i=this.boundtri(a,e,i,n,r);let o=[s.l300,s.r102,s.r012,s.r201,s.r111,s.r021,s.r300,s.r210,s.r120,s.r030];i=this.boundtri(o,e,i,n,r);let h=[s.l030,s.u102,s.u012,s.u201,s.u111,s.u021,s.r030,s.u210,s.u120,s.u030];i=this.boundtri(h,e,i,n,r);let l=[s.r030,s.u201,s.r021,s.u102,s.c111,s.r012,s.l030,s.l120,s.l210,s.l300];return this.boundtri(l,e,i,n,r)}Bounds(t,e,i){let n=Array(3),r=t.length,s=Array(r);for(let a=0;a<3;++a){for(let e=0;e<r;++e)s[e]=t[e][a];n[a]=16==r?this.bound(s,e,s[0],i,p):10==r?this.boundtri(s,e,s[0],i,p):pt(s,e)}return[n[0],n[1],n[2]]}L2norm2(t){let e=t[0],i=0,n=t.length;for(let r=1;r<n;++r)i=Math.max(i,St([t[r][0]-e[0],t[r][1]-e[1],t[r][2]-e[2]]));return i}processTriangle(t){let e=t[0],i=t[1],n=t[2],r=Pt(Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-e[0],n[1]-e[1],n[2]-e[2]]));if(!this.offscreen([e,i,n])){let t,s,a;this.color?(t=this.data.Vertex(e,r,this.color[0]),s=this.data.Vertex(i,r,this.color[1]),a=this.data.Vertex(n,r,this.color[2])):(t=this.vertex(e,r),s=this.vertex(i,r),a=this.vertex(n,r)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(t)),this.append()}}processQuad(t){let e=t[0],i=t[1],n=t[2],r=t[3],s=Vt([i[0]-e[0],i[1]-e[1],i[2]-e[2]],[n[0]-i[0],n[1]-i[1],n[2]-i[2]]),a=Vt([n[0]-r[0],n[1]-r[1],n[2]-r[2]],[r[0]-e[0],r[1]-e[1],r[2]-e[2]]),o=Pt([s[0]+a[0],s[1]+a[1],s[2]+a[2]]);if(!this.offscreen([e,i,n,r])){let t,s,a,h;this.color?(t=this.data.Vertex(e,o,this.color[0]),s=this.data.Vertex(i,o,this.color[1]),a=this.data.Vertex(n,o,this.color[2]),h=this.data.Vertex(r,o,this.color[3])):(t=this.vertex(e,o),s=this.vertex(i,o),a=this.vertex(n,o),h=this.vertex(r,o)),0==V?(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(t),this.data.indices.push(a),this.data.indices.push(h)):(this.data.indices.push(t),this.data.indices.push(s),this.data.indices.push(s),this.data.indices.push(a),this.data.indices.push(a),this.data.indices.push(h),this.data.indices.push(h),this.data.indices.push(t)),this.append()}}curve(t,e,i,n,r){new wt([t[e],t[i],t[n],t[r]],0,it,this.Min,this.Max).render()}process(t){if(this.transparent&&1!=V&&(it=this.color?-1-it:1+it),10==t.length)return this.process3(t);if(3==t.length)return this.processTriangle(t);if(4==t.length)return this.processQuad(t);if(1==V)return this.curve(t,0,4,8,12),this.curve(t,12,13,14,15),this.curve(t,15,11,7,3),void this.curve(t,3,2,1,0);let e=t[0],i=t[3],n=t[12],r=t[15],s=this.normal(i,t[2],t[1],e,t[4],t[8],n);St(s)<this.epsilon&&(s=this.normal(i,t[2],t[1],e,t[13],t[14],r),St(s)<this.epsilon&&(s=this.normal(r,t[11],t[7],i,t[4],t[8],n)));let a=this.normal(e,t[4],t[8],n,t[13],t[14],r);St(a)<this.epsilon&&(a=this.normal(e,t[4],t[8],n,t[11],t[7],i),St(a)<this.epsilon&&(a=this.normal(i,t[2],t[1],e,t[13],t[14],r)));let o=this.normal(n,t[13],t[14],r,t[11],t[7],i);St(o)<this.epsilon&&(o=this.normal(n,t[13],t[14],r,t[2],t[1],e),St(o)<this.epsilon&&(o=this.normal(e,t[4],t[8],n,t[11],t[7],i)));let h=this.normal(r,t[11],t[7],i,t[2],t[1],e);if(St(h)<this.epsilon&&(h=this.normal(r,t[11],t[7],i,t[4],t[8],n),St(h)<this.epsilon&&(h=this.normal(n,t[13],t[14],r,t[2],t[1],e))),this.color){let l=this.color[0],c=this.color[1],d=this.color[2],m=this.color[3],f=this.data.Vertex(e,s,l),u=this.data.Vertex(n,a,c),p=this.data.Vertex(r,o,d),v=this.data.Vertex(i,h,m);this.Render(t,f,u,p,v,e,n,r,i,!1,!1,!1,!1,l,c,d,m)}else{let l=this.vertex(e,s),c=this.vertex(n,a),d=this.vertex(r,o),m=this.vertex(i,h);this.Render(t,l,c,d,m,e,n,r,i,!1,!1,!1,!1)}this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):this.color?J.append(this.data):Q.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:this.color?J.rendered=!1:Q.rendered=!1}Render(t,e,i,n,r,s,a,o,h,l,c,d,m,f,u,p,v){let x=this.Distance(t);if(x[0]<this.res2&&x[1]<this.res2)this.offscreen([s,a,o])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n))),this.offscreen([s,o,h])||(0==V?(this.data.indices.push(e),this.data.indices.push(n),this.data.indices.push(r)):(this.data.indices.push(n),this.data.indices.push(r),this.data.indices.push(r),this.data.indices.push(e)));else{if(this.offscreen(t))return;let g=t[0],w=t[3],M=t[12],b=t[15];if(x[0]<this.res2){let x=new Ot(g,t[1],t[2],w),R=new Ot(t[4],t[5],t[6],t[7]),T=new Ot(t[8],t[9],t[10],t[11]),y=new Ot(M,t[13],t[14],b),A=[g,x.m0,x.m3,x.m5,t[4],R.m0,R.m3,R.m5,t[8],T.m0,T.m3,T.m5,M,y.m0,y.m3,y.m5],E=[x.m5,x.m4,x.m2,w,R.m5,R.m4,R.m2,t[7],T.m5,T.m4,T.m2,t[11],y.m5,y.m4,y.m2,b],I=this.normal(A[12],A[13],A[14],A[15],A[11],A[7],A[3]);St(I)<=this.epsilon&&(I=this.normal(A[12],A[13],A[14],A[15],A[2],A[1],A[0]),St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3])));let L=this.normal(E[3],E[2],E[1],E[0],E[4],E[8],E[12]);St(L)<=this.epsilon&&(L=this.normal(E[3],E[2],E[1],E[0],E[13],E[14],E[15]),St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12])));let N=this.Epsilon,O=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(E[12],E[8],E[4],E[0]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[15];let _=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(A[3],A[7],A[11],A[15]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[0];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(u[e]+p[e]),x[e]=.5*(v[e]+f[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,i,g,w,s,a,O,_,l,c,!1,m,f,u,t,x),this.Render(E,w,g,n,r,_,O,o,h,!1,c,d,m,x,t,p,v)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,i,t,f,s,a,O,_,l,c,!1,m),this.Render(E,f,t,n,r,_,O,o,h,!1,c,d,m)}return}if(x[1]<this.res2){let x=new Ot(g,t[4],t[8],M),R=new Ot(t[1],t[5],t[9],t[13]),T=new Ot(t[2],t[6],t[10],t[14]),y=new Ot(w,t[7],t[11],b),A=[g,t[1],t[2],w,x.m0,R.m0,T.m0,y.m0,x.m3,R.m3,T.m3,y.m3,x.m5,R.m5,T.m5,y.m5],E=[x.m5,R.m5,T.m5,y.m5,x.m4,R.m4,T.m4,y.m4,x.m2,R.m2,T.m2,y.m2,M,t[13],t[14],b],I=this.normal(A[0],A[4],A[8],A[12],A[13],A[14],A[15]);St(I)<=this.epsilon&&(I=this.normal(A[0],A[4],A[8],A[12],A[11],A[7],A[3]),St(I)<=this.epsilon&&(I=this.normal(A[3],A[2],A[1],A[0],A[13],A[14],A[15])));let L=this.normal(E[15],E[11],E[7],E[3],E[2],E[1],E[0]);St(L)<=this.epsilon&&(L=this.normal(E[15],E[11],E[7],E[3],E[4],E[8],E[12]),St(L)<=this.epsilon&&(L=this.normal(E[12],E[13],E[14],E[15],E[2],E[1],E[0])));let N=this.Epsilon,O=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(E[0],E[1],E[2],E[3]));O=[O[0]-N*t[0],O[1]-N*t[1],O[2]-N*t[2]]}else O=A[12];let _=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(A[15],A[14],A[13],A[12]));_=[_[0]-N*t[0],_[1]-N*t[1],_[2]-N*t[2]]}else _=E[3];if(f){let t=Array(4),x=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(p[e]+v[e]);let g=this.data.Vertex(O,I,t),w=this.data.Vertex(_,L,x);this.Render(A,e,g,w,r,s,O,_,h,l,!1,d,m,f,t,x,v),this.Render(E,g,i,n,w,O,a,o,_,l,c,d,!1,t,u,p,x)}else{let t=this.vertex(O,I),f=this.vertex(_,L);this.Render(A,e,t,f,r,s,O,_,h,l,!1,d,m),this.Render(E,t,i,n,f,O,a,o,_,l,c,d,!1)}return}let R=new Ot(g,t[1],t[2],w),T=new Ot(t[4],t[5],t[6],t[7]),y=new Ot(t[8],t[9],t[10],t[11]),A=new Ot(M,t[13],t[14],b),E=new Ot(g,t[4],t[8],M),I=new Ot(R.m0,T.m0,y.m0,A.m0),L=new Ot(R.m3,T.m3,y.m3,A.m3),N=new Ot(R.m5,T.m5,y.m5,A.m5),O=new Ot(R.m4,T.m4,y.m4,A.m4),_=new Ot(R.m2,T.m2,y.m2,A.m2),P=new Ot(w,t[7],t[11],b),S=[g,R.m0,R.m3,R.m5,E.m0,I.m0,L.m0,N.m0,E.m3,I.m3,L.m3,N.m3,E.m5,I.m5,L.m5,N.m5],U=[E.m5,I.m5,L.m5,N.m5,E.m4,I.m4,L.m4,N.m4,E.m2,I.m2,L.m2,N.m2,M,A.m0,A.m3,A.m5],V=[N.m5,O.m5,_.m5,P.m5,N.m4,O.m4,_.m4,P.m4,N.m2,O.m2,_.m2,P.m2,A.m5,A.m4,A.m2,b],B=[R.m5,R.m4,R.m2,w,N.m0,O.m0,_.m0,P.m0,N.m3,O.m3,_.m3,P.m3,N.m5,O.m5,_.m5,P.m5],D=S[15],C=this.normal(S[0],S[4],S[8],S[12],S[13],S[14],S[15]);St(C)<this.epsilon&&(C=this.normal(S[0],S[4],S[8],S[12],S[11],S[7],S[3]),St(C)<this.epsilon&&(C=this.normal(S[3],S[2],S[1],S[0],S[13],S[14],S[15])));let F=this.normal(U[12],U[13],U[14],U[15],U[11],U[7],U[3]);St(F)<this.epsilon&&(F=this.normal(U[12],U[13],U[14],U[15],U[2],U[1],U[0]),St(F)<this.epsilon&&(F=this.normal(U[0],U[4],U[8],U[12],U[11],U[7],U[3])));let z=this.normal(V[15],V[11],V[7],V[3],V[2],V[1],V[0]);St(z)<this.epsilon&&(z=this.normal(V[15],V[11],V[7],V[3],V[4],V[8],V[12]),St(z)<this.epsilon&&(z=this.normal(V[12],V[13],V[14],V[15],V[2],V[1],V[0])));let H=this.normal(B[3],B[2],B[1],B[0],B[4],B[8],B[12]);St(H)<this.epsilon&&(H=this.normal(B[3],B[2],B[1],B[0],B[13],B[14],B[15]),St(H)<this.epsilon&&(H=this.normal(B[15],B[11],B[7],B[3],B[4],B[8],B[12])));let X=this.normal(V[3],V[2],V[1],D,V[4],V[8],V[12]),G=this.Epsilon,W=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!l)if(l=zt(g,t[4],t[8],M)<this.res2){let t=Pt(this.differential(U[0],U[1],U[2],U[3]));W=[W[0]-G*t[0],W[1]-G*t[1],W[2]-G*t[2]]}else W=S[12];let j=[.5*(a[0]+o[0]),.5*(a[1]+o[1]),.5*(a[2]+o[2])];if(!c)if(c=zt(M,t[13],t[14],b)<this.res2){let t=Pt(this.differential(V[12],V[8],V[4],V[0]));j=[j[0]-G*t[0],j[1]-G*t[1],j[2]-G*t[2]]}else j=U[15];let k=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])];if(!d)if(d=zt(b,t[11],t[7],w)<this.res2){let t=Pt(this.differential(B[15],B[14],B[13],B[12]));k=[k[0]-G*t[0],k[1]-G*t[1],k[2]-G*t[2]]}else k=V[3];let Y=[.5*(h[0]+s[0]),.5*(h[1]+s[1]),.5*(h[2]+s[2])];if(!m)if(m=zt(g,t[1],t[2],w)<this.res2){let t=Pt(this.differential(S[3],S[7],S[11],S[15]));Y=[Y[0]-G*t[0],Y[1]-G*t[1],Y[2]-G*t[2]]}else Y=B[0];if(f){let t=Array(4),x=Array(4),g=Array(4),w=Array(4),M=Array(4);for(let e=0;e<4;++e)t[e]=.5*(f[e]+u[e]),x[e]=.5*(u[e]+p[e]),g[e]=.5*(p[e]+v[e]),w[e]=.5*(v[e]+f[e]),M[e]=.5*(t[e]+g[e]);let b=this.data.Vertex(W,C,t),R=this.data.Vertex(j,F,x),T=this.data.Vertex(k,z,g),y=this.data.Vertex(Y,H,w),A=this.data.Vertex(D,X,M);this.Render(S,e,b,A,y,s,W,D,Y,l,!1,!1,m,f,t,M,w),this.Render(U,b,i,R,A,W,a,j,D,l,c,!1,!1,t,u,x,M),this.Render(V,A,R,n,T,D,j,o,k,!1,c,d,!1,M,x,p,g),this.Render(B,y,A,T,r,Y,D,k,h,!1,!1,d,m,w,M,g,v)}else{let t=this.vertex(W,C),f=this.vertex(j,F),u=this.vertex(k,z),p=this.vertex(Y,H),v=this.vertex(D,X);this.Render(S,e,t,v,p,s,W,D,Y,l,!1,!1,m),this.Render(U,t,i,f,v,W,a,j,D,l,c,!1,!1),this.Render(V,v,f,n,u,D,j,o,k,!1,c,d,!1),this.Render(B,p,v,u,r,Y,D,k,h,!1,!1,d,m)}}}process3(t){if(1==V)return this.curve(t,0,1,3,6),this.curve(t,6,7,8,9),void this.curve(t,9,5,2,0);let e=t[0],i=t[6],n=t[9],r=this.normal(n,t[5],t[2],e,t[1],t[3],i),s=this.normal(e,t[1],t[3],i,t[7],t[8],n),a=this.normal(i,t[7],t[8],n,t[5],t[2],e);if(this.color){let o=this.color[0],h=this.color[1],l=this.color[2],c=this.data.Vertex(e,r,o),d=this.data.Vertex(i,s,h),m=this.data.Vertex(n,a,l);this.Render3(t,c,d,m,e,i,n,!1,!1,!1,o,h,l)}else{let o=this.vertex(e,r),h=this.vertex(i,s),l=this.vertex(n,a);this.Render3(t,o,h,l,e,i,n,!1,!1,!1)}this.data.indices.length>0&&this.append()}Render3(t,e,i,n,r,s,a,o,h,l,c,d,m){if(this.Distance3(t)<this.res2)this.offscreen([r,s,a])||(0==V?(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(n)):(this.data.indices.push(e),this.data.indices.push(i),this.data.indices.push(i),this.data.indices.push(n),this.data.indices.push(n),this.data.indices.push(e)));else{if(this.offscreen(t))return;let f=t[0],u=t[1],p=t[2],v=t[3],x=t[4],g=t[5],w=t[6],M=t[7],b=t[8],R=t[9],T=[.5*(R[0]+g[0]),.5*(R[1]+g[1]),.5*(R[2]+g[2])],y=[.5*(R[0]+b[0]),.5*(R[1]+b[1]),.5*(R[2]+b[2])],A=[.5*(g[0]+p[0]),.5*(g[1]+p[1]),.5*(g[2]+p[2])],E=[.5*(b[0]+x[0]),.5*(b[1]+x[1]),.5*(b[2]+x[2])],I=[.5*(b[0]+M[0]),.5*(b[1]+M[1]),.5*(b[2]+M[2])],L=[.5*(p[0]+x[0]),.5*(p[1]+x[1]),.5*(p[2]+x[2])],N=[.5*(p[0]+f[0]),.5*(p[1]+f[1]),.5*(p[2]+f[2])],O=[.5*(x[0]+v[0]),.5*(x[1]+v[1]),.5*(x[2]+v[2])],_=[.5*(M[0]+w[0]),.5*(M[1]+w[1]),.5*(M[2]+w[2])],P=[.5*(f[0]+u[0]),.5*(f[1]+u[1]),.5*(f[2]+u[2])],S=[.5*(u[0]+v[0]),.5*(u[1]+v[1]),.5*(u[2]+v[2])],U=[.5*(v[0]+w[0]),.5*(v[1]+w[1]),.5*(v[2]+w[2])],V=[.5*(T[0]+A[0]),.5*(T[1]+A[1]),.5*(T[2]+A[2])],B=[.5*(y[0]+I[0]),.5*(y[1]+I[1]),.5*(y[2]+I[2])],D=[.5*(A[0]+N[0]),.5*(A[1]+N[1]),.5*(A[2]+N[2])],C=[.5*E[0]+.25*(x[0]+u[0]),.5*E[1]+.25*(x[1]+u[1]),.5*E[2]+.25*(x[2]+u[2])],F=[.5*(I[0]+_[0]),.5*(I[1]+_[1]),.5*(I[2]+_[2])],z=[.5*L[0]+.25*(x[0]+M[0]),.5*L[1]+.25*(x[1]+M[1]),.5*L[2]+.25*(x[2]+M[2])],H=[.25*(g[0]+x[0])+.5*O[0],.25*(g[1]+x[1])+.5*O[1],.25*(g[2]+x[2])+.5*O[2]],X=[.5*(P[0]+S[0]),.5*(P[1]+S[1]),.5*(P[2]+S[2])],G=[.5*(S[0]+U[0]),.5*(S[1]+U[1]),.5*(S[2]+U[2])],W=[.5*(z[0]+X[0]),.5*(z[1]+X[1]),.5*(z[2]+X[2])],j=[.5*(z[0]+G[0]),.5*(z[1]+G[1]),.5*(z[2]+G[2])],k=[.5*(X[0]+G[0]),.5*(X[1]+G[1]),.5*(X[2]+G[2])],Y=[.5*(H[0]+F[0]),.5*(H[1]+F[1]),.5*(H[2]+F[2])],$=[.5*(B[0]+H[0]),.5*(B[1]+H[1]),.5*(B[2]+H[2])],q=[.5*(B[0]+F[0]),.5*(B[1]+F[1]),.5*(B[2]+F[2])],K=[.5*(V[0]+C[0]),.5*(V[1]+C[1]),.5*(V[2]+C[2])],Z=[.5*(D[0]+C[0]),.5*(D[1]+C[1]),.5*(D[2]+C[2])],Q=[.5*(V[0]+D[0]),.5*(V[1]+D[1]),.5*(V[2]+D[2])],J=[f,P,N,X,[.5*(L[0]+P[0]),.5*(L[1]+P[1]),.5*(L[2]+P[2])],D,k,W,Z,Q],tt=[k,G,j,U,[.5*(O[0]+_[0]),.5*(O[1]+_[1]),.5*(O[2]+_[2])],Y,w,_,F,q],et=[Q,K,V,$,[.5*(T[0]+E[0]),.5*(T[1]+E[1]),.5*(T[2]+E[2])],T,q,B,y,R],it=[q,$,Y,K,[.25*(A[0]+I[0]+S[0]+x[0]),.25*(A[1]+I[1]+S[1]+x[1]),.25*(A[2]+I[2]+S[2]+x[2])],j,Q,Z,W,k],nt=this.normal(k,j,Y,q,$,K,Q),rt=this.normal(q,$,K,Q,Z,W,k),st=this.normal(Q,Z,W,k,j,Y,q),at=this.Epsilon,ot=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])];if(!o)if(o=zt(w,M,b,R)<this.res2){let t=Pt(this.sumdifferential(it[0],it[2],it[5],it[9],it[1],it[3],it[6]));ot=[ot[0]-at*t[0],ot[1]-at*t[1],ot[2]-at*t[2]]}else ot=q;let ht=[.5*(a[0]+r[0]),.5*(a[1]+r[1]),.5*(a[2]+r[2])];if(!h)if(h=zt(f,p,g,R)<this.res2){let t=Pt(this.sumdifferential(it[6],it[3],it[1],it[0],it[7],it[8],it[9]));ht=[ht[0]-at*t[0],ht[1]-at*t[1],ht[2]-at*t[2]]}else ht=Q;let lt=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])];if(!l)if(l=zt(f,u,v,w)<this.res2){let t=Pt(this.sumdifferential(it[9],it[8],it[7],it[6],it[5],it[2],it[0]));lt=[lt[0]-at*t[0],lt[1]-at*t[1],lt[2]-at*t[2]]}else lt=k;if(c){let t=Array(4),f=Array(4),u=Array(4);for(let e=0;e<4;++e)t[e]=.5*(d[e]+m[e]),f[e]=.5*(m[e]+c[e]),u[e]=.5*(c[e]+d[e]);let p=this.data.Vertex(ot,nt,t),v=this.data.Vertex(ht,rt,f),x=this.data.Vertex(lt,st,u);this.Render3(J,e,x,v,r,lt,ht,!1,h,l,c,u,f),this.Render3(tt,x,i,p,lt,s,ot,o,!1,l,u,d,t),this.Render3(et,v,p,n,ht,ot,a,o,h,!1,f,t,m),this.Render3(it,p,v,x,ot,ht,lt,!1,!1,!1,t,f,u)}else{let t=this.vertex(ot,nt),c=this.vertex(ht,rt),d=this.vertex(lt,st);this.Render3(J,e,d,c,r,lt,ht,!1,h,l),this.Render3(tt,d,i,t,lt,s,ot,o,!1,l),this.Render3(et,c,t,n,ht,ot,a,o,h,!1),this.Render3(it,t,c,d,ot,ht,lt,!1,!1,!1)}}}Distance(t){let e=t[0],i=t[3],n=t[12],r=t[15],s=Ht(e,n,i,r);s=Math.max(zt(e,t[4],t[8],n)),s=Math.max(s,zt(t[1],t[5],t[9],t[13])),s=Math.max(s,zt(i,t[7],t[11],r)),s=Math.max(s,zt(t[2],t[6],t[10],t[14]));let a=Ht(e,i,n,r);return a=Math.max(a,zt(e,t[1],t[2],i)),a=Math.max(a,zt(t[4],t[5],t[6],t[7])),a=Math.max(a,zt(t[8],t[9],t[10],t[11])),a=Math.max(a,zt(n,t[13],t[14],r)),[s,a]}Distance3(t){let e=t[0],i=t[4],n=t[6],r=t[9],s=St([(e[0]+n[0]+r[0])*(1/3)-i[0],(e[1]+n[1]+r[1])*(1/3)-i[1],(e[2]+n[2]+r[2])*(1/3)-i[2]]);return s=Math.max(s,zt(e,t[1],t[3],n)),s=Math.max(s,zt(e,t[2],t[5],r)),Math.max(s,zt(n,t[7],t[8],r))}differential(t,e,i,n){let r=[3*(e[0]-t[0]),3*(e[1]-t[1]),3*(e[2]-t[2])];return St(r)>this.epsilon?r:(r=Ct(t,e,i),St(r)>this.epsilon?r:Ft(t,e,i,n))}sumdifferential(t,e,i,n,r,s,a){let o=this.differential(t,e,i,n),h=this.differential(t,r,s,a);return[o[0]+h[0],o[1]+h[1],o[2]+h[2]]}normal(t,e,i,n,r,s,a){let o=3*(r[0]-n[0]),h=3*(r[1]-n[1]),l=3*(r[2]-n[2]),c=3*(i[0]-n[0]),d=3*(i[1]-n[1]),m=3*(i[2]-n[2]),f=[h*m-l*d,l*c-o*m,o*d-h*c];if(St(f)>this.epsilon)return f;let u=[c,d,m],p=[o,h,l],v=Ct(n,i,e),x=Ct(n,r,s),g=Vt(x,u),w=Vt(p,v);if(f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>this.epsilon)return f;let M=Ft(n,i,e,t),b=Ft(n,r,s,a);g=Vt(p,M),w=Vt(b,u);let R=Vt(x,v);return f=[g[0]+w[0]+R[0],g[1]+w[1]+R[1],g[2]+w[2]+R[2]],St(f)>this.epsilon?f:(g=Vt(b,v),w=Vt(x,M),f=[g[0]+w[0],g[1]+w[1],g[2]+w[2]],St(f)>this.epsilon?f:Vt(b,M))}}function xt(t){return 0<=t&&t<=1}class gt{constructor(t,e,i){const n=1e3*Number.EPSILON,r=n*n;if(Math.abs(t)<=n*Math.abs(e)+r*Math.abs(i))Math.abs(e)>n*Math.abs(i)?(this.roots=1,this.t1=-i/e):0==i?(this.roots=1,this.t1=0):this.roots=0;else{let r=.5*e/t,s=e*r;if(Math.abs(s)<=n*Math.abs(i)){let e=-i/t;e>=0?(this.roots=2,this.t2=Math.sqrt(e),this.t1=-this.t2):this.roots=0}else{let t=-2*i/s;if(t>-1){this.roots=2;let e=r*function(t){return t/(Math.sqrt(1+t)+1)}(t),i=-e-2*r;i<=e?(this.t1=i,this.t2=e):(this.t1=e,this.t2=i)}else-1==t?(this.roots=1,this.t1=this.t2=-r):this.roots=0}}}}class wt extends ut{constructor(t,e,i,n,r){if(super(),this.controlpoints=t,this.CenterIndex=e,this.MaterialIndex=i,n&&r)this.Min=n,this.Max=r;else{let t=this.Bounds(this.controlpoints);this.Min=t[0],this.Max=t[1]}}Bounds(t){let e=Array(3),i=Array(3),n=t.length,r=Array(n);for(let h=0;h<3;++h){for(let e=0;e<n;++e)r[e]=t[e][h];let l,c;if(l=c=r[0],4==n){l=Math.min(l,r[3]),c=Math.max(c,r[3]);let t=(s=r[0],a=r[1],o=r[2],[r[3]-s+3*(a-o),2*(s+o)-4*a,a-s]),e=new gt(t[0],t[1],t[2]);if(0!=e.roots&&xt(e.t1)){let t=Bt(r[0],r[1],r[2],r[3],e.t1);l=Math.min(l,t),c=Math.max(c,t)}if(2==e.roots&&xt(e.t2)){let t=Bt(r[0],r[1],r[2],r[3],e.t2);l=Math.min(l,t),c=Math.max(c,t)}}else{let t=r[1];l=Math.min(l,t),c=Math.max(c,t)}e[h]=l,i[h]=c}var s,a,o;return[[e[0],e[1],e[2]],[i[0],i[1],i[2]]]}setMaterialIndex(){this.setMaterial(Z,Te)}processLine(t){let e=t[0],i=t[1];if(!this.offscreen([e,i])){let t=[0,0,1];this.data.indices.push(this.data.vertex(e,t)),this.data.indices.push(this.data.vertex(i,t)),this.append()}}process(t){if(2==t.length)return this.processLine(t);let e=t[0],i=t[1],n=t[2],r=t[3],s=this.normal(Dt(e,i),Ct(e,i,n)),a=this.normal(Dt(n,r),Ct(r,n,i)),o=this.data.vertex(e,s),h=this.data.vertex(r,a);this.Render(t,o,h),this.data.indices.length>0&&this.append()}append(){Z.append(this.data)}notRendered(){Z.rendered=!1}Render(t,e,i){let n=t[0],r=t[1],s=t[2],a=t[3];if(zt(n,r,s,a)<this.res2)this.offscreen([n,a])||(this.data.indices.push(e),this.data.indices.push(i));else{if(this.offscreen(t))return;let o=[.5*(n[0]+r[0]),.5*(n[1]+r[1]),.5*(n[2]+r[2])],h=[.5*(r[0]+s[0]),.5*(r[1]+s[1]),.5*(r[2]+s[2])],l=[.5*(s[0]+a[0]),.5*(s[1]+a[1]),.5*(s[2]+a[2])],c=[.5*(o[0]+h[0]),.5*(o[1]+h[1]),.5*(o[2]+h[2])],d=[.5*(h[0]+l[0]),.5*(h[1]+l[1]),.5*(h[2]+l[2])],m=[.5*(c[0]+d[0]),.5*(c[1]+d[1]),.5*(c[2]+d[2])],f=[n,o,c,m],u=[m,d,l,a],p=this.normal(function(t,e,i,n){return[i[0]+n[0]-t[0]-e[0],i[1]+n[1]-t[1]-e[1],i[2]+n[2]-t[2]-e[2]]}(n,r,s,a),function(t,e,i,n){return[3*t[0]-5*e[0]+i[0]+n[0],3*t[1]-5*e[1]+i[1]+n[1],3*t[2]-5*e[2]+i[2]+n[2]]}(n,r,s,a)),v=this.data.vertex(m,p);this.Render(f,e,v),this.Render(u,v,i)}}normal(t,e){let i=Ut(t,t),n=Ut(t,e);return[i*e[0]-n*t[0],i*e[1]-n*t[1],i*e[2]-n*t[2]]}}class Mt extends ut{constructor(t,e,i){super(),this.controlpoint=t,this.width=e,this.CenterIndex=0,this.MaterialIndex=i,this.Min=t,this.Max=t}setMaterialIndex(){this.setMaterial(K,Re)}process(t){this.data.indices.push(this.data.vertex0(this.controlpoint,this.width)),this.append()}append(){K.append(this.data)}notRendered(){K.rendered=!1}}class bt extends ut{constructor(t,e){super(),this.CenterIndex=t,this.MaterialIndex=e,this.Min=this.Bounds(F,Math.min),this.Max=this.Bounds(F,Math.max),this.controlpoints=F,this.Normals=z,this.Colors=H,this.Indices=X,this.transparent=c[this.MaterialIndex].diffuse[3]<1}Bounds(t,e){let i=Array(3),n=t.length,r=Array(n);for(let s=0;s<3;++s){for(let e=0;e<n;++e)r[e]=t[e][s];i[s]=pt(r,e)}return[i[0],i[1],i[2]]}setMaterialIndex(){this.transparent?this.setMaterial(tt,Ie):this.setMaterial(et,Ee)}process(t){this.data.vertices=new Array(6*t.length),it=this.Colors.length>0?-1-it:1+it;for(let e=0,i=this.Indices.length;e<i;++e){let i=this.Indices[e],n=i[0],r=t[n[0]],s=t[n[1]],a=t[n[2]];if(!this.offscreen([r,s,a])){let t=i.length>1?i[1]:n;if(t&&0!=t.length||(t=n),this.Colors.length>0){let e=i.length>2?i[2]:n;e&&0!=e.length||(e=n);let o=this.Colors[e[0]],h=this.Colors[e[1]],l=this.Colors[e[2]];this.transparent|=o[3]+h[3]+l[3]<765,0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l)):(this.data.iVertex(n[0],r,this.Normals[t[0]],o),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[1],s,this.Normals[t[1]],h),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[2],a,this.Normals[t[2]],l),this.data.iVertex(n[0],r,this.Normals[t[0]],o))}else 0==V?(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]])):(this.data.iVertex(n[0],r,this.Normals[t[0]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[1],s,this.Normals[t[1]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[2],a,this.Normals[t[2]]),this.data.iVertex(n[0],r,this.Normals[t[0]]))}}this.data.nvertices=t.length,this.data.indices.length>0&&this.append()}append(){this.transparent?tt.append(this.data):et.append(this.data)}notRendered(){this.transparent?tt.rendered=!1:et.rendered=!1}}function Rt(){M=-Math.tan(.5*o.angleOfView)*o.maxBound[2],_.x=_.y=0,_.z=.5*(o.minBound[2]+o.maxBound[2]),x=v=o.zoom0,S.zmin=o.minBound[2],S.zmax=o.maxBound[2],P.x=P.y=0,Oe(),U=!0,Ne()}let Tt=0,yt=1,At=2,Et=3,It=4;function Lt(e=[]){let i=lt(t,vertex,t.VERTEX_SHADER,e),n=lt(t,fragment,t.FRAGMENT_SHADER,e),r=t.createProgram();return t.attachShader(r,i),t.attachShader(r,n),t.bindAttribLocation(r,Tt,"position"),t.bindAttribLocation(r,yt,"normal"),t.bindAttribLocation(r,At,"materialIndex"),t.bindAttribLocation(r,Et,"color"),t.bindAttribLocation(r,It,"width"),t.linkProgram(r),t.getProgramParameter(r,t.LINK_STATUS)||alert("Could not initialize shaders"),r}class Nt{constructor(t,e,i,n){this.m0=.5*(t+e);let r=.5*(e+i);this.m2=.5*(i+n),this.m3=.5*(this.m0+r),this.m4=.5*(r+this.m2),this.m5=.5*(this.m3+this.m4)}}class Ot{constructor(t,e,i,n){this.m0=[.5*(t[0]+e[0]),.5*(t[1]+e[1]),.5*(t[2]+e[2])];let r=.5*(e[0]+i[0]),s=.5*(e[1]+i[1]),a=.5*(e[2]+i[2]);this.m2=[.5*(i[0]+n[0]),.5*(i[1]+n[1]),.5*(i[2]+n[2])],this.m3=[.5*(this.m0[0]+r),.5*(this.m0[1]+s),.5*(this.m0[2]+a)],this.m4=[.5*(r+this.m2[0]),.5*(s+this.m2[1]),.5*(a+this.m2[2])],this.m5=[.5*(this.m3[0]+this.m4[0]),.5*(this.m3[1]+this.m4[1]),.5*(this.m3[2]+this.m4[2])]}}class _t{constructor(t){this.l003=t[0];let e=t[1],i=t[2],n=t[3],r=t[4],s=t[5];this.r300=t[6];let a=t[7],o=t[8];this.u030=t[9],this.u021=.5*(this.u030+s),this.u120=.5*(this.u030+o);let h=.5*(s+i),l=.5*(o+r),c=.5*(o+a),d=.5*(i+r);this.l012=.5*(i+this.l003);let m=.5*(r+n);this.r210=.5*(a+this.r300),this.l102=.5*(this.l003+e);let f=.5*(e+n);this.r201=.5*(n+this.r300),this.u012=.5*(this.u021+h),this.u210=.5*(this.u120+c),this.l021=.5*(h+this.l012);let u=.5*l+.25*(r+e);this.r120=.5*(c+this.r210);let p=.5*d+.25*(r+a),v=.25*(s+r)+.5*m;this.l201=.5*(this.l102+f),this.r102=.5*(f+this.r201),this.l210=.5*(p+this.l201),this.r012=.5*(p+this.r102),this.l300=.5*(this.l201+this.r102),this.r021=.5*(v+this.r120),this.u201=.5*(this.u210+v),this.r030=.5*(this.u210+this.r120),this.u102=.5*(this.u012+u),this.l120=.5*(this.l021+u),this.l030=.5*(this.u012+this.l021),this.l111=.5*(d+this.l102),this.r111=.5*(m+this.r210),this.u111=.5*(this.u021+l),this.c111=.25*(h+c+f+r)}}function Pt(t){let e=1/(Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2])||1);return[t[0]*e,t[1]*e,t[2]*e]}function St(t){return t[0]*t[0]+t[1]*t[1]+t[2]*t[2]}function Ut(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function Vt(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function Bt(t,e,i,n,r){let s=1-r,a=s*s;return a*s*t+r*(3*(a*e+r*s*i)+r*r*n)}function Dt(t,e){return[e[0]-t[0],e[1]-t[1],e[2]-t[2]]}function Ct(t,e,i){return[3*(t[0]+i[0])-6*e[0],3*(t[1]+i[1])-6*e[1],3*(t[2]+i[2])-6*e[2]]}function Ft(t,e,i,n){return[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])]}function zt(t,e,i,n){let r=[1/3*(n[0]-t[0]),1/3*(n[1]-t[1]),1/3*(n[2]-t[2])];return Math.max(St([e[0]-r[0]-t[0],e[1]-r[1]-t[1],e[2]-r[2]-t[2]]),St([n[0]-r[0]-i[0],n[1]-r[1]-i[1],n[2]-r[2]-i[2]]))}function Ht(t,e,i,n){let r=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],s=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return Math.max(St(Vt(r,Pt(s))),St(Vt(s,Pt(r))))/9}function Xt(t){return[Math.min(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.min(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.min(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Gt(t){return[Math.max(t[0][0],t[1][0],t[2][0],t[3][0],t[4][0],t[5][0],t[6][0],t[7][0]),Math.max(t[0][1],t[1][1],t[2][1],t[3][1],t[4][1],t[5][1],t[6][1],t[7][1]),Math.max(t[0][2],t[1][2],t[2][2],t[3][2],t[4][2],t[5][2],t[6][2],t[7][2])]}function Wt(t){ae||oe(),B=!0,D=t.clientX,C=t.clientY}let jt,kt,Yt=!1;function $t(t){return Math.hypot(t[0].pageX-t[1].pageX,t[0].pageY-t[1].pageY)}function qt(t){t.preventDefault(),ae||oe();let e=t.targetTouches;ue=pe=Yt=!1,fe||(1!=e.length||B||(kt=(new Date).getTime(),touchId=e[0].identifier,D=e[0].pageX,C=e[0].pageY),2!=e.length||B||(touchId=e[0].identifier,jt=$t(e),Yt=!0))}function Kt(t){B=!1}function Zt(t,e,i,n,r){if(t==i&&e==n)return;let[s,a]=function(t,e){let i=ne(t),n=ne(e),r=Ut(i,n);return[r>1?0:r<-1?f:Math.acos(r),Pt(Vt(i,n))]}([t,-e],[i,-n]);mat4.fromRotation(O,2*r*R*s/v,a),mat4.multiply(T,O,T)}function Qt(t,e,i,n){let r=1/v;P.x+=(i-t)*r*s,P.y-=(n-e)*r*a}function Jt(t,e,i,n){o.orthographic?Qt(t,e,i,n):(_.x+=(i-t)*(S.xmax-S.xmin),_.y-=(n-e)*(S.ymax-S.ymin))}function te(){var t,e;t=A,e=T,mat4.fromTranslation(O,[_.x,_.y,_.z]),mat4.invert(N,O),mat4.multiply(t,e,N),mat4.multiply(t,O,t),mat4.translate(A,A,[_.x,_.y,0]),mat3.fromMat4(L,A),mat3.invert(I,L),mat4.multiply(E,y,A)}function ee(){let t=Math.sqrt(Number.MAX_VALUE),e=1/t;v<=e&&(v=e),v>=t&&(v=t),(1.5*v<x||v>1.5*x)&&(U=!0,x=v)}function ie(t){let e=o.zoomStep*a*t;const i=Math.log(.1*Number.MAX_VALUE)/Math.log(o.zoomFactor);Math.abs(e)<i&&(v*=o.zoomFactor**e,ee())}function ne(t){let e=t[0],i=t[1],n=Math.hypot(e,i);return n>1&&(denom=1/n,e*=denom,i*=denom),[e,i,Math.sqrt(Math.max(1-i*i-e*e,0))]}function re(t,e,i,n){ie(e-n)}function se(t,e,i,n=1){let r;switch(i){case 1:r=Zt;break;case 2:r=Qt;break;case 3:r=re;break;case 4:r=Jt;break;default:r=(t,e,i,n)=>{}}r((D-s)/s,(C-a)/a,(t-s)/s,(e-a)/a,n),D=t,C=e,Oe(),Ne()}let ae=0;function oe(){ae=1,o.canvas.addEventListener("wheel",de,!1)}function he(){let t,e,i;[t,e,i]=function(){let t=Array(3),e=Array(3),i=Array(3),n=_.x,r=_.y,s=.5*(S.zmin+S.zmax);for(let a=0;a<3;++a){let h=0,l=0,c=0,d=4*a;for(let t=0;t<4;++t){let e=4*t,i=T[e],a=T[e+1],m=T[e+2],f=T[e+3],u=o.Transform[d+t];h+=u*(f-n*i-r*a-s*m),c+=u*a,l+=u*(f-n*i-r*a)}t[a]=h,e[a]=c,i[a]=l}return[t,e,i]}();let n=o.orthographic?" orthographic(":" perspective(",r="".padStart(n.length),s="currentprojection=\n"+n+"camera=("+t+"),\n"+r+"up=("+e+"),\n"+r+"target=("+i+"),\n"+r+"zoom="+v*o.initialZoom/o.zoom0;return o.orthographic||(s+=",\n"+r+"angle="+2*Math.atan(Math.tan(.5*o.angleOfView)/v)/u),0==g&&0==w||(s+=",\n"+r+"viewportshift=("+g+","+w+")"),o.orthographic||(s+=",\n"+r+"autoadjust=false"),s+=");\n",window.parent.asyProjection=!0,s}function le(t){if(ae||oe(),o.embedded&&ae&&27==t.keyCode)return ae=0,void o.canvas.removeEventListener("wheel",de,!1);let e=[];switch(t.key){case"x":e=[1,0,0];break;case"y":e=[0,1,0];break;case"z":e=[0,0,1];break;case"h":mat4.identity(T),Rt(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(""),window.parent.asyProjection=!1;break;case"m":++V,3==V&&(V=0),2!=V&&(o.embedded||st(),rt(o.ibl)),U=!0,Ne();break;case"+":case"=":case">":v*=o.zoomFactor,ce();break;case"-":case"_":case"<":v/=o.zoomFactor,ce();break;case"c":window.top.asyWebApplication||prompt("Ctrl+c Enter to copy currentprojection to clipboard; then append to asy file:",he())}e.length>0&&(mat4.rotate(T,T,.1,e),te(),Ne())}function ce(){ee(),Oe(),Ne()}function de(t){t.preventDefault(),t.deltaY<0?v*=o.zoomFactor:v/=o.zoomFactor,ce()}function me(t){if(!B)return;let e,i=t.clientX,n=t.clientY;e=t.getModifierState("Control")?2:t.getModifierState("Shift")?3:t.getModifierState("Alt")?4:1,se(i,n,e)}let fe=!1,ue=!1,pe=!1;function ve(t){if(t.preventDefault(),fe)return;let e=t.targetTouches;if(!Yt&&1==e.length&&touchId==e[0].identifier){let t=e[0].pageX,i=e[0].pageY,n=t-D,r=i-C,s=n*n+r*r<=o.shiftHoldDistance*o.shiftHoldDistance;if(s&&!ue&&!pe&&(new Date).getTime()-kt>o.shiftWaitTime&&(navigator.vibrate&&window.navigator.vibrate(o.vibrateTime),ue=!0),ue)se(t,i,2);else if(!s){pe=!0,se(e[0].pageX,e[0].pageY,1,.5)}}if(Yt&&!ue&&2==e.length&&touchId==e[0].identifier){let t=$t(e),i=t-jt;fe=!0,i*=o.zoomPinchFactor,i>o.zoomPinchCap&&(i=o.zoomPinchCap),i<-o.zoomPinchCap&&(i=-o.zoomPinchCap),ie(i/b),jt=t,ue=pe=fe=!1,Oe(),Ne()}}let xe,ge,we,Me,be=[];function Re(){dt(K,xe),K.clear()}function Te(){dt(Z,ge),Z.clear()}function ye(){dt(Q,ge),Q.clear()}function Ae(){dt(J,we),J.clear()}function Ee(){dt(et,Me),et.rendered=!1,et.clear()}function Ie(){let e=tt.indices;if(V>0)return dt(tt,Me,e),void tt.clear();if(e.length>0){!function(t){let e=A[2],i=A[6],n=A[10];be.length=t.length;for(let r=0;r<t.length;++r){let s=6*r;be[r]=e*t[s]+i*t[s+1]+n*t[s+2]}}(tt.vertices);let i=e.length/3,n=Array(i).fill().map((t,e)=>e);n.sort((function(t,i){let n=3*t;Ia=e[n],Ib=e[n+1],Ic=e[n+2];let r=3*i;return IA=e[r],IB=e[r+1],IC=e[r+2],be[Ia]+be[Ib]+be[Ic]<be[IA]+be[IB]+be[IC]?-1:1}));let r=Array(e.length);for(let t=0;t<i;++t){let i=3*n[t];r[3*t]=e[i],r[3*t+1]=e[i+1],r[3*t+2]=e[i+2]}t.depthMask(!1),dt(tt,Me,r),tt.rendered=!1,t.depthMask(!0)}tt.clear()}function Le(){Re(),Te(),ye(),Ae(),Ee(),Ie(),requestAnimationFrame(Le)}function Ne(){o.embedded&&(i.width=o.canvasWidth,i.height=o.canvasHeight,_e()),t.clearColor(o.background[0],o.background[1],o.background[2],o.background[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT);for(const t of h)t.render();Le(),o.embedded&&(n.clearRect(0,0,o.canvasWidth,o.canvasHeight),n.drawImage(i,0,0)),0==V&&(U=!1)}function Oe(){!function(t,e,i,n){let r=t/e;g=(i/t+o.viewportShift[0])*v,w=(n/e+o.viewportShift[1])*v;let s=1/v;if(o.orthographic){let t=o.maxBound[0]-o.minBound[0],e=o.maxBound[1]-o.minBound[1];if(t<e*r){let t=.5*e*r*s,i=2*t*g,n=e*s*w;S.xmin=-t-i,S.xmax=t-i,S.ymin=o.minBound[1]*s-n,S.ymax=o.maxBound[1]*s-n}else{let e=.5*t*s/r,i=t*s*g,n=2*e*w;S.xmin=o.minBound[0]*s-i,S.xmax=o.maxBound[0]*s-i,S.ymin=-e-n,S.ymax=e-n}}else{let t=M*s,e=t*r,i=2*e*g,n=2*t*w;S.xmin=-e-i,S.xmax=e-i,S.ymin=-t-n,S.ymax=t-n}}(o.canvasWidth,o.canvasHeight,P.x,P.y),(o.orthographic?mat4.ortho:mat4.frustum)(y,S.xmin,S.xmax,S.ymin,S.ymax,-S.zmax,-S.zmin),te(),window.top.asyWebApplication&&window.top.asyWebApplication.setProjection(he())}function _e(){t.viewportWidth=o.canvasWidth,t.viewportHeight=o.canvasHeight,t.viewport(.5*(o.canvas.width-o.canvasWidth),.5*(o.canvas.height-o.canvasHeight),o.canvasWidth,o.canvasHeight),t.scissor(0,0,o.canvas.width,o.canvas.height)}function Pe(t,e){t>void 0&&(t=void 0),e>void 0&&(e=void 0),P.x*=t/o.canvasWidth,P.y*=e/o.canvasHeight,o.canvasWidth=t,o.canvasHeight=e,o.embedded&&(o.canvas.width=i.width=o.canvasWidth,o.canvas.height=i.height=o.canvasHeight),b=Math.hypot(o.canvasWidth,o.canvasHeight),s=.5*o.canvas.width,a=.5*o.canvas.height,R=1+8*Math.hypot(o.viewportMargin[0],o.viewportMargin[1])/b,_e(),Oe(),U=!0}function Se(){if(o.zoom0=o.initialZoom,window.top.asyWebApplication&&""==window.top.asyWebApplication.getProjection()&&(window.parent.asyProjection=!1),o.absolute&&!o.embedded)o.canvasWidth=o.canvasWith0*window.devicePixelRatio,o.canvasHeight=o.canvasHeight0*window.devicePixelRatio;else{let t=o.canvasWith0/o.canvasHeight0;o.canvasWidth=Math.max(window.innerWidth-10,10),o.canvasHeight=Math.max(window.innerHeight-10,10),!o.orthographic&&!window.parent.asyProjection&&o.canvasWidth<o.canvasHeight*t&&(o.zoom0*=o.canvasWidth/(o.canvasHeight*t))}o.canvas.width=o.canvasWidth,o.canvas.height=o.canvasHeight;window.innerWidth,window.innerHeight;let t=1/o.zoom0;o.viewportShift[0]*=t,o.viewportShift[1]*=t,Pe(o.canvasWidth,o.canvasHeight),Rt()}class Ue{constructor(t,e){if(this.center=t,e){let t=e[0],i=e[1];this.ct=Math.cos(t),this.st=Math.sin(t),this.cp=Math.cos(i),this.sp=Math.sin(i)}}T0(t){return[t[0]+this.center[0],t[1]+this.center[1],t[2]+this.center[2]]}T(t){let e=t[0],i=t[1],n=t[2],r=e*this.ct+n*this.st;return[r*this.cp-i*this.sp+this.center[0],r*this.sp+i*this.cp+this.center[1],-e*this.st+n*this.ct+this.center[2]]}}function Ve(t,e,i){let n=[t(e),t([e[0],e[1],i[2]]),t([e[0],i[1],e[2]]),t([e[0],i[1],i[2]]),t([i[0],e[1],e[2]]),t([i[0],e[1],i[2]]),t([i[0],i[1],e[2]]),t(i)];return[Xt(n),Gt(n)]}let Be=4/3*(Math.sqrt(2)-1);async function De(t){return(await fetch(t)).arrayBuffer()}function Ce(t){return t.getBytes().filter((t,e)=>e%4!=3)}function Fe(e,i,n=t.RGB16F){let r=e.width(),s=e.height(),a=t.createTexture();return t.activeTexture(t.TEXTURE0+i),t.bindTexture(t.TEXTURE_2D,a),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,n,r,s,0,t.RGB,t.FLOAT,Ce(e)),a}window.webGLStart=function(){o.canvas=document.getElementById("Asymptote"),o.embedded=window.top.document!=document,ht(),t.enable(t.BLEND),t.blendFunc(t.SRC_ALPHA,t.ONE_MINUS_SRC_ALPHA),t.enable(t.DEPTH_TEST),t.enable(t.SCISSOR_TEST),o.canvas.onmousedown=Wt,document.onmouseup=Kt,document.onmousemove=me,o.canvas.onkeydown=le,o.embedded||oe(),o.canvas.addEventListener("touchstart",qt,!1),o.canvas.addEventListener("touchend",Kt,!1),o.canvas.addEventListener("touchcancel",Kt,!1),o.canvas.addEventListener("touchleave",Kt,!1),o.canvas.addEventListener("touchmove",ve,!1),document.addEventListener("keydown",le,!1),o.canvasWith0=o.canvasWidth,o.canvasHeight0=o.canvasHeight,mat4.identity(T),0!=window.innerWidth&&0!=window.innerHeight&&Se(),window.addEventListener("resize",Se,!1),o.ibl&&async function(){let e=o.imageURL+o.image+"/";function i(t){return new Promise(e=>setTimeout(e,t))}for(;!Module.EXRLoader;)await i(0);promises=[De(o.imageURL+"refl.exr").then(t=>{let e=new Module.EXRLoader(t);j=Fe(e,0)}),De(e+"diffuse.exr").then(t=>{let e=new Module.EXRLoader(t);W=Fe(e,1)})],refl_promise=[],refl_promise.push(De(e+"refl0.exr"));for(let t=1;t<=8;++t)refl_promise.push(De(e+"refl"+t+"w.exr"));finished_promise=Promise.all(refl_promise).then(e=>{let i=t.createTexture();t.activeTexture(t.TEXTURE0+2),t.pixelStorei(t.UNPACK_ALIGNMENT,1),t.bindTexture(t.TEXTURE_2D,i),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAX_LEVEL,e.length-1),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR_MIPMAP_LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MIN_LOD,0),t.texParameterf(t.TEXTURE_2D,t.TEXTURE_MAX_LOD,8);for(let i=0;i<e.length;++i){let n=new Module.EXRLoader(e[i]);t.texImage2D(t.TEXTURE_2D,i,t.RGB16F,n.width(),n.height(),0,t.RGB,t.FLOAT,Ce(n))}G=i}),promises.push(finished_promise),await Promise.all(promises)}().then(k).then(Rt)},window.light=function(t,e){l.push(new nt(t,e))},window.material=function(t,e,i,n,r,s){c.push(new Y(t,e,i,n,r,s))},window.patch=function(t,e,i,n){h.push(new vt(t,e,i,n))},window.curve=function(t,e,i){h.push(new wt(t,e,i))},window.pixel=function(t,e,i){h.push(new Mt(t,e,i))},window.triangles=function(t,e){h.push(new bt(t,e)),window.Positions=F=[],window.Normals=z=[],window.Colors=H=[],window.Indices=X=[]},window.sphere=function(t,e,i,n,r){let s,a,o,l,c,d,m=.524670512339254,f=.595936986722291,u=.954967051233925,p=.0820155480083437,v=.996685028842544,x=.0549670512339254,g=.998880711874577,w=.0405017186586849,M=[[[1,0,0],[1,0,m],[f,0,u],[p,0,v],[1,Be,0],[1,Be,m],[f,Be*f,u],[p,Be*p,v],[Be,1,0],[Be,1,m],[Be*f,f,u],[Be*p,p,v],[0,1,0],[0,1,m],[0,f,u],[0,p,v]],[[p,0,v],[p,Be*p,v],[x,0,g],[Be*p,p,v],[w,w,1],[.05*Be,0,1],[0,p,v],[0,x,g],[0,.05*Be,1],[0,0,1]]],b=new Ue(t,r);function R(t){let e=Array(t.length);for(let i=0;i<t.length;++i){let n=t[i];e[i]=c([s*n[0],a*n[1],o*n[2]])}return e}r?(l=1,d=0,c=b.T.bind(b)):(l=-1,d=-e,c=b.T0.bind(b));let T=Ve(c,[-e,-e,d],[e,e,e]),y=T[0],A=T[1];for(let t=-1;t<=1;t+=2){s=t*e;for(let t=-1;t<=1;t+=2){a=t*e;for(let t=l;t<=1;t+=2){o=t*e;for(let t=0;t<2;++t)h.push(new vt(R(M[t]),i,n,null,y,A))}}}},window.disk=function(t,e,i,n,r){let s=1-2*Be/3,a=[[1,0,0],[1,-Be,0],[Be,-1,0],[0,-1,0],[1,Be,0],[s,0,0],[0,-s,0],[-Be,-1,0],[Be,1,0],[0,s,0],[-s,0,0],[-1,-Be,0],[0,1,0],[-Be,1,0],[-1,Be,0],[-1,0,0]],o=new Ue(t,r),l=Ve(o.T.bind(o),[-e,-e,0],[e,e,0]);h.push(new vt(function(t){let i=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];i[n]=o.T([e*r[0],e*r[1],0])}return i}(a),i,n,null,l[0],l[1]))},window.cylinder=function(t,e,i,n,r,s,a){let o,l,c=[[1,0,0],[1,0,1/3],[1,0,2/3],[1,0,1],[1,Be,0],[1,Be,1/3],[1,Be,2/3],[1,Be,1],[Be,1,0],[Be,1,1/3],[Be,1,2/3],[Be,1,1],[0,1,0],[0,1,1/3],[0,1,2/3],[0,1,1]],d=new Ue(t,s);function m(t){let e=Array(t.length);for(let n=0;n<t.length;++n){let r=t[n];e[n]=d.T([o*r[0],l*r[1],i*r[2]])}return e}let f=Ve(d.T.bind(d),[-e,-e,0],[e,e,i]),u=f[0],p=f[1];for(let t=-1;t<=1;t+=2){o=t*e;for(let t=-1;t<=1;t+=2)l=t*e,h.push(new vt(m(c),n,r,null,u,p))}if(a){let e=d.T([0,0,i]);h.push(new wt([t,e],n,r,t,e))}},window.tube=function(t,e,i,n,r){let s=function(t,e,i,n,r){class s{constructor(t,e,i){this.p=t,this.r=e,this.t=i,this.s=Vt(i,e)}}let a=Number.EPSILON*Math.max(St(t),St(e),St(i),St(n));function o(r){if(1==r){let r=[n[0]-i[0],n[1]-i[1],n[2]-i[2]];return St(r)>a?Pt(r):(r=[2*i[0]-e[0]-n[0],2*i[1]-e[1]-n[1],2*i[2]-e[2]-n[2]],St(r)>a?Pt(r):[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])}let s=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])],o=[2*(t[0]+i[0])-4*e[0],2*(t[1]+i[1])-4*e[1],2*(t[2]+i[2])-4*e[2]],h=[e[0]-t[0],e[1]-t[1],e[2]-t[2]],l=r*r,c=[s[0]*l+o[0]*r+h[0],s[1]*l+o[1]*r+h[1],s[2]*l+o[2]*r+h[2]];return St(c)>a?Pt(c):(l=2*r,c=[s[0]*l+o[0],s[1]*l+o[1],s[2]*l+o[2]],St(c)>a?Pt(c):Pt(s))}let h=Array(r.length),l=[e[0]-t[0],e[1]-t[1],e[2]-t[2]];St(l)<a&&(l=[t[0]-2*e[0]+i[0],t[1]-2*e[1]+i[1],t[2]-2*e[2]+i[2]],St(l)<a&&(l=[n[0]-t[0]+3*(e[0]-i[0]),n[1]-t[1]+3*(e[1]-i[1]),n[2]-t[2]+3*(e[2]-i[2])])),l=Pt(l);let c=function(t){let e=Vt(t,[0,1,0]),i=Number.EPSILON*St(t);return St(e)>i?Pt(e):(e=Vt(t,[0,0,1]),St(e)>i?Pt(e):[1,0,0])}(l);h[0]=new s(t,c,l);for(let a=1;a<r.length;++a){let l=h[a-1],c=r[a],d=1-c,m=d*d,f=m*d,u=3*c;m*=u,d*=u*c;let p=c*c*c,v=[f*t[0]+m*e[0]+d*i[0]+p*n[0],f*t[1]+m*e[1]+d*i[1]+p*n[1],f*t[2]+m*e[2]+d*i[2]+p*n[2]],x=[v[0]-l.p[0],v[1]-l.p[1],v[2]-l.p[2]];if(0!=x[0]||0!=x[1]||0!=x[2]){let t=l.r,e=Pt(x),i=l.t,n=Ut(e,i),r=[i[0]-2*n*e[0],i[1]-2*n*e[1],i[2]-2*n*e[2]];i=o(c);let d=2*Ut(e,t),m=[t[0]-d*e[0],t[1]-d*e[1],t[2]-d*e[2]],f=Pt([i[0]-r[0],i[1]-r[1],i[2]-r[2]]),u=2*Ut(f,m);m=[m[0]-u*f[0],m[1]-u*f[1],m[2]-u*f[2]],h[a]=new s(v,Pt(m),Pt(i))}else h[a]=h[a-1]}return h}(t[0],t[1],t[2],t[3],[0,1/3,2/3,1]),a=Be*e,o=[[e,0],[e,a],[a,e],[0,e]];function l(e,r,a,l){let c=Array(16);for(let i=0;i<4;++i){let n=s[i],h=n.r[0],d=n.s[0],m=h*e+d*r,f=h*a+d*l;h=n.r[1],d=n.s[1];let u=h*e+d*r,p=h*a+d*l;h=n.r[2],d=n.s[2];let v=h*e+d*r,x=h*a+d*l,g=t[i],w=g[0];w1=g[1],w2=g[2];for(let t=0;t<4;++t){let e=o[t],n=e[0],r=e[1];c[4*i+t]=[m*n+f*r+w,u*n+p*r+w1,v*n+x*r+w2]}}h.push(new vt(c,i,n))}l(1,0,0,1),l(0,-1,1,0),l(-1,0,0,-1),l(0,1,-1,0),r&&h.push(new wt(t,i,n))},window.Positions=F,window.Normals=z,window.Colors=H,window.Indices=X}();
diff --git a/Master/texmf-dist/doc/asymptote/CAD.pdf b/Master/texmf-dist/doc/asymptote/CAD.pdf
index 59b6de4844d..404c5f0e5b6 100644
--- a/Master/texmf-dist/doc/asymptote/CAD.pdf
+++ b/Master/texmf-dist/doc/asymptote/CAD.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf b/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf
index f16877d17a0..9926852eec1 100644
--- a/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf
+++ b/Master/texmf-dist/doc/asymptote/TeXShopAndAsymptote.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/asymptote/asy-latex.pdf b/Master/texmf-dist/doc/asymptote/asy-latex.pdf
index f321e985992..554016edc6b 100644
--- a/Master/texmf-dist/doc/asymptote/asy-latex.pdf
+++ b/Master/texmf-dist/doc/asymptote/asy-latex.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/asymptote/asyRefCard.pdf b/Master/texmf-dist/doc/asymptote/asyRefCard.pdf
index 329c9f2cdac..bdc97baa740 100644
--- a/Master/texmf-dist/doc/asymptote/asyRefCard.pdf
+++ b/Master/texmf-dist/doc/asymptote/asyRefCard.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/asymptote/asymptote.pdf b/Master/texmf-dist/doc/asymptote/asymptote.pdf
index 5b0956acb0d..b38e93f9c76 100644
--- a/Master/texmf-dist/doc/asymptote/asymptote.pdf
+++ b/Master/texmf-dist/doc/asymptote/asymptote.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy b/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy
new file mode 100644
index 00000000000..855abfaa95d
--- /dev/null
+++ b/Master/texmf-dist/doc/asymptote/examples/AiryDisk.asy
@@ -0,0 +1,16 @@
+import graph3;
+import gsl;
+
+size(10cm,15cm,IgnoreAspect);
+currentprojection=orthographic(150,50,1);
+
+real f(pair z) {real r=abs(z); return r == 0 ? 1 : (2.0*J(1,r)/r)^2;}
+
+real R=15;
+surface s=surface(f,(-R,-R),(R,R),100,Spline);
+
+draw(s,green);
+
+xaxis3("$x$",Bounds,InTicks);
+yaxis3("$y$",Bounds,InTicks);
+zaxis3(rotate(90)*"$I(\sqrt{x^2+y^2})$",Bounds,InTicks("$%#.1f$"));
diff --git a/Master/texmf-dist/doc/asymptote/examples/Viviani.asy b/Master/texmf-dist/doc/asymptote/examples/Viviani.asy
new file mode 100644
index 00000000000..2b06dc8c48a
--- /dev/null
+++ b/Master/texmf-dist/doc/asymptote/examples/Viviani.asy
@@ -0,0 +1,26 @@
+import graph3;
+size(300);
+
+pen yellow=rgb("F1FA8C");
+pen purple=rgb("BB95FF");
+pen blue=rgb("7A8FFE");
+pen darkblack=rgb("101010");
+
+currentprojection=orthographic(3,3,1,up=Z);
+currentlight=light((1,0,1),(-1.5,0,-1));
+currentlight.background=darkblack;
+
+real aS=2.5;
+draw(Label("$x$",EndPoint),-aS*X--aS*X,white,Arrow3);
+draw(Label("$y$",EndPoint),-aS*Y--aS*Y,white,Arrow3);
+draw(Label("$z$",EndPoint),-aS*Z--aS*Z,white,Arrow3);
+
+draw(shift(0.5,0,-2)*scale(0.5,0.5,4)*unitcylinder,
+ material(blue+opacity(0.8),shininess=0.3));
+
+draw(unitsphere,material(purple,shininess=0.3));
+
+triple f(real t) {return(cos(t)^2,cos(t)*sin(t),sin(t));}
+
+path3 curve=graph(f,0,8pi,operator ..);
+draw(curve,yellow+linewidth(1));
diff --git a/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy b/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy
index 6620d590850..fba5bd148e8 100644
--- a/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy
+++ b/Master/texmf-dist/doc/asymptote/examples/animations/wheel.asy
@@ -6,9 +6,10 @@ import graph;
import animation;
-size(0,200);
+size(0,500);
-defaultpen(3);
+import fontsize;
+defaultpen(fontsize(48pt)+3);
dotfactor=4;
pair wheelpoint(real t)
@@ -26,7 +27,7 @@ guide wheel(guide g=nullpath, real a, real b, int n)
return g;
}
-real t1=0;
+real t1=0;
real t2=t1+2*pi;
animation a;
@@ -45,7 +46,7 @@ int n=10;
real dt=(t2-t1)/n;
for(int i=0; i <= n; ++i) {
save();
-
+
real t=t1+dt*i;
draw(circle((t,0),1),red);
dot(wheelpoint(t));
diff --git a/Master/texmf-dist/doc/asymptote/examples/filesurface.asy b/Master/texmf-dist/doc/asymptote/examples/filesurface.asy
index 2202554876f..b895ec803eb 100644
--- a/Master/texmf-dist/doc/asymptote/examples/filesurface.asy
+++ b/Master/texmf-dist/doc/asymptote/examples/filesurface.asy
@@ -7,16 +7,16 @@ file in=input("filesurface.dat").line();
real[] x=in;
real[] y=in;
-real[][] f=in;
+real[][] z=in;
triple f(pair t) {
int i=round(t.x);
int j=round(t.y);
- return (x[i],y[j],f[i][j]);
+ return (x[i],y[j],z[i][j]);
}
surface s=surface(f,(0,0),(x.length-1,y.length-1),x.length-1,y.length-1);
-real[] level=uniform(min(f)*(1-sqrtEpsilon),max(f)*(1+sqrtEpsilon),4);
+real[] level=uniform(min(z)*(1-sqrtEpsilon),max(z)*(1+sqrtEpsilon),4);
s.colors(palette(s.map(new real(triple v) {return find(level >= v.z);}),
Rainbow()));
@@ -41,5 +41,3 @@ zaxis3("$z$",Bounds,InTicks);
currentprojection=perspective(camera=target+realmult(dir(68,225),M-m),
target=target);
-
-
diff --git a/Master/texmf-dist/doc/asymptote/examples/filesurface.dat b/Master/texmf-dist/doc/asymptote/examples/filesurface.dat
index 16d5966f6be..13026850321 100644
--- a/Master/texmf-dist/doc/asymptote/examples/filesurface.dat
+++ b/Master/texmf-dist/doc/asymptote/examples/filesurface.dat
@@ -1,12 +1,12 @@
-1 12 24 36 60 84 120 180 240 360
-2005 2005.083333 2005.166667 2005.25 2005.333333 2005.416667 2005.5 2005.583333 2005.666667 2005.75 2005.833333 2005.916667 2006 2006.083333 2006.166667 2006.25 2006.333333 2006.416667 2006.5 2006.583333 2006.666667 2006.75 2006.833333 2006.916667 2007 2007.083333 2007.166667 2007.25 2007.333333 2007.416667 2007.5 2007.583333 2007.666667 2007.75 2007.833333 2007.916667 2008 2008.083333 2008.166667 2008.25 2008.333333 2008.416667 2008.5 2008.583333 2008.666667 2008.75 2008.833333 2008.916667
-2.111 2.1039 2.103 2.1047 2.1041 2.1039 2.1064 2.1126 2.1152 2.1209 2.2225 2.4112 2.3885 2.4586 2.6333 2.6489 2.6926 2.8691 2.9389 3.0941 3.1572 3.3501 3.4214 3.64 3.6159 3.6511 3.8439 3.859 3.9194 4.0982 4.105 4.3081 4.4339 4.2355 4.216 4.7114 4.1973 4.1821 4.3046 4.3691 4.3874 4.4724 4.4716 4.4875 4.6599 4.8313 3.8433 2.9929
-2.223809524 2.228 2.246190476 2.165238095 2.092727273 1.997272727 2.07185 2.14 2.128636364 2.327619048 2.577272727 2.67 2.717727273 2.793 2.978695652 3.094210526 3.175 3.271363636 3.415238095 3.489565217 3.573333333 3.664090909 3.723636364 3.773157895 3.914090909 3.9605 3.982727273 4.132105263 4.254545455 4.398095238 4.44 4.228695652 4.088 4.09 4.044090909 4.0855 3.870909091 3.631904762 3.711052632 3.955909091 4.141428571 4.562380952 4.575217391 4.36952381 4.210909091 2.93173913 2.3795 2.007727273
-2.431904762 2.4595 2.517142857 2.367619048 2.237272727 2.077727273 2.18235 2.253913043 2.222727273 2.484761905 2.743636364 2.804285714 2.862272727 2.968 3.192173913 3.343157895 3.381818182 3.462727273 3.574285714 3.575652174 3.602380952 3.657272727 3.677727273 3.744210526 3.926818182 3.954 3.922272727 4.105263158 4.255454545 4.464285714 4.475 4.183478261 4.0595 4.090434783 3.898636364 3.9975 3.68 3.334761905 3.402105263 3.781818182 4.07047619 4.624761905 4.542608696 4.178095238 4.008636364 3.151304348 2.641 2.375
-2.638095238 2.6685 2.735714286 2.562380952 2.416818182 2.241363636 2.33035 2.400869565 2.340454545 2.60952381 2.865454545 2.895238095 2.949545455 3.0775 3.297826087 3.477368421 3.521363636 3.589545455 3.685714286 3.640434783 3.614761905 3.674545455 3.668636364 3.742631579 3.938636364 3.9625 3.91 4.106842105 4.258636364 4.496666667 4.496818182 4.210869565 4.0975 4.138695652 3.933181818 4.027 3.719090909 3.413809524 3.434210526 3.818636364 4.071428571 4.622380952 4.56826087 4.157619048 3.993181818 3.358695652 2.8285 2.594090909
-2.996190476 3.015 3.124761905 2.920952381 2.753181818 2.581818182 2.6606 2.710869565 2.595 2.829047619 3.082272727 3.056190476 3.080909091 3.2445 3.45173913 3.664736842 3.703181818 3.74 3.82047619 3.726956522 3.655714286 3.712727273 3.669090909 3.753157895 3.970454545 4.0055 3.914090909 4.126315789 4.273181818 4.538095238 4.537727273 4.25826087 4.1655 4.210869565 3.982727273 4.1085 3.829545455 3.600952381 3.591578947 3.941363636 4.137619048 4.65952381 4.622173913 4.201428571 4.126363636 3.774782609 3.2075 2.983181818
-3.265714286 3.2665 3.405238095 3.21 3.04 2.87 2.9277 2.959565217 2.819545455 3.021428571 3.238636364 3.144761905 3.143636364 3.3225 3.536086957 3.798421053 3.85 3.867727273 3.91047619 3.803043478 3.706666667 3.757727273 3.700454545 3.775263158 4.003181818 4.037368421 3.938181818 4.156315789 4.288636364 4.566190476 4.546363636 4.31173913 4.23 4.27 4.076818182 4.185 3.949545455 3.793333333 3.730526316 4.043636364 4.219047619 4.636190476 4.62173913 4.258095238 4.190454545 3.967826087 3.53 3.192272727
-3.593809524 3.5845 3.745238095 3.543333333 3.381363636 3.209545455 3.249 3.282173913 3.122272727 3.285714286 3.488181818 3.380952381 3.344545455 3.497 3.674347826 3.935789474 4.004090909 4.004545455 4.029047619 3.906956522 3.778095238 3.817272727 3.75 3.811052632 4.055909091 4.091 3.99 4.203157895 4.330454545 4.614285714 4.590454545 4.393913043 4.344 4.397391304 4.234545455 4.346 4.165 4.105238095 4.044210526 4.252727273 4.398571429 4.718571429 4.705217391 4.407142857 4.379090909 4.255652174 3.998 3.514545455
-3.78952381 3.7435 3.9255 3.75 3.582272727 3.451363636 3.50775 3.513913043 3.359545455 3.494761905 3.665909091 3.551428571 3.504545455 3.6535 3.812608696 4.098421053 4.167272727 4.175909091 4.186666667 4.056086957 3.908571429 3.916363636 3.824545455 3.882105263 4.12 4.162 4.089090909 4.306315789 4.423181818 4.699047619 4.661818182 4.504782609 4.4985 4.519565217 4.402272727 4.5115 4.382727273 4.366666667 4.336842105 4.509545455 4.613809524 4.861428571 4.877391304 4.636666667 4.659545455 4.482173913 4.2535 3.744545455
-3.99 3.9085 4.098571429 3.944285714 3.771363636 3.609090909 3.6536 3.640869565 3.488181818 3.604761905 3.755454545 3.634285714 3.565909091 3.7165 3.866521739 4.151052632 4.235454545 4.235909091 4.249047619 4.116086957 3.961904762 3.953333333 3.855714286 3.92 4.153636364 4.1985 4.139090909 4.365789474 4.471818182 4.747142857 4.695454545 4.55 4.572 4.590434783 4.500909091 4.602 4.504090909 4.513809524 4.521052632 4.656818182 4.733809524 4.899047619 4.935652174 4.746190476 4.776818182 4.598695652 4.4835 3.900454545
-4.137142857 4.0305 4.213333333 4.08 3.902727273 3.739090909 3.774285714 3.757391304 3.598181818 3.706190476 3.842272727 3.712 3.629545455 3.771 3.919565217 4.231111111 4.295909091 4.306818182 4.31 4.170434783 4.000952381 3.99 3.881818182 3.943684211 4.176818182 4.2195 4.163636364 4.387368421 4.480454545 4.758095238 4.710454545 4.559565217 4.595 4.612173913 4.544090909 4.64 4.57 4.58 4.614736842 4.702727273 4.768571429 4.884761905 4.905652174 4.741904762 4.775454545 4.496521739 4.3585 3.738636364
+1 12 24 36 60 84 120 180 240 360
+2005 2005.083333 2005.166667 2005.25 2005.333333 2005.416667 2005.5 2005.583333 2005.666667 2005.75 2005.833333 2005.916667 2006 2006.083333 2006.166667 2006.25 2006.333333 2006.416667 2006.5 2006.583333 2006.666667 2006.75 2006.833333 2006.916667 2007 2007.083333 2007.166667 2007.25 2007.333333 2007.416667 2007.5 2007.583333 2007.666667 2007.75 2007.833333 2007.916667 2008 2008.083333 2008.166667 2008.25 2008.333333 2008.416667 2008.5 2008.583333 2008.666667 2008.75 2008.833333 2008.916667
+2.111 2.1039 2.103 2.1047 2.1041 2.1039 2.1064 2.1126 2.1152 2.1209 2.2225 2.4112 2.3885 2.4586 2.6333 2.6489 2.6926 2.8691 2.9389 3.0941 3.1572 3.3501 3.4214 3.64 3.6159 3.6511 3.8439 3.859 3.9194 4.0982 4.105 4.3081 4.4339 4.2355 4.216 4.7114 4.1973 4.1821 4.3046 4.3691 4.3874 4.4724 4.4716 4.4875 4.6599 4.8313 3.8433 2.9929
+2.223809524 2.228 2.246190476 2.165238095 2.092727273 1.997272727 2.07185 2.14 2.128636364 2.327619048 2.577272727 2.67 2.717727273 2.793 2.978695652 3.094210526 3.175 3.271363636 3.415238095 3.489565217 3.573333333 3.664090909 3.723636364 3.773157895 3.914090909 3.9605 3.982727273 4.132105263 4.254545455 4.398095238 4.44 4.228695652 4.088 4.09 4.044090909 4.0855 3.870909091 3.631904762 3.711052632 3.955909091 4.141428571 4.562380952 4.575217391 4.36952381 4.210909091 2.93173913 2.3795 2.007727273
+2.431904762 2.4595 2.517142857 2.367619048 2.237272727 2.077727273 2.18235 2.253913043 2.222727273 2.484761905 2.743636364 2.804285714 2.862272727 2.968 3.192173913 3.343157895 3.381818182 3.462727273 3.574285714 3.575652174 3.602380952 3.657272727 3.677727273 3.744210526 3.926818182 3.954 3.922272727 4.105263158 4.255454545 4.464285714 4.475 4.183478261 4.0595 4.090434783 3.898636364 3.9975 3.68 3.334761905 3.402105263 3.781818182 4.07047619 4.624761905 4.542608696 4.178095238 4.008636364 3.151304348 2.641 2.375
+2.638095238 2.6685 2.735714286 2.562380952 2.416818182 2.241363636 2.33035 2.400869565 2.340454545 2.60952381 2.865454545 2.895238095 2.949545455 3.0775 3.297826087 3.477368421 3.521363636 3.589545455 3.685714286 3.640434783 3.614761905 3.674545455 3.668636364 3.742631579 3.938636364 3.9625 3.91 4.106842105 4.258636364 4.496666667 4.496818182 4.210869565 4.0975 4.138695652 3.933181818 4.027 3.719090909 3.413809524 3.434210526 3.818636364 4.071428571 4.622380952 4.56826087 4.157619048 3.993181818 3.358695652 2.8285 2.594090909
+2.996190476 3.015 3.124761905 2.920952381 2.753181818 2.581818182 2.6606 2.710869565 2.595 2.829047619 3.082272727 3.056190476 3.080909091 3.2445 3.45173913 3.664736842 3.703181818 3.74 3.82047619 3.726956522 3.655714286 3.712727273 3.669090909 3.753157895 3.970454545 4.0055 3.914090909 4.126315789 4.273181818 4.538095238 4.537727273 4.25826087 4.1655 4.210869565 3.982727273 4.1085 3.829545455 3.600952381 3.591578947 3.941363636 4.137619048 4.65952381 4.622173913 4.201428571 4.126363636 3.774782609 3.2075 2.983181818
+3.265714286 3.2665 3.405238095 3.21 3.04 2.87 2.9277 2.959565217 2.819545455 3.021428571 3.238636364 3.144761905 3.143636364 3.3225 3.536086957 3.798421053 3.85 3.867727273 3.91047619 3.803043478 3.706666667 3.757727273 3.700454545 3.775263158 4.003181818 4.037368421 3.938181818 4.156315789 4.288636364 4.566190476 4.546363636 4.31173913 4.23 4.27 4.076818182 4.185 3.949545455 3.793333333 3.730526316 4.043636364 4.219047619 4.636190476 4.62173913 4.258095238 4.190454545 3.967826087 3.53 3.192272727
+3.593809524 3.5845 3.745238095 3.543333333 3.381363636 3.209545455 3.249 3.282173913 3.122272727 3.285714286 3.488181818 3.380952381 3.344545455 3.497 3.674347826 3.935789474 4.004090909 4.004545455 4.029047619 3.906956522 3.778095238 3.817272727 3.75 3.811052632 4.055909091 4.091 3.99 4.203157895 4.330454545 4.614285714 4.590454545 4.393913043 4.344 4.397391304 4.234545455 4.346 4.165 4.105238095 4.044210526 4.252727273 4.398571429 4.718571429 4.705217391 4.407142857 4.379090909 4.255652174 3.998 3.514545455
+3.78952381 3.7435 3.9255 3.75 3.582272727 3.451363636 3.50775 3.513913043 3.359545455 3.494761905 3.665909091 3.551428571 3.504545455 3.6535 3.812608696 4.098421053 4.167272727 4.175909091 4.186666667 4.056086957 3.908571429 3.916363636 3.824545455 3.882105263 4.12 4.162 4.089090909 4.306315789 4.423181818 4.699047619 4.661818182 4.504782609 4.4985 4.519565217 4.402272727 4.5115 4.382727273 4.366666667 4.336842105 4.509545455 4.613809524 4.861428571 4.877391304 4.636666667 4.659545455 4.482173913 4.2535 3.744545455
+3.99 3.9085 4.098571429 3.944285714 3.771363636 3.609090909 3.6536 3.640869565 3.488181818 3.604761905 3.755454545 3.634285714 3.565909091 3.7165 3.866521739 4.151052632 4.235454545 4.235909091 4.249047619 4.116086957 3.961904762 3.953333333 3.855714286 3.92 4.153636364 4.1985 4.139090909 4.365789474 4.471818182 4.747142857 4.695454545 4.55 4.572 4.590434783 4.500909091 4.602 4.504090909 4.513809524 4.521052632 4.656818182 4.733809524 4.899047619 4.935652174 4.746190476 4.776818182 4.598695652 4.4835 3.900454545
+4.137142857 4.0305 4.213333333 4.08 3.902727273 3.739090909 3.774285714 3.757391304 3.598181818 3.706190476 3.842272727 3.712 3.629545455 3.771 3.919565217 4.231111111 4.295909091 4.306818182 4.31 4.170434783 4.000952381 3.99 3.881818182 3.943684211 4.176818182 4.2195 4.163636364 4.387368421 4.480454545 4.758095238 4.710454545 4.559565217 4.595 4.612173913 4.544090909 4.64 4.57 4.58 4.614736842 4.702727273 4.768571429 4.884761905 4.905652174 4.741904762 4.775454545 4.496521739 4.3585 3.738636364
diff --git a/Master/texmf-dist/doc/asymptote/examples/histogram.asy b/Master/texmf-dist/doc/asymptote/examples/histogram.asy
index ec00d6638d1..f41af601236 100644
--- a/Master/texmf-dist/doc/asymptote/examples/histogram.asy
+++ b/Master/texmf-dist/doc/asymptote/examples/histogram.asy
@@ -12,8 +12,7 @@ draw(graph(Gaussian,min(a),max(a)),blue);
// Optionally calculate "optimal" number of bins a la Shimazaki and Shinomoto.
int N=bins(a);
-histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=false);
+histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=true);
xaxis("$x$",BottomTop,LeftTicks);
yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));
-
diff --git a/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy b/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy
index fd60de4f632..82de9176462 100644
--- a/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy
+++ b/Master/texmf-dist/doc/asymptote/examples/slopefield1.asy
@@ -3,7 +3,5 @@ import slopefield;
size(200);
real func(real x) {return 2x;}
-add(slopefield(func,(-3,-3),(3,3),20,Arrow));
+add(slopefield(func,(-3,-3),(3,3),20));
draw(curve((0,0),func,(-3,-3),(3,3)),red);
-
-
diff --git a/Master/texmf-dist/doc/asymptote/examples/triads.asy b/Master/texmf-dist/doc/asymptote/examples/triads.asy
index 6cecc55fa46..d1923d3241f 100644
--- a/Master/texmf-dist/doc/asymptote/examples/triads.asy
+++ b/Master/texmf-dist/doc/asymptote/examples/triads.asy
@@ -51,4 +51,4 @@ spectrum(m,s,l);
shipout("triadkpq");
-erase();
+currentpicture.erase();
diff --git a/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy b/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy
index 12de66e49c5..bc319e56892 100644
--- a/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy
+++ b/Master/texmf-dist/doc/asymptote/examples/vectorfield.asy
@@ -4,6 +4,6 @@ size(100);
pair a=(0,0);
pair b=(2pi,2pi);
-path vector(pair z) {return (0,0)--(sin(z.x),cos(z.y));}
+path vector(pair z) {return (sin(z.x),cos(z.y));}
add(vectorfield(vector,a,b));
diff --git a/Master/texmf-dist/doc/info/asy-faq.info b/Master/texmf-dist/doc/info/asy-faq.info
index 87570ff8d93..d2b3fcbec85 100644
--- a/Master/texmf-dist/doc/info/asy-faq.info
+++ b/Master/texmf-dist/doc/info/asy-faq.info
@@ -10,7 +10,7 @@ END-INFO-DIR-ENTRY
File: asy-faq.info, Node: Top, Next: Question 1.1, Up: (dir)
ASYMPTOTE FREQUENTLY ASKED QUESTIONS
- 2022-03-07
+ 2023-02-09
This is the list of Frequently Asked Questions about Asymptote (asy).
diff --git a/Master/texmf-dist/doc/info/asymptote.info b/Master/texmf-dist/doc/info/asymptote.info
index 6975f386052..78edd9ad026 100644
--- a/Master/texmf-dist/doc/info/asymptote.info
+++ b/Master/texmf-dist/doc/info/asymptote.info
@@ -1,11 +1,11 @@
This is asymptote.info, produced by makeinfo version 6.8 from
asymptote.texi.
-This file documents 'Asymptote', version 2.79.
+This file documents 'Asymptote', version 2.85.
<https://asymptote.sourceforge.io>
- Copyright (C) 2004-22 Andy Hammerlindl, John Bowman, and Tom Prince.
+ Copyright (C) 2004-23 Andy Hammerlindl, John Bowman, and Tom Prince.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Lesser General Public License
@@ -22,11 +22,11 @@ File: asymptote.info, Node: Top, Next: Description, Prev: (dir), Up: (dir)
Asymptote
*********
-This file documents 'Asymptote', version 2.79.
+This file documents 'Asymptote', version 2.85.
<https://asymptote.sourceforge.io>
- Copyright (C) 2004-22 Andy Hammerlindl, John Bowman, and Tom Prince.
+ Copyright (C) 2004-23 Andy Hammerlindl, John Bowman, and Tom Prince.
Permission is granted to copy, distribute and/or modify this
document under the terms of the GNU Lesser General Public License
@@ -345,8 +345,7 @@ self-extracting 'Asymptote' executable 'asymptote-x.xx-setup.exe', where
A working TeX implementation (we recommend
<https://www.tug.org/texlive> or <http://www.miktex.org>) will be
required to typeset labels. You will also need to install 'GPL
-Ghostscript' version 9.52 or later from
-<http://downloads.ghostscript.com/public>.
+Ghostscript' version 9.56 or later from <https://www.ghostscript.com/>.
To view 'PostScript' output, you can install the program 'Sumatra
PDF' available from <https://www.sumatrapdfreader.org/>.
@@ -371,17 +370,12 @@ File: asymptote.info, Node: Configuring, Next: Search paths, Prev: Microsoft
In interactive mode, or when given the '-V' option (the default when
running 'Asymptote' on a single file under 'MSDOS'), 'Asymptote' will
-automatically invoke the 'PostScript' viewer 'gv' (under 'UNIX') or
-'gsview' (under 'MSDOS') to display graphical output. The 'PostScript'
-viewer should be capable of automatically redrawing whenever the output
-file is updated. The default 'UNIX' 'PostScript' viewer 'gv' supports
-this (via a 'SIGHUP' signal). Version 'gv-3.6.3' or later (from
-<https://ftp.gnu.org/gnu/gv/>) is required for interactive mode to work
-properly. Users of 'ggv' will need to enable 'Watch file' under
-'Edit/PostScript Viewer Preferences'. Users of 'gsview' will need to
-enable 'Options/Auto Redisplay' (however, under 'MSDOS' it is still
-necessary to click on the 'gsview' window; under 'UNIX' one must
-manually redisplay by pressing the 'r' key).
+automatically invoke your 'PostScript' viewer ('evince' under 'UNIX') to
+display graphical output. The 'PostScript' viewer should be capable of
+automatically redrawing whenever the output file is updated. The 'UNIX'
+'PostScript' viewer 'gv' supports this (via a 'SIGHUP' signal). Users
+of 'ggv' will need to enable 'Watch file' under 'Edit/PostScript Viewer
+Preferences'.
Configuration variables are most easily set as 'Asymptote' variables
in an optional configuration file 'config.asy' (*note configuration
@@ -392,7 +386,7 @@ configuration variables under 'UNIX':
import settings;
pdfviewer="acroread";
htmlviewer="google-chrome";
-psviewer="gv";
+psviewer="evince";
display="display";
animate="animate";
gs="gs";
@@ -456,14 +450,14 @@ lists all disabled warnings.
Configuration variables may also be set or overwritten with a
command-line option:
-asy -psviewer=gsview -V venn
+asy -psviewer=evince -V venn
Alternatively, system environment versions of the above configuration
variables may be set in the conventional way. The corresponding
environment variable name is obtained by converting the configuration
variable name to upper case and prepending 'ASYMPTOTE_': for example, to
set the environment variable
-ASYMPTOTE_PSVIEWER="C:\Program Files\Ghostgum\gsview\gsview32.exe";
+ASYMPTOTE_PAPERTYPE="a4";
under 'Microsoft Windows XP':
1. Click on the 'Start' button;
2. Right-click on 'My Computer';
@@ -617,7 +611,7 @@ setlocal errorformat=%f:\ %l.%c:\ %m
Syntax highlighting support for the KDE editor 'Kate' can be enabled
by running 'asy-kate.sh' in the '/usr/local/share/asymptote' directory
and putting the generated 'asymptote.xml' file in
-'~/.kde/share/apps/katepart/syntax/'.
+'~/.local/share/org.kde.syntax-highlighting/syntax/'.

File: asymptote.info, Node: Git, Next: Uninstall, Prev: Editing modes, Up: Installation
@@ -3330,12 +3324,12 @@ an error.
The function 'bool alias(T,T)' checks to see if two structure
references refer to the same instance of the structure (or both to
-'null'). In example at the beginning of this section, 'alias(foo,bar)'
-would return true, but 'alias(foo,new T)' would return false, as 'new T'
-creates a new instance of the structure 'T'. The boolean operators '=='
-and '!=' are by default equivalent to 'alias' and '!alias' respectively,
-but may be overwritten for a particular type (for example, to do a deep
-comparison).
+'null'). In the example at the beginning of this section,
+'alias(foo,bar)' would return true, but 'alias(foo,new T)' would return
+false, as 'new T' creates a new instance of the structure 'T'. The
+boolean operators '==' and '!=' are by default equivalent to 'alias' and
+'!alias' respectively, but may be overwritten for a particular type (for
+example, to do a deep comparison).
Here is a simple example that illustrates the use of structures:
struct S {
@@ -4297,6 +4291,14 @@ of type 'T[]'.
returns the unnormalized three-dimensional Fourier transform of 'a'
using the given 'sign';
+'realschur schur(real[][] a)'
+ returns a struct 'realschur' containing a unitary matrix 'U' and a
+ quasitriangular matrix 'T' such that 'a=U*T*transpose(U)';
+
+'schur schur(pair[][] a)'
+ returns a struct 'schur' containing a unitary matrix 'U' and a
+ triangular matrix 'T' such that 'a=U*T*conj(transpose(U))';
+
'real dot(real[] a, real[] b)'
returns the dot product of the vectors 'a' and 'b';
@@ -4892,7 +4894,7 @@ in a file 'latexmkrc' in the same directory. External 'Asymptote' code
can be included with
\asyinclude[<options>]{<filename.asy>}
so that 'latexmk' will recognize when the code is changed. Note that
-'latemk' requires 'perl', available from <https://www.perl.org/>.
+'latexmk' requires 'perl', available from <https://www.perl.org/>.
One can specify 'width', 'height', 'keepAspect', 'viewportwidth',
'viewportheight', 'attach', and 'inline'. 'keyval'-style options to the
@@ -6462,11 +6464,10 @@ following routines:
// Optionally calculate "optimal" number of bins a la Shimazaki and Shinomoto.
int N=bins(a);
- histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=false);
+ histogram(a,min(a),max(a),N,normalize=true,low=0,lightred,black,bars=true);
xaxis("$x$",BottomTop,LeftTicks);
yaxis("$dP/dx$",LeftRight,RightTicks(trailingzero));
-
[./histogram]
@@ -6598,7 +6599,7 @@ following routines:
pair a=(0,0);
pair b=(2pi,2pi);
- path vector(pair z) {return (0,0)--(sin(z.x),cos(z.y));}
+ path vector(pair z) {return (sin(z.x),cos(z.y));}
add(vectorfield(vector,a,b));
@@ -6990,8 +6991,8 @@ while the array 'vi' contains integer arrays of length 3 containing the
indices of the elements in 'v' that form the vertices of each triangle.
Similarly, the arguments 'n' and 'ni' contain optional normal data and
'p' and 'pi' contain optional pen vertex data. If more than one normal
-or pen is specified for a vertex, the last one specified is used. An
-example of this tessellation facility is given in 'triangles.asy'.
+or pen is specified for a vertex, the last one is used. An example of
+this tessellation facility is given in 'triangles.asy'.
Arbitrary thick three-dimensional curves and line caps (which the
'OpenGL' standard does not require implementations to provide) are
@@ -7130,7 +7131,7 @@ There are six choices for viewing 3D 'Asymptote' output:
5. Output a 'V3D' portable compressed binary file for viewing with an
external viewer or conversion to an alternate 3D format with the
Python 'pyv3d' library. The 'V3D' specification and the 'pyv3d'
- library are available at <https://gitlab.com/vectorgraphics/v3d>.
+ library are available at <https://github.com/vectorgraphics/v3d>.
A 'V3D' file 'file.v3d' may be imported and viewed by 'Asymptote'
either by specifying 'file.v3d' on the command line
asy -V file.v3d
@@ -7339,7 +7340,7 @@ following built-in transform3 types (the identity transformation is
scales by 'x' in the x direction, by 'y' in the y direction, and by
'z' in the z direction;
'rotate(real angle, triple v)'
- rotates by 'angle' in degrees about an axis 'v' through the origin;
+ rotates by 'angle' in degrees about the axis 'O--v';
'rotate(real angle, triple u, triple v)'
rotates by 'angle' in degrees about the axis 'u--v';
'reflect(triple u, triple v, triple w)'
@@ -7662,10 +7663,20 @@ over the parameter space 'box(a,b)', as illustrated in the example
'parametricsurface.asy'. An optional splinetype 'Spline' may be
specified. The boolean array or function 'cond' can be used to control
which surface mesh cells are actually drawn (by default all mesh cells
-over 'box(a,b)' are drawn). Surface lighting is illustrated in the
-example files 'parametricsurface.asy' and 'sinc.asy'. Lighting can be
-disabled by setting 'light=nolight', as in this example of a Gaussian
-surface:
+over 'box(a,b)' are drawn).
+
+ One can also construct the surface generated by rotating a path 'g'
+between 'angle1' to 'angle2' (in degrees) sampled 'n' times about the
+line 'c--c+axis':
+surface surface(triple c, path3 g, triple axis, int n=nslice,
+ real angle1=0, real angle2=360, pen color(int i, real j)=null);
+The optional argument 'color(int i, real j)' can be used to override the
+surface color at the point obtained by rotating vertex 'i' by angle 'j'
+(in degrees).
+
+Surface lighting is illustrated in the example files
+'parametricsurface.asy' and 'sinc.asy'. Lighting can be disabled by
+setting 'light=nolight', as in this example of a Gaussian surface:
import graph3;
size(200,0);
@@ -8237,11 +8248,9 @@ import slopefield;
size(200);
real func(real x) {return 2x;}
-add(slopefield(func,(-3,-3),(3,3),20,Arrow));
+add(slopefield(func,(-3,-3),(3,3),20));
draw(curve((0,0),func,(-3,-3),(3,3)),red);
-
-
[./slopefield1]

@@ -8264,55 +8273,68 @@ Type 'asy -h' to see the full list of command-line options supported by
'Asymptote':
Usage: ../asy [options] [file ...]
-Options (negate by replacing - with -no):
+Options (negate boolean options by replacing - with -no):
+-GPUblockSize n Compute shader block size [8]
+-GPUcompress Compress GPU transparent fragment counts [false]
-GPUindexing Compute indexing partial sums on GPU [true]
-GPUinterlock Use fragment shader interlock [true]
--GPUlocalSize n Compute shader local size [16]
+-GPUlocalSize n Compute shader local size [256]
-V,-View View output; command-line only
-absolute Use absolute WebGL dimensions [false]
-a,-align C|B|T|Z Center, Bottom, Top, or Zero page alignment [C]
-aligndir pair Directional page alignment (overrides align) [(0,0)]
+-animating [false]
-antialias n Antialiasing width for rasterized output [2]
-auto3D Automatically activate 3D scene [true]
-autobillboard 3D labels always face viewer by default [true]
--autoimport string Module to automatically import
+-autoimport str Module to automatically import
-autoplain Enable automatic importing of plain [true]
-autoplay Autoplay 3D animations [false]
-autorotate Enable automatic PDF page rotation [false]
-axes3 Show 3D axes in PDF output [true]
-batchMask Mask fpu exceptions in batch mode [false]
-batchView View output in batch mode [false]
--bw Convert all colors to black and white [false]
+-bw Convert all colors to black and white false
-cd directory Set current directory; command-line only
--cmyk Convert rgb colors to cmyk [false]
--c,-command string Command to autoexecute
--compact Conserve memory at the expense of speed [false]
+-cmyk Convert rgb colors to cmyk false
+-c,-command str Command to autoexecute
+-compact Conserve memory at the expense of speed false
-compress Compress images in PDF output [true]
+-convertOptions str []
-d,-debug Enable debugging messages [false]
-devicepixelratio n Ratio of physical to logical pixels [1]
-digits n Default output file precision [7]
-divisor n Garbage collect using purge(divisor=n) [2]
--dvisvgmMultipleFiles dvisvgm supports multiple files [false]
+-dvipsOptions str []
+-dvisvgmMultipleFiles dvisvgm supports multiple files [true]
+-dvisvgmOptions str []
-embed Embed rendered preview image [true]
+-e,-environment Show summary of environment settings; command-line only
-exitonEOF Exit interactive mode on EOF [true]
-fitscreen Fit rendered image to screen [true]
--framedelay ms Additional frame delay [0]
-framerate frames/s Animation speed [30]
--globalread Allow read from other directory [true]
--globalwrite Allow write to other directory [false]
--gray Convert all colors to grayscale [false]
+-glOptions str []
+-globalread Allow read from other directory true
+-globalwrite Allow write to other directory false
+-gray Convert all colors to grayscale false
+-gsOptions str []
-h,-help Show summary of options; command-line only
-historylines n Retain n lines of history [1000]
+-htmlviewerOptions str
+ []
+-hyperrefOptions str [setpagesize=false,unicode,pdfborder=0 0 0]
-ibl Enable environment map image-based lighting [false]
-iconify Iconify rendering window [false]
--image string Environment image name [snowyField]
--imageDir string Environment image library directory [ibl]
+-image str Environment image name [snowyField]
+-imageDir str Environment image library directory [ibl]
-inlineimage Generate inline embedded image [false]
-inlinetex Generate inline TeX code [false]
+-inpipe n Input pipe [-1]
-interactiveMask Mask fpu exceptions in interactive mode [true]
-interactiveView View output in interactive mode [true]
-interactiveWrite Write expressions entered at the prompt to stdout [true]
+-interrupt [false]
-k,-keep Keep intermediate files [false]
-keepaux Keep intermediate LaTeX .aux files [false]
-level n Postscript level [3]
@@ -8331,20 +8353,26 @@ Options (negate by replacing - with -no):
-O,-offset pair PostScript offset [(0,0)]
-f,-outformat format Convert each output file to specified format
-o,-outname name Alternative output directory/filename
+-outpipe n Output pipe [-1]
+-paperheight bp Default page height [0]
+-paperwidth bp Default page width [0]
-p,-parseonly Parse file [false]
-pdfreload Automatically reload document in pdfviewer [false]
+-pdfreloadOptions str []
-pdfreloaddelay usec Delay before attempting initial pdf reload [750000]
+-pdfviewerOptions str []
-position pair Initial 3D rendering screen position [(0,0)]
-prc Embed 3D PRC graphics in PDF output [false]
-prerender resolution Prerender V3D objects (0 implies vector output) [0]
--prompt string Prompt [> ]
--prompt2 string Continuation prompt for multiline input [..]
+-prompt str Prompt [> ]
+-prompt2 str Continuation prompt for multiline input [..]
+-psviewerOptions str []
-q,-quiet Suppress welcome text and noninteractive stdout [false]
-render n Render 3D graphics using n pixels per bp (-1=auto) [-1]
-resizestep step Resize step [1.2]
-reverse reverse 3D animations [false]
--rgb Convert cmyk colors to rgb [false]
--safe Disable system call [true]
+-rgb Convert cmyk colors to rgb false
+-safe Disable system call true
-scroll n Scroll standard output n lines at a time [0]
-shiftHoldDistance n WebGL touch screen distance limit for shift mode [20]
-shiftWaitTime ms WebGL touch screen shift mode delay [200]
@@ -8359,13 +8387,13 @@ Options (negate by replacing - with -no):
-s,-translate Show translated virtual machine code [false]
-twice Run LaTeX twice (to resolve references) [false]
-twosided Use two-sided 3D lighting model for rendering [true]
--u,-user string General purpose user string
--v,-verbose Increase verbosity level (can specify multiple times) [0]
+-u,-user str General purpose user string
+-v,-verbose Increase verbosity level (can specify multiple times) 0
-version Show version; command-line only
-vibrateTime ms WebGL shift mode vibrate duration [25]
-viewportmargin pair Horizontal and vertical 3D viewport margin [(0.5,0.5)]
-wait Wait for child processes to finish before exiting [false]
--warn string Enable warning; command-line only
+-warn str Enable warning; command-line only
-webgl2 Use webgl2 if available [false]
-where Show where listed variables are declared [false]
-wsl Run asy under the Windows Subsystem for Linux. [false]
@@ -8431,9 +8459,10 @@ using the '-f' option (or 'outformat' setting).
later) from <https://dvisvgm.de>. You might need to adjust the
configuration variable 'libgs' to point to the location of your
'Ghostscript' library 'libgs.so' (or to an empty string, depending on
-how 'dvisvgm' was configured). The 2.10 version (or later) of 'dvisvgm'
-can display SVG output (used by the 'xasy' editor) for embedded EPS,
-PDF, PNG, and JPEG images included with the 'graphic()' function.
+how 'dvisvgm' was configured). The 2.13.1 version (or later) of
+'dvisvgm' can display SVG output (used by the 'xasy' editor) for
+embedded EPS, PDF, PNG, and JPEG images included with the 'graphic()'
+function.
'Asymptote' can also produce any output format supported by the
'ImageMagick' 'convert' program (version 6.3.5 or later recommended; an
@@ -8619,10 +8648,8 @@ available as
<https://sourceforge.net/projects/tumagcc/files/rsvg-convert-2.40.20.7z>
Deconstruction of a picture into its components is fastest when using
-the 'LaTeX' TeX engine. One can speed up deconstruction for other TeX
-engines using the 2.13.1 version or later of 'dvisvgm' and setting
-'dvisvgmMultipleFiles=true;' in the 'Asymptote' configuration file
-(*note configuration file::).
+the 'LaTeX' TeX engine. The default setting 'dvisvgmMultipleFiles=true'
+speeds up deconstruction under PDF TeX engines.

File: asymptote.info, Node: GUI usage, Prev: GUI installation, Up: GUI
@@ -8932,9 +8959,9 @@ Index
* ---: Bezier curves. (line 84)
* -=: Self & prefix operators.
(line 6)
-* -c: Options. (line 206)
-* -l: Options. (line 225)
-* -u: Options. (line 216)
+* -c: Options. (line 226)
+* -l: Options. (line 245)
+* -u: Options. (line 236)
* -V: Configuring. (line 6)
* -V <1>: Drawing in batch mode.
(line 16)
@@ -8975,7 +9002,7 @@ Index
(line 53)
* ||: Arithmetic & logical.
(line 51)
-* a4: Configuring. (line 68)
+* a4: Configuring. (line 63)
* abort: Data types. (line 364)
* abs: Data types. (line 65)
* abs <1>: Data types. (line 144)
@@ -8983,7 +9010,7 @@ Index
(line 35)
* abs2: Data types. (line 65)
* abs2 <1>: Data types. (line 144)
-* absolute: Configuring. (line 43)
+* absolute: Configuring. (line 38)
* absolute <1>: three. (line 241)
* accel: Paths and guides. (line 126)
* accel <1>: Paths and guides. (line 132)
@@ -9013,21 +9040,21 @@ Index
* alias: Structures. (line 62)
* alias <1>: Arrays. (line 183)
* Align: label. (line 12)
-* aligndir: Options. (line 198)
-* all: Arrays. (line 342)
+* aligndir: Options. (line 218)
+* all: Arrays. (line 350)
* Allow: Pens. (line 363)
* and: Bezier curves. (line 56)
* AND: Arithmetic & logical.
(line 68)
* angle: Data types. (line 73)
-* animate: Configuring. (line 20)
+* animate: Configuring. (line 15)
* animate <1>: Files. (line 159)
* animate <2>: animation. (line 12)
* animation: animation. (line 6)
* animation <1>: animation. (line 6)
* annotate: annotate. (line 6)
* antialias: three. (line 261)
-* antialias <1>: Options. (line 168)
+* antialias <1>: Options. (line 187)
* append: Files. (line 38)
* append <1>: Arrays. (line 39)
* arc: Paths and guides. (line 24)
@@ -9076,12 +9103,12 @@ Index
* asy <1>: Import. (line 106)
* asy-mode: Editing modes. (line 6)
* asy.vim: Editing modes. (line 32)
-* asygl: Configuring. (line 74)
+* asygl: Configuring. (line 69)
* asyinclude: LaTeX usage. (line 45)
* Asymptote Web Application: Description. (line 6)
* asymptote.sty: LaTeX usage. (line 6)
* asymptote.xml: Editing modes. (line 48)
-* ASYMPTOTE_CONFIG: Options. (line 139)
+* ASYMPTOTE_CONFIG: Options. (line 158)
* atan: Mathematical functions.
(line 6)
* aTan: Mathematical functions.
@@ -9096,12 +9123,12 @@ Index
* attach <1>: LaTeX usage. (line 50)
* attach <2>: graph. (line 406)
* autoadjust: three. (line 418)
-* autoimport: Options. (line 135)
+* autoimport: Options. (line 154)
* automatic scaling: graph. (line 710)
* automatic scaling <1>: graph. (line 710)
* axialshade: fill. (line 43)
* axis: graph. (line 924)
-* axis <1>: graph. (line 1007)
+* axis <1>: graph. (line 1006)
* axis <2>: graph3. (line 66)
* axis <3>: graph3. (line 82)
* azimuth: Data types. (line 154)
@@ -9231,20 +9258,21 @@ Index
* CLZ: Arithmetic & logical.
(line 68)
* cm: Figure size. (line 18)
-* cmd: Configuring. (line 35)
+* cmd: Configuring. (line 30)
* cmyk: Pens. (line 38)
* colatitude: Data types. (line 159)
* color: Pens. (line 23)
+* color <1>: graph3. (line 133)
* coloredNodes: tube. (line 25)
* coloredpath: tube. (line 18)
* coloredSegments: tube. (line 25)
* colorless: Pens. (line 57)
* colors: Pens. (line 54)
* comma: Files. (line 65)
-* comma-separated-value mode: Arrays. (line 374)
+* comma-separated-value mode: Arrays. (line 382)
* command-line interface: Command-Line Interface.
(line 6)
-* command-line options: Configuring. (line 91)
+* command-line options: Configuring. (line 86)
* command-line options <1>: Options. (line 6)
* comment character: Files. (line 16)
* compass directions: Labels. (line 18)
@@ -9255,14 +9283,14 @@ Index
* conditional: Programming. (line 26)
* conditional <1>: Arithmetic & logical.
(line 61)
-* config: Configuring. (line 74)
-* config <1>: Options. (line 139)
-* configuration file: Configuring. (line 20)
-* configuration file <1>: Options. (line 139)
+* config: Configuring. (line 69)
+* config <1>: Options. (line 158)
+* configuration file: Configuring. (line 15)
+* configuration file <1>: Options. (line 158)
* configuring: Configuring. (line 6)
* conj: Data types. (line 62)
* constructors: Structures. (line 91)
-* context: Options. (line 168)
+* context: Options. (line 187)
* continue: Programming. (line 48)
* continue <1>: Debugger. (line 31)
* contour: contour. (line 6)
@@ -9270,11 +9298,11 @@ Index
* controls: Bezier curves. (line 45)
* controls <1>: three. (line 6)
* controlSpecifier: Paths and guides. (line 396)
-* convert: Configuring. (line 74)
+* convert: Configuring. (line 69)
* convert <1>: Files. (line 159)
* convert <2>: animation. (line 6)
-* convert <3>: Options. (line 168)
-* convertOptions: Options. (line 154)
+* convert <3>: Options. (line 187)
+* convertOptions: Options. (line 173)
* Coons shading: fill. (line 78)
* copy: Arrays. (line 176)
* cos: Mathematical functions.
@@ -9291,10 +9319,10 @@ Index
* cross <2>: graph. (line 480)
* crossframe: markers. (line 22)
* crosshatch: Pens. (line 302)
-* csv: Arrays. (line 374)
+* csv: Arrays. (line 382)
* CTZ: Arithmetic & logical.
(line 68)
-* cubicroots: Arrays. (line 331)
+* cubicroots: Arrays. (line 339)
* curl: Bezier curves. (line 66)
* curl <1>: three. (line 6)
* curlSpecifier: Paths and guides. (line 408)
@@ -9345,11 +9373,11 @@ Index
* delete <1>: Arrays. (line 39)
* description: Description. (line 6)
* devicepixelratio: three. (line 184)
-* diagonal: Arrays. (line 316)
+* diagonal: Arrays. (line 324)
* diamond: flowchart. (line 54)
* diffuse: three. (line 76)
* diffusepen: three. (line 66)
-* dimension: Arrays. (line 379)
+* dimension: Arrays. (line 387)
* dir: Search paths. (line 9)
* dir <1>: Data types. (line 90)
* dir <2>: Data types. (line 181)
@@ -9359,15 +9387,15 @@ Index
* directory: Files. (line 26)
* dirSpecifier: Paths and guides. (line 390)
* dirtime: Paths and guides. (line 166)
-* display: Configuring. (line 20)
+* display: Configuring. (line 15)
* do: Programming. (line 48)
* DOSendl: Files. (line 65)
* DOSnewl: Files. (line 65)
* dot: draw. (line 83)
* dot <1>: Data types. (line 103)
* dot <2>: Data types. (line 194)
-* dot <3>: Arrays. (line 271)
-* dot <4>: Arrays. (line 274)
+* dot <3>: Arrays. (line 279)
+* dot <4>: Arrays. (line 282)
* DotMargin: draw. (line 42)
* DotMargin3: three. (line 638)
* DotMargins: draw. (line 42)
@@ -9385,11 +9413,12 @@ Index
* drawing commands: Drawing commands. (line 6)
* drawline: math. (line 9)
* drawtree: drawtree. (line 6)
-* dvips: Configuring. (line 74)
-* dvipsOptions: Options. (line 154)
-* dvisvgm: Configuring. (line 74)
-* dvisvgm <1>: Options. (line 173)
-* dvisvgmOptions: Options. (line 154)
+* dvips: Configuring. (line 69)
+* dvipsOptions: Options. (line 173)
+* dvisvgm: Configuring. (line 69)
+* dvisvgm <1>: Options. (line 192)
+* dvisvgmMultipleFiles: GUI installation. (line 20)
+* dvisvgmOptions: Options. (line 173)
* E: Labels. (line 18)
* E <1>: Mathematical functions.
(line 48)
@@ -9425,13 +9454,13 @@ Index
* EndPoint: label. (line 55)
* envelope: Frames and pictures.
(line 25)
-* environment variables: Configuring. (line 95)
+* environment variables: Configuring. (line 90)
* eof: Files. (line 97)
-* eof <1>: Arrays. (line 356)
+* eof <1>: Arrays. (line 364)
* eol: Files. (line 97)
-* eol <1>: Arrays. (line 356)
+* eol <1>: Arrays. (line 364)
* EPS: label. (line 78)
-* EPS <1>: Options. (line 168)
+* EPS <1>: Options. (line 187)
* erase: Drawing in interactive mode.
(line 11)
* erase <1>: Data types. (line 257)
@@ -9522,7 +9551,7 @@ Index
* fontsize: Pens. (line 192)
* for: Programming. (line 26)
* format: Data types. (line 290)
-* format <1>: Options. (line 168)
+* format <1>: Options. (line 187)
* forum: Help. (line 6)
* frame: Frames and pictures.
(line 7)
@@ -9542,6 +9571,7 @@ Index
(line 39)
* geometry: geometry. (line 6)
* getc: Files. (line 32)
+* getint: Files. (line 122)
* getpair: Files. (line 122)
* getreal: Files. (line 122)
* getstring: Files. (line 122)
@@ -9550,7 +9580,7 @@ Index
* globalwrite: Files. (line 40)
* globalwrite <1>: Files. (line 154)
* glOptions: three. (line 261)
-* glOptions <1>: Options. (line 154)
+* glOptions <1>: Options. (line 173)
* GNU Scientific Library: Mathematical functions.
(line 48)
* gouraudshade: fill. (line 63)
@@ -9559,7 +9589,7 @@ Index
* graph: graph. (line 6)
* graph3: graph3. (line 6)
* graphic: label. (line 78)
-* graphic <1>: Options. (line 173)
+* graphic <1>: Options. (line 192)
* graphical user interface: GUI. (line 6)
* graphwithderiv: graph. (line 670)
* gray: Pens. (line 25)
@@ -9568,12 +9598,12 @@ Index
* grid: Pens. (line 285)
* grid <1>: graph. (line 766)
* grid3: grid3. (line 6)
-* gs: Configuring. (line 20)
+* gs: Configuring. (line 15)
* GSL: Compiling from UNIX source.
(line 62)
* gsl: Mathematical functions.
(line 48)
-* gsOptions: Options. (line 154)
+* gsOptions: Options. (line 173)
* GUI: GUI. (line 6)
* GUI installation: GUI installation. (line 6)
* GUI usage: GUI usage. (line 6)
@@ -9601,10 +9631,10 @@ Index
* HookHead3: three. (line 622)
* Horizontal: flowchart. (line 77)
* HTML5: three. (line 233)
-* htmlviewer: Configuring. (line 20)
-* htmlviewer <1>: Configuring. (line 43)
-* htmlviewerOptions: Options. (line 154)
-* hyperrefOptions: Options. (line 154)
+* htmlviewer: Configuring. (line 15)
+* htmlviewer <1>: Configuring. (line 38)
+* htmlviewerOptions: Options. (line 173)
+* hyperrefOptions: Options. (line 173)
* hypot: Mathematical functions.
(line 6)
* I: Mathematical functions.
@@ -9614,7 +9644,7 @@ Index
* identity: Transforms. (line 24)
* identity <1>: Mathematical functions.
(line 6)
-* identity <2>: Arrays. (line 313)
+* identity <2>: Arrays. (line 321)
* identity4: three. (line 494)
* if: Programming. (line 26)
* IgnoreAspect: Frames and pictures.
@@ -9622,9 +9652,9 @@ Index
* image: palette. (line 33)
* image <1>: palette. (line 61)
* image-based lighting: three. (line 104)
-* ImageMagick: Configuring. (line 74)
+* ImageMagick: Configuring. (line 69)
* ImageMagick <1>: animation. (line 6)
-* ImageMagick <2>: Options. (line 168)
+* ImageMagick <2>: Options. (line 187)
* images: palette. (line 6)
* implicit casts: Casts. (line 6)
* implicit linear solver: MetaPost. (line 10)
@@ -9688,7 +9718,7 @@ Index
* intMax: Data types. (line 30)
* intMin: Data types. (line 30)
* inverse: Transforms. (line 16)
-* inverse <1>: Arrays. (line 319)
+* inverse <1>: Arrays. (line 327)
* invert: three. (line 484)
* invisible: Pens. (line 43)
* isnan: Data types. (line 35)
@@ -9733,7 +9763,7 @@ Index
(line 6)
* lastcut: Paths and guides. (line 266)
* lasy-mode: Editing modes. (line 6)
-* latex: Options. (line 168)
+* latex: Options. (line 187)
* LaTeX NFSS fonts: Pens. (line 206)
* LaTeX usage: LaTeX usage. (line 6)
* latexmk: LaTeX usage. (line 30)
@@ -9741,7 +9771,7 @@ Index
* latticeshade: fill. (line 32)
* layer: Drawing commands. (line 16)
* leastsquares: stats. (line 6)
-* leastsquares <1>: graph. (line 948)
+* leastsquares <1>: graph. (line 947)
* Left: graph. (line 269)
* LeftRight: graph. (line 275)
* LeftSide: label. (line 60)
@@ -9760,20 +9790,20 @@ Index
* length <4>: Paths and guides. (line 373)
* length <5>: Arrays. (line 39)
* length <6>: three. (line 556)
-* letter: Configuring. (line 68)
+* letter: Configuring. (line 63)
* lexorder: math. (line 63)
* lexorder <1>: math. (line 66)
* libcurl: Import. (line 94)
-* libgs: Options. (line 173)
+* libgs: Options. (line 192)
* libm routines: Mathematical functions.
(line 6)
* libsigsegv: Functions. (line 100)
* libsigsegv <1>: Help. (line 27)
* light: three. (line 76)
* limits: graph. (line 639)
-* line: Arrays. (line 356)
-* line <1>: Arrays. (line 360)
-* line mode: Arrays. (line 356)
+* line: Arrays. (line 364)
+* line <1>: Arrays. (line 368)
+* line mode: Arrays. (line 364)
* Linear: graph. (line 710)
* linecap: Pens. (line 139)
* linejoin: Pens. (line 149)
@@ -9799,8 +9829,8 @@ Index
* loop: Programming. (line 26)
* LSP: Language server protocol.
(line 6)
-* lualatex: Options. (line 168)
-* luatex: Options. (line 168)
+* lualatex: Options. (line 187)
+* luatex: Options. (line 187)
* MacOS X binary distributions: MacOS X binary distributions.
(line 6)
* MacOS X configuration: Compiling from UNIX source.
@@ -9906,7 +9936,7 @@ Index
* None <1>: draw. (line 26)
* none: Files. (line 65)
* normal: three. (line 542)
-* nosafe: Options. (line 193)
+* nosafe: Options. (line 213)
* NOT: Arithmetic & logical.
(line 68)
* notaknot: graph. (line 36)
@@ -9927,7 +9957,7 @@ Index
* obliqueZ: three. (line 378)
* ode: ode. (line 6)
* offset: Pens. (line 123)
-* offset <1>: Options. (line 198)
+* offset <1>: Options. (line 218)
* OmitTick: graph. (line 223)
* OmitTickInterval: graph. (line 223)
* OmitTickIntervals: graph. (line 223)
@@ -9959,7 +9989,7 @@ Index
* outprefix: Frames and pictures.
(line 91)
* output: Files. (line 38)
-* output <1>: Options. (line 168)
+* output <1>: Options. (line 187)
* OutTicks: graph3. (line 35)
* overloading functions: Functions. (line 55)
* overwrite: Pens. (line 360)
@@ -9972,9 +10002,9 @@ Index
* pair: Figure size. (line 6)
* pair <1>: Data types. (line 46)
* pairs: Arrays. (line 245)
-* paperheight: Configuring. (line 68)
-* papertype: Configuring. (line 68)
-* paperwidth: Configuring. (line 68)
+* paperheight: Configuring. (line 63)
+* papertype: Configuring. (line 63)
+* paperwidth: Configuring. (line 63)
* parallelogram: flowchart. (line 47)
* parametric surface: graph3. (line 99)
* parametrized curve: graph. (line 639)
@@ -9992,11 +10022,11 @@ Index
* patterns: Pens. (line 271)
* patterns <1>: patterns. (line 6)
* PBR: three. (line 74)
-* PDF: Options. (line 168)
-* pdflatex: Options. (line 168)
-* pdfreloadOptions: Options. (line 154)
-* pdfviewer: Configuring. (line 20)
-* pdfviewerOptions: Options. (line 154)
+* PDF: Options. (line 187)
+* pdflatex: Options. (line 187)
+* pdfreloadOptions: Options. (line 173)
+* pdfviewer: Configuring. (line 15)
+* pdfviewerOptions: Options. (line 173)
* pen: Pens. (line 6)
* PenMargin: draw. (line 42)
* PenMargin2: three. (line 638)
@@ -10052,14 +10082,14 @@ Index
* programming: Programming. (line 6)
* pstoedit: PostScript to Asymptote.
(line 6)
-* psviewer: Configuring. (line 20)
-* psviewerOptions: Options. (line 154)
+* psviewer: Configuring. (line 15)
+* psviewerOptions: Options. (line 173)
* pt: Figure size. (line 18)
* public: Structures. (line 6)
* push: Arrays. (line 39)
* Python usage: Interactive mode. (line 72)
-* quadraticroots: Arrays. (line 322)
-* quadraticroots <1>: Arrays. (line 327)
+* quadraticroots: Arrays. (line 330)
+* quadraticroots <1>: Arrays. (line 335)
* quarticroots: math. (line 22)
* quick reference: Description. (line 92)
* quit: Drawing in interactive mode.
@@ -10083,9 +10113,9 @@ Index
(line 39)
* randMax: Mathematical functions.
(line 39)
-* read: Arrays. (line 396)
+* read: Arrays. (line 404)
* reading: Files. (line 12)
-* reading string arrays: Arrays. (line 366)
+* reading string arrays: Arrays. (line 374)
* readline: Files. (line 139)
* real: Data types. (line 35)
* realDigits: Data types. (line 35)
@@ -10093,6 +10123,7 @@ Index
* realMax: Data types. (line 35)
* realMin: Data types. (line 35)
* realmult: Data types. (line 100)
+* realschur: Arrays. (line 271)
* rectangle: flowchart. (line 34)
* recursion: Functions. (line 100)
* reference: Description. (line 92)
@@ -10106,7 +10137,7 @@ Index
* rename: Files. (line 156)
* render: three. (line 46)
* render <1>: three. (line 184)
-* render <2>: Options. (line 168)
+* render <2>: Options. (line 187)
* replace: Data types. (line 270)
* resetdefaultpen: Pens. (line 387)
* rest arguments: Rest arguments. (line 6)
@@ -10145,7 +10176,7 @@ Index
* runtime imports: Import. (line 102)
* Russian: Pens. (line 238)
* S: Labels. (line 18)
-* safe: Options. (line 193)
+* safe: Options. (line 213)
* save: Frames and pictures.
(line 288)
* saveline: Files. (line 139)
@@ -10158,6 +10189,8 @@ Index
* scale <4>: three. (line 509)
* scale3: three. (line 507)
* scaled graph: graph. (line 690)
+* schur: Arrays. (line 271)
+* schur <1>: Arrays. (line 275)
* scientific graph: graph. (line 387)
* scroll: Files. (line 113)
* search: Arrays. (line 166)
@@ -10176,8 +10209,8 @@ Index
* self operators: Self & prefix operators.
(line 6)
* sequence: Arrays. (line 118)
-* settings: Configuring. (line 20)
-* settings <1>: Options. (line 139)
+* settings: Configuring. (line 15)
+* settings <1>: Options. (line 158)
* sgn: Mathematical functions.
(line 26)
* shading: fill. (line 32)
@@ -10221,7 +10254,7 @@ Index
* size <4>: Frames and pictures.
(line 74)
* size <5>: three. (line 556)
-* size <6>: Options. (line 168)
+* size <6>: Options. (line 187)
* size3: three. (line 320)
* Slant: label. (line 42)
* slant: Transforms. (line 38)
@@ -10238,8 +10271,8 @@ Index
(line 48)
* solid: Pens. (line 102)
* solids: solids. (line 6)
-* solve: Arrays. (line 291)
-* solve <1>: Arrays. (line 307)
+* solve: Arrays. (line 299)
+* solve <1>: Arrays. (line 315)
* sort: Arrays. (line 186)
* sort <1>: Arrays. (line 190)
* sort <2>: Arrays. (line 205)
@@ -10291,9 +10324,10 @@ Index
* surface <2>: three. (line 128)
* surface <3>: three. (line 142)
* surface <4>: graph3. (line 99)
-* SVG: Options. (line 173)
+* surface <5>: graph3. (line 128)
+* SVG: Options. (line 192)
* system: Data types. (line 354)
-* system <1>: Options. (line 193)
+* system <1>: Options. (line 213)
* syzygy: syzygy. (line 6)
* tab: Files. (line 65)
* tab completion: Drawing in interactive mode.
@@ -10314,13 +10348,13 @@ Index
* tessellation: three. (line 154)
* tex: Frames and pictures.
(line 305)
-* tex <1>: Options. (line 168)
+* tex <1>: Options. (line 187)
* TeX fonts: Pens. (line 213)
* TeX string: Data types. (line 208)
-* texcommand: Configuring. (line 74)
+* texcommand: Configuring. (line 69)
* TeXHead: draw. (line 26)
* TeXHead3: three. (line 622)
-* texpath: Configuring. (line 74)
+* texpath: Configuring. (line 69)
* texpath <1>: label. (line 113)
* texpreamble: Frames and pictures.
(line 314)
@@ -10365,7 +10399,7 @@ Index
* triangle: geometry. (line 6)
* triangles: three. (line 154)
* triangulate: contour. (line 192)
-* tridiagonal: Arrays. (line 278)
+* tridiagonal: Arrays. (line 286)
* trigonometric integrals: Mathematical functions.
(line 48)
* triple: Data types. (line 137)
@@ -10424,10 +10458,10 @@ Index
(line 55)
* variable initializers: Variable initializers.
(line 6)
-* vectorfield: graph. (line 1023)
-* vectorfield <1>: graph. (line 1062)
-* vectorfield3: graph3. (line 157)
-* vectorization: Arrays. (line 335)
+* vectorfield: graph. (line 1022)
+* vectorfield <1>: graph. (line 1061)
+* vectorfield3: graph3. (line 167)
+* vectorization: Arrays. (line 343)
* verbatim: Frames and pictures.
(line 297)
* vertex-dependent colors: three. (line 119)
@@ -10448,17 +10482,17 @@ Index
* wheel mouse: GUI. (line 6)
* while: Programming. (line 48)
* White: three. (line 76)
-* white-space string delimiter mode: Arrays. (line 366)
+* white-space string delimiter mode: Arrays. (line 374)
* width: LaTeX usage. (line 50)
* windingnumber: Paths and guides. (line 283)
-* word: Arrays. (line 366)
+* word: Arrays. (line 374)
* write: Files. (line 57)
-* write <1>: Arrays. (line 405)
+* write <1>: Arrays. (line 413)
* X: three. (line 335)
* xasy: GUI. (line 6)
* xaxis3: graph3. (line 7)
* xdr: Files. (line 80)
-* xelatex: Options. (line 168)
+* xelatex: Options. (line 187)
* XEquals: graph. (line 265)
* xequals: graph. (line 278)
* xlimits: graph. (line 639)
@@ -10526,147 +10560,147 @@ Node: Installation11564
Node: UNIX binary distributions12610
Node: MacOS X binary distributions13733
Node: Microsoft Windows14321
-Node: Configuring15529
-Node: Search paths20144
-Node: Compiling from UNIX source21152
-Node: Editing modes24303
-Node: Git26725
-Node: Uninstall27232
-Node: Tutorial27578
-Node: Drawing in batch mode28425
-Node: Drawing in interactive mode29301
-Node: Figure size30333
-Node: Labels31928
-Node: Paths32756
-Ref: unitcircle33372
-Node: Drawing commands35313
-Node: draw37121
-Ref: arrows38303
-Node: fill43818
-Ref: gradient shading44864
-Node: clip49478
-Node: label50227
-Ref: Label50827
-Node: Bezier curves56684
-Node: Programming60584
-Ref: array iteration62337
-Node: Data types62504
-Ref: format73272
-Node: Paths and guides77718
-Ref: circle77972
-Ref: extension87672
-Node: Pens94482
-Ref: fillrule102173
-Ref: basealign103077
-Ref: transparency106759
-Ref: makepen110353
-Ref: overwrite111237
-Node: Transforms112451
-Node: Frames and pictures114390
-Ref: envelope115548
-Ref: size116641
-Ref: unitsize117628
-Ref: shipout118701
-Ref: filltype121052
-Ref: add124465
-Ref: add about125407
-Ref: tex128437
-Node: Files129332
-Ref: cd130389
-Ref: scroll135291
-Node: Variable initializers138209
-Node: Structures140926
-Node: Operators148499
-Node: Arithmetic & logical148813
-Node: Self & prefix operators151183
-Node: User-defined operators151977
-Node: Implicit scaling152890
-Node: Functions153453
-Ref: stack overflow156570
-Node: Default arguments156852
-Node: Named arguments157608
-Node: Rest arguments160178
-Node: Mathematical functions163299
-Node: Arrays167956
-Ref: sort175395
-Ref: tridiagonal178306
-Ref: solve179537
-Node: Slices183677
-Node: Casts187585
-Node: Import189855
-Node: Static195425
-Node: LaTeX usage198311
-Node: Base modules204826
-Node: plain207303
-Node: simplex207977
-Node: math208250
-Node: interpolate210917
-Node: geometry211196
-Node: trembling211876
-Node: stats212145
-Node: patterns212404
-Node: markers212639
-Node: map214497
-Node: tree214921
-Node: binarytree215101
-Node: drawtree215768
-Node: syzygy215969
-Node: feynman216243
-Node: roundedpath216517
-Node: animation216799
-Ref: animate217220
-Node: embed218332
-Node: slide219286
-Node: MetaPost219617
-Node: babel220333
-Node: labelpath220565
-Node: labelpath3221385
-Node: annotate221696
-Node: CAD222166
-Node: graph222476
-Ref: ticks229635
-Ref: pathmarkers243357
-Ref: marker243827
-Ref: markuniform244181
-Ref: errorbars246040
-Ref: automatic scaling251169
-Node: palette262879
-Ref: images262997
-Ref: image267293
-Ref: logimage267814
-Ref: penimage268920
-Ref: penfunctionimage269183
-Node: three269955
-Ref: PostScript3D300255
-Node: obj301993
-Node: graph3302242
-Ref: GaussianSurface307524
-Node: grid3308674
-Node: solids309502
-Node: tube310494
-Node: flowchart312766
-Node: contour317409
-Node: contour3323917
-Node: smoothcontour3324229
-Node: slopefield325948
-Node: ode327437
-Node: Options327694
-Ref: configuration file335303
-Ref: settings335303
-Ref: texengines336567
-Ref: convert336567
-Node: Interactive mode340010
-Ref: history342159
-Node: GUI343462
-Node: GUI installation344012
-Node: GUI usage345054
-Node: Command-Line Interface346117
-Node: Language server protocol347559
-Node: PostScript to Asymptote348984
-Node: Help349762
-Node: Debugger351436
-Node: Credits353192
-Node: Index354417
+Node: Configuring15518
+Node: Search paths19737
+Node: Compiling from UNIX source20745
+Node: Editing modes23896
+Node: Git26334
+Node: Uninstall26841
+Node: Tutorial27187
+Node: Drawing in batch mode28034
+Node: Drawing in interactive mode28910
+Node: Figure size29942
+Node: Labels31537
+Node: Paths32365
+Ref: unitcircle32981
+Node: Drawing commands34922
+Node: draw36730
+Ref: arrows37912
+Node: fill43427
+Ref: gradient shading44473
+Node: clip49087
+Node: label49836
+Ref: Label50436
+Node: Bezier curves56293
+Node: Programming60193
+Ref: array iteration61946
+Node: Data types62113
+Ref: format72881
+Node: Paths and guides77327
+Ref: circle77581
+Ref: extension87281
+Node: Pens94091
+Ref: fillrule101782
+Ref: basealign102686
+Ref: transparency106368
+Ref: makepen109962
+Ref: overwrite110846
+Node: Transforms112060
+Node: Frames and pictures113999
+Ref: envelope115157
+Ref: size116250
+Ref: unitsize117237
+Ref: shipout118310
+Ref: filltype120661
+Ref: add124074
+Ref: add about125016
+Ref: tex128046
+Node: Files128941
+Ref: cd129998
+Ref: scroll134900
+Node: Variable initializers137818
+Node: Structures140535
+Node: Operators148112
+Node: Arithmetic & logical148426
+Node: Self & prefix operators150796
+Node: User-defined operators151590
+Node: Implicit scaling152503
+Node: Functions153066
+Ref: stack overflow156183
+Node: Default arguments156465
+Node: Named arguments157221
+Node: Rest arguments159791
+Node: Mathematical functions162912
+Node: Arrays167569
+Ref: sort175008
+Ref: tridiagonal178246
+Ref: solve179477
+Node: Slices183617
+Node: Casts187525
+Node: Import189795
+Node: Static195365
+Node: LaTeX usage198251
+Node: Base modules204767
+Node: plain207244
+Node: simplex207918
+Node: math208191
+Node: interpolate210858
+Node: geometry211137
+Node: trembling211817
+Node: stats212086
+Node: patterns212345
+Node: markers212580
+Node: map214438
+Node: tree214862
+Node: binarytree215042
+Node: drawtree215709
+Node: syzygy215910
+Node: feynman216184
+Node: roundedpath216458
+Node: animation216740
+Ref: animate217161
+Node: embed218273
+Node: slide219227
+Node: MetaPost219558
+Node: babel220274
+Node: labelpath220506
+Node: labelpath3221326
+Node: annotate221637
+Node: CAD222107
+Node: graph222417
+Ref: ticks229576
+Ref: pathmarkers243298
+Ref: marker243768
+Ref: markuniform244122
+Ref: errorbars245981
+Ref: automatic scaling251110
+Node: palette262806
+Ref: images262924
+Ref: image267220
+Ref: logimage267741
+Ref: penimage268847
+Ref: penfunctionimage269110
+Node: three269882
+Ref: PostScript3D300157
+Node: obj301895
+Node: graph3302144
+Ref: GaussianSurface307887
+Node: grid3309037
+Node: solids309865
+Node: tube310857
+Node: flowchart313129
+Node: contour317772
+Node: contour3324280
+Node: smoothcontour3324592
+Node: slopefield326311
+Node: ode327792
+Node: Options328049
+Ref: configuration file336368
+Ref: settings336368
+Ref: texengines337632
+Ref: convert337632
+Node: Interactive mode341077
+Ref: history343226
+Node: GUI344529
+Node: GUI installation345079
+Node: GUI usage346007
+Node: Command-Line Interface347070
+Node: Language server protocol348512
+Node: PostScript to Asymptote349937
+Node: Help350715
+Node: Debugger352389
+Node: Credits354145
+Node: Index355370

End Tag Table
diff --git a/Master/texmf-dist/doc/man/man1/asy.1 b/Master/texmf-dist/doc/man/man1/asy.1
index 067d01031c6..4738bebd4e1 100644
--- a/Master/texmf-dist/doc/man/man1/asy.1
+++ b/Master/texmf-dist/doc/man/man1/asy.1
@@ -31,6 +31,12 @@ in the user's home directory using the long form:
For a complete
description, see the Info files.
.TP
+.B \-GPUblockSize n
+Compute shader block size [8].
+.TP
+.B \-GPUcompress
+Compress GPU transparent fragment counts [false].
+.TP
.B \-GPUindexing
Compute indexing partial sums on GPU [true].
.TP
@@ -38,7 +44,7 @@ Compute indexing partial sums on GPU [true].
Use fragment shader interlock [true].
.TP
.B \-GPUlocalSize n
-Compute shader local size [16].
+Compute shader local size [256].
.TP
.B \-V,\-View
View output; command-line only.
@@ -51,6 +57,7 @@ Center, Bottom, Top, or Zero page alignment [C].
.TP
.B \-aligndir pair
Directional page alignment (overrides align) [(0,0)].
+-animating [false]
.TP
.B \-antialias n
Antialiasing width for rasterized output [2].
@@ -61,7 +68,7 @@ Automatically activate 3D scene [true].
.B \-autobillboard
3D labels always face viewer by default [true].
.TP
-.B \-autoimport string
+.B \-autoimport str
Module to automatically import.
.TP
.B \-autoplain
@@ -83,22 +90,23 @@ Mask fpu exceptions in batch mode [false].
View output in batch mode [false].
.TP
.B \-bw
-Convert all colors to black and white [false].
+Convert all colors to black and white false.
.TP
.B \-cd directory
Set current directory; command-line only.
.TP
.B \-cmyk
-Convert rgb colors to cmyk [false].
+Convert rgb colors to cmyk false.
.TP
-.B \-c,\-command string
+.B \-c,\-command str
Command to autoexecute.
.TP
.B \-compact
-Conserve memory at the expense of speed [false].
+Conserve memory at the expense of speed false.
.TP
.B \-compress
Compress images in PDF output [true].
+-convertOptions str []
.TP
.B \-d,\-debug
Enable debugging messages [false].
@@ -111,39 +119,45 @@ Default output file precision [7].
.TP
.B \-divisor n
Garbage collect using purge(divisor=n) [2].
+-dvipsOptions str []
.TP
.B \-dvisvgmMultipleFiles
-dvisvgm supports multiple files [false].
+dvisvgm supports multiple files [true].
+-dvisvgmOptions str []
.TP
.B \-embed
Embed rendered preview image [true].
.TP
+.B \-e,\-environment
+Show summary of environment settings; command-line only.
+.TP
.B \-exitonEOF
Exit interactive mode on EOF [true].
.TP
.B \-fitscreen
Fit rendered image to screen [true].
.TP
-.B \-framedelay ms
-Additional frame delay [0].
-.TP
.B \-framerate frames/s
Animation speed [30].
+-glOptions str []
.TP
.B \-globalread
-Allow read from other directory [true].
+Allow read from other directory true.
.TP
.B \-globalwrite
-Allow write to other directory [false].
+Allow write to other directory false.
.TP
.B \-gray
-Convert all colors to grayscale [false].
+Convert all colors to grayscale false.
+-gsOptions str []
.TP
.B \-h,\-help
Show summary of options; command-line only.
.TP
.B \-historylines n
Retain n lines of history [1000].
+-htmlviewerOptions str
+-hyperrefOptions str [setpagesize=false,unicode,pdfborder=0 0 0]
.TP
.B \-ibl
Enable environment map image-based lighting [false].
@@ -151,10 +165,10 @@ Enable environment map image-based lighting [false].
.B \-iconify
Iconify rendering window [false].
.TP
-.B \-image string
+.B \-image str
Environment image name [snowyField].
.TP
-.B \-imageDir string
+.B \-imageDir str
Environment image library directory [ibl].
.TP
.B \-inlineimage
@@ -163,6 +177,9 @@ Generate inline embedded image [false].
.B \-inlinetex
Generate inline TeX code [false].
.TP
+.B \-inpipe n
+Input pipe [-1].
+.TP
.B \-interactiveMask
Mask fpu exceptions in interactive mode [true].
.TP
@@ -171,6 +188,7 @@ View output in interactive mode [true].
.TP
.B \-interactiveWrite
Write expressions entered at the prompt to stdout [true].
+-interrupt [false]
.TP
.B \-k,\-keep
Keep intermediate files [false].
@@ -226,14 +244,25 @@ Convert each output file to specified format.
.B \-o,\-outname name
Alternative output directory/filename.
.TP
+.B \-outpipe n
+Output pipe [-1].
+.TP
+.B \-paperheight bp
+Default page height [0].
+.TP
+.B \-paperwidth bp
+Default page width [0].
+.TP
.B \-p,\-parseonly
Parse file [false].
.TP
.B \-pdfreload
Automatically reload document in pdfviewer [false].
+-pdfreloadOptions str []
.TP
.B \-pdfreloaddelay usec
Delay before attempting initial pdf reload [750000].
+-pdfviewerOptions str []
.TP
.B \-position pair
Initial 3D rendering screen position [(0,0)].
@@ -244,11 +273,12 @@ Embed 3D PRC graphics in PDF output [false].
.B \-prerender resolution
Prerender V3D objects (0 implies vector output) [0].
.TP
-.B \-prompt string
+.B \-prompt str
Prompt [> ].
.TP
-.B \-prompt2 string
+.B \-prompt2 str
Continuation prompt for multiline input [..].
+-psviewerOptions str []
.TP
.B \-q,\-quiet
Suppress welcome text and noninteractive stdout [false].
@@ -263,10 +293,10 @@ Resize step [1.2].
reverse 3D animations [false].
.TP
.B \-rgb
-Convert cmyk colors to rgb [false].
+Convert cmyk colors to rgb false.
.TP
.B \-safe
-Disable system call [true].
+Disable system call true.
.TP
.B \-scroll n
Scroll standard output n lines at a time [0].
@@ -310,11 +340,11 @@ Run LaTeX twice (to resolve references) [false].
.B \-twosided
Use two-sided 3D lighting model for rendering [true].
.TP
-.B \-u,\-user string
+.B \-u,\-user str
General purpose user string.
.TP
.B \-v,\-verbose
-Increase verbosity level (can specify multiple times) [0].
+Increase verbosity level (can specify multiple times) 0.
.TP
.B \-version
Show version; command-line only.
@@ -328,7 +358,7 @@ Horizontal and vertical 3D viewport margin [(0.5,0.5)].
.B \-wait
Wait for child processes to finish before exiting [false].
.TP
-.B \-warn string
+.B \-warn str
Enable warning; command-line only.
.TP
.B \-webgl2
diff --git a/Master/texmf-dist/doc/man/man1/asy.man1.pdf b/Master/texmf-dist/doc/man/man1/asy.man1.pdf
index 178888cc730..cdea918dfd8 100644
--- a/Master/texmf-dist/doc/man/man1/asy.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/asy.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/citeproc-lua.man1.pdf b/Master/texmf-dist/doc/man/man1/citeproc-lua.man1.pdf
index 24853a0e2cf..2e7fee5b28d 100644
--- a/Master/texmf-dist/doc/man/man1/citeproc-lua.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/citeproc-lua.man1.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/man/man1/xasy.man1.pdf b/Master/texmf-dist/doc/man/man1/xasy.man1.pdf
index 54e303cb7f9..ad1fc1389a5 100644
--- a/Master/texmf-dist/doc/man/man1/xasy.man1.pdf
+++ b/Master/texmf-dist/doc/man/man1/xasy.man1.pdf
Binary files differ
diff --git a/Master/tlpkg/asymptote/asy.exe b/Master/tlpkg/asymptote/asy.exe
index 453d14c2fb6..1ebd1f3176c 100755
--- a/Master/tlpkg/asymptote/asy.exe
+++ b/Master/tlpkg/asymptote/asy.exe
Binary files differ
diff --git a/Master/tlpkg/asymptote64/asy.exe b/Master/tlpkg/asymptote64/asy.exe
index 2d710e2942e..731ba5456bd 100755
--- a/Master/tlpkg/asymptote64/asy.exe
+++ b/Master/tlpkg/asymptote64/asy.exe
Binary files differ
diff --git a/Master/tlpkg/bin/tl-update-asy b/Master/tlpkg/bin/tl-update-asy
index 7b0f52b211e..4a5e522e716 100755
--- a/Master/tlpkg/bin/tl-update-asy
+++ b/Master/tlpkg/bin/tl-update-asy
@@ -87,6 +87,8 @@ elif false && $update_runtime_from_ainst; then
xu=$B/source/utils
xy=$xu/asymptote
cd $xy
+ ver=`awk -F\" '{print $2}' revision.cc | sed 1q`; echo $ver
+ #
$cp binaries/i386-windows/texlive/asy.exe $pg/asymptote/
$cp binaries/x86_64-windows/texlive/asy.exe $pg/asymptote64/
# also check dlls