diff --git a/.gitignore b/.gitignore index 4e8d50a..e59e966 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ *.swp +.obsidian/ diff --git a/2023-01-09.md b/2023-01-09.md new file mode 100644 index 0000000..e69de29 diff --git a/AutoSSH.md b/AutoSSH.md new file mode 100644 index 0000000..2005777 --- /dev/null +++ b/AutoSSH.md @@ -0,0 +1 @@ +autossh -M 0 -o "ServerAliveInterval 30" -o "ServerAliveCountMax 3" -R 22721:localhost:22 pt@hptrow.me diff --git a/accounting/Re-Price Open Orders.md b/accounting/Re-Price Open Orders.md new file mode 100644 index 0000000..e89b8c5 --- /dev/null +++ b/accounting/Re-Price Open Orders.md @@ -0,0 +1,27 @@ +## Clean Update Guidance + +- [x] exclude dishes and hangers from ltp flags ✅ 2023-01-11 +- [ ] dont blow cap dishes past bulletin value +- [ ] flag increases and decreses +- [ ] convert USD pricing back to local for order adjustment feed + +## Scope + +* Timeline + - [ ] order placed range + - [ ] promise date range +* Adjustment + - [ ] blanket % per customer + - [ ] adjust up and down so long as net down + - [ ] only adjust down +* Excludsions + - [ ] Warehouse + - [ ] Monrovia + - [ ] Proven Winners + - [ ] Large Directs `Metrolina, Altmans, Costa` + - [ ] Retail + - [ ] Purchased? + +## CMS +- [ ] prep for either % change or feed from file + diff --git a/accounting/Transfer Pricing.md b/accounting/Transfer Pricing.md new file mode 100644 index 0000000..e69de29 diff --git a/accounting/asset_based_lending.md b/accounting/asset_based_lending.md index 7dbbb86..81afaf2 100644 --- a/accounting/asset_based_lending.md +++ b/accounting/asset_based_lending.md @@ -1,2 +1,2 @@ -FCC - fixed charge coverage ratio - looks at cash flow as compared to cash require dto fulfill debt payments +FCC - fixed charge coverage ratio - looks at cash flow as compared to cash require dto fulfill debt payments SLR - senior debt leverage ratio - senior debt to ebitda \ No newline at end of file diff --git a/accounting/pricing.md b/accounting/pricing.md new file mode 100644 index 0000000..bea43f3 --- /dev/null +++ b/accounting/pricing.md @@ -0,0 +1,61 @@ +--- + +kanban-plugin: basic + +--- + +## Issues + +- [ ] Invoices with no BOL +- [ ] bulk is more than master pallet (CAN) +- [ ] GETPRICE
- [ ] subcontracts
- [ ] Proven Winners
- [ ] any drop ship will link with list
- [ ] narrower linkage based on v1 dataseg +- [ ] Price per M should round to < 5 in case/pallet and vice versa + + +## Projects + +- [ ] Price List Build - Volume Basis
* Review Branded Thermo +- [ ] Quote Tool - target maintenance +- [ ] Valid Prices used in orders - check + + +## Requests + +- [ ] Canada Greenhouse List Review +- [ ] BFG to have 5% discount for branded containers + + +## Sales Matrix + +- [ ] Quotes Integration
- [ ] refresh
- [ ] all open
- [ ] header row but no qcri rows +- [ ] Matrix - Active Price Measure +- [ ] Update by Diff +- [ ] Handle Guidance based on channel +- [ ] Notes +- [ ] Guidance Anchor Pool

