- [x] Runner - [x] Catalog - [x] Web Client - [x] Deployed to beta - [x] Deployed to prod Co-authored-by: Adam Veldhousen <adamveld12@gmail.com> Reviewed-on: #1feat/swagger
@ -0,0 +1,41 @@
|
||||
kind: pipeline
|
||||
type: kubernetes
|
||||
name: Build Images
|
||||
|
||||
trigger:
|
||||
event:
|
||||
- push
|
||||
|
||||
steps:
|
||||
- name: Build & Publish Catalog
|
||||
image: plugins/kaniko
|
||||
settings:
|
||||
dockerfile: "./src/Dockerfile.prod-backend"
|
||||
context: "./src"
|
||||
registry: git.vdhsn.com
|
||||
repo: git.vdhsn.com/barretthousen/service-catalog
|
||||
username:
|
||||
from_secret: DOCKER_USERNAME
|
||||
password:
|
||||
from_secret: DOCKER_PASSWORD
|
||||
args:
|
||||
- "service=catalog"
|
||||
no-push: true
|
||||
tags:
|
||||
- ${DRONE_COMMIT_SHA}
|
||||
- name: Build & Publish Runner
|
||||
image: plugins/kaniko
|
||||
settings:
|
||||
dockerfile: "./src/Dockerfile.prod-backend"
|
||||
context: "./src"
|
||||
registry: git.vdhsn.com
|
||||
repo: git.vdhsn.com/barretthousen/service-runner
|
||||
username:
|
||||
from_secret: DOCKER_USERNAME
|
||||
password:
|
||||
from_secret: DOCKER_PASSWORD
|
||||
args:
|
||||
- "service=runner"
|
||||
no-push: true
|
||||
tags:
|
||||
- ${DRONE_COMMIT_SHA}
|
@ -0,0 +1,32 @@
|
||||
.kubeconfig
|
||||
.env
|
||||
.env.*
|
||||
.vscode
|
||||
./src/.idea
|
||||
|
||||
|
||||
# build output
|
||||
.bin
|
||||
|
||||
# auto generated files
|
||||
*.pb.go
|
||||
*.pb.gw.go
|
||||
*.swagger.json
|
||||
|
||||
src/**/internal/data/postgres/*.go
|
||||
|
||||
|
||||
# frontend
|
||||
node_modules
|
||||
./src/web-client/build
|
||||
./src/web-client/.svelte-kit
|
||||
./src/web-client/package
|
||||
vite.config.js.timestamp-*
|
||||
vite.config.ts.timestamp-*
|
||||
|
||||
|
||||
.DS_Store
|
||||
|
||||
|
||||
# keys
|
||||
.age.txt
|
@ -0,0 +1,6 @@
|
||||
creation_rules:
|
||||
- path_regex: env/master\.json$
|
||||
pgp: 4FA79E5B6598505C8DFA30A7A466CEE1415C0B9C
|
||||
- path_regex: env/base/.*\.yaml$
|
||||
encrypted_regex: ^(data|stringData)$
|
||||
age: age1d5vst0g82v6xml29ydsrxefmf3vclgm6dj3npw6mefa7yu9xueaqztjqlg
|
@ -0,0 +1,11 @@
|
||||
tilt 0.32.3
|
||||
ctlptl 0.8.18
|
||||
kind 0.18.0
|
||||
kustomize 5.0.1
|
||||
kubectl 1.26.3
|
||||
buf 1.17.0
|
||||
k9s 0.26.3
|
||||
golang 1.19
|
||||
nodejs lts
|
||||
sops 3.7.3
|
||||
jq 1.6
|
@ -0,0 +1,30 @@
|
||||
{
|
||||
// Use IntelliSense to learn about possible attributes.
|
||||
// Hover to view descriptions of existing attributes.
|
||||
// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
|
||||
"version": "0.2.0",
|
||||
"configurations": [
|
||||
{
|
||||
"name": "Delve into Runner",
|
||||
"type": "go",
|
||||
"request": "attach",
|
||||
"mode": "remote",
|
||||
"port": 2345,
|
||||
"host": "127.0.0.1",
|
||||
"trace": "verbose",
|
||||
// "remotePath": "/go",
|
||||
"cwd": "${workspaceFolder}",
|
||||
},
|
||||
{
|
||||
"name": "Delve into Catalog",
|
||||
"type": "go",
|
||||
"request": "attach",
|
||||
"mode": "remote",
|
||||
"port": 2346,
|
||||
"host": "127.0.0.1",
|
||||
"trace": "verbose",
|
||||
"cwd": "${workspaceFolder}",
|
||||
// "remotePath": "/go"
|
||||
}
|
||||
]
|
||||
}
|
@ -0,0 +1,126 @@
|
||||
K8S_VERSION = v1.26.3
|
||||
KUBECONFIG = $(PWD)/.kubeconfig
|
||||
CLUSTER = $(shell kind get clusters | grep 'bh-local')
|
||||
GOBIN = $(shell go env GOPATH)/bin
|
||||
|
||||
###################
|
||||
# Utilities
|
||||
###################
|
||||
|
||||
.PHONY: setup
|
||||
setup: $(GOBIN)/sqlc $(GOBIN)/buf
|
||||
@awk '{ print $$1 }' .tool-versions | xargs -I {} asdf plugin add {} || true
|
||||
@asdf install || true
|
||||
|
||||
.PHONY: gen
|
||||
gen: $(GOBIN)/sqlc buf.lock
|
||||
@$(GOBIN)/sqlc generate -f ./src/sqlc.yaml
|
||||
@cd ./src && $(GOBIN)/buf generate
|
||||
@cd ./src/web-client && npm i
|
||||
@cd ./src/admin-client && npm i
|
||||
|
||||
.PHONY: dev
|
||||
dev: .kubeconfig
|
||||
KUBECONFIG=$(KUBECONFIG) tilt up
|
||||
|
||||
.PHONY: clobber
|
||||
clobber:
|
||||
KUBECONFIG=$(KUBECONFIG) ctlptl delete registry kind-bh-registry || true
|
||||
KUBECONFIG=$(KUBECONFIG) ctlptl delete cluster kind-bh-local || true
|
||||
@rm -f $(KUBECONFIG)
|
||||
|
||||
.PHONY: secrets
|
||||
secrets: ./env/.age.txt
|
||||
|
||||
.PHONY: acceptance-test
|
||||
acceptance-test:
|
||||
@docker run -it --rm \
|
||||
-v $(PWD)/src/$(SERVICE)/acceptance-tests.yml:/tests/tests.yml \
|
||||
-e "TEST_HOST=$(ORIGIN)" \
|
||||
nytimes/httptest
|
||||
|
||||
|
||||
##############################
|
||||
# Container Image Building
|
||||
# see ./doc/deployment.md for details
|
||||
##############################
|
||||
|
||||
SERVICE = "catalog"
|
||||
ENV ?= ""
|
||||
BUILD_INITIATOR = "Development Machine"
|
||||
VERSION = $(shell git rev-parse --verify --short HEAD)
|
||||
GIT_REF = $(shell git rev-parse --verify HEAD)
|
||||
BUILD_DATE := $(shell date +%Y-%m-%d-%T)
|
||||
|
||||
.PHONY: build-client-image
|
||||
build-client-image:
|
||||
@docker build --target=production \
|
||||
--label 'com.barretthousen.service=$(SERVICE)' \
|
||||
--label 'com.barretthousen.version=$(VERSION)' \
|
||||
--label 'com.barretthousen.git-ref=$(GIT_REF)' \
|
||||
--label 'com.barretthousen.build-date=$(BUILD_DATE)' \
|
||||
--label 'com.barrethousen.builder=$(BUILD_INITIATOR)' \
|
||||
--build-arg 'service=$(SERVICE)' \
|
||||
-t barretthousen/client-$(SERVICE):$(VERSION) \
|
||||
-t git.vdhsn.com/barretthousen/client-$(SERVICE):$(VERSION) \
|
||||
-f ./src/Dockerfile.frontend ./src/$(SERVICE)
|
||||
|
||||
@docker push git.vdhsn.com/barretthousen/client-$(SERVICE):$(VERSION)
|
||||
@[ ! -z $(ENV) ] && docker tag git.vdhsn.com/barretthousen/client-$(SERVICE):$(VERSION) git.vdhsn.com/barretthousen/client-$(SERVICE):beta || true
|
||||
@[ ! -z $(ENV) ] && docker push git.vdhsn.com/barretthousen/client-$(SERVICE):$(ENV) || true
|
||||
|
||||
.PHONY: build-backend-image
|
||||
build-backend-image:
|
||||
@docker build --target=production \
|
||||
--label 'com.barretthousen.service=$(SERVICE)' \
|
||||
--label 'com.barretthousen.version="$(VERSION)"' \
|
||||
--label 'com.barretthousen.git-ref="$(GIT_REF)"' \
|
||||
--label 'com.barretthousen.build-date=$(BUILD_DATE)' \
|
||||
--label 'com.barrethousen.builder=$(BUILD_INITIATOR)' \
|
||||
--build-arg 'service=$(SERVICE)' \
|
||||
-t barretthousen/service-$(SERVICE):$(VERSION) \
|
||||
-t git.vdhsn.com/barretthousen/service-$(SERVICE):$(VERSION) \
|
||||
-f ./src/Dockerfile.prod-backend ./src
|
||||
|
||||
@docker push git.vdhsn.com/barretthousen/service-$(SERVICE):$(VERSION)
|
||||
|
||||
@[ ! -z $(ENV) ] && docker tag git.vdhsn.com/barretthousen/service-$(SERVICE):$(VERSION) git.vdhsn.com/barretthousen/service-$(SERVICE):beta || true
|
||||
@[ ! -z $(ENV) ] && docker push git.vdhsn.com/barretthousen/service-$(SERVICE):beta || true
|
||||
|
||||
# TODO: investigate tagging without needing to pull? https://dille.name/blog/2018/09/20/how-to-tag-docker-images-without-pulling-them/
|
||||
.PHONY: promote-client-prod
|
||||
promote-client-prod:
|
||||
@docker pull git.vdhsn.com/barretthousen/client-$(SERVICE):beta
|
||||
@docker tag git.vdhsn.com/barretthousen/client-$(SERVICE):beta git.vdhsn.com/barretthousen/client-$(SERVICE):prod
|
||||
@docker push git.vdhsn.com/barretthousen/client-$(SERVICE):prod
|
||||
|
||||
.PHONY: promote-backend-prod
|
||||
promote-backend-prod:
|
||||
@docker pull git.vdhsn.com/barretthousen/service-$(SERVICE):beta
|
||||
@docker tag git.vdhsn.com/barretthousen/service-$(SERVICE):beta git.vdhsn.com/barretthousen/service-$(SERVICE):prod
|
||||
@docker push git.vdhsn.com/barretthousen/service-$(SERVICE):prod
|
||||
|
||||
####################
|
||||
# File targets
|
||||
####################
|
||||
buf.lock: $(GOBIN)/buf
|
||||
@$(GOBIN)/buf mod update ./src
|
||||
|
||||
$(GOBIN)/buf:
|
||||
@go install github.com/bufbuild/buf/cmd/buf@v1.17.0
|
||||
|
||||
$(GOBIN)/sqlc:
|
||||
@go install github.com/kyleconroy/sqlc/cmd/sqlc@latest
|
||||
|
||||
.kubeconfig:
|
||||
@KUBECONFIG=$(KUBECONFIG) ctlptl create registry kind-bh-registry --port=5005
|
||||
@KUBECONFIG=$(KUBECONFIG) ctlptl create cluster kind --name=kind-bh-local --registry=kind-bh-registry --kubernetes-version $(K8S_VERSION)
|
||||
@kind get kubeconfig --name=bh-local > .kubeconfig
|
||||
|
||||
# used to encrypt/decrypt sensitive values with sops
|
||||
age_identity=$(shell sops -d ./env/master.json)
|
||||
./env/.age.txt:
|
||||
@echo "# created: $(shell echo '$(age_identity)' | jq -r '.created')" >> $@
|
||||
@echo "# public key: $(shell echo '$(age_identity)' | jq -r '.public_key')" >> $@
|
||||
@echo "$(shell echo '$(age_identity)' | jq -r '.private_key')" >> $@
|
||||
@echo "$@ created!"
|
@ -0,0 +1,165 @@
|
||||
print("""
|
||||
-----------------------------------------------------------------
|
||||
✨ Starting up Barretthousen stack
|
||||
-----------------------------------------------------------------
|
||||
""".strip())
|
||||
|
||||
load('ext://helm_resource', 'helm_resource', 'helm_repo')
|
||||
load('ext://deployment', 'deployment_create')
|
||||
load('ext://restart_process', 'docker_build_with_restart')
|
||||
|
||||
helm_repo('bitnami', 'https://charts.bitnami.com/bitnami', labels=["9-repos"])
|
||||
helm_repo('traefik', 'https://traefik.github.io/charts', labels=["9-repos"])
|
||||
helm_repo('grafana', 'https://grafana.github.io/helm-charts', labels=["9-repos"])
|
||||
|
||||
helm_resource(
|
||||
'ingress',
|
||||
'traefik/traefik',
|
||||
namespace='barretthousen-local',
|
||||
flags=[
|
||||
'--set', 'logs.access.enabled=true'
|
||||
],
|
||||
port_forwards=[
|
||||
port_forward(8000, 8000, name="Traefik HTTP :8000"),
|
||||
port_forward(9000, 9000, name='Traefik Dashboard', link_path='/dashboard/#/')
|
||||
],
|
||||
resource_deps=['traefik'],
|
||||
labels=["1-ingress"]
|
||||
)
|
||||
|
||||
k8s_resource(
|
||||
workload='ingress',
|
||||
labels='1-ingress',
|
||||
links=[
|
||||
link(url='http://admin.localhost:8000', name='admin.localhost'),
|
||||
link(url='http://bh.localhost:8000', name='bh.localhost'),
|
||||
]
|
||||
)
|
||||
|
||||
helm_resource(
|
||||
'postgres',
|
||||
'bitnami/postgresql',
|
||||
namespace='barretthousen-local',
|
||||
flags=[
|
||||
'--set', 'fullnameOverride=bh-db',
|
||||
'--set', 'auth.enablePostgresUser=true',
|
||||
'--set', 'auth.postgresPassword=bh-admin',
|
||||
'--set', 'auth.database=bh',
|
||||
],
|
||||
port_forwards=[port_forward(5432, 5432, name='BH DB')],
|
||||
resource_deps=['bitnami'],
|
||||
labels=["9-data"]
|
||||
)
|
||||
|
||||
def bh_client(service="", port_forwards=[], labels=['2-services'], deps=['ingress']):
|
||||
basepath = './src/{}-client'.format(service)
|
||||
docker_build(
|
||||
ref='barretthousen/client-{}-client'.format(service),
|
||||
context=basepath,
|
||||
dockerfile='./src/Dockerfile.frontend'.format(service),
|
||||
target='development',
|
||||
build_args={
|
||||
"service": service
|
||||
},
|
||||
entrypoint='vite dev --port=80 --host=0.0.0.0 --strictPort --logLevel info',
|
||||
live_update=[
|
||||
sync(basepath + '/src', '/opt/{}-client/src'.format(service)),
|
||||
sync(basepath + '/static', '/opt/{}-client/static'.format(service)),
|
||||
run('cd {} && npm install'.format(basepath), trigger=[basepath+'/package.json', basepath+'/package.lock.json'])
|
||||
]
|
||||
)
|
||||
|
||||
k8s_resource(
|
||||
workload='{}-client-local'.format(service),
|
||||
port_forwards=port_forwards,
|
||||
labels=['2-services'],
|
||||
resource_deps=deps
|
||||
)
|
||||
|
||||
def bh_backend_service(service="", port_forwards=[], migrateDB=False, devMode=True, labels=['2-services'], deps=['postgres']):
|
||||
local_resource(
|
||||
'{}-go-compile'.format(service),
|
||||
'CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -gcflags "all=-N -l" -o .bin/{}-debug ./src/{}'.format(service, service),
|
||||
deps=['./src/{}'.format(service), './src/lib'],
|
||||
resource_deps=deps,
|
||||
labels=['3-compilation']
|
||||
)
|
||||
|
||||
# complains about grpc port still being in use, so maybe the service isn't exiting cleanly
|
||||
entry_cmd = [
|
||||
'/go/bin/dlv',
|
||||
'--headless',
|
||||
'--listen=0.0.0.0:2345',
|
||||
'--api-version=2',
|
||||
'--log',
|
||||
'--accept-multiclient',
|
||||
'--log-output=rpc',
|
||||
'exec',
|
||||
'/opt/{}-debug'.format(service),
|
||||
'--continue'
|
||||
]
|
||||
|
||||
if migrateDB:
|
||||
entry_cmd += ['--', '-migrate']
|
||||
|
||||
docker_build_with_restart(
|
||||
ref="barretthousen/service-{}".format(service),
|
||||
dockerfile="./src/Dockerfile.dev-backend",
|
||||
context=".",
|
||||
entrypoint=entry_cmd,
|
||||
build_args={
|
||||
"service": service
|
||||
},
|
||||
trigger = [
|
||||
'./.bin/{}-debug'.format(service)
|
||||
],
|
||||
only = [
|
||||
'./.bin/{}-debug'.format(service),
|
||||
'./src/runner',
|
||||
'./src/catalog',
|
||||
'./src/proxy-admin',
|
||||
'./src/proxy-web',
|
||||
'./src/lib'
|
||||
],
|
||||
live_update=[
|
||||
sync('./.bin', '/opt'),
|
||||
sync('./src', '/go/src'),
|
||||
]
|
||||
)
|
||||
|
||||
k8s_resource(
|
||||
workload='{}-local'.format(service),
|
||||
port_forwards=port_forwards,
|
||||
labels=labels,
|
||||
resource_deps=deps,
|
||||
)
|
||||
|
||||
|
||||
k8s_yaml(
|
||||
kustomize("./env/local")
|
||||
)
|
||||
|
||||
k8s_resource(
|
||||
workload='runner-sync-local',
|
||||
labels='2-services'
|
||||
)
|
||||
|
||||
|
||||
bh_backend_service(service="runner", migrateDB=True, port_forwards=[
|
||||
port_forward(2345, name='Delve port')
|
||||
])
|
||||
|
||||
bh_backend_service(service="catalog", migrateDB=True, port_forwards=[
|
||||
port_forward(2346, 2345, name='Delve port')
|
||||
])
|
||||
|
||||
bh_backend_service(service="proxy-admin", port_forwards=[
|
||||
port_forward(8082, 80, name="HTTP API @ localhost:8082")
|
||||
], deps=['ingress'])
|
||||
|
||||
bh_backend_service(service="proxy-web", port_forwards=[
|
||||
port_forward(8081, 80, name="HTTP API @ localhost:8081")
|
||||
], deps=['ingress'])
|
||||
|
||||
bh_client(service='web')
|
||||
bh_client(service='admin')
|
@ -0,0 +1,51 @@
|
||||
# Auction site sources
|
||||
|
||||
|
||||
|
||||
| Name | API Available | Implemented |
|
||||
|------------------|---------------|-------------|
|
||||
| [Live Auctioneers](https://www.liveauctioneers.com/) | | JSON | :check: |
|
||||
| [Catawiki](https://www.catawiki.com/en/) | | JSON | |
|
||||
| [ProxiBid](https://www.proxibid.com/) | | None | |
|
||||
| [The Saleroom](https://www.the-saleroom.com) | | None | |
|
||||
| [Bonhams](https://www.bonhams.com) | | JSON | |
|
||||
|
||||
- Bonhams
|
||||
```
|
||||
curl 'https://www.bonhams.com/_next/data/AaGLQwUcnyWHq-PEz9Th6/default/auctions/upcoming.json' \
|
||||
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0' \
|
||||
-H 'Accept: */*' \
|
||||
-H 'Accept-Language: en-US,en;q=0.5' \
|
||||
-H 'Accept-Encoding: gzip, deflate, br' \
|
||||
-H 'Referer: https://www.bonhams.com/auctions/upcoming/' \
|
||||
-H 'x-nextjs-data: 1' \
|
||||
-H 'sentry-trace: 1ad7f55ff4dd4760b0ad3e6cca968714-823c0cb4ef9058f5-0' \
|
||||
-H 'baggage: sentry-environment=production,sentry-release=0783195e,sentry-transaction=%2Fauctions%2Fupcoming,sentry-public_key=614543fea9dc4eee80879fcc1c88e34a,sentry-trace_id=1ad7f55ff4dd4760b0ad3e6cca968714,sentry-sample_rate=0' \
|
||||
-H 'DNT: 1' \
|
||||
-H 'Connection: keep-alive' \
|
||||
-H 'Cookie: sessionid=m2crnnyyduu2tm6hvx3aa1e6wzy5oez9; ld_id=2420; xm_id=c22a8252-23ba-4b2e-8161-35ae5b8b56ff' \
|
||||
-H 'Sec-Fetch-Dest: empty' \
|
||||
-H 'Sec-Fetch-Mode: cors' \
|
||||
-H 'Sec-Fetch-Site: same-origin' \
|
||||
-H 'Pragma: no-cache' \
|
||||
-H 'Cache-Control: no-cache'
|
||||
```
|
||||
|
||||
|
||||
|
||||
|
||||
- Catawiki
|
||||
```
|
||||
curl 'https://www.catawiki.com/buyer/api/v1/auctions?locale=en&per_page=25' \
|
||||
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/113.0' \
|
||||
-H 'Accept: application/json' \
|
||||
-H 'Accept-Language: en-US,en;q=0.5' \
|
||||
-H 'Accept-Encoding: gzip, deflate, br' \
|
||||
-H 'Referer: https://www.catawiki.com/en/' \
|
||||
-H 'DNT: 1' \
|
||||
-H 'Connection: keep-alive' \
|
||||
-H 'Cookie: ab_first_visit=1; absmartly_id=a808d691-6a64-4797-bf77-97516c2917a9; cw_sid=2e67590dbaee388af8b5f1a59b4dd12f5d01759bc6a4603c6a8ae1add4637bdd; cw_ab=eaVcsgJ5TBW7bkaaWxN/6QAB; enable_marketing_cookies=true; enable_analytical_cookies=true; cookie_preferences_used_cta=accept_all; has_pending_cookie_consent_sync=true; rmb_disabled_at=1684553408868; _catawiki_session=KQn7aiPKK6FUaO8zr8yfwrAVUtfKv6wXQ9ntoW00Qux19aliGIcXXNUs6vmomxsOSruGU%2Bn%2BsNp8%2FzessvIc4ZZ7wkWJkhiHKHhV13dBUYm4Tu3SvP2nOPKXFzBJngnwgJRh%2BUIdoTv86KDmB%2B8%3D--aRi3oNveTClu9Grs--CFMYiz%2BOtTknj34sB2fblQ%3D%3D' \
|
||||
-H 'Pragma: no-cache' \
|
||||
-H 'Cache-Control: no-cache' \
|
||||
-H 'TE: trailers'
|
||||
```
|
@ -1,637 +0,0 @@
|
||||
<mxfile host="app.diagrams.net" modified="2023-04-16T17:34:01.973Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/111.0" etag="g01UfqVrYfXmJxj10a0k" version="21.1.7" type="device">
|
||||
<diagram name="High level" id="BL8KaFisCtBiJRqkGTb9">
|
||||
<mxGraphModel dx="3802" dy="1124" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-1" value="<div>Web Client</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry y="110" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-39" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-2" target="H4J2X_9uFRljxSkwpIMP-36">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-2" value="<div>Users</div>" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="-310" y="110" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0;entryDx=0;entryDy=52.5;entryPerimeter=0;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-3" target="JNN8aSlnDbWN0y9jmZyT-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-3" value="<div>Catalog</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="150" y="200" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-10" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1.013;exitY=0.613;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-1" target="JNN8aSlnDbWN0y9jmZyT-3">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="-80" y="130" as="sourcePoint" />
|
||||
<mxPoint y="150" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-25" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0;entryDx=0;entryDy=52.5;entryPerimeter=0;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-11" target="JNN8aSlnDbWN0y9jmZyT-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-11" value="<div>Ringman</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="150" y="90" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-12" value="" style="endArrow=classic;html=1;rounded=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;exitX=1;exitY=0.6;exitDx=0;exitDy=0;exitPerimeter=0;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-1" target="JNN8aSlnDbWN0y9jmZyT-11">
|
||||
<mxGeometry width="50" height="50" relative="1" as="geometry">
|
||||
<mxPoint x="-70" y="140" as="sourcePoint" />
|
||||
<mxPoint x="10" y="300" as="targetPoint" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-17" value="<div>BHDB</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="470" y="110" width="60" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-19" target="JNN8aSlnDbWN0y9jmZyT-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-19" value="<div>Runner</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="460" y="290" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-20" value="<div>Runner</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="470" y="300" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-21" value="<div>Runner</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="480" y="310" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-22" value="<div>Runner</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="490" y="320" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-26" value="<div>Catalog</div>" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="-190" y="440" width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-27" value="GetUpcoming(searchCriteria)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-26">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-1" value="<div>CreateUpcoming(Sale)</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-26">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-30" value="<div>Ringman</div>" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry y="440" width="180" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-31" value="Subscribe(email)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-30">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-3" value="VerifySubscription(email,token)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-30">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-32" value="<div>Unsubscribe(email)</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-30">
|
||||
<mxGeometry y="90" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-33" value="<div>SendEmails()</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-30">
|
||||
<mxGeometry y="120" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-34" value="GetJobs(searchCriteria)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-30">
|
||||
<mxGeometry y="150" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-34" value="Runner" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="193" y="440" width="177" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-35" value="<div>FindNewUpcoming(criteria)<br></div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-34">
|
||||
<mxGeometry y="30" width="177" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-1" value="GetJobs(searchCriteria)" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-34">
|
||||
<mxGeometry y="60" width="177" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-64" value="<div>Auction</div>" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="-190" y="680" width="180" height="300" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-65" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-66" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-65">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-67" value="ID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-65">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-68" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-69" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-68">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-70" value="Title" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-68">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-71" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="90" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-72" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-71">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-73" value="Description" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-71">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-74" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="120" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-75" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-74">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-76" value="<div>StartTS</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-74">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-121" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="150" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-122" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-121">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-123" value="<div>EndTS</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-121">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-118" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="180" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-119" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-118">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-120" value="<div>SourceSiteName</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-118">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-81" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="210" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-82" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-81">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-83" value="<div>SourceURL</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-81">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-84" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="240" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-85" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-84">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-86" value="Photo1" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-84">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-87" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-64">
|
||||
<mxGeometry y="270" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-88" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-87">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-89" value="Photo2" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-87">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-93" value="<div>User</div>" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry y="680" width="180" height="150" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-94" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-93">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-95" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-94">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-96" value="ID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-94">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-146" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-93">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-147" value="UQ" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-146">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-148" value="EmailAddress" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-146">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-97" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-93">
|
||||
<mxGeometry y="90" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-98" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-97">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-99" value="EmailVerifiedTS" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-97">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-4" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-93">
|
||||
<mxGeometry y="120" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-5" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-4">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-6" value="CreatedTS" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-4">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-124" value="<div>ScrapeJob</div>" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="193" y="680" width="180" height="210" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-125" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-124">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-126" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-125">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-127" value="<div>ID</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-125">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-128" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;strokeColor=default;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-124">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-129" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-128">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-130" value="StartedTS" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-128">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-131" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-124">
|
||||
<mxGeometry y="90" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-132" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-131">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-133" value="CompletedTS" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-131">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-134" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-124">
|
||||
<mxGeometry y="120" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-135" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-134">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-136" value="AuctionsFound" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-134">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-137" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-124">
|
||||
<mxGeometry y="150" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-138" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-137">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-139" value="TargetSiteName" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-137">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-149" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-124">
|
||||
<mxGeometry y="180" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-150" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-149">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-151" value="Errors" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-149">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-156" value="EmailSubscription" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry y="840" width="180" height="150" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-157" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-156">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-158" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-157">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-159" value="ID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-157">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-178" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-156">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-179" value="UQ" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-178">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-180" value="UserID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-178">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-175" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-156">
|
||||
<mxGeometry y="90" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-176" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-175">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-177" value="<div>SearchCriteria</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=0;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-175">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-166" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-156">
|
||||
<mxGeometry y="120" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-167" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;strokeColor=inherit;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-166">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-168" value="<div>LastSentTS</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="JNN8aSlnDbWN0y9jmZyT-166">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="S1HCfoW5zDfGPMNCMrQO-7" target="JNN8aSlnDbWN0y9jmZyT-11">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-38" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="S1HCfoW5zDfGPMNCMrQO-7" target="JNN8aSlnDbWN0y9jmZyT-22">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="290" y="320" />
|
||||
<mxPoint x="290" y="360" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-2" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0;entryDx=0;entryDy=52.5;entryPerimeter=0;" edge="1" parent="1" source="S1HCfoW5zDfGPMNCMrQO-7" target="JNN8aSlnDbWN0y9jmZyT-17">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="290" y="320" />
|
||||
<mxPoint x="290" y="163" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-7" value="<div>Auctioneer</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry y="280" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-11" value="Auctioneer" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="388" y="440" width="182" height="120" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-12" value="<div>TriggerSendEmails</div>" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-11">
|
||||
<mxGeometry y="30" width="182" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-39" value="TriggerFindNewUpcoming" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-11">
|
||||
<mxGeometry y="60" width="182" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-34" value="GetCommandHistory" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-11">
|
||||
<mxGeometry y="90" width="182" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-13" value="CommandHistory" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="388" y="680" width="180" height="240" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-14" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-13">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-15" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-14">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-16" value="<div>ID</div>" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-14">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-17" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-13">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-18" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-17">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-19" value="Name" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-17">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-35" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-13">
|
||||
<mxGeometry y="90" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-36" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-35">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-37" value="Initiator" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-35">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-20" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-13">
|
||||
<mxGeometry y="120" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-21" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-20">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-22" value="ExecutedTS" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-20">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-23" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-13">
|
||||
<mxGeometry y="150" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-24" value="" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-23">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-25" value="Target" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-23">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-26" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-13">
|
||||
<mxGeometry y="180" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-27" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-26">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-28" value="Params" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-26">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-29" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=0;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-13">
|
||||
<mxGeometry y="210" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-30" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;editable=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-29">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-31" value="Errors" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="S1HCfoW5zDfGPMNCMrQO-29">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-41" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="S1HCfoW5zDfGPMNCMrQO-32" target="H4J2X_9uFRljxSkwpIMP-38">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-32" value="Admin" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="-310" y="280" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-3" value="SendEmailJob" style="shape=table;startSize=30;container=1;collapsible=1;childLayout=tableLayout;fixedRows=1;rowLines=0;fontStyle=1;align=center;resizeLast=1;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry y="1000" width="180" height="180" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-4" value="" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-3">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-5" value="PK" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-4">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-6" value="ID" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=5;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-4">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-19" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-3">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-20" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-19">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-21" value="StartedTS" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=0;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-19">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-22" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-3">
|
||||
<mxGeometry y="90" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-23" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-22">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-24" value="CompletedTS" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=0;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-22">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-25" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-3">
|
||||
<mxGeometry y="120" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-26" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-25">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-27" value="EmailsSent" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=0;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-25">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-28" style="shape=tableRow;horizontal=0;startSize=0;swimlaneHead=0;swimlaneBody=0;fillColor=none;collapsible=0;dropTarget=0;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;top=0;left=0;right=0;bottom=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-3">
|
||||
<mxGeometry y="150" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-29" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;fontStyle=1;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-28">
|
||||
<mxGeometry width="30" height="30" as="geometry">
|
||||
<mxRectangle width="30" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-30" value="Errors" style="shape=partialRectangle;connectable=0;fillColor=none;top=0;left=0;bottom=0;right=0;align=left;spacingLeft=6;fontStyle=0;overflow=hidden;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-28">
|
||||
<mxGeometry x="30" width="150" height="30" as="geometry">
|
||||
<mxRectangle width="150" height="30" as="alternateBounds" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-40" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="H4J2X_9uFRljxSkwpIMP-36" target="JNN8aSlnDbWN0y9jmZyT-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-36" value="<div>@</div><div>alpha</div><div>beta<br></div>" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="-170" y="120" width="140" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-42" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="H4J2X_9uFRljxSkwpIMP-38" target="S1HCfoW5zDfGPMNCMrQO-7">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-38" value="<div>admin</div><div>alpha-admin</div><div>beta-admin<br></div>" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="-160" y="290" width="130" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-43" value="" style="sketch=0;aspect=fixed;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;fillColor=#00188D;shape=mxgraph.mscae.enterprise.lock" vertex="1" parent="1">
|
||||
<mxGeometry x="-119" y="240" width="39" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-44" value="" style="sketch=0;aspect=fixed;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;fillColor=#00188D;shape=mxgraph.mscae.enterprise.lock_unlocked" vertex="1" parent="1">
|
||||
<mxGeometry x="-119" y="70" width="37" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-51" value="Web Client" style="swimlane;fontStyle=0;childLayout=stackLayout;horizontal=1;startSize=30;horizontalStack=0;resizeParent=1;resizeParentMax=0;resizeLast=0;collapsible=1;marginBottom=0;whiteSpace=wrap;html=1;" vertex="1" parent="1">
|
||||
<mxGeometry x="-380" y="440" width="180" height="90" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-52" value="SearchPage" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-51">
|
||||
<mxGeometry y="30" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="H4J2X_9uFRljxSkwpIMP-53" value="SubscriptionsPage" style="text;strokeColor=none;fillColor=none;align=left;verticalAlign=middle;spacingLeft=4;spacingRight=4;overflow=hidden;points=[[0,0.5],[1,0.5]];portConstraint=eastwest;rotatable=0;whiteSpace=wrap;html=1;" vertex="1" parent="H4J2X_9uFRljxSkwpIMP-51">
|
||||
<mxGeometry y="60" width="180" height="30" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
Before Width: | Height: | Size: 183 KiB |
@ -0,0 +1,177 @@
|
||||
<mxfile host="app.diagrams.net" modified="2023-06-12T21:54:22.543Z" agent="Mozilla/5.0 (X11; Linux x86_64; rv:109.0) Gecko/20100101 Firefox/112.0" etag="x7K_nP_hUPP84gUb8Ro3" version="21.1.7" type="device">
|
||||
<diagram name="High level" id="BL8KaFisCtBiJRqkGTb9">
|
||||
<mxGraphModel dx="2053" dy="1131" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
|
||||
<root>
|
||||
<mxCell id="0" />
|
||||
<mxCell id="1" parent="0" />
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-1" value="<div>Web Client</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
|
||||
<mxGeometry x="-320" y="70" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-6" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-2" target="wSJkOsJQY9M_Z095WERL-4">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-2" value="<div>Users</div>" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="-840" y="110" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-17" value="<div>catalog-db</div>" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" parent="1" vertex="1">
|
||||
<mxGeometry x="80" y="57.5" width="80" height="105" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-54" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="JNN8aSlnDbWN0y9jmZyT-19" target="wSJkOsJQY9M_Z095WERL-50">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="JNN8aSlnDbWN0y9jmZyT-19" value="<div>Runner</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" parent="1" vertex="1">
|
||||
<mxGeometry x="-60" y="440" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-10" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="S1HCfoW5zDfGPMNCMrQO-32" target="wSJkOsJQY9M_Z095WERL-8">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="S1HCfoW5zDfGPMNCMrQO-32" value="Admin" style="ellipse;shape=cloud;whiteSpace=wrap;html=1;" parent="1" vertex="1">
|
||||
<mxGeometry x="-830" y="400" width="120" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-19" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-4" target="JNN8aSlnDbWN0y9jmZyT-1">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-21" value="<div>Path: /</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-19">
|
||||
<mxGeometry x="0.4522" y="-2" relative="1" as="geometry">
|
||||
<mxPoint x="1" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-20" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-4" target="wSJkOsJQY9M_Z095WERL-18">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-22" value="Path: /api" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-20">
|
||||
<mxGeometry x="0.3611" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-4" value="bh.com" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="-640.5" y="120" width="160" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-5" value="" style="sketch=0;aspect=fixed;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;fillColor=#00188D;shape=mxgraph.mscae.enterprise.lock_unlocked" vertex="1" parent="1">
|
||||
<mxGeometry x="-579" y="70" width="37" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-23" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-8" target="wSJkOsJQY9M_Z095WERL-13">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-25" value="<div>Path:/</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-23">
|
||||
<mxGeometry x="0.43" y="-2" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-24" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-8" target="wSJkOsJQY9M_Z095WERL-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-26" value="Path:/api" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-24">
|
||||
<mxGeometry x="0.3263" y="-1" relative="1" as="geometry">
|
||||
<mxPoint as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-8" value="<div>admin.bh.com</div>" style="strokeWidth=2;html=1;shape=mxgraph.flowchart.direct_data;whiteSpace=wrap;align=center;" vertex="1" parent="1">
|
||||
<mxGeometry x="-630.5" y="410" width="160.5" height="60" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-9" value="" style="sketch=0;aspect=fixed;pointerEvents=1;shadow=0;dashed=0;html=1;strokeColor=none;labelPosition=center;verticalLabelPosition=bottom;verticalAlign=top;align=center;fillColor=#00188D;shape=mxgraph.mscae.enterprise.lock" vertex="1" parent="1">
|
||||
<mxGeometry x="-570" y="360" width="39" height="50" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-13" value="Admin Client" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="-320" y="350" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-30" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-17" target="JNN8aSlnDbWN0y9jmZyT-19">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-31" value="<div>/v1/sync</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-30">
|
||||
<mxGeometry x="0.2947" y="1" relative="1" as="geometry">
|
||||
<mxPoint y="-9" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-46" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-17" target="wSJkOsJQY9M_Z095WERL-42">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="-190" y="480" />
|
||||
<mxPoint x="-190" y="290" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-47" value="<div>/v1/notify</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-46">
|
||||
<mxGeometry x="-0.359" relative="1" as="geometry">
|
||||
<mxPoint x="70" y="-111" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-17" value="<div>Proxy Admin</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="-320" y="440" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-28" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-18" target="wSJkOsJQY9M_Z095WERL-27">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="-190" y="200" />
|
||||
<mxPoint x="-190" y="110" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-29" value="<div>/v1/upcoming</div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-28">
|
||||
<mxGeometry x="-0.2889" y="-2" relative="1" as="geometry">
|
||||
<mxPoint x="58" y="-63" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-43" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-18" target="wSJkOsJQY9M_Z095WERL-42">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="-190" y="200" />
|
||||
<mxPoint x="-190" y="290" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-45" value="<div>/v1/register</div><div>/v1/verify</div><div>/v1/unsubscribe<br></div>" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-43">
|
||||
<mxGeometry x="0.3185" relative="1" as="geometry">
|
||||
<mxPoint x="32" y="-30" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-18" value="Proxy Web" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="-320" y="160" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-55" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-27" target="JNN8aSlnDbWN0y9jmZyT-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-27" value="<div>Catalog</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="-70" y="70" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-52" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;entryPerimeter=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-42" target="wSJkOsJQY9M_Z095WERL-49">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-42" value="<div>Ringman</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="-60" y="250" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-49" value="ringman-db" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="237.5" width="80" height="105" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-50" value="runner-db" style="shape=cylinder3;whiteSpace=wrap;html=1;boundedLbl=1;backgroundOutline=1;size=15;" vertex="1" parent="1">
|
||||
<mxGeometry x="80" y="427.5" width="80" height="105" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-57" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-56" target="wSJkOsJQY9M_Z095WERL-17">
|
||||
<mxGeometry relative="1" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-58" value="curl /api/v1/sync" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="wSJkOsJQY9M_Z095WERL-57">
|
||||
<mxGeometry x="0.275" y="-2" relative="1" as="geometry">
|
||||
<mxPoint x="58" y="41" as="offset" />
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-56" value="<div>sync-cronjob</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="-320" y="600" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-61" style="edgeStyle=orthogonalEdgeStyle;rounded=0;orthogonalLoop=1;jettySize=auto;html=1;entryX=0.5;entryY=1;entryDx=0;entryDy=0;" edge="1" parent="1" source="wSJkOsJQY9M_Z095WERL-59" target="wSJkOsJQY9M_Z095WERL-17">
|
||||
<mxGeometry relative="1" as="geometry">
|
||||
<Array as="points">
|
||||
<mxPoint x="-120" y="560" />
|
||||
<mxPoint x="-280" y="560" />
|
||||
</Array>
|
||||
</mxGeometry>
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-59" value="<div>notify-cronjob</div>" style="whiteSpace=wrap;html=1;aspect=fixed;" vertex="1" parent="1">
|
||||
<mxGeometry x="-160" y="600" width="80" height="80" as="geometry" />
|
||||
</mxCell>
|
||||
<mxCell id="wSJkOsJQY9M_Z095WERL-60" value="curl /api/v1/notify" style="edgeLabel;html=1;align=center;verticalAlign=middle;resizable=0;points=[];" vertex="1" connectable="0" parent="1">
|
||||
<mxGeometry x="-70" y="580" as="geometry" />
|
||||
</mxCell>
|
||||
</root>
|
||||
</mxGraphModel>
|
||||
</diagram>
|
||||
</mxfile>
|
After Width: | Height: | Size: 36 KiB |
@ -0,0 +1,103 @@
|
||||
# Deployment
|
||||
|
||||
Services deployed (using kustomize):
|
||||
|
||||
- [catalog](./src/catalog)
|
||||
- [runner](./src/runner)
|
||||
- [proxy-admin](./src/proxy-admin)
|
||||
- [proxy-web](./src/proxy-web)
|
||||
|
||||
- [web-client](./src/web-client)
|
||||
- [admin-client](./src/admin-client)
|
||||
|
||||
|
||||
Platform components deployed (using helm):
|
||||
|
||||
- [Traefik]()
|
||||
- [Postgresql]()
|
||||
|
||||
|
||||
## [Beta](https://beta.barretthousen.com)
|
||||
|
||||
The [Beta](https://beta.barretthousen.com) environment lives in my [homelab repo](https://git.vdhsn.com/adam/SunnyHomeLab),
|
||||
and is auto deployed using Flux w/ kustomize.
|
||||
|
||||
See [./env/beta](./env/beta/kustomization.yaml) for how it's set up.
|
||||
|
||||
- There are only 3 environments: `local`, `beta`, `prod`
|
||||
- `local`: optimize for iteration speed, observability, mutability. Ephemeral data. Should be quick to create and destroy.
|
||||
- `beta`: optimize for likeness with prod, observability, and durable data.
|
||||
- `prod`: optimize for up time, automated change control, observability, data durability.
|
||||
- Each environment should pull from the image tag that matches it's name (ie catalog service running in `beta` env will use `git.vdhsn.com/barretthousen/service-catalog:beta` docker image)
|
||||
- All environments should have resources suffixed with their name (ie `deployment/catalog-beta` in `beta` env)
|
||||
- All environments must use kustomize, and have the same resources - configuration of those resources can vary as needed
|
||||
|
||||
### Initial environment setup
|
||||
|
||||
Deploy the following with Helm (assuming we're setting up a new `beta` env with the following commands):
|
||||
1. Traefik:
|
||||
```sh
|
||||
helm repo add traefik https://traefik.github.io/charts;
|
||||
|
||||
helm upgrade --install ingress traefik/traefik -n 'barretthousen-beta'\
|
||||
--set=logs.access.enabled=true
|
||||
```
|
||||
|
||||
2. Postgresql:
|
||||
```sh
|
||||
helm repo add bitnami https://charts.bitnami.com/bitnami;
|
||||
|
||||
helm install --upgrade bh-db bitnami/postgresql -n 'barretthousen-beta' \
|
||||
--set='fullnameOverride=bh-db' \
|
||||
--set='auth.enablePostgresuser=true' \
|
||||
--set='auth.postgresPassword=bh-admin' \
|
||||
--set='auth.database=bh'
|
||||
```
|
||||
|
||||
### Deployment steps
|
||||
|
||||
1. Build and publish images to `beta`
|
||||
```sh
|
||||
export ENV=beta; # if not specified, will only build and push for the git commit
|
||||
make build-backend-image SERVICE=catalog
|
||||
make build-backend-image SERVICE=runner
|
||||
make build-backend-image SERVICE=proxy-admin
|
||||
make build-backend-image SERVICE=proxy-web
|
||||
|
||||
# for prod drop `beta prefix
|
||||
make build-client-image SERVICE=web-client
|
||||
make build-client-image SERVICE=admin-client
|
||||
```
|
||||
|
||||
2. Rolling restart deployments in the beta env
|
||||
```sh
|
||||
# for prod drop `-beta` suffix
|
||||
kubectl rollout restart -n barretthousen-beta deployment runner-beta
|
||||
kubectl rollout status -n barretthousen-beta deployment runner-beta -w
|
||||
|
||||
kubectl rollout restart -n barretthousen-beta deployment catalog-beta
|
||||
kubectl rollout status -n barretthousen-beta deployment catalog-beta -w
|
||||
|
||||
kubectl rollout restart -n barretthousen-beta deployment proxy-admin-beta
|
||||
kubectl rollout status -n barretthousen-beta deployment proxy-admin-beta -w
|
||||
|
||||
kubectl rollout restart -n barretthousen-beta deployment proxy-web-beta
|
||||
kubectl rollout status -n barretthousen-beta deployment proxy-web-beta -w
|
||||
|
||||
kubectl rollout restart -n barretthousen-beta deployment web-client-beta
|
||||
kubectl rollout status -n barretthousen-beta deployment web-client-beta -w
|
||||
|
||||
kubectl rollout restart -n barretthousen-beta deployment admin-client-beta
|
||||
kubectl rollout status -n barretthousen-beta deployment admin-client-beta -w
|
||||
```
|
||||
|
||||
3. Promote images to prod
|
||||
```sh
|
||||
make promote-backend-prod SERVICE=catalog
|
||||
make promote-backend-prod SERVICE=runner
|
||||
make promote-backend-prod SERVICE=proxy-admin
|
||||
make promote-backend-prod SERVICE=proxy-web
|
||||
|
||||
make promote-client-prod SERVICE=web-client
|
||||
make promote-client-prod SERVICE=admin-client
|
||||
```
|
@ -0,0 +1,912 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%APL_DSC_Encoding: UTF8
|
||||
%APLProducer: (Version 10.14.6 (Build 18G95) Quartz PS Context)
|
||||
%%Title: (Unknown)
|
||||
%%Creator: (Unknown)
|
||||
%%CreationDate: (Unknown)
|
||||
%%For: (Unknown)
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%Pages: 1
|
||||
%%BoundingBox: 0 0 1102 516
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginFile: cg-pdf.ps
|
||||
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
|
||||
%%Copyright: All Rights Reserved.
|
||||
currentpacking true setpacking
|
||||
/cg_md 141 dict def
|
||||
cg_md begin
|
||||
/L3? languagelevel 3 ge def
|
||||
/bd{bind def}bind def
|
||||
/ld{load def}bd
|
||||
/xs{exch store}bd
|
||||
/xd{exch def}bd
|
||||
/cmmtx matrix def
|
||||
mark
|
||||
/sc/setcolor
|
||||
/scs/setcolorspace
|
||||
/dr/defineresource
|
||||
/fr/findresource
|
||||
/T/true
|
||||
/F/false
|
||||
/d/setdash
|
||||
/w/setlinewidth
|
||||
/J/setlinecap
|
||||
/j/setlinejoin
|
||||
/M/setmiterlimit
|
||||
/i/setflat
|
||||
/rc/rectclip
|
||||
/rf/rectfill
|
||||
/rs/rectstroke
|
||||
/f/fill
|
||||
/f*/eofill
|
||||
/sf/selectfont
|
||||
/s/show
|
||||
%/as/ashow
|
||||
/xS/xshow
|
||||
/yS/yshow
|
||||
/xyS/xyshow
|
||||
/S/stroke
|
||||
/m/moveto
|
||||
/l/lineto
|
||||
/c/curveto
|
||||
/h/closepath
|
||||
/n/newpath
|
||||
/q/gsave
|
||||
/Q/grestore
|
||||
counttomark 2 idiv
|
||||
%dup (number of ld's = )print == flush % *** how many
|
||||
{ld}repeat pop
|
||||
/SC{ % CSname
|
||||
/ColorSpace fr scs
|
||||
}bd
|
||||
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
|
||||
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
|
||||
/cgmtx matrix def
|
||||
/sdmtx{cgmtx currentmatrix pop}bd
|
||||
/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity
|
||||
/cm {cmmtx astore CM concat}bd % reset the matrix and then concat
|
||||
/W{clip newpath}bd
|
||||
/W*{eoclip newpath}bd
|
||||
|
||||
statusdict begin product end dup (HP) anchorsearch{
|
||||
pop pop pop % pop off the search results
|
||||
true
|
||||
}{
|
||||
pop % previous search result
|
||||
(hp) anchorsearch{
|
||||
pop pop true
|
||||
}{
|
||||
pop false
|
||||
}ifelse
|
||||
}ifelse
|
||||
|
||||
{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts
|
||||
{
|
||||
{ % charCode Wx Wy
|
||||
pop pop % charCode
|
||||
(0)dup 0 4 -1 roll put
|
||||
F charpath
|
||||
}cshow
|
||||
}
|
||||
}{
|
||||
{F charpath}
|
||||
}ifelse
|
||||
/cply exch bd
|
||||
/cps {cply stroke}bd
|
||||
/pgsave 0 def
|
||||
/bp{/pgsave save store}bd
|
||||
/ep{pgsave restore showpage}def % dont' bind
|
||||
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
|
||||
|
||||
/scrdict 10 dict def
|
||||
/scrmtx matrix def
|
||||
/patarray 0 def
|
||||
/createpat{patarray 3 1 roll put}bd
|
||||
/makepat{
|
||||
scrmtx astore pop
|
||||
gsave
|
||||
initgraphics
|
||||
CM
|
||||
patarray exch get
|
||||
scrmtx
|
||||
makepattern
|
||||
grestore
|
||||
setpattern
|
||||
}bd
|
||||
|
||||
/cg_BeginEPSF{
|
||||
userdict save/cg_b4_Inc_state exch put
|
||||
userdict/cg_endepsf/cg_EndEPSF load put
|
||||
count userdict/cg_op_count 3 -1 roll put
|
||||
countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
|
||||
3 sub{end}repeat
|
||||
/showpage {} def
|
||||
0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
|
||||
10 setmiterlimit [] 0 setdash newpath
|
||||
false setstrokeadjust false setoverprint % don't use F
|
||||
}bd
|
||||
/cg_EndEPSF{
|
||||
countdictstack 3 sub { end } repeat
|
||||
cg_dict_array 3 1 index length 3 sub getinterval
|
||||
{begin}forall
|
||||
count userdict/cg_op_count get sub{pop}repeat
|
||||
userdict/cg_b4_Inc_state get restore
|
||||
F setpacking
|
||||
}bd
|
||||
|
||||
/cg_biproc{currentfile/RunLengthDecode filter}bd
|
||||
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
|
||||
/ImageDataSource 0 def
|
||||
L3?{
|
||||
/cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
|
||||
/cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
|
||||
}{
|
||||
/ImageBandMask 0 def
|
||||
/ImageBandData 0 def
|
||||
/cg_mibiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
/cg_miaiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
|
||||
dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
}ifelse
|
||||
/imsave 0 def
|
||||
/BI{save/imsave xd mark}bd
|
||||
/EI{imsave restore}bd
|
||||
/ID{
|
||||
counttomark 2 idiv
|
||||
dup 2 add % leave room for imagetype and imagematrix
|
||||
dict begin
|
||||
{def} repeat
|
||||
pop % remove mark
|
||||
/ImageType 1 def
|
||||
/ImageMatrix[Width 0 0 Height neg 0 Height]def
|
||||
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
|
||||
% currentdict on stack
|
||||
L3?{
|
||||
dup/MaskedImage known
|
||||
{
|
||||
pop
|
||||
<<
|
||||
/ImageType 3
|
||||
/InterleaveType 2
|
||||
/DataDict currentdict
|
||||
/MaskDict
|
||||
<< /ImageType 1
|
||||
/Width Width
|
||||
/Height Height
|
||||
/ImageMatrix ImageMatrix
|
||||
/BitsPerComponent 1
|
||||
/Decode [0 1]
|
||||
currentdict/Interpolate known
|
||||
{/Interpolate Interpolate}if
|
||||
>>
|
||||
>>
|
||||
}if
|
||||
}if
|
||||
exch
|
||||
{imagemask}{image}ifelse
|
||||
end % pop imagedict from dict stack
|
||||
}bd
|
||||
|
||||
/cguidfix{statusdict begin mark version end
|
||||
{cvr}stopped{cleartomark 0}{exch pop}ifelse
|
||||
2012 lt{dup findfont dup length dict begin
|
||||
{1 index/FID ne 2 index/UniqueID ne and
|
||||
{def} {pop pop} ifelse}forall
|
||||
currentdict end definefont pop
|
||||
}{pop}ifelse
|
||||
}bd
|
||||
/t_array 0 def
|
||||
/t_i 0 def
|
||||
/t_c 1 string def
|
||||
/x_proc{ % x y
|
||||
exch t_array t_i get add exch moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/y_proc{ % x y
|
||||
t_array t_i get add moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/xy_proc{
|
||||
% x y
|
||||
t_array t_i 2 copy 1 add get 3 1 roll get
|
||||
4 -1 roll add 3 1 roll add moveto
|
||||
/t_i t_i 2 add store
|
||||
}bd
|
||||
/sop 0 def % don't bind sop
|
||||
/cp_proc/x_proc ld % default moveto proc is for xwidths only
|
||||
/base_charpath % string array
|
||||
{
|
||||
/t_array xs
|
||||
/t_i 0 def
|
||||
{ % char
|
||||
t_c 0 3 -1 roll put
|
||||
currentpoint
|
||||
t_c cply sop
|
||||
cp_proc
|
||||
}forall
|
||||
/t_array 0 def
|
||||
}bd
|
||||
/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath
|
||||
|
||||
% default sop is stroke
|
||||
/nop{}def
|
||||
/xsp/base_charpath ld
|
||||
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
|
||||
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
|
||||
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
|
||||
/refnt{ % newname encoding fontname
|
||||
findfont dup length dict copy dup
|
||||
/Encoding 4 -1 roll put
|
||||
definefont pop
|
||||
}bd
|
||||
/renmfont{ % newname fontname
|
||||
findfont dup length dict copy definefont pop
|
||||
}bd
|
||||
|
||||
L3? dup dup{save exch}if
|
||||
|
||||
% languagelevel2 ONLY code goes here
|
||||
|
||||
/Range 0 def
|
||||
/DataSource 0 def
|
||||
/val 0 def
|
||||
/nRange 0 def
|
||||
/mulRange 0 def
|
||||
/d0 0 def
|
||||
/r0 0 def
|
||||
/di 0 def
|
||||
/ri 0 def
|
||||
/a0 0 def
|
||||
/a1 0 def
|
||||
/r1 0 def
|
||||
/r2 0 def
|
||||
/dx 0 def
|
||||
/Nsteps 0 def
|
||||
/sh3tp 0 def
|
||||
/ymax 0 def
|
||||
/ymin 0 def
|
||||
/xmax 0 def
|
||||
/xmin 0 def
|
||||
|
||||
/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation.
|
||||
{
|
||||
begin
|
||||
/nRange Range length 2 idiv store
|
||||
/mulRange % precompute the range data needed to map a sample value from the table to a range value
|
||||
% this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ]
|
||||
[
|
||||
0 1 nRange 1 sub
|
||||
{ % index
|
||||
2 mul/nDim2 xd % 2*dimension# we are dealing with
|
||||
Range nDim2 get % ymin
|
||||
Range nDim2 1 add get % ymin ymax
|
||||
1 index sub % ymin (ymax-ymin)
|
||||
% xmin = 0, xmax = 255 (2^bitspersample - 1)
|
||||
255 div % ymin (ymax-ymin)/(xmax - xmin)
|
||||
exch % (ymax-ymin)/(xmax - xmin) ymin
|
||||
}for
|
||||
]store
|
||||
end
|
||||
}bd
|
||||
|
||||
/FunEval % val1 fundict -> comp1 comp2 ... compN
|
||||
{
|
||||
begin
|
||||
% the value passed in is the base index into the table
|
||||
nRange mul /val xd % compute the actual index to the table
|
||||
% since there are nRange entries per base index
|
||||
0 1 nRange 1 sub
|
||||
{
|
||||
dup 2 mul/nDim2 xd % dim
|
||||
val % base value to use to do our lookup
|
||||
add DataSource exch get % lookedupval
|
||||
mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin)
|
||||
mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin
|
||||
add % interpolated result
|
||||
}for % comp1 comp2 ... compN
|
||||
end
|
||||
}bd
|
||||
|
||||
/max % a b -> max(a, b)
|
||||
{
|
||||
2 copy lt
|
||||
{exch pop}{pop}ifelse
|
||||
}bd
|
||||
|
||||
/sh2
|
||||
{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 x1 y1
|
||||
3 index 3 index translate % origin is now at beginning point of shading
|
||||
% x0 y0 x1 y1
|
||||
3 -1 roll sub % x0 x1 y1-y0
|
||||
3 1 roll exch % y1-y0 x1 x0
|
||||
sub % y1-y0 x1-x0
|
||||
2 copy
|
||||
dup mul exch dup mul add sqrt % length of segment between two points
|
||||
dup
|
||||
scale
|
||||
atan % atan (dy/dx)
|
||||
%dup (rotation angle = )print ==
|
||||
rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn
|
||||
|
||||
/Function load setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
|
||||
% this is now specific to axial shadings. Compute the maximum bounds to fill
|
||||
clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
xmin ymin xmin abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
% paint the rects. The sampling frequency is that of our table
|
||||
/Nsteps/Function load/Size get 0 get 1 sub store
|
||||
/dx 1 Nsteps div store
|
||||
gsave
|
||||
/di ymax ymin sub store
|
||||
/Function load
|
||||
% loop Nsteps + 1 times, incrementing the index by 1 each time
|
||||
0 1 Nsteps
|
||||
{
|
||||
1 index FunEval sc
|
||||
0 ymin dx di rectfill
|
||||
dx 0 translate
|
||||
}for
|
||||
pop % pop our function
|
||||
grestore % origin is back to start point
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
1 ymin xmax 1 sub abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
|
||||
/shp % this paints our shape for shading type 3
|
||||
{ % x1 r1 x0 r0 -
|
||||
4 copy
|
||||
|
||||
% fill interior arc
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
}bd
|
||||
|
||||
/calcmaxs
|
||||
{ % calculate maximum distance vector from origin to corner points
|
||||
% of bbox
|
||||
xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2)
|
||||
xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2)
|
||||
xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2)
|
||||
xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2)
|
||||
max max max % maximum value
|
||||
}bd
|
||||
|
||||
/sh3
|
||||
{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 r1 x1 y1 r2
|
||||
5 index 5 index translate % origin is now at first circle origin
|
||||
3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx
|
||||
3 -1 roll 5 -1 roll sub % r1 r2 dx dy
|
||||
2 copy dup mul exch dup mul add sqrt
|
||||
/dx xs % r1 r2 dx dy
|
||||
2 copy 0 ne exch 0 ne or
|
||||
{
|
||||
% r1 r2 dx dy
|
||||
exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected
|
||||
}{
|
||||
pop pop
|
||||
}ifelse
|
||||
% r1 r2
|
||||
/r2 xs
|
||||
/r1 xs
|
||||
/Function load
|
||||
dup/Size get 0 get 1 sub % this is the size of our table minus 1
|
||||
/Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device
|
||||
setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
% determine the case:
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: r1 = r2
|
||||
% case 3: r1 != r2
|
||||
dx r2 add r1 lt{
|
||||
% circle 2 inside of circle 1
|
||||
0
|
||||
}{
|
||||
dx r1 add r2 le
|
||||
{ % circle 1 inside of circle 2
|
||||
1
|
||||
}{ % circles don't contain each other
|
||||
r1 r2 eq
|
||||
{ % equal
|
||||
2
|
||||
}{ % r1 != r2
|
||||
3
|
||||
}ifelse
|
||||
}ifelse
|
||||
}ifelse
|
||||
/sh3tp xs % sh3tp has the number of our different cases
|
||||
clippath {pathbbox}stopped {0 0 0 0}if
|
||||
newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
|
||||
% Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr)
|
||||
dx dup mul r2 r1 sub dup mul sub dup 0 gt
|
||||
{
|
||||
sqrt r2 r1 sub atan
|
||||
/a0 exch 180 exch sub store
|
||||
/a1 a0 neg store
|
||||
}{
|
||||
pop
|
||||
/a0 0 store
|
||||
/a1 360 store
|
||||
}ifelse
|
||||
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{ % case 0
|
||||
dx 0 r1 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % case 1
|
||||
r1 0 gt{0 0 r1 0 360 arc fill}if
|
||||
}
|
||||
{ % case 2
|
||||
% r1 == r2, extend 0
|
||||
% r3 = r, x3 = -(abs(minx) + r), x1 = 0
|
||||
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 xmin abs r1 add neg r1 shp
|
||||
}
|
||||
{ % case 3
|
||||
% no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1
|
||||
r1 neg r2 r1 sub div dx mul % this is point of beginning circle
|
||||
0 % point of ending circle
|
||||
shp % takes x(i+1) r(i+1) x(i) r(i)
|
||||
}{ % the first circle is the bigger of the two
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% negative direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 calcmaxs % 0 r1 maxs
|
||||
dup
|
||||
% calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2))
|
||||
r2 add dx mul dx r1 r2 sub sub div
|
||||
neg % maxs xs'
|
||||
exch 1 index % xs' maxs xs'
|
||||
abs exch sub
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}sh3tp get exec % execute the extend at beginning proc for our shading type
|
||||
}if
|
||||
}if
|
||||
|
||||
% now do the shading
|
||||
/d0 0 store
|
||||
/r0 r1 store
|
||||
/di dx Nsteps div store
|
||||
/ri r2 r1 sub Nsteps div store
|
||||
/Function load
|
||||
0 1 Nsteps
|
||||
{ % function t(i)
|
||||
1 index FunEval sc
|
||||
d0 di add r0 ri add d0 r0 shp
|
||||
{
|
||||
% fill interior arc
|
||||
d0 0 r0 a1 a0 arc
|
||||
d0 di add 0 r0 ri add a0 a1 arcn
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
d0 0 r0 a0 a1 arc
|
||||
d0 di add 0 r0 ri add a1 a0 arcn
|
||||
fill
|
||||
}pop
|
||||
|
||||
% advance to next
|
||||
/d0 d0 di add store
|
||||
/r0 r0 ri add store
|
||||
}for
|
||||
pop % pop our function dict
|
||||
|
||||
% handle Extend
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{
|
||||
dx 0 r2 0 360 arc fill
|
||||
}
|
||||
{
|
||||
dx 0 r2 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % r1 == r2, extend 1
|
||||
% r3 = r, x3 = (abs(xmax) + r), x1 = dx
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
xmax abs r1 add r1 dx r1 shp
|
||||
}
|
||||
{ % no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% positive direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
calcmaxs dup % maxs maxs
|
||||
% calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1))
|
||||
r1 add dx mul dx r2 r1 sub sub div % maxs xs
|
||||
exch 1 index % xs maxs xs
|
||||
exch sub
|
||||
dx r2
|
||||
shp
|
||||
}{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
r1 neg r2 r1 sub div dx mul % this is point of ending circle
|
||||
0 % radius of ending circle
|
||||
dx % point of starting circle
|
||||
r2 % radius of starting circle
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}
|
||||
sh3tp get exec % execute the extend at end proc for our shading type
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions
|
||||
{ % shadingDict --
|
||||
begin
|
||||
/ShadingType load dup dup 2 eq exch 3 eq or
|
||||
{ % shadingtype
|
||||
gsave
|
||||
newpath
|
||||
/ColorSpace load scs
|
||||
currentdict/BBox known
|
||||
{
|
||||
/BBox load aload pop % llx lly urx ury
|
||||
2 index sub % llx lly urx ury-lly
|
||||
3 index % llx lly urx ury-lly llx
|
||||
3 -1 roll exch sub
|
||||
exch rectclip
|
||||
}if
|
||||
2 eq
|
||||
{sh2}{sh3}ifelse
|
||||
grestore
|
||||
}{
|
||||
% shadingtype
|
||||
pop
|
||||
(DEBUG: shading type unimplemented\n)print flush
|
||||
}ifelse
|
||||
end
|
||||
}bd
|
||||
|
||||
% end of language level 2 ONLY code
|
||||
|
||||
{restore}if not dup{save exch}if
|
||||
% languagelevel3 ONLY code goes here
|
||||
L3?{ % we do these loads conditionally or else they will fail on a level 2 printer
|
||||
/sh/shfill ld
|
||||
/csq/clipsave ld
|
||||
/csQ/cliprestore ld
|
||||
}if
|
||||
{restore}if
|
||||
|
||||
%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free
|
||||
end
|
||||
setpacking
|
||||
% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack
|
||||
%%EndFile
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%PageBoundingBox: 0 0 1102 516
|
||||
%%BeginPageSetup
|
||||
cg_md begin
|
||||
bp
|
||||
sdmtx
|
||||
[ /CIEBasedABC 4 dict dup begin
|
||||
/WhitePoint [ 0.9505 1.0000 1.0891 ] def
|
||||
/DecodeABC [
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
] def
|
||||
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def
|
||||
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def
|
||||
end ] /Cs1 exch/ColorSpace dr pop
|
||||
%%EndPageSetup
|
||||
0.60000002 i
|
||||
/Cs1 SC
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
0 516 m
|
||||
518 516 l
|
||||
518 0 l
|
||||
0 0 l
|
||||
0 516 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 516 rc
|
||||
-10 526 m
|
||||
528 526 l
|
||||
528 -10 l
|
||||
-10 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.76078433 0.65098041 0.38039216 sc
|
||||
q
|
||||
518 516 m
|
||||
1102 516 l
|
||||
1102 0 l
|
||||
518 0 l
|
||||
518 516 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 516 rc
|
||||
508 526 m
|
||||
1112 526 l
|
||||
1112 -10 l
|
||||
508 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
921.56757 468 m
|
||||
982 468 l
|
||||
982 48 l
|
||||
921.56757 48 l
|
||||
921.56757 261.5 l
|
||||
698.43243 261.5 l
|
||||
698.43243 48 l
|
||||
638 48 l
|
||||
638 468 l
|
||||
698.43243 468 l
|
||||
698.43243 276.08334 l
|
||||
921.56757 276.08334 l
|
||||
921.56757 468 l
|
||||
h
|
||||
W
|
||||
0 0 1102 516 rc
|
||||
628 478 m
|
||||
992 478 l
|
||||
992 38 l
|
||||
628 38 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.76078433 0.65098041 0.38039216 sc
|
||||
q
|
||||
180.15546 262.08334 m
|
||||
180.15546 65.5 l
|
||||
233.30252 65.5 l
|
||||
266.00839 65.5 290.53781 70.166664 306.89075 86.5 c
|
||||
323.24368 103.41666 331.42017 128.5 331.42017 162.33333 c
|
||||
331.42017 196.75 322.07562 221.83333 303.97058 238.16667 c
|
||||
285.28152 254.5 253.15967 262.66666 206.43698 262.66666 c
|
||||
198.84454 262.66666 187.16386 262.08334 180.15546 262.08334 c
|
||||
h
|
||||
180.15546 452.25 m
|
||||
180.15546 276.66666 l
|
||||
195.92436 276.66666 l
|
||||
240.31093 276.66666 270.09665 283.66666 286.44958 297.66666 c
|
||||
302.80252 311.66666 310.39496 333.83334 310.39496 365.33334 c
|
||||
310.39496 386.91666 307.47479 403.83334 301.05042 415.5 c
|
||||
294.62604 427.75 284.69748 436.5 272.43277 442.91666 c
|
||||
259.58405 449.91666 238.55882 452.83334 207.60504 452.83334 c
|
||||
199.42857 452.83334 187.16386 452.83334 180.15546 452.25 c
|
||||
h
|
||||
120 48 m
|
||||
120 468 l
|
||||
204.68488 468 l
|
||||
318.57144 468 375.80673 435.33334 375.80673 369.41666 c
|
||||
375.80673 342.58334 365.87814 320.41666 346.021 304.08334 c
|
||||
326.74789 287.75 296.96219 276.66666 257.83194 270.83334 c
|
||||
305.13864 267.33334 340.18066 255.66667 363.54202 235.83333 c
|
||||
386.31934 215.41667 398 190.33333 398 160.58333 c
|
||||
398 134.33333 389.82352 111.58334 374.63864 92.333336 c
|
||||
358.86975 73.666664 339.0126 62 314.48318 56.166668 c
|
||||
289.9538 50.333332 257.83194 48 216.94958 48 c
|
||||
120 48 l
|
||||
h
|
||||
W
|
||||
0 0 1102 516 rc
|
||||
110 478 m
|
||||
408 478 l
|
||||
408 38 l
|
||||
110 38 l
|
||||
h
|
||||
f
|
||||
ep
|
||||
end
|
||||
%%Trailer
|
||||
%%EOF
|
@ -0,0 +1,912 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%APL_DSC_Encoding: UTF8
|
||||
%APLProducer: (Version 10.14.6 (Build 18G95) Quartz PS Context)
|
||||
%%Title: (Unknown)
|
||||
%%Creator: (Unknown)
|
||||
%%CreationDate: (Unknown)
|
||||
%%For: (Unknown)
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%Pages: 1
|
||||
%%BoundingBox: 0 0 1102 516
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginFile: cg-pdf.ps
|
||||
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
|
||||
%%Copyright: All Rights Reserved.
|
||||
currentpacking true setpacking
|
||||
/cg_md 141 dict def
|
||||
cg_md begin
|
||||
/L3? languagelevel 3 ge def
|
||||
/bd{bind def}bind def
|
||||
/ld{load def}bd
|
||||
/xs{exch store}bd
|
||||
/xd{exch def}bd
|
||||
/cmmtx matrix def
|
||||
mark
|
||||
/sc/setcolor
|
||||
/scs/setcolorspace
|
||||
/dr/defineresource
|
||||
/fr/findresource
|
||||
/T/true
|
||||
/F/false
|
||||
/d/setdash
|
||||
/w/setlinewidth
|
||||
/J/setlinecap
|
||||
/j/setlinejoin
|
||||
/M/setmiterlimit
|
||||
/i/setflat
|
||||
/rc/rectclip
|
||||
/rf/rectfill
|
||||
/rs/rectstroke
|
||||
/f/fill
|
||||
/f*/eofill
|
||||
/sf/selectfont
|
||||
/s/show
|
||||
%/as/ashow
|
||||
/xS/xshow
|
||||
/yS/yshow
|
||||
/xyS/xyshow
|
||||
/S/stroke
|
||||
/m/moveto
|
||||
/l/lineto
|
||||
/c/curveto
|
||||
/h/closepath
|
||||
/n/newpath
|
||||
/q/gsave
|
||||
/Q/grestore
|
||||
counttomark 2 idiv
|
||||
%dup (number of ld's = )print == flush % *** how many
|
||||
{ld}repeat pop
|
||||
/SC{ % CSname
|
||||
/ColorSpace fr scs
|
||||
}bd
|
||||
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
|
||||
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
|
||||
/cgmtx matrix def
|
||||
/sdmtx{cgmtx currentmatrix pop}bd
|
||||
/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity
|
||||
/cm {cmmtx astore CM concat}bd % reset the matrix and then concat
|
||||
/W{clip newpath}bd
|
||||
/W*{eoclip newpath}bd
|
||||
|
||||
statusdict begin product end dup (HP) anchorsearch{
|
||||
pop pop pop % pop off the search results
|
||||
true
|
||||
}{
|
||||
pop % previous search result
|
||||
(hp) anchorsearch{
|
||||
pop pop true
|
||||
}{
|
||||
pop false
|
||||
}ifelse
|
||||
}ifelse
|
||||
|
||||
{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts
|
||||
{
|
||||
{ % charCode Wx Wy
|
||||
pop pop % charCode
|
||||
(0)dup 0 4 -1 roll put
|
||||
F charpath
|
||||
}cshow
|
||||
}
|
||||
}{
|
||||
{F charpath}
|
||||
}ifelse
|
||||
/cply exch bd
|
||||
/cps {cply stroke}bd
|
||||
/pgsave 0 def
|
||||
/bp{/pgsave save store}bd
|
||||
/ep{pgsave restore showpage}def % dont' bind
|
||||
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
|
||||
|
||||
/scrdict 10 dict def
|
||||
/scrmtx matrix def
|
||||
/patarray 0 def
|
||||
/createpat{patarray 3 1 roll put}bd
|
||||
/makepat{
|
||||
scrmtx astore pop
|
||||
gsave
|
||||
initgraphics
|
||||
CM
|
||||
patarray exch get
|
||||
scrmtx
|
||||
makepattern
|
||||
grestore
|
||||
setpattern
|
||||
}bd
|
||||
|
||||
/cg_BeginEPSF{
|
||||
userdict save/cg_b4_Inc_state exch put
|
||||
userdict/cg_endepsf/cg_EndEPSF load put
|
||||
count userdict/cg_op_count 3 -1 roll put
|
||||
countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
|
||||
3 sub{end}repeat
|
||||
/showpage {} def
|
||||
0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
|
||||
10 setmiterlimit [] 0 setdash newpath
|
||||
false setstrokeadjust false setoverprint % don't use F
|
||||
}bd
|
||||
/cg_EndEPSF{
|
||||
countdictstack 3 sub { end } repeat
|
||||
cg_dict_array 3 1 index length 3 sub getinterval
|
||||
{begin}forall
|
||||
count userdict/cg_op_count get sub{pop}repeat
|
||||
userdict/cg_b4_Inc_state get restore
|
||||
F setpacking
|
||||
}bd
|
||||
|
||||
/cg_biproc{currentfile/RunLengthDecode filter}bd
|
||||
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
|
||||
/ImageDataSource 0 def
|
||||
L3?{
|
||||
/cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
|
||||
/cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
|
||||
}{
|
||||
/ImageBandMask 0 def
|
||||
/ImageBandData 0 def
|
||||
/cg_mibiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
/cg_miaiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
|
||||
dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
}ifelse
|
||||
/imsave 0 def
|
||||
/BI{save/imsave xd mark}bd
|
||||
/EI{imsave restore}bd
|
||||
/ID{
|
||||
counttomark 2 idiv
|
||||
dup 2 add % leave room for imagetype and imagematrix
|
||||
dict begin
|
||||
{def} repeat
|
||||
pop % remove mark
|
||||
/ImageType 1 def
|
||||
/ImageMatrix[Width 0 0 Height neg 0 Height]def
|
||||
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
|
||||
% currentdict on stack
|
||||
L3?{
|
||||
dup/MaskedImage known
|
||||
{
|
||||
pop
|
||||
<<
|
||||
/ImageType 3
|
||||
/InterleaveType 2
|
||||
/DataDict currentdict
|
||||
/MaskDict
|
||||
<< /ImageType 1
|
||||
/Width Width
|
||||
/Height Height
|
||||
/ImageMatrix ImageMatrix
|
||||
/BitsPerComponent 1
|
||||
/Decode [0 1]
|
||||
currentdict/Interpolate known
|
||||
{/Interpolate Interpolate}if
|
||||
>>
|
||||
>>
|
||||
}if
|
||||
}if
|
||||
exch
|
||||
{imagemask}{image}ifelse
|
||||
end % pop imagedict from dict stack
|
||||
}bd
|
||||
|
||||
/cguidfix{statusdict begin mark version end
|
||||
{cvr}stopped{cleartomark 0}{exch pop}ifelse
|
||||
2012 lt{dup findfont dup length dict begin
|
||||
{1 index/FID ne 2 index/UniqueID ne and
|
||||
{def} {pop pop} ifelse}forall
|
||||
currentdict end definefont pop
|
||||
}{pop}ifelse
|
||||
}bd
|
||||
/t_array 0 def
|
||||
/t_i 0 def
|
||||
/t_c 1 string def
|
||||
/x_proc{ % x y
|
||||
exch t_array t_i get add exch moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/y_proc{ % x y
|
||||
t_array t_i get add moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/xy_proc{
|
||||
% x y
|
||||
t_array t_i 2 copy 1 add get 3 1 roll get
|
||||
4 -1 roll add 3 1 roll add moveto
|
||||
/t_i t_i 2 add store
|
||||
}bd
|
||||
/sop 0 def % don't bind sop
|
||||
/cp_proc/x_proc ld % default moveto proc is for xwidths only
|
||||
/base_charpath % string array
|
||||
{
|
||||
/t_array xs
|
||||
/t_i 0 def
|
||||
{ % char
|
||||
t_c 0 3 -1 roll put
|
||||
currentpoint
|
||||
t_c cply sop
|
||||
cp_proc
|
||||
}forall
|
||||
/t_array 0 def
|
||||
}bd
|
||||
/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath
|
||||
|
||||
% default sop is stroke
|
||||
/nop{}def
|
||||
/xsp/base_charpath ld
|
||||
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
|
||||
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
|
||||
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
|
||||
/refnt{ % newname encoding fontname
|
||||
findfont dup length dict copy dup
|
||||
/Encoding 4 -1 roll put
|
||||
definefont pop
|
||||
}bd
|
||||
/renmfont{ % newname fontname
|
||||
findfont dup length dict copy definefont pop
|
||||
}bd
|
||||
|
||||
L3? dup dup{save exch}if
|
||||
|
||||
% languagelevel2 ONLY code goes here
|
||||
|
||||
/Range 0 def
|
||||
/DataSource 0 def
|
||||
/val 0 def
|
||||
/nRange 0 def
|
||||
/mulRange 0 def
|
||||
/d0 0 def
|
||||
/r0 0 def
|
||||
/di 0 def
|
||||
/ri 0 def
|
||||
/a0 0 def
|
||||
/a1 0 def
|
||||
/r1 0 def
|
||||
/r2 0 def
|
||||
/dx 0 def
|
||||
/Nsteps 0 def
|
||||
/sh3tp 0 def
|
||||
/ymax 0 def
|
||||
/ymin 0 def
|
||||
/xmax 0 def
|
||||
/xmin 0 def
|
||||
|
||||
/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation.
|
||||
{
|
||||
begin
|
||||
/nRange Range length 2 idiv store
|
||||
/mulRange % precompute the range data needed to map a sample value from the table to a range value
|
||||
% this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ]
|
||||
[
|
||||
0 1 nRange 1 sub
|
||||
{ % index
|
||||
2 mul/nDim2 xd % 2*dimension# we are dealing with
|
||||
Range nDim2 get % ymin
|
||||
Range nDim2 1 add get % ymin ymax
|
||||
1 index sub % ymin (ymax-ymin)
|
||||
% xmin = 0, xmax = 255 (2^bitspersample - 1)
|
||||
255 div % ymin (ymax-ymin)/(xmax - xmin)
|
||||
exch % (ymax-ymin)/(xmax - xmin) ymin
|
||||
}for
|
||||
]store
|
||||
end
|
||||
}bd
|
||||
|
||||
/FunEval % val1 fundict -> comp1 comp2 ... compN
|
||||
{
|
||||
begin
|
||||
% the value passed in is the base index into the table
|
||||
nRange mul /val xd % compute the actual index to the table
|
||||
% since there are nRange entries per base index
|
||||
0 1 nRange 1 sub
|
||||
{
|
||||
dup 2 mul/nDim2 xd % dim
|
||||
val % base value to use to do our lookup
|
||||
add DataSource exch get % lookedupval
|
||||
mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin)
|
||||
mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin
|
||||
add % interpolated result
|
||||
}for % comp1 comp2 ... compN
|
||||
end
|
||||
}bd
|
||||
|
||||
/max % a b -> max(a, b)
|
||||
{
|
||||
2 copy lt
|
||||
{exch pop}{pop}ifelse
|
||||
}bd
|
||||
|
||||
/sh2
|
||||
{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 x1 y1
|
||||
3 index 3 index translate % origin is now at beginning point of shading
|
||||
% x0 y0 x1 y1
|
||||
3 -1 roll sub % x0 x1 y1-y0
|
||||
3 1 roll exch % y1-y0 x1 x0
|
||||
sub % y1-y0 x1-x0
|
||||
2 copy
|
||||
dup mul exch dup mul add sqrt % length of segment between two points
|
||||
dup
|
||||
scale
|
||||
atan % atan (dy/dx)
|
||||
%dup (rotation angle = )print ==
|
||||
rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn
|
||||
|
||||
/Function load setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
|
||||
% this is now specific to axial shadings. Compute the maximum bounds to fill
|
||||
clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
xmin ymin xmin abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
% paint the rects. The sampling frequency is that of our table
|
||||
/Nsteps/Function load/Size get 0 get 1 sub store
|
||||
/dx 1 Nsteps div store
|
||||
gsave
|
||||
/di ymax ymin sub store
|
||||
/Function load
|
||||
% loop Nsteps + 1 times, incrementing the index by 1 each time
|
||||
0 1 Nsteps
|
||||
{
|
||||
1 index FunEval sc
|
||||
0 ymin dx di rectfill
|
||||
dx 0 translate
|
||||
}for
|
||||
pop % pop our function
|
||||
grestore % origin is back to start point
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
1 ymin xmax 1 sub abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
|
||||
/shp % this paints our shape for shading type 3
|
||||
{ % x1 r1 x0 r0 -
|
||||
4 copy
|
||||
|
||||
% fill interior arc
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
}bd
|
||||
|
||||
/calcmaxs
|
||||
{ % calculate maximum distance vector from origin to corner points
|
||||
% of bbox
|
||||
xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2)
|
||||
xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2)
|
||||
xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2)
|
||||
xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2)
|
||||
max max max % maximum value
|
||||
}bd
|
||||
|
||||
/sh3
|
||||
{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 r1 x1 y1 r2
|
||||
5 index 5 index translate % origin is now at first circle origin
|
||||
3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx
|
||||
3 -1 roll 5 -1 roll sub % r1 r2 dx dy
|
||||
2 copy dup mul exch dup mul add sqrt
|
||||
/dx xs % r1 r2 dx dy
|
||||
2 copy 0 ne exch 0 ne or
|
||||
{
|
||||
% r1 r2 dx dy
|
||||
exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected
|
||||
}{
|
||||
pop pop
|
||||
}ifelse
|
||||
% r1 r2
|
||||
/r2 xs
|
||||
/r1 xs
|
||||
/Function load
|
||||
dup/Size get 0 get 1 sub % this is the size of our table minus 1
|
||||
/Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device
|
||||
setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
% determine the case:
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: r1 = r2
|
||||
% case 3: r1 != r2
|
||||
dx r2 add r1 lt{
|
||||
% circle 2 inside of circle 1
|
||||
0
|
||||
}{
|
||||
dx r1 add r2 le
|
||||
{ % circle 1 inside of circle 2
|
||||
1
|
||||
}{ % circles don't contain each other
|
||||
r1 r2 eq
|
||||
{ % equal
|
||||
2
|
||||
}{ % r1 != r2
|
||||
3
|
||||
}ifelse
|
||||
}ifelse
|
||||
}ifelse
|
||||
/sh3tp xs % sh3tp has the number of our different cases
|
||||
clippath {pathbbox}stopped {0 0 0 0}if
|
||||
newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
|
||||
% Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr)
|
||||
dx dup mul r2 r1 sub dup mul sub dup 0 gt
|
||||
{
|
||||
sqrt r2 r1 sub atan
|
||||
/a0 exch 180 exch sub store
|
||||
/a1 a0 neg store
|
||||
}{
|
||||
pop
|
||||
/a0 0 store
|
||||
/a1 360 store
|
||||
}ifelse
|
||||
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{ % case 0
|
||||
dx 0 r1 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % case 1
|
||||
r1 0 gt{0 0 r1 0 360 arc fill}if
|
||||
}
|
||||
{ % case 2
|
||||
% r1 == r2, extend 0
|
||||
% r3 = r, x3 = -(abs(minx) + r), x1 = 0
|
||||
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 xmin abs r1 add neg r1 shp
|
||||
}
|
||||
{ % case 3
|
||||
% no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1
|
||||
r1 neg r2 r1 sub div dx mul % this is point of beginning circle
|
||||
0 % point of ending circle
|
||||
shp % takes x(i+1) r(i+1) x(i) r(i)
|
||||
}{ % the first circle is the bigger of the two
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% negative direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 calcmaxs % 0 r1 maxs
|
||||
dup
|
||||
% calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2))
|
||||
r2 add dx mul dx r1 r2 sub sub div
|
||||
neg % maxs xs'
|
||||
exch 1 index % xs' maxs xs'
|
||||
abs exch sub
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}sh3tp get exec % execute the extend at beginning proc for our shading type
|
||||
}if
|
||||
}if
|
||||
|
||||
% now do the shading
|
||||
/d0 0 store
|
||||
/r0 r1 store
|
||||
/di dx Nsteps div store
|
||||
/ri r2 r1 sub Nsteps div store
|
||||
/Function load
|
||||
0 1 Nsteps
|
||||
{ % function t(i)
|
||||
1 index FunEval sc
|
||||
d0 di add r0 ri add d0 r0 shp
|
||||
{
|
||||
% fill interior arc
|
||||
d0 0 r0 a1 a0 arc
|
||||
d0 di add 0 r0 ri add a0 a1 arcn
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
d0 0 r0 a0 a1 arc
|
||||
d0 di add 0 r0 ri add a1 a0 arcn
|
||||
fill
|
||||
}pop
|
||||
|
||||
% advance to next
|
||||
/d0 d0 di add store
|
||||
/r0 r0 ri add store
|
||||
}for
|
||||
pop % pop our function dict
|
||||
|
||||
% handle Extend
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{
|
||||
dx 0 r2 0 360 arc fill
|
||||
}
|
||||
{
|
||||
dx 0 r2 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % r1 == r2, extend 1
|
||||
% r3 = r, x3 = (abs(xmax) + r), x1 = dx
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
xmax abs r1 add r1 dx r1 shp
|
||||
}
|
||||
{ % no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% positive direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
calcmaxs dup % maxs maxs
|
||||
% calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1))
|
||||
r1 add dx mul dx r2 r1 sub sub div % maxs xs
|
||||
exch 1 index % xs maxs xs
|
||||
exch sub
|
||||
dx r2
|
||||
shp
|
||||
}{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
r1 neg r2 r1 sub div dx mul % this is point of ending circle
|
||||
0 % radius of ending circle
|
||||
dx % point of starting circle
|
||||
r2 % radius of starting circle
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}
|
||||
sh3tp get exec % execute the extend at end proc for our shading type
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions
|
||||
{ % shadingDict --
|
||||
begin
|
||||
/ShadingType load dup dup 2 eq exch 3 eq or
|
||||
{ % shadingtype
|
||||
gsave
|
||||
newpath
|
||||
/ColorSpace load scs
|
||||
currentdict/BBox known
|
||||
{
|
||||
/BBox load aload pop % llx lly urx ury
|
||||
2 index sub % llx lly urx ury-lly
|
||||
3 index % llx lly urx ury-lly llx
|
||||
3 -1 roll exch sub
|
||||
exch rectclip
|
||||
}if
|
||||
2 eq
|
||||
{sh2}{sh3}ifelse
|
||||
grestore
|
||||
}{
|
||||
% shadingtype
|
||||
pop
|
||||
(DEBUG: shading type unimplemented\n)print flush
|
||||
}ifelse
|
||||
end
|
||||
}bd
|
||||
|
||||
% end of language level 2 ONLY code
|
||||
|
||||
{restore}if not dup{save exch}if
|
||||
% languagelevel3 ONLY code goes here
|
||||
L3?{ % we do these loads conditionally or else they will fail on a level 2 printer
|
||||
/sh/shfill ld
|
||||
/csq/clipsave ld
|
||||
/csQ/cliprestore ld
|
||||
}if
|
||||
{restore}if
|
||||
|
||||
%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free
|
||||
end
|
||||
setpacking
|
||||
% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack
|
||||
%%EndFile
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%PageBoundingBox: 0 0 1102 516
|
||||
%%BeginPageSetup
|
||||
cg_md begin
|
||||
bp
|
||||
sdmtx
|
||||
[ /CIEBasedABC 4 dict dup begin
|
||||
/WhitePoint [ 0.9505 1.0000 1.0891 ] def
|
||||
/DecodeABC [
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
] def
|
||||
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def
|
||||
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def
|
||||
end ] /Cs1 exch/ColorSpace dr pop
|
||||
%%EndPageSetup
|
||||
0.60000002 i
|
||||
/Cs1 SC
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
0 516 m
|
||||
518 516 l
|
||||
518 0 l
|
||||
0 0 l
|
||||
0 516 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 516 rc
|
||||
-10 526 m
|
||||
528 526 l
|
||||
528 -10 l
|
||||
-10 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
1 1 1 sc
|
||||
q
|
||||
518 516 m
|
||||
1102 516 l
|
||||
1102 0 l
|
||||
518 0 l
|
||||
518 516 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 516 rc
|
||||
508 526 m
|
||||
1112 526 l
|
||||
1112 -10 l
|
||||
508 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
921.56757 468 m
|
||||
982 468 l
|
||||
982 48 l
|
||||
921.56757 48 l
|
||||
921.56757 261.5 l
|
||||
698.43243 261.5 l
|
||||
698.43243 48 l
|
||||
638 48 l
|
||||
638 468 l
|
||||
698.43243 468 l
|
||||
698.43243 276.08334 l
|
||||
921.56757 276.08334 l
|
||||
921.56757 468 l
|
||||
h
|
||||
W
|
||||
0 0 1102 516 rc
|
||||
628 478 m
|
||||
992 478 l
|
||||
992 38 l
|
||||
628 38 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
1 1 1 sc
|
||||
q
|
||||
180.15546 262.08334 m
|
||||
180.15546 65.5 l
|
||||
233.30252 65.5 l
|
||||
266.00839 65.5 290.53781 70.166664 306.89075 86.5 c
|
||||
323.24368 103.41666 331.42017 128.5 331.42017 162.33333 c
|
||||
331.42017 196.75 322.07562 221.83333 303.97058 238.16667 c
|
||||
285.28152 254.5 253.15967 262.66666 206.43698 262.66666 c
|
||||
198.84454 262.66666 187.16386 262.08334 180.15546 262.08334 c
|
||||
h
|
||||
180.15546 452.25 m
|
||||
180.15546 276.66666 l
|
||||
195.92436 276.66666 l
|
||||
240.31093 276.66666 270.09665 283.66666 286.44958 297.66666 c
|
||||
302.80252 311.66666 310.39496 333.83334 310.39496 365.33334 c
|
||||
310.39496 386.91666 307.47479 403.83334 301.05042 415.5 c
|
||||
294.62604 427.75 284.69748 436.5 272.43277 442.91666 c
|
||||
259.58405 449.91666 238.55882 452.83334 207.60504 452.83334 c
|
||||
199.42857 452.83334 187.16386 452.83334 180.15546 452.25 c
|
||||
h
|
||||
120 48 m
|
||||
120 468 l
|
||||
204.68488 468 l
|
||||
318.57144 468 375.80673 435.33334 375.80673 369.41666 c
|
||||
375.80673 342.58334 365.87814 320.41666 346.021 304.08334 c
|
||||
326.74789 287.75 296.96219 276.66666 257.83194 270.83334 c
|
||||
305.13864 267.33334 340.18066 255.66667 363.54202 235.83333 c
|
||||
386.31934 215.41667 398 190.33333 398 160.58333 c
|
||||
398 134.33333 389.82352 111.58334 374.63864 92.333336 c
|
||||
358.86975 73.666664 339.0126 62 314.48318 56.166668 c
|
||||
289.9538 50.333332 257.83194 48 216.94958 48 c
|
||||
120 48 l
|
||||
h
|
||||
W
|
||||
0 0 1102 516 rc
|
||||
110 478 m
|
||||
408 478 l
|
||||
408 38 l
|
||||
110 38 l
|
||||
h
|
||||
f
|
||||
ep
|
||||
end
|
||||
%%Trailer
|
||||
%%EOF
|
@ -0,0 +1,912 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%APL_DSC_Encoding: UTF8
|
||||
%APLProducer: (Version 10.14.6 (Build 18G95) Quartz PS Context)
|
||||
%%Title: (Unknown)
|
||||
%%Creator: (Unknown)
|
||||
%%CreationDate: (Unknown)
|
||||
%%For: (Unknown)
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%Pages: 1
|
||||
%%BoundingBox: 0 0 1102 1102
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginFile: cg-pdf.ps
|
||||
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
|
||||
%%Copyright: All Rights Reserved.
|
||||
currentpacking true setpacking
|
||||
/cg_md 141 dict def
|
||||
cg_md begin
|
||||
/L3? languagelevel 3 ge def
|
||||
/bd{bind def}bind def
|
||||
/ld{load def}bd
|
||||
/xs{exch store}bd
|
||||
/xd{exch def}bd
|
||||
/cmmtx matrix def
|
||||
mark
|
||||
/sc/setcolor
|
||||
/scs/setcolorspace
|
||||
/dr/defineresource
|
||||
/fr/findresource
|
||||
/T/true
|
||||
/F/false
|
||||
/d/setdash
|
||||
/w/setlinewidth
|
||||
/J/setlinecap
|
||||
/j/setlinejoin
|
||||
/M/setmiterlimit
|
||||
/i/setflat
|
||||
/rc/rectclip
|
||||
/rf/rectfill
|
||||
/rs/rectstroke
|
||||
/f/fill
|
||||
/f*/eofill
|
||||
/sf/selectfont
|
||||
/s/show
|
||||
%/as/ashow
|
||||
/xS/xshow
|
||||
/yS/yshow
|
||||
/xyS/xyshow
|
||||
/S/stroke
|
||||
/m/moveto
|
||||
/l/lineto
|
||||
/c/curveto
|
||||
/h/closepath
|
||||
/n/newpath
|
||||
/q/gsave
|
||||
/Q/grestore
|
||||
counttomark 2 idiv
|
||||
%dup (number of ld's = )print == flush % *** how many
|
||||
{ld}repeat pop
|
||||
/SC{ % CSname
|
||||
/ColorSpace fr scs
|
||||
}bd
|
||||
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
|
||||
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
|
||||
/cgmtx matrix def
|
||||
/sdmtx{cgmtx currentmatrix pop}bd
|
||||
/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity
|
||||
/cm {cmmtx astore CM concat}bd % reset the matrix and then concat
|
||||
/W{clip newpath}bd
|
||||
/W*{eoclip newpath}bd
|
||||
|
||||
statusdict begin product end dup (HP) anchorsearch{
|
||||
pop pop pop % pop off the search results
|
||||
true
|
||||
}{
|
||||
pop % previous search result
|
||||
(hp) anchorsearch{
|
||||
pop pop true
|
||||
}{
|
||||
pop false
|
||||
}ifelse
|
||||
}ifelse
|
||||
|
||||
{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts
|
||||
{
|
||||
{ % charCode Wx Wy
|
||||
pop pop % charCode
|
||||
(0)dup 0 4 -1 roll put
|
||||
F charpath
|
||||
}cshow
|
||||
}
|
||||
}{
|
||||
{F charpath}
|
||||
}ifelse
|
||||
/cply exch bd
|
||||
/cps {cply stroke}bd
|
||||
/pgsave 0 def
|
||||
/bp{/pgsave save store}bd
|
||||
/ep{pgsave restore showpage}def % dont' bind
|
||||
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
|
||||
|
||||
/scrdict 10 dict def
|
||||
/scrmtx matrix def
|
||||
/patarray 0 def
|
||||
/createpat{patarray 3 1 roll put}bd
|
||||
/makepat{
|
||||
scrmtx astore pop
|
||||
gsave
|
||||
initgraphics
|
||||
CM
|
||||
patarray exch get
|
||||
scrmtx
|
||||
makepattern
|
||||
grestore
|
||||
setpattern
|
||||
}bd
|
||||
|
||||
/cg_BeginEPSF{
|
||||
userdict save/cg_b4_Inc_state exch put
|
||||
userdict/cg_endepsf/cg_EndEPSF load put
|
||||
count userdict/cg_op_count 3 -1 roll put
|
||||
countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
|
||||
3 sub{end}repeat
|
||||
/showpage {} def
|
||||
0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
|
||||
10 setmiterlimit [] 0 setdash newpath
|
||||
false setstrokeadjust false setoverprint % don't use F
|
||||
}bd
|
||||
/cg_EndEPSF{
|
||||
countdictstack 3 sub { end } repeat
|
||||
cg_dict_array 3 1 index length 3 sub getinterval
|
||||
{begin}forall
|
||||
count userdict/cg_op_count get sub{pop}repeat
|
||||
userdict/cg_b4_Inc_state get restore
|
||||
F setpacking
|
||||
}bd
|
||||
|
||||
/cg_biproc{currentfile/RunLengthDecode filter}bd
|
||||
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
|
||||
/ImageDataSource 0 def
|
||||
L3?{
|
||||
/cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
|
||||
/cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
|
||||
}{
|
||||
/ImageBandMask 0 def
|
||||
/ImageBandData 0 def
|
||||
/cg_mibiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
/cg_miaiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
|
||||
dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
}ifelse
|
||||
/imsave 0 def
|
||||
/BI{save/imsave xd mark}bd
|
||||
/EI{imsave restore}bd
|
||||
/ID{
|
||||
counttomark 2 idiv
|
||||
dup 2 add % leave room for imagetype and imagematrix
|
||||
dict begin
|
||||
{def} repeat
|
||||
pop % remove mark
|
||||
/ImageType 1 def
|
||||
/ImageMatrix[Width 0 0 Height neg 0 Height]def
|
||||
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
|
||||
% currentdict on stack
|
||||
L3?{
|
||||
dup/MaskedImage known
|
||||
{
|
||||
pop
|
||||
<<
|
||||
/ImageType 3
|
||||
/InterleaveType 2
|
||||
/DataDict currentdict
|
||||
/MaskDict
|
||||
<< /ImageType 1
|
||||
/Width Width
|
||||
/Height Height
|
||||
/ImageMatrix ImageMatrix
|
||||
/BitsPerComponent 1
|
||||
/Decode [0 1]
|
||||
currentdict/Interpolate known
|
||||
{/Interpolate Interpolate}if
|
||||
>>
|
||||
>>
|
||||
}if
|
||||
}if
|
||||
exch
|
||||
{imagemask}{image}ifelse
|
||||
end % pop imagedict from dict stack
|
||||
}bd
|
||||
|
||||
/cguidfix{statusdict begin mark version end
|
||||
{cvr}stopped{cleartomark 0}{exch pop}ifelse
|
||||
2012 lt{dup findfont dup length dict begin
|
||||
{1 index/FID ne 2 index/UniqueID ne and
|
||||
{def} {pop pop} ifelse}forall
|
||||
currentdict end definefont pop
|
||||
}{pop}ifelse
|
||||
}bd
|
||||
/t_array 0 def
|
||||
/t_i 0 def
|
||||
/t_c 1 string def
|
||||
/x_proc{ % x y
|
||||
exch t_array t_i get add exch moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/y_proc{ % x y
|
||||
t_array t_i get add moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/xy_proc{
|
||||
% x y
|
||||
t_array t_i 2 copy 1 add get 3 1 roll get
|
||||
4 -1 roll add 3 1 roll add moveto
|
||||
/t_i t_i 2 add store
|
||||
}bd
|
||||
/sop 0 def % don't bind sop
|
||||
/cp_proc/x_proc ld % default moveto proc is for xwidths only
|
||||
/base_charpath % string array
|
||||
{
|
||||
/t_array xs
|
||||
/t_i 0 def
|
||||
{ % char
|
||||
t_c 0 3 -1 roll put
|
||||
currentpoint
|
||||
t_c cply sop
|
||||
cp_proc
|
||||
}forall
|
||||
/t_array 0 def
|
||||
}bd
|
||||
/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath
|
||||
|
||||
% default sop is stroke
|
||||
/nop{}def
|
||||
/xsp/base_charpath ld
|
||||
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
|
||||
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
|
||||
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
|
||||
/refnt{ % newname encoding fontname
|
||||
findfont dup length dict copy dup
|
||||
/Encoding 4 -1 roll put
|
||||
definefont pop
|
||||
}bd
|
||||
/renmfont{ % newname fontname
|
||||
findfont dup length dict copy definefont pop
|
||||
}bd
|
||||
|
||||
L3? dup dup{save exch}if
|
||||
|
||||
% languagelevel2 ONLY code goes here
|
||||
|
||||
/Range 0 def
|
||||
/DataSource 0 def
|
||||
/val 0 def
|
||||
/nRange 0 def
|
||||
/mulRange 0 def
|
||||
/d0 0 def
|
||||
/r0 0 def
|
||||
/di 0 def
|
||||
/ri 0 def
|
||||
/a0 0 def
|
||||
/a1 0 def
|
||||
/r1 0 def
|
||||
/r2 0 def
|
||||
/dx 0 def
|
||||
/Nsteps 0 def
|
||||
/sh3tp 0 def
|
||||
/ymax 0 def
|
||||
/ymin 0 def
|
||||
/xmax 0 def
|
||||
/xmin 0 def
|
||||
|
||||
/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation.
|
||||
{
|
||||
begin
|
||||
/nRange Range length 2 idiv store
|
||||
/mulRange % precompute the range data needed to map a sample value from the table to a range value
|
||||
% this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ]
|
||||
[
|
||||
0 1 nRange 1 sub
|
||||
{ % index
|
||||
2 mul/nDim2 xd % 2*dimension# we are dealing with
|
||||
Range nDim2 get % ymin
|
||||
Range nDim2 1 add get % ymin ymax
|
||||
1 index sub % ymin (ymax-ymin)
|
||||
% xmin = 0, xmax = 255 (2^bitspersample - 1)
|
||||
255 div % ymin (ymax-ymin)/(xmax - xmin)
|
||||
exch % (ymax-ymin)/(xmax - xmin) ymin
|
||||
}for
|
||||
]store
|
||||
end
|
||||
}bd
|
||||
|
||||
/FunEval % val1 fundict -> comp1 comp2 ... compN
|
||||
{
|
||||
begin
|
||||
% the value passed in is the base index into the table
|
||||
nRange mul /val xd % compute the actual index to the table
|
||||
% since there are nRange entries per base index
|
||||
0 1 nRange 1 sub
|
||||
{
|
||||
dup 2 mul/nDim2 xd % dim
|
||||
val % base value to use to do our lookup
|
||||
add DataSource exch get % lookedupval
|
||||
mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin)
|
||||
mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin
|
||||
add % interpolated result
|
||||
}for % comp1 comp2 ... compN
|
||||
end
|
||||
}bd
|
||||
|
||||
/max % a b -> max(a, b)
|
||||
{
|
||||
2 copy lt
|
||||
{exch pop}{pop}ifelse
|
||||
}bd
|
||||
|
||||
/sh2
|
||||
{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 x1 y1
|
||||
3 index 3 index translate % origin is now at beginning point of shading
|
||||
% x0 y0 x1 y1
|
||||
3 -1 roll sub % x0 x1 y1-y0
|
||||
3 1 roll exch % y1-y0 x1 x0
|
||||
sub % y1-y0 x1-x0
|
||||
2 copy
|
||||
dup mul exch dup mul add sqrt % length of segment between two points
|
||||
dup
|
||||
scale
|
||||
atan % atan (dy/dx)
|
||||
%dup (rotation angle = )print ==
|
||||
rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn
|
||||
|
||||
/Function load setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
|
||||
% this is now specific to axial shadings. Compute the maximum bounds to fill
|
||||
clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
xmin ymin xmin abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
% paint the rects. The sampling frequency is that of our table
|
||||
/Nsteps/Function load/Size get 0 get 1 sub store
|
||||
/dx 1 Nsteps div store
|
||||
gsave
|
||||
/di ymax ymin sub store
|
||||
/Function load
|
||||
% loop Nsteps + 1 times, incrementing the index by 1 each time
|
||||
0 1 Nsteps
|
||||
{
|
||||
1 index FunEval sc
|
||||
0 ymin dx di rectfill
|
||||
dx 0 translate
|
||||
}for
|
||||
pop % pop our function
|
||||
grestore % origin is back to start point
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
1 ymin xmax 1 sub abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
|
||||
/shp % this paints our shape for shading type 3
|
||||
{ % x1 r1 x0 r0 -
|
||||
4 copy
|
||||
|
||||
% fill interior arc
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
}bd
|
||||
|
||||
/calcmaxs
|
||||
{ % calculate maximum distance vector from origin to corner points
|
||||
% of bbox
|
||||
xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2)
|
||||
xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2)
|
||||
xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2)
|
||||
xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2)
|
||||
max max max % maximum value
|
||||
}bd
|
||||
|
||||
/sh3
|
||||
{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 r1 x1 y1 r2
|
||||
5 index 5 index translate % origin is now at first circle origin
|
||||
3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx
|
||||
3 -1 roll 5 -1 roll sub % r1 r2 dx dy
|
||||
2 copy dup mul exch dup mul add sqrt
|
||||
/dx xs % r1 r2 dx dy
|
||||
2 copy 0 ne exch 0 ne or
|
||||
{
|
||||
% r1 r2 dx dy
|
||||
exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected
|
||||
}{
|
||||
pop pop
|
||||
}ifelse
|
||||
% r1 r2
|
||||
/r2 xs
|
||||
/r1 xs
|
||||
/Function load
|
||||
dup/Size get 0 get 1 sub % this is the size of our table minus 1
|
||||
/Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device
|
||||
setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
% determine the case:
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: r1 = r2
|
||||
% case 3: r1 != r2
|
||||
dx r2 add r1 lt{
|
||||
% circle 2 inside of circle 1
|
||||
0
|
||||
}{
|
||||
dx r1 add r2 le
|
||||
{ % circle 1 inside of circle 2
|
||||
1
|
||||
}{ % circles don't contain each other
|
||||
r1 r2 eq
|
||||
{ % equal
|
||||
2
|
||||
}{ % r1 != r2
|
||||
3
|
||||
}ifelse
|
||||
}ifelse
|
||||
}ifelse
|
||||
/sh3tp xs % sh3tp has the number of our different cases
|
||||
clippath {pathbbox}stopped {0 0 0 0}if
|
||||
newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
|
||||
% Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr)
|
||||
dx dup mul r2 r1 sub dup mul sub dup 0 gt
|
||||
{
|
||||
sqrt r2 r1 sub atan
|
||||
/a0 exch 180 exch sub store
|
||||
/a1 a0 neg store
|
||||
}{
|
||||
pop
|
||||
/a0 0 store
|
||||
/a1 360 store
|
||||
}ifelse
|
||||
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{ % case 0
|
||||
dx 0 r1 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % case 1
|
||||
r1 0 gt{0 0 r1 0 360 arc fill}if
|
||||
}
|
||||
{ % case 2
|
||||
% r1 == r2, extend 0
|
||||
% r3 = r, x3 = -(abs(minx) + r), x1 = 0
|
||||
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 xmin abs r1 add neg r1 shp
|
||||
}
|
||||
{ % case 3
|
||||
% no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1
|
||||
r1 neg r2 r1 sub div dx mul % this is point of beginning circle
|
||||
0 % point of ending circle
|
||||
shp % takes x(i+1) r(i+1) x(i) r(i)
|
||||
}{ % the first circle is the bigger of the two
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% negative direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 calcmaxs % 0 r1 maxs
|
||||
dup
|
||||
% calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2))
|
||||
r2 add dx mul dx r1 r2 sub sub div
|
||||
neg % maxs xs'
|
||||
exch 1 index % xs' maxs xs'
|
||||
abs exch sub
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}sh3tp get exec % execute the extend at beginning proc for our shading type
|
||||
}if
|
||||
}if
|
||||
|
||||
% now do the shading
|
||||
/d0 0 store
|
||||
/r0 r1 store
|
||||
/di dx Nsteps div store
|
||||
/ri r2 r1 sub Nsteps div store
|
||||
/Function load
|
||||
0 1 Nsteps
|
||||
{ % function t(i)
|
||||
1 index FunEval sc
|
||||
d0 di add r0 ri add d0 r0 shp
|
||||
{
|
||||
% fill interior arc
|
||||
d0 0 r0 a1 a0 arc
|
||||
d0 di add 0 r0 ri add a0 a1 arcn
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
d0 0 r0 a0 a1 arc
|
||||
d0 di add 0 r0 ri add a1 a0 arcn
|
||||
fill
|
||||
}pop
|
||||
|
||||
% advance to next
|
||||
/d0 d0 di add store
|
||||
/r0 r0 ri add store
|
||||
}for
|
||||
pop % pop our function dict
|
||||
|
||||
% handle Extend
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{
|
||||
dx 0 r2 0 360 arc fill
|
||||
}
|
||||
{
|
||||
dx 0 r2 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % r1 == r2, extend 1
|
||||
% r3 = r, x3 = (abs(xmax) + r), x1 = dx
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
xmax abs r1 add r1 dx r1 shp
|
||||
}
|
||||
{ % no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% positive direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
calcmaxs dup % maxs maxs
|
||||
% calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1))
|
||||
r1 add dx mul dx r2 r1 sub sub div % maxs xs
|
||||
exch 1 index % xs maxs xs
|
||||
exch sub
|
||||
dx r2
|
||||
shp
|
||||
}{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
r1 neg r2 r1 sub div dx mul % this is point of ending circle
|
||||
0 % radius of ending circle
|
||||
dx % point of starting circle
|
||||
r2 % radius of starting circle
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}
|
||||
sh3tp get exec % execute the extend at end proc for our shading type
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions
|
||||
{ % shadingDict --
|
||||
begin
|
||||
/ShadingType load dup dup 2 eq exch 3 eq or
|
||||
{ % shadingtype
|
||||
gsave
|
||||
newpath
|
||||
/ColorSpace load scs
|
||||
currentdict/BBox known
|
||||
{
|
||||
/BBox load aload pop % llx lly urx ury
|
||||
2 index sub % llx lly urx ury-lly
|
||||
3 index % llx lly urx ury-lly llx
|
||||
3 -1 roll exch sub
|
||||
exch rectclip
|
||||
}if
|
||||
2 eq
|
||||
{sh2}{sh3}ifelse
|
||||
grestore
|
||||
}{
|
||||
% shadingtype
|
||||
pop
|
||||
(DEBUG: shading type unimplemented\n)print flush
|
||||
}ifelse
|
||||
end
|
||||
}bd
|
||||
|
||||
% end of language level 2 ONLY code
|
||||
|
||||
{restore}if not dup{save exch}if
|
||||
% languagelevel3 ONLY code goes here
|
||||
L3?{ % we do these loads conditionally or else they will fail on a level 2 printer
|
||||
/sh/shfill ld
|
||||
/csq/clipsave ld
|
||||
/csQ/cliprestore ld
|
||||
}if
|
||||
{restore}if
|
||||
|
||||
%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free
|
||||
end
|
||||
setpacking
|
||||
% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack
|
||||
%%EndFile
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%PageBoundingBox: 0 0 1102 1102
|
||||
%%BeginPageSetup
|
||||
cg_md begin
|
||||
bp
|
||||
sdmtx
|
||||
[ /CIEBasedABC 4 dict dup begin
|
||||
/WhitePoint [ 0.9505 1.0000 1.0891 ] def
|
||||
/DecodeABC [
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
] def
|
||||
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def
|
||||
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def
|
||||
end ] /Cs1 exch/ColorSpace dr pop
|
||||
%%EndPageSetup
|
||||
0.60000002 i
|
||||
/Cs1 SC
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
0 1102 m
|
||||
518 1102 l
|
||||
518 0 l
|
||||
0 0 l
|
||||
0 1102 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 1102 rc
|
||||
-10 1112 m
|
||||
528 1112 l
|
||||
528 -10 l
|
||||
-10 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.76078433 0.65098041 0.38039216 sc
|
||||
q
|
||||
518 1102 m
|
||||
1102 1102 l
|
||||
1102 0 l
|
||||
518 0 l
|
||||
518 1102 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 1102 rc
|
||||
508 1112 m
|
||||
1112 1112 l
|
||||
1112 -10 l
|
||||
508 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
921.56757 760 m
|
||||
982 760 l
|
||||
982 340 l
|
||||
921.56757 340 l
|
||||
921.56757 553.5 l
|
||||
698.43243 553.5 l
|
||||
698.43243 340 l
|
||||
638 340 l
|
||||
638 760 l
|
||||
698.43243 760 l
|
||||
698.43243 568.08331 l
|
||||
921.56757 568.08331 l
|
||||
921.56757 760 l
|
||||
h
|
||||
W
|
||||
0 0 1102 1102 rc
|
||||
628 770 m
|
||||
992 770 l
|
||||
992 330 l
|
||||
628 330 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.76078433 0.65098041 0.38039216 sc
|
||||
q
|
||||
180.15546 554.08331 m
|
||||
180.15546 357.5 l
|
||||
233.30252 357.5 l
|
||||
266.00839 357.5 290.53781 362.16666 306.89075 378.5 c
|
||||
323.24368 395.41666 331.42017 420.5 331.42017 454.33334 c
|
||||
331.42017 488.75 322.07562 513.83331 303.97058 530.16669 c
|
||||
285.28152 546.5 253.15967 554.66669 206.43698 554.66669 c
|
||||
198.84454 554.66669 187.16386 554.08331 180.15546 554.08331 c
|
||||
h
|
||||
180.15546 744.25 m
|
||||
180.15546 568.66669 l
|
||||
195.92436 568.66669 l
|
||||
240.31093 568.66669 270.09665 575.66669 286.44958 589.66669 c
|
||||
302.80252 603.66669 310.39496 625.83331 310.39496 657.33331 c
|
||||
310.39496 678.91669 307.47479 695.83331 301.05042 707.5 c
|
||||
294.62604 719.75 284.69748 728.5 272.43277 734.91669 c
|
||||
259.58405 741.91669 238.55882 744.83331 207.60504 744.83331 c
|
||||
199.42857 744.83331 187.16386 744.83331 180.15546 744.25 c
|
||||
h
|
||||
120 340 m
|
||||
120 760 l
|
||||
204.68488 760 l
|
||||
318.57144 760 375.80673 727.33331 375.80673 661.41669 c
|
||||
375.80673 634.58331 365.87814 612.41669 346.021 596.08331 c
|
||||
326.74789 579.75 296.96219 568.66669 257.83194 562.83331 c
|
||||
305.13864 559.33331 340.18066 547.66669 363.54202 527.83331 c
|
||||
386.31934 507.41666 398 482.33334 398 452.58334 c
|
||||
398 426.33334 389.82352 403.58334 374.63864 384.33334 c
|
||||
358.86975 365.66666 339.0126 354 314.48318 348.16666 c
|
||||
289.9538 342.33334 257.83194 340 216.94958 340 c
|
||||
120 340 l
|
||||
h
|
||||
W
|
||||
0 0 1102 1102 rc
|
||||
110 770 m
|
||||
408 770 l
|
||||
408 330 l
|
||||
110 330 l
|
||||
h
|
||||
f
|
||||
ep
|
||||
end
|
||||
%%Trailer
|
||||
%%EOF
|
@ -0,0 +1,912 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%APL_DSC_Encoding: UTF8
|
||||
%APLProducer: (Version 10.14.6 (Build 18G95) Quartz PS Context)
|
||||
%%Title: (Unknown)
|
||||
%%Creator: (Unknown)
|
||||
%%CreationDate: (Unknown)
|
||||
%%For: (Unknown)
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%Pages: 1
|
||||
%%BoundingBox: 0 0 1102 1102
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
%%BeginFile: cg-pdf.ps
|
||||
%%Copyright: Copyright 2000-2004 Apple Computer Incorporated.
|
||||
%%Copyright: All Rights Reserved.
|
||||
currentpacking true setpacking
|
||||
/cg_md 141 dict def
|
||||
cg_md begin
|
||||
/L3? languagelevel 3 ge def
|
||||
/bd{bind def}bind def
|
||||
/ld{load def}bd
|
||||
/xs{exch store}bd
|
||||
/xd{exch def}bd
|
||||
/cmmtx matrix def
|
||||
mark
|
||||
/sc/setcolor
|
||||
/scs/setcolorspace
|
||||
/dr/defineresource
|
||||
/fr/findresource
|
||||
/T/true
|
||||
/F/false
|
||||
/d/setdash
|
||||
/w/setlinewidth
|
||||
/J/setlinecap
|
||||
/j/setlinejoin
|
||||
/M/setmiterlimit
|
||||
/i/setflat
|
||||
/rc/rectclip
|
||||
/rf/rectfill
|
||||
/rs/rectstroke
|
||||
/f/fill
|
||||
/f*/eofill
|
||||
/sf/selectfont
|
||||
/s/show
|
||||
%/as/ashow
|
||||
/xS/xshow
|
||||
/yS/yshow
|
||||
/xyS/xyshow
|
||||
/S/stroke
|
||||
/m/moveto
|
||||
/l/lineto
|
||||
/c/curveto
|
||||
/h/closepath
|
||||
/n/newpath
|
||||
/q/gsave
|
||||
/Q/grestore
|
||||
counttomark 2 idiv
|
||||
%dup (number of ld's = )print == flush % *** how many
|
||||
{ld}repeat pop
|
||||
/SC{ % CSname
|
||||
/ColorSpace fr scs
|
||||
}bd
|
||||
/sopr /setoverprint where{pop/setoverprint}{/pop}ifelse ld
|
||||
/soprm /setoverprintmode where{pop/setoverprintmode}{/pop}ifelse ld
|
||||
/cgmtx matrix def
|
||||
/sdmtx{cgmtx currentmatrix pop}bd
|
||||
/CM {cgmtx setmatrix}bd % pop the ctm: our gstate ctm on host is now identity
|
||||
/cm {cmmtx astore CM concat}bd % reset the matrix and then concat
|
||||
/W{clip newpath}bd
|
||||
/W*{eoclip newpath}bd
|
||||
|
||||
statusdict begin product end dup (HP) anchorsearch{
|
||||
pop pop pop % pop off the search results
|
||||
true
|
||||
}{
|
||||
pop % previous search result
|
||||
(hp) anchorsearch{
|
||||
pop pop true
|
||||
}{
|
||||
pop false
|
||||
}ifelse
|
||||
}ifelse
|
||||
|
||||
{ % HP is the product: we use this method of stroking because of a bug in their clone printers with certain T3 fonts
|
||||
{
|
||||
{ % charCode Wx Wy
|
||||
pop pop % charCode
|
||||
(0)dup 0 4 -1 roll put
|
||||
F charpath
|
||||
}cshow
|
||||
}
|
||||
}{
|
||||
{F charpath}
|
||||
}ifelse
|
||||
/cply exch bd
|
||||
/cps {cply stroke}bd
|
||||
/pgsave 0 def
|
||||
/bp{/pgsave save store}bd
|
||||
/ep{pgsave restore showpage}def % dont' bind
|
||||
/re{4 2 roll m 1 index 0 rlineto 0 exch rlineto neg 0 rlineto h}bd
|
||||
|
||||
/scrdict 10 dict def
|
||||
/scrmtx matrix def
|
||||
/patarray 0 def
|
||||
/createpat{patarray 3 1 roll put}bd
|
||||
/makepat{
|
||||
scrmtx astore pop
|
||||
gsave
|
||||
initgraphics
|
||||
CM
|
||||
patarray exch get
|
||||
scrmtx
|
||||
makepattern
|
||||
grestore
|
||||
setpattern
|
||||
}bd
|
||||
|
||||
/cg_BeginEPSF{
|
||||
userdict save/cg_b4_Inc_state exch put
|
||||
userdict/cg_endepsf/cg_EndEPSF load put
|
||||
count userdict/cg_op_count 3 -1 roll put
|
||||
countdictstack dup array dictstack userdict/cg_dict_array 3 -1 roll put
|
||||
3 sub{end}repeat
|
||||
/showpage {} def
|
||||
0 setgray 0 setlinecap 1 setlinewidth 0 setlinejoin
|
||||
10 setmiterlimit [] 0 setdash newpath
|
||||
false setstrokeadjust false setoverprint % don't use F
|
||||
}bd
|
||||
/cg_EndEPSF{
|
||||
countdictstack 3 sub { end } repeat
|
||||
cg_dict_array 3 1 index length 3 sub getinterval
|
||||
{begin}forall
|
||||
count userdict/cg_op_count get sub{pop}repeat
|
||||
userdict/cg_b4_Inc_state get restore
|
||||
F setpacking
|
||||
}bd
|
||||
|
||||
/cg_biproc{currentfile/RunLengthDecode filter}bd
|
||||
/cg_aiproc{currentfile/ASCII85Decode filter/RunLengthDecode filter}bd
|
||||
/ImageDataSource 0 def
|
||||
L3?{
|
||||
/cg_mibiproc{pop pop/ImageDataSource{cg_biproc}def}bd
|
||||
/cg_miaiproc{pop pop/ImageDataSource{cg_aiproc}def}bd
|
||||
}{
|
||||
/ImageBandMask 0 def
|
||||
/ImageBandData 0 def
|
||||
/cg_mibiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/RunLengthDecode filter dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
/cg_miaiproc{
|
||||
string/ImageBandMask xs
|
||||
string/ImageBandData xs
|
||||
/ImageDataSource{[currentfile/ASCII85Decode filter/RunLengthDecode filter
|
||||
dup ImageBandMask/readstring cvx
|
||||
/pop cvx dup ImageBandData/readstring cvx/pop cvx]cvx bind}bd
|
||||
}bd
|
||||
}ifelse
|
||||
/imsave 0 def
|
||||
/BI{save/imsave xd mark}bd
|
||||
/EI{imsave restore}bd
|
||||
/ID{
|
||||
counttomark 2 idiv
|
||||
dup 2 add % leave room for imagetype and imagematrix
|
||||
dict begin
|
||||
{def} repeat
|
||||
pop % remove mark
|
||||
/ImageType 1 def
|
||||
/ImageMatrix[Width 0 0 Height neg 0 Height]def
|
||||
currentdict dup/ImageMask known{ImageMask}{F}ifelse exch
|
||||
% currentdict on stack
|
||||
L3?{
|
||||
dup/MaskedImage known
|
||||
{
|
||||
pop
|
||||
<<
|
||||
/ImageType 3
|
||||
/InterleaveType 2
|
||||
/DataDict currentdict
|
||||
/MaskDict
|
||||
<< /ImageType 1
|
||||
/Width Width
|
||||
/Height Height
|
||||
/ImageMatrix ImageMatrix
|
||||
/BitsPerComponent 1
|
||||
/Decode [0 1]
|
||||
currentdict/Interpolate known
|
||||
{/Interpolate Interpolate}if
|
||||
>>
|
||||
>>
|
||||
}if
|
||||
}if
|
||||
exch
|
||||
{imagemask}{image}ifelse
|
||||
end % pop imagedict from dict stack
|
||||
}bd
|
||||
|
||||
/cguidfix{statusdict begin mark version end
|
||||
{cvr}stopped{cleartomark 0}{exch pop}ifelse
|
||||
2012 lt{dup findfont dup length dict begin
|
||||
{1 index/FID ne 2 index/UniqueID ne and
|
||||
{def} {pop pop} ifelse}forall
|
||||
currentdict end definefont pop
|
||||
}{pop}ifelse
|
||||
}bd
|
||||
/t_array 0 def
|
||||
/t_i 0 def
|
||||
/t_c 1 string def
|
||||
/x_proc{ % x y
|
||||
exch t_array t_i get add exch moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/y_proc{ % x y
|
||||
t_array t_i get add moveto
|
||||
/t_i t_i 1 add store
|
||||
}bd
|
||||
/xy_proc{
|
||||
% x y
|
||||
t_array t_i 2 copy 1 add get 3 1 roll get
|
||||
4 -1 roll add 3 1 roll add moveto
|
||||
/t_i t_i 2 add store
|
||||
}bd
|
||||
/sop 0 def % don't bind sop
|
||||
/cp_proc/x_proc ld % default moveto proc is for xwidths only
|
||||
/base_charpath % string array
|
||||
{
|
||||
/t_array xs
|
||||
/t_i 0 def
|
||||
{ % char
|
||||
t_c 0 3 -1 roll put
|
||||
currentpoint
|
||||
t_c cply sop
|
||||
cp_proc
|
||||
}forall
|
||||
/t_array 0 def
|
||||
}bd
|
||||
/sop/stroke ld % default sop is stroke. Done here so we don't bind in /base_charpath
|
||||
|
||||
% default sop is stroke
|
||||
/nop{}def
|
||||
/xsp/base_charpath ld
|
||||
/ysp{/cp_proc/y_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xysp{/cp_proc/xy_proc ld base_charpath/cp_proc/x_proc ld}bd
|
||||
/xmp{/sop/nop ld /cp_proc/x_proc ld base_charpath/sop/stroke ld}bd
|
||||
/ymp{/sop/nop ld /cp_proc/y_proc ld base_charpath/sop/stroke ld}bd
|
||||
/xymp{/sop/nop ld /cp_proc/xy_proc ld base_charpath/sop/stroke ld}bd
|
||||
/refnt{ % newname encoding fontname
|
||||
findfont dup length dict copy dup
|
||||
/Encoding 4 -1 roll put
|
||||
definefont pop
|
||||
}bd
|
||||
/renmfont{ % newname fontname
|
||||
findfont dup length dict copy definefont pop
|
||||
}bd
|
||||
|
||||
L3? dup dup{save exch}if
|
||||
|
||||
% languagelevel2 ONLY code goes here
|
||||
|
||||
/Range 0 def
|
||||
/DataSource 0 def
|
||||
/val 0 def
|
||||
/nRange 0 def
|
||||
/mulRange 0 def
|
||||
/d0 0 def
|
||||
/r0 0 def
|
||||
/di 0 def
|
||||
/ri 0 def
|
||||
/a0 0 def
|
||||
/a1 0 def
|
||||
/r1 0 def
|
||||
/r2 0 def
|
||||
/dx 0 def
|
||||
/Nsteps 0 def
|
||||
/sh3tp 0 def
|
||||
/ymax 0 def
|
||||
/ymin 0 def
|
||||
/xmax 0 def
|
||||
/xmin 0 def
|
||||
|
||||
/setupFunEval % funDict -- % this calculates and sets up a function dict for evaulation.
|
||||
{
|
||||
begin
|
||||
/nRange Range length 2 idiv store
|
||||
/mulRange % precompute the range data needed to map a sample value from the table to a range value
|
||||
% this data looks like [ range0mul range0min range1mul range1min ... rangeN-1mul rangeN-1min ]
|
||||
[
|
||||
0 1 nRange 1 sub
|
||||
{ % index
|
||||
2 mul/nDim2 xd % 2*dimension# we are dealing with
|
||||
Range nDim2 get % ymin
|
||||
Range nDim2 1 add get % ymin ymax
|
||||
1 index sub % ymin (ymax-ymin)
|
||||
% xmin = 0, xmax = 255 (2^bitspersample - 1)
|
||||
255 div % ymin (ymax-ymin)/(xmax - xmin)
|
||||
exch % (ymax-ymin)/(xmax - xmin) ymin
|
||||
}for
|
||||
]store
|
||||
end
|
||||
}bd
|
||||
|
||||
/FunEval % val1 fundict -> comp1 comp2 ... compN
|
||||
{
|
||||
begin
|
||||
% the value passed in is the base index into the table
|
||||
nRange mul /val xd % compute the actual index to the table
|
||||
% since there are nRange entries per base index
|
||||
0 1 nRange 1 sub
|
||||
{
|
||||
dup 2 mul/nDim2 xd % dim
|
||||
val % base value to use to do our lookup
|
||||
add DataSource exch get % lookedupval
|
||||
mulRange nDim2 get mul % lookedupval*(ymax-ymin)/(xmax-xmin)
|
||||
mulRange nDim2 1 add get % lookedupval*(ymax-ymin)/(xmax-xmin) ymin
|
||||
add % interpolated result
|
||||
}for % comp1 comp2 ... compN
|
||||
end
|
||||
}bd
|
||||
|
||||
/max % a b -> max(a, b)
|
||||
{
|
||||
2 copy lt
|
||||
{exch pop}{pop}ifelse
|
||||
}bd
|
||||
|
||||
/sh2
|
||||
{ % emulation of shading type 2. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 x1 y1
|
||||
3 index 3 index translate % origin is now at beginning point of shading
|
||||
% x0 y0 x1 y1
|
||||
3 -1 roll sub % x0 x1 y1-y0
|
||||
3 1 roll exch % y1-y0 x1 x0
|
||||
sub % y1-y0 x1-x0
|
||||
2 copy
|
||||
dup mul exch dup mul add sqrt % length of segment between two points
|
||||
dup
|
||||
scale
|
||||
atan % atan (dy/dx)
|
||||
%dup (rotation angle = )print ==
|
||||
rotate % now line between 0,0 and 1,0 is the line perpendicular to which the axial lines are drawn
|
||||
|
||||
/Function load setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
|
||||
% this is now specific to axial shadings. Compute the maximum bounds to fill
|
||||
clippath {pathbbox}stopped {0 0 0 0}if newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
xmin ymin xmin abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
% paint the rects. The sampling frequency is that of our table
|
||||
/Nsteps/Function load/Size get 0 get 1 sub store
|
||||
/dx 1 Nsteps div store
|
||||
gsave
|
||||
/di ymax ymin sub store
|
||||
/Function load
|
||||
% loop Nsteps + 1 times, incrementing the index by 1 each time
|
||||
0 1 Nsteps
|
||||
{
|
||||
1 index FunEval sc
|
||||
0 ymin dx di rectfill
|
||||
dx 0 translate
|
||||
}for
|
||||
pop % pop our function
|
||||
grestore % origin is back to start point
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
1 ymin xmax 1 sub abs ymax ymin sub rectfill
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
|
||||
/shp % this paints our shape for shading type 3
|
||||
{ % x1 r1 x0 r0 -
|
||||
4 copy
|
||||
|
||||
% fill interior arc
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
dup 0 gt{
|
||||
0 exch a0 a1 arc
|
||||
}{
|
||||
pop 0 moveto
|
||||
}ifelse
|
||||
|
||||
dup 0 gt{
|
||||
0 exch a1 a0 arcn
|
||||
}{
|
||||
pop 0 lineto
|
||||
}ifelse
|
||||
|
||||
fill
|
||||
}bd
|
||||
|
||||
/calcmaxs
|
||||
{ % calculate maximum distance vector from origin to corner points
|
||||
% of bbox
|
||||
xmin dup mul ymin dup mul add sqrt % (xmin2 + ymin2)
|
||||
xmax dup mul ymin dup mul add sqrt % (xmax2 + ymin2)
|
||||
xmin dup mul ymax dup mul add sqrt % (xmin2 + ymax2)
|
||||
xmax dup mul ymax dup mul add sqrt % (xmax2 + ymax2)
|
||||
max max max % maximum value
|
||||
}bd
|
||||
|
||||
/sh3
|
||||
{ % emulation of shading type 3. Assumes shading dictionary is top dictionary on the dict stack
|
||||
/Coords load aload pop % x0 y0 r1 x1 y1 r2
|
||||
5 index 5 index translate % origin is now at first circle origin
|
||||
3 -1 roll 6 -1 roll sub % y0 r1 y1 r2 dx
|
||||
3 -1 roll 5 -1 roll sub % r1 r2 dx dy
|
||||
2 copy dup mul exch dup mul add sqrt
|
||||
/dx xs % r1 r2 dx dy
|
||||
2 copy 0 ne exch 0 ne or
|
||||
{
|
||||
% r1 r2 dx dy
|
||||
exch atan rotate % we are now rotated so dy is zero and positive values of dx move us as expected
|
||||
}{
|
||||
pop pop
|
||||
}ifelse
|
||||
% r1 r2
|
||||
/r2 xs
|
||||
/r1 xs
|
||||
/Function load
|
||||
dup/Size get 0 get 1 sub % this is the size of our table minus 1
|
||||
/Nsteps xs % at some point we should optimize this better so NSteps is based on needed steps for the device
|
||||
setupFunEval % may need to setup function dictionary by calling setupFunEval
|
||||
% determine the case:
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: r1 = r2
|
||||
% case 3: r1 != r2
|
||||
dx r2 add r1 lt{
|
||||
% circle 2 inside of circle 1
|
||||
0
|
||||
}{
|
||||
dx r1 add r2 le
|
||||
{ % circle 1 inside of circle 2
|
||||
1
|
||||
}{ % circles don't contain each other
|
||||
r1 r2 eq
|
||||
{ % equal
|
||||
2
|
||||
}{ % r1 != r2
|
||||
3
|
||||
}ifelse
|
||||
}ifelse
|
||||
}ifelse
|
||||
/sh3tp xs % sh3tp has the number of our different cases
|
||||
clippath {pathbbox}stopped {0 0 0 0}if
|
||||
newpath % x0 y0 x1 y1
|
||||
/ymax xs
|
||||
/xmax xs
|
||||
/ymin xs
|
||||
/xmin xs
|
||||
|
||||
% Arc angle atan( sqrt((dx*dx + dy*dy) - dr*dr), dr)
|
||||
dx dup mul r2 r1 sub dup mul sub dup 0 gt
|
||||
{
|
||||
sqrt r2 r1 sub atan
|
||||
/a0 exch 180 exch sub store
|
||||
/a1 a0 neg store
|
||||
}{
|
||||
pop
|
||||
/a0 0 store
|
||||
/a1 360 store
|
||||
}ifelse
|
||||
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 0 get r1 0 gt and % no need to extend if the radius of the first end is 0
|
||||
{
|
||||
0/Function load FunEval sc % evaluate the function to get a color and set it
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{ % case 0
|
||||
dx 0 r1 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % case 1
|
||||
r1 0 gt{0 0 r1 0 360 arc fill}if
|
||||
}
|
||||
{ % case 2
|
||||
% r1 == r2, extend 0
|
||||
% r3 = r, x3 = -(abs(minx) + r), x1 = 0
|
||||
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 xmin abs r1 add neg r1 shp
|
||||
}
|
||||
{ % case 3
|
||||
% no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1
|
||||
r1 neg r2 r1 sub div dx mul % this is point of beginning circle
|
||||
0 % point of ending circle
|
||||
shp % takes x(i+1) r(i+1) x(i) r(i)
|
||||
}{ % the first circle is the bigger of the two
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% negative direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
0 r1 calcmaxs % 0 r1 maxs
|
||||
dup
|
||||
% calculating xs: (-(maxs+r2)*x2)/(x2-(r1-r2))
|
||||
r2 add dx mul dx r1 r2 sub sub div
|
||||
neg % maxs xs'
|
||||
exch 1 index % xs' maxs xs'
|
||||
abs exch sub
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}sh3tp get exec % execute the extend at beginning proc for our shading type
|
||||
}if
|
||||
}if
|
||||
|
||||
% now do the shading
|
||||
/d0 0 store
|
||||
/r0 r1 store
|
||||
/di dx Nsteps div store
|
||||
/ri r2 r1 sub Nsteps div store
|
||||
/Function load
|
||||
0 1 Nsteps
|
||||
{ % function t(i)
|
||||
1 index FunEval sc
|
||||
d0 di add r0 ri add d0 r0 shp
|
||||
{
|
||||
% fill interior arc
|
||||
d0 0 r0 a1 a0 arc
|
||||
d0 di add 0 r0 ri add a0 a1 arcn
|
||||
fill
|
||||
|
||||
% fill exterior arc
|
||||
d0 0 r0 a0 a1 arc
|
||||
d0 di add 0 r0 ri add a1 a0 arcn
|
||||
fill
|
||||
}pop
|
||||
|
||||
% advance to next
|
||||
/d0 d0 di add store
|
||||
/r0 r0 ri add store
|
||||
}for
|
||||
pop % pop our function dict
|
||||
|
||||
% handle Extend
|
||||
currentdict/Extend known
|
||||
{
|
||||
/Extend load 1 get r2 0 gt and % no need to extend if the radius of the last end is 0
|
||||
{
|
||||
Nsteps/Function load FunEval sc % last element
|
||||
% case 0: circle1 inside circle2
|
||||
% case 1: circle 2 inside circle 1
|
||||
% case 2: circles don't contain each other and r1 == r2
|
||||
% case 3: circles don't contain each other and r1 != r2
|
||||
{
|
||||
{
|
||||
dx 0 r2 0 360 arc fill
|
||||
}
|
||||
{
|
||||
dx 0 r2 360 0 arcn
|
||||
xmin ymin moveto
|
||||
xmax ymin lineto
|
||||
xmax ymax lineto
|
||||
xmin ymax lineto
|
||||
xmin ymin lineto
|
||||
eofill % for the bigger radius we fill everything except our circle
|
||||
}
|
||||
{ % r1 == r2, extend 1
|
||||
% r3 = r, x3 = (abs(xmax) + r), x1 = dx
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
xmax abs r1 add r1 dx r1 shp
|
||||
}
|
||||
{ % no containment, r1 != r2
|
||||
|
||||
r2 r1 gt{
|
||||
% we find a circle on our line which is outside the bbox in the
|
||||
% positive direction
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
calcmaxs dup % maxs maxs
|
||||
% calculating xs: ((maxs+r1)*x2)/(x2-(r2-r1))
|
||||
r1 add dx mul dx r2 r1 sub sub div % maxs xs
|
||||
exch 1 index % xs maxs xs
|
||||
exch sub
|
||||
dx r2
|
||||
shp
|
||||
}{ % the endpoint we are drawing is that with a circle of zero radius
|
||||
% x(i+1) r(i+1) x(i) r(i) shp
|
||||
r1 neg r2 r1 sub div dx mul % this is point of ending circle
|
||||
0 % radius of ending circle
|
||||
dx % point of starting circle
|
||||
r2 % radius of starting circle
|
||||
shp
|
||||
}ifelse
|
||||
}
|
||||
}
|
||||
sh3tp get exec % execute the extend at end proc for our shading type
|
||||
}if
|
||||
}if
|
||||
}bd
|
||||
/sh % emulation of shfill operator for type 2 and type 3 shadings based on type 0 functions
|
||||
{ % shadingDict --
|
||||
begin
|
||||
/ShadingType load dup dup 2 eq exch 3 eq or
|
||||
{ % shadingtype
|
||||
gsave
|
||||
newpath
|
||||
/ColorSpace load scs
|
||||
currentdict/BBox known
|
||||
{
|
||||
/BBox load aload pop % llx lly urx ury
|
||||
2 index sub % llx lly urx ury-lly
|
||||
3 index % llx lly urx ury-lly llx
|
||||
3 -1 roll exch sub
|
||||
exch rectclip
|
||||
}if
|
||||
2 eq
|
||||
{sh2}{sh3}ifelse
|
||||
grestore
|
||||
}{
|
||||
% shadingtype
|
||||
pop
|
||||
(DEBUG: shading type unimplemented\n)print flush
|
||||
}ifelse
|
||||
end
|
||||
}bd
|
||||
|
||||
% end of language level 2 ONLY code
|
||||
|
||||
{restore}if not dup{save exch}if
|
||||
% languagelevel3 ONLY code goes here
|
||||
L3?{ % we do these loads conditionally or else they will fail on a level 2 printer
|
||||
/sh/shfill ld
|
||||
/csq/clipsave ld
|
||||
/csQ/cliprestore ld
|
||||
}if
|
||||
{restore}if
|
||||
|
||||
%currentdict dup maxlength exch length sub (number of extra slots in md = )print == flush % *** how many entries are free
|
||||
end
|
||||
setpacking
|
||||
% count 0 ne { pstack(***extras on stack during prolog execution***\n)print flush}if % *** BARK if anything is left on stack
|
||||
%%EndFile
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%PageBoundingBox: 0 0 1102 1102
|
||||
%%BeginPageSetup
|
||||
cg_md begin
|
||||
bp
|
||||
sdmtx
|
||||
[ /CIEBasedABC 4 dict dup begin
|
||||
/WhitePoint [ 0.9505 1.0000 1.0891 ] def
|
||||
/DecodeABC [
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
|
||||
{ 1.0 0.0 3 -1 roll 1 index 1 index le { exch pop} { pop } ifelse
|
||||
1 index 1 index ge { exch pop } { pop } ifelse <
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000001010101010101010101010101
|
||||
0101010101010101010101010101010101010101010101020202020202020202
|
||||
0202020202020202020202020202020202030303030303030303030303030303
|
||||
0303030303030304040404040404040404040404040404040404050505050505
|
||||
0505050505050505050506060606060606060606060606060607070707070707
|
||||
0707070707070708080808080808080808080808090909090909090909090909
|
||||
0a0a0a0a0a0a0a0a0a0a0a0b0b0b0b0b0b0b0b0b0b0b0c0c0c0c0c0c0c0c0c0c
|
||||
0d0d0d0d0d0d0d0d0d0d0e0e0e0e0e0e0e0e0e0f0f0f0f0f0f0f0f0f10101010
|
||||
1010101010111111111111111112121212121212121313131313131313141414
|
||||
1414141414151515151515151616161616161616171717171717171818181818
|
||||
18181919191919191a1a1a1a1a1a1a1b1b1b1b1b1b1c1c1c1c1c1c1c1d1d1d1d
|
||||
1d1d1e1e1e1e1e1e1f1f1f1f1f1f202020202020212121212121222222222223
|
||||
2323232323242424242425252525252526262626262727272727282828282829
|
||||
292929292a2a2a2a2a2b2b2b2b2b2c2c2c2c2c2d2d2d2d2d2e2e2e2e2e2f2f2f
|
||||
2f2f303030303131313131323232323333333333343434343535353535363636
|
||||
36373737373838383839393939393a3a3a3a3b3b3b3b3c3c3c3c3d3d3d3d3e3e
|
||||
3e3e3f3f3f3f4040404041414141424242424343434444444445454545464646
|
||||
4647474748484848494949494a4a4a4b4b4b4b4c4c4c4d4d4d4d4e4e4e4f4f4f
|
||||
4f50505051515151525252535353535454545555555656565657575758585859
|
||||
59595a5a5a5a5b5b5b5c5c5c5d5d5d5e5e5e5f5f5f6060606061616162626263
|
||||
63636464646565656666666767676868686969696a6a6a6b6b6b6c6c6d6d6d6e
|
||||
6e6e6f6f6f707070717171727273737374747475757576767677777878787979
|
||||
797a7a7b7b7b7c7c7c7d7d7e7e7e7f7f7f808081818182828283838484848585
|
||||
86868687878888888989898a8a8b8b8b8c8c8d8d8d8e8e8f8f90909091919292
|
||||
9293939494949595969697979798989999999a9a9b9b9c9c9c9d9d9e9e9f9f9f
|
||||
a0a0a1a1a2a2a3a3a3a4a4a5a5a6a6a6a7a7a8a8a9a9aaaaabababacacadadae
|
||||
aeafafb0b0b0b1b1b2b2b3b3b4b4b5b5b6b6b6b7b7b8b8b9b9bababbbbbcbcbd
|
||||
bdbebebebfbfc0c0c1c1c2c2c3c3c4c4c5c5c6c6c7c7c8c8c9c9cacacbcbcccc
|
||||
cdcdcececfcfd0d0d1d1d2d2d3d3d4d4d5d5d6d6d7d7d8d8d9d9dadadbdcdcdd
|
||||
dddededfdfe0e0e1e1e2e2e3e3e4e4e5e6e6e7e7e8e8e9e9eaeaebebecededee
|
||||
eeefeff0f0f1f1f2f3f3f4f4f5f5f6f6f7f8f8f9f9fafafbfcfcfdfdfefeffff
|
||||
> dup length 1 sub 3 -1 roll mul dup dup floor cvi exch ceiling
|
||||
cvi 3 index exch get 4 -1 roll 3 -1 roll get
|
||||
dup 3 1 roll sub 3 -1 roll dup floor cvi sub mul add 255 div } bind
|
||||
] def
|
||||
/MatrixABC [ 0.4124 0.2126 0.0193 0.3576 0.7151 0.1192 0.1805 0.0722 0.9508 ] def
|
||||
/RangeLMN [ 0.0 0.9505 0.0 1.0000 0.0 1.0891 ] def
|
||||
end ] /Cs1 exch/ColorSpace dr pop
|
||||
%%EndPageSetup
|
||||
0.60000002 i
|
||||
/Cs1 SC
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
0 1102 m
|
||||
518 1102 l
|
||||
518 0 l
|
||||
0 0 l
|
||||
0 1102 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 1102 rc
|
||||
-10 1112 m
|
||||
528 1112 l
|
||||
528 -10 l
|
||||
-10 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
1 1 1 sc
|
||||
q
|
||||
518 1102 m
|
||||
1102 1102 l
|
||||
1102 0 l
|
||||
518 0 l
|
||||
518 1102 l
|
||||
h
|
||||
W*
|
||||
0 0 1102 1102 rc
|
||||
508 1112 m
|
||||
1112 1112 l
|
||||
1112 -10 l
|
||||
508 -10 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
0.13333334 0.13333334 0.13333334 sc
|
||||
q
|
||||
921.56757 760 m
|
||||
982 760 l
|
||||
982 340 l
|
||||
921.56757 340 l
|
||||
921.56757 553.5 l
|
||||
698.43243 553.5 l
|
||||
698.43243 340 l
|
||||
638 340 l
|
||||
638 760 l
|
||||
698.43243 760 l
|
||||
698.43243 568.08331 l
|
||||
921.56757 568.08331 l
|
||||
921.56757 760 l
|
||||
h
|
||||
W
|
||||
0 0 1102 1102 rc
|
||||
628 770 m
|
||||
992 770 l
|
||||
992 330 l
|
||||
628 330 l
|
||||
h
|
||||
f
|
||||
Q
|
||||
1 1 1 sc
|
||||
q
|
||||
180.15546 554.08331 m
|
||||
180.15546 357.5 l
|
||||
233.30252 357.5 l
|
||||
266.00839 357.5 290.53781 362.16666 306.89075 378.5 c
|
||||
323.24368 395.41666 331.42017 420.5 331.42017 454.33334 c
|
||||
331.42017 488.75 322.07562 513.83331 303.97058 530.16669 c
|
||||
285.28152 546.5 253.15967 554.66669 206.43698 554.66669 c
|
||||
198.84454 554.66669 187.16386 554.08331 180.15546 554.08331 c
|
||||
h
|
||||
180.15546 744.25 m
|
||||
180.15546 568.66669 l
|
||||
195.92436 568.66669 l
|
||||
240.31093 568.66669 270.09665 575.66669 286.44958 589.66669 c
|
||||
302.80252 603.66669 310.39496 625.83331 310.39496 657.33331 c
|
||||
310.39496 678.91669 307.47479 695.83331 301.05042 707.5 c
|
||||
294.62604 719.75 284.69748 728.5 272.43277 734.91669 c
|
||||
259.58405 741.91669 238.55882 744.83331 207.60504 744.83331 c
|
||||
199.42857 744.83331 187.16386 744.83331 180.15546 744.25 c
|
||||
h
|
||||
120 340 m
|
||||
120 760 l
|
||||
204.68488 760 l
|
||||
318.57144 760 375.80673 727.33331 375.80673 661.41669 c
|
||||
375.80673 634.58331 365.87814 612.41669 346.021 596.08331 c
|
||||
326.74789 579.75 296.96219 568.66669 257.83194 562.83331 c
|
||||
305.13864 559.33331 340.18066 547.66669 363.54202 527.83331 c
|
||||
386.31934 507.41666 398 482.33334 398 452.58334 c
|
||||
398 426.33334 389.82352 403.58334 374.63864 384.33334 c
|
||||
358.86975 365.66666 339.0126 354 314.48318 348.16666 c
|
||||
289.9538 342.33334 257.83194 340 216.94958 340 c
|
||||
120 340 l
|
||||
h
|
||||
W
|
||||
0 0 1102 1102 rc
|
||||
110 770 m
|
||||
408 770 l
|
||||
408 330 l
|
||||
110 330 l
|
||||
h
|
||||
f
|
||||
ep
|
||||
end
|
||||
%%Trailer
|
||||
%%EOF
|
After Width: | Height: | Size: 904 KiB |
After Width: | Height: | Size: 666 KiB |
After Width: | Height: | Size: 665 KiB |
After Width: | Height: | Size: 415 KiB |
After Width: | Height: | Size: 647 KiB |
After Width: | Height: | Size: 578 KiB |
After Width: | Height: | Size: 674 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 319 B |
After Width: | Height: | Size: 3.0 KiB |
After Width: | Height: | Size: 4.1 KiB |
After Width: | Height: | Size: 555 B |
After Width: | Height: | Size: 956 B |
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.6 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 2.1 KiB |
After Width: | Height: | Size: 2.2 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.7 KiB |
After Width: | Height: | Size: 322 B |
After Width: | Height: | Size: 3.2 KiB |
After Width: | Height: | Size: 4.2 KiB |
After Width: | Height: | Size: 612 B |
After Width: | Height: | Size: 986 B |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 1.7 KiB |
After Width: | Height: | Size: 38 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 8.9 KiB |
After Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 93 KiB |
After Width: | Height: | Size: 91 KiB |
After Width: | Height: | Size: 23 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 254 KiB |
After Width: | Height: | Size: 250 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 65 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 113 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 11 KiB |
After Width: | Height: | Size: 2.6 KiB |
After Width: | Height: | Size: 2.8 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 3.9 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 13 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 2.5 KiB |
@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: admin-client
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: admin-client
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: admin-client
|
||||
spec:
|
||||
serviceAccountName: barretthousen-service
|
||||
containers:
|
||||
- name: admin-client
|
||||
image: barretthousen/client-admin-client:latest
|
||||
imagePullPolicy: Always
|
||||
stdin: true
|
||||
tty: true
|
||||
env:
|
||||
- name: BH_CLIENT_INTERNAL_API_HOST
|
||||
value: "http://proxy-admin"
|
||||
- name: ORIGIN
|
||||
value: https://admin.barretthousen.com
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: http
|
||||
resources:
|
||||
limits:
|
||||
memory: "512Mi"
|
||||
cpu: "500m"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: admin-client
|
||||
spec:
|
||||
selector:
|
||||
app: admin-client
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 80
|
@ -0,0 +1,25 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: admin
|
||||
labels:
|
||||
name: admin
|
||||
spec:
|
||||
rules:
|
||||
- host: admin.barretthousen.com
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/api"
|
||||
backend:
|
||||
service:
|
||||
name: proxy-admin
|
||||
port:
|
||||
number: 80
|
||||
- pathType: ImplementationSpecific
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: admin-client
|
||||
port:
|
||||
number: 80
|
@ -0,0 +1,71 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: catalog
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
service: catalog
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
service: catalog
|
||||
spec:
|
||||
serviceAccountName: barretthousen-service
|
||||
containers:
|
||||
- name: catalog
|
||||
image: barretthousen/service-catalog:latest
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 5001
|
||||
name: grpc
|
||||
command:
|
||||
- /opt/catalog
|
||||
args:
|
||||
- -migrate
|
||||
resources:
|
||||
limits:
|
||||
cpu: "250m"
|
||||
memory: "128Mi"
|
||||
volumeMounts:
|
||||
- mountPath: /config/
|
||||
name: catalog-config
|
||||
volumes:
|
||||
- name: catalog-config
|
||||
secret:
|
||||
secretName: catalog-config
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: catalog
|
||||
spec:
|
||||
selector:
|
||||
service: catalog
|
||||
ports:
|
||||
- port: 5001
|
||||
targetPort: 5001
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: catalog-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 5001
|
||||
db_service:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: catalog-service
|
||||
password: catalog-service
|
||||
db_migrate:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: postgres
|
||||
password: bh-admin
|
@ -0,0 +1,25 @@
|
||||
apiVersion: networking.k8s.io/v1
|
||||
kind: Ingress
|
||||
metadata:
|
||||
name: web
|
||||
labels:
|
||||
name: web
|
||||
spec:
|
||||
rules:
|
||||
- host: barretthousen.com
|
||||
http:
|
||||
paths:
|
||||
- pathType: Prefix
|
||||
path: "/api"
|
||||
backend:
|
||||
service:
|
||||
name: proxy-web
|
||||
port:
|
||||
number: 80
|
||||
- pathType: ImplementationSpecific
|
||||
path: "/"
|
||||
backend:
|
||||
service:
|
||||
name: web-client
|
||||
port:
|
||||
number: 80
|
@ -0,0 +1,27 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: bh-registry
|
||||
type: kubernetes.io/dockerconfigjson
|
||||
stringData:
|
||||
.dockerconfigjson: ENC[AES256_GCM,data:bfqlh7Vy3HDYFtgv56xO+8lXOLO9bQWRC16N8hAzv6xJaIN6CmXDwFzoLoGWPrP9s/o446tuOEJEylf5z/ITnLtdGJgMsN13Xk7OiF9B2unV8yOOrzt6U6R2s5cFpbSL3tAHQmDKHxRrzbvyV2J3magen7oHQWbkwkOQq7FqV/k7wFly+bei1u+YLJ9hq798Xa5HG9j4LsVWi5izKt1BBss2xFlo3yzEFqNmQ+AzcUN1uK1xwStplK4IKC36rewONDS+yyqj830LLShb,iv:qDwYxBqK+ZamBcWEuF+UEfW8gLFROagaBqVAc1tCjUI=,tag:OYhChcvisxP0r3kQ4hq4SA==,type:str]
|
||||
sops:
|
||||
kms: []
|
||||
gcp_kms: []
|
||||
azure_kv: []
|
||||
hc_vault: []
|
||||
age:
|
||||
- recipient: age1d5vst0g82v6xml29ydsrxefmf3vclgm6dj3npw6mefa7yu9xueaqztjqlg
|
||||
enc: |
|
||||
-----BEGIN AGE ENCRYPTED FILE-----
|
||||
YWdlLWVuY3J5cHRpb24ub3JnL3YxCi0+IFgyNTUxOSBaRG1ERkdkTXMvUllCSHdS
|
||||
TXVBVWNMd0hYeXMvTXh6OFVTYXV0MkVoOEJ3Ck9XakJTbHMyTWpvazFzYUtNcmtx
|
||||
NTVoVnUwWkpKYjg4MWs1dmxpT3JGRFUKLS0tIHdHRk8yL1lCRk9DM0haYjN4Z1Ry
|
||||
d25rRklvOUdLQlU0S2l0WXBpUXhyR2MKQgJXQgxp0T2rr0V2NjwSjWFlzNyig5vW
|
||||
S8PW6OpCOyfMqzz5NWTdUVymY7UEdAguwZH+MY2DdvEn3NM/TcnRwA==
|
||||
-----END AGE ENCRYPTED FILE-----
|
||||
lastmodified: "2023-05-27T02:48:45Z"
|
||||
mac: ENC[AES256_GCM,data:SCjcJPn7hg9sUFYlOUKAVJBXKNIrcz/x3aqyX43xf7UO7Zo/pGDp1JDaKA7lCaKTgPEAe1zRRv6LjejNGX3DlpmxMS6o2xaI3nb0e0CnLj9t9t57L5svrciwh9wOennWj26DirgzAB+uqCJ/NGOJh4S8yTPOF5MgBNkqNw6FN94=,iv:YTtckdYzKnBBqbQYvjw9FpvGHsUxX6MnAeNopYhFe7I=,tag:BPUitJtY65JbnanHJgJatg==,type:str]
|
||||
pgp: []
|
||||
encrypted_regex: ^(data|stringData)$
|
||||
version: 3.7.3
|
@ -0,0 +1,12 @@
|
||||
resources:
|
||||
- ./image-pull-secret.yaml
|
||||
- ./namespace.yaml
|
||||
- ./catalog-deployment.yaml
|
||||
- ./runner-deployment.yaml
|
||||
- ./proxy-admin-deployment.yaml
|
||||
- ./proxy-web-deployment.yaml
|
||||
- ./sync-cronjob.yaml
|
||||
- ./web-client-deployment.yaml
|
||||
- ./admin-client-deployment.yaml
|
||||
- ./client-ingress.yaml
|
||||
- ./admin-ingress.yaml
|
@ -0,0 +1,17 @@
|
||||
apiVersion: v1
|
||||
kind: Namespace
|
||||
metadata:
|
||||
name: barretthousen
|
||||
annotations:
|
||||
description: |
|
||||
environment for barretthousen
|
||||
labels:
|
||||
name: barretthousen
|
||||
app: barretthousen
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: ServiceAccount
|
||||
metadata:
|
||||
name: barretthousen-service
|
||||
imagePullSecrets:
|
||||
- name: bh-registry
|
@ -0,0 +1,56 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: proxy-admin
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
service: proxy-admin
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
service: proxy-admin
|
||||
spec:
|
||||
serviceAccountName: barretthousen-service
|
||||
containers:
|
||||
- name: proxy-admin
|
||||
image: barretthousen/service-proxy-admin:latest
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: http
|
||||
command:
|
||||
- /opt/proxy-admin
|
||||
resources:
|
||||
limits:
|
||||
memory: "128Mi"
|
||||
cpu: "250m"
|
||||
volumeMounts:
|
||||
- name: proxy-admin-config
|
||||
mountPath: /config/
|
||||
volumes:
|
||||
- name: proxy-admin-config
|
||||
secret:
|
||||
secretName: proxy-admin-config
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: proxy-admin
|
||||
spec:
|
||||
selector:
|
||||
service: proxy-admin
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 80
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: proxy-admin-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 80
|
||||
endpoints:
|
||||
runner: runner:5001
|
@ -0,0 +1,56 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: proxy-web
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
service: proxy-web
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
service: proxy-web
|
||||
spec:
|
||||
serviceAccountName: barretthousen-service
|
||||
containers:
|
||||
- name: proxy-web
|
||||
image: barretthousen/service-proxy-web:latest
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: http
|
||||
command:
|
||||
- /opt/proxy-web
|
||||
resources:
|
||||
limits:
|
||||
memory: "128Mi"
|
||||
cpu: "250m"
|
||||
volumeMounts:
|
||||
- name: proxy-web-config
|
||||
mountPath: /config/
|
||||
volumes:
|
||||
- name: proxy-web-config
|
||||
secret:
|
||||
secretName: proxy-web-config
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: proxy-web
|
||||
spec:
|
||||
selector:
|
||||
service: proxy-web
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 80
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: proxy-web-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 80
|
||||
endpoints:
|
||||
catalog: catalog:5001
|
@ -0,0 +1,73 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: runner
|
||||
spec:
|
||||
replicas: 1
|
||||
selector:
|
||||
matchLabels:
|
||||
service: runner
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
service: runner
|
||||
spec:
|
||||
serviceAccountName: barretthousen-service
|
||||
containers:
|
||||
- name: runner
|
||||
image: barretthousen/service-runner:latest
|
||||
imagePullPolicy: Always
|
||||
ports:
|
||||
- containerPort: 5001
|
||||
name: grpc
|
||||
command:
|
||||
- /opt/runner
|
||||
args:
|
||||
- -migrate
|
||||
resources:
|
||||
limits:
|
||||
cpu: "250m"
|
||||
memory: "128Mi"
|
||||
volumeMounts:
|
||||
- mountPath: /config/
|
||||
name: runner-config
|
||||
volumes:
|
||||
- name: runner-config
|
||||
secret:
|
||||
secretName: runner-config
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: runner
|
||||
spec:
|
||||
selector:
|
||||
service: runner
|
||||
ports:
|
||||
- port: 5001
|
||||
targetPort: 5001
|
||||
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: runner-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 5001
|
||||
catalog_endpoint: catalog:5001
|
||||
db_service:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: runner-service
|
||||
password: runner-service
|
||||
db_migrate:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: postgres
|
||||
password: bh-admin
|
@ -0,0 +1,24 @@
|
||||
apiVersion: batch/v1
|
||||
kind: CronJob
|
||||
metadata:
|
||||
name: runner-sync
|
||||
spec:
|
||||
schedule: "0 * * * *"
|
||||
jobTemplate:
|
||||
spec:
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
name: runner-sync
|
||||
spec:
|
||||
restartPolicy: OnFailure
|
||||
containers:
|
||||
- name: runner-curl
|
||||
image: curlimages/curl:latest
|
||||
command:
|
||||
[
|
||||
"curl",
|
||||
"http://${PROXY_ADMIN_SERVICE_HOST}/api/v1/sync",
|
||||
'-d=''{"target":"liveauctioneers"}''',
|
||||
"-vvvv",
|
||||
]
|
@ -0,0 +1,43 @@
|
||||
apiVersion: apps/v1
|
||||
kind: Deployment
|
||||
metadata:
|
||||
name: web-client
|
||||
spec:
|
||||
selector:
|
||||
matchLabels:
|
||||
app: web-client
|
||||
template:
|
||||
metadata:
|
||||
labels:
|
||||
app: web-client
|
||||
spec:
|
||||
serviceAccountName: barretthousen-service
|
||||
containers:
|
||||
- name: web-client
|
||||
image: barretthousen/client-web-client:latest
|
||||
imagePullPolicy: Always
|
||||
stdin: true
|
||||
tty: true
|
||||
env:
|
||||
- name: BH_CLIENT_INTERNAL_API_HOST
|
||||
value: "http://proxy-web"
|
||||
- name: ORIGIN
|
||||
value: https://barretthousen.com
|
||||
ports:
|
||||
- containerPort: 80
|
||||
name: http
|
||||
resources:
|
||||
limits:
|
||||
memory: "512Mi"
|
||||
cpu: "500m"
|
||||
---
|
||||
apiVersion: v1
|
||||
kind: Service
|
||||
metadata:
|
||||
name: web-client
|
||||
spec:
|
||||
selector:
|
||||
app: web-client
|
||||
ports:
|
||||
- port: 80
|
||||
targetPort: 80
|
@ -0,0 +1,22 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: catalog-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 5001
|
||||
db_service:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: catalog-service
|
||||
password: catalog-service
|
||||
db_migrate:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: postgres
|
||||
password: bh-admin-beta
|
@ -0,0 +1,86 @@
|
||||
resources:
|
||||
- ../base
|
||||
commonLabels:
|
||||
environment: beta
|
||||
nameSuffix: -beta
|
||||
namespace: barretthousen-beta
|
||||
|
||||
patchesStrategicMerge:
|
||||
- sync-cronjob.yaml
|
||||
- catalog-secret.yaml
|
||||
- proxy-admin-secret.yaml
|
||||
- proxy-web-secret.yaml
|
||||
- runner-secret.yaml
|
||||
|
||||
patches:
|
||||
- target:
|
||||
kind: Ingress
|
||||
name: admin
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/rules/0/host
|
||||
value: beta.admin.barretthousen.com
|
||||
- target:
|
||||
kind: Ingress
|
||||
name: web
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/rules/0/host
|
||||
value: beta.barretthousen.com
|
||||
- target:
|
||||
kind: Deployment
|
||||
name: catalog
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/image
|
||||
value: git.vdhsn.com/barretthousen/service-catalog:beta
|
||||
- target:
|
||||
kind: Deployment
|
||||
name: runner
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/image
|
||||
value: git.vdhsn.com/barretthousen/service-runner:beta
|
||||
|
||||
- target:
|
||||
kind: Deployment
|
||||
name: proxy-admin
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/image
|
||||
value: git.vdhsn.com/barretthousen/service-proxy-admin:beta
|
||||
- target:
|
||||
kind: Deployment
|
||||
name: proxy-web
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/image
|
||||
value: git.vdhsn.com/barretthousen/service-proxy-web:beta
|
||||
|
||||
- target:
|
||||
kind: Deployment
|
||||
name: admin-client
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/image
|
||||
value: git.vdhsn.com/barretthousen/client-admin-client:beta
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/env/1/value
|
||||
value: https://beta.admin.barretthousen.com
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/env/0/value
|
||||
value: http://proxy-admin-beta
|
||||
|
||||
- target:
|
||||
kind: Deployment
|
||||
name: web-client
|
||||
patch: |-
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/image
|
||||
value: git.vdhsn.com/barretthousen/client-web-client:beta
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/env/1/value
|
||||
value: https://beta.barretthousen.com
|
||||
- op: replace
|
||||
path: /spec/template/spec/containers/0/env/0/value
|
||||
value: http://proxy-web-beta
|
@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: proxy-admin-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 80
|
||||
access_control_allow_origin: "beta.admin.barretthousen.com"
|
||||
endpoints:
|
||||
runner: runner-beta:5001
|
@ -0,0 +1,11 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: proxy-web-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 80
|
||||
access_control_allow_origin: "beta.barretthousen.com"
|
||||
endpoints:
|
||||
catalog: catalog-beta:5001
|
@ -0,0 +1,23 @@
|
||||
apiVersion: v1
|
||||
kind: Secret
|
||||
metadata:
|
||||
name: runner-config
|
||||
stringData:
|
||||
config.yaml: |
|
||||
log_level: 2
|
||||
port: 5001
|
||||
catalog_endpoint: catalog-beta:5001
|
||||
db_service:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: runner-service
|
||||
password: runner-service
|
||||
db_migrate:
|
||||
scheme: postgres
|
||||
port: 5432
|
||||
host: bh-db
|
||||
name: bh
|
||||
user: postgres
|
||||
password: bh-admin-beta
|