├── test_pro
├── test_pro.gdb
│ ├── gdb
│ ├── timestamps
│ ├── a00000009.spx
│ ├── a00000001.gdbtable
│ ├── a00000001.gdbtablx
│ ├── a00000002.gdbtable
│ ├── a00000002.gdbtablx
│ ├── a00000003.gdbtable
│ ├── a00000004.gdbtable
│ ├── a00000004.gdbtablx
│ ├── a00000004.horizon
│ ├── a00000005.gdbtable
│ ├── a00000005.gdbtablx
│ ├── a00000006.gdbtable
│ ├── a00000006.gdbtablx
│ ├── a00000007.gdbtable
│ ├── a00000007.gdbtablx
│ ├── a00000009.freelist
│ ├── a00000009.gdbtable
│ ├── a00000009.gdbtablx
│ ├── a00000009.horizon
│ ├── a00000001.gdbindexes
│ ├── a00000003.gdbindexes
│ ├── a00000004.gdbindexes
│ ├── a00000005.gdbindexes
│ ├── a00000006.gdbindexes
│ ├── a00000007.gdbindexes
│ ├── a00000009.gdbindexes
│ ├── a00000001.TablesByName.atx
│ ├── a00000007.CatRelTypesByName.atx
│ ├── a00000005.CatItemTypesByName.atx
│ ├── a00000004.CatItemsByPhysicalName.atx
│ ├── a00000007.CatRelTypesByBackwardLabel.atx
│ ├── a00000007.CatRelTypesByForwardLabel.atx
│ ├── a00000004.spx
│ ├── a00000004.FDO_UUID.atx
│ ├── a00000006.FDO_UUID.atx
│ ├── a00000004.CatItemsByType.atx
│ ├── a00000006.CatRelsByType.atx
│ ├── a00000006.CatRelsByOriginID.atx
│ ├── a00000005.CatItemTypesByUUID.atx
│ ├── a00000006.CatRelsByDestinationID.atx
│ ├── a00000007.CatRelTypesByUUID.atx
│ ├── a00000005.CatItemTypesByParentTypeID.atx
│ ├── a00000007.CatRelTypesByDestItemTypeID.atx
│ ├── a00000007.CatRelTypesByOriginItemTypeID.atx
│ └── a00000003.gdbtablx
├── ImportLog
│ └── cf3568e975c14dc4a773bc1c883da06a_Import.xml
├── test_pro.aprx
└── test_pro.tbx
├── images
└── screenshot_hello.png
├── debugger_test.py
├── .vscode
└── launch.json
├── .gitignore
├── LICENSE
├── hello_toolbox.pyt
├── python_toolbox_template.pyt
├── field_update_code.py
├── README.md
└── field_update_tool.py
/test_pro/test_pro.gdb/gdb:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test_pro/ImportLog/cf3568e975c14dc4a773bc1c883da06a_Import.xml:
--------------------------------------------------------------------------------
1 | No error, no warning
--------------------------------------------------------------------------------
/test_pro/test_pro.aprx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.aprx
--------------------------------------------------------------------------------
/test_pro/test_pro.tbx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.tbx
--------------------------------------------------------------------------------
/images/screenshot_hello.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/images/screenshot_hello.png
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/timestamps:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/timestamps
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000009.spx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000009.spx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000001.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000001.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000001.gdbtablx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000001.gdbtablx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000002.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000002.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000002.gdbtablx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000002.gdbtablx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000003.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000003.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000004.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000004.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000004.gdbtablx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000004.gdbtablx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000004.horizon:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000004.horizon
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000005.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000005.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000005.gdbtablx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000005.gdbtablx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000006.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000006.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000006.gdbtablx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000006.gdbtablx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000007.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000007.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000007.gdbtablx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000007.gdbtablx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000009.freelist:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000009.freelist
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000009.gdbtable:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000009.gdbtable
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000009.gdbtablx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000009.gdbtablx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000009.horizon:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000009.horizon
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000001.gdbindexes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000001.gdbindexes
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000003.gdbindexes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000003.gdbindexes
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000004.gdbindexes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000004.gdbindexes
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000005.gdbindexes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000005.gdbindexes
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000006.gdbindexes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000006.gdbindexes
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000007.gdbindexes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000007.gdbindexes
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000009.gdbindexes:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000009.gdbindexes
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000001.TablesByName.atx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000001.TablesByName.atx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000007.CatRelTypesByName.atx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000007.CatRelTypesByName.atx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000005.CatItemTypesByName.atx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000005.CatItemTypesByName.atx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000004.CatItemsByPhysicalName.atx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000004.CatItemsByPhysicalName.atx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000007.CatRelTypesByBackwardLabel.atx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000007.CatRelTypesByBackwardLabel.atx
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000007.CatRelTypesByForwardLabel.atx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Wildsong/ArcGIS_Python_Template/HEAD/test_pro/test_pro.gdb/a00000007.CatRelTypesByForwardLabel.atx
--------------------------------------------------------------------------------
/debugger_test.py:
--------------------------------------------------------------------------------
1 | """
2 | This script is just here to test attaching the VS Code debugger.
3 | Run it from the command line, then connect to it from VSCode.
4 | Set a breakpoint inside the loop and it should stop there.
5 | Step through (F10) the loop a few times.
6 | When you are done you could set loop to False in the debugger
7 | to see it exit the loop and terminate.
8 | """
9 | import time
10 | import debugpy
11 | debugpy.listen(5678)
12 |
13 | tock = 1
14 | loop = True # Set this to False in the debugger to end the program.
15 |
16 | while loop :
17 | print("Tick", tock)
18 | tock += 1
19 | time.sleep(1)
20 |
21 | print("We're done here.")
22 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | // Use IntelliSense to learn about possible attributes.
3 | // Hover to view descriptions of existing attributes.
4 | // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
5 | "version": "0.2.0",
6 | "configurations": [
7 | {
8 | "name": "Python: Attach using Process Id",
9 | "type": "python",
10 | "request": "attach",
11 | "processId": "${command:pickProcess}"
12 | },
13 | {
14 | "name": "Python: Current File",
15 | "type": "python",
16 | "request": "launch",
17 | "program": "${file}",
18 | "console": "integratedTerminal"
19 | }
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # toolbox xml files are built by ArcGIS
2 | *.xml
3 |
4 | # Byte-compiled / optimized / DLL files
5 | __pycache__/
6 | *.py[cod]
7 |
8 | # C extensions
9 | *.so
10 |
11 | # Distribution / packaging
12 | .Python
13 | env/
14 | build/
15 | develop-eggs/
16 | dist/
17 | downloads/
18 | eggs/
19 | .eggs/
20 | lib/
21 | lib64/
22 | parts/
23 | sdist/
24 | var/
25 | *.egg-info/
26 | .installed.cfg
27 | *.egg
28 |
29 | # PyInstaller
30 | # Usually these files are written by a python script from a template
31 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
32 | *.manifest
33 | *.spec
34 |
35 | # Installer logs
36 | pip-log.txt
37 | pip-delete-this-directory.txt
38 |
39 | # Unit test / coverage reports
40 | htmlcov/
41 | .tox/
42 | .coverage
43 | .coverage.*
44 | .cache
45 | nosetests.xml
46 | coverage.xml
47 | *,cover
48 |
49 | # Translations
50 | *.mo
51 | *.pot
52 |
53 | # Django stuff:
54 | *.log
55 |
56 | # Sphinx documentation
57 | docs/_build/
58 |
59 | # PyBuilder
60 | target/
61 |
62 | # Some kind of Visual Studio thing?
63 | .vs/
64 |
65 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2015-2022 Brian H Wilson
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/hello_toolbox.pyt:
--------------------------------------------------------------------------------
1 | """
2 | This is the simplest python toolbox I could make, to help test your set up.
3 |
4 | @author: Brian Wilson
5 | """
6 | import arcpy
7 | import time
8 |
9 | class Toolbox(object):
10 | def __init__(self):
11 | self.label = "Hello Toolbox"
12 | self.alias = "HelloToolbox"
13 | self.tools = [Hello_Tool]
14 |
15 | class Hello_Tool(object):
16 |
17 | def __init__(self):
18 | self.label = "Hello Tool"
19 | self.description = "Sends a friendly greeting as a message."
20 | self.canRunInBackground = False
21 | return
22 |
23 | def getParameterInfo(self):
24 | # I have no parameters!
25 | return []
26 |
27 | def isLicensed(self):
28 | return True
29 |
30 | def updateParameters(self, parameters):
31 | return
32 |
33 | def updateMessages(self, parameters):
34 | return
35 |
36 | def execute(self, parameters, messages):
37 | messages.addMessage("Hello, ArcGIS!")
38 | # Pretend we're doing something.
39 | loop = 5
40 | while loop:
41 | loop -= 1
42 | time.sleep(1)
43 | messages.addMessage("Process completed successfully!")
44 | return
45 |
46 | # Unit test
47 | if __name__ == "__main__":
48 |
49 | class Messenger(object):
50 | def addMessage(self, message):
51 | print(message)
52 |
53 | hello = Hello_Tool()
54 | hello.execute(None, Messenger())
55 |
56 | # That's all!
57 |
--------------------------------------------------------------------------------
/python_toolbox_template.pyt:
--------------------------------------------------------------------------------
1 | """
2 | Python Toolbox Template (a ".pyt" file)
3 |
4 | @author: Brian Wilson
5 | """
6 | from __future__ import print_function
7 | import arcpy
8 |
9 | # This is for development, so that you can edit code while running in ArcGIS Pro.
10 | import importlib
11 | import field_update_tool
12 | importlib.reload(field_update_tool)
13 |
14 | # Import all the tool classes that will be included in this toolbox.
15 | from field_update_tool import Field_Update_tool
16 | #from python_tool_template import Sample_Tool_2
17 |
18 | class Toolbox(object):
19 | def __init__(self):
20 | """Define the toolbox (the name of the toolbox is the name of this .pyt file)."""
21 | self.description = """Sample toolbox containing sample tools."""
22 |
23 | self.label = "My Python Toolbox"
24 | self.alias = "SampleToolbox" # no special characters including spaces!
25 | self.description = """My toolbox containing python tools!"""
26 |
27 | # List of tool classes associated with this toolbox
28 | self.tools = [
29 | Field_Update_tool,
30 | #Sample_Tool_2
31 | ]
32 |
33 | def list_tools():
34 | toolbox = Toolbox()
35 | print("toolbox:", toolbox.label)
36 | print("description:", toolbox.description)
37 | print("tools:")
38 | for t in toolbox.tools:
39 | tool = t()
40 | print(' ', tool.label)
41 | print(' description:', tool.description)
42 | for param in tool.getParameterInfo():
43 | print(' ',param.name,':',param.displayName)
44 | print()
45 |
46 |
47 | if __name__ == "__main__":
48 | # Running this as a standalone script lists information about the toolbox and each tool.
49 | list_tools()
50 | #exit(0) # This causes the toolbox not to load in ArcGIS Pro. Whatever.
51 |
52 | # That's all!
53 |
--------------------------------------------------------------------------------
/field_update_code.py:
--------------------------------------------------------------------------------
1 | """
2 | This script contains the business logic for a sample in the ArcGIS Python Toolbox.
3 |
4 | It shows how to iterate a feature class and update a field with a new value.
5 | You could more easily do this using a call to arcpy.CalculateField_management()
6 | but that's not as interesting an example!
7 |
8 | @author: Brian Wilson
9 | """
10 | from __future__ import print_function
11 | from collections import namedtuple
12 | from datetime import datetime
13 | from time import sleep
14 | import arcpy
15 |
16 | __version__ = "2020-07-16.1"
17 |
18 | def set_field_value(input_fc, fieldname, value):
19 | """ Update the named field in every row of the input feature class with the given value. """
20 |
21 | arcpy.AddMessage("Version %s" % __version__)
22 | print("field, value = ", fieldname, value)
23 |
24 | start = 0
25 | step = 1
26 | maxcount = int(arcpy.GetCount_management(input_fc).getOutput(0))
27 |
28 | arcpy.SetProgressor("step", "Doing serious work here.", start, maxcount, step)
29 |
30 | # We don't use OID here, this just an example
31 | # The updateRow operation is faster if you load only the fields you need,
32 | # in our case that would be specified by 'fieldname'.
33 | fields = ["OID@", fieldname]
34 |
35 | with arcpy.da.UpdateCursor(input_fc, fields) as cursor:
36 | t = 0
37 | for row in cursor:
38 | msg = "Working.. step %d of %d" % (t,maxcount)
39 | print(msg) # This shows up in the IDE Debug Console.
40 |
41 | arcpy.SetProgressorLabel(msg)
42 |
43 | # If there is a type error here, I really expect arcpy
44 | # to throw an error but it does not appear to!
45 | row[1] = value
46 | cursor.updateRow(row)
47 | sleep(.50) # pretend we're doing something so progressor will work.
48 | arcpy.SetProgressorPosition(t)
49 | t += 1
50 | return
51 |
52 | def dump_contents(input_fc):
53 | """ Print the contents of the feature class, this is just a namedtuple sample. """
54 | fcrow = namedtuple("fcrow", ["oid", "datestamp"])
55 | with arcpy.da.SearchCursor(input_fc, ["OID@", "datestamp"]) as cursor:
56 | for row in cursor:
57 | feature = fcrow._make(row)
58 | print(feature.oid, feature.datestamp)
59 | return
60 |
61 | # ======================================================================
62 |
63 | # UNIT TESTING
64 | # You can run this file directly when writing it to aid in debugging.
65 | # For example, "Set as Startup File" when running under Visual Studio.
66 |
67 | if __name__ == '__main__':
68 | arcpy.env.workspace = ".\\test_pro\\test_pro.gdb"
69 | input_fc = "testing_data"
70 | fieldname = "datestamp"
71 | datestring = datetime.datetime.today().strftime("%Y/%m/%d %H:%M:%S")
72 |
73 | arcpy.AddMessage("starting geoprocessing")
74 | set_field_value(input_fc, fieldname, datestring)
75 |
76 | dump_contents(input_fc)
77 |
78 | print("Tests successful!")
79 |
80 | # That's all
81 |
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000004.spx:
--------------------------------------------------------------------------------
1 | @
--------------------------------------------------------------------------------
/test_pro/test_pro.gdb/a00000004.FDO_UUID.atx:
--------------------------------------------------------------------------------
1 | {3BD19A64-EB37-4CCA-BD3D-CEA18B092465}{86A0B8D2-CCAD-41B8-84B5-C8332E3063E0}{D9773CF2-D3DE-4402-8F6F-1A3A6CD96004} &