Description
Some text here.
Description
Some text here.
Description
Some text here.
(GraphicsLayer
  (bounds 785.00 615.00)
  (children 1
    (GraphicsLayer
      (bounds 785.00 615.00)
      (contentsOpaque 1)
      (children 1
        (GraphicsLayer
          (position 0.00 13.00)
          (bounds 602.00 602.00)
          (childrenTransform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 -0.00] [0.00 0.00 0.00 1.00])
          (children 1
            (GraphicsLayer
              (position 101.00 101.00)
              (anchor 0.57 0.50)
              (bounds 440.00 440.00)
              (preserves3D 1)
              (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
              (children 1
                (GraphicsLayer
                  (bounds 420.00 420.00)
                  (contentsOpaque 1)
                  (transform [-1.00 0.00 -0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 -1.00 0.00] [0.00 0.00 0.00 1.00])
                  (children 1
                    (GraphicsLayer
                      (bounds 420.00 420.00)
                      (children 1
                        (GraphicsLayer
                          (position 0.00 -90.00)
                          (bounds 418.00 510.00)
                          (contentsOpaque 1)
                          (children 1
                            (GraphicsLayer
                              (bounds 418.00 510.00)
                              (children 3
                                (GraphicsLayer
                                  (position -3000.00 0.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                )
                                (GraphicsLayer
                                  (position -3000.00 120.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                )
                                (GraphicsLayer
                                  (position -3000.00 240.00)
                                  (anchor 0.94 0.50)
                                  (bounds 3418.00 120.00)
                                  (usingTiledLayer 1)
                                  (drawsContent 1)
                                )
                              )
                            )
                          )
                        )
                      )
                    )
                  )
                )
              )
            )
          )
        )
      )
    )
  )
)