* source
* customer
* channel global
* target
* fit
* v0
* v1
* alt+prem + + +## Opportunities + +- [ ] Open Quotes - Listing for Folow-Up +- [ ] Share - customers buying more items +- [ ] Market size - More YoY season lbs +- [ ] Quote Conversion Rate + + +## Quotes + + + +## Done + +**Complete** + + + + +%% kanban:settings +``` +{"kanban-plugin":"basic","show-checkboxes":false} +``` +%% \ No newline at end of file diff --git a/accounting/role.md b/accounting/role.md index 65b6182..41126e0 100644 --- a/accounting/role.md +++ b/accounting/role.md @@ -1,64 +1,64 @@ -Deriving The Trial Balance -============================================================================================================= -* Entries and reocniliations - * Payroll - * Data: Retain all payroll data in a `database` to build entries - * Mappings: Configure `Paycom GL Interface` - * `401k`: book disbursements and reconcile to Paycom withholdings - * `FSA`: book FSA funding entries and reconcile to Paycom withholdings - * Debt & Cash - * Data: retain all PNC information available in a `database` to build entries (cash, revolver, debt) - * Book all PNC `loan activity` - * Book interest on `notes` - * Reconcile all balance sheet `debt` - * Book `interest rate swap` valuation - * Bank Rec: - * book entry to break out `freight checks` - * book entries to clean up missed `fees` - * book entries to deal with `miscelaneous discrepencies` - * book entry to classify `outstanding checks` as liabilities - * Intercompany Activity - * Support `transfer pricing` entry - * Book `consolidating` entries - * Book `currency translation adjustment` for consolidated USD trial balance - * Reconcile `CTA` & `Equity` - * Reclassify any `intercompany liabilites` out of the trade accounts - * Validate that `intercompany balances` are eliminated from consolidated trial balance - * Other Balance Sheet Items - * Book and reconcile amortization of `intangibles` - * Book and reconcile amortization of `defered financing costs` - * Book RSM determined `tax provision` and current year `tax accrual` - * CMS Module Corrections - * book entry to fix `virtual sales` - * book entry to fix `credits` - * furnish a report to the plants breaking out the `book to perpetual` issues - * sales timing and valuation issues - * cost roll impact - * production ledger issues - * voucher issues - * issues with transfers - * issues with returns -* Configuration - * Module accounts (sales, inventory, production, manual adjustments, AP, AR, intecompany) - * Chart of Accounts - * EBITDA flags - * consolidation flags - * consolidation heirarchy - * financial statement lines - * currency indicator - -Interpreting The Trial Balance -========================================================================================================= -* Rebuild trial balance into alternate financial statement formats -* Rebuilt subledger that matches original ledger -* Rebuild production subledger that does not match original -* Sales Matrix -* A large number of reports that I can't even list but are maintained [here](https://bitbucket.org/hccompanies/hc_ubm/src/master/) - -Forecasting -============================= -* Product Strucutre Explosion Logic - * global scale cost change estimates - * production plans - * inventory forecasts +Deriving The Trial Balance +=============================================================== +* Entries and reocniliations + * Payroll + * Data: Retain all payroll data in a `database` to build entries + * Mappings: Configure `Paycom GL Interface` + * `401k`: book disbursements and reconcile to Paycom withholdings + * `FSA`: book FSA funding entries and reconcile to Paycom withholdings + * Debt & Cash + * Data: retain all PNC information available in a `database` to build entries (cash, revolver, debt) + * Book all PNC `loan activity` + * Book interest on `notes` + * Reconcile all balance sheet `debt` + * Book `interest rate swap` valuation + * Bank Rec: + * book entry to break out `freight checks` + * book entries to clean up missed `fees` + * book entries to deal with `miscelaneous discrepencies` + * book entry to classify `outstanding checks` as liabilities + * Intercompany Activity + * Support `transfer pricing` entry + * Book `consolidating` entries + * Book `currency translation adjustment` for consolidated USD trial balance + * Reconcile `CTA` & `Equity` + * Reclassify any `intercompany liabilites` out of the trade accounts + * Validate that `intercompany balances` are eliminated from consolidated trial balance + * Other Balance Sheet Items + * Book and reconcile amortization of `intangibles` + * Book and reconcile amortization of `defered financing costs` + * Book RSM determined `tax provision` and current year `tax accrual` + * CMS Module Corrections + * book entry to fix `virtual sales` + * book entry to fix `credits` + * furnish a report to the plants breaking out the `book to perpetual` issues + * sales timing and valuation issues + * cost roll impact + * production ledger issues + * voucher issues + * issues with transfers + * issues with returns +* Configuration + * Module accounts (sales, inventory, production, manual adjustments, AP, AR, intecompany) + * Chart of Accounts + * EBITDA flags + * consolidation flags + * consolidation heirarchy + * financial statement lines + * currency indicator + +Interpreting The Trial Balance +========================================================================================================= +* Rebuild trial balance into alternate financial statement formats +* Rebuilt subledger that matches original ledger +* Rebuild production subledger that does not match original +* Sales Matrix +* A large number of reports that I can't even list but are maintained [here](https://bitbucket.org/hccompanies/hc_ubm/src/master/) + +Forecasting +============================= +* Product Strucutre Explosion Logic + * global scale cost change estimates + * production plans + * inventory forecasts * Sales forecast tool \ No newline at end of file diff --git a/analysis/price_mix_vol.md b/analysis/price_mix_vol.md index 3ec249b..f26651a 100644 --- a/analysis/price_mix_vol.md +++ b/analysis/price_mix_vol.md @@ -1,21 +1,21 @@ - -Only applies to items that exist in both sets of data - -**Change in Price** - - ( P₂ - P₁ ) Q₂ - -**Change in Quantity** - - ( Q₂ - Q₁ ) P₁ - -_To further break out change in quantity_ - - -Change in Quantity - _Volume Related_ - - Q₂ ( Q₁ / Σ ( Q₁ ) ) - Q₁ - -Change in Quantity - _Mix Related_ - + +Only applies to items that exist in both sets of data + +**Change in Price** + + ( P₂ - P₁ ) Q₂ + +**Change in Quantity** + + ( Q₂ - Q₁ ) P₁ + +_To further break out change in quantity_ + + +Change in Quantity - _Volume Related_ + + Q₂ ( Q₁ / Σ ( Q₁ ) ) - Q₁ + +Change in Quantity - _Mix Related_ + Q₂ - Q₂ ( Q₁ / Σ ( Q₁ ) ) \ No newline at end of file diff --git a/db2.md b/db2.md index 87817ca..031c168 100644 --- a/db2.md +++ b/db2.md @@ -1,3 +1,3 @@ -alter existing column type - +alter existing column type + `ALTER TABLE RLARP.OSMFS ALTER COLUMN "ITER" SET DATA TYPE VARCHAR(500)` \ No newline at end of file diff --git a/dotnet_core.md b/dotnet_core.md index f9a0f1e..418bfb2 100644 --- a/dotnet_core.md +++ b/dotnet_core.md @@ -1,11 +1,11 @@ -dotnet new console -n "name of directory or project" - -dotnet build - -create exe targeting a runtime: create an executable if not already exists and build dll in bin/Release/win10-x64 --------------------------------------------- -dotnet publish -c Release -r win10-x64 - -dotnet publish -c Release -f netcoreapp2.1 - +dotnet new console -n "name of directory or project" + +dotnet build + +create exe targeting a runtime: create an executable if not already exists and build dll in bin/Release/win10-x64 +-------------------------------------------- +dotnet publish -c Release -r win10-x64 + +dotnet publish -c Release -f netcoreapp2.1 + `dotnet restore` -> update/sync packages \ No newline at end of file diff --git a/journals/2023_01_09.md b/journals/2023_01_09.md new file mode 100644 index 0000000..91b0d2d --- /dev/null +++ b/journals/2023_01_09.md @@ -0,0 +1,2 @@ +- #poppleman +- \ No newline at end of file diff --git a/jupyter.md b/jupyter.md index ac50378..5c6b85d 100644 --- a/jupyter.md +++ b/jupyter.md @@ -1,14 +1,16 @@ - -install R kernel for jupyter to use -* `sudo R` -* `install.packages('IRkernel')` (most likely have to run R under sudo) -* `IRkernel::installspec()` (don't use sudo R) - -run on network: -`jupyter notebook --ip 10.0.10.15 --port 8888` - - -basic packages: -* ggplot2, plyr, ggExtra, scales - -issues with connectin to kernel, atempting update of all packages `update.packages(ask = FALSE)` + +Install jupyter lab via pip + +install R kernel for jupyter to use +* `sudo R` +* `install.packages('IRkernel')` (most likely have to run R under sudo) +* `IRkernel::installspec()` (don't use sudo R) + +run on network: +`jupyter notebook --ip 10.0.10.15 --port 8888` + + +basic packages: +* ggplot2, plyr, ggExtra, scales + +issues with connectin to kernel, atempting update of all packages `update.packages(ask = FALSE)` diff --git a/mutt.md b/mutt.md index cd60161..e3cc7c9 100644 --- a/mutt.md +++ b/mutt.md @@ -1,21 +1,21 @@ -## Office 365 Setup - -[office365 config](https://github.com/ork/mutt-office365) - -[setup html viewer in mutt](http://jasonwryan.com/blog/2012/05/12/mutt/) - -git clone https://github.com/ork/mutt-office365 ./.mutt - -* requires w3m -* add this to .mutt/muttrc - ``` - auto_view text/html # view html automatically - alternative_order text/plain text/enriched text/html # save html for last - ``` -* add this to .mutt/mailcap - ``` - text/html; w3m -I %{charset} -T text/html; copiousoutput; - ``` - - -install from source example [here](http://www.guckes.net/Mutt/install.php3) +## Office 365 Setup + +[office365 config](https://github.com/ork/mutt-office365) + +[setup html viewer in mutt](http://jasonwryan.com/blog/2012/05/12/mutt/) + +git clone https://github.com/ork/mutt-office365 ./.mutt + +* requires w3m +* add this to .mutt/muttrc + ``` + auto_view text/html # view html automatically + alternative_order text/plain text/enriched text/html # save html for last + ``` +* add this to .mutt/mailcap + ``` + text/html; w3m -I %{charset} -T text/html; copiousoutput; + ``` + + +install from source example [here](http://www.guckes.net/Mutt/install.php3) diff --git a/nginx.md b/nginx.md index bb7f2a8..f568a71 100644 --- a/nginx.md +++ b/nginx.md @@ -1,5 +1,5 @@ -https://nginx.org/en/docs/http/configuring_https_servers.html - -setting up reverse proxy for different sub domains - -https://serverfault.com/questions/753105/how-to-reverse-proxy-to-different-places-depending-on-subdomain-in-nginx +https://nginx.org/en/docs/http/configuring_https_servers.html + +setting up reverse proxy for different sub domains + +https://serverfault.com/questions/753105/how-to-reverse-proxy-to-different-places-depending-on-subdomain-in-nginx diff --git a/planning/production_scheduling.md b/planning/production_scheduling.md index e42eae2..43a3596 100644 --- a/planning/production_scheduling.md +++ b/planning/production_scheduling.md @@ -1,77 +1,77 @@ -Logic to setup production plan, inventory balances, purchases, and shipments - -Starting point -- known balances STKB -- known available BOLH - not posted -- known prod schedule SOFT -- known shipments Sales Forecast -- forecasted orders Sales Forecast -- machines that a part can run on ?? -- actual run-time performance Alternates -- actual BOM performance Alternates -- actual scrap performance Alternates -- available machine time ?? - -Populate -- forecasted prod schedule -- forecasted on-hand (via forecast perpetual transactions) -- forecasted available (via forecast transactions) -- forecasted purchases - -Iterate through each calendar day -1. materialize forecasted purchases - 1. update on-hand & available -2. materialize production - 1. update on-hand & available -3. materialize transfers - 1. update on-hand & available -3. materialize shipments - 1. update on-hand & available -4. process forecasted order submissions - 1. check for inventory available - 1. Yes - 1. mark unavailable - 2. schedule shipment for request date - 2. No or partial - 1. mark unavailable any partial - 2. schedule on next open slot regardless of request date (each part should be mapped to certain set of machines) - 1. raw materials available - 1. Yes - 1. mark unavailable (at begin prod date?) - 2. No - 1. mark unavailable any partial (at begin prod date?) - 2. schedule a purchase net of lead time - 2. sub-components available? - 1. Yes - 1. mark unavialable (at begin prod date?) - 2. No - 1. (return to 4.1.2.2) - 3. schedule transfer of production after completion if necessary - 3. schedule shipment for request date, or production date if past request date - - -snap-shot STKB -snap-shot BOLH -snap-shot SOFT - - -some notes ------------------ - -* shift schedules -* parallel resources -* setup time -* efficiencies -* scrap rates -* blends -* known 'A' item volumes planned regardless of demand -* visibility window for incomming orders -* grouping items to reduce change-overs -* initial start-up: merge with current machine schedule -* limit start date to child item availability -* procurement mix -* purchase lag -* transfer lag -* order priority -* inventory minimums +Logic to setup production plan, inventory balances, purchases, and shipments + +Starting point +- known balances STKB +- known available BOLH - not posted +- known prod schedule SOFT +- known shipments Sales Forecast +- forecasted orders Sales Forecast +- machines that a part can run on ?? +- actual run-time performance Alternates +- actual BOM performance Alternates +- actual scrap performance Alternates +- available machine time ?? + +Populate +- forecasted prod schedule +- forecasted on-hand (via forecast perpetual transactions) +- forecasted available (via forecast transactions) +- forecasted purchases + +Iterate through each calendar day +1. materialize forecasted purchases + 1. update on-hand & available +2. materialize production + 1. update on-hand & available +3. materialize transfers + 1. update on-hand & available +3. materialize shipments + 1. update on-hand & available +4. process forecasted order submissions + 1. check for inventory available + 1. Yes + 1. mark unavailable + 2. schedule shipment for request date + 2. No or partial + 1. mark unavailable any partial + 2. schedule on next open slot regardless of request date (each part should be mapped to certain set of machines) + 1. raw materials available + 1. Yes + 1. mark unavailable (at begin prod date?) + 2. No + 1. mark unavailable any partial (at begin prod date?) + 2. schedule a purchase net of lead time + 2. sub-components available? + 1. Yes + 1. mark unavialable (at begin prod date?) + 2. No + 1. (return to 4.1.2.2) + 3. schedule transfer of production after completion if necessary + 3. schedule shipment for request date, or production date if past request date + + +snap-shot STKB +snap-shot BOLH +snap-shot SOFT + + +some notes +----------------- + +* shift schedules +* parallel resources +* setup time +* efficiencies +* scrap rates +* blends +* known 'A' item volumes planned regardless of demand +* visibility window for incomming orders +* grouping items to reduce change-overs +* initial start-up: merge with current machine schedule +* limit start date to child item availability +* procurement mix +* purchase lag +* transfer lag +* order priority +* inventory minimums * tool availability \ No newline at end of file diff --git a/postgres/aggregate.md b/postgres/aggregate.md index 90cf610..bcaddd9 100644 --- a/postgres/aggregate.md +++ b/postgres/aggregate.md @@ -1,49 +1,49 @@ -To extract aggregate definitions can select from `pg_aggregate` - - -SQL for current aggregates I'm using now: -``` -CREATE OR REPLACE FUNCTION public.jsonb_concat( - state jsonb, - concat jsonb) - RETURNS jsonb AS -$BODY$ -BEGIN - --RAISE notice 'state is %', state; - --RAISE notice 'concat is %', concat; - RETURN state || concat; -END; -$BODY$ - LANGUAGE plpgsql VOLATILE - COST 100; - - -CREATE OR REPLACE FUNCTION public.jsonb_concat_distinct_arr( - state jsonb, - concat jsonb) - RETURNS jsonb AS -$BODY$ -BEGIN - --RAISE notice 'state is %', state; - --RAISE notice 'concat is %', concat; - RETURN SELECT jsonb_agg(state || concat; -END; -$BODY$ - LANGUAGE plpgsql VOLATILE - COST 100; - - -DROP AGGREGATE IF EXISTS public.jsonb_arr_aggc(jsonb); -CREATE AGGREGATE public.jsonb_arr_aggc(jsonb) ( - SFUNC=public.jsonb_concat, - STYPE=jsonb, - INITCOND='[]' -); - -DROP AGGREGATE IF EXISTS public.jsonb_obj_aggc(jsonb); -CREATE AGGREGATE public.jsonb_obj_aggc(jsonb) ( - SFUNC=public.jsonb_concat, - STYPE=jsonb, - INITCOND='{}' -); -``` +To extract aggregate definitions can select from `pg_aggregate` + + +SQL for current aggregates I'm using now: +``` +CREATE OR REPLACE FUNCTION public.jsonb_concat( + state jsonb, + concat jsonb) + RETURNS jsonb AS +$BODY$ +BEGIN + --RAISE notice 'state is %', state; + --RAISE notice 'concat is %', concat; + RETURN state || concat; +END; +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + + +CREATE OR REPLACE FUNCTION public.jsonb_concat_distinct_arr( + state jsonb, + concat jsonb) + RETURNS jsonb AS +$BODY$ +BEGIN + --RAISE notice 'state is %', state; + --RAISE notice 'concat is %', concat; + RETURN SELECT jsonb_agg(state || concat; +END; +$BODY$ + LANGUAGE plpgsql VOLATILE + COST 100; + + +DROP AGGREGATE IF EXISTS public.jsonb_arr_aggc(jsonb); +CREATE AGGREGATE public.jsonb_arr_aggc(jsonb) ( + SFUNC=public.jsonb_concat, + STYPE=jsonb, + INITCOND='[]' +); + +DROP AGGREGATE IF EXISTS public.jsonb_obj_aggc(jsonb); +CREATE AGGREGATE public.jsonb_obj_aggc(jsonb) ( + SFUNC=public.jsonb_concat, + STYPE=jsonb, + INITCOND='{}' +); +``` diff --git a/postgres/postgres.md b/postgres/postgres.md index 6dab609..f24350b 100644 --- a/postgres/postgres.md +++ b/postgres/postgres.md @@ -1,34 +1,34 @@ -setup for single sign on with [SSPI](https://wiki.postgresql.org/wiki/Configuring_for_single_sign-on_using_SSPI_on_Windows) - -md5 hash is salted with username in front - - -Memory -========================================================= -see whats in the buffer cache with pg_buffercache - -`CREATE EXTENSION pg_buffercache` - -``` -SELECT - c.relname, - COUNT(*) AS buffers -FROM - pg_class c -INNER JOIN pg_buffercache b ON - b.relfilenode = c.relfilenode -INNER JOIN pg_database d ON - ( b.reldatabase = d.oid - AND d.datname = CURRENT_DATABASE()) -GROUP BY - c.relname -ORDER BY - 2 DESC -LIMIT 100; -``` - -Alter Column -========================================================== -ALTER TABLE rlarp.pcore ALTER COLUMN pack SET DATA TYPE numeric USING pack::numeric - -psql binary for latest version is always used but pg_dump is not, you have to set the default version in ~/.postgresqlrc +setup for single sign on with [SSPI](https://wiki.postgresql.org/wiki/Configuring_for_single_sign-on_using_SSPI_on_Windows) + +md5 hash is salted with username in front + + +Memory +========================================================= +see whats in the buffer cache with pg_buffercache + +`CREATE EXTENSION pg_buffercache` + +``` +SELECT + c.relname, + COUNT(*) AS buffers +FROM + pg_class c +INNER JOIN pg_buffercache b ON + b.relfilenode = c.relfilenode +INNER JOIN pg_database d ON + ( b.reldatabase = d.oid + AND d.datname = CURRENT_DATABASE()) +GROUP BY + c.relname +ORDER BY + 2 DESC +LIMIT 100; +``` + +Alter Column +========================================================== +ALTER TABLE rlarp.pcore ALTER COLUMN pack SET DATA TYPE numeric USING pack::numeric + +psql binary for latest version is always used but pg_dump is not, you have to set the default version in ~/.postgresqlrc diff --git a/pricing/Current Price Guidance.md b/pricing/Current Price Guidance.md new file mode 100644 index 0000000..6297d4d --- /dev/null +++ b/pricing/Current Price Guidance.md @@ -0,0 +1,5 @@ +This is our current approach to quoting new and repeat business alike: + +![[Price Guidance Application.png]] + +As we look to update open orders, their open order price will become relevant as we re-quote their business. diff --git a/pricing/Price Guidance Application.md b/pricing/Price Guidance Application.md new file mode 100644 index 0000000..f254338 --- /dev/null +++ b/pricing/Price Guidance Application.md @@ -0,0 +1,2505 @@ +--- + +excalidraw-plugin: parsed +tags: [excalidraw] + +--- +==⚠ Switch to EXCALIDRAW VIEW in the MORE OPTIONS menu of this document. ⚠== + + +# Text Elements +Anchor Price + +lowest of last 3 years or target ^GN3PHJZf + +Guidance ^20d3tphX + +Less Than Pallet ^7TXWthSp + +40% ^9OTBUw0C + +15% ^u6ne9WXA + +Optimization + +if anchor price is < target ^3xNVLeJ1 + +5% ^MVVlIM8N + +.400 ^Jfq8lriO + +60% New Guidance ^9t8kp205 + +.250 ^wmWNStzO + +70% ^TLt0LV8U + +15% ^9EhgbTrO + +5% ^qLJs98PH + +.475 ^3T91hXa5 + +90% Old Guidance ^Kno1XWDW + +~16% Drop On +Current Price ^qErGBrIX + +Quoted Price ^8tjANKBv + +%% +# Drawing +```json +{ + "type": "excalidraw", + "version": 2, + "source": "https://excalidraw.com", + "elements": [ + { + "type": "rectangle", + "version": 106, + "versionNonce": 257667742, + "isDeleted": false, + "id": "OKE5f_Iy0uEvuJBnV9mPl", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -386, + "y": -329.40885416666663, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 158, + "height": 147, + "seed": 1012324034, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "GN3PHJZf" + } + ], + "updated": 1673557455107, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 219, + "versionNonce": 1801768514, + "isDeleted": false, + "id": "GN3PHJZf", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 1, + "opacity": 100, + "angle": 0, + "x": -379, + "y": -318.40885416666663, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 144, + "height": 125, + "seed": 1801660802, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455107, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Anchor Price\n\nlowest of last\n3 years or \ntarget", + "rawText": "Anchor Price\n\nlowest of last 3 years or target", + "baseline": 118, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "OKE5f_Iy0uEvuJBnV9mPl", + "originalText": "Anchor Price\n\nlowest of last 3 years or target" + }, + { + "type": "rectangle", + "version": 87, + "versionNonce": 80195294, + "isDeleted": false, + "id": "fKXNU2G93S9yMVu_VgrmJ", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -164, + "y": -325.2421875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 136, + "height": 138, + "seed": 1343337374, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "20d3tphX" + } + ], + "updated": 1673557455107, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 82, + "versionNonce": 1341502978, + "isDeleted": false, + "id": "20d3tphX", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -140, + "y": -268.7421875, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 88, + "height": 25, + "seed": 1308884126, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455107, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Guidance", + "rawText": "Guidance", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "fKXNU2G93S9yMVu_VgrmJ", + "originalText": "Guidance" + }, + { + "type": "rectangle", + "version": 81, + "versionNonce": 468329246, + "isDeleted": false, + "id": "HNFWzzP9AVHT39sjUXbl5", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 33, + "y": -328.40885416666663, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 138, + "height": 142, + "seed": 281113374, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "7TXWthSp" + } + ], + "updated": 1673557455108, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 103, + "versionNonce": 160671170, + "isDeleted": false, + "id": "7TXWthSp", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 45, + "y": -282.40885416666663, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 114, + "height": 50, + "seed": 1449551710, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455108, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Less Than \nPallet", + "rawText": "Less Than Pallet", + "baseline": 43, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "HNFWzzP9AVHT39sjUXbl5", + "originalText": "Less Than Pallet" + }, + { + "type": "rectangle", + "version": 173, + "versionNonce": 49705886, + "isDeleted": false, + "id": "TbRXXL3uq3y49HdldLCLs", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -169.84701717212226, + "y": 16.03394987697834, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 136, + "height": 40, + "seed": 1066432350, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "9OTBUw0C" + } + ], + "updated": 1673557455108, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 145, + "versionNonce": 613588290, + "isDeleted": false, + "id": "9OTBUw0C", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -124.84701717212226, + "y": 23.53394987697834, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 46, + "height": 25, + "seed": 1047149534, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455109, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "40%", + "rawText": "40%", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "TbRXXL3uq3y49HdldLCLs", + "originalText": "40%" + }, + { + "type": "rectangle", + "version": 176, + "versionNonce": 425873374, + "isDeleted": false, + "id": "xtypqtYQ3RzYLUzlHf2_E", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 25.152982827877736, + "y": 17.03394987697834, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 146, + "height": 43, + "seed": 220733598, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "u6ne9WXA" + } + ], + "updated": 1673557455109, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 145, + "versionNonce": 1620157698, + "isDeleted": false, + "id": "u6ne9WXA", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 79.15298282787774, + "y": 26.03394987697834, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 38, + "height": 25, + "seed": 134447582, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455109, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "15%", + "rawText": "15%", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "xtypqtYQ3RzYLUzlHf2_E", + "originalText": "15%" + }, + { + "type": "rectangle", + "version": 118, + "versionNonce": 1720230942, + "isDeleted": false, + "id": "bAH4npElCcn0-Y7Nqr7O2", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 215.33333333333326, + "y": -324.4088541666667, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 155, + "height": 135, + "seed": 1908352670, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "3xNVLeJ1" + } + ], + "updated": 1673557455109, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 290, + "versionNonce": 517584066, + "isDeleted": false, + "id": "3xNVLeJ1", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 222.33333333333326, + "y": -306.9088541666667, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 141, + "height": 100, + "seed": 16962690, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455109, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Optimization\n\nif anchor price\nis < target", + "rawText": "Optimization\n\nif anchor price is < target", + "baseline": 93, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "bAH4npElCcn0-Y7Nqr7O2", + "originalText": "Optimization\n\nif anchor price is < target" + }, + { + "type": "rectangle", + "version": 184, + "versionNonce": 475689054, + "isDeleted": false, + "id": "UDwyk8DK4P-7c1umMUD8S", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 219.15298282787774, + "y": 15.03394987697834, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 143, + "height": 44, + "seed": 1472024962, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "MVVlIM8N" + } + ], + "updated": 1673557455109, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 144, + "versionNonce": 1091161218, + "isDeleted": false, + "id": "MVVlIM8N", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 274.65298282787774, + "y": 24.53394987697834, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 32, + "height": 25, + "seed": 1853696834, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455110, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "5%", + "rawText": "5%", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "UDwyk8DK4P-7c1umMUD8S", + "originalText": "5%" + }, + { + "type": "rectangle", + "version": 191, + "versionNonce": 1265418206, + "isDeleted": false, + "id": "3XtWSC0o5JP_z7HRZN-5r", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 479.15298282787774, + "y": 12.03394987697834, + "strokeColor": "#000000", + "backgroundColor": "#fab005", + "width": 118, + "height": 44, + "seed": 1257875330, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "Jfq8lriO" + }, + { + "id": "QKKkO5nQ99jQt4H60wynk", + "type": "arrow" + }, + { + "id": "unowG2N9zd5xJu4o3fMj2", + "type": "arrow" + } + ], + "updated": 1673557662245, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 182, + "versionNonce": 484502594, + "isDeleted": false, + "id": "Jfq8lriO", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 514.6529828278777, + "y": 21.53394987697834, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 47, + "height": 25, + "seed": 894057502, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455110, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": ".400", + "rawText": ".400", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "3XtWSC0o5JP_z7HRZN-5r", + "originalText": ".400" + }, + { + "type": "arrow", + "version": 604, + "versionNonce": 333555998, + "isDeleted": false, + "id": "QKKkO5nQ99jQt4H60wynk", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 388.5850150998313, + "y": 44.6453681286763, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 89.04743898947066, + "height": 4.660235914277031, + "seed": 754664030, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557477248, + "link": null, + "locked": false, + "startBinding": { + "elementId": "LRViw-tAhFnpMakSaqkN2", + "gap": 9.3765938878837, + "focus": 0.1248046497467811 + }, + "endBinding": { + "elementId": "3XtWSC0o5JP_z7HRZN-5r", + "gap": 1.5205287385757298, + "focus": -0.11096592364847635 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 89.04743898947066, + -4.660235914277031 + ] + ] + }, + { + "type": "arrow", + "version": 833, + "versionNonce": 457472414, + "isDeleted": false, + "id": "e8j3w2NPggOnD9BOHQmUA", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -236.3524303906581, + "y": -17.12863973712345, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 51.47189373544418, + "height": 79.1232987307169, + "seed": 319871874, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557477252, + "link": null, + "locked": false, + "startBinding": { + "elementId": "EX6i7DHZ6HsAhCUR6vw_N", + "gap": 1.3040460755759966, + "focus": -0.7921746088226963 + }, + "endBinding": { + "elementId": "LRViw-tAhFnpMakSaqkN2", + "gap": 6.588957867161582, + "focus": -0.9309855596932602 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 51.47189373544418, + 79.1232987307169 + ] + ] + }, + { + "type": "freedraw", + "version": 145, + "versionNonce": 1096721694, + "isDeleted": false, + "id": "cGSJ5xbn0meW3FhcqaIiO", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 192.15298282787774, + "y": 23.03394987697834, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 2, + "height": 20, + "seed": 239567518, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455110, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 8 + ], + [ + 0, + 10 + ], + [ + 0, + 14 + ], + [ + 0, + 15 + ], + [ + 0, + 17 + ], + [ + 0, + 18 + ], + [ + -2, + 18 + ], + [ + -2, + 20 + ], + [ + -2, + 20 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "freedraw", + "version": 144, + "versionNonce": 86000578, + "isDeleted": false, + "id": "oJSPXFAbxSKjMhYaH691z", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 184.15298282787774, + "y": 33.03394987697834, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 23, + "height": 0, + "seed": 816768194, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455111, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 3, + 0 + ], + [ + 5, + 0 + ], + [ + 9, + 0 + ], + [ + 11, + 0 + ], + [ + 15, + 0 + ], + [ + 18, + 0 + ], + [ + 20, + 0 + ], + [ + 23, + 0 + ], + [ + 23, + 0 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "freedraw", + "version": 149, + "versionNonce": 248009054, + "isDeleted": false, + "id": "QExQL7CicpCCKmXIH056L", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -10.847017172122264, + "y": 21.03394987697834, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 3, + "height": 23, + "seed": 1547758402, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455111, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 3 + ], + [ + 1, + 5 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 3, + 11 + ], + [ + 3, + 14 + ], + [ + 3, + 16 + ], + [ + 3, + 17 + ], + [ + 3, + 20 + ], + [ + 2, + 21 + ], + [ + 2, + 22 + ], + [ + 2, + 23 + ], + [ + 2, + 23 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "freedraw", + "version": 146, + "versionNonce": 1571191682, + "isDeleted": false, + "id": "U08Uc4H4APUc8Noza88HC", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -18.847017172122264, + "y": 31.03394987697834, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 22, + "height": 4, + "seed": 1707189214, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455111, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 2, + 0 + ], + [ + 5, + 0 + ], + [ + 9, + 0 + ], + [ + 12, + 2 + ], + [ + 15, + 3 + ], + [ + 17, + 3 + ], + [ + 18, + 3 + ], + [ + 19, + 3 + ], + [ + 20, + 3 + ], + [ + 20, + 4 + ], + [ + 22, + 4 + ], + [ + 22, + 4 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "rectangle", + "version": 276, + "versionNonce": 313685406, + "isDeleted": false, + "id": "LRViw-tAhFnpMakSaqkN2", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -178.29157878805233, + "y": -3.5150659690390853, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 557.4999999999999, + "height": 108.97122626459401, + "seed": 1770015454, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "id": "e8j3w2NPggOnD9BOHQmUA", + "type": "arrow" + }, + { + "id": "QKKkO5nQ99jQt4H60wynk", + "type": "arrow" + } + ], + "updated": 1673557455111, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 228, + "versionNonce": 58115778, + "isDeleted": false, + "id": "9t8kp205", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -7.11087676813969, + "y": 75.74569024829566, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 189, + "height": 25, + "seed": 1568317662, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557632685, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "60% New Guidance", + "rawText": "60% New Guidance", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "60% New Guidance" + }, + { + "type": "line", + "version": 47, + "versionNonce": 374215134, + "isDeleted": false, + "id": "_mqoCGsaDbHSI9yik2tHa", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -386.66666666666663, + "y": -278.86621093749994, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 145, + "height": 0.8333333333333144, + "seed": 918494174, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455111, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 145, + -0.8333333333333144 + ] + ] + }, + { + "type": "line", + "version": 40, + "versionNonce": 1253769986, + "isDeleted": false, + "id": "5R618IgvoaYf0l3V9J-lM", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 228.33333333333337, + "y": -268.86621093749994, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 135.83333333333337, + "height": 0.8333333333333144, + "seed": 791070110, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455112, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": null, + "points": [ + [ + 0, + 0 + ], + [ + 135.83333333333337, + -0.8333333333333144 + ] + ] + }, + { + "type": "rectangle", + "version": 272, + "versionNonce": 346826270, + "isDeleted": false, + "id": "EX6i7DHZ6HsAhCUR6vw_N", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -377.6564764662341, + "y": -45.141428303803025, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 140, + "height": 35, + "seed": 32807234, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "wmWNStzO" + }, + { + "id": "RUhKbNbhGwaZvPYqTkXgp", + "type": "arrow" + }, + { + "id": "e8j3w2NPggOnD9BOHQmUA", + "type": "arrow" + } + ], + "updated": 1673557455112, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 244, + "versionNonce": 2015843010, + "isDeleted": false, + "id": "wmWNStzO", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -331.1564764662341, + "y": -40.141428303803025, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 47, + "height": 25, + "seed": 942543838, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455112, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": ".250", + "rawText": ".250", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "EX6i7DHZ6HsAhCUR6vw_N", + "originalText": ".250" + }, + { + "type": "rectangle", + "version": 195, + "versionNonce": 2126361182, + "isDeleted": false, + "id": "BI8vRgiCb6ftjqXFtiNWf", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -161.27331889012925, + "y": -129.14142830380302, + "strokeColor": "#000000", + "backgroundColor": "#40c057", + "width": 136, + "height": 40, + "seed": 945037570, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "TLt0LV8U" + } + ], + "updated": 1673557455112, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 172, + "versionNonce": 452176514, + "isDeleted": false, + "id": "TLt0LV8U", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -115.27331889012925, + "y": -121.64142830380302, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 44, + "height": 25, + "seed": 1060890654, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455112, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "70%", + "rawText": "70%", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "BI8vRgiCb6ftjqXFtiNWf", + "originalText": "70%" + }, + { + "type": "rectangle", + "version": 197, + "versionNonce": 2136192670, + "isDeleted": false, + "id": "FSUuEvYsTQRP38F5qSsCi", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 35.32668110987083, + "y": -129.14142830380302, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 146, + "height": 43, + "seed": 1357689026, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "9EhgbTrO" + } + ], + "updated": 1673557455113, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 165, + "versionNonce": 434047554, + "isDeleted": false, + "id": "9EhgbTrO", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 89.32668110987083, + "y": -120.14142830380302, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 38, + "height": 25, + "seed": 101004382, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455113, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "15%", + "rawText": "15%", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "FSUuEvYsTQRP38F5qSsCi", + "originalText": "15%" + }, + { + "type": "rectangle", + "version": 204, + "versionNonce": 1059009246, + "isDeleted": false, + "id": "owiQizVZJFNMeL4RTkhZU", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 229.32668110987083, + "y": -129.14142830380302, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 143, + "height": 44, + "seed": 794642562, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "qLJs98PH" + } + ], + "updated": 1673557455113, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 162, + "versionNonce": 734556674, + "isDeleted": false, + "id": "qLJs98PH", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 284.82668110987083, + "y": -119.64142830380302, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 32, + "height": 25, + "seed": 1985673374, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455113, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "5%", + "rawText": "5%", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "owiQizVZJFNMeL4RTkhZU", + "originalText": "5%" + }, + { + "type": "arrow", + "version": 404, + "versionNonce": 1174377950, + "isDeleted": false, + "id": "ERGP-6B-o_nvkEDx5dB7a", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 388.5063385210534, + "y": -98.09301500800791, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 93.87508787861418, + "height": 3.855312860873781, + "seed": 1801775170, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557477260, + "link": null, + "locked": false, + "startBinding": { + "elementId": "rg6qAGZuPy6WsSN8fQhyE", + "gap": 8.998955391270098, + "focus": 0.12480464974678031 + }, + "endBinding": { + "elementId": "q8wopbObwLVrzweRnPGG0", + "gap": 1.4592900634491734, + "focus": -0.11096592364847764 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 93.87508787861418, + -3.855312860873781 + ] + ] + }, + { + "type": "rectangle", + "version": 207, + "versionNonce": 1099883422, + "isDeleted": false, + "id": "q8wopbObwLVrzweRnPGG0", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 483.8407164631168, + "y": -129.14142830380302, + "strokeColor": "#000000", + "backgroundColor": "#fab005", + "width": 118, + "height": 44, + "seed": 401487070, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "type": "text", + "id": "3T91hXa5" + }, + { + "id": "ERGP-6B-o_nvkEDx5dB7a", + "type": "arrow" + }, + { + "id": "unowG2N9zd5xJu4o3fMj2", + "type": "arrow" + } + ], + "updated": 1673557662245, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 197, + "versionNonce": 746230622, + "isDeleted": false, + "id": "3T91hXa5", + "fillStyle": "hachure", + "strokeWidth": 1, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 521.8407164631168, + "y": -119.64142830380302, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 42, + "height": 25, + "seed": 1289916418, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455114, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": ".475", + "rawText": ".475", + "baseline": 18, + "textAlign": "center", + "verticalAlign": "middle", + "containerId": "q8wopbObwLVrzweRnPGG0", + "originalText": ".475" + }, + { + "type": "arrow", + "version": 606, + "versionNonce": 575329630, + "isDeleted": false, + "id": "RUhKbNbhGwaZvPYqTkXgp", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -232.30161040370336, + "y": -47.094807045471995, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 52.78540325854044, + "height": 47.14817514551622, + "seed": 1414523166, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557477251, + "link": null, + "locked": false, + "startBinding": { + "elementId": "EX6i7DHZ6HsAhCUR6vw_N", + "gap": 5.70002447854813, + "focus": 0.5983759541516698 + }, + "endBinding": { + "elementId": "rg6qAGZuPy6WsSN8fQhyE", + "gap": 1.5235902749463435, + "focus": 0.831260212766223 + }, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 52.78540325854044, + -47.14817514551622 + ] + ] + }, + { + "type": "freedraw", + "version": 154, + "versionNonce": 80508830, + "isDeleted": false, + "id": "bBCQvEChkysrnUlA8bfuc", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 196.8407164631168, + "y": -120.98862123315388, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 2, + "height": 20, + "seed": 1205157826, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455114, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 8 + ], + [ + 0, + 10 + ], + [ + 0, + 14 + ], + [ + 0, + 15 + ], + [ + 0, + 17 + ], + [ + 0, + 18 + ], + [ + -2, + 18 + ], + [ + -2, + 20 + ], + [ + -2, + 20 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "freedraw", + "version": 153, + "versionNonce": 1443813698, + "isDeleted": false, + "id": "3LGLWiyyXP5Kg6-816_st", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 188.8407164631168, + "y": -110.98862123315385, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 23, + "height": 0, + "seed": 988878174, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455114, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 3, + 0 + ], + [ + 5, + 0 + ], + [ + 9, + 0 + ], + [ + 11, + 0 + ], + [ + 15, + 0 + ], + [ + 18, + 0 + ], + [ + 20, + 0 + ], + [ + 23, + 0 + ], + [ + 23, + 0 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "freedraw", + "version": 158, + "versionNonce": 2044187614, + "isDeleted": false, + "id": "IhVOIZ8zEZQ4606hJJ_Kx", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -6.159283536883208, + "y": -122.98862123315388, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 3, + "height": 23, + "seed": 2019293058, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455114, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 3 + ], + [ + 1, + 5 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 3, + 11 + ], + [ + 3, + 14 + ], + [ + 3, + 16 + ], + [ + 3, + 17 + ], + [ + 3, + 20 + ], + [ + 2, + 21 + ], + [ + 2, + 22 + ], + [ + 2, + 23 + ], + [ + 2, + 23 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "freedraw", + "version": 155, + "versionNonce": 254173442, + "isDeleted": false, + "id": "E7KcrmL9ppF309Z2S3V9K", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -14.159283536883208, + "y": -112.98862123315385, + "strokeColor": "#495057", + "backgroundColor": "transparent", + "width": 22, + "height": 4, + "seed": 1159903646, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557455115, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 2, + 0 + ], + [ + 5, + 0 + ], + [ + 9, + 0 + ], + [ + 12, + 2 + ], + [ + 15, + 3 + ], + [ + 17, + 3 + ], + [ + 18, + 3 + ], + [ + 19, + 3 + ], + [ + 20, + 3 + ], + [ + 20, + 4 + ], + [ + 22, + 4 + ], + [ + 22, + 4 + ] + ], + "lastCommittedPoint": null, + "simulatePressure": true, + "pressures": [] + }, + { + "type": "rectangle", + "version": 229, + "versionNonce": 632137758, + "isDeleted": false, + "id": "rg6qAGZuPy6WsSN8fQhyE", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": -177.99261687021658, + "y": -146.4404441498205, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 557.4999999999999, + "height": 104.58245454719084, + "seed": 515225410, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "id": "ERGP-6B-o_nvkEDx5dB7a", + "type": "arrow" + }, + { + "id": "RUhKbNbhGwaZvPYqTkXgp", + "type": "arrow" + } + ], + "updated": 1673557455115, + "link": null, + "locked": false + }, + { + "type": "text", + "version": 228, + "versionNonce": 1434370178, + "isDeleted": false, + "id": "Kno1XWDW", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 0.8684356551517567, + "y": -73.76284550859057, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 183, + "height": 25, + "seed": 437638622, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557626476, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "90% Old Guidance", + "rawText": "90% Old Guidance", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "90% Old Guidance" + }, + { + "type": "text", + "version": 436, + "versionNonce": 1851988574, + "isDeleted": false, + "id": "qErGBrIX", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 568.046656893837, + "y": -60.67235643463164, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 153, + "height": 50, + "seed": 248899074, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557657016, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "~16% Drop On \nCurrent Price", + "rawText": "~16% Drop On \nCurrent Price", + "baseline": 43, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "~16% Drop On \nCurrent Price" + }, + { + "id": "Gm89yDFiwM6eORIcizREI", + "type": "rectangle", + "x": 457.5010590551533, + "y": -285.43435530064914, + "width": 148, + "height": 60, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 99344414, + "version": 63, + "versionNonce": 1279625922, + "isDeleted": false, + "boundElements": [ + { + "type": "text", + "id": "8tjANKBv" + } + ], + "updated": 1673557601971, + "link": null, + "locked": false + }, + { + "id": "8tjANKBv", + "type": "text", + "x": 467.5010590551533, + "y": -267.93435530064914, + "width": 128, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 806772034, + "version": 47, + "versionNonce": 750713438, + "isDeleted": false, + "boundElements": null, + "updated": 1673557601971, + "link": null, + "locked": false, + "text": "Quoted Price", + "rawText": "Quoted Price", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "center", + "verticalAlign": "middle", + "baseline": 18, + "containerId": "Gm89yDFiwM6eORIcizREI", + "originalText": "Quoted Price" + }, + { + "id": "unowG2N9zd5xJu4o3fMj2", + "type": "arrow", + "x": 535.1010590551534, + "y": -72.63435530064913, + "width": 3.199999999999818, + "height": 77.60000000000002, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 638328478, + "version": 41, + "versionNonce": 234433858, + "isDeleted": false, + "boundElements": null, + "updated": 1673557662245, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 3.199999999999818, + 77.60000000000002 + ] + ], + "lastCommittedPoint": null, + "startBinding": { + "elementId": "q8wopbObwLVrzweRnPGG0", + "focus": 0.15294700750043963, + "gap": 12.507073003153891 + }, + "endBinding": { + "elementId": "3XtWSC0o5JP_z7HRZN-5r", + "focus": 0.022480918044437755, + "gap": 7.068305177627451 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "type": "text", + "version": 84, + "versionNonce": 231473822, + "isDeleted": true, + "id": "LKCGsXBC", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 630.1961296221514, + "y": -113.50532816349386, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 129, + "height": 25, + "seed": 1251736030, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "id": "cEGUOKdJgOB3XVb0Z9mv8", + "type": "arrow" + } + ], + "updated": 1673557640136, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "Old Guidance", + "rawText": "Old Guidance", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "Old Guidance" + }, + { + "type": "text", + "version": 45, + "versionNonce": 295982530, + "isDeleted": true, + "id": "wUd55VY0", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 630.1045508340992, + "y": 26.70729608691704, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "width": 134, + "height": 25, + "seed": 628883074, + "groupIds": [], + "roundness": null, + "boundElements": [ + { + "id": "cEGUOKdJgOB3XVb0Z9mv8", + "type": "arrow" + }, + { + "id": "hSzRR81VVejpuvCqe5nCp", + "type": "arrow" + } + ], + "updated": 1673557641293, + "link": null, + "locked": false, + "fontSize": 20, + "fontFamily": 1, + "text": "New Guidance", + "rawText": "New Guidance", + "baseline": 18, + "textAlign": "left", + "verticalAlign": "top", + "containerId": null, + "originalText": "New Guidance" + }, + { + "type": "arrow", + "version": 212, + "versionNonce": 70733122, + "isDeleted": true, + "id": "cEGUOKdJgOB3XVb0Z9mv8", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "angle": 0, + "x": 702.9605498751013, + "y": -78.378312000373, + "strokeColor": "#000000", + "backgroundColor": "#ced4da", + "width": 2.107738569683119, + "height": 91.76854742948744, + "seed": 1185112670, + "groupIds": [], + "roundness": null, + "boundElements": [], + "updated": 1673557641611, + "link": null, + "locked": false, + "startBinding": null, + "endBinding": null, + "lastCommittedPoint": null, + "startArrowhead": null, + "endArrowhead": "arrow", + "points": [ + [ + 0, + 0 + ], + [ + 2.107703620674566, + 46.36953073026058 + ], + [ + 2.107738569683119, + 91.76854742948744 + ] + ] + }, + { + "id": "hSzRR81VVejpuvCqe5nCp", + "type": "arrow", + "x": 699.9010590551534, + "y": 62.565644699350855, + "width": 4.500951999150402, + "height": 68.47600226796504, + "angle": 0, + "strokeColor": "#862e9c", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 990713218, + "version": 109, + "versionNonce": 1067221442, + "isDeleted": true, + "boundElements": null, + "updated": 1673557646049, + "link": null, + "locked": false, + "points": [ + [ + 0, + 0 + ], + [ + 4.500951999150402, + -68.47600226796504 + ] + ], + "lastCommittedPoint": null, + "startBinding": null, + "endBinding": { + "elementId": "qErGBrIX", + "focus": 0.049152843136056286, + "gap": 3.9619988660174386 + }, + "startArrowhead": null, + "endArrowhead": "arrow" + }, + { + "id": "zM0WPTALuGdQqtogSD_wm", + "type": "rectangle", + "x": 458.3010590551533, + "y": -322.2343553006491, + "width": 135.2, + "height": 109.59999999999998, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 1549768798, + "version": 65, + "versionNonce": 2005969154, + "isDeleted": true, + "boundElements": null, + "updated": 1673557568971, + "link": null, + "locked": false + }, + { + "id": "62ddgmZE", + "type": "text", + "x": 496.70105905515317, + "y": -275.2343553006491, + "width": 70, + "height": 50, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 667406622, + "version": 43, + "versionNonce": 988550722, + "isDeleted": true, + "boundElements": null, + "updated": 1673557556977, + "link": null, + "locked": false, + "text": "Quoted\nPrice", + "rawText": "Quoted\nPrice", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 43, + "containerId": null, + "originalText": "Quoted\nPrice" + }, + { + "id": "jWYPN3qr", + "type": "text", + "x": 492.7010590551533, + "y": -326.43435530064914, + "width": 11, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 1405740418, + "version": 3, + "versionNonce": 1916134722, + "isDeleted": true, + "boundElements": null, + "updated": 1673557561163, + "link": null, + "locked": false, + "text": "", + "rawText": "", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "" + }, + { + "id": "5NDvAJfl", + "type": "text", + "x": 502.3010590551533, + "y": -329.63435530064913, + "width": 11, + "height": 25, + "angle": 0, + "strokeColor": "#000000", + "backgroundColor": "transparent", + "fillStyle": "hachure", + "strokeWidth": 0.5, + "strokeStyle": "solid", + "roughness": 2, + "opacity": 100, + "groupIds": [], + "roundness": null, + "seed": 1112210626, + "version": 27, + "versionNonce": 697147778, + "isDeleted": true, + "boundElements": null, + "updated": 1673557566334, + "link": null, + "locked": false, + "text": "", + "rawText": "", + "fontSize": 20, + "fontFamily": 1, + "textAlign": "left", + "verticalAlign": "top", + "baseline": 18, + "containerId": null, + "originalText": "" + } + ], + "appState": { + "theme": "light", + "viewBackgroundColor": "#ffffff", + "currentItemStrokeColor": "#000000", + "currentItemBackgroundColor": "transparent", + "currentItemFillStyle": "hachure", + "currentItemStrokeWidth": 0.5, + "currentItemStrokeStyle": "solid", + "currentItemRoughness": 2, + "currentItemOpacity": 100, + "currentItemFontFamily": 1, + "currentItemFontSize": 20, + "currentItemTextAlign": "left", + "currentItemStartArrowhead": null, + "currentItemEndArrowhead": "arrow", + "scrollX": 439.2989409448467, + "scrollY": 472.24685530064914, + "zoom": { + "value": 1.25 + }, + "currentItemRoundness": "sharp", + "gridSize": null, + "colorPalette": {} + }, + "files": {} +} +``` +%% \ No newline at end of file diff --git a/pricing/Price Guidance Application.png b/pricing/Price Guidance Application.png new file mode 100644 index 0000000..975907e Binary files /dev/null and b/pricing/Price Guidance Application.png differ diff --git a/pscp.md b/pscp.md index 781c571..2a38226 100644 --- a/pscp.md +++ b/pscp.md @@ -1,4 +1,4 @@ -pscp.exe is a part of putty and can be used to transfer files through ssh - -example: +pscp.exe is a part of putty and can be used to transfer files through ssh + +example: pscp.exe -pw ******** ptrowbridge@usmidlnx01:/home/ptrowbridge/pt_share/*.backup "C:\Users\PTrowbridge\OneDrive - The HC Companies, Inc\Backups" \ No newline at end of file diff --git a/r.md b/r.md index 0e80057..65a5260 100644 --- a/r.md +++ b/r.md @@ -1,45 +1,45 @@ -installation ---------------------------------------- -* to install R on ubuntu can to [r download page](https://cran.r-project.org/) -* there are instruction on what to add to sources.list. -* After doing apt-get update, will probably need to add the public key which is addressed [here](https://askubuntu.com/questions/13065/how-do-i-fix-the-gpg-error-no-pubkey#15272) -* then do `sudo apt-get install r-base` - - -using grid.arrange -https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html - -set and mirror axis limits: -``` -scale_y_continuous( - breaks=seq(glob$PriceMin, glob$PriceMax, round(glob$StdDev * .5,2)), - limits = c(glob$PriceMin, glob$PriceMax) - ) + -``` - -how to loop through rows of a column -``` -for (i in dim1) { - for (j in i) { - print(j); - } -} -``` - -build a list of plots and use grid.arrange -``` -do.call(grid.arrange,plot_list) -``` - -re-sort a dataframe and print each row of a column -``` -dim1 <- dim1[order(dim1$list),]; -for (i in dim1) { - for (j in i) { - print(j); - } -} -``` - -to run a script from the command line -`R --vanilla < scriptfile.R` +installation +--------------------------------------- +* to install R on ubuntu can to [r download page](https://cran.r-project.org/) +* there are instruction on what to add to sources.list. +* After doing apt-get update, will probably need to add the public key which is addressed [here](https://askubuntu.com/questions/13065/how-do-i-fix-the-gpg-error-no-pubkey#15272) +* then do `sudo apt-get install r-base` + + +using grid.arrange +https://cran.r-project.org/web/packages/gridExtra/vignettes/arrangeGrob.html + +set and mirror axis limits: +``` +scale_y_continuous( + breaks=seq(glob$PriceMin, glob$PriceMax, round(glob$StdDev * .5,2)), + limits = c(glob$PriceMin, glob$PriceMax) + ) + +``` + +how to loop through rows of a column +``` +for (i in dim1) { + for (j in i) { + print(j); + } +} +``` + +build a list of plots and use grid.arrange +``` +do.call(grid.arrange,plot_list) +``` + +re-sort a dataframe and print each row of a column +``` +dim1 <- dim1[order(dim1$list),]; +for (i in dim1) { + for (j in i) { + print(j); + } +} +``` + +to run a script from the command line +`R --vanilla < scriptfile.R` diff --git a/sr.ht.md b/sr.ht.md index c0e921c..39c18eb 100644 --- a/sr.ht.md +++ b/sr.ht.md @@ -1,5 +1,5 @@ -invite link -https://meta.sr.ht/register/K8XW9Hyl86fdL0f925ertqEv - - -must have public key (ssh-keygen) upoaded to your account for git pushing +invite link +https://meta.sr.ht/register/K8XW9Hyl86fdL0f925ertqEv + + +must have public key (ssh-keygen) upoaded to your account for git pushing diff --git a/tmux.md b/tmux.md index 6fe6e7a..40ab0a6 100644 --- a/tmux.md +++ b/tmux.md @@ -1,45 +1,45 @@ -`Ctlr+B` activiates command entry (called the prefix) - -panes ----------------------------------- -prefix + % = split pane right -prefix + " = split pane below -prefix + / = switch panes -prefix + z = maximize/minimize pane -prefix + x = kill pane -prefix + = resize - -windows ----------------------------------- -prefix + c = create new window -prefix + w = create window selection prompt -prefix + , = rename window - -sessions ----------------------------------- -prefix + d = detach session -tmux ls = list sesions -tmux attach -t 0 = attach to session 0 - - -colors ----------------------------------- -setup a `.tmux.conf` file with this line `set -g default-terminal 'screen-256color'` -point tmux to it with `tmux source-file ~/.tmux.conf` - - -fonts ----------------------------------- -powerline fonts -https://github.com/vim-airline/vim-airline -https://github.com/powerline/fonts -sudo apt-get install fonts-powerline - -plugins ----------------------------------- -using tmux plugin manager to install tmux-resurrect -plugin manager: https://github.com/tmux-plugins/tpm -resurrect: https://github.com/tmux-plugins/tmux-resurrect -use + I to install plugins - - +`Ctlr+B` activiates command entry (called the prefix) + +panes +---------------------------------- +prefix + % = split pane right +prefix + " = split pane below +prefix + / = switch panes +prefix + z = maximize/minimize pane +prefix + x = kill pane +prefix + = resize + +windows +---------------------------------- +prefix + c = create new window +prefix + w = create window selection prompt +prefix + , = rename window + +sessions +---------------------------------- +prefix + d = detach session +tmux ls = list sesions +tmux attach -t 0 = attach to session 0 + + +colors +---------------------------------- +setup a `.tmux.conf` file with this line `set -g default-terminal 'screen-256color'` +point tmux to it with `tmux source-file ~/.tmux.conf` + + +fonts +---------------------------------- +powerline fonts +https://github.com/vim-airline/vim-airline +https://github.com/powerline/fonts +sudo apt-get install fonts-powerline + +plugins +---------------------------------- +using tmux plugin manager to install tmux-resurrect +plugin manager: https://github.com/tmux-plugins/tpm +resurrect: https://github.com/tmux-plugins/tmux-resurrect +use + I to install plugins + + diff --git a/ubuntu/mount.md b/ubuntu/mount.md index 588732e..a2e3176 100644 --- a/ubuntu/mount.md +++ b/ubuntu/mount.md @@ -1,6 +1,6 @@ -for windows ------------------- - -* `apt install cifs-utils` -* create target folder `mkdir //mnt/onedrive` +for windows +------------------ + +* `apt install cifs-utils` +* create target folder `mkdir //mnt/onedrive` * `sudo mount.cifs //192.168.1.89/Users/fleet/OneDrive onedrive/ -o user=fleet` \ No newline at end of file diff --git a/ubuntu/networking.md b/ubuntu/networking.md index f28ccd9..4d8d9e9 100644 --- a/ubuntu/networking.md +++ b/ubuntu/networking.md @@ -1,25 +1,25 @@ -scanning services that are running: - -sudo nmap -T Aggressive -A -v 127.0.0.1 -p 1-10000 - -sudo netstat --tcp --udp --listening --program - -lists programs with port numbers: `sudo netstat -tup` - -sudo lsof +M -i4 -i6 - -# list all established connection that are not internal only" -sudo sockstat | grep "ESTAB" | grep -v ".*192\.168\.1\.110.*192\.168\.1\.110.*" | grep -v ".*127\.0\.0\.1.*127\.0\.0\.1.*" - -let's encrypt certbot instructions for apache: -https://certbot.eff.org/lets-encrypt/ubuntubionic-apache - - -ip setup: -https://help.ubuntu.com/lts/serverguide/network-configuration.html - - -## network interfaces -`ip link` lists all interfaces -multipass setup some dummy interfaces and left them there. -to delete did `ip link delete mpqemubr0-dummy` +scanning services that are running: + +sudo nmap -T Aggressive -A -v 127.0.0.1 -p 1-10000 + +sudo netstat --tcp --udp --listening --program + +lists programs with port numbers: `sudo netstat -tup` + +sudo lsof +M -i4 -i6 + +# list all established connection that are not internal only" +sudo sockstat | grep "ESTAB" | grep -v ".*192\.168\.1\.110.*192\.168\.1\.110.*" | grep -v ".*127\.0\.0\.1.*127\.0\.0\.1.*" + +let's encrypt certbot instructions for apache: +https://certbot.eff.org/lets-encrypt/ubuntubionic-apache + + +ip setup: +https://help.ubuntu.com/lts/serverguide/network-configuration.html + + +## network interfaces +`ip link` lists all interfaces +multipass setup some dummy interfaces and left them there. +to delete did `ip link delete mpqemubr0-dummy` diff --git a/ubuntu/new_server.md b/ubuntu/new_server.md index 73a9cee..8c62db1 100644 --- a/ubuntu/new_server.md +++ b/ubuntu/new_server.md @@ -1,43 +1,43 @@ -apt update -``` -sudo apt update -sudo apt upgrade -//sometimes network-manager service is not running after update and cannot resolve addresses -sudo service network-manager start -sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf -``` -also had to reference [this article](https://askubuntu.com/questions/368435/how-do-i-fix-dns-resolving-which-doesnt-work-after-upgrading-to-ubuntu-13-10-s) - -version control /etc -``` -cd //etc -sudo git init -sudo git add . -sudo git commit -m "initial setup" -``` - -pspg pager -``` -sudp apt-get install pspg -``` - -postgres -``` -sudo vim /etc/apt/sources.list.d/pgdg.list -deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main -wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - -sudo apt-get update -sudo apt-get install postgresql-11 -``` - -vundle -``` -git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim -``` - -dotfiles (depends on vundle currently) -``` -git clone "https://fleetside@bitbucket.com/fleetside/dotfiles.git" -cp -R ~/dotfiles/. ~/ -sudo rm -r dotfiles/ -``` +apt update +``` +sudo apt update +sudo apt upgrade +//sometimes network-manager service is not running after update and cannot resolve addresses +sudo service network-manager start +sudo ln -sf /run/resolvconf/resolv.conf /etc/resolv.conf +``` +also had to reference [this article](https://askubuntu.com/questions/368435/how-do-i-fix-dns-resolving-which-doesnt-work-after-upgrading-to-ubuntu-13-10-s) + +version control /etc +``` +cd //etc +sudo git init +sudo git add . +sudo git commit -m "initial setup" +``` + +pspg pager +``` +sudp apt-get install pspg +``` + +postgres +``` +sudo vim /etc/apt/sources.list.d/pgdg.list +deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main +wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - +sudo apt-get update +sudo apt-get install postgresql-11 +``` + +vundle +``` +git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim +``` + +dotfiles (depends on vundle currently) +``` +git clone "https://fleetside@bitbucket.com/fleetside/dotfiles.git" +cp -R ~/dotfiles/. ~/ +sudo rm -r dotfiles/ +``` diff --git a/ubuntu/system_service.md b/ubuntu/system_service.md deleted file mode 100644 index 4ff24d6..0000000 --- a/ubuntu/system_service.md +++ /dev/null @@ -1,21 +0,0 @@ -`//etc/systemd/system/filename.service` - -``` -[Unit] -Description=forecast_api -After=network.target - -[Service] -ExecStart=/usr/bin/node //opt/forecast_api/index.js -Restart=always -User=fc_api -Environemnt=NODE_ENV=production -WorkingDirectory=//opt/forecast_api - -[Install] -WantedBy=multi-user.target -``` - -`systemctl enable forecast.api` - -`systemctl start forecast_api.service` \ No newline at end of file diff --git a/ufw.md b/ufw.md index 06e8a2a..032a809 100644 --- a/ufw.md +++ b/ufw.md @@ -1,43 +1,43 @@ -if you dont specify a protocol it allows either tcp/udp - -**ports** -``` -sudo ufw allow 22 -sudo ufw allow 22/tcp -``` - -**ranges** -``` -sudo ufw allow 6000:6007/tcp -sudo ufw allow 6000:6007/udp -``` - -**specific ip** -``` -sudo ufw allow from 203.0.113.4 -sudo ufw allow from 203.0.113.4 to any port 22 -``` - -enable firewall `suod ufw enable` - - -## inquirey -`sudo ufw status numbered` - pt@r710:~$ sudo ufw status numbered - Status: active - - To Action From - -- ------ ---- - [ 1] 22/tcp ALLOW IN Anywhere - [ 2] 5432 ALLOW IN Anywhere - [ 3] 5440 ALLOW IN Anywhere - [ 4] 10000 ALLOW IN Anywhere - [ 5] 443/tcp ALLOW IN Anywhere - [ 6] 5433/tcp ALLOW IN Anywhere - [ 7] 22/tcp (v6) ALLOW IN Anywhere (v6) - [ 8] 5432 (v6) ALLOW IN Anywhere (v6) - [ 9] 5440 (v6) ALLOW IN Anywhere (v6) - [10] 10000 (v6) ALLOW IN Anywhere (v6) - [11] 443/tcp (v6) ALLOW IN Anywhere (v6) - [12] 5433/tcp (v6) ALLOW IN Anywhere (v6) - +if you dont specify a protocol it allows either tcp/udp + +**ports** +``` +sudo ufw allow 22 +sudo ufw allow 22/tcp +``` + +**ranges** +``` +sudo ufw allow 6000:6007/tcp +sudo ufw allow 6000:6007/udp +``` + +**specific ip** +``` +sudo ufw allow from 203.0.113.4 +sudo ufw allow from 203.0.113.4 to any port 22 +``` + +enable firewall `suod ufw enable` + + +## inquirey +`sudo ufw status numbered` + pt@r710:~$ sudo ufw status numbered + Status: active + + To Action From + -- ------ ---- + [ 1] 22/tcp ALLOW IN Anywhere + [ 2] 5432 ALLOW IN Anywhere + [ 3] 5440 ALLOW IN Anywhere + [ 4] 10000 ALLOW IN Anywhere + [ 5] 443/tcp ALLOW IN Anywhere + [ 6] 5433/tcp ALLOW IN Anywhere + [ 7] 22/tcp (v6) ALLOW IN Anywhere (v6) + [ 8] 5432 (v6) ALLOW IN Anywhere (v6) + [ 9] 5440 (v6) ALLOW IN Anywhere (v6) + [10] 10000 (v6) ALLOW IN Anywhere (v6) + [11] 443/tcp (v6) ALLOW IN Anywhere (v6) + [12] 5433/tcp (v6) ALLOW IN Anywhere (v6) + diff --git a/vim.md b/vim.md index 8f75368..a456b86 100644 --- a/vim.md +++ b/vim.md @@ -1,85 +1,84 @@ -:Ex - use built in explorer to eplore at location -:colorscheme with autocomplete -:vs veritcale split -:sh horizontal split -:edit open a file -:ls list buffers -:b picka buffer - - -plugins ------------------------- -Vundler -* install per below -* add to .vimrc `Plugin 'gmarik/Vundle.vim'` and run :PluginInstall - -NERDtree -* add to .vimrc `Plugin 'scrooloose/nerdtree'` and run :PluginInstall -* call with :NERDtree - -fugitive - git command in a split -* add to .vimrc `Plugin 'tpope/vim-fugitive'` and run :PluginInstall -* :Gdiff, :Gstatus etc. - -powerline -* vim status and git status info -* add to .vimrc `Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}` and run :PluginInstall - - -Vundler ---------------- -git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim - -add the following to ~/.vimrc: -``` -set nocompatible " be iMproved, required -filetype off " required - -" set the runtime path to include Vundle and initialize -set rtp+=~/.vim/bundle/Vundle.vim -call vundle#begin() -" alternatively, pass a path where Vundle should install plugins -"call vundle#begin('~/some/path/here') - -" let Vundle manage Vundle, required -Plugin 'VundleVim/Vundle.vim' - -" The following are examples of different formats supported. -" Keep Plugin commands between vundle#begin/end. -" plugin on GitHub repo -Plugin 'tpope/vim-fugitive' -" plugin from http://vim-scripts.org/vim/scripts.html -" Plugin 'L9' -" Git plugin not hosted on GitHub -Plugin 'git://git.wincent.com/command-t.git' -" git repos on your local machine (i.e. when working on your own plugin) -Plugin 'file:///home/gmarik/path/to/plugin' -" The sparkup vim script is in a subdirectory of this repo called vim. -" Pass the path to set the runtimepath properly. -Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} -" Install L9 and avoid a Naming conflict if you've already installed a -" different version somewhere else. -" Plugin 'ascenator/L9', {'name': 'newL9'} - -" All of your Plugins must be added before the following line -call vundle#end() " required -filetype plugin indent on " required -" To ignore plugin indent changes, instead use: -"filetype plugin on -" -" Brief help -" :PluginList - lists configured plugins -" :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate -" :PluginSearch foo - searches for foo; append `!` to refresh local cache -" :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal -" -" see :h vundle for more details or wiki for FAQ -" Put your non-Plugin stuff after this line -``` - -after a large apt update, something got messed up with characters and colors, simply doing `syntax on` fixed the problem - -when using NERDtree: -* open `o` -* open with a horizontal split `i` -* open with a vertical split `s` \ No newline at end of file +- :Ex - use built in explorer to eplore at location + :colorscheme with autocomplete + :vs veritcale split + :sh horizontal split + :edit open a file + :ls list buffers + :b picka buffer +- +- plugins + ------------------------ + Vundler + * install per below + * add to .vimrc `Plugin 'gmarik/Vundle.vim'` and run :PluginInstall + + NERDtree + * add to .vimrc `Plugin 'scrooloose/nerdtree'` and run :PluginInstall + * call with :NERDtree + + fugitive - git command in a split + * add to .vimrc `Plugin 'tpope/vim-fugitive'` and run :PluginInstall + * :Gdiff, :Gstatus etc. + + powerline + * vim status and git status info + * add to .vimrc `Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}` and run :PluginInstall + + + Vundler + --------------- + git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim + + add the following to ~/.vimrc: + ``` + set nocompatible " be iMproved, required + filetype off " required + + " set the runtime path to include Vundle and initialize + set rtp+=~/.vim/bundle/Vundle.vim + call vundle#begin() + " alternatively, pass a path where Vundle should install plugins + "call vundle#begin('~/some/path/here') + + " let Vundle manage Vundle, required + Plugin 'VundleVim/Vundle.vim' + + " The following are examples of different formats supported. + " Keep Plugin commands between vundle#begin/end. + " plugin on GitHub repo + Plugin 'tpope/vim-fugitive' + " plugin from http://vim-scripts.org/vim/scripts.html + " Plugin 'L9' + " Git plugin not hosted on GitHub + Plugin 'git://git.wincent.com/command-t.git' + " git repos on your local machine (i.e. when working on your own plugin) + Plugin 'file:///home/gmarik/path/to/plugin' + " The sparkup vim script is in a subdirectory of this repo called vim. + " Pass the path to set the runtimepath properly. + Plugin 'rstacruz/sparkup', {'rtp': 'vim/'} + " Install L9 and avoid a Naming conflict if you've already installed a + " different version somewhere else. + " Plugin 'ascenator/L9', {'name': 'newL9'} + + " All of your Plugins must be added before the following line + call vundle#end() " required + filetype plugin indent on " required + " To ignore plugin indent changes, instead use: + "filetype plugin on + " + " Brief help + " :PluginList - lists configured plugins + " :PluginInstall - installs plugins; append `!` to update or just :PluginUpdate + " :PluginSearch foo - searches for foo; append `!` to refresh local cache + " :PluginClean - confirms removal of unused plugins; append `!` to auto-approve removal + " + " see :h vundle for more details or wiki for FAQ + " Put your non-Plugin stuff after this line + ``` + + after a large apt update, something got messed up with characters and colors, simply doing `syntax on` fixed the problem + + when using NERDtree: + * open `o` + * open with a horizontal split `i` + * open with a vertical split `s` \ No newline at end of file diff --git a/wekan.md b/wekan.md index 2ac17be..fb87619 100644 --- a/wekan.md +++ b/wekan.md @@ -1,14 +1,14 @@ -https://github.com/wekan/wekan-snap/wiki/Install - - -`snap set wekan root-url='https://example.com/something'` - -`snap set wekan port='3001'` - -caddy files exist but not understood: //var/snap/wekan/common - -### Mail Setup -https://github.com/wekan/wekan/wiki/Troubleshooting-Mail - -sudo snap set wekan mail-url='smtp://paul%40hptrow.me:password@mail.gandi.net:587/?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=true' -sudo snap set wekan mail-from='Wekan Team Boards ' +https://github.com/wekan/wekan-snap/wiki/Install + + +`snap set wekan root-url='https://example.com/something'` + +`snap set wekan port='3001'` + +caddy files exist but not understood: //var/snap/wekan/common + +### Mail Setup +https://github.com/wekan/wekan/wiki/Troubleshooting-Mail + +sudo snap set wekan mail-url='smtp://paul%40hptrow.me:password@mail.gandi.net:587/?ignoreTLS=true&tls={rejectUnauthorized:false}&secure=true' +sudo snap set wekan mail-from='Wekan Team Boards '